Added VFModule count
[policy/models.git] / models-interactions / model-impl / aai / src / main / java / org / onap / policy / aai / AaiCqResponse.java
index 8e9c580..ca0c186 100644 (file)
@@ -37,6 +37,7 @@ import org.json.JSONArray;
 import org.json.JSONObject;
 import org.onap.aai.domain.yang.CloudRegion;
 import org.onap.aai.domain.yang.GenericVnf;
+import org.onap.aai.domain.yang.ModelVer;
 import org.onap.aai.domain.yang.Relationship;
 import org.onap.aai.domain.yang.RelationshipData;
 import org.onap.aai.domain.yang.ServiceInstance;
@@ -54,7 +55,6 @@ public class AaiCqResponse {
     private static JAXBContext jaxbContext;
     private static Unmarshaller unmarshaller;
 
-
     // JABX initial stuff
     static {
         Map<String, Object> properties = new HashMap<>();
@@ -62,8 +62,12 @@ public class AaiCqResponse {
         properties.put(JAXBContextProperties.JSON_INCLUDE_ROOT, false);
         // Define JAXB context
         try {
-            jaxbContext = JAXBContextFactory.createContext(new Class[] {Vserver.class, GenericVnf.class, VfModule.class,
-                CloudRegion.class, ServiceInstance.class, Tenant.class}, properties);
+            jaxbContext =
+                JAXBContextFactory
+                    .createContext(
+                        new Class[] {Vserver.class, GenericVnf.class, VfModule.class,
+                            CloudRegion.class, ServiceInstance.class, Tenant.class, ModelVer.class},
+                        properties);
             unmarshaller = jaxbContext.createUnmarshaller();
         } catch (JAXBException e) {
             LOGGER.error("Could not initialize JAXBContext", e);
@@ -74,11 +78,11 @@ public class AaiCqResponse {
     @SerializedName("results")
     private List<Object> inventoryResponseItems = new LinkedList<>();
 
-
     /**
      * Constructor creates a custom query response from a valid json string.
      *
-     * @param jsonString A&AI Custom Query response JSON string
+     * @param jsonString
+     *        A&AI Custom Query response JSON string
      */
     public AaiCqResponse(String jsonString) {
 
@@ -94,8 +98,8 @@ public class AaiCqResponse {
 
                 // Create the StreamSource by creating StringReader using the
                 // JSON input
-                StreamSource json = new StreamSource(
-                        new StringReader(resultsArray.getJSONObject(i).getJSONObject("vserver").toString()));
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject("vserver").toString()));
 
                 // Getting the vserver pojo again from the json
                 Vserver vserver = this.getAaiObject(json, Vserver.class);
@@ -106,8 +110,8 @@ public class AaiCqResponse {
             if (resultsArray.getJSONObject(i).has(GENERIC_VNF)) {
                 // Create the StreamSource by creating StringReader using the
                 // JSON input
-                StreamSource json = new StreamSource(
-                        new StringReader(resultsArray.getJSONObject(i).getJSONObject(GENERIC_VNF).toString()));
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject(GENERIC_VNF).toString()));
 
                 // Getting the generic vnf pojo again from the json
                 GenericVnf genericVnf = this.getAaiObject(json, GenericVnf.class);
@@ -120,8 +124,8 @@ public class AaiCqResponse {
 
                 // Create the StreamSource by creating StringReader using the
                 // JSON input
-                StreamSource json = new StreamSource(
-                        new StringReader(resultsArray.getJSONObject(i).getJSONObject("service-instance").toString()));
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject("service-instance").toString()));
 
                 // Getting the employee pojo again from the json
                 ServiceInstance serviceInstance = this.getAaiObject(json, ServiceInstance.class);
@@ -133,8 +137,8 @@ public class AaiCqResponse {
             if (resultsArray.getJSONObject(i).has(VF_MODULE)) {
                 // Create the StreamSource by creating StringReader using the
                 // JSON input
-                StreamSource json = new StreamSource(
-                        new StringReader(resultsArray.getJSONObject(i).getJSONObject(VF_MODULE).toString()));
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject(VF_MODULE).toString()));
 
                 // Getting the vf module pojo again from the json
                 VfModule vfModule = this.getAaiObject(json, VfModule.class);
@@ -146,8 +150,8 @@ public class AaiCqResponse {
             if (resultsArray.getJSONObject(i).has("cloud-region")) {
                 // Create the StreamSource by creating StringReader using the
                 // JSON input
-                StreamSource json = new StreamSource(
-                        new StringReader(resultsArray.getJSONObject(i).getJSONObject("cloud-region").toString()));
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject("cloud-region").toString()));
 
                 // Getting the cloud region pojo again from the json
                 CloudRegion cloudRegion = this.getAaiObject(json, CloudRegion.class);
@@ -159,8 +163,8 @@ public class AaiCqResponse {
             if (resultsArray.getJSONObject(i).has("tenant")) {
                 // Create the StreamSource by creating StringReader using the
                 // JSON input
-                StreamSource json = new StreamSource(
-                        new StringReader(resultsArray.getJSONObject(i).getJSONObject("tenant").toString()));
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject("tenant").toString()));
 
                 // Getting the tenant pojo again from the json
                 Tenant tenant = this.getAaiObject(json, Tenant.class);
@@ -168,13 +172,22 @@ public class AaiCqResponse {
                 this.inventoryResponseItems.add(tenant);
             }
 
-        }
-
+            // Object is a ModelVer
+            if (resultsArray.getJSONObject(i).has("model-ver")) {
+                // Create the StreamSource by creating StringReader using the
+                // JSON input
+                StreamSource json = new StreamSource(new StringReader(
+                    resultsArray.getJSONObject(i).getJSONObject("model-ver").toString()));
 
+                // Getting the ModelVer pojo again from the json
+                ModelVer modelVer = this.getAaiObject(json, ModelVer.class);
 
-    }
+                this.inventoryResponseItems.add(modelVer);
+            }
 
+        }
 
+    }
 
     private <T> T getAaiObject(StreamSource json, final Class<T> classOfResponse) {
         try {
@@ -196,7 +209,8 @@ public class AaiCqResponse {
     /**
      * Get list of A&AI objects in the custom query.
      *
-     * @param classOfResponse Class of the type of A&AI objects to be returned
+     * @param classOfResponse
+     *        Class of the type of A&AI objects to be returned
      * @return List A&AI objects matching the class
      */
     @SuppressWarnings("unchecked")
@@ -275,11 +289,11 @@ public class AaiCqResponse {
 
     }
 
-
     /**
      * Returns a generic Vnf matching vnf name.
      *
-     * @param vnfName Name of the vnf to match
+     * @param vnfName
+     *        Name of the vnf to match
      * @return generic Vnf
      */
     public GenericVnf getGenericVnfByVnfName(String vnfName) {
@@ -304,7 +318,8 @@ public class AaiCqResponse {
     /**
      * Returns a generic Vnf matching model invariant ID.
      *
-     * @param modelInvariantId Name of the vnf to match
+     * @param modelInvariantId
+     *        Name of the vnf to match
      * @return generic Vnf
      */
     public GenericVnf getGenericVnfByModelInvariantId(String modelInvariantId) {
@@ -326,7 +341,27 @@ public class AaiCqResponse {
 
     }
 
+    /**
+     * Returns a generic Vnf of a given VF Module ID.
+     *
+     * @param vfModuleModelInvariantId
+     *        of the vf module for which vnf is to be returned
+     * @return generic Vnf
+     */
+    public GenericVnf getGenericVnfByVfModuleModelInvariantId(String vfModuleModelInvariantId) {
+        List<GenericVnf> genericVnfList = this.getGenericVnfs();
 
+        for (GenericVnf genVnf : genericVnfList) {
+            // Iterate through all the vfModules of that generic Vnf
+            for (VfModule vfMod : genVnf.getVfModules().getVfModule()) {
+                if (vfMod.getModelInvariantId() != null
+                    && vfMod.getModelInvariantId().equals(vfModuleModelInvariantId)) {
+                    return genVnf;
+                }
+            }
+        }
+        return null;
+    }
 
     /**
      * Get the generic vnf associated with the vserver in the custom query.
@@ -346,7 +381,8 @@ public class AaiCqResponse {
         String genericVnfId = "";
         List<RelationshipData> relationshipData = null;
 
-        // Iterate through the list of relationships and get generic vnf relationship data
+        // Iterate through the list of relationships and get generic vnf
+        // relationship data
         for (Relationship r : relations) {
             // Get the name of generic-vnf related to this server
             if (GENERIC_VNF.equals(r.getRelatedTo())) {
@@ -374,7 +410,6 @@ public class AaiCqResponse {
         return genericVnf;
     }
 
-
     /**
      * Get Vf Module associated with the vserver in the custom query.
      *
@@ -394,7 +429,8 @@ public class AaiCqResponse {
         String vfModuleId = "";
         List<RelationshipData> relationshipData = null;
 
-        // Iterate through the list of relationships and get vf module relationship data
+        // Iterate through the list of relationships and get vf module
+        // relationship data
         for (Relationship r : relations) {
             // Get relationship data of vfmodule related to this server
             if (VF_MODULE.equals(r.getRelatedTo())) {
@@ -425,7 +461,6 @@ public class AaiCqResponse {
         return vfModule;
     }
 
-
     /**
      * Get vf modules in the custom query.
      *
@@ -458,6 +493,24 @@ public class AaiCqResponse {
         return vfModule;
     }
 
+    /**
+     * Get Vf Module matching a specific VF model invariant ID.
+     *
+     * @return VfModule
+     */
+    public VfModule getVfModuleByVfModelInvariantId(String vfModelInvariantId) {
+        VfModule vfModule = null;
+
+        for (VfModule vfMod : this.getAllVfModules()) {
+            if (vfMod.getModelInvariantId() != null
+                && vfModelInvariantId.equals(vfMod.getModelInvariantId())) {
+                vfModule = vfMod;
+            }
+
+        }
+        return vfModule;
+    }
+
     /**
      * Get verver in the custom query.
      *
@@ -474,5 +527,64 @@ public class AaiCqResponse {
 
     }
 
-}
+    /**
+     * Get Model Versions in the custom query.
+     *
+     * @return List of model Versions
+     */
+    public List<ModelVer> getAllModelVer() {
+        List<ModelVer> modelVerList = new ArrayList<>();
+        for (Object i : this.inventoryResponseItems) {
+            if (i.getClass() == ModelVer.class) {
+                modelVerList.add((ModelVer) i);
+            }
+        }
+        return modelVerList;
+    }
 
+    /**
+     * Get ModelVer matching a specific version id.
+     *
+     * @return VfModule
+     */
+    public ModelVer getModelVerByVersionId(String versionId) {
+        ModelVer modelVer = null;
+
+        for (ModelVer modVersion : this.getAllModelVer()) {
+            if (versionId.equals(modVersion.getModelVersionId())) {
+                modelVer = modVersion;
+            }
+
+        }
+        return modelVer;
+    }
+
+    /**
+     * Get the count of vfModules matching customizationId, InvariantId and
+     * VersionId.
+     *
+     * @param custId
+     *        ModelCustomizationId
+     * @param invId
+     *        ModelInvariantId
+     * @param verId
+     *        ModelVersionId
+     * @return Returns the count of vf modules
+     */
+    public int getVfModuleCount(String custId, String invId, String verId) {
+        List<VfModule> vfModuleList = this.getAllVfModules();
+        int count = 0;
+        for (VfModule vfModule : vfModuleList) {
+            if (vfModule.getModelCustomizationId() != null && vfModule.getModelInvariantId() != null
+                && vfModule.getModelVersionId() != null) {
+                if (vfModule.getModelCustomizationId().equals(custId)
+                    && vfModule.getModelInvariantId().equals(invId)
+                    && vfModule.getModelVersionId().equals(verId)) {
+                    count = count + 1;
+                }
+            }
+        }
+        return count;
+    }
+
+}