/** * 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; }
/** * 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; }
/** * 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());
String segmentCode = segment.getSegcode();