private static void annotateValueNode(EModelElement element, ValueNode valueNode) { annotate(element, "datatype", valueNode.getDataType()); annotate(element, "maxLength", String.valueOf(valueNode.getMaxLength())); annotate(element, "minLength", String.valueOf(valueNode.getMinLength())); if (valueNode.getDecoder() != null) { annotate(element, "decoder", valueNode.getDecoder().getClass() .getCanonicalName()); } else { annotate(element, "decoder", ""); } }
private void validateValueNode(ValueNode valueNode, String value) throws EDIParseException { // Return when validation is turned off. if (!getFeature(FEATURE_VALIDATE)) { return; } // Validate type. if (valueNode.getDataType() != null && !valueNode.getDataType().equals("")) { try { valueNode.isValidForType(value); } catch (DataDecodeException e) { throw new EDIParseException(edifactModel.getEdimap(), "Validation of expected type [" + valueNode.getDataType() + "] failed for value [" + value + "]. Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", e, valueNode, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); } } //Test minLength. if (valueNode.getMinLength() != null) { if (value.length() < valueNode.getMinLength()) { throw new EDIParseException(edifactModel.getEdimap(), "Value [" + value + "] should have a length greater than [" + valueNode.getMinLength() + "]. Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", valueNode, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); } } //Test maxLength. if (valueNode.getMaxLength() != null) { if (value.length() > valueNode.getMaxLength()) { throw new EDIParseException(edifactModel.getEdimap(), "Value [" + value + "] exceeds allowed maximum length of [" + valueNode.getMaxLength() + "]. Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", valueNode, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); } } }
valueNode.setDataTypeParameters(result); if ( valueNode.getDataType().equals(EDITypeEnum.CUSTOM_NAME) && customClass == null) { throw new EDIConfigurationException("When using the Custom type in ValueNode the custom class type must exist as the first element in parameters"); } else if ( customClass != null && !valueNode.getDataType().equals(EDITypeEnum.CUSTOM_NAME)) { throw new EDIConfigurationException("When first parameter in list of parameters is not a key-value-pair the type of the ValueNode should be Custom.");
/** * Set values in {@link org.dhatim.edisax.model.internal.ValueNode}. * @param node the {@link org.dhatim.edisax.model.internal.ValueNode} to populate. * @param valueNode the ValueNode element. * @throws org.dhatim.edisax.EDIConfigurationException is thrown when values are badly formatted. */ private void setValuesForValueNode(Node node, ValueNode valueNode, String namespacePrefix, MappingNode parent) throws EDIConfigurationException { setValuesForMappingNode(node, valueNode, namespacePrefix, parent); String type = getAttributeValue(node, "dataType"); if(type != null) { valueNode.setDataType(type); } else { valueNode.setDataType(getAttributeValue(node, "type")); } valueNode.setMinLength(getNodeValueAsInteger(node, "minLength")); valueNode.setMaxLength(getNodeValueAsInteger(node, "maxLength")); String dataTypeParams = getAttributeValue(node, "dataTypeParameters"); if(dataTypeParams != null) { digestParameters(valueNode, dataTypeParams); } else { digestParameters(valueNode, getAttributeValue(node, "typeParameters")); } }