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.milyn.edisax.model.internal.Field}. * @param field the {@link org.milyn.edisax.model.internal.Field} to populate. * @param node the Field element. * @throws org.milyn.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);
field.setTruncatable(isTruncatable(truncatableFields, field.isTruncatable())); if ( truncatableComponents != null ) { for (Component component : field.getComponents()) { component.setTruncatable(isTruncatable(truncatableComponents, component.isTruncatable()));
public Field addComponent(Component component) { getComponents().add(component); return this; }
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]);
/** * 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; }
/** * Process all {@link org.milyn.edisax.model.internal.Field} in List and insert info into the {@link org.milyn.ejc.ClassModel}. * @param fields the {@link org.milyn.edisax.model.internal.Field} to process. * @param parent the JClass 'owning' the {@link org.milyn.edisax.model.internal.Field}. * @throws IllegalNameException when name found in a xmltag-attribute is a java keyword. */ private void processFields(List<Field> fields, BindingConfig parent) throws IllegalNameException { for (Field field : fields) { LOG.debug("Parsing field " + field.getXmltag()); pushNode(field); if (field.getComponents() != null && field.getComponents().size() > 0) { //Add class type. BindingConfig childBinding = createChildAndConnectWithParent(parent, field, 1, DelimiterType.FIELD); parent.getWireBindings().add(childBinding); // Now add the components to the field... processComponents(field.getComponents(), childBinding); } else { // Add primitive type. createAndAddSimpleType(field, parent, DelimiterType.FIELD); } popNode(); } collapseSingleFieldSegmentBinding(parent); if(parent.getWriteMethod() != null) { parent.getWriteMethod().addTerminatingDelimiter(DelimiterType.SEGMENT); parent.getWriteMethod().addFlush(); } }
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);
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());
field.setTruncatable(isTruncatable(truncatableFields, field.isTruncatable())); if ( truncatableComponents != null ) { for (Component component : field.getComponents()) { component.setTruncatable(isTruncatable(truncatableComponents, component.isTruncatable()));
public Field addComponent(Component component) { getComponents().add(component); return this; }
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]);
/** * Set values in {@link org.milyn.edisax.model.internal.Field}. * @param field the {@link org.milyn.edisax.model.internal.Field} to populate. * @param node the Field element. * @throws org.milyn.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); }