Search in sources :

Example 1 with DefaultCustomPropertyFunctionEntity

use of eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity in project hale by halestudio.

the class DefaultCustomPropertyFunctionTypeTest method testWriteRead.

/**
 * Test if a simple lookup table containing only string values is the same
 * when converted to DOM and back again.
 */
@Test
public void testWriteRead() {
    DefaultCustomPropertyFunction f = new DefaultCustomPropertyFunction();
    f.setIdentifier("ident");
    f.setFunctionType("groovy");
    f.setName("My function");
    f.setFunctionDefinition(Value.of(new Text("a + b")));
    List<DefaultCustomPropertyFunctionEntity> sources = new ArrayList<>();
    sources.add(createEntity("a", 1, 1, false));
    sources.add(createEntity("b", 0, 1, false));
    f.setSources(sources);
    f.setTarget(createEntity(null, 1, 1, false));
    List<DefaultCustomPropertyFunctionParameter> parameters = new ArrayList<>();
    DefaultCustomPropertyFunctionParameter param1 = new DefaultCustomPropertyFunctionParameter();
    param1.setName("gender");
    Set<String> enumeration = new TreeSet<>();
    enumeration.add("male");
    enumeration.add("female");
    param1.setMinOccurrence(1);
    param1.setMaxOccurrence(1);
    param1.setEnumeration(enumeration);
    parameters.add(param1);
    DefaultCustomPropertyFunctionParameter param2 = new DefaultCustomPropertyFunctionParameter();
    param2.setName("name");
    param2.setBindingClass(String.class);
    param2.setMinOccurrence(0);
    param2.setMaxOccurrence(1);
    parameters.add(param2);
    DefaultCustomPropertyFunctionParameter param3 = new DefaultCustomPropertyFunctionParameter();
    param3.setName("flag");
    param3.setBindingClass(Boolean.class);
    param3.setMinOccurrence(1);
    param3.setMaxOccurrence(1);
    param3.setDefaultValue(Value.of(false));
    String p3display = "Awesome flag";
    param3.setDisplayName(p3display);
    String p3desc = "Awesome flag estimated in 2016.\nAll rights conserved.";
    param3.setDescription(p3desc);
    parameters.add(param3);
    f.setParameters(parameters);
    // explanation
    Map<Locale, Value> templates = new HashMap<>();
    templates.put(Locale.ROOT, Value.of(new Text("Hello")));
    templates.put(Locale.GERMAN, Value.of(new Text("Hallo")));
    templates.put(Locale.FRANCE, Value.of(new Text("Salut")));
    DefaultCustomFunctionExplanation explanation = new DefaultCustomFunctionExplanation(templates, null);
    f.setExplanation(explanation);
    // convert to DOM
    Element fragment = HaleIO.getComplexElement(f);
    // DEBUG
    System.out.println(XmlUtil.serialize(fragment));
    // convert back
    DefaultCustomPropertyFunction conv = HaleIO.getComplexValue(fragment, DefaultCustomPropertyFunction.class, null);
    // checks
    assertNotNull(conv);
    assertEquals(f.getIdentifier(), conv.getIdentifier());
    assertEquals(f.getName(), conv.getName());
    assertEquals(f.getFunctionType(), conv.getFunctionType());
    // function definition
    Text text = conv.getFunctionDefinition().as(Text.class);
    assertNotNull(text);
    assertEquals("a + b", text.getText());
    // sources
    assertEquals(2, conv.getSources().size());
    DefaultCustomPropertyFunctionEntity source1 = conv.getSources().get(0);
    assertEquals("a", source1.getName());
    assertEquals(1, source1.getMinOccurrence());
    assertEquals(1, source1.getMaxOccurrence());
    DefaultCustomPropertyFunctionEntity source2 = conv.getSources().get(1);
    assertEquals("b", source2.getName());
    assertEquals(0, source2.getMinOccurrence());
    // target
    assertNotNull(conv.getTarget());
    assertEquals(null, conv.getTarget().getName());
    // parameters
    assertEquals(3, conv.getParameters().size());
    DefaultCustomPropertyFunctionParameter cp1 = conv.getParameters().get(0);
    assertEquals("gender", cp1.getName());
    assertEquals(2, cp1.getEnumeration().size());
    DefaultCustomPropertyFunctionParameter cp2 = conv.getParameters().get(1);
    assertEquals("name", cp2.getName());
    assertEquals(0, cp2.getMinOccurrence());
    assertEquals(1, cp2.getMaxOccurrence());
    assertEquals(String.class, cp2.getBindingClass());
    DefaultCustomPropertyFunctionParameter cp3 = conv.getParameters().get(2);
    assertEquals("flag", cp3.getName());
    assertEquals(1, cp3.getMinOccurrence());
    assertEquals(1, cp3.getMaxOccurrence());
    assertEquals(Boolean.class, cp3.getBindingClass());
    assertEquals(false, cp3.getDefaultValue().as(Boolean.class));
    assertEquals(p3display, cp3.getDisplayName());
    assertEquals(p3desc, cp3.getDescription());
    // explanation
    assertNotNull(conv.getExplanation());
    Map<Locale, Value> tempConv = conv.getExplanation().getTemplates();
    assertEquals(3, tempConv.size());
    Value tempRoot = tempConv.get(Locale.ROOT);
    assertNotNull(tempRoot);
    assertEquals("Hello", tempRoot.as(Text.class).getText());
    Value tempGerman = tempConv.get(Locale.GERMAN);
    assertNotNull(tempGerman);
    assertEquals("Hallo", tempGerman.as(Text.class).getText());
    Value tempFrance = tempConv.get(Locale.FRANCE);
    assertNotNull(tempFrance);
    assertEquals("Salut", tempFrance.as(Text.class).getText());
}
Also used : Locale(java.util.Locale) HashMap(java.util.HashMap) DefaultCustomPropertyFunctionParameter(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionParameter) Element(org.w3c.dom.Element) ArrayList(java.util.ArrayList) Text(eu.esdihumboldt.hale.common.core.io.Text) DefaultCustomPropertyFunctionEntity(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity) DefaultCustomPropertyFunction(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunction) TreeSet(java.util.TreeSet) Value(eu.esdihumboldt.hale.common.core.io.Value) DefaultCustomFunctionExplanation(eu.esdihumboldt.hale.common.align.custom.DefaultCustomFunctionExplanation) Test(org.junit.Test)

Example 2 with DefaultCustomPropertyFunctionEntity

use of eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity in project hale by halestudio.

the class DefaultCustomPropertyFunctionTypeTest method createEntity.

private DefaultCustomPropertyFunctionEntity createEntity(String name, int min, int max, boolean eager) {
    DefaultCustomPropertyFunctionEntity result = new DefaultCustomPropertyFunctionEntity();
    result.setName(name);
    result.setMinOccurrence(min);
    result.setMaxOccurrence(max);
    result.setEager(eager);
    // XXX
    result.setBindingClass(String.class);
    return result;
}
Also used : DefaultCustomPropertyFunctionEntity(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity)

Example 3 with DefaultCustomPropertyFunctionEntity

use of eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity in project hale by halestudio.

the class CustomGroovyTransformation method createGroovyBinding.

private Binding createGroovyBinding(ListMultimap<String, PropertyValue> variables, Cell cell, Cell typeCell, InstanceBuilder builder, TransformationLog log, ExecutionContext executionContext, TypeDefinition targetInstanceType) {
    Binding binding = GroovyUtil.createBinding(builder, cell, typeCell, log, executionContext, targetInstanceType);
    // create bindings for inputs
    for (DefaultCustomPropertyFunctionEntity source : customFunction.getSources()) {
        String varName = source.getName();
        boolean useInstanceVariable = useInstanceVariableForSource(source);
        List<PropertyValue> values = variables.get(varName);
        if (source.isEager() || source.getMaxOccurrence() > 1 || source.getMaxOccurrence() == ParameterDefinition.UNBOUNDED) {
            // multiple values
            InstanceAccessorArrayList<Object> valueList = new InstanceAccessorArrayList<>();
            for (PropertyValue value : values) {
                valueList.add(GroovyTransformation.getUseValue(value.getValue(), useInstanceVariable));
            }
            binding.setVariable(varName, valueList);
        } else {
            // single value
            if (values.isEmpty()) {
                // no value
                // -> use null value for missing variable
                binding.setVariable(varName, null);
            } else {
                // value
                binding.setVariable(varName, GroovyTransformation.getUseValue(values.get(0).getValue(), useInstanceVariable));
            }
        }
    }
    // create binding(s) for parameters
    binding.setVariable(BINDING_PARAMS, new ParameterBinding(cell, customFunction.getDescriptor()));
    return binding;
}
Also used : Binding(groovy.lang.Binding) ParameterBinding(eu.esdihumboldt.hale.common.align.model.impl.mdexpl.ParameterBinding) InstanceAccessorArrayList(eu.esdihumboldt.cst.functions.groovy.internal.InstanceAccessorArrayList) PropertyValue(eu.esdihumboldt.hale.common.align.transformation.function.PropertyValue) DefaultCustomPropertyFunctionEntity(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity) ParameterBinding(eu.esdihumboldt.hale.common.align.model.impl.mdexpl.ParameterBinding)

Example 4 with DefaultCustomPropertyFunctionEntity

use of eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity in project hale by halestudio.

the class PropertyFunctionScriptPage method addActions.

@Override
protected void addActions(ToolBar toolbar, CompilingSourceViewer<GroovyAST> viewer) {
    super.addActions(toolbar, viewer);
    PageHelp.createToolItem(toolbar, this);
    TypeStructureTray.createToolItem(toolbar, this, SchemaSpaceID.SOURCE, new TypeProvider() {

        @Override
        public Collection<? extends TypeDefinition> getTypes() {
            // create a dummy type with the variables as children
            DefaultTypeDefinition dummy = new DefaultTypeDefinition(TypeStructureTray.VARIABLES_TYPE_NAME);
            DefaultCustomPropertyFunction cf = getWizard().getUnfinishedFunction();
            int index = 0;
            for (EntityDefinition variable : getVariables()) {
                DefaultCustomPropertyFunctionEntity source = cf.getSources().get(index);
                if (variable.getDefinition() instanceof PropertyDefinition) {
                    PropertyDefinition prop = (PropertyDefinition) variable.getDefinition();
                    TypeDefinition propertyType;
                    boolean useInstanceValue = CustomGroovyTransformation.useInstanceVariableForSource(source);
                    if (useInstanceValue) {
                        // use instance type
                        propertyType = prop.getPropertyType();
                    } else {
                        // use dummy type with only the
                        // binding/HasValueFlag copied
                        DefaultTypeDefinition crippledType = new DefaultTypeDefinition(prop.getPropertyType().getName());
                        crippledType.setConstraint(prop.getPropertyType().getConstraint(Binding.class));
                        crippledType.setConstraint(prop.getPropertyType().getConstraint(HasValueFlag.class));
                        propertyType = crippledType;
                    }
                    DefaultPropertyDefinition dummyProp = new DefaultPropertyDefinition(new QName(source.getName()), dummy, propertyType);
                    // number of times
                    if (source.isEager())
                        dummyProp.setConstraint(Cardinality.CC_ANY_NUMBER);
                }
                index++;
            }
            return Collections.singleton(dummy);
        }
    });
    TypeStructureTray.createToolItem(toolbar, this, SchemaSpaceID.TARGET, new TypeProvider() {

        @Override
        public Collection<? extends TypeDefinition> getTypes() {
            DefaultCustomPropertyFunctionEntity target = getWizard().getUnfinishedFunction().getTarget();
            if (target != null) {
                return Collections.singleton(createDummyType(target));
            }
            return Collections.emptyList();
        }
    });
}
Also used : DefaultTypeDefinition(eu.esdihumboldt.hale.common.schema.model.impl.DefaultTypeDefinition) DefaultCustomPropertyFunction(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunction) PropertyEntityDefinition(eu.esdihumboldt.hale.common.align.model.impl.PropertyEntityDefinition) EntityDefinition(eu.esdihumboldt.hale.common.align.model.EntityDefinition) DefaultPropertyDefinition(eu.esdihumboldt.hale.common.schema.model.impl.DefaultPropertyDefinition) QName(javax.xml.namespace.QName) TypeProvider(eu.esdihumboldt.hale.ui.functions.groovy.internal.TypeStructureTray.TypeProvider) Collection(java.util.Collection) DefaultCustomPropertyFunctionEntity(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity) DefaultPropertyDefinition(eu.esdihumboldt.hale.common.schema.model.impl.DefaultPropertyDefinition) PropertyDefinition(eu.esdihumboldt.hale.common.schema.model.PropertyDefinition) DefaultTypeDefinition(eu.esdihumboldt.hale.common.schema.model.impl.DefaultTypeDefinition) TypeDefinition(eu.esdihumboldt.hale.common.schema.model.TypeDefinition)

Example 5 with DefaultCustomPropertyFunctionEntity

use of eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity in project hale by halestudio.

the class CustomPropertyFunctionEntitiesPage method createTargetEntity.

private DefaultCustomPropertyFunctionEntity createTargetEntity(BindingOrType value) {
    DefaultCustomPropertyFunctionEntity result = new DefaultCustomPropertyFunctionEntity();
    result.setMinOccurrence(1);
    result.setMaxOccurrence(1);
    // not applicable for target
    result.setEager(false);
    if (value.isUseBinding()) {
        result.setBindingType(null);
        result.setBindingClass(value.getBinding());
    } else {
        result.setBindingClass(null);
        result.setBindingType(value.getType());
    }
    return result;
}
Also used : DefaultCustomPropertyFunctionEntity(eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity)

Aggregations

DefaultCustomPropertyFunctionEntity (eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionEntity)6 DefaultCustomPropertyFunction (eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunction)2 InstanceAccessorArrayList (eu.esdihumboldt.cst.functions.groovy.internal.InstanceAccessorArrayList)1 DefaultCustomFunctionExplanation (eu.esdihumboldt.hale.common.align.custom.DefaultCustomFunctionExplanation)1 DefaultCustomPropertyFunctionParameter (eu.esdihumboldt.hale.common.align.custom.DefaultCustomPropertyFunctionParameter)1 EntityDefinition (eu.esdihumboldt.hale.common.align.model.EntityDefinition)1 PropertyEntityDefinition (eu.esdihumboldt.hale.common.align.model.impl.PropertyEntityDefinition)1 ParameterBinding (eu.esdihumboldt.hale.common.align.model.impl.mdexpl.ParameterBinding)1 PropertyValue (eu.esdihumboldt.hale.common.align.transformation.function.PropertyValue)1 Text (eu.esdihumboldt.hale.common.core.io.Text)1 Value (eu.esdihumboldt.hale.common.core.io.Value)1 PropertyDefinition (eu.esdihumboldt.hale.common.schema.model.PropertyDefinition)1 TypeDefinition (eu.esdihumboldt.hale.common.schema.model.TypeDefinition)1 DefaultPropertyDefinition (eu.esdihumboldt.hale.common.schema.model.impl.DefaultPropertyDefinition)1 DefaultTypeDefinition (eu.esdihumboldt.hale.common.schema.model.impl.DefaultTypeDefinition)1 TypeProvider (eu.esdihumboldt.hale.ui.functions.groovy.internal.TypeStructureTray.TypeProvider)1 Binding (groovy.lang.Binding)1 ArrayList (java.util.ArrayList)1 Collection (java.util.Collection)1 HashMap (java.util.HashMap)1