aboutsummaryrefslogtreecommitdiffstats
path: root/aai-core/src/main/java/org/onap/aai/util/genxsd/HTMLfromOXM.java
diff options
context:
space:
mode:
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.java163
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;