Fixed multiple templates queries 05/41805/3
authorBalaji, Ramya (rb111y) <rb111y@att.com>
Mon, 9 Apr 2018 20:12:27 +0000 (16:12 -0400)
committerPatrick Brady <pb071s@att.com>
Tue, 10 Apr 2018 18:35:55 +0000 (18:35 +0000)
Added model id to condition when
checking for update/insert of
records

Issue-ID: APPC-837
Change-Id: I3fb49c378ac8c1d3180b05772d214d5cc8892810
Signed-off-by: Balaji, Ramya (rb111y) <rb111y@att.com>
appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/dbservices/DBService.java
appc-inbound/appc-artifact-handler/provider/src/main/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNode.java
appc-inbound/appc-artifact-handler/provider/src/test/java/org/onap/appc/artifact/handler/node/ArtifactHandlerNodeTest.java

index 8e0e71a..e1c76ec 100644 (file)
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP : APPC
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  * ================================================================================
  * Copyright (C) 2017 Amdocs
  * =============================================================================
@@ -18,7 +18,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
@@ -155,10 +154,13 @@ public class DBService {
     }
 
     public void processSdcReferences(SvcLogicContext context, boolean isUpdate) throws SvcLogicException {
+        processSdcReferences(context, isUpdate, null);
+    }
+
+    public void processSdcReferences(SvcLogicContext context, boolean isUpdate, String modelId) throws SvcLogicException {
         String key;
         QueryStatus status;
-
-        if (isUpdate && context.getAttribute(SdcArtifactHandlerConstants.FILE_CATEGORY)
+         if (isUpdate && context.getAttribute(SdcArtifactHandlerConstants.FILE_CATEGORY)
             .equals(SdcArtifactHandlerConstants.CAPABILITY)) {
             log.info("Updating capability artifact in ASDC_REFERENCE");
             key = UPDATE_QUERY_STR + SdcArtifactHandlerConstants.DB_SDC_REFERENCE + "  set ARTIFACT_NAME = $"
@@ -171,6 +173,9 @@ public class DBService {
                 + SdcArtifactHandlerConstants.VNFC_TYPE + AND_FILE_CAT_QUERY_STR
                 + SdcArtifactHandlerConstants.FILE_CATEGORY + AND_ACTION_QUERY_STR + SdcArtifactHandlerConstants.ACTION
                 + AND_VNF_TYPE_QUERY_STR + SdcArtifactHandlerConstants.VNF_TYPE;
+            if (StringUtils.isNotBlank(modelId)) {
+                key += createQueryListForTemplateIds(modelId);
+            }
         } else {
             if (context.getAttribute(SdcArtifactHandlerConstants.FILE_CATEGORY)
                 .equals(SdcArtifactHandlerConstants.CAPABILITY)) {
@@ -197,7 +202,11 @@ public class DBService {
         }
     }
 
-    public boolean isArtifactUpdateRequired(SvcLogicContext context, String db)
+    public boolean isArtifactUpdateRequired(SvcLogicContext context, String db) throws DBException {
+        return isArtifactUpdateRequired( context,  db, null);
+    }
+
+    public boolean isArtifactUpdateRequired(SvcLogicContext context, String db, String modelId)
         throws DBException {
         try {
             log.info("Checking if Update required for this data");
@@ -207,6 +216,22 @@ public class DBService {
             log.info("VNFC_INSTANCE=" + context.getAttribute(SdcArtifactHandlerConstants.VNFC_INSTANCE));
             log.info("VM_INSTANCE=" + context.getAttribute(SdcArtifactHandlerConstants.VM_INSTANCE));
             log.info("VNF_TYPE=" + context.getAttribute(SdcArtifactHandlerConstants.VNF_TYPE));
+
+            //Check for templates
+            //if templates are present - there might be multiple records, so validate
+            if( db.equals(SdcArtifactHandlerConstants.DB_SDC_REFERENCE) && StringUtils.isNotBlank(modelId)) {
+                log.info("ModelId is sent!!");
+                  String queryPart = createQueryListForTemplateIds(modelId);
+                  log.info("Querypart is = "+queryPart);
+                   if (isUpdateRequiredForTemplates(queryPart, context, db)) {
+                       log.info("Update is Required!!");
+                    return true;
+                   } else {
+                       log.info("Insert is Required!!");
+                       return false;
+                   }
+            }
+
             String whereClause;
             QueryStatus status;
             whereClause = WHERE_VNF_TYPE_QUERY_STR + SdcArtifactHandlerConstants.VNF_TYPE;
@@ -675,4 +700,41 @@ public class DBService {
                 + context.getAttribute(SdcArtifactHandlerConstants.VNF_TYPE), e);
         }
     }
+
+
+    public boolean isUpdateRequiredForTemplates(String queryPart, SvcLogicContext context, String db) throws DBException {
+        try {
+            log.info("Checking if Update required for this data");
+            log.info("db" + db);
+            log.info("ACTION=" + context.getAttribute(SdcArtifactHandlerConstants.ACTION));
+            log.info("VNF_TYPE=" + context.getAttribute(SdcArtifactHandlerConstants.VNF_TYPE));
+            log.info("");
+            String whereClause;
+            QueryStatus status;
+            whereClause = WHERE_VNF_TYPE_QUERY_STR + SdcArtifactHandlerConstants.VNF_TYPE ;
+            whereClause = resolveWhereClause(context, db, whereClause);
+            whereClause += queryPart;
+            if (validate(db)) {
+                if (!db.equals(SdcArtifactHandlerConstants.DB_DEVICE_AUTHENTICATION)) {
+                    String key = "select COUNT(*) from " + db + whereClause;
+                    log.info("SELECT String : " + key);
+                    status = serviceLogic.query("SQL", false, null, key, null, null, context);
+                    checkForFailure(db, status);
+                    String count = context.getAttribute("COUNT(*)");
+                    log.info("Number of row Returned : " + count + ": " + status + ":");
+                    return tryAddCountAttribute(context, count);
+                }
+            }
+            log.info("Problems validating DB and/or Context ");
+            return false;
+
+        } catch (SvcLogicException e) {
+            throw new DBException("An error occurred while checking for artifact update", e);
+        }
+    }
+
+    public String createQueryListForTemplateIds(String modelId) {
+        String queryPart = " AND ARTIFACT_NAME like '%_" + modelId+".%'";
+        return queryPart;
+    }
 }
index c476505..3498217 100644 (file)
@@ -18,7 +18,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
@@ -410,7 +409,12 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
         try {
             if (content.has(ARTIFACT_LIST_PARAM) && content.get(ARTIFACT_LIST_PARAM) instanceof JSONArray) {
                 JSONArray artifactLists = (JSONArray) content.get(ARTIFACT_LIST_PARAM);
-                doProcessArtifactList(dbservice, context, artifactLists);
+                JSONArray templateIdList = null;
+                if (content.has("template-id-list") && null != content.get("template-id-list")
+                        && content.get("template-id-list") instanceof JSONArray) {
+                        templateIdList = content.getJSONArray("template-id-list");
+                }
+                doProcessArtifactList(dbservice, context, artifactLists, templateIdList);
             }
         } catch (Exception e) {
             log.error("An error occurred when processing artifact list", e);
@@ -418,14 +422,23 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
         }
     }
 
-    private void doProcessArtifactList(DBService dbservice, SvcLogicContext context, JSONArray artifactLists)
+    private void doProcessArtifactList(DBService dbservice, SvcLogicContext context, JSONArray artifactLists,
+        JSONArray templateIdList)
         throws SvcLogicException, SQLException, ConfigurationException, DBException {
         boolean pdFile = false;
-        String suffix = null;
+        int modelInd = 0;
 
         for (int i = 0; i < artifactLists.length(); i++) {
+            String suffix = null;
+            String model = null;
             JSONObject artifact = (JSONObject) artifactLists.get(i);
             log.info("artifact is " + artifact);
+
+            //Get Model details
+            if (null != templateIdList && i>0 && i%2==0) {
+                modelInd++;
+            }
+
             setAttribute(context, artifact::getString, ARTIFACT_NAME);
             context.setAttribute(FILE_CATEGORY,
                 artifact.getString(ARTIFACT_TYPE));
@@ -436,26 +449,46 @@ public class ArtifactHandlerNode implements SvcLogicJavaPlugin {
                 suffix = artifact.getString(ARTIFACT_NAME).substring(PD.length());
                 pdFile = true;
             }
-            log.info("Artifact-type = " + context.getAttribute(ARTIFACT_TYPE));
-            dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context,
+            log.info("Artifact-type = " + context.getAttribute(FILE_CATEGORY));
+            log.info("Artifact-name = " + context.getAttribute(ARTIFACT_NAME));
+
+            if (null != templateIdList  && modelInd < templateIdList.length()) {
+                model = templateIdList.getString(modelInd);
+                log.info("Model is ::: "+model+"  ,modelInd = "+modelInd);
+            }
+
+            if (StringUtils.isNotBlank(model)) {
+                dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context,
+                    DB_SDC_REFERENCE, model),model);
+            }
+            else {
+                dbservice.processSdcReferences(context, dbservice.isArtifactUpdateRequired(context,
                 DB_SDC_REFERENCE));
+            }
 
             cleanArtifactInstanceData(context);
+            //Moving this into the for loop to account for mulitple artifact sets with pds
+            if (pdFile) {
+                log.info("Sending information related to pdfile Artifact");
+                tryUpdateContext(dbservice, context, pdFile, suffix, model);
+                pdFile=false;//set to false afterprocessing yang and Tosca
+            }
         }
-        tryUpdateContext(dbservice, context, pdFile, suffix);
+
     }
 
-    private void tryUpdateContext(DBService dbservice, SvcLogicContext context, boolean pdFile, String suffix)
+    private void tryUpdateContext(DBService dbservice, SvcLogicContext context, boolean pdFile,
+            String suffix, String model)
         throws SvcLogicException, SQLException, ConfigurationException, DBException {
         if (pdFile) {
             context.setAttribute(ARTIFACT_NAME, "Tosca".concat(suffix));
             context.setAttribute(FILE_CATEGORY, TOSCA_MODEL);
             dbservice.processSdcReferences(context,
-                dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE));
+                dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
             context.setAttribute(ARTIFACT_NAME, "Yang".concat(suffix));
             context.setAttribute(FILE_CATEGORY, PARAMETER_YANG);
             dbservice.processSdcReferences(context,
-                dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE));
+                dbservice.isArtifactUpdateRequired(context, DB_SDC_REFERENCE, model), model);
         }
     }
 
index 65f354a..dc57d24 100644 (file)
@@ -18,7 +18,6 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  *
- * ECOMP is a trademark and service mark of AT&T Intellectual Property.
  * ============LICENSE_END=========================================================
  */
 
@@ -245,7 +244,7 @@ public class ArtifactHandlerNodeTest {
                     vnfActionList, vmActionVnfcFunctionCodesList);
         }
     }
-    
+
     @Test
     public void testIsCapabilityArtifactNeeded() throws Exception {
         String scopeObjStr1= "{\"vnf-type\":\"someVnf\",\"vnfc-type\":\"somVnfc\"}";
@@ -257,4 +256,29 @@ public class ArtifactHandlerNodeTest {
         assertTrue(artifactHandlerNode.isCapabilityArtifactNeeded(scope2, context));
     }
 
+    @Test
+    public void testProcessArtifactListsWithMultipleTemplatesThrowsExceptionOnFailure() throws Exception {
+        String contentStr = "{\r\n\t\t\"action\": \"ConfigScaleOut\",\r\n\t\t\"action-level\": \"vnf\",\r\n\t\t\"scope\": {\r\n\t\t\t\"vnf-type\": "
+                + "\"vCfgSO-0405\",\r\n\t\t\t\"vnfc-type\": \"\"\r\n\t\t},\r\n\t\t\"template\": \"Y\",\r\n\t\t\"vm\": [{\r\n\t\t\t\"template-id\": "
+                + "\"TID-0405-EZ\",\r\n\t\t\t\"vm-instance\": 1,\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": \"1\",\r\n\t\t\t\t\"vnfc-function-code\": "
+                + "\"Cfg-ez\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": \"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\":"
+                + " \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vCfg-0405-ez\"\r\n\t\t\t}]\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"template-id\": "
+                + "\"TID-0405-EZ\",\r\n\t\t\t\"vm-instance\": 2,\r\n\t\t\t\"vnfc\": [{\r\n\t\t\t\t\"vnfc-instance\": \"1\",\r\n\t\t\t\t\"vnfc-function-code\": "
+                + "\"Cfg-ez\",\r\n\t\t\t\t\"ipaddress-v4-oam-vip\": \"Y\",\r\n\t\t\t\t\"group-notation-type\": \"first-vnfc-name\",\r\n\t\t\t\t\"group-notation-value\":"
+                + " \"pair\",\r\n\t\t\t\t\"vnfc-type\": \"vCfg-0405-ez\"\r\n\t\t\t}]\r\n\t\t}],\r\n\t\t\"device-protocol\": \"ANSIBLE\",\r\n\t\t\"user-name\": \"root\","
+                + "\r\n\t\t\"port-number\": \"22\",\r\n\t\t\"artifact-list\": [{\r\n\t\t\t\"artifact-name\": \"template_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ.json\","
+                + "\r\n\t\t\t\"artifact-type\": \"config_template\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": \"pd_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ.yaml\","
+                + "\r\n\t\t\t\"artifact-type\": \"parameter_definitions\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": "
+                + "\"template_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ-2.json\",\r\n\t\t\t\"artifact-type\": \"config_template\"\r\n\t\t},\r\n\t\t{\r\n\t\t\t\"artifact-name\": "
+                + "\"pd_ConfigScaleOut_vCfgSO-0405_0.0.1V_TID-0405-EZ-2.yaml\",\r\n\t\t\t\"artifact-type\": \"parameter_definitions\"\r\n\t\t}],\r\n\t\t\"template-id-list\":"
+                + " [\"TID-0405-EZ\",\r\n\t\t\"TID-0405-EZ-2\"],\r\n\t\t\"scopeType\": \"vnf-type\"\r\n\t}";
+        JSONObject content = new JSONObject(contentStr);
+        MockDBService dbService = MockDBService.initialise();
+        SvcLogicContext context = new SvcLogicContext();
+        context.setAttribute("vnf-type", "someVnf");
+        context.setAttribute("action", "ConfigScaleOut");
+        artifactHandlerNode.processArtifactList(content, dbService, context);;
+
+    }
+
 }