use of eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl in project hale by halestudio.
the class ClassificationMappingParameterPage method getConfiguration.
/**
* @see eu.esdihumboldt.hale.ui.function.generic.pages.ParameterPage#getConfiguration()
*/
@Override
public ListMultimap<String, ParameterValue> getConfiguration() {
ListMultimap<String, ParameterValue> configuration = ArrayListMultimap.create();
for (TabItem tabItem : tabs.getSelection()) {
if (tabItem.equals(fromFileItem)) {
// Set the selected lookupTable
IStructuredSelection selection = (IStructuredSelection) lookupTableComboViewer.getSelection();
configuration.put(PARAMETER_LOOKUPTABLE_ID, new ParameterValue(selection.getFirstElement().toString()));
} else {
if (tabItem.equals(manualItem)) {
LookupTable realLookupTable = new LookupTableImpl(lookupTable);
configuration.put(PARAMETER_LOOKUPTABLE, new ParameterValue(Value.complex(realLookupTable)));
}
}
}
switch(notClassifiedActionOptions.indexOf(((IStructuredSelection) notClassifiedActionViewer.getSelection()).getFirstElement())) {
case 1:
notClassifiedAction = "source";
break;
case 2:
notClassifiedAction = "fixed:" + fixedValueText.getText();
break;
case 0:
case -1:
default:
notClassifiedAction = "null";
}
configuration.put(PARAMETER_NOT_CLASSIFIED_ACTION, new ParameterValue(notClassifiedAction));
return configuration;
}
use of eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl in project hale by halestudio.
the class AppSchemaMappingTest method testClassificationHandler.
@Test
public void testClassificationHandler() {
final int FIRST_SOURCE = 1000;
final String FIRST_TARGET = "http://www.example.com/first";
final int SECOND_SOURCE = 2000;
final String SECOND_TARGET = "http://www.example.com/second";
final int THIRD_SOURCE = 3000;
final String THIRD_TARGET = "http://www.example.com/third";
final String FIXED_VALUE = "http://www.example.com/unknown";
final String OCQL_PATTERN = "if_then_else(in(unit_id,%s), Recode(unit_id,%s), %s)";
Cell typeCell = getDefaultTypeCell(unitDenormType, landCoverUnitType);
DefaultCell cell = new DefaultCell();
cell.setTransformationIdentifier(ClassificationMappingFunction.ID);
cell.setSource(getUnitIdSourceProperty(unitDenormType));
cell.setTarget(getMetaDataHrefTargetProperty());
Map<Value, Value> tableValues = new HashMap<Value, Value>();
tableValues.put(new StringValue(FIRST_SOURCE), new StringValue(FIRST_TARGET));
tableValues.put(new StringValue(SECOND_SOURCE), new StringValue(SECOND_TARGET));
tableValues.put(new StringValue(THIRD_SOURCE), new StringValue(THIRD_TARGET));
LookupTable lookupTable = new LookupTableImpl(tableValues);
ListMultimap<String, ParameterValue> parameters = ArrayListMultimap.create();
parameters.put(ClassificationMappingFunction.PARAMETER_LOOKUPTABLE, new ParameterValue(new ComplexValue(lookupTable)));
parameters.put(ClassificationMapping.PARAMETER_NOT_CLASSIFIED_ACTION, new ParameterValue(ClassificationMapping.USE_SOURCE_ACTION));
cell.setTransformationParameters(parameters);
StringBuilder inArgs = new StringBuilder();
StringBuilder recodeArgs = new StringBuilder();
int count = 0;
for (Value sourceValue : tableValues.keySet()) {
inArgs.append(sourceValue.as(String.class));
recodeArgs.append(sourceValue).append(",'").append(tableValues.get(sourceValue)).append("'");
if (count < tableValues.size() - 1) {
inArgs.append(",");
recodeArgs.append(",");
}
count++;
}
final String OCQL_USE_SOURCE = String.format(OCQL_PATTERN, inArgs.toString(), recodeArgs.toString(), "unit_id");
final String OCQL_USE_NULL = String.format(OCQL_PATTERN, inArgs.toString(), recodeArgs.toString(), "Expression.NIL");
final String OCQL_USE_FIXED = String.format(OCQL_PATTERN, inArgs.toString(), recodeArgs.toString(), "'" + FIXED_VALUE + "'");
ClassificationHandler classificationHandler = new ClassificationHandler();
AttributeMappingType attrMapping = classificationHandler.handlePropertyTransformation(typeCell, cell, new AppSchemaMappingContext(mappingWrapper));
assertNotNull(attrMapping.getClientProperty());
assertEquals(1, attrMapping.getClientProperty().size());
assertEquals("xlink:href", attrMapping.getClientProperty().get(0).getName());
assertEquals(OCQL_USE_SOURCE, attrMapping.getClientProperty().get(0).getValue());
assertEquals(TARGET_METADATA, attrMapping.getTargetAttribute());
// reset mapping
initMapping();
parameters.removeAll(ClassificationMapping.PARAMETER_NOT_CLASSIFIED_ACTION);
parameters.put(ClassificationMapping.PARAMETER_NOT_CLASSIFIED_ACTION, new ParameterValue(ClassificationMapping.USE_NULL_ACTION));
cell.setTransformationParameters(parameters);
attrMapping = classificationHandler.handlePropertyTransformation(typeCell, cell, new AppSchemaMappingContext(mappingWrapper));
assertNotNull(attrMapping.getClientProperty());
assertEquals(1, attrMapping.getClientProperty().size());
assertEquals("xlink:href", attrMapping.getClientProperty().get(0).getName());
assertEquals(OCQL_USE_NULL, attrMapping.getClientProperty().get(0).getValue());
assertEquals(TARGET_METADATA, attrMapping.getTargetAttribute());
// reset mapping
initMapping();
parameters.removeAll(ClassificationMapping.PARAMETER_NOT_CLASSIFIED_ACTION);
parameters.put(ClassificationMapping.PARAMETER_NOT_CLASSIFIED_ACTION, new ParameterValue(ClassificationMapping.USE_FIXED_VALUE_ACTION_PREFIX + FIXED_VALUE));
cell.setTransformationParameters(parameters);
attrMapping = classificationHandler.handlePropertyTransformation(typeCell, cell, new AppSchemaMappingContext(mappingWrapper));
assertNotNull(attrMapping.getClientProperty());
assertEquals(1, attrMapping.getClientProperty().size());
assertEquals("xlink:href", attrMapping.getClientProperty().get(0).getName());
assertEquals(OCQL_USE_FIXED, attrMapping.getClientProperty().get(0).getValue());
assertEquals(TARGET_METADATA, attrMapping.getTargetAttribute());
}
use of eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl in project hale by halestudio.
the class ClassificationMappingUtil method getClassificationLookup.
/**
* Get the classification lookup table from the transformation parameters.
*
* @param parameters the transformation parameters
* @param serviceProvider service provider in case a lookup table has to be
* retrieved through a service
* @return the classification lookup table
*/
public static LookupTable getClassificationLookup(Multimap<String, ? extends Value> parameters, ServiceProvider serviceProvider) {
try {
if (!(parameters.get(PARAMETER_LOOKUPTABLE).isEmpty())) {
Collection<? extends Value> tmpMap = parameters.get(PARAMETER_LOOKUPTABLE);
return tmpMap.iterator().next().as(LookupTable.class);
}
if (!(parameters.get(PARAMETER_LOOKUPTABLE_ID).isEmpty())) {
LookupService lookupServiceImpl = serviceProvider.getService(LookupService.class);
Collection<? extends Value> tmpMap = parameters.get(PARAMETER_LOOKUPTABLE_ID);
LookupTableInfo lookupTableInfo = lookupServiceImpl.getTable(tmpMap.iterator().next().as(String.class));
return lookupTableInfo.getTable();
}
} catch (NullPointerException e) {
log.error("Service provider not accessible for retrieving lookup table", e);
}
// For reason of compatibility we need the following code
// lookup table in strangely encoded string parameter
Collection<? extends Value> mappings = parameters.get(PARAMETER_CLASSIFICATIONS);
try {
Map<Value, Value> lookupMap = new HashMap<Value, Value>();
for (Value mapping : mappings) {
String[] parts = mapping.as(String.class).split(" ");
if (parts.length > 0) {
Value target = Value.of(URLDecoder.decode(parts[0], "UTF-8"));
for (int i = 1; i < parts.length; i++) {
lookupMap.put(Value.of(URLDecoder.decode(parts[i], "UTF-8")), target);
}
}
}
return new LookupTableImpl(lookupMap);
} catch (UnsupportedEncodingException e) {
throw new IllegalStateException("Failed to decode classification mapping.");
}
}
use of eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl in project hale by halestudio.
the class LookupTableTypeTest method testComplexLookup.
/**
* Test if a lookup table containing only complex values is the same when
* converted to DOM and back again.
*/
@Test
public void testComplexLookup() {
Map<Value, Value> values2 = createComplexLookup();
LookupTable org2 = new LookupTableImpl(values2);
// convert to DOM
Element fragment = HaleIO.getComplexElement(org2);
// convert back
LookupTable conv = HaleIO.getComplexValue(fragment, LookupTable.class, null);
checkTable(conv, values2);
}
use of eu.esdihumboldt.hale.common.lookup.impl.LookupTableImpl in project hale by halestudio.
the class LookupTableTypeTest method testStringLookup.
/**
* Test if a simple lookup table containing only string values is the same
* when converted to DOM and back again.
*/
@Test
public void testStringLookup() {
Map<Value, Value> values = createStringLookup();
LookupTable org = new LookupTableImpl(values);
// convert to DOM
Element fragment = HaleIO.getComplexElement(org);
// convert back
LookupTable conv = HaleIO.getComplexValue(fragment, LookupTable.class, null);
checkTable(conv, values);
}
Aggregations