use of com.onespatial.jrc.tns.oml_to_rif.api.TranslationException in project hale by halestudio.
the class AlignmentToModelAlignmentDigester method translate.
/**
* Translates a {@link HaleAlignment} into an intermediate
* {@link ModelAlignment} format.
*
* @param hal the HALE alignment
* @return {@link ModelAlignment}
* @throws TranslationException
* if any problems occurred during translation
*/
@Override
public ModelAlignment translate(HaleAlignment hal) throws TranslationException {
List<ModelClassMappingCell> classMappings = new ArrayList<ModelClassMappingCell>();
List<ModelAttributeMappingCell> attributeMappings = new ArrayList<ModelAttributeMappingCell>();
ArrayList<ModelStaticAssignmentCell> staticAssigments = new ArrayList<ModelStaticAssignmentCell>();
Alignment source = hal.getAlignment();
Map<String, SchemaElement> sourceFeatures = hal.getSourceElements();
Map<String, SchemaElement> targetFeatures = hal.getTargetElements();
for (ICell cell : source.getMap()) {
IEntity sourceEntity = cell.getEntity1();
IEntity targetEntity = cell.getEntity2();
boolean sourceIsFeatureClass = sourceEntity instanceof FeatureClass;
boolean targetIsFeatureClass = targetEntity instanceof FeatureClass;
if (sourceIsFeatureClass && targetIsFeatureClass) {
// type mapping
classMappings.add(createCell((FeatureClass) sourceEntity, (FeatureClass) targetEntity, sourceFeatures, targetFeatures));
} else if (!sourceIsFeatureClass && !targetIsFeatureClass) {
// property mapping
ModelAttributeMappingCell modelCell = createAttribute(cell, (Property) sourceEntity, (Property) targetEntity, sourceFeatures, targetFeatures);
if (modelCell != null) {
attributeMappings.add(modelCell);
}
} else if (sourceIsFeatureClass && !targetIsFeatureClass) {
// augmentations
ModelStaticAssignmentCell modelCell = createStaticAssignment(cell, (Property) targetEntity, targetFeatures);
if (modelCell != null) {
staticAssigments.add(modelCell);
}
} else {
// $NON-NLS-1$
throw new TranslationException("Unhandled combination");
}
}
return new ModelAlignment(classMappings, attributeMappings, staticAssigments);
}
use of com.onespatial.jrc.tns.oml_to_rif.api.TranslationException in project hale by halestudio.
the class AlignmentToModelAlignmentDigester method createAttribute.
private ModelAttributeMappingCell createAttribute(ICell original, Property sourceEntity, Property targetEntity, Map<String, SchemaElement> sourceFeatures, Map<String, SchemaElement> targetFeatures) {
// FIXME what about composed properties?
if (sourceEntity instanceof ComposedProperty || targetEntity instanceof ComposedProperty) {
// $NON-NLS-1$
report.setFailed(original, "Composed properties not supported");
return null;
}
List<FeatureClass> filter = sourceEntity.getDomainRestriction();
if (filter != null && !filter.isEmpty()) {
// $NON-NLS-1$
report.setWarning(original, "Filters on attributive functions currently not supported in the RIF export");
}
String function = sourceEntity.getTransformation().getService().getLocation();
if (!RenameAttributeFunction.class.getName().equals(function)) {
// $NON-NLS-1$ //$NON-NLS-2$
report.setWarning(original, "Function " + function + " not recognized");
}
IDetailedAbout sourceAbout = DetailedAbout.getDetailedAbout(sourceEntity.getAbout(), true);
IDetailedAbout targetAbout = DetailedAbout.getDetailedAbout(targetEntity.getAbout(), true);
try {
return new ModelAttributeMappingCell(createAttributePath(sourceAbout, sourceFeatures), createAttributePath(targetAbout, targetFeatures));
} catch (TranslationException e) {
report.setFailed(original, e.getMessage());
return null;
}
}
use of com.onespatial.jrc.tns.oml_to_rif.api.TranslationException in project hale by halestudio.
the class UrlToAlignmentDigester method translate.
/**
* Translates an {@link URL} into a HALE {@link Alignment}.
*
* @param source
* {@link URL} the source URL
* @return {@link Alignment}
* @throws TranslationException
* if anything goes wrong during the translation
*/
@Override
public HaleAlignment translate(URL source) throws TranslationException {
if (source == null) {
// $NON-NLS-1$
throw new TranslationException("url is null");
}
Alignment al = new OmlRdfReader().read(source);
ApacheSchemaProvider sp = new ApacheSchemaProvider();
Schema s, t;
try {
URI suri = new URI(al.getSchema1().getLocation());
// if (!suri.isAbsolute()) {
// suri = source.toURI();
// suri = new URI(suri.getScheme(), suri.getUserInfo(),
// suri.getHost(), suri.getPort(),
// al.getSchema1().getLocation(), null, null);
// }
s = sp.loadSchema(suri, null);
t = sp.loadSchema(new URI(al.getSchema2().getLocation()), null);
} catch (Exception e) {
// $NON-NLS-1$
throw new TranslationException("Error loading schemas", e);
}
return new HaleAlignment(al, s.getElements().values(), t.getElements().values());
}
use of com.onespatial.jrc.tns.oml_to_rif.api.TranslationException in project hale by halestudio.
the class ModelClassMappingCell method buildMappingConditions.
private List<ModelMappingCondition> buildMappingConditions(List<Restriction> mappingRestrictions) throws TranslationException {
List<ModelMappingCondition> result;
try {
result = new ArrayList<ModelMappingCondition>();
for (Restriction restriction : mappingRestrictions) {
ModelMappingCondition condition = DIGESTER.translate(CQL.toFilter(restriction.getCqlStr()));
result.add(condition);
}
} catch (CQLException e) {
throw new TranslationException(e);
}
return result;
}
use of com.onespatial.jrc.tns.oml_to_rif.api.TranslationException in project hale by halestudio.
the class AlignmentToModelAlignmentDigester method createStaticAssignment.
private ModelStaticAssignmentCell createStaticAssignment(ICell original, Property targetEntity, Map<String, SchemaElement> targetFeatures) {
String function = targetEntity.getTransformation().getService().getLocation();
if (ConstantValueFunction.class.getName().equals(function)) {
// constant value
String content = null;
for (IParameter param : targetEntity.getTransformation().getParameters()) {
if (param.getName().equals(ConstantValueFunction.DEFAULT_VALUE_PARAMETER_NAME)) {
content = param.getValue();
break;
}
}
IDetailedAbout targetAbout = DetailedAbout.getDetailedAbout(targetEntity.getAbout(), true);
try {
return new ModelStaticAssignmentCell(createAttributePath(targetAbout, targetFeatures), content);
} catch (TranslationException e) {
report.setFailed(original, e.getMessage());
return null;
}
} else if (NilReasonFunction.class.getName().equals(function)) {
// nil reason
String reason = null;
for (IParameter param : targetEntity.getTransformation().getParameters()) {
if (param.getName().equals(NilReasonFunction.PARAMETER_NIL_REASON_TYPE)) {
reason = param.getValue();
break;
}
}
// $NON-NLS-1$
report.setWarning(original, "The nil reason will be set regardless of whether a value for its parent is set or not");
IDetailedAbout targetAbout = DetailedAbout.getDetailedAbout(targetEntity.getAbout(), true);
List<String> properties = new ArrayList<String>(targetAbout.getProperties());
// XXX this is an attribute does it make any difference? //$NON-NLS-1$
properties.add("nilReason");
targetAbout = new DetailedAbout(targetAbout.getNamespace(), targetAbout.getFeatureClass(), properties);
try {
return new ModelStaticAssignmentCell(createAttributePath(targetAbout, targetFeatures), reason);
} catch (TranslationException e) {
report.setFailed(original, e.getMessage());
return null;
}
} else {
// not supported
// $NON-NLS-1$
report.setFailed(original, "Only default value augmentations supported");
return null;
}
}
Aggregations