use of eu.esdihumboldt.hale.common.align.model.ChildContext in project hale by halestudio.
the class AbstractMergeCellMigratorTest method toSimpleDef.
/**
* Covnert an entity definition to a representation as simple name list
* definition.
*
* @param def the entity definition
* @return the simple definition representation
*/
protected List<String> toSimpleDef(EntityDefinition def) {
List<String> names = new ArrayList<>();
names.add(def.getType().getName().getLocalPart());
for (ChildContext child : def.getPropertyPath()) {
names.add(child.getChild().getName().getLocalPart());
}
return names;
}
use of eu.esdihumboldt.hale.common.align.model.ChildContext in project hale by halestudio.
the class DefaultAlignmentIOTest method testCellDisableSaveLoad.
/**
* Tests cell disable save and load.
*
* @throws Exception if an error occurs
*/
@Test
public void testCellDisableSaveLoad() throws Exception {
DefaultAlignment baseAlignment = new DefaultAlignment();
MutableAlignment alignment = new DefaultAlignment();
Schema schema = TestUtil.loadSchema(getClass().getResource("/testdata/simple/t1.xsd").toURI());
Iterator<? extends TypeDefinition> iter = schema.getMappingRelevantTypes().iterator();
TypeDefinition t = iter.next();
if (!t.getName().getLocalPart().equals("T1")) {
t = iter.next();
}
// generate base alignment
DefaultCell cell1 = new DefaultCell();
cell1.setTransformationIdentifier("trans1");
ListMultimap<String, Type> source = ArrayListMultimap.create();
source.put(null, new DefaultType(new TypeEntityDefinition(t, SchemaSpaceID.SOURCE, null)));
cell1.setSource(source);
ListMultimap<String, Type> target = ArrayListMultimap.create();
target.put(null, new DefaultType(new TypeEntityDefinition(t, SchemaSpaceID.TARGET, null)));
cell1.setTarget(target);
DefaultCell cell2 = new DefaultCell();
cell2.setTransformationIdentifier("trans2");
List<ChildContext> childContext2 = new ArrayList<ChildContext>();
PropertyDefinition child2 = DefinitionUtil.getChild(t, new QName("a1")).asProperty();
childContext2.add(new ChildContext(child2));
ListMultimap<String, Property> source2 = ArrayListMultimap.create();
source2.put(null, new DefaultProperty(new PropertyEntityDefinition(t, childContext2, SchemaSpaceID.SOURCE, null)));
cell2.setSource(source2);
ListMultimap<String, Property> target2 = ArrayListMultimap.create();
target2.put(null, new DefaultProperty(new PropertyEntityDefinition(t, childContext2, SchemaSpaceID.TARGET, null)));
cell2.setTarget(target2);
DefaultCell cell3 = new DefaultCell();
cell3.setTransformationIdentifier("trans3");
List<ChildContext> childContext3 = new ArrayList<ChildContext>();
PropertyDefinition child3 = DefinitionUtil.getChild(t, new QName("b1")).asProperty();
childContext3.add(new ChildContext(child3));
ListMultimap<String, Property> source3 = ArrayListMultimap.create();
source3.put(null, new DefaultProperty(new PropertyEntityDefinition(t, childContext3, SchemaSpaceID.SOURCE, null)));
cell3.setSource(source3);
ListMultimap<String, Property> target3 = ArrayListMultimap.create();
target3.put(null, new DefaultProperty(new PropertyEntityDefinition(t, childContext3, SchemaSpaceID.TARGET, null)));
cell3.setTarget(target3);
baseAlignment.addCell(cell1);
baseAlignment.addCell(cell2);
String baseDisableCellId = cell2.getId();
baseAlignment.addCell(cell3);
String extendedDisableCellId = cell3.getId();
assertEquals(3, baseAlignment.getCells().size());
Cell typeCell = baseAlignment.getTypeCells().iterator().next();
assertEquals(2, baseAlignment.getPropertyCells(typeCell).size());
// test disable, it should not be with the related property cells
cell2.setDisabledFor(cell1, true);
assertEquals(1, baseAlignment.getPropertyCells(typeCell).size());
assertTrue(cell2.getDisabledFor().contains(cell1.getId()));
cell2.setDisabledFor(cell1, false);
assertFalse(cell2.getDisabledFor().contains(cell1.getId()));
cell2.setDisabledFor(cell1, true);
assertEquals(1, baseAlignment.getPropertyCells(typeCell).size());
// save base alignment
File baseAlignmentFile = tmp.newFile("alignment_base.xml");
System.out.println(baseAlignmentFile.getAbsolutePath());
saveAlignment(baseAlignment, new BufferedOutputStream(new FileOutputStream(baseAlignmentFile)));
// load base alignment
MutableAlignment baseAlignment2 = loadAlignment(new FileInputStream(baseAlignmentFile), schema, schema);
typeCell = baseAlignment2.getTypeCells().iterator().next();
assertEquals(3, baseAlignment2.getCells().size());
// test again that it is still disabled
assertEquals(1, baseAlignment2.getPropertyCells(typeCell).size());
// disable the remaining enabled cell in extended alignment
addBaseAlignment(alignment, baseAlignmentFile.toURI(), schema, schema);
assertEquals(1, alignment.getBaseAlignments().size());
String usedPrefix = alignment.getBaseAlignments().keySet().iterator().next();
File alignmentFile = tmp.newFile("alignment_extended.xml");
// check cells
typeCell = alignment.getTypeCells().iterator().next();
assertEquals(3, alignment.getCells().size());
assertEquals(1, alignment.getPropertyCells(typeCell).size());
// disable remaining cell
((ModifiableCell) alignment.getPropertyCells(typeCell, false, false).iterator().next()).setDisabledFor(typeCell, true);
assertEquals(0, alignment.getPropertyCells(typeCell).size());
// save / load extended alignment
System.out.println(alignmentFile.getAbsolutePath());
saveAlignment(alignment, new BufferedOutputStream(new FileOutputStream(alignmentFile)));
// load extended
MutableAlignment alignment2 = loadAlignment(new FileInputStream(alignmentFile), schema, schema);
typeCell = alignment2.getTypeCells().iterator().next();
// test disabled again
assertEquals(3, alignment2.getCells().size());
// test again that it is still disabled
assertEquals(0, alignment2.getPropertyCells(typeCell).size());
// more specifically test whether the disables come from base alignment
// or extended alignment
Cell baseDisableCell = alignment2.getCell(usedPrefix + ":" + baseDisableCellId);
Cell extendedDisableCell = alignment2.getCell(usedPrefix + ":" + extendedDisableCellId);
assertTrue(baseDisableCell instanceof BaseAlignmentCell);
assertEquals(1, baseDisableCell.getDisabledFor().size());
assertEquals(1, ((BaseAlignmentCell) baseDisableCell).getBaseDisabledFor().size());
assertEquals(0, ((BaseAlignmentCell) baseDisableCell).getAdditionalDisabledFor().size());
assertTrue(extendedDisableCell instanceof BaseAlignmentCell);
assertEquals(1, extendedDisableCell.getDisabledFor().size());
assertEquals(0, ((BaseAlignmentCell) extendedDisableCell).getBaseDisabledFor().size());
assertEquals(1, ((BaseAlignmentCell) extendedDisableCell).getAdditionalDisabledFor().size());
}
use of eu.esdihumboldt.hale.common.align.model.ChildContext in project hale by halestudio.
the class JaxbToEntityDefinition method convert.
/**
* Converts the given property to a property entity definition.
*
* @param property the property to convert
* @param types the type index to use
* @param schemaSpace the schema space to assign
* @return the property entity definition
*/
public static PropertyEntityDefinition convert(PropertyType property, TypeIndex types, SchemaSpaceID schemaSpace) {
TypeDefinition typeDef = types.getType(asName(property.getType()));
Filter filter = getTypeFilter(property);
List<ChildContext> path = new ArrayList<ChildContext>();
DefinitionGroup parent = typeDef;
for (ChildContextType childContext : property.getChild()) {
if (parent == null) {
throw new IllegalStateException("Could not resolve property entity definition: child not present");
}
Pair<ChildDefinition<?>, List<ChildDefinition<?>>> childs = PropertyBean.findChild(parent, asName(childContext));
// if the child is still null throw an exception
if (childs == null || childs.getFirst() == null) {
String childName = asName(childContext).getLocalPart();
String parentName;
if (parent instanceof Definition<?>) {
parentName = ((Definition<?>) parent).getName().getLocalPart();
} else {
parentName = parent.getIdentifier();
}
throw new IllegalStateException(MessageFormat.format("Could not resolve property entity definition: child {0} not found in parent {1}", childName, parentName));
}
ChildDefinition<?> child = childs.getFirst();
if (childs.getSecond() != null) {
for (ChildDefinition<?> pathElems : childs.getSecond()) {
path.add(new ChildContext(contextName(childContext.getContext()), contextIndex(childContext.getIndex()), createCondition(childContext.getCondition()), pathElems));
}
}
path.add(new ChildContext(contextName(childContext.getContext()), contextIndex(childContext.getIndex()), createCondition(childContext.getCondition()), child));
if (child instanceof DefinitionGroup) {
parent = (DefinitionGroup) child;
} else if (child.asProperty() != null) {
parent = child.asProperty().getPropertyType();
} else {
parent = null;
}
}
return new PropertyEntityDefinition(typeDef, path, schemaSpace, filter);
}
use of eu.esdihumboldt.hale.common.align.model.ChildContext in project hale by halestudio.
the class EntityPopulationCount method evaluateContext.
/**
* count the population for the given entity with all contexts
*
* @param group A {@link Group}
* @param groupDef An {@link EntityDefinition}
*/
private void evaluateContext(Group group, EntityDefinition groupDef) {
List<ChildContext> path = groupDef.getPropertyPath();
if (path != null && !path.isEmpty()) {
ChildContext context = path.get(path.size() - 1);
Object[] values = group.getProperty(context.getChild().getName());
if (values != null) {
// apply the possible source contexts
if (context.getIndex() != null) {
// select only the item at the index
int index = context.getIndex();
if (index < values.length) {
values = new Object[] { values[index] };
} else {
values = new Object[] {};
}
}
if (context.getCondition() != null) {
// select only values that match the condition
List<Object> matchedValues = new ArrayList<Object>();
for (Object value : values) {
if (AlignmentUtil.matchCondition(context.getCondition(), value, group)) {
matchedValues.add(value);
}
}
values = matchedValues.toArray();
}
if (context.getChild().getName().equals(groupDef.getDefinition().getName())) {
increase(groupDef, values.length);
}
for (Object value : values) {
if (value instanceof Group) {
addToPopulation((Group) value, groupDef);
}
}
} else {
increase(groupDef, 0);
}
}
}
use of eu.esdihumboldt.hale.common.align.model.ChildContext in project hale by halestudio.
the class PropertyEntityDialog method getObjectFromSelection.
/**
* @see EntityDialog#getObjectFromSelection(ISelection)
*/
@Override
protected EntityDefinition getObjectFromSelection(ISelection selection) {
if (!selection.isEmpty() && selection instanceof IStructuredSelection) {
Object element = ((IStructuredSelection) selection).getFirstElement();
if (element instanceof EntityDefinition) {
return (EntityDefinition) element;
}
}
if (!selection.isEmpty() && selection instanceof ITreeSelection) {
// create property definition w/ default contexts
TreePath path = ((ITreeSelection) selection).getPaths()[0];
// get parent type
TypeDefinition type = ((PropertyDefinition) path.getFirstSegment()).getParentType();
// determine definition path
List<ChildContext> defPath = new ArrayList<ChildContext>();
for (int i = 0; i < path.getSegmentCount(); i++) {
defPath.add(new ChildContext((ChildDefinition<?>) path.getSegment(i)));
}
// TODO check if property entity definition is applicable?
return new PropertyEntityDefinition(type, defPath, ssid, parentType.getFilter());
}
return null;
}
Aggregations