Allow handling of legact model artifacts
[aai/model-loader.git] / src / main / java / org / openecomp / modelloader / entity / model / ModelArtifactParser.java
index 1bd77c8..d81539c 100644 (file)
@@ -25,9 +25,7 @@ package org.openecomp.modelloader.entity.model;
 import org.openecomp.cl.api.Logger;
 import org.openecomp.cl.eelf.LoggerFactory;
 import org.openecomp.modelloader.entity.Artifact;
-import org.openecomp.modelloader.entity.ArtifactType;
 import org.openecomp.modelloader.service.ModelLoaderMsgs;
-import org.openecomp.modelloader.util.JsonXmlConverter;
 
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -36,32 +34,20 @@ import org.w3c.dom.NodeList;
 import org.xml.sax.InputSource;
 
 import java.io.StringReader;
-import java.io.StringWriter;
 import java.util.ArrayList;
 import java.util.List;
 
 import javax.xml.XMLConstants;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
 
 
-public class ModelArtifactParser {
+public class ModelArtifactParser implements IModelParser {
 
-       private static String MODELS_ELEMENT = "models";
-       private static String MODEL_ELEMENT = "model";
-       private static String NAMED_QUERIES_ELEMENT = "named-queries";
-       private static String NAMED_QUERY_ELEMENT = "named-query";
-       private static String MODEL_NAME_VERSION_ID = "model-name-version-id";
        private static String MODEL_VER = "model-ver";
        private static String MODEL_VERSION_ID = "model-version-id";
        private static String MODEL_INVARIANT_ID = "model-invariant-id";
-       private static String NAMED_QUERY_VERSION_ID = "named-query-uuid";
+       private static String RELATIONSHIP = "relationship";
        private static String RELATIONSHIP_DATA = "relationship-data";
        private static String RELATIONSHIP_KEY = "relationship-key";
        private static String RELATIONSHIP_VALUE = "relationship-value";
@@ -75,54 +61,22 @@ public class ModelArtifactParser {
          List<Artifact> modelList = new ArrayList<Artifact>();
 
          try {
-           // Artifact could be JSON or XML
-           if (JsonXmlConverter.isValidJson(payload)) {
-             payload = JsonXmlConverter.convertJsonToXml(payload);
-           }
-
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
            DocumentBuilder builder = factory.newDocumentBuilder();
            InputSource is = new InputSource(new StringReader(payload));
            Document doc = builder.parse(is);
 
-           if ( (doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) || 
-               (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) ) {
-
-             ModelArtifact model = parseModel(doc.getDocumentElement(), payload);
+           ModelArtifact model = parseModel(doc.getDocumentElement(), payload);
 
-             if (model != null) {
-               if ( ArtifactType.MODEL.equals(model.getType())) {
-                 logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> "
-                     + "Model-invariant-Id: "+ model.getModelInvariantId()
-                     + " Model-Version-Id: "+ model.getModelVerId());
-               }
-               modelList.add(model);
-             }
-             else {
-               logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
-               return null;
-             }
+           if (model != null) {
+             logger.info( ModelLoaderMsgs.DISTRIBUTION_EVENT, "Model parsed =====>>>> "
+                 + "Model-invariant-Id: "+ model.getModelInvariantId()
+                 + " Model-Version-Id: "+ model.getModelVerId());
+             modelList.add(model);
            }
-           else if ( (doc.getDocumentElement().getNodeName().equalsIgnoreCase(MODELS_ELEMENT)) ||
-               (doc.getDocumentElement().getNodeName().equalsIgnoreCase(NAMED_QUERIES_ELEMENT)) ) {
-             // The complete set of models/named-queries were contained in this artifact
-             NodeList nodeList = doc.getDocumentElement().getChildNodes();
-             for (int i = 0; i < nodeList.getLength(); i++) {
-               Node childNode = nodeList.item(i);
-               if ( (childNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) || 
-                   (childNode.getNodeName().equalsIgnoreCase(NAMED_QUERY_ELEMENT)) ) {
-                 String modelPayload = nodeToString(childNode);
-                 ModelArtifact model = parseModel(childNode, modelPayload);
-                 if (model != null) {
-                   modelList.add(model);
-                 }
-                 else {
-                   logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
-                   modelList.clear();
-                   break;
-                 }
-               }
-             }
+           else {
+             logger.error(ModelLoaderMsgs.ARTIFACT_PARSE_ERROR, "Unable to parse artifact " + artifactName);
+             return null;
            }
          }
          catch (Exception ex) {
@@ -132,28 +86,16 @@ public class ModelArtifactParser {
          return modelList;
        }
 
-       private void printDetails(Node modelVer) throws TransformerException {
-         logger.info(ModelLoaderMsgs.DISTRIBUTION_EVENT, nodeToString(modelVer));
-       }
-
        private ModelArtifact parseModel(Node modelNode, String payload) {
          ModelArtifact model = new ModelArtifact();
          model.setPayload(payload);
 
-         if (modelNode.getNodeName().equalsIgnoreCase(MODEL_ELEMENT)) {
-           //compare with Model-ver
-           model.setType(ArtifactType.MODEL);
-         }
-         else {
-           model.setType(ArtifactType.NAMED_QUERY);
-         }
-
          Element e = (Element)modelNode;
          model.setModelNamespace(e.getAttribute("xmlns"));
 
          parseNode(modelNode, model);
 
-         if (model.getModelInvariantId() == null  && model.getNameVersionId() == null) {
+         if ( (model.getModelInvariantId() == null) || (model.getModelVerId() == null) ){
            return null;
          }
 
@@ -161,36 +103,19 @@ public class ModelArtifactParser {
        }
 
        private void parseNode(Node node, ModelArtifact model) {
-
-         if(node.getNodeName().equalsIgnoreCase(MODEL_NAME_VERSION_ID)){
-           model.setModelVerId(node.getTextContent().trim());
-           model.setV9Artifact(false);
-         }
-         else if(node.getNodeName().equalsIgnoreCase("model-id")){
-           model.setModelInvariantId(node.getTextContent().trim());
-           model.setV9Artifact(false);
-         }
-
-         else if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) {
+         if (node.getNodeName().equalsIgnoreCase(MODEL_INVARIANT_ID)) {
            model.setModelInvariantId(node.getTextContent().trim());
          }
          else if (node.getNodeName().equalsIgnoreCase(MODEL_VERSION_ID)) {
            model.setModelVerId(node.getTextContent().trim());
-           //Change to Model Invariant Id
-         }
-         else if (node.getNodeName().equalsIgnoreCase(NAMED_QUERY_VERSION_ID)) {
-           model.setNameVersionId(node.getTextContent().trim());
          }
-         else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
-           parseRelationshipNode(node, model);
-           if(model.getModelModelInvariantId()!=null && model.getModelVerModelVersionId()!=null && !model.getModelModelInvariantId().isEmpty() && !model.getModelVerModelVersionId().isEmpty()){
-             model.addDependentModelId(model.getModelModelInvariantId() + "|" + model.getModelVerModelVersionId());
-             model.setModelModelInvariantId("");
-             model.setModelVerModelVersionId("");
+         else if (node.getNodeName().equalsIgnoreCase(RELATIONSHIP)) {
+           String dependentModelKey = parseRelationshipNode(node, model);
+           if (dependentModelKey != null) {
+             model.addDependentModelId(dependentModelKey);
            }
          }
          else {
-
            if (node.getNodeName().equalsIgnoreCase(MODEL_VER)) {
              model.setModelVer(node);
              if ( (model.getModelNamespace() != null) && (!model.getModelNamespace().isEmpty()) ) {
@@ -208,57 +133,62 @@ public class ModelArtifactParser {
          }
        }
 
-       private void parseRelationshipNode(Node node, ModelArtifact model) {
-
-         //invariant-id comes before model-version-id .. create a list of values
-         String key = null;
-         String value = null;
-         String modelVersionIdKey=null;
-         String modelInvariantIdIdKey=null;
-         String modelVersionIdValue=null;
-         String modelInvariantIdIdValue=null;
+       private String parseRelationshipNode(Node node, ModelArtifact model) {
+         String currentKey = null;
+         String currentValue = null;
+         String modelVersionIdValue = null;
+         String modelInvariantIdValue = null;
 
          NodeList nodeList = node.getChildNodes();
          for (int i = 0; i < nodeList.getLength(); i++) {
            Node childNode = nodeList.item(i);
-
-
-           if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
-             key = childNode.getTextContent().trim();
-             if(key.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)){
-               modelVersionIdKey = key;
-             }
-             else if(key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)){
-               modelInvariantIdIdKey = key;
-             }
-           }
-           else if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
-             value = childNode.getTextContent().trim();
-             if(modelVersionIdKey!=null){
-               modelVersionIdValue = value;
-               model.setModelVerModelVersionId(modelVersionIdValue);
+           
+           if (childNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_DATA)) {
+             NodeList relDataChildList = childNode.getChildNodes();
+             
+             for (int j = 0; j < relDataChildList.getLength(); j++) {
+               Node relDataChildNode = relDataChildList.item(j);
+               
+               if (relDataChildNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_KEY)) {
+                 currentKey = relDataChildNode.getTextContent().trim();
+
+                 if (currentValue != null) {
+                   if (currentKey.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)) {
+                     modelVersionIdValue = currentValue;
+                   }
+                   else if (currentKey.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)) {
+                     modelInvariantIdValue = currentValue;
+                   }
+                   
+                   currentKey = null;
+                   currentValue = null;
+                 }
+               }
+               else if (relDataChildNode.getNodeName().equalsIgnoreCase(RELATIONSHIP_VALUE)) {
+                 currentValue = relDataChildNode.getTextContent().trim();
+
+                 if (currentKey != null) {
+              if (currentKey.equalsIgnoreCase(MODEL_VER_ELEMENT_RELATIONSHIP_KEY)) {
+                modelVersionIdValue = currentValue;
+              }
+              else if (currentKey.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY)) {
+                modelInvariantIdValue = currentValue;
+              }
+              
+              currentKey = null;
+              currentValue = null;
+                 }
+               }
              }
-             else if(modelInvariantIdIdKey!=null){
-               modelInvariantIdIdValue = value;
-               model.setModelModelInvariantId(modelInvariantIdIdValue);
-             } 
-
            }
          }
-
-         if ( (key != null) && (key.equalsIgnoreCase(MODEL_ELEMENT_RELATIONSHIP_KEY )) && 
-             (model.isV9Artifact == false ||ArtifactType.NAMED_QUERY.equals(model.getType())) ) {
-           if (value != null) {
-             model.addDependentModelId(value);
-           }
+         
+         if ( (modelVersionIdValue != null) && (modelInvariantIdValue != null) ) {
+           return modelInvariantIdValue + "|" + modelVersionIdValue;
          }
-       }
+         
+         return null;
 
-       private String nodeToString(Node node) throws TransformerException {
-         StringWriter sw = new StringWriter();
-         Transformer t = TransformerFactory.newInstance().newTransformer();
-         t.setOutputProperty(OutputKeys.OMIT_XML_DECLARATION, "yes");
-         t.transform(new DOMSource(node), new StreamResult(sw));
-         return sw.toString();
        }
+
 }