private static Field copyField(Field oldField, boolean isMandatory) { Field field = new Field(); field.setName(oldField.getName()); field.setXmltag(XmlTagEncoder.encode(oldField.getXmltag())); field.setNodeTypeRef(oldField.getNodeTypeRef()); field.setDocumentation(oldField.getDocumentation()); field.setMaxLength(oldField.getMaxLength()); field.setMinLength(oldField.getMinLength()); field.setRequired(isMandatory); field.setTruncatable(true); field.setDataType(oldField.getDataType()); field.setDataTypeParameters(oldField.getTypeParameters()); field.getComponents().addAll(oldField.getComponents()); return field; }
/** * Add field specific annotations * * @param field * @param attr */ private static void annotateField(Field field, EModelElement attr) { annotate(attr, "truncable", String.valueOf(field.isTruncatable())); annotate(attr, "required", String.valueOf(field.isRequired())); annotate(attr, SmooksMetadata.ANNOTATION_TYPE_KEY, SmooksMetadata.FIELD_TYPE); annotateValueNode(attr, field); }
private static Field convertToField(Component component, boolean isMandatory) { Field field = new Field(); field.setName(component.getName()); field.setXmltag(XmlTagEncoder.encode(component.getXmltag())); field.setNodeTypeRef(component.getNodeTypeRef()); field.setDocumentation(component.getDocumentation()); field.setMaxLength(component.getMaxLength()); field.setMinLength(component.getMinLength()); field.setRequired(isMandatory); field.setTruncatable(true); field.setDataType(component.getDataType()); field.setDataTypeParameters(component.getTypeParameters()); return field; }
/** * Set values in {@link org.dhatim.edisax.model.internal.Field}. * @param field the {@link org.dhatim.edisax.model.internal.Field} to populate. * @param node the Field element. * @throws org.dhatim.edisax.EDIConfigurationException is thrown when values are badly formatted. */ private void setValuesForField(Field field, Node node, String namespacePrefix, MappingNode parent) throws EDIConfigurationException { field.setRequired(getNodeValueAsBoolean(node, "required")); field.setTruncatable(getNodeValueAsBoolean(node, "truncatable")); setValuesForValueNode(node, field, namespacePrefix, parent); }
newClass = classes.get(newClass.getName()); for (Component component : field.getComponents()) { EStructuralFeature attribute = componentToEAttribute(component); if (newClass.getEStructuralFeature(attribute.getName()) == null) { result.setName(toJavaName(field.getXmltag(), false)); result.setLowerBound(field.isRequired() ? 1 : 0); result.setUpperBound(1); result.setEType(newClass);
/** * Converting a {@link Field} to {@link EAttribute} Works only for * {@link Field} where {@link Field#getComponents()} is empty * * @param field * @return */ public static EAttribute fieldToEAttribute(Field field) { if (!field.getComponents().isEmpty()) { throw new IllegalArgumentException( "Can't convert field with components to " + "EAttribute, use fieldToEReference"); } EAttribute attr = EcoreFactory.eINSTANCE.createEAttribute(); attr.setName(toJavaName(field.getXmltag(), false)); attr.setLowerBound(field.isRequired() ? 1 : 0); attr.setUpperBound(1); if (field.getTypeClass() != null) { attr.setEType(toEType(field.getTypeClass())); } else { log.warn("Field " + field.getXmltag() + " has no type! Setting it's type to String"); attr.setEType(XMLTypePackage.Literals.STRING); } addMappingInformation(attr, field); annotateField(field, attr); return attr; }
field.setName(name); field.setNodeTypeRef(id); if (useShortName) { field.setXmltag(XmlTagEncoder.encode(id)); } else { field.setXmltag(XmlTagEncoder.encode(name)); field.setDocumentation(description); component.setRequired(linePart.isMandatory()); populateComponent(component, components.get(linePart.getId())); field.getComponents().add(component);
field.setTruncatable(isTruncatable(truncatableFields, field.isTruncatable())); if (truncatableComponents != null) { for (Component component : field.getComponents()) { component.setTruncatable(isTruncatable(truncatableComponents, component.isTruncatable()));
boolean throwException = false; if (expectedField.isTruncatable()) { throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segmentCode + "], field " + (fieldIndex + 1) + " (" + expectedField.getXmltag() + ") expected to contain " + expectedComponents.size() + " components. Actually contains " + currentFieldComponents.length + " components. Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", expectedField, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields());
int numFieldsMissing = numFieldsExpected - currentSegmentFields.length; for (int i = expectedFields.size() - 1; i > (expectedFields.size() - numFieldsMissing - 1); i--) { if (expectedFields.get(i).isRequired()) { throwException = true; break; if (field.getComponents().size() == 0 && (!currentSegmentFields[i].equals(""))) { validateValueNode(field, currentSegmentFields[i]);
public Field addComponent(Component component) { getComponents().add(component); return this; }
private static Map<String, Field> readFields(Reader reader, Map<String, Component> components, boolean useShortName) throws IOException, EdiParseException { Map<String, Field> fields = new HashMap<String, Field>(); BufferedReader _reader = new BufferedReader(reader); moveToNextPart(_reader); Field field = new Field(); String id = populateField(_reader, components, field, useShortName); while (id != null) { fields.put(id, field); moveToNextPart(_reader); field = new Field(); id = populateField(_reader, components, field, useShortName); } return fields; }
/** * Creating a new {@link EClass} based on the information from {@link Field} * used in case we have a complex {@link Field} and we need to create a * class for it. * * @param field * @return */ private static EClass fieldToEClass(Field field) { String classifierName = toJavaName(field.getXmltag(), true); if (field.getNodeTypeRef() != null) { classifierName += "_" + field.getNodeTypeRef(); } EClass newClass = EcoreFactory.eINSTANCE.createEClass(); newClass.setName(classifierName); addMappingInformation(newClass, field); annotate(newClass, ANNOTATION_TYPE_KEY, SmooksMetadata.FIELD_TYPE); annotateValueNode(newClass, field); return newClass; }
List<Component> expectedComponents = expectedField.getComponents(); Component expectedComponent = expectedComponents.get(i); mapComponent(componentMessageVal, expectedComponent, fieldIndex, i, segmentCode, expectedField.getXmltag()); if (expectedField.isRequired() && fieldMessageVal.length() == 0) { throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segmentCode + "], field " + (fieldIndex + 1) + " (" + expectedField.getXmltag() + ") expected to contain a value. Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", expectedField, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields());
/** * Digests attributes and child elements of Field element. * @param node the Field element. * @param field the {@link org.dhatim.edisax.model.internal.Field} to populate * @param namespacePrefix the prefix used to name elements in xml. * @throws org.dhatim.edisax.EDIConfigurationException is thrown when values are badly formatted. */ private void digestField(Node node, Field field, String namespacePrefix, MappingNode parent) throws EDIConfigurationException { setValuesForField(field, node, namespacePrefix, parent); NodeList nodes = node.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { Node currentNode = nodes.item(i); if (currentNode.getNodeName().equalsIgnoreCase(namespacePrefix + "component")) { Component component = new Component(); field.getComponents().add(component); digestComponent(currentNode, component, namespacePrefix, field); } } }
private void addMissingDefinitions(Edimap definitionModel) { Segment ugh = new Segment(); Segment ugt = new Segment(); ugh.setSegcode("UGH"); ugh.setXmltag("UGH"); ugh.addField(new Field("id", UNEdifact41ControlBlockHandlerFactory.NAMESPACE, true)); ugt.setSegcode("UGT"); ugt.setXmltag("UGT"); ugt.addField(new Field("id", UNEdifact41ControlBlockHandlerFactory.NAMESPACE, true)); definitionModel.getSegments().getSegments().add(ugh); definitionModel.getSegments().getSegments().add(ugt); }
private void addFields(List<Field> fields, Element segmentEl) { for(Field field : fields) { Element fieldEl = newElement("field", segmentEl, field); mapBeanProperties(field, fieldEl, "name", "xmltag", "nodeTypeRef", "truncatable", "maxLength", "minLength", "required", "dataType", "dataTypeParametersString|dataTypeParameters"); addComponents(field.getComponents(), fieldEl); } }
Field field = new Field(); segment.getFields().add(field); digestField(currentNode, field, namespacePrefix, segment);
Set<String> names = new HashSet<String>(); for (Field field : fields) { if (field.getComponents().isEmpty()) {