private static void addModel(Edimap model, String pathPrefix, StringBuilder modelListBuilder, StringWriter messageEntryWriter, Archive archive) throws IOException { Description modelDesc = model.getDescription(); String messageEntryPath = pathPrefix + "/" + modelDesc.getName() + ".xml"; // Generate the mapping model for this message... messageEntryWriter.getBuffer().setLength(0); model.write(messageEntryWriter); // Add the generated mapping model to the archive... archive.addEntry(messageEntryPath, messageEntryWriter.toString()); // Add this messages archive entry to the mapping model list file... modelListBuilder.append("/" + messageEntryPath); modelListBuilder.append("!" + modelDesc.getName()); modelListBuilder.append("!" + modelDesc.getVersion()); modelListBuilder.append("!" + modelDesc.getNamespace()); modelListBuilder.append("\n"); }
@Override public Object clone() { return new Description().setName(name).setVersion(version).setNamespace(namespace); }
@Override public int hashCode() { assertInitialized(); return (name + "#" + version).hashCode(); }
/** * Convert {@link Description} to the string representation that is used for * lookup in the hashmaps * * @param description * @return */ public static String toLookupName(Description description) { return description.getName() + ":" + description.getVersion(); }
public static void write(Segment segment, Writer writer) throws IOException { Edimap ediMap = new Edimap(); SegmentGroup segments = new SegmentGroup(); segments.getSegments().add(segment); ediMap.setSegments(segments); ediMap.setDelimiters(UNEdifactInterchangeParser.defaultUNEdifactDelimiters); ediMap.setDescription(new Description().setName("TODO").setVersion("TODO")); write(ediMap, writer); }
String namespace = description.getNamespace(); String commonNS = null; String messageNSPrefix = null; if(nameComponentIndex != -1) { commonNS = namespace.substring(0, nameComponentIndex) + ":common"; messageNSPrefix = description.getName().toLowerCase(); attrs.addAttribute(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, "c", "xmlns:c", "CDATA", commonNS); attrs.addAttribute(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, messageNSPrefix, "xmlns:" + messageNSPrefix, "CDATA", namespace);
private String getCommmonMessageName() { return EDIUtils.MODEL_SET_DEFINITIONS_DESCRIPTION.getName(); }
private void addDescription(Description description, Element edimapEl) { Element descriptionElement = newElement("description", edimapEl); mapBeanProperties(description, descriptionElement, "name", "version"); if (!StringUtils.isEmpty(description.getNamespace())) { descriptionElement.setAttribute("namespace", description.getNamespace()); } }
public UnEdifactSpecificationReader(ZipInputStream specificationInStream, boolean useImport, boolean useShortName) throws IOException { this.useImport = useImport; this.useShortName = useShortName; definitionFiles = new HashMap<String, byte[]>(); messageFiles = new HashMap<String, byte[]>(); readDefinitionEntries(specificationInStream, new ZipDirectoryEntry("eded.", definitionFiles), new ZipDirectoryEntry("edcd.", definitionFiles), new ZipDirectoryEntry("edsd.", definitionFiles), new ZipDirectoryEntry("edmd.", "*", messageFiles)); if (versions.size() != 1) { if (versions.size() == 0) { throw new EdiParseException("Seems that we have a directory containing 0 parseable version inside: " + versions + ".\n All messages:\n\t" + messages); } throw new EdiParseException("Seems that we have a directory containing more than one parseable version inside: " + versions + ".\n All messages:\n\t" + messages); } String version = versions.iterator().next(); // Read Definition Configuration definitionModel = parseEDIDefinitionFiles(); addMissingDefinitions(definitionModel); definitionModel.getDescription().setNamespace(ControlBlockHandlerFactory.NAMESPACE_ROOT + ":un:" + version + ":common"); //Interchange envelope is inserted into the definitions. Handcoded at the moment. try { String interchangeSegmentDefinitions = INTERCHANGE_DEFINITION_SHORTNAME; if (!useShortName) { interchangeSegmentDefinitions = INTERCHANGE_DEFINITION; } EdifactModel interchangeEnvelope = new EdifactModel(ClassUtil.getResourceAsStream(interchangeSegmentDefinitions, this.getClass())); definitionModel.getSegments().getSegments().addAll(interchangeEnvelope.getEdimap().getSegments().getSegments()); } catch (Exception e) { throw new EdiParseException(e.getMessage(), e); } }
private Edimap parseEDIDefinitionFiles() throws IOException, EdiParseException { Edimap edifactModel; Reader dataISR = null; Reader compositeISR = null; Reader segmentISR = null; try { dataISR = new InputStreamReader(new ByteArrayInputStream(definitionFiles.get("eded."))); compositeISR = new InputStreamReader(new ByteArrayInputStream(definitionFiles.get("edcd."))); segmentISR = new InputStreamReader(new ByteArrayInputStream(definitionFiles.get("edsd."))); edifactModel = UnEdifactDefinitionReader.parse(dataISR, compositeISR, segmentISR, useShortName); edifactModel.setDescription((Description) EDIUtils.MODEL_SET_DEFINITIONS_DESCRIPTION.clone()); edifactModel.getSegments().setXmltag("DefinitionMap"); edifactModel.setDelimiters(UNEdifactInterchangeParser.defaultUNEdifactDelimiters); } finally { if (dataISR != null) { dataISR.close(); } if (compositeISR != null) { compositeISR.close(); } if (segmentISR != null) { segmentISR.close(); } } return edifactModel; }
private static String getMessagePrefix(Edimap mappingModel) { return "EDI message processing failed [" + mappingModel.getDescription().getName() + "][" + mappingModel.getDescription().getVersion() + "]."; }
EdifactModel controlModel = new EdifactModel(controlMap); controlMap.setDescription(new Description().setName("EDI Message Interchange Control Model").setVersion("N/A")); controlSegmentParser.setMappingModel(controlModel);
public Set<String> getMessageNames() { Set<String> names = new LinkedHashSet<String>(); names.add(definitionModel.getDescription().getName()); names.addAll(messageFiles.keySet()); return names; }
commonPackage.setName(COMMON_PACKAGE_NAME); commonPackage.setNsPrefix("common"); commonPackage.setNsURI(commonModel.getDescription().getNamespace()); Collection<EClass> clzz = createCommonClasses(commonModel, commonClasses);
/** * Digest attributes of Description element and populate Description. * @param node the Description element. * @param edimap the {@link org.dhatim.edisax.model.internal.Edimap} to populate. */ private static void digestDescription(Node node, Edimap edimap) { Description description = new Description(); edimap.setDescription(description); description.setName(getAttributeValue(node, "name")); description.setVersion(getAttributeValue(node, "version")); String namespace = getAttributeValue(node, "namespace"); if (namespace != null) { description.setNamespace(namespace); } else { description.setNamespace(XMLConstants.NULL_NS_URI); } }
final EPackage pkg = EcoreFactory.eINSTANCE.createEPackage(); Description desc = mapModel.getDescription(); pkg.setName(desc.getName().toLowerCase()); pkg.setNsPrefix(desc.getName().toLowerCase()); pkg.setNsURI(desc.getNamespace()); if (mapModel.getSrc() != null) { annotate(pkg, "src", mapModel.getSrc().toASCIIString()); annotate(pkg, "description.name", mapModel.getDescription().getName()); annotate(pkg, "description.version", mapModel.getDescription() .getVersion()); annotate(pkg, "delimeters.segment", mapModel.getDelimiters() .getSegment());
logger.debug("Parsed, validated and cached EDI mapping model [" + edifactModel.getEdimap().getDescription().getName() + ", Version " + edifactModel.getEdimap().getDescription().getVersion() + "]. Target Profile(s) " + getTargetProfiles() + "."); } else if(logger.isInfoEnabled()) { logger.debug("Found EDI mapping model [" + edifactModel.getEdimap().getDescription().getName() + ", Version " + edifactModel.getEdimap().getDescription().getVersion() + "] in the model cache. Target Profile(s) " + getTargetProfiles() + ".");
public Edimap getMappingModel(String messageName) throws IOException { if(messageName.equals(definitionModel.getDescription().getName())) { return definitionModel; } else { return parseEdiMessage(messageName).getEdimap(); } }
/** * Digest attributes and child elements of Segments element. Populates Segments. * @param node the Segments element. * @param edimap the {@link org.dhatim.edisax.model.internal.Edimap} 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 digestSegments(Node node, Edimap edimap, String namespacePrefix) throws EDIConfigurationException { SegmentGroup segments = new SegmentGroup(); setValuesForMappingNode(node, segments, namespacePrefix, null); segments.setNamespace(edimap.getDescription().getNamespace()); edimap.setSegments(segments); edimap.setIgnoreUnmappedSegments(getNodeValueAsBoolean(node, "ignoreUnmappedSegments")); NodeList nodes = node.getChildNodes(); for (int i = 0; i < nodes.getLength(); i++) { Node currentNode = nodes.item(i); digestSegmentGroup(currentNode, edimap.getSegments().getSegments(), namespacePrefix, segments); } }
@Override public boolean equals(Object obj) { assertInitialized(); if(obj == null) { return false; } if(obj == this) { return true; } if(obj instanceof Description) { Description description = (Description) obj; return description.name.equals(name) && description.version.equals(version); } else if (obj instanceof String) { // Just comparing the names and ignoring the version... return obj.equals(name); } return false; }