@Override
public MorphScriptBuilder apply(final Task task) throws DMPConverterException {
super.apply(task);
final List<String> metas = new ArrayList<>();
final Optional<Map<String, Integer>> optionalInputSchemaMap = generateInputSchemaMap(task);
final Optional<DataModel> optionalInputDataModel = Optional.ofNullable(task)
.flatMap(task2 -> Optional.ofNullable(task2.getInputDataModel()));
final Optional<Schema> optionalInputSchema = optionalInputDataModel
.flatMap(inputDataModel -> Optional.ofNullable(inputDataModel.getSchema()));
final boolean isXmlSchema = isXmlSchema(optionalInputDataModel);
final List<Tuple5<Optional<String>, javaslang.collection.List<String>, String, Element, Optional<String>>> mappingOutputs = new ArrayList<>();
for (final Mapping mapping : task.getJob().getMappings()) {
metas.add(MorphScriptBuilder.MAPPING_PREFIX + mapping.getUuid());
final Optional<String> optionalDeepestMappingInput = determineDeepestMappingInputAttributePath(mapping, optionalInputSchemaMap);
final Optional<Boolean> optionalSelectValueFromSameSubEntity = determineFilterUseCase(mapping, optionalInputSchema);
final Optional<String> optionalCommonAttributePathOfMappingInputs = determineCommonAttributePathOfMappingInputs(mapping, optionalInputSchema, isXmlSchema);
createTransformation(rules, mapping, optionalDeepestMappingInput, optionalSelectValueFromSameSubEntity, optionalCommonAttributePathOfMappingInputs)
.ifPresent(currentMappingOutputs -> currentMappingOutputs
.forEach(currentMappingOutput -> mappingOutputs.add(Tuple.of(currentMappingOutput._1,
currentMappingOutput._2,
currentMappingOutput._3,
currentMappingOutput._4,
optionalCommonAttributePathOfMappingInputs))));
createLookupTable(maps, mapping.getTransformation());
}
createMappingOutputs(mappingOutputs, rules, doc);
metaName.setTextContent(Joiner.on(", ").join(metas));
return this;
}