private JClass getCommonType(MappingNode mappingNode, String nodeTypeRef, Map<MappingNode, JClass> typeSet) { Set<Map.Entry<MappingNode, JClass>> commonTypes = typeSet.entrySet(); for(Map.Entry<MappingNode, JClass> typeEntry : commonTypes) { MappingNode entryMappingNode = typeEntry.getKey(); String entryNodeTypeRef = entryMappingNode.getNodeTypeRef(); if(entryMappingNode instanceof Segment) { if(nodeTypeRef.equals(((Segment)entryMappingNode).getSegcode())) { return typeEntry.getValue(); } } else if(entryNodeTypeRef != null && entryMappingNode.getClass() == mappingNode.getClass()) { // Must be the same node type exactly... if(nodeTypeRef.equals(entryNodeTypeRef)) { return typeEntry.getValue(); } } } return null; }
/** * Converting {@link Segment} to {@link EClass} * * @param segment * @return */ public static EClass segmentToEClass(Segment segment) { EClass clazz = segmentGroupToEClass(segment); annotate(clazz, SmooksMetadata.SEGCODE, segment.getSegcode()); annotate(clazz, "segcodePattern", segment.getSegcodePattern() .toString()); annotate(clazz, "truncable", String.valueOf(segment.isTruncatable())); annotate(clazz, "ignoreUnmappedFields", String.valueOf(segment.isIgnoreUnmappedFields())); annotate(clazz, "description", segment.getDescription()); annotate(clazz, SmooksMetadata.ANNOTATION_TYPE_KEY, SmooksMetadata.SEGMENT_TYPE); return clazz; }
/** * Creates a Map given an Edimap. All segments in edimap are stored as values in the Map * with the corresponding segcode as key. * @param edimap the edimap containing segments to be inserted into Map. * @return Map containing all segment in edimap. */ private Map<String, Segment> createImportMap(Edimap edimap) { HashMap<String, Segment> result = new HashMap<String, Segment>(); for (SegmentGroup segmentGroup : edimap.getSegments().getSegments()) { if(segmentGroup instanceof Segment) { result.put(((Segment)segmentGroup).getSegcode(), (Segment) segmentGroup); } } return result; }
/** * Creates a Map given an Edimap. All segments in edimap are stored as values in the Map * with the corresponding segcode as key. * @param edimap the edimap containing segments to be inserted into Map. * @return Map containing all segment in edimap. */ private Map<String, Segment> createImportMap(Edimap edimap) { HashMap<String, Segment> result = new HashMap<String, Segment>(); for (SegmentGroup segmentGroup : edimap.getSegments().getSegments()) { if(segmentGroup instanceof Segment) { result.put(((Segment)segmentGroup).getSegcode(), (Segment) segmentGroup); } } return result; }
/** * Creates a Map given an Edimap. All segments in edimap are stored as values in the Map * with the corresponding segcode as key. * @param edimap the edimap containing segments to be inserted into Map. * @return Map containing all segment in edimap. */ private Map<String, Segment> createImportMap(Edimap edimap) { HashMap<String, Segment> result = new HashMap<String, Segment>(); for (SegmentGroup segmentGroup : edimap.getSegments().getSegments()) { if(segmentGroup instanceof Segment) { result.put(((Segment)segmentGroup).getSegcode(), (Segment) segmentGroup); } } return result; }
/** * Creates a Map given an Edimap. All segments in edimap are stored as values in the Map * with the corresponding segcode as key. * @param edimap the edimap containing segments to be inserted into Map. * @return Map containing all segment in edimap. */ private Map<String, Segment> createImportMap(Edimap edimap) { HashMap<String, Segment> result = new HashMap<String, Segment>(); for (SegmentGroup segmentGroup : edimap.getSegments().getSegments()) { if(segmentGroup instanceof Segment) { result.put(((Segment)segmentGroup).getSegcode(), (Segment) segmentGroup); } } return result; }
/** * Converts {@link Segment} to {@link EReference} * * @param segment * @param refClass * @return */ public static EReference segmentToEReference(Segment segment, EClass refClass) { EReference reference = segmentGroupToEReference(segment, refClass); annotate(reference, SmooksMetadata.ANNOTATION_TYPE_KEY, SmooksMetadata.SEGMENT_TYPE); annotate(reference, SmooksMetadata.SEGCODE, segment.getSegcode()); String name = segment.getSegcode(); char lastChar = reference.getName().charAt(reference.getName().length() - 1); if (Character.isDigit(lastChar)) { name = name + lastChar; } reference.setName(name); return reference; }
/** * This method converting classes for common mapping model * * @param commonModel * @param commonClasses * @param commonPackage */ private Collection<EClass> createCommonClasses(Edimap commonModel, final Map<String, EClass> commonClasses) { Map<String, EClass> result = new HashMap<String, EClass>(); for (SegmentGroup grp : commonModel.getSegments().getSegments()) { // No segment groups are allowed in common part Segment segment = (Segment) grp; EClass clazz = ECoreConversionUtils.segmentToEClass(segment); if (!segment.getFields().isEmpty()) { commonClasses.put(segment.getSegcode(), clazz); Collection<EStructuralFeature> fields = processFields( segment.getFields(), result); clazz.getEStructuralFeatures().addAll(fields); } result.put(clazz.getName(), clazz); } // Adding DocumentRoot EClass droot = ECoreConversionUtils.createDocumentRoot(null); result.put(droot.getName(), droot); return result.values(); }
commonClasses.put(segment.getSegcode(), clazz); Collection<EStructuralFeature> fields = processFields( segment.getFields(), commonClasses);
throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); numberOfFieldsToValidate= numFieldsExpected; } else { throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields());
throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); numberOfFieldsToValidate= numFieldsExpected; } else { throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields());
throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); numberOfFieldsToValidate= numFieldsExpected; } else { throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields());
throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields()); numberOfFieldsToValidate= numFieldsExpected; } else { throw new EDIParseException(edifactModel.getEdimap(), "Segment [" + segment.getSegcode() + "] expected to contain " + (numFieldsExpected - 1) + " fields. Actually contains " + (currentSegmentFields.length - 1) + " fields (not including segment code). Currently at segment number " + segmentReader.getCurrentSegmentNumber() + ".", segment, segmentReader.getCurrentSegmentNumber(), segmentReader.getCurrentSegmentFields());
String segmentCode = segment.getSegcode();
String segmentCode = segment.getSegcode();
String segmentCode = segment.getSegcode();
String segmentCode = segment.getSegcode();
public void writeObject(JNamedType property, BindingConfig bindingConfig, MappingNode mappingNode) { appendToBody("\n if(" + property.getName() + " != null) {"); if(mappingNode instanceof Segment) { if(!((Segment) mappingNode).getFields().isEmpty() && (bindingConfig.getParent() == null || bodyLength() > 0)) { appendToBody("\n nodeWriter.write(\"" + ((Segment)mappingNode).getSegcode() + "\");"); appendToBody("\n nodeWriter.write(delimiters.getField());"); } } appendToBody("\n " + property.getName() + ".write(nodeWriter, delimiters);"); if(trunacate) { appendToBody("\n nodeTokens.add(nodeWriter.toString());"); appendToBody("\n ((StringWriter)nodeWriter).getBuffer().setLength(0);"); } appendToBody("\n }"); }