use of io.atlasmap.v2.Field in project atlasmap by atlasmap.
the class JavaValidationService method validateClass.
private void validateClass(String mappingId, JavaField field, List<Validation> validations) {
String clazzName = field.getClassName();
if (clazzName != null && !clazzName.isEmpty()) {
Integer major = detectClassVersion(clazzName);
if (major != null) {
if (major > versionMap.get(System.getProperty("java.vm.specification.version"))) {
Validation validation = new Validation();
validation.setScope(ValidationScope.MAPPING);
validation.setId(mappingId);
validation.setMessage(String.format("Class '%s' for field is compiled against unsupported JDK version: %d current JDK: %d", clazzName, major, versionMap.get(System.getProperty("java.vm.specification.version"))));
validation.setStatus(ValidationStatus.ERROR);
validations.add(validation);
}
} else {
Validation validation = new Validation();
validation.setScope(ValidationScope.MAPPING);
validation.setId(mappingId);
validation.setMessage(String.format("Class '%s' for field is not found on the classpath", clazzName));
validation.setStatus(ValidationStatus.ERROR);
validations.add(validation);
}
}
}
use of io.atlasmap.v2.Field in project atlasmap by atlasmap.
the class JavaValidationServiceTest method testValidateMappingInvalidSeparateSourceFieldType.
@Test
public void testValidateMappingInvalidSeparateSourceFieldType() {
AtlasMapping atlasMapping = getAtlasMappingFullValid();
Mapping separateFieldMapping = AtlasModelFactory.createMapping(MappingType.SEPARATE);
separateFieldMapping.setId("separate.firstName.lastName");
JavaField bIJavaField = javaModelFactory.createJavaField();
bIJavaField.setFieldType(FieldType.BOOLEAN);
bIJavaField.setValue(Boolean.TRUE);
bIJavaField.setPath("firstName");
separateFieldMapping.getInputField().add(bIJavaField);
JavaField sOJavaField = javaModelFactory.createJavaField();
sOJavaField.setFieldType(FieldType.STRING);
sOJavaField.setPath("lastName");
sOJavaField.setIndex(0);
separateFieldMapping.getOutputField().add(sOJavaField);
atlasMapping.getMappings().getMapping().add(separateFieldMapping);
validations.addAll(sourceValidationService.validateMapping(atlasMapping));
validations.addAll(targetValidationService.validateMapping(atlasMapping));
assertTrue(validationHelper.hasErrors());
assertFalse(validationHelper.hasWarnings());
assertFalse(validationHelper.hasInfos());
assertEquals(new Integer(1), new Integer(validationHelper.getCount()));
Validation validation = validations.get(0);
assertNotNull(validation);
assertEquals(ValidationScope.MAPPING, validation.getScope());
assertEquals("separate.firstName.lastName", validation.getId());
assertEquals("Input field 'firstName' must be of type 'STRING' for a Separate Mapping", validation.getMessage());
assertEquals(ValidationStatus.ERROR, validation.getStatus());
}
use of io.atlasmap.v2.Field in project atlasmap by atlasmap.
the class JavaValidationServiceTest method testValidateMappingInvalidCombineSourceFieldType.
@Test
public void testValidateMappingInvalidCombineSourceFieldType() {
AtlasMapping atlasMapping = getAtlasMappingFullValid();
Mapping combineFieldMapping = AtlasModelFactory.createMapping(MappingType.COMBINE);
combineFieldMapping.setId("combine.firstName.lastName");
JavaField bIJavaField = javaModelFactory.createJavaField();
bIJavaField.setFieldType(FieldType.STRING);
bIJavaField.setValue(Boolean.TRUE);
bIJavaField.setPath("firstName");
combineFieldMapping.getInputField().add(bIJavaField);
JavaField sOJavaField = javaModelFactory.createJavaField();
sOJavaField.setFieldType(FieldType.BOOLEAN);
sOJavaField.setPath("lastName");
sOJavaField.setIndex(0);
combineFieldMapping.getOutputField().add(sOJavaField);
atlasMapping.getMappings().getMapping().add(combineFieldMapping);
validations.addAll(sourceValidationService.validateMapping(atlasMapping));
validations.addAll(targetValidationService.validateMapping(atlasMapping));
assertTrue(validationHelper.hasErrors());
assertFalse(validationHelper.hasWarnings());
assertFalse(validationHelper.hasInfos());
assertEquals(new Integer(1), new Integer(validationHelper.getCount()));
Validation validation = validations.get(0);
assertNotNull(validation);
assertEquals(ValidationScope.MAPPING, validation.getScope());
assertEquals("combine.firstName.lastName", validation.getId());
assertEquals("Output field 'lastName' must be of type 'STRING' for a Combine Mapping", validation.getMessage());
assertEquals(ValidationStatus.ERROR, validation.getStatus());
}
use of io.atlasmap.v2.Field in project atlasmap by atlasmap.
the class JsonFieldWriter method createValueNode.
private JsonNode createValueNode(Field jsonField) {
FieldType type = jsonField.getFieldType();
Object value = jsonField.getValue();
JsonNode valueNode = null;
if (FieldType.STRING.equals(type)) {
if (value != null) {
valueNode = rootNode.textNode(String.valueOf(value));
} else {
valueNode = rootNode.nullNode();
}
} else if (FieldType.CHAR.equals(type)) {
valueNode = rootNode.textNode(Character.toString((char) value));
} else if (FieldType.BOOLEAN.equals(type)) {
valueNode = rootNode.booleanNode((Boolean) value);
} else if (FieldType.INTEGER.equals(type)) {
valueNode = rootNode.numberNode((Integer) value);
} else if (FieldType.DOUBLE.equals(type) || FieldType.FLOAT.equals(type)) {
valueNode = rootNode.numberNode(new BigDecimal(String.valueOf(value)));
} else if (FieldType.SHORT.equals(type)) {
valueNode = rootNode.numberNode(Short.valueOf(String.valueOf(value)));
} else if (FieldType.LONG.equals(type)) {
valueNode = rootNode.numberNode(Long.valueOf(String.valueOf(value)));
} else if (FieldType.BYTE.equals(type)) {
valueNode = rootNode.numberNode(Byte.valueOf(String.valueOf(value)));
} else {
valueNode = rootNode.nullNode();
}
if (LOG.isDebugEnabled()) {
String valueClass = value == null ? "null" : value.getClass().getName();
LOG.debug("Converted JsonField value to ValueNode. Type: " + type + ", value: " + value + "(" + valueClass + "), node class: " + valueNode.getClass().getName() + ", node: " + valueNode);
}
return valueNode;
}
use of io.atlasmap.v2.Field in project atlasmap by atlasmap.
the class JsonFieldWriter method write.
@Override
public void write(AtlasInternalSession session) throws AtlasException {
Field targetField = session.head().getTargetField();
if (targetField == null) {
throw new AtlasException(new IllegalArgumentException("Argument 'jsonField' cannot be null"));
}
if (LOG.isDebugEnabled()) {
LOG.debug("Field: " + AtlasModelFactory.toString(targetField));
LOG.debug("Field type=" + targetField.getFieldType() + " path=" + targetField.getPath() + " v=" + targetField.getValue());
}
AtlasPath path = new AtlasPath(targetField.getPath());
String lastSegment = path.getLastSegment();
ObjectNode parentNode = this.rootNode;
String parentSegment = null;
for (String segment : path.getSegments()) {
if (!segment.equals(lastSegment)) {
// this is a parent node.
if (LOG.isDebugEnabled()) {
LOG.debug("Now processing parent segment: " + segment);
}
JsonNode childNode = getChildNode(parentNode, parentSegment, segment);
if (childNode == null) {
childNode = createParentNode(parentNode, parentSegment, segment);
} else if (childNode instanceof ArrayNode) {
int index = AtlasPath.indexOfSegment(segment);
ArrayNode arrayChild = (ArrayNode) childNode;
if (arrayChild.size() < (index + 1)) {
if (LOG.isDebugEnabled()) {
LOG.debug("Object Array is too small, resizing to accomodate index: " + index + ", current array: " + arrayChild);
}
// index available
while (arrayChild.size() < (index + 1)) {
arrayChild.addObject();
}
if (LOG.isDebugEnabled()) {
LOG.debug("Object Array after resizing: " + arrayChild);
}
}
childNode = arrayChild.get(index);
}
parentNode = (ObjectNode) childNode;
parentSegment = segment;
} else {
// this is the last segment of the path, write the value
if (targetField.getFieldType() == FieldType.COMPLEX) {
createParentNode(parentNode, parentSegment, segment);
return;
}
if (LOG.isDebugEnabled()) {
LOG.debug("Now processing field value segment: " + segment);
}
writeValue(parentNode, parentSegment, segment, targetField);
}
}
}
Aggregations