diff options
Diffstat (limited to 'aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java')
-rw-r--r-- | aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java | 163 |
1 files changed, 108 insertions, 55 deletions
diff --git a/aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java b/aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java index 287b3b5c..cba65daa 100644 --- a/aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java +++ b/aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java @@ -19,47 +19,64 @@ */ package org.onap.aai.util.genxsd; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; + +import javax.xml.parsers.ParserConfigurationException; + + +import org.onap.aai.config.SpringContextAware; +import org.onap.aai.edges.EdgeIngestor; +import org.onap.aai.edges.exceptions.EdgeRuleNotFoundException; import org.onap.aai.exceptions.AAIException; -import org.onap.aai.introspection.Version; +import org.onap.aai.nodes.NodeIngestor; +import org.onap.aai.setup.SchemaVersion; +import org.onap.aai.setup.SchemaVersions; import org.slf4j.Logger; import org.slf4j.LoggerFactory; + import org.w3c.dom.Attr; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; -import javax.xml.parsers.ParserConfigurationException; -import java.io.File; -import java.io.IOException; - public class HTMLfromOXM extends OxmFileProcessor { + private static final Logger logger = LoggerFactory.getLogger("HTMLfromOXM.class"); + - Version v; - public HTMLfromOXM(File oxmFile, Version v) throws ParserConfigurationException, SAXException, IOException, AAIException { - super(oxmFile, v); - super.init(); + + public HTMLfromOXM(SchemaVersions schemaVersions, NodeIngestor ni, EdgeIngestor ei ){ + super(schemaVersions, ni,ei); + } + public void setOxmVersion(File oxmFile, SchemaVersion v) { + super.setOxmVersion(oxmFile, v); this.v = v; } - public HTMLfromOXM(String xml, Version v) throws ParserConfigurationException, SAXException, IOException, AAIException { - super(xml, v); - super.init(); + public void setXmlVersion(String xml, SchemaVersion v) { + super.setXmlVersion(xml, v); + this.v = v; + } + public void setVersion(SchemaVersion v) { + super.setVersion(v); this.v = v; } + @Override public String getDocumentHeader() { StringBuffer sb = new StringBuffer(); logger.trace("processing starts"); sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"); String namespace = "org.onap"; - if (v.compareTo(Version.v11) < 0 || v.compareTo(Version.v12) < 0) { + if (v.compareTo(getSchemaVersions().getNamespaceChangeVersion()) < 0 ) { namespace = "org.openecomp"; } - if ( versionUsesAnnotations(v.name()) ) { + if ( versionUsesAnnotations(v.toString()) ) { sb.append("<xs:schema elementFormDefault=\"qualified\" version=\"1.0\" targetNamespace=\"http://" + namespace + ".aai.inventory/" - + v.name() + "\" xmlns:tns=\"http://" + namespace + ".aai.inventory/" + v.name() + "\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" + + v.toString() + "\" xmlns:tns=\"http://" + namespace + ".aai.inventory/" + v.toString() + "\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\"" + "\n" + "xmlns:jaxb=\"http://java.sun.com/xml/ns/jaxb\"\r\n" + " jaxb:version=\"2.1\"\r\n" + @@ -67,40 +84,53 @@ public class HTMLfromOXM extends OxmFileProcessor { " jaxb:extensionBindingPrefixes=\"annox\">\n\n"); } else { sb.append("<xs:schema elementFormDefault=\"qualified\" version=\"1.0\" targetNamespace=\"http://" + namespace + ".aai.inventory/" - + v.name() + "\" xmlns:tns=\"http://" + namespace + ".aai.inventory/" + v.name() + "\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n\n"); + + v.toString() + "\" xmlns:tns=\"http://" + namespace + ".aai.inventory/" + v.toString() + "\" xmlns:xs=\"http://www.w3.org/2001/XMLSchema\">\n\n"); } return sb.toString(); } @Override - public String process() throws AAIException { - StringBuilder sb = new StringBuilder(); - sb.append(getDocumentHeader()); - for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) { - XSDElement javaTypeElement = new XSDElement((Element)javaTypeNodes.item(i)); - String javaTypeName = javaTypeElement.name(); - if ( javaTypeName == null ) { - String msg = "Invalid OXM file: <java-type> has no name attribute in " + oxmFile; - logger.error(msg); - throw new AAIException(msg); - } - if ("Nodes".equals(javaTypeName)) { - logger.debug("skipping Nodes entry (temporary feature)"); + public String process() throws ParserConfigurationException, SAXException, IOException, AAIException, FileNotFoundException, EdgeRuleNotFoundException { + StringBuilder sb = new StringBuilder(); + try { + init(); + } catch(Exception e) { + logger.error( "Error initializing " + this.getClass()); + throw e; + } + sb.append(getDocumentHeader()); + StringBuilder sbInventory = new StringBuilder(); + for ( int i = 0; i < javaTypeNodes.getLength(); ++ i ) { + XSDElement javaTypeElement = new XSDElement((Element)javaTypeNodes.item(i)); + String javaTypeName = javaTypeElement.name(); + if ( javaTypeName == null ) { + String msg = "Invalid OXM file: <java-type> has no name attribute in " + oxmFile; + logger.error(msg); + throw new AAIException(msg); + } + if ("Nodes".equals(javaTypeName)) { + logger.debug("skipping Nodes entry (temporary feature)"); + continue; + } + //Skip any type that has already been processed(recursion could be the reason) + logger.debug(getXmlRootElementName(javaTypeName)+" vs "+ javaTypeName+":"+generatedJavaType.containsKey(getXmlRootElementName(javaTypeName))); + if ( generatedJavaType.containsKey(javaTypeName) ) { continue; - } - //Skip any type that has already been processed(recursion could be the reason) - logger.debug(getXmlRootElementName(javaTypeName)+" vs "+ javaTypeName+":"+generatedJavaType.containsKey(getXmlRootElementName(javaTypeName))); - if ( generatedJavaType.containsKey(javaTypeName) ) { - continue; - } + } + if ( !"Inventory".equals(javaTypeName)) { generatedJavaType.put(javaTypeName, null); - sb.append(processJavaTypeElement( javaTypeName, javaTypeElement )); } + sb.append(processJavaTypeElement( javaTypeName, javaTypeElement, sbInventory )); + } + sb.append(sbInventory); + sb.append(" </xs:sequence>\n"); + sb.append(" </xs:complexType>\n"); + sb.append(" </xs:element>\n"); sb.append("</xs:schema>\n"); return sb.toString(); } - public String processJavaTypeElement( String javaTypeName, Element javaType_Element) { + public String processJavaTypeElement( String javaTypeName, Element javaType_Element, StringBuilder sbInventory) { String xmlRootElementName = getXMLRootElementName(javaType_Element); @@ -113,39 +143,54 @@ public class HTMLfromOXM extends OxmFileProcessor { Element parentElement = (Element)parentNodes.item(0); NodeList xmlElementNodes = parentElement.getElementsByTagName("xml-element"); - + // support for multiple inventory elements across oxm files + boolean processingInventory = false; + boolean hasPreviousInventory = false; + if ( "inventory".equals(xmlRootElementName) && sbInventory != null ) { + processingInventory = true; + if ( sbInventory.toString().contains("xs:complexType") ) { + hasPreviousInventory = true; + } + } + StringBuffer sb1 = new StringBuffer(); if ( xmlElementNodes.getLength() > 0 ) { - sb1.append(" <xs:element name=\"" + xmlRootElementName + "\">\n"); - sb1.append(" <xs:complexType>\n"); - XSDElement javaTypeElement = new XSDElement(javaType_Element); - logger.debug("XSDElement name: "+javaTypeElement.name()); - if(versionUsesAnnotations(v.name())) { - sb1.append(javaTypeElement.getHTMLAnnotation("class", " ")); + + if ( !processingInventory || !hasPreviousInventory ) { + sb1.append(" <xs:element name=\"" + xmlRootElementName + "\">\n"); + sb1.append(" <xs:complexType>\n"); + + XSDElement javaTypeElement = new XSDElement(javaType_Element); + logger.debug("XSDElement name: "+javaTypeElement.name()); + if(versionUsesAnnotations(v.toString())) { + sb1.append(javaTypeElement.getHTMLAnnotation("class", " ")); + } + sb1.append(" <xs:sequence>\n"); } - sb1.append(" <xs:sequence>\n"); for ( int i = 0; i < xmlElementNodes.getLength(); ++i ) { XSDElement xmlElementElement = new XSDElement((Element)xmlElementNodes.item(i)); - String elementName = xmlElementElement.getAttribute("name"); +// String elementName = xmlElementElement.getAttribute("name"); String elementType = xmlElementElement.getAttribute("type"); //No simple types; only AAI custom types - String addType = elementType.contains("." + v.name() + ".") ? elementType.substring(elementType.lastIndexOf('.')+1) : null; - if ( elementType.contains("." + v.name() + ".") && !generatedJavaType.containsKey(addType) ) { + String addType = elementType.contains("." + v.toString() + ".") ? elementType.substring(elementType.lastIndexOf('.')+1) : null; + if ( elementType.contains("." + v.toString() + ".") && !generatedJavaType.containsKey(addType) ) { generatedJavaType.put(addType, elementType); - sb.append(processJavaTypeElement( addType, getJavaTypeElement(addType) )); + sb.append(processJavaTypeElement( addType, getJavaTypeElement(addType), null )); } if ("Nodes".equals(addType)) { logger.trace("Skipping nodes, temporary testing"); continue; } //assembles the basic <element> - sb1.append(xmlElementElement.getHTMLElement(v, versionUsesAnnotations(v.name()), this)); + sb1.append(xmlElementElement.getHTMLElement(v, versionUsesAnnotations(v.toString()), this)); + } + if ( !processingInventory ) { + sb1.append(" </xs:sequence>\n"); + sb1.append(" </xs:complexType>\n"); + sb1.append(" </xs:element>\n"); } - sb1.append(" </xs:sequence>\n"); - sb1.append(" </xs:complexType>\n"); - sb1.append(" </xs:element>\n"); } if ( xmlElementNodes.getLength() < 1 ) { @@ -157,7 +202,11 @@ public class HTMLfromOXM extends OxmFileProcessor { generatedJavaType.put(javaTypeName, null); return sb.toString(); } - sb.append( sb1 ); + if ( processingInventory && sbInventory != null ) { + sbInventory.append(sb1); + } else { + sb.append( sb1 ); + } return sb.toString(); } @@ -182,7 +231,11 @@ public class HTMLfromOXM extends OxmFileProcessor { } private boolean versionUsesAnnotations( String version) { - if (new Integer(version.substring(1)).intValue() >= HTMLfromOXM.annotationsStartVersion ) { + int ver = new Integer(version.substring(1)).intValue(); + if ( ver >= HTMLfromOXM.annotationsStartVersion ) { + return true; + } + if ( ver <= HTMLfromOXM.annotationsMinVersion ) { return true; } return false; |