Merge "Swap indexOf with contains"
authorRob Daugherty <rd472p@att.com>
Wed, 7 Mar 2018 18:51:28 +0000 (18:51 +0000)
committerGerrit Code Review <gerrit@onap.org>
Wed, 7 Mar 2018 18:51:28 +0000 (18:51 +0000)
39 files changed:
LICENSE.txt
adapters/mso-catalog-db-adapter/src/main/java/org/openecomp/mso/adapters/catalogdb/CatalogDbAdapterRest.java
adapters/mso-catalog-db-adapter/src/main/java/org/openecomp/mso/adapters/catalogdb/catalogrest/QueryResourceRecipe.java [new file with mode: 0644]
adapters/mso-requests-db-adapter/src/main/java/org/openecomp/mso/adapters/requestsdb/MsoRequestsDbAdapterImpl.java
adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/VfcAdapterRest.java
adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/exceptions/ApplicationException.java
adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/util/ValidateUtil.java
adapters/mso-vfc-adapter/src/test/java/org/openecomp/mso/adapters/vfc/VfcAdapterTest.java
adapters/mso-vnf-adapter/src/main/java/org/openecomp/mso/adapters/vnf/MsoVnfAdapterAsyncImpl.java
adapters/mso-vnf-adapter/src/main/java/org/openecomp/mso/vdu/utils/VduPlugin.java
asdc-controller/src/main/java/org/openecomp/mso/asdc/client/ASDCGlobalController.java
bpmn/MSOCommonBPMN/src/main/groovy/org/openecomp/mso/bpmn/common/scripts/CatalogDbUtils.groovy
bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/util/CryptoUtils.java
bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/appc/ApplicationControllerSupport.java
bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/dmaap/rest/DMaaPRestClient.java
bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/client/sdno/SDNOValidator.java
bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfiguration.java
bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/domain/VnfResource.java
bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/mybatis/URNMapping.java
bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/xml/XmlTool.java
bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustService.groovy
bpmn/MSOInfrastructureBPMN/src/main/java/org/openecomp/mso/bpmn/infrastructure/workflow/serviceTask/AbstractSdncOperationTask.java
bpmn/MSOInfrastructureBPMN/src/test/groovy/org/openecomp/mso/bpmn/vcpe/scripts/CreateVcpeResCustServiceTest.groovy
bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VCPE/CreateVcpeResCustService/request.json
bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VCPE/CreateVcpeResCustService/requestNoSIName.json
bpmn/MSOInfrastructureBPMN/src/test/resources/__files/VCPE/CreateVcpeResCustService/requestNoSINameNoRollback.json
bpmn/MSORESTClient/src/main/java/org/openecomp/mso/rest/RESTClient.java
common/src/test/java/org/openecomp/mso/adapter_utils/tests/MsoPropertiesFactoryTest.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaClient.java
mso-api-handlers/mso-api-handler-common/src/main/java/org/openecomp/mso/apihandler/common/CamundaTaskClient.java
mso-api-handlers/mso-api-handler-infra/src/main/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstances.java
mso-api-handlers/mso-api-handler-infra/src/test/java/org/openecomp/mso/apihandlerinfra/E2EServiceInstancesTest.java
mso-api-handlers/mso-requests-db/src/main/java/org/openecomp/mso/requestsdb/RequestsDatabase.java
mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/CatalogDatabase.java
mso-catalog-db/src/main/java/org/openecomp/mso/db/catalog/beans/ModelRecipe.java
pom.xml

index bb235ff..2bb9ad2 100644 (file)
-/*
-* ============LICENSE_START==========================================
-* ===================================================================
-* Copyright © 2017 AT&T Intellectual Property. All rights reserved.
-* ===================================================================
-*
-* Unless otherwise specified, all software contained herein is licensed
-* under the Apache License, Version 2.0 (the “License”);
-* you may not use this software except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*             http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-*
-*
-* Unless otherwise specified, all documentation contained herein is licensed
-* under the Creative Commons License, Attribution 4.0 Intl. (the “License”);
-* you may not use this documentation except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*             https://creativecommons.org/licenses/by/4.0/
-*
-* Unless required by applicable law or agreed to in writing, documentation
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.
-*
-* ============LICENSE_END============================================
-*
-* ECOMP is a trademark and service mark of AT&T Intellectual Property.
-*
-*/
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
\ No newline at end of file
index cd6522b..d0d3999 100644 (file)
@@ -69,6 +69,7 @@ import org.openecomp.mso.adapters.catalogdb.catalogrest.CatalogQuery;
 import org.openecomp.mso.adapters.catalogdb.catalogrest.CatalogQueryException;
 import org.openecomp.mso.adapters.catalogdb.catalogrest.CatalogQueryExceptionCategory;
 import org.openecomp.mso.adapters.catalogdb.catalogrest.QueryAllottedResourceCustomization;
+import org.openecomp.mso.adapters.catalogdb.catalogrest.QueryResourceRecipe;
 import org.openecomp.mso.adapters.catalogdb.catalogrest.QueryServiceCsar;
 import org.openecomp.mso.adapters.catalogdb.catalogrest.QueryServiceMacroHolder;
 import org.openecomp.mso.adapters.catalogdb.catalogrest.QueryServiceNetworks;
@@ -77,6 +78,7 @@ import org.openecomp.mso.adapters.catalogdb.catalogrest.QueryVfModule;
 import org.openecomp.mso.db.catalog.CatalogDatabase;
 import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;
 import org.openecomp.mso.db.catalog.beans.NetworkResourceCustomization;
+import org.openecomp.mso.db.catalog.beans.Recipe;
 import org.openecomp.mso.db.catalog.beans.ServiceMacroHolder;
 import org.openecomp.mso.db.catalog.beans.ToscaCsar;
 import org.openecomp.mso.db.catalog.beans.VfModuleCustomization;
@@ -481,7 +483,7 @@ public class CatalogDbAdapterRest {
     @GET
     @Path("serviceToscaCsar")
     @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
-    public Response ServiceToscaCsar(@QueryParam("serviceModelUuid") String smUuid) {
+    public Response serviceToscaCsar(@QueryParam("serviceModelUuid") String smUuid) {
         int respStatus = HttpStatus.SC_OK;
         String entity = "";
         try (CatalogDatabase db = CatalogDatabase.getInstance()) {
@@ -515,4 +517,58 @@ public class CatalogDbAdapterRest {
                 .build();
         }
     }
+    
+    /**
+     * Get the resource recipe info from catalog
+     * <br>
+     * 
+     * @param rmUuid resource model uuid
+     * @return the recipe information of the resource.
+     * @since ONAP Beijing Release
+     */
+    @GET
+    @Path("resourceRecipe")
+    @Produces({ MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
+    public Response resourceRecipe(@QueryParam("resourceModelUuid") String rmUuid, @QueryParam("action") String action) {
+        int respStatus = HttpStatus.SC_OK;
+        CatalogDatabase db = CatalogDatabase.getInstance();
+        String entity = "";
+        try{
+            if(rmUuid != null && !"".equals(rmUuid)){
+                LOGGER.debug ("Query recipe by resource model uuid: " + rmUuid);
+                //check vnf and network and ar, the resource could be any resource.
+                Recipe recipe = db.getVnfRecipeByModuleUuid(rmUuid, action);
+                if(null == recipe){
+                    recipe = db.getNetworkRecipeByModuleUuid(rmUuid, action);
+                }
+                if(null == recipe){
+                    recipe = db.getArRecipeByModuleUuid(rmUuid, action);
+                }
+                if(recipe != null){
+                    QueryResourceRecipe resourceRecipe = new QueryResourceRecipe(recipe);
+                    entity = resourceRecipe.JSON2(false, false);
+                }
+                else{
+                    respStatus = HttpStatus.SC_NOT_FOUND;
+                }
+            }else{
+                throw(new Exception("Incoming parameter is null or blank"));
+            }           
+            LOGGER.debug ("Query recipe exit");
+            return Response
+                    .status(respStatus)
+                    .entity(entity) 
+                    .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON)
+                    .build();
+        }catch(Exception e){
+            LOGGER.error (MessageEnum.RA_QUERY_VNF_ERR,  rmUuid, "", "resourceRecipe", MsoLogger.ErrorCode.BusinessProcesssError, "Exception during query recipe by resource model uuid: ", e);
+            CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null);
+            return Response
+                    .status(HttpStatus.SC_INTERNAL_SERVER_ERROR)
+                    .entity(new GenericEntity<CatalogQueryException>(excResp) {})
+                    .build();
+        }finally {
+            db.close();
+        }
+    }
 }
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/openecomp/mso/adapters/catalogdb/catalogrest/QueryResourceRecipe.java b/adapters/mso-catalog-db-adapter/src/main/java/org/openecomp/mso/adapters/catalogdb/catalogrest/QueryResourceRecipe.java
new file mode 100644 (file)
index 0000000..5be6970
--- /dev/null
@@ -0,0 +1,72 @@
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP - SO\r
+ * ================================================================================\r
+ * Copyright (C) 2018 Huawei Technologies Co., Ltd. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+package org.openecomp.mso.adapters.catalogdb.catalogrest;\r
+\r
+import java.util.HashMap;\r
+import java.util.Map;\r
+\r
+import org.openecomp.mso.db.catalog.beans.Recipe;\r
+\r
+/**\r
+ * serivce csar query support \r
+ * <br>\r
+ * <p>\r
+ * </p>\r
+ * \r
+ * @author\r
+ * @version     ONAP Beijing Release  2018-02-28\r
+ */\r
+public class QueryResourceRecipe extends CatalogQuery{\r
+    \r
+    private Recipe resourceRecipe;\r
+    \r
+    public QueryResourceRecipe(Recipe resourceRecipe){\r
+        this.resourceRecipe =resourceRecipe;\r
+    }\r
+\r
+    private final String template =\r
+            "\t{\n"+\r
+            "\t\t\"id\"                     : <ID>,\n"+\r
+            "\t\t\"action\"                 : <ACTION>,\n"+\r
+            "\t\t\"orchestrationUri\"       : <ORCHESTRATION_URI>,\n"+\r
+            "\t\t\"recipeTimeout\"          : <RECIPE_TIMEOUT>,\n"+\r
+            "\t\t\"paramXSD\"               : <PARAM_XSD>,\n"+\r
+            "\t\t\"description\"            : <DESCRIPTION>\n"+\r
+            "\t}";\r
+    \r
+    @Override\r
+    public String toString() {\r
+\r
+        return resourceRecipe.toString();\r
+    }\r
+\r
+    @Override\r
+    public String JSON2(boolean isArray, boolean isEmbed) {\r
+        Map<String, String> valueMap = new HashMap<>();\r
+        put(valueMap, "ID", null == resourceRecipe ? null : resourceRecipe.getId());\r
+        put(valueMap, "ACTION", null == resourceRecipe ? null : resourceRecipe.getAction());\r
+        put(valueMap, "ORCHESTRATION_URI", null == resourceRecipe ? null : resourceRecipe.getOrchestrationUri());\r
+        put(valueMap, "RECIPE_TIMEOUT", null == resourceRecipe ? null : resourceRecipe.getRecipeTimeout());\r
+        put(valueMap, "PARAM_XSD", null == resourceRecipe ? null : resourceRecipe.getParamXSD());\r
+        put(valueMap, "DESCRIPTION", null == resourceRecipe ? null : resourceRecipe.getDescription());\r
+        return this.setTemplate(template, valueMap);\r
+    }\r
+\r
+}\r
index 0b404d7..99f6e86 100644 (file)
@@ -333,7 +333,7 @@ public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
      * 
      * @param serviceId
      * @param operationId
-     * @param resourceUUID
+     * @param resourceTemplateUUID
      * @return
      * @throws MsoRequestsDbException
      * @since   ONAP Amsterdam Release
@@ -350,7 +350,7 @@ public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
      * 
      * @param serviceId
      * @param operationId
-     * @param resourceUUID
+     * @param resourceTemplateUUID
      * @param operationType
      * @param resourceInstanceID
      * @param jobId
@@ -363,13 +363,13 @@ public class MsoRequestsDbAdapterImpl implements MsoRequestsDbAdapter {
      */
     @Override
     public void updateResourceOperationStatus(String serviceId, String operationId, String resourceTemplateUUID,
-            String operType, String resourceInstanceID, String jobId, String status, String progress,
+            String operationType, String resourceInstanceID, String jobId, String status, String progress,
             String errorCode, String statusDescription) throws MsoRequestsDbException {
          ResourceOperationStatus resStatus = new ResourceOperationStatus();
          resStatus.setServiceId(serviceId);
          resStatus.setOperationId(operationId);
          resStatus.setResourceTemplateUUID(resourceTemplateUUID);
-         resStatus.setOperType(operType);
+         resStatus.setOperType(operationType);
          resStatus.setResourceInstanceID(resourceInstanceID);
          resStatus.setJobId(jobId);
          resStatus.setStatus(status);
index 48da1ab..5f779dd 100644 (file)
@@ -60,7 +60,7 @@ public class VfcAdapterRest {
     /**
      * Create a NS <br>
      * 
-     * @param servletReq the http request
+     * @param data the http request
      * @return
      * @since ONAP Amsterdam Release
      */
index 61966d0..30d42ae 100644 (file)
@@ -39,7 +39,7 @@ public class ApplicationException extends Exception {
      * </p>
      * 
      * @param errorCode error status
-     * @param errorDetail error detail
+     * @param errorMsg error detail
      * @since ONAP Amsterdam Release 2017-9-6
      */
     public ApplicationException(int errorCode, String errorMsg) {
index c79d09e..13727bd 100644 (file)
@@ -47,7 +47,7 @@ public class ValidateUtil {
    * Assert String parameter.<br/>\r
    * \r
    * @param paramValue parameter data\r
-   * @param name of parameter\r
+   * @param paramName parameter name\r
    * @since ONAP Amsterdam Release 2017-9-6\r
    */\r
   public static void assertStringNotNull(String paramValue, String paramName)\r
index 95d3bf6..759ceed 100644 (file)
@@ -60,7 +60,7 @@ public class VfcAdapterTest {
     /**
      * mock get request body <br>
      * 
-     * @param request
+     * @param fileName
      * @return
      * @since ONAP Amsterdam Release
      */
@@ -71,7 +71,6 @@ public class VfcAdapterTest {
     /**
      * Mock the request body form a file <br>
      * 
-     * @param fileName
      * @since ONAP Amsterdam Release
      */
     private void mockRestfulUtil() {
index 4842580..5c65429 100644 (file)
@@ -371,8 +371,9 @@ public class MsoVnfAdapterAsyncImpl implements MsoVnfAdapterAsync {
      * @param cloudSiteId CLLI code of the cloud site in which to delete
      * @param tenantId Openstack tenant identifier
      * @param vnfName VNF Name or Openstack ID
+     * @param messageId
      * @param msoRequest Request tracking information for logs
-     * @param notificationURL the target URL for asynchronous response
+     * @param notificationUrl the target URL for asynchronous response
      */
     @Override
     public void deleteVnfA (String cloudSiteId,
index 3452a10..856b713 100755 (executable)
@@ -145,7 +145,7 @@ public interface VduPlugin {
      * @param tenantId The cloud tenant in which to delete the VDU.
      * @param vduInstanceId The unique id of the deployment to delete.
      * @param timeoutMinutes Timeout after which the delete action will be cancelled
-     * @param deleteBlueprint Flag to also delete the blueprint
+     * @param keepBlueprintLoaded Flag to also delete the blueprint
      * 
      * @return A VduInfo object, representing the state of the instance just prior to deletion.
      * 
index 295dddd..430bd10 100644 (file)
@@ -78,7 +78,7 @@ public class ASDCGlobalController {
     
     /**
      * Check that controllers list needs to be updated or not.
-     * @param return true if the list has been updated
+     * return true if the list has been updated
      */
     private boolean updateControllersListIfNeeded ()  {
        boolean updateNeeded=false;
index dd6e56a..921e0ee 100644 (file)
@@ -1203,4 +1203,25 @@ class CatalogDbUtils {
                }\r
 \r
        }\r
+       \r
+    /**\r
+     * get resource recipe by resource model uuid and action\r
+     */\r
+    public JSONObject getResourceRecipe(Execution execution, String resourceModelUuid, String action) {\r
+        String endPoint = "/resourceRecipe?resourceModelUuid=" + UriUtils.encode(resourceModelUuid, "UTF-8")+ "&action=" + UriUtils.encode(action, "UTF-8")\r
+        JSONObject responseJson = null\r
+        try {\r
+            msoLogger.debug("ENDPOINT: " + endPoint)\r
+            String catalogDbResponse = getResponseFromCatalogDb(execution, endPoint)\r
+\r
+            if (catalogDbResponse != null) {\r
+                responseJson = new JSONObject(catalogDbResponse)\r
+            }\r
+        }\r
+        catch (Exception e) {\r
+            utils.log("ERROR", "Exception in Querying Catalog DB: " + e.message)\r
+        }\r
+\r
+        return responseJson\r
+    }\r
 }
\ No newline at end of file
index 5972c76..2ad1e30 100644 (file)
@@ -38,11 +38,10 @@ public class CryptoUtils {
     public static final String AES = "AES";\r
 \r
     /**\r
-    * encrypt a value and generate a keyfile\r
+     * encrypt a value and generate a keyfile\r
      * if the keyfile is not found then a new one is created\r
-    * @throws GeneralSecurityException\r
-     * @throws IOException\r
-     */\r
+     * @throws GeneralSecurityException\r
+     * */\r
     public static String encrypt(String value, String keyString) throws GeneralSecurityException\r
     {\r
         SecretKeySpec sks = getSecretKeySpec(keyString);\r
@@ -53,9 +52,8 @@ public class CryptoUtils {
     }\r
 \r
     /**\r
-    * decrypt a value\r
+     * decrypt a value\r
      * @throws GeneralSecurityException\r
-     * @throws IOException\r
      */\r
     public static String decrypt(String message, String keyString) throws GeneralSecurityException\r
     {\r
index 765bf61..f7db52b 100644 (file)
@@ -71,7 +71,7 @@ public class ApplicationControllerSupport {
        }
 
        /**
-        * @param inputClass
+        * @param action
         * @return
         * @throws ClassNotFoundException
         * @throws InstantiationException
index 124e2c3..f54eba4 100644 (file)
@@ -42,7 +42,7 @@ public class DMaaPRestClient  extends RestClient {
 
        @Override
        protected void initializeHeaderMap(Map<String, String> headerMap) {
-               headerMap.put("Authorization", "Basic " + Base64.getEncoder().encodeToString(new String(username + ":" + password).getBytes()));
+               headerMap.put("Authorization", "Basic " + Base64.getEncoder().encodeToString((username + ":" + password).getBytes()));
        }
 
        @Override
index c746c0d..df30e43 100644 (file)
@@ -27,8 +27,8 @@ public interface SDNOValidator {
        /**
         * Issues a health diagnostic request for a given vnf to SDN-O
         * 
-        * @param vnfName
-        * @param uuid
+        * @param vnfId
+        * @param requestingUserId
         * @throws IOException
         * @throws Exception
         */
index b71f708..6f0095f 100644 (file)
@@ -1829,7 +1829,7 @@ public class WorkflowTest {
                /**\r
                 * Constructor\r
                 * @param contentType the HTTP content type (optional)\r
-                * @param type the callback message type (optional)\r
+                * @param messageType the callback message type (optional)\r
                 * @param content the content\r
                 */\r
                public CallbackData(String contentType, String messageType, String content) {\r
index 6059a35..b627205 100644 (file)
@@ -238,7 +238,6 @@ public class PropertyConfiguration {
         * Reads properties from the specified file, updates the property file cache, and
         * returns the properties in a map.
         * @param file the file to read
-        * @param reload true if this is a reload event
         * @return a map of properties
         */
        private Map<String, String> readProperties(File file) throws IOException {
index b972d6a..a1719a9 100644 (file)
@@ -176,7 +176,7 @@ public class PropertyConfigurationSetup {
         * PropertyConfiguration, just like they do when a property file is updated on
         * a real MSO system. This method will optionally wait for the new properties
         * to be loaded.  Timeout results in an IOException.
-        * @param values new properties
+        * @param properties new properties
         * @param wait maximum amount of time to wait for new properties to be loaded,
         *             in milliseconds.  A value of zero means, "Do not wait."
         * @throws IOException
index a09f5a7..20903c0 100644 (file)
@@ -146,7 +146,6 @@ public class VnfResource extends Resource {
         * \r
         * default setter for this field deprecated\r
         * @param modelName << serviceResources.modelInfo.modelName\r
-        * @param modelInstanceName\r
         */\r
        public void constructVnfType(String modelName) {\r
                this.vnfType = modelName.concat("/").concat(this.modelInfo.getModelInstanceName());\r
index 2612c38..b0152a1 100644 (file)
@@ -117,7 +117,7 @@ public class JsonUtils {
         * to convert a JSONObject to an XML Doc. The intent of this is to\r
         * correctly generate XML from JSON including TAGs for JSONArrays\r
         *\r
-        * @param  jsonObj      org.json.JSON object to be converted to XML\r
+        * @param  obj object to be converted to XML\r
         * @param  tagName      optional XML tagname supplied primarily during recursive calls\r
         * @return String containing the XML translation\r
         */\r
@@ -913,7 +913,7 @@ public class JsonUtils {
         * and puts it in a Java List<String>.\r
         *\r
         * @param execution\r
-        * @param stringArray - the getJsonValue of a json array of strings\r
+        * @param jsonArrayOfStrings - the getJsonValue of a json array of strings\r
         *\r
         * @return List - a java list containing the strings\r
         *\r
index 177fafc..c48b671 100644 (file)
@@ -93,7 +93,7 @@ public class URNMapping {
         * aai:endpoint becomes URN_aai_endpoint <br/>
         * ae:internal-reporting becomes URN_ae_internal_reporting <br/>
         * 
-        * @param name the URN
+        * @param urn the URN
         * @return a normalized identifier
         */
        public static String createIdentifierFromURN(String urn) {
index f5b9f8d..1fc43ba 100644 (file)
@@ -130,7 +130,7 @@ public final class XmlTool {
 
        /**
         * Encodes a value so it can be used inside an XML text element.
-        * @param s the string to encode
+        * @param value the string to encode
         * @return the encoded string
         */
        public static String encode(Object value) {
@@ -171,7 +171,7 @@ public final class XmlTool {
        
        /**
         * Encodes a value so it can be used inside an XML attribute.
-        * @param s the string to encode
+        * @param value the string to encode
         * @return the encoded string
         */
        public static String encodeAttr(Object value) {
index dd6d451..e1cae80 100644 (file)
-/*\r
- * ============LICENSE_START=======================================================\r
- * ONAP - SO\r
- * ================================================================================\r
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-package org.openecomp.mso.bpmn.vcpe.scripts;\r
-\r
-import groovy.xml.XmlUtil\r
-import groovy.json.*\r
-\r
-import org.openecomp.mso.bpmn.core.json.JsonUtils\r
-import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor\r
-import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils\r
-import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil\r
-import org.openecomp.mso.bpmn.common.scripts.VidUtils\r
-import org.openecomp.mso.bpmn.core.RollbackData\r
-import org.openecomp.mso.bpmn.core.WorkflowException\r
-import org.openecomp.mso.bpmn.core.domain.*\r
-\r
-import java.util.UUID;\r
-\r
-import org.camunda.bpm.engine.delegate.BpmnError\r
-import org.camunda.bpm.engine.runtime.Execution\r
-import org.json.JSONObject;\r
-import org.json.JSONArray;\r
-import org.apache.commons.lang3.*\r
-import org.apache.commons.codec.binary.Base64;\r
-import org.springframework.web.util.UriUtils;\r
-import static org.apache.commons.lang3.StringUtils.*\r
-\r
-/**\r
- * This groovy class supports the <class>CreateVcpeResCustService.bpmn</class> process.\r
- *\r
- * @author ek1439\r
- *\r
- */\r
-public class CreateVcpeResCustService extends AbstractServiceTaskProcessor {\r
-\r
-       private static final String DebugFlag = "isDebugLogEnabled"\r
-\r
-       String Prefix="CVRCS_"\r
-       ExceptionUtil exceptionUtil = new ExceptionUtil()\r
-       JsonUtils jsonUtil = new JsonUtils()\r
-       VidUtils vidUtils = new VidUtils()\r
-       CatalogDbUtils catalogDbUtils = new CatalogDbUtils()\r
-\r
-       /**\r
-        * This method is executed during the preProcessRequest task of the <class>CreateServiceInstance.bpmn</class> process.\r
-        * @param execution\r
-        */\r
-       public InitializeProcessVariables(Execution execution){\r
-               /* Initialize all the process variables in this block */\r
-\r
-               execution.setVariable("createVcpeServiceRequest", "")\r
-               execution.setVariable("globalSubscriberId", "")\r
-               execution.setVariable("serviceInstanceName", "")\r
-               execution.setVariable("msoRequestId", "")\r
-               execution.setVariable(Prefix+"VnfsCreatedCount", 0)\r
-               execution.setVariable("productFamilyId", "")\r
-               execution.setVariable("brgWanMacAddress", "")\r
-\r
-               //TODO\r
-               execution.setVariable("sdncVersion", "1707")\r
-       }\r
-\r
-       // **************************************************\r
-       //     Pre or Prepare Request Section\r
-       // **************************************************\r
-       /**\r
-        * This method is executed during the preProcessRequest task of the <class>CreateServiceInstance.bpmn</class> process.\r
-        * @param execution\r
-        */\r
-       public void preProcessRequest (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-               execution.setVariable("prefix",Prefix)\r
-\r
-               utils.log("DEBUG", " ***** Inside preProcessRequest CreateVcpeResCustService Request ***** ", isDebugEnabled)\r
-\r
-               try {\r
-                       // initialize flow variables\r
-                       InitializeProcessVariables(execution)\r
-\r
-                       //Config Inputs\r
-                       String aaiDistDelay = execution.getVariable('URN_mso_workflow_aai_distribution_delay')\r
-                       if (isBlank(aaiDistDelay)) {\r
-                               msg = "URN_mso_workflow_aai_distribution_delay is null"\r
-                               utils.log("DEBUG", msg, isDebugEnabled)\r
-                               exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)\r
-                       }\r
-                       execution.setVariable("aaiDistDelay", aaiDistDelay)\r
-                       utils.log("DEBUG","AAI distribution delay: " + aaiDistDelay, isDebugEnabled)\r
-\r
-                       // check for incoming json message/input\r
-                       String createVcpeServiceRequest = execution.getVariable("bpmnRequest")\r
-                       utils.logAudit(createVcpeServiceRequest)\r
-                       execution.setVariable("createVcpeServiceRequest", createVcpeServiceRequest);\r
-                       println 'createVcpeServiceRequest - ' + createVcpeServiceRequest\r
-\r
-                       // extract requestId\r
-                       String requestId = execution.getVariable("mso-request-id")\r
-                       execution.setVariable("msoRequestId", requestId)\r
-\r
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")\r
-\r
-                       if ((serviceInstanceId == null) || (serviceInstanceId.isEmpty())) {\r
-                               serviceInstanceId = UUID.randomUUID().toString()\r
-                               utils.log("DEBUG", " Generated new Service Instance: " + serviceInstanceId , isDebugEnabled)\r
-                       } else {\r
-                               utils.log("DEBUG", "Using provided Service Instance ID: " + serviceInstanceId , isDebugEnabled)\r
-                       }\r
-\r
-                       serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8")\r
-                       execution.setVariable("serviceInstanceId", serviceInstanceId)\r
-\r
-                       String requestAction = execution.getVariable("requestAction")\r
-                       execution.setVariable("requestAction", requestAction)\r
-\r
-                       setBasicDBAuthHeader(execution, isDebugEnabled)\r
-                       \r
-                       String source = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestInfo.source")\r
-                       if ((source == null) || (source.isEmpty())) {\r
-                               source = "VID"\r
-                       }\r
-                       execution.setVariable("source", source)\r
-\r
-                       // extract globalSubscriberId\r
-                       String globalSubscriberId = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.subscriberInfo.globalSubscriberId")\r
-\r
-                       // verify element global-customer-id is sent from JSON input, throw exception if missing\r
-                       if ((globalSubscriberId == null) || (globalSubscriberId.isEmpty())) {\r
-                               String dataErrorMessage = " Element 'globalSubscriberId' is missing. "\r
-                               exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)\r
-\r
-                       } else {\r
-                               execution.setVariable("globalSubscriberId", globalSubscriberId)\r
-                               execution.setVariable("globalCustomerId", globalSubscriberId)\r
-                       }\r
-\r
-                       // extract subscriptionServiceType\r
-                       String subscriptionServiceType = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestParameters.subscriptionServiceType")\r
-                       execution.setVariable("subscriptionServiceType", subscriptionServiceType)\r
-                       utils.log("DEBUG", "Incoming subscriptionServiceType is: " + subscriptionServiceType, isDebugEnabled)\r
-\r
-                       String suppressRollback = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestInfo.suppressRollback")\r
-                       execution.setVariable("disableRollback", suppressRollback)\r
-                       utils.log("DEBUG", "Incoming Suppress/Disable Rollback is: " + suppressRollback, isDebugEnabled)\r
-\r
-                       String productFamilyId = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestInfo.productFamilyId")\r
-                       execution.setVariable("productFamilyId", productFamilyId)\r
-                       utils.log("DEBUG", "Incoming productFamilyId is: " + productFamilyId, isDebugEnabled)\r
-                       \r
-                       String subscriberInfo = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.subscriberInfo")\r
-                       execution.setVariable("subscriberInfo", subscriberInfo)\r
-                       utils.log("DEBUG", "Incoming subscriberInfo is: " + subscriberInfo, isDebugEnabled)\r
-\r
-                 /*\r
-                 * Extracting User Parameters from incoming Request and converting into a Map\r
-                 */\r
-                 def jsonSlurper = new JsonSlurper()\r
-                 def jsonOutput = new JsonOutput()\r
-\r
-                 Map reqMap = jsonSlurper.parseText(createVcpeServiceRequest)\r
-\r  
-                 //InputParams\r
-                 def userParams = reqMap.requestDetails?.requestParameters?.userParams\r
+/*
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+package org.openecomp.mso.bpmn.vcpe.scripts;
+
+import groovy.xml.XmlUtil
+import groovy.json.*
+
+import org.openecomp.mso.bpmn.core.json.JsonUtils
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor
+import org.openecomp.mso.bpmn.common.scripts.CatalogDbUtils
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil
+import org.openecomp.mso.bpmn.common.scripts.VidUtils
+import org.openecomp.mso.bpmn.core.RollbackData
+import org.openecomp.mso.bpmn.core.WorkflowException
+import org.openecomp.mso.bpmn.core.domain.*
+
+import java.util.UUID;
+
+import org.camunda.bpm.engine.delegate.BpmnError
+import org.camunda.bpm.engine.runtime.Execution
+import org.json.JSONObject;
+import org.json.JSONArray;
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.web.util.UriUtils;
+import static org.apache.commons.lang3.StringUtils.*
+
+/**
+ * This groovy class supports the <class>CreateVcpeResCustService.bpmn</class> process.
+ *
+ * @author ek1439
+ *
+ */
+public class CreateVcpeResCustService extends AbstractServiceTaskProcessor {
+
+    private static final String DebugFlag = "isDebugLogEnabled"
+
+    String Prefix="CVRCS_"
+    ExceptionUtil exceptionUtil = new ExceptionUtil()
+    JsonUtils jsonUtil = new JsonUtils()
+    VidUtils vidUtils = new VidUtils()
+    CatalogDbUtils catalogDbUtils = new CatalogDbUtils()
+
+    /**
+     * This method is executed during the preProcessRequest task of the
+     * <class>CreateServiceInstance.bpmn</class> process.
+     * @param execution
+     */
+    public InitializeProcessVariables(Execution execution){
+        /* Initialize all the process variables in this block */
+
+        execution.setVariable("createVcpeServiceRequest", "")
+        execution.setVariable("globalSubscriberId", "")
+        execution.setVariable("serviceInstanceName", "")
+        execution.setVariable("msoRequestId", "")
+        execution.setVariable(Prefix+"VnfsCreatedCount", 0)
+        execution.setVariable("productFamilyId", "")
+        execution.setVariable("brgWanMacAddress", "")
+        execution.setVariable("customerLocation", "")
+
+        //TODO
+        execution.setVariable("sdncVersion", "1707")
+    }
+
+    // **************************************************
+    //     Pre or Prepare Request Section
+    // **************************************************
+    /**
+     * This method is executed during the preProcessRequest task of the
+     * <class>CreateServiceInstance.bpmn</class> process.
+     * @param execution
+     */
+    public void preProcessRequest (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+        execution.setVariable("prefix",Prefix)
+
+        utils.log("DEBUG", " ***** Inside preProcessRequest CreateVcpeResCustService Request ***** ", isDebugEnabled)
+
+        try {
+            // initialize flow variables
+            InitializeProcessVariables(execution)
+
+            //Config Inputs
+            String aaiDistDelay = execution.getVariable('URN_mso_workflow_aai_distribution_delay')
+            if (isBlank(aaiDistDelay)) {
+                msg = "URN_mso_workflow_aai_distribution_delay is null"
+                utils.log("DEBUG", msg, isDebugEnabled)
+                exceptionUtil.buildAndThrowWorkflowException(execution, 500, msg)
+            }
+            execution.setVariable("aaiDistDelay", aaiDistDelay)
+            utils.log("DEBUG","AAI distribution delay: " + aaiDistDelay, isDebugEnabled)
+
+            // check for incoming json message/input
+            String createVcpeServiceRequest = execution.getVariable("bpmnRequest")
+            utils.logAudit(createVcpeServiceRequest)
+            execution.setVariable("createVcpeServiceRequest", createVcpeServiceRequest);
+            println 'createVcpeServiceRequest - ' + createVcpeServiceRequest
+
+            // extract requestId
+            String requestId = execution.getVariable("mso-request-id")
+            execution.setVariable("msoRequestId", requestId)
+
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+            if ((serviceInstanceId == null) || (serviceInstanceId.isEmpty())) {
+                serviceInstanceId = UUID.randomUUID().toString()
+                utils.log("DEBUG", " Generated new Service Instance: " + serviceInstanceId , isDebugEnabled)
+            } else {
+                utils.log("DEBUG", "Using provided Service Instance ID: " + serviceInstanceId , isDebugEnabled)
+            }
+
+            serviceInstanceId = UriUtils.encode(serviceInstanceId,"UTF-8")
+            execution.setVariable("serviceInstanceId", serviceInstanceId)
+
+            String requestAction = execution.getVariable("requestAction")
+            execution.setVariable("requestAction", requestAction)
+
+            setBasicDBAuthHeader(execution, isDebugEnabled)
+
+            String source = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestInfo.source")
+            if ((source == null) || (source.isEmpty())) {
+                source = "VID"
+            }
+            execution.setVariable("source", source)
+
+            // extract globalSubscriberId
+            String globalSubscriberId = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.subscriberInfo.globalSubscriberId")
+
+            // verify element global-customer-id is sent from JSON input, throw exception if missing
+            if ((globalSubscriberId == null) || (globalSubscriberId.isEmpty())) {
+                String dataErrorMessage = " Element 'globalSubscriberId' is missing. "
+                exceptionUtil.buildAndThrowWorkflowException(execution, 2500, dataErrorMessage)
+
+            } else {
+                execution.setVariable("globalSubscriberId", globalSubscriberId)
+                execution.setVariable("globalCustomerId", globalSubscriberId)
+            }
+
+            // extract subscriptionServiceType
+            String subscriptionServiceType = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.requestParameters.subscriptionServiceType")
+            execution.setVariable("subscriptionServiceType", subscriptionServiceType)
+            utils.log("DEBUG", "Incoming subscriptionServiceType is: " + subscriptionServiceType, isDebugEnabled)
+
+            String suppressRollback = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.requestInfo.suppressRollback")
+            execution.setVariable("disableRollback", suppressRollback)
+            utils.log("DEBUG", "Incoming Suppress/Disable Rollback is: " + suppressRollback, isDebugEnabled)
+
+            String productFamilyId = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.requestInfo.productFamilyId")
+            execution.setVariable("productFamilyId", productFamilyId)
+            utils.log("DEBUG", "Incoming productFamilyId is: " + productFamilyId, isDebugEnabled)
+
+            String subscriberInfo = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.subscriberInfo")
+            execution.setVariable("subscriberInfo", subscriberInfo)
+            utils.log("DEBUG", "Incoming subscriberInfo is: " + subscriberInfo, isDebugEnabled)
+
+          /*
+          * Extracting User Parameters from incoming Request and converting into a Map
+          */
+          def jsonSlurper = new JsonSlurper()
+          def jsonOutput = new JsonOutput()
+
+          Map reqMap = jsonSlurper.parseText(createVcpeServiceRequest)
+
   
-                 Map<String, String> inputMap = [:]\r
-\r
-\r
-                 if (userParams) {\r
-                               userParams.each {\r
-                                                               userParam ->\r
-                                                               if("BRG_WAN_MAC_Address".equals(userParam?.name)) {\r
-                                                                                               execution.setVariable("brgWanMacAddress", userParam.value)\r
-                                                                                               inputMap.put("BRG_WAN_MAC_Address", userParam.value)\r
-                                       }\r
-                               }\r
-                 }\r
-\r
-                 utils.log("DEBUG", "User Input Parameters map: " + userParams.toString(), isDebugEnabled)\r
-                 execution.setVariable("serviceInputParams", inputMap)\r
-\r
-                       utils.log("DEBUG", "Incoming brgWanMacAddress is: " + execution.getVariable('brgWanMacAddress'), isDebugEnabled)\r
-\r
-                       //For Completion Handler & Fallout Handler\r
-                       String requestInfo =\r
-                       """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">\r
-                                       <request-id>${requestId}</request-id>\r
-                                       <action>CREATE</action>\r
-                                       <source>${source}</source>\r
-                                  </request-info>"""\r
-\r
-                       execution.setVariable(Prefix+"requestInfo", requestInfo)\r
-\r
-                       utils.log("DEBUG", " ***** Completed preProcessRequest CreateVcpeResCustService Request ***** ", isDebugEnabled)\r
-\r
-               } catch (BpmnError e) {\r
-                       throw e;\r
-\r
-               } catch (Exception ex){\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected from method preProcessRequest() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-       }\r
-\r
-       public void sendSyncResponse(Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               utils.log("DEBUG", " ***** Inside sendSyncResponse of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-               try {\r
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")\r
-                       String requestId = execution.getVariable("mso-request-id")\r
-\r
-                       // RESTResponse (for API Handler (APIH) Reply Task)\r
-                       String syncResponse ="""{"requestReferences":{"instanceId":"${serviceInstanceId}","requestId":"${requestId}"}}""".trim()\r
-\r
-                       utils.log("DEBUG", " sendSynchResponse: xmlSyncResponse - " + "\n" + syncResponse, isDebugEnabled)\r
-                       sendWorkflowResponse(execution, 202, syncResponse)\r
-\r
-               } catch (Exception ex) {\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected from method sendSyncResponse() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-       }\r
-\r
-       // *******************************\r
-       //\r
-       // *******************************\r
-       public void prepareDecomposeService(Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               try {\r
-                       utils.log("DEBUG", " ***** Inside prepareDecomposeService of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-                       String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")\r
-\r
-                       //serviceModelInfo JSON string will be used as-is for DoCreateServiceInstance BB\r
-                       String serviceModelInfo = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.modelInfo")\r
-                       execution.setVariable("serviceModelInfo", serviceModelInfo)\r
-\r
-                       utils.log("DEBUG", " ***** Completed prepareDecomposeService of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected Error from method prepareDecomposeService() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-        }\r
-\r
-       // *******************************\r
-       //\r
-       // *******************************\r
-       public void prepareCreateServiceInstance(Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               try {\r
-                       utils.log("DEBUG", " ***** Inside prepareCreateServiceInstance of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-                       /*\r
-                        * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from DecompositionObject\r
-                        *              ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-                        *              ModelInfo modelInfo = serviceDecomposition.getModelInfo()\r
-                        *\r
-                        */\r
-                       String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")\r
-//                     String serviceInputParams = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestParameters")\r
-//                     execution.setVariable("serviceInputParams", serviceInputParams)\r
-\r
-
-                       String serviceInstanceName = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestInfo.instanceName")\r
-                       execution.setVariable("serviceInstanceName", serviceInstanceName)\r
-\r
-                       ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-                       execution.setVariable("serviceDecompositionString", serviceDecomposition.toJsonStringNoRootName())\r
-\r
-                       utils.log("DEBUG", " ***** Completed prepareCreateServiceInstance of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-        }\r
-\r
-       public void postProcessServiceInstanceCreate (Execution execution){\r
-               def method = getClass().getSimpleName() + '.postProcessServiceInstanceCreate(' +'execution=' + execution.getId() +')'\r
-               def isDebugLogEnabled = execution.getVariable(DebugFlag)\r
-               logDebug('Entered ' + method, isDebugLogEnabled)\r
-\r
-               String requestId = execution.getVariable("mso-request-id")\r
-               String serviceInstanceId = execution.getVariable("serviceInstanceId")\r
-               String serviceInstanceName = execution.getVariable("serviceInstanceName")\r
-\r
-               try {\r
-\r
-                       String payload = """\r
-                       <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:req="http://org.openecomp.mso/requestsdb">\r
-                       <soapenv:Header/>\r
-                       <soapenv:Body>\r
-                       <req:updateInfraRequest>\r
-                               <requestId>${requestId}</requestId>\r
-                               <lastModifiedBy>BPEL</lastModifiedBy>\r
-                               <serviceInstanceId>${serviceInstanceId}</serviceInstanceId>\r
-                               <serviceInstanceName>${serviceInstanceName}</serviceInstanceName>\r
-                       </req:updateInfraRequest>\r
-                       </soapenv:Body>\r
-                       </soapenv:Envelope>\r
-                       """\r
-                       execution.setVariable(Prefix+"setUpdateDbInstancePayload", payload)\r
-                       utils.logAudit(Prefix+"setUpdateDbInstancePayload: " + payload)\r
-                       logDebug('Exited ' + method, isDebugLogEnabled)\r
-\r
-               } catch (BpmnError e) {\r
-                       throw e;\r
-               } catch (Exception e) {\r
-                       logError('Caught exception in ' + method, e)\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Internal Error - Occured in" + method)\r
-               }\r
-       }\r
-\r
-\r
-       public void processDecomposition (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               utils.log("DEBUG", " ***** Inside processDecomposition() of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-               try {\r
-\r
-                       ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-\r
-                       // VNFs\r
-                       List<VnfResource> vnfList = serviceDecomposition.getServiceVnfs()\r
-                       filterVnfs(vnfList)\r
-                       serviceDecomposition.setServiceVnfs(vnfList)\r
-                       \r
-                       execution.setVariable("vnfList", vnfList)\r
-                       execution.setVariable("vnfListString", vnfList.toString())\r
-\r
-                       String vnfModelInfoString = ""\r
-                       if (vnfList != null && vnfList.size() > 0) {\r
-                               execution.setVariable(Prefix+"VNFsCount", vnfList.size())\r
-                               utils.log("DEBUG", "vnfs to create: "+ vnfList.size(), isDebugEnabled)\r
-                               ModelInfo vnfModelInfo = vnfList[0].getModelInfo()\r
-\r
-                               vnfModelInfoString = vnfModelInfo.toString()\r
-                               String vnfModelInfoWithRoot = vnfModelInfo.toString()\r
-                               vnfModelInfoString = jsonUtil.getJsonValue(vnfModelInfoWithRoot, "modelInfo")\r
-                       } else {\r
-                                       execution.setVariable(Prefix+"VNFsCount", 0)\r
-                                       utils.log("DEBUG", "no vnfs to create based upon serviceDecomposition content", isDebugEnabled)\r
-                       }\r
-\r
-                       execution.setVariable("vnfModelInfo", vnfModelInfoString)\r
-                       execution.setVariable("vnfModelInfoString", vnfModelInfoString)\r
-                       utils.log("DEBUG", " vnfModelInfoString :" + vnfModelInfoString, isDebugEnabled)\r
-\r
-                       utils.log("DEBUG", " ***** Completed processDecomposition() of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       sendSyncError(execution)\r
-                  String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. processDecomposition() - " + ex.getMessage()\r
-                  utils.log("DEBUG", exceptionMessage, isDebugEnabled)\r
-                  exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-       }\r
-       \r
-       private void filterVnfs(List<VnfResource> vnfList) {\r
-               if(vnfList == null) {\r
-                       return\r
-               }\r
-               \r
-               // remove BRG & TXC from VNF list\r
-               \r
-               Iterator<VnfResource> it = vnfList.iterator()\r
-               while(it.hasNext()) {\r
-                       VnfResource vr = it.next()\r
-                       \r
-                       String role = vr.getNfRole()\r
-                       if(role == "BRG" || role == "TunnelXConn") {\r
-                               it.remove()\r
-                       }\r
-               }\r
-       }\r
-\r
-\r
-       public void prepareCreateAllottedResourceTXC(Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               try {\r
-                       utils.log("DEBUG", " ***** Inside prepareCreateAllottedResourceTXC of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-                       /*\r
-                        * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from DecompositionObject\r
-                        *              ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-                        *              ModelInfo modelInfo = serviceDecomposition.getModelInfo()\r
-                        *\r
-                        */\r
-                       String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")\r
-                       ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-\r
-                       //allottedResourceModelInfo\r
-                       //allottedResourceRole\r
-                       //The model Info parameters are a JSON structure as defined in the Service Instantiation API.\r
-                       //It would be sufficient to only include the service model UUID (i.e. the modelVersionId), since this BB will query the full model from the Catalog DB.\r
-                       List<AllottedResource> allottedResources = serviceDecomposition.getServiceAllottedResources()\r
-                       if (allottedResources != null) {\r
-                               Iterator iter = allottedResources.iterator();\r
-                               while (iter.hasNext()){\r
-                                       AllottedResource allottedResource = (AllottedResource)iter.next();\r
-\r
-                                       utils.log("DEBUG", " getting model info for AllottedResource # :" + allottedResource.toJsonStringNoRootName(), isDebugEnabled)\r
-                                       utils.log("DEBUG", " allottedResource.getAllottedResourceType() :" + allottedResource.getAllottedResourceType(), isDebugEnabled)\r
-                                       if("TunnelXConn".equalsIgnoreCase(allottedResource.getAllottedResourceType())){\r
-                                               //set create flag to true\r
-                                               execution.setVariable("createTXCAR", true)\r
-                                               ModelInfo allottedResourceModelInfo = allottedResource.getModelInfo()\r
-                                               execution.setVariable("allottedResourceModelInfoTXC", allottedResourceModelInfo.toJsonStringNoRootName())\r
-                                               execution.setVariable("allottedResourceRoleTXC", allottedResource.getAllottedResourceRole())\r
-                                               execution.setVariable("allottedResourceTypeTXC", allottedResource.getAllottedResourceType())\r
-                                               //After decomposition and homing BBs, there should be an allotted resource object in the decomposition that represents the TXC,\r
-                                               //and in its homingSolution section should be found the infraServiceInstanceId (i.e. infraServiceInstanceId in TXC Allotted Resource structure) (which the Homing BB would have populated).\r
-                                               execution.setVariable("parentServiceInstanceIdTXC", allottedResource.getHomingSolution().getServiceInstanceId())\r
-                                       }
-                               }\r
-                       }\r
-\r
-                       //unit test only\r
-                       String allottedResourceId = execution.getVariable("allottedResourceId")\r
-                       execution.setVariable("allottedResourceIdTXC", allottedResourceId)\r
-                       utils.log("DEBUG", "setting allottedResourceId CreateVcpeResCustService "+allottedResourceId, isDebugEnabled)\r
-                       \r
-                       utils.log("DEBUG", " ***** Completed prepareCreateAllottedResourceTXC of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in prepareCreateAllottedResourceTXC flow. Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-        }\r
-       public void prepareCreateAllottedResourceBRG(Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               try {\r
-                       utils.log("DEBUG", " ***** Inside prepareCreateAllottedResourceBRG of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-                       /*\r
-                        * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from DecompositionObject\r
-                        *              ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-                        *              ModelInfo modelInfo = serviceDecomposition.getModelInfo()\r
-                        *\r
-                        */\r
-                       String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")\r
-                       ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")\r
-\r
-                       //allottedResourceModelInfo\r
-                       //allottedResourceRole\r
-                       //The model Info parameters are a JSON structure as defined in the Service Instantiation API.\r
-                       //It would be sufficient to only include the service model UUID (i.e. the modelVersionId), since this BB will query the full model from the Catalog DB.\r
-                       List<AllottedResource> allottedResources = serviceDecomposition.getServiceAllottedResources()\r
-                       if (allottedResources != null) {\r
-                               Iterator iter = allottedResources.iterator();\r
-                               while (iter.hasNext()){\r
-                                       AllottedResource allottedResource = (AllottedResource)iter.next();\r
-\r
-                                       utils.log("DEBUG", " getting model info for AllottedResource # :" + allottedResource.toJsonStringNoRootName(), isDebugEnabled)\r
-                                       utils.log("DEBUG", " allottedResource.getAllottedResourceType() :" + allottedResource.getAllottedResourceType(), isDebugEnabled)\r
-                                       if("BRG".equalsIgnoreCase(allottedResource.getAllottedResourceType())){\r
-                                               //set create flag to true\r
-                                               execution.setVariable("createBRGAR", true)\r
-                                               ModelInfo allottedResourceModelInfo = allottedResource.getModelInfo()\r
-                                               execution.setVariable("allottedResourceModelInfoBRG", allottedResourceModelInfo.toJsonStringNoRootName())\r
-                                               execution.setVariable("allottedResourceRoleBRG", allottedResource.getAllottedResourceRole())\r
-                                               execution.setVariable("allottedResourceTypeBRG", allottedResource.getAllottedResourceType())\r
-                                               //After decomposition and homing BBs, there should be an allotted resource object in the decomposition that represents the BRG,\r
-                                               //and in its homingSolution section should be found the infraServiceInstanceId (i.e. infraServiceInstanceId in BRG Allotted Resource structure) (which the Homing BB would have populated).\r
-                                               execution.setVariable("parentServiceInstanceIdBRG", allottedResource.getHomingSolution().getServiceInstanceId())\r
-                                       }\r
-                               }\r
-                       }\r
-\r
-                       //unit test only\r
-                       String allottedResourceId = execution.getVariable("allottedResourceId")\r
-                       execution.setVariable("allottedResourceIdBRG", allottedResourceId)\r
-                       utils.log("DEBUG", "setting allottedResourceId CreateVcpeResCustService "+allottedResourceId, isDebugEnabled)\r
-                       \r
-                       utils.log("DEBUG", " ***** Completed prepareCreateAllottedResourceBRG of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in prepareCreateAllottedResourceBRG flow. Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-        }\r
-\r
-
-
-       // *******************************\r
-       //     Generate Network request Section\r
-       // *******************************\r
-       public void prepareVnfAndModulesCreate (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               try {\r
-                       utils.log("DEBUG", " ***** Inside prepareVnfAndModulesCreate of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-                       //                      String disableRollback = execution.getVariable("disableRollback")\r
-                       //                      def backoutOnFailure = ""\r
-                       //                      if(disableRollback != null){\r
-                       //                              if ( disableRollback == true) {\r
-                       //                                      backoutOnFailure = "false"\r
-                       //                              } else if ( disableRollback == false) {\r
-                       //                                      backoutOnFailure = "true"\r
-                       //                              }\r
-                       //                      }\r
-                                               //failIfExists - optional\r
-\r
-                       String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")\r
-                       String productFamilyId = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.requestInfo.productFamilyId")\r
-                       execution.setVariable("productFamilyId", productFamilyId)\r
-                       utils.log("DEBUG","productFamilyId: "+ productFamilyId, isDebugEnabled)\r
-\r
-                       List<VnfResource> vnfList = execution.getVariable("vnfList")\r
-\r
-                       Integer vnfsCreatedCount = execution.getVariable(Prefix+"VnfsCreatedCount")\r
-                       String vnfModelInfoString = null;\r
-\r
-                       if (vnfList != null && vnfList.size() > 0 ) {\r
-                               utils.log("DEBUG", "getting model info for vnf # " + vnfsCreatedCount, isDebugEnabled)\r
-                               ModelInfo vnfModelInfo1 = vnfList[0].getModelInfo()\r
-                               utils.log("DEBUG", "got 0 ", isDebugEnabled)\r
-                               ModelInfo vnfModelInfo = vnfList[vnfsCreatedCount.intValue()].getModelInfo()\r
-                               vnfModelInfoString = vnfModelInfo.toString()\r
-                       } else {\r
-                               //TODO: vnfList does not contain data. Need to investigate why ... . Fro VCPE use model stored\r
-                               vnfModelInfoString = execution.getVariable("vnfModelInfo")\r
-                       }\r
-\r
-                       utils.log("DEBUG", " vnfModelInfoString :" + vnfModelInfoString, isDebugEnabled)\r
-\r
-                       // extract cloud configuration\r
-                       String lcpCloudRegionId = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.cloudConfiguration.lcpCloudRegionId")\r
-                       execution.setVariable("lcpCloudRegionId", lcpCloudRegionId)\r
-                       utils.log("DEBUG","lcpCloudRegionId: "+ lcpCloudRegionId, isDebugEnabled)\r
-                       String tenantId = jsonUtil.getJsonValue(createVcpeServiceRequest, "requestDetails.cloudConfiguration.tenantId")\r
-                       execution.setVariable("tenantId", tenantId)\r
-                       utils.log("DEBUG","tenantId: "+ tenantId, isDebugEnabled)\r
-\r
-                       String sdncVersion = execution.getVariable("sdncVersion")\r
-                       utils.log("DEBUG","sdncVersion: "+ sdncVersion, isDebugEnabled)\r
-\r
-                       utils.log("DEBUG", " ***** Completed prepareVnfAndModulesCreate of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected Error from method prepareVnfAndModulesCreate() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-        }\r
-\r
-       // *******************************\r
-       //     Validate Vnf request Section -> increment count\r
-       // *******************************\r
-       public void validateVnfCreate (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               try {\r
-                       utils.log("DEBUG", " ***** Inside validateVnfCreate of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-                       Integer vnfsCreatedCount = execution.getVariable(Prefix+"VnfsCreatedCount")\r
-                       vnfsCreatedCount++\r
-\r
-                       execution.setVariable(Prefix+"VnfsCreatedCount", vnfsCreatedCount)\r
-\r
-                       utils.log("DEBUG", " ***** Completed validateVnfCreate of CreateVcpeResCustService ***** "+" vnf # "+vnfsCreatedCount, isDebugEnabled)\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected Error from method validateVnfCreate() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-        }\r
-\r
-       // *****************************************\r
-       //     Prepare Completion request Section\r
-       // *****************************************\r
-       public void postProcessResponse (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               utils.log("DEBUG", " ***** Inside postProcessResponse of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-               try {\r
-                       String source = execution.getVariable("source")\r
-                       String requestId = execution.getVariable("mso-request-id")\r
-                       String serviceInstanceId = execution.getVariable("serviceInstanceId")\r
-\r
-                       String msoCompletionRequest =\r
-                                       """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"\r
-                                                                       xmlns:ns="http://org.openecomp/mso/request/types/v1">\r
-                                                       <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">\r
-                                                               <request-id>${requestId}</request-id>\r
-                                                               <action>CREATE</action>\r
-                                                               <source>${source}</source>\r
-                                                       </request-info>\r
-                                                       <status-message>Service Instance has been created successfully via macro orchestration</status-message>\r
-                                                       <serviceInstanceId>${serviceInstanceId}</serviceInstanceId>\r
-                                                       <mso-bpel-name>BPMN macro create</mso-bpel-name>\r
-                                               </aetgt:MsoCompletionRequest>"""\r
-\r
-                       // Format Response\r
-                       String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)\r
-\r
-                       utils.logAudit(xmlMsoCompletionRequest)\r
-                       execution.setVariable(Prefix+"Success", true)\r
-                       execution.setVariable(Prefix+"CompleteMsoProcessRequest", xmlMsoCompletionRequest)\r
-                       utils.log("DEBUG", " SUCCESS flow, going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)\r
-               } catch (BpmnError e) {\r
-                       throw e;\r
-               } catch (Exception ex) {\r
-                       // try error in method block\r
-                       String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. Unexpected Error from method postProcessResponse() - " + ex.getMessage()\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)\r
-               }\r
-       }\r
-\r
-       public void preProcessRollback (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-               utils.log("DEBUG"," ***** preProcessRollback of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               try {\r
-\r
-                       Object workflowException = execution.getVariable("WorkflowException");\r
-\r
-                       if (workflowException instanceof WorkflowException) {\r
-                               utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled)\r
-                               execution.setVariable("prevWorkflowException", workflowException);\r
-                               //execution.setVariable("WorkflowException", null);\r
-                       }\r
-               } catch (BpmnError e) {\r
-                       utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled)\r
-               } catch(Exception ex) {\r
-                       String msg = "Exception in preProcessRollback. " + ex.getMessage()\r
-                       utils.log("DEBUG", msg, isDebugEnabled)\r
-               }\r
-               utils.log("DEBUG"," *** Exit preProcessRollback of CreateVcpeResCustService *** ", isDebugEnabled)\r
-       }\r
-\r
-       public void postProcessRollback (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-               utils.log("DEBUG"," ***** postProcessRollback of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-               String msg = ""\r
-               try {\r
-                       Object workflowException = execution.getVariable("prevWorkflowException");\r
-                       if (workflowException instanceof WorkflowException) {\r
-                               utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled)\r
-                               execution.setVariable("WorkflowException", workflowException);\r
-                       }\r
-               } catch (BpmnError b) {\r
-                       utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled)\r
-                       throw b;\r
-               } catch(Exception ex) {\r
-                       msg = "Exception in postProcessRollback. " + ex.getMessage()\r
-                       utils.log("DEBUG", msg, isDebugEnabled)\r
-               }\r
-               utils.log("DEBUG"," *** Exit postProcessRollback of CreateVcpeResCustService *** ", isDebugEnabled)\r
-       }\r
-\r
-       public void prepareFalloutRequest(Execution execution){\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-\r
-               utils.log("DEBUG", " *** STARTED CreateVcpeResCustService prepareFalloutRequest Process *** ", isDebugEnabled)\r
-\r
-               try {\r
-                       WorkflowException wfex = execution.getVariable("WorkflowException")\r
-                       utils.log("DEBUG", " Incoming Workflow Exception: " + wfex.toString(), isDebugEnabled)\r
-                       String requestInfo = execution.getVariable(Prefix+"requestInfo")\r
-                       utils.log("DEBUG", " Incoming Request Info: " + requestInfo, isDebugEnabled)\r
-\r
-                       //TODO. hmmm. there is no way to UPDATE error message.\r
-//                     String errorMessage = wfex.getErrorMessage()\r
-//                     boolean successIndicator = execution.getVariable("DCRESI_rolledBack")\r
-//                     if (successIndicator){\r
-//                             errorMessage = errorMessage + ". Rollback successful."\r
-//                     } else {\r
-//                             errorMessage = errorMessage + ". Rollback not completed."\r
-//                     }\r
-\r
-                       String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo)\r
-\r
-                       execution.setVariable(Prefix+"falloutRequest", falloutRequest)\r
-\r
-               } catch (Exception ex) {\r
-                       utils.log("DEBUG", "Error Occured in CreateVcpeResCustService prepareFalloutRequest Process " + ex.getMessage(), isDebugEnabled)\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 2500, "Internal Error - Occured in CreateVcpeResCustService prepareFalloutRequest Process")\r
-               }\r
-               utils.log("DEBUG", "*** COMPLETED CreateVcpeResCustService prepareFalloutRequest Process ***", isDebugEnabled)\r
-       }\r
-\r
-\r
-       public void sendSyncError (Execution execution) {\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-               execution.setVariable("prefix", Prefix)\r
-\r
-               utils.log("DEBUG", " ***** Inside sendSyncError() of CreateVcpeResCustService ***** ", isDebugEnabled)\r
-\r
-               try {\r
-                       String errorMessage = ""\r
-                       def wfe = execution.getVariable("WorkflowException")\r
-                       if (wfe instanceof WorkflowException) {\r
-                               errorMessage = wfe.getErrorMessage()\r
-                       } else {\r
-                               errorMessage = "Sending Sync Error."\r
-                       }\r
-\r
-                       String buildworkflowException =\r
-                               """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">\r
-                                       <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage>\r
-                                       <aetgt:ErrorCode>7000</aetgt:ErrorCode>\r
-                                  </aetgt:WorkflowException>"""\r
-\r
-                       utils.logAudit(buildworkflowException)\r
-                       sendWorkflowResponse(execution, 500, buildworkflowException)\r
-               } catch (Exception ex) {\r
-                       utils.log("DEBUG", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled)\r
-               }\r
-       }\r
-\r
-       public void processJavaException(Execution execution){\r
-               def isDebugEnabled=execution.getVariable(DebugFlag)\r
-               execution.setVariable("prefix",Prefix)\r
-               try{\r
-                       utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled)\r
-                       utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)\r
-                       utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)\r
-                       execution.setVariable(Prefix+"unexpectedError", "Caught a Java Lang Exception")  // Adding this line temporarily until this flows error handling gets updated\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Caught a Java Lang Exception")\r
-               }catch(BpmnError b){\r
-                       utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugEnabled)\r
-                       throw b\r
-               }catch(Exception e){\r
-                       utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)\r
-                       execution.setVariable(Prefix+"unexpectedError", "Exception in processJavaException method")  // Adding this line temporarily until this flows error handling gets updated\r
-                       exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception in processJavaException method")\r
-               }\r
-               utils.log("DEBUG", "Completed processJavaException Method", isDebugEnabled)\r
-       }\r
-}\r
+          //InputParams
+          def userParams = reqMap.requestDetails?.requestParameters?.userParams
+  
+          Map<String, String> inputMap = [:]
+
+
+          if (userParams) {
+                userParams.each {
+                                userParam ->
+                                if("BRG_WAN_MAC_Address".equals(userParam?.name)) {
+                                                execution.setVariable("brgWanMacAddress", userParam.value)
+                                                inputMap.put("BRG_WAN_MAC_Address", userParam.value)
+                    }
+                                if("Customer_Location".equals(userParam?.name)) {
+                                    execution.setVariable("customerLocation", userParam.value)
+                                    userParam.value.each {
+                                        customerLocParam ->
+                                        inputMap.put(customerLocParam.key, customerLocParam.value)
+                                    }
+                                }
+                }
+          }
+
+          utils.log("DEBUG", "User Input Parameters map: " + userParams.toString(), isDebugEnabled)
+          execution.setVariable("serviceInputParams", inputMap)
+
+            utils.log("DEBUG", "Incoming brgWanMacAddress is: " +
+                    execution.getVariable('brgWanMacAddress'), isDebugEnabled)
+            utils.log("DEBUG", "Incoming customerLocation is: " +
+                    execution.getVariable('customerLocation'), isDebugEnabled)
+
+            //For Completion Handler & Fallout Handler
+            String requestInfo =
+            """<request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+                    <request-id>${requestId}</request-id>
+                    <action>CREATE</action>
+                    <source>${source}</source>
+                   </request-info>"""
+
+            execution.setVariable(Prefix+"requestInfo", requestInfo)
+
+            utils.log("DEBUG",
+                    " ***** Completed preProcessRequest CreateVcpeResCustService Request ***** ", isDebugEnabled)
+
+        } catch (BpmnError e) {
+            throw e;
+
+        } catch (Exception ex){
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow." +
+                    " Unexpected from method preProcessRequest() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+    }
+
+    public void sendSyncResponse(Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        utils.log("DEBUG", " ***** Inside sendSyncResponse of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+        try {
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+            String requestId = execution.getVariable("mso-request-id")
+
+            // RESTResponse (for API Handler (APIH) Reply Task)
+            String syncResponse ="""{"requestReferences":{
+                        "instanceId":"${serviceInstanceId}",
+                        "requestId":"${requestId}"
+                        }}""".trim()
+
+            utils.log("DEBUG", " sendSynchResponse: xmlSyncResponse - " + "\n" + syncResponse, isDebugEnabled)
+            sendWorkflowResponse(execution, 202, syncResponse)
+
+        } catch (Exception ex) {
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                    "Unexpected from method sendSyncResponse() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+    }
+
+    // *******************************
+    //
+    // *******************************
+    public void prepareDecomposeService(Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        try {
+            utils.log("DEBUG",
+                    " ***** Inside prepareDecomposeService of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+            String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")
+
+            //serviceModelInfo JSON string will be used as-is for DoCreateServiceInstance BB
+            String serviceModelInfo = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.modelInfo")
+            execution.setVariable("serviceModelInfo", serviceModelInfo)
+
+            utils.log("DEBUG",
+                    " ***** Completed prepareDecomposeService of CreateVcpeResCustService ***** ", isDebugEnabled)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                    "Unexpected Error from method prepareDecomposeService() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+     }
+
+    // *******************************
+    //
+    // *******************************
+    public void prepareCreateServiceInstance(Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        try {
+            utils.log("DEBUG",
+                    " ***** Inside prepareCreateServiceInstance of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+            /*
+             * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from
+             * DecompositionObject
+             *      ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+             *      ModelInfo modelInfo = serviceDecomposition.getModelInfo()
+             *
+             */
+            String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")
+//          String serviceInputParams = jsonUtil.getJsonValue(createVcpeServiceRequest,
+//                  "requestDetails.requestParameters")
+//          execution.setVariable("serviceInputParams", serviceInputParams)
+
+
+            String serviceInstanceName = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.requestInfo.instanceName")
+            execution.setVariable("serviceInstanceName", serviceInstanceName)
+
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+            execution.setVariable("serviceDecompositionString", serviceDecomposition.toJsonStringNoRootName())
+
+            utils.log("DEBUG",
+                    " ***** Completed prepareCreateServiceInstance of CreateVcpeResCustService ***** ", isDebugEnabled)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                    "Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+     }
+
+    public void postProcessServiceInstanceCreate (Execution execution){
+        def method = getClass().getSimpleName() + '.postProcessServiceInstanceCreate(' +
+                'execution=' + execution.getId() +')'
+        def isDebugLogEnabled = execution.getVariable(DebugFlag)
+        logDebug('Entered ' + method, isDebugLogEnabled)
+
+        String requestId = execution.getVariable("mso-request-id")
+        String serviceInstanceId = execution.getVariable("serviceInstanceId")
+        String serviceInstanceName = execution.getVariable("serviceInstanceName")
+
+        try {
+
+            String payload = """
+            <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" 
+xmlns:req="http://org.openecomp.mso/requestsdb">
+            <soapenv:Header/>
+            <soapenv:Body>
+            <req:updateInfraRequest>
+                <requestId>${requestId}</requestId>
+                <lastModifiedBy>BPEL</lastModifiedBy>
+                <serviceInstanceId>${serviceInstanceId}</serviceInstanceId>
+                <serviceInstanceName>${serviceInstanceName}</serviceInstanceName>
+            </req:updateInfraRequest>
+            </soapenv:Body>
+            </soapenv:Envelope>
+            """
+            execution.setVariable(Prefix+"setUpdateDbInstancePayload", payload)
+            utils.logAudit(Prefix+"setUpdateDbInstancePayload: " + payload)
+            logDebug('Exited ' + method, isDebugLogEnabled)
+
+        } catch (BpmnError e) {
+            throw e;
+        } catch (Exception e) {
+            logError('Caught exception in ' + method, e)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 2000, "Internal Error - Occured in" + method)
+        }
+    }
+
+
+    public void processDecomposition (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        utils.log("DEBUG", " ***** Inside processDecomposition() of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+        try {
+
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+
+            // VNFs
+            List<VnfResource> vnfList = serviceDecomposition.getServiceVnfs()
+            filterVnfs(vnfList)
+            serviceDecomposition.setServiceVnfs(vnfList)
+
+            execution.setVariable("vnfList", vnfList)
+            execution.setVariable("vnfListString", vnfList.toString())
+
+            String vnfModelInfoString = ""
+            if (vnfList != null && vnfList.size() > 0) {
+                execution.setVariable(Prefix+"VNFsCount", vnfList.size())
+                utils.log("DEBUG", "vnfs to create: "+ vnfList.size(), isDebugEnabled)
+                ModelInfo vnfModelInfo = vnfList[0].getModelInfo()
+
+                vnfModelInfoString = vnfModelInfo.toString()
+                String vnfModelInfoWithRoot = vnfModelInfo.toString()
+                vnfModelInfoString = jsonUtil.getJsonValue(vnfModelInfoWithRoot, "modelInfo")
+            } else {
+                    execution.setVariable(Prefix+"VNFsCount", 0)
+                    utils.log("DEBUG", "no vnfs to create based upon serviceDecomposition content", isDebugEnabled)
+            }
+
+            execution.setVariable("vnfModelInfo", vnfModelInfoString)
+            execution.setVariable("vnfModelInfoString", vnfModelInfoString)
+            utils.log("DEBUG", " vnfModelInfoString :" + vnfModelInfoString, isDebugEnabled)
+
+            utils.log("DEBUG",
+                    " ***** Completed processDecomposition() of CreateVcpeResCustService ***** ", isDebugEnabled)
+        } catch (Exception ex) {
+            sendSyncError(execution)
+           String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                   "processDecomposition() - " + ex.getMessage()
+           utils.log("DEBUG", exceptionMessage, isDebugEnabled)
+           exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+    }
+
+    private void filterVnfs(List<VnfResource> vnfList) {
+        if(vnfList == null) {
+            return
+        }
+
+        // remove BRG & TXC from VNF list
+
+        Iterator<VnfResource> it = vnfList.iterator()
+        while(it.hasNext()) {
+            VnfResource vr = it.next()
+
+            String role = vr.getNfRole()
+            if(role == "BRG" || role == "TunnelXConn") {
+                it.remove()
+            }
+        }
+    }
+
+
+    public void prepareCreateAllottedResourceTXC(Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        try {
+            utils.log("DEBUG",
+                    " ***** Inside prepareCreateAllottedResourceTXC of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+            /*
+             * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from
+             * DecompositionObject
+             *      ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+             *      ModelInfo modelInfo = serviceDecomposition.getModelInfo()
+             *
+             */
+            String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+
+            //allottedResourceModelInfo
+            //allottedResourceRole
+            //The model Info parameters are a JSON structure as defined in the Service Instantiation API.
+            //It would be sufficient to only include the service model UUID (i.e. the modelVersionId), since this
+            //BB will query the full model from the Catalog DB.
+            List<AllottedResource> allottedResources = serviceDecomposition.getServiceAllottedResources()
+            if (allottedResources != null) {
+                Iterator iter = allottedResources.iterator();
+                while (iter.hasNext()){
+                    AllottedResource allottedResource = (AllottedResource)iter.next();
+
+                    utils.log("DEBUG", " getting model info for AllottedResource # :" +
+                            allottedResource.toJsonStringNoRootName(), isDebugEnabled)
+                    utils.log("DEBUG", " allottedResource.getAllottedResourceType() :" +
+                            allottedResource.getAllottedResourceType(), isDebugEnabled)
+                    if("TunnelXConn".equalsIgnoreCase(allottedResource.getAllottedResourceType())){
+                        //set create flag to true
+                        execution.setVariable("createTXCAR", true)
+                        ModelInfo allottedResourceModelInfo = allottedResource.getModelInfo()
+                        execution.setVariable("allottedResourceModelInfoTXC",
+                                allottedResourceModelInfo.toJsonStringNoRootName())
+                        execution.setVariable("allottedResourceRoleTXC", allottedResource.getAllottedResourceRole())
+                        execution.setVariable("allottedResourceTypeTXC", allottedResource.getAllottedResourceType())
+                        //After decomposition and homing BBs, there should be an allotted resource object in the
+                        // decomposition that represents the TXC,
+                        //and in its homingSolution section should be found the infraServiceInstanceId
+                        // (i.e. infraServiceInstanceId in TXC Allotted Resource structure) (which the Homing
+                        // BB would have populated).
+                        execution.setVariable("parentServiceInstanceIdTXC",
+                                allottedResource.getHomingSolution().getServiceInstanceId())
+                    }
+                }
+            }
+
+            //unit test only
+            String allottedResourceId = execution.getVariable("allottedResourceId")
+            execution.setVariable("allottedResourceIdTXC", allottedResourceId)
+            utils.log("DEBUG",
+                    "setting allottedResourceId CreateVcpeResCustService "+ allottedResourceId, isDebugEnabled)
+
+            utils.log("DEBUG",
+                    " ***** Completed prepareCreateAllottedResourceTXC of CreateVcpeResCustService ***** ",
+                    isDebugEnabled)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in prepareCreateAllottedResourceTXC flow. " +
+                    "Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+     }
+    public void prepareCreateAllottedResourceBRG(Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        try {
+            utils.log("DEBUG",
+                    " ***** Inside prepareCreateAllottedResourceBRG of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+            /*
+             * Service modelInfo is created in earlier step. This flow can use it as-is ... or, extract from
+             * DecompositionObject
+             *      ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+             *      ModelInfo modelInfo = serviceDecomposition.getModelInfo()
+             *
+             */
+            String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")
+            ServiceDecomposition serviceDecomposition = execution.getVariable("serviceDecomposition")
+
+            //allottedResourceModelInfo
+            //allottedResourceRole
+            //The model Info parameters are a JSON structure as defined in the Service Instantiation API.
+            //It would be sufficient to only include the service model UUID (i.e. the modelVersionId), since this
+            // BB will query the full model from the Catalog DB.
+            List<AllottedResource> allottedResources = serviceDecomposition.getServiceAllottedResources()
+            if (allottedResources != null) {
+                Iterator iter = allottedResources.iterator();
+                while (iter.hasNext()){
+                    AllottedResource allottedResource = (AllottedResource)iter.next();
+
+                    utils.log("DEBUG", " getting model info for AllottedResource # :" +
+                            allottedResource.toJsonStringNoRootName(), isDebugEnabled)
+                    utils.log("DEBUG", " allottedResource.getAllottedResourceType() :" +
+                            allottedResource.getAllottedResourceType(), isDebugEnabled)
+                    if("BRG".equalsIgnoreCase(allottedResource.getAllottedResourceType())){
+                        //set create flag to true
+                        execution.setVariable("createBRGAR", true)
+                        ModelInfo allottedResourceModelInfo = allottedResource.getModelInfo()
+                        execution.setVariable("allottedResourceModelInfoBRG",
+                                allottedResourceModelInfo.toJsonStringNoRootName())
+                        execution.setVariable("allottedResourceRoleBRG", allottedResource.getAllottedResourceRole())
+                        execution.setVariable("allottedResourceTypeBRG", allottedResource.getAllottedResourceType())
+                        //After decomposition and homing BBs, there should be an allotted resource object in the
+                        // decomposition that represents the BRG,
+                        //and in its homingSolution section should be found the infraServiceInstanceId
+                        // (i.e. infraServiceInstanceId in BRG Allotted Resource structure) (which the Homing
+                        // BB would have populated).
+                        execution.setVariable("parentServiceInstanceIdBRG",
+                                allottedResource.getHomingSolution().getServiceInstanceId())
+                    }
+                }
+            }
+
+            //unit test only
+            String allottedResourceId = execution.getVariable("allottedResourceId")
+            execution.setVariable("allottedResourceIdBRG", allottedResourceId)
+            utils.log("DEBUG",
+                    "setting allottedResourceId CreateVcpeResCustService " + allottedResourceId, isDebugEnabled)
+
+            utils.log("DEBUG",
+                    " ***** Completed prepareCreateAllottedResourceBRG of CreateVcpeResCustService ***** ",
+                    isDebugEnabled)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in prepareCreateAllottedResourceBRG flow. " +
+                    "Unexpected Error from method prepareCreateServiceInstance() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+     }
+
+
+
+    // *******************************
+    //     Generate Network request Section
+    // *******************************
+    public void prepareVnfAndModulesCreate (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        try {
+            utils.log("DEBUG",
+                    " ***** Inside prepareVnfAndModulesCreate of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+            //          String disableRollback = execution.getVariable("disableRollback")
+            //          def backoutOnFailure = ""
+            //          if(disableRollback != null){
+            //              if ( disableRollback == true) {
+            //                  backoutOnFailure = "false"
+            //              } else if ( disableRollback == false) {
+            //                  backoutOnFailure = "true"
+            //              }
+            //          }
+                        //failIfExists - optional
+
+            String createVcpeServiceRequest = execution.getVariable("createVcpeServiceRequest")
+            String productFamilyId = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.requestInfo.productFamilyId")
+            execution.setVariable("productFamilyId", productFamilyId)
+            utils.log("DEBUG","productFamilyId: "+ productFamilyId, isDebugEnabled)
+
+            List<VnfResource> vnfList = execution.getVariable("vnfList")
+
+            Integer vnfsCreatedCount = execution.getVariable(Prefix+"VnfsCreatedCount")
+            String vnfModelInfoString = null;
+
+            if (vnfList != null && vnfList.size() > 0 ) {
+                utils.log("DEBUG", "getting model info for vnf # " + vnfsCreatedCount, isDebugEnabled)
+                ModelInfo vnfModelInfo1 = vnfList[0].getModelInfo()
+                utils.log("DEBUG", "got 0 ", isDebugEnabled)
+                ModelInfo vnfModelInfo = vnfList[vnfsCreatedCount.intValue()].getModelInfo()
+                vnfModelInfoString = vnfModelInfo.toString()
+            } else {
+                //TODO: vnfList does not contain data. Need to investigate why ... . Fro VCPE use model stored
+                vnfModelInfoString = execution.getVariable("vnfModelInfo")
+            }
+
+            utils.log("DEBUG", " vnfModelInfoString :" + vnfModelInfoString, isDebugEnabled)
+
+            // extract cloud configuration
+            String lcpCloudRegionId = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.cloudConfiguration.lcpCloudRegionId")
+            execution.setVariable("lcpCloudRegionId", lcpCloudRegionId)
+            utils.log("DEBUG","lcpCloudRegionId: "+ lcpCloudRegionId, isDebugEnabled)
+            String tenantId = jsonUtil.getJsonValue(createVcpeServiceRequest,
+                    "requestDetails.cloudConfiguration.tenantId")
+            execution.setVariable("tenantId", tenantId)
+            utils.log("DEBUG","tenantId: "+ tenantId, isDebugEnabled)
+
+            String sdncVersion = execution.getVariable("sdncVersion")
+            utils.log("DEBUG","sdncVersion: "+ sdncVersion, isDebugEnabled)
+
+            utils.log("DEBUG",
+                    " ***** Completed prepareVnfAndModulesCreate of CreateVcpeResCustService ***** ", isDebugEnabled)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                    "Unexpected Error from method prepareVnfAndModulesCreate() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+     }
+
+    // *******************************
+    //     Validate Vnf request Section -> increment count
+    // *******************************
+    public void validateVnfCreate (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        try {
+            utils.log("DEBUG", " ***** Inside validateVnfCreate of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+            Integer vnfsCreatedCount = execution.getVariable(Prefix+"VnfsCreatedCount")
+            vnfsCreatedCount++
+
+            execution.setVariable(Prefix+"VnfsCreatedCount", vnfsCreatedCount)
+
+            utils.log("DEBUG",
+                    " ***** Completed validateVnfCreate of CreateVcpeResCustService ***** "+" vnf # "+vnfsCreatedCount, isDebugEnabled)
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                    "Unexpected Error from method validateVnfCreate() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+     }
+
+    // *****************************************
+    //     Prepare Completion request Section
+    // *****************************************
+    public void postProcessResponse (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        utils.log("DEBUG", " ***** Inside postProcessResponse of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+        try {
+            String source = execution.getVariable("source")
+            String requestId = execution.getVariable("mso-request-id")
+            String serviceInstanceId = execution.getVariable("serviceInstanceId")
+
+            String msoCompletionRequest =
+                    """<aetgt:MsoCompletionRequest xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1"
+                                    xmlns:ns="http://org.openecomp/mso/request/types/v1">
+                            <request-info xmlns="http://org.openecomp/mso/infra/vnf-request/v1">
+                                <request-id>${requestId}</request-id>
+                                <action>CREATE</action>
+                                <source>${source}</source>
+                            </request-info>
+                            <status-message>Service Instance has been created successfully via macro orchestration</status-message>
+                            <serviceInstanceId>${serviceInstanceId}</serviceInstanceId>
+                            <mso-bpel-name>BPMN macro create</mso-bpel-name>
+                        </aetgt:MsoCompletionRequest>"""
+
+            // Format Response
+            String xmlMsoCompletionRequest = utils.formatXml(msoCompletionRequest)
+
+            utils.logAudit(xmlMsoCompletionRequest)
+            execution.setVariable(Prefix+"Success", true)
+            execution.setVariable(Prefix+"CompleteMsoProcessRequest", xmlMsoCompletionRequest)
+            utils.log("DEBUG", " SUCCESS flow, going to CompleteMsoProcess - " + "\n" + xmlMsoCompletionRequest, isDebugEnabled)
+        } catch (BpmnError e) {
+            throw e;
+        } catch (Exception ex) {
+            // try error in method block
+            String exceptionMessage = "Bpmn error encountered in CreateVcpeResCustService flow. " +
+                    "Unexpected Error from method postProcessResponse() - " + ex.getMessage()
+            exceptionUtil.buildAndThrowWorkflowException(execution, 7000, exceptionMessage)
+        }
+    }
+
+    public void preProcessRollback (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+        utils.log("DEBUG"," ***** preProcessRollback of CreateVcpeResCustService ***** ", isDebugEnabled)
+        try {
+
+            Object workflowException = execution.getVariable("WorkflowException");
+
+            if (workflowException instanceof WorkflowException) {
+                utils.log("DEBUG", "Prev workflowException: " + workflowException.getErrorMessage(), isDebugEnabled)
+                execution.setVariable("prevWorkflowException", workflowException);
+                //execution.setVariable("WorkflowException", null);
+            }
+        } catch (BpmnError e) {
+            utils.log("DEBUG", "BPMN Error during preProcessRollback", isDebugEnabled)
+        } catch(Exception ex) {
+            String msg = "Exception in preProcessRollback. " + ex.getMessage()
+            utils.log("DEBUG", msg, isDebugEnabled)
+        }
+        utils.log("DEBUG"," *** Exit preProcessRollback of CreateVcpeResCustService *** ", isDebugEnabled)
+    }
+
+    public void postProcessRollback (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+        utils.log("DEBUG"," ***** postProcessRollback of CreateVcpeResCustService ***** ", isDebugEnabled)
+        String msg = ""
+        try {
+            Object workflowException = execution.getVariable("prevWorkflowException");
+            if (workflowException instanceof WorkflowException) {
+                utils.log("DEBUG", "Setting prevException to WorkflowException: ", isDebugEnabled)
+                execution.setVariable("WorkflowException", workflowException);
+            }
+        } catch (BpmnError b) {
+            utils.log("DEBUG", "BPMN Error during postProcessRollback", isDebugEnabled)
+            throw b;
+        } catch(Exception ex) {
+            msg = "Exception in postProcessRollback. " + ex.getMessage()
+            utils.log("DEBUG", msg, isDebugEnabled)
+        }
+        utils.log("DEBUG"," *** Exit postProcessRollback of CreateVcpeResCustService *** ", isDebugEnabled)
+    }
+
+    public void prepareFalloutRequest(Execution execution){
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+
+        utils.log("DEBUG", " *** STARTED CreateVcpeResCustService prepareFalloutRequest Process *** ", isDebugEnabled)
+
+        try {
+            WorkflowException wfex = execution.getVariable("WorkflowException")
+            utils.log("DEBUG", " Incoming Workflow Exception: " + wfex.toString(), isDebugEnabled)
+            String requestInfo = execution.getVariable(Prefix+"requestInfo")
+            utils.log("DEBUG", " Incoming Request Info: " + requestInfo, isDebugEnabled)
+
+            //TODO. hmmm. there is no way to UPDATE error message.
+//          String errorMessage = wfex.getErrorMessage()
+//          boolean successIndicator = execution.getVariable("DCRESI_rolledBack")
+//          if (successIndicator){
+//              errorMessage = errorMessage + ". Rollback successful."
+//          } else {
+//              errorMessage = errorMessage + ". Rollback not completed."
+//          }
+
+            String falloutRequest = exceptionUtil.processMainflowsBPMNException(execution, requestInfo)
+
+            execution.setVariable(Prefix+"falloutRequest", falloutRequest)
+
+        } catch (Exception ex) {
+            utils.log("DEBUG",
+                    "Error Occured in CreateVcpeResCustService prepareFalloutRequest Process " + ex.getMessage(),
+                    isDebugEnabled)
+            exceptionUtil.buildAndThrowWorkflowException(execution, 2500,
+                    "Internal Error - Occured in CreateVcpeResCustService prepareFalloutRequest Process")
+        }
+        utils.log("DEBUG",
+                "*** COMPLETED CreateVcpeResCustService prepareFalloutRequest Process ***", isDebugEnabled)
+    }
+
+
+    public void sendSyncError (Execution execution) {
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+        execution.setVariable("prefix", Prefix)
+
+        utils.log("DEBUG", " ***** Inside sendSyncError() of CreateVcpeResCustService ***** ", isDebugEnabled)
+
+        try {
+            String errorMessage = ""
+            def wfe = execution.getVariable("WorkflowException")
+            if (wfe instanceof WorkflowException) {
+                errorMessage = wfe.getErrorMessage()
+            } else {
+                errorMessage = "Sending Sync Error."
+            }
+
+            String buildworkflowException =
+                """<aetgt:WorkflowException xmlns:aetgt="http://org.openecomp/mso/workflow/schema/v1">
+                    <aetgt:ErrorMessage>${errorMessage}</aetgt:ErrorMessage>
+                    <aetgt:ErrorCode>7000</aetgt:ErrorCode>
+                   </aetgt:WorkflowException>"""
+
+            utils.logAudit(buildworkflowException)
+            sendWorkflowResponse(execution, 500, buildworkflowException)
+        } catch (Exception ex) {
+            utils.log("DEBUG", " Sending Sync Error Activity Failed. " + "\n" + ex.getMessage(), isDebugEnabled)
+        }
+    }
+
+    public void processJavaException(Execution execution){
+        def isDebugEnabled=execution.getVariable(DebugFlag)
+        execution.setVariable("prefix",Prefix)
+        try{
+            utils.log("DEBUG", "Caught a Java Exception", isDebugEnabled)
+            utils.log("DEBUG", "Started processJavaException Method", isDebugEnabled)
+            utils.log("DEBUG", "Variables List: " + execution.getVariables(), isDebugEnabled)
+            // Adding below line temporarily until this flows error handling gets updated
+            execution.setVariable(Prefix+"unexpectedError", "Caught a Java Lang Exception")
+            exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Caught a Java Lang Exception")
+        }catch(BpmnError b){
+            utils.log("ERROR", "Rethrowing MSOWorkflowException", isDebugEnabled)
+            throw b
+        }catch(Exception e){
+            utils.log("DEBUG", "Caught Exception during processJavaException Method: " + e, isDebugEnabled)
+            // Adding below line temporarily until this flows error handling gets updated
+            execution.setVariable(Prefix+"unexpectedError", "Exception in processJavaException method")
+            exceptionUtil.buildAndThrowWorkflowException(execution, 500, "Exception in processJavaException method")
+        }
+        utils.log("DEBUG", "Completed processJavaException Method", isDebugEnabled)
+    }
+}
index 54bd8cd..38a44ab 100644 (file)
@@ -150,7 +150,7 @@ public abstract class AbstractSdncOperationTask extends BaseTask {
 
     private String getPostStringBody(ResourceOperationStatus resourceOperationStatus) {
         logger.info("AbstractSdncOperationTask.getPostStringBody begin!");
-        String postBody = new String(postBodyTemplate);
+        String postBody = postBodyTemplate;
         postBody = postBody.replace("$errorCode", resourceOperationStatus.getErrorCode());
         postBody = postBody.replace("$jobId", resourceOperationStatus.getJobId());
         postBody = postBody.replace("$operType", resourceOperationStatus.getOperType());
@@ -166,7 +166,7 @@ public abstract class AbstractSdncOperationTask extends BaseTask {
 
     private String getGetStringBody(String serviceId, String operationId, String resourceTemplateUUID) {
         logger.info("AbstractSdncOperationTask.getGetStringBody begin!");
-        String getBody = new String(getBodyTemplate);
+        String getBody = getBodyTemplate;
         getBody = getBody.replace("$operationId", operationId);
         getBody = getBody.replace("$resourceTemplateUUID", resourceTemplateUUID);
         getBody = getBody.replace("$serviceId", serviceId);
index 3b97cad..7a494db 100644 (file)
@@ -109,6 +109,7 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase {
                assertTrue(map.containsKey("subscriberInfo"))
                
                verify(mex).setVariable("brgWanMacAddress", "brgmac")
+               verify(mex).setVariable("customerLocation", ["customerLatitude":"32.897480", "customerLongitude":"-97.040443", "customerName":"some_company"])
                assertTrue(map.containsKey("serviceInputParams"))
                assertTrue(map.containsKey(Prefix+"requestInfo"))
                
@@ -141,6 +142,7 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase {
                def req = request
                                        .replace('"source"', '"sourceXXX"')
                                        .replace('"BRG_WAN_MAC_Address"', '"BRG_WAN_MAC_AddressXXX"')
+                                       .replace('"Customer_Location"', '"Customer_LocationXXX"')
                
                when(mex.getVariable("bpmnRequest")).thenReturn(req)
                when(mex.getVariable("serviceInstanceId")).thenReturn(null)
@@ -164,6 +166,7 @@ class CreateVcpeResCustServiceTest extends GroovyTestBase {
                assertTrue(map.containsKey("subscriberInfo"))
                
                assertEquals("", map.get("brgWanMacAddress"))
+               assertEquals("", map.get("customerLocation"))
                assertTrue(map.containsKey("serviceInputParams"))
                assertTrue(map.containsKey(Prefix+"requestInfo"))
                
index a0168bd..3e05ba0 100644 (file)
                                        "aLaCarte":"false",
                                        "userParams":
                                           [
-                                               {
-                                                       "name":"BRG_WAN_MAC_Address",
-                                                       "value":"brgmac"
-                                               }
-                                          ]
+                                                       {
+                                                               "name":"BRG_WAN_MAC_Address",
+                                                               "value":"brgmac"
+                                                       },
+                                                       {
+                                                               "name": "Customer_Location",
+                                                               "value": {
+                                                                       "customerLatitude": "32.897480",
+                                                                       "customerLongitude": "-97.040443",
+                                                                       "customerName": "some_company"
+                                                               }
+                                                       }
+                                               ]
                                }
-                               
                }
 }
index 17c6d15..cf02444 100644 (file)
                                {
                                        "subscriptionServiceType":"123456789",
                                        "aLaCarte":"false",
-                    "userParams":
-                       [
-                            {
-                                "name":"BRG_WAN_MAC_Address",
-                                "value":"brgmac"
-                            }
-                       ]
+                                       "userParams":
+                                          [
+                                                       {
+                                                               "name":"BRG_WAN_MAC_Address",
+                                                               "value":"brgmac"
+                                                       },
+                                                       {
+                                                               "name": "Customer_Location",
+                                                               "value": {
+                                                                       "customerLatitude": "32.897480",
+                                                                       "customerLongitude": "-97.040443",
+                                                                       "customerName": "some_company"
+                                                               }
+                                                       }
+                                               ]
                                }
-                               
                }
 }
index 8583e66..39be40a 100644 (file)
                                {
                                        "subscriptionServiceType":"123456789",
                                        "aLaCarte":"false",
-                    "userParams":
-                       [
-                            {
-                                "name":"BRG_WAN_MAC_Address",
-                                "value":"brgmac"
-                            }
-                       ]
+                                       "userParams":
+                                          [
+                                                       {
+                                                               "name":"BRG_WAN_MAC_Address",
+                                                               "value":"brgmac"
+                                                       },
+                                                       {
+                                                               "name": "Customer_Location",
+                                                               "value": {
+                                                                       "customerLatitude": "32.897480",
+                                                                       "customerLongitude": "-97.040443",
+                                                                       "customerName": "some_company"
+                                                               }
+                                                       }
+                                               ]
                                }
-                               
                }
 }
index 87f5786..3170e49 100644 (file)
@@ -242,16 +242,16 @@ public class RESTClient {
     /**
      * Creates a RESTClient with the RESTConfig object.
      *
-     * @param RESTConfig config to use for sending request
+     * @param restConfig config to use for sending request
      *
      * @throws RESTException if unable to create a RESTClient
      */
-    public RESTClient(RESTConfig cfg) throws RESTException {
+    public RESTClient(RESTConfig restConfig) throws RESTException {
         this.headers = new LinkedHashMap<>();
         this.parameters = new LinkedHashMap<>();
-        this.URL = cfg.getURL();
-        this.proxyHost = cfg.getProxyHost();
-        this.proxyPort = cfg.getProxyPort();
+        this.URL = restConfig.getURL();
+        this.proxyHost = restConfig.getProxyHost();
+        this.proxyPort = restConfig.getProxyPort();
     }
 
     /**
index 7b559df..db58c5a 100644 (file)
@@ -598,8 +598,8 @@ public class MsoPropertiesFactoryTest {
                assertFalse(msoProperties.equals(msoProperties2));
                assertTrue(msoProperties.equals(msoProperties));
                assertFalse(msoProperties.equals(null));
-               assertFalse(msoProperties.equals(new String()));
-               
+               assertFalse(msoProperties.toString().isEmpty());
+
                // Test a reload with timer set to 1 in PATH_MSO_JSON_PROP2
                msoPropertiesFactory.changeMsoPropertiesFilePath(MSO_JSON_PROP_ID, PATH_MSO_JSON_PROP);
 
index 371d316..9258cab 100644 (file)
@@ -60,7 +60,8 @@ public class CamundaClient extends RequestClient{
                        if(encryptedCredentials != null){
                                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
                                if(userCredentials != null){
-                                       post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
+                                       post.addHeader("Authorization", "Basic " + DatatypeConverter
+                        .printBase64Binary(userCredentials.getBytes()));
                                }
                        }
                }
@@ -83,7 +84,8 @@ public class CamundaClient extends RequestClient{
                        if(encryptedCredentials != null){
                                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
                                if(userCredentials != null){
-                                       post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
+                                       post.addHeader("Authorization", "Basic " + DatatypeConverter
+                        .printBase64Binary(userCredentials.getBytes()));
                                }
                        }
                }
@@ -115,7 +117,8 @@ public class CamundaClient extends RequestClient{
                        if(encryptedCredentials != null){
                                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);
                                if(userCredentials != null){
-                                       post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));
+                                       post.addHeader("Authorization", "Basic " + DatatypeConverter
+                        .printBase64Binary(userCredentials.getBytes()));
                                }
                        }
                }
index 364169d..4b179da 100644 (file)
@@ -52,7 +52,8 @@ public class CamundaTaskClient extends RequestClient{
                        if(encryptedCredentials != null){\r
                                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);\r
                                if(userCredentials != null){\r
-                                       post.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));\r
+                                       post.addHeader("Authorization", "Basic " + DatatypeConverter\r
+                        .printBase64Binary(userCredentials.getBytes()));\r
                                }\r
                        }\r
                }\r
@@ -90,7 +91,8 @@ public class CamundaTaskClient extends RequestClient{
                        if(encryptedCredentials != null){\r
                                String userCredentials = getEncryptedPropValue(encryptedCredentials, CommonConstants.DEFAULT_BPEL_AUTH, CommonConstants.ENCRYPTION_KEY);\r
                                if(userCredentials != null){\r
-                                       get.addHeader("Authorization", "Basic " + new String(DatatypeConverter.printBase64Binary(userCredentials.getBytes())));\r
+                                       get.addHeader("Authorization", "Basic " + DatatypeConverter\r
+                        .printBase64Binary(userCredentials.getBytes()));\r
                                }\r
                        }\r
                }\r
index 0914516..c51c61e 100644 (file)
-/*-
- * ============LICENSE_START=======================================================
- * ONAP - SO
- * ================================================================================
- * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.
- * ================================================================================
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- * ============LICENSE_END=========================================================
- */
-
-package org.openecomp.mso.apihandlerinfra;
-
-import java.io.IOException;
-import java.sql.Timestamp;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import javax.ws.rs.Consumes;
-import javax.ws.rs.DELETE;
-import javax.ws.rs.GET;
-import javax.ws.rs.POST;
-import javax.ws.rs.Path;
-import javax.ws.rs.PathParam;
-import javax.ws.rs.Produces;
-import javax.ws.rs.core.MediaType;
-import javax.ws.rs.core.Response;
-
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.codehaus.jackson.map.ObjectMapper;
-import org.hibernate.Session;
-import org.json.JSONObject;
-import org.openecomp.mso.apihandler.common.ErrorNumbers;
-import org.openecomp.mso.apihandler.common.RequestClient;
-import org.openecomp.mso.apihandler.common.RequestClientFactory;
-import org.openecomp.mso.apihandler.common.ResponseHandler;
-import org.openecomp.mso.apihandlerinfra.Messages;
-import org.openecomp.mso.apihandlerinfra.MsoException;
-import org.openecomp.mso.apihandlerinfra.MsoRequest;
-import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.DelE2ESvcResp;
-import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceDeleteRequest;
-import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceRequest;
-import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EUserParam;
-import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.GetE2EServiceInstanceResponse;
-import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ModelInfo;
-import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestDetails;
-import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestInfo;
-import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestParameters;
-import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesRequest;
-import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.SubscriberInfo;
-import org.openecomp.mso.db.AbstractSessionFactoryManager;
-import org.openecomp.mso.db.catalog.CatalogDatabase;
-import org.openecomp.mso.db.catalog.beans.Service;
-import org.openecomp.mso.db.catalog.beans.ServiceRecipe;
-import org.openecomp.mso.logger.MessageEnum;
-import org.openecomp.mso.logger.MsoAlarmLogger;
-import org.openecomp.mso.logger.MsoLogger;
-import org.openecomp.mso.properties.MsoDatabaseException;
-import org.openecomp.mso.requestsdb.OperationStatus;
-import org.openecomp.mso.requestsdb.RequestsDatabase;
-import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;
-import org.openecomp.mso.utils.UUIDChecker;
-
-import com.wordnik.swagger.annotations.Api;
-import com.wordnik.swagger.annotations.ApiOperation;
-
-@Path("/e2eServiceInstances")
-@Api(value = "/e2eServiceInstances", description = "API Requests for E2E Service Instances")
-public class E2EServiceInstances {
-
-       private HashMap<String, String> instanceIdMap = new HashMap<>();
-       private static MsoLogger msoLogger = MsoLogger
-                       .getMsoLogger(MsoLogger.Catalog.APIH);
-       private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger();
-       public static final String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA";
-       private ServiceInstancesRequest sir = null;
-
-       public static final String END_OF_THE_TRANSACTION = "End of the transaction, the final response is: ";
-       public static final String EXCEPTION_CREATING_DB_RECORD = "Exception while creating record in DB";
-       public static final String EXCEPTION_COMMUNICATE_BPMN_ENGINE = "Exception while communicate with BPMN engine";
-
-       /**
-        * POST Requests for E2E Service create Instance on a version provided
-        */
-
-       @POST
-       @Path("/{version:[vV][3-5]}")
-       @Consumes(MediaType.APPLICATION_JSON)
-       @Produces(MediaType.APPLICATION_JSON)
-       @ApiOperation(value = "Create a E2E Service Instance on a version provided", response = Response.class)
-       public Response createE2EServiceInstance(String request,
-                       @PathParam("version") String version) {
-
-               return processE2EserviceInstances(request, Action.createInstance, null,
-                               version);
-       }
-
-       /**
-        * DELETE Requests for E2E Service delete Instance on a specified version
-        * and serviceId
-        */
-
-       @DELETE
-       @Path("/{version:[vV][3-5]}/{serviceId}")
-       @Consumes(MediaType.APPLICATION_JSON)
-       @Produces(MediaType.APPLICATION_JSON)
-       @ApiOperation(value = "Delete E2E Service Instance on a specified version and serviceId", response = Response.class)
-       public Response deleteE2EServiceInstance(String request,
-                       @PathParam("version") String version,
-                       @PathParam("serviceId") String serviceId) {
-
-               instanceIdMap.put("serviceId", serviceId);
-
-               return deleteE2EserviceInstances(request, Action.deleteInstance,
-                               instanceIdMap, version);
-       }
-
-       @GET
-       @Path("/{version:[vV][3-5]}/{serviceId}/operations/{operationId}")
-       @ApiOperation(value = "Find e2eServiceInstances Requests for a given serviceId and operationId", response = Response.class)
-       @Produces(MediaType.APPLICATION_JSON)
-       public Response getE2EServiceInstances(
-                       @PathParam("serviceId") String serviceId,
-                       @PathParam("version") String version,
-                       @PathParam("operationId") String operationId) {
-               return getE2EServiceInstances(serviceId, operationId);
-       }
-
-       private Response getE2EServiceInstances(String serviceId, String operationId) {
-               RequestsDatabase requestsDB = RequestsDatabase.getInstance();
-
-               GetE2EServiceInstanceResponse e2eServiceResponse = new GetE2EServiceInstanceResponse();
-
-               MsoRequest msoRequest = new MsoRequest(serviceId);
-
-               long startTime = System.currentTimeMillis();
-
-               OperationStatus operationStatus = null;
-
-               try {
-                       operationStatus = requestsDB.getOperationStatus(serviceId,
-                                       operationId);
-
-               } catch (Exception e) {
-                       msoLogger
-                                       .error(MessageEnum.APIH_DB_ACCESS_EXC,
-                                                       MSO_PROP_APIHANDLER_INFRA,
-                                                       "",
-                                                       "",
-                                                       MsoLogger.ErrorCode.AvailabilityError,
-                                                       "Exception while communciate with Request DB - Infra Request Lookup",
-                                                       e);
-                       msoRequest
-                                       .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
-                       Response response = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
-                                       e.getMessage(),
-                                       ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, null);
-                       alarmLogger.sendAlarm("MsoDatabaseAccessError",
-                                       MsoAlarmLogger.CRITICAL, Messages.errors
-                                                       .get(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.DBAccessError,
-                                       "Exception while communciate with Request DB");
-                       msoLogger.debug("End of the transaction, the final response is: "
-                                       + (String) response.getEntity());
-                       return response;
-
-               }
-
-               if (operationStatus == null) {
-                       Response resp = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_NO_CONTENT, MsoException.ServiceException,
-                                       "E2E serviceId " + serviceId + " is not found in DB",
-                                       ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
-                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
-                                       MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.BusinessProcesssError,
-                                       "Null response from RequestDB when searching by serviceId");
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.DataNotFound,
-                                       "Null response from RequestDB when searching by serviceId");
-                       msoLogger.debug("End of the transaction, the final response is: "
-                                       + (String) resp.getEntity());
-                       return resp;
-
-               }
-
-               e2eServiceResponse.setOperationStatus(operationStatus);
-
-               return Response.status(200).entity(e2eServiceResponse).build();
-       }
-
-       private Response deleteE2EserviceInstances(String requestJSON,
-                       Action action, HashMap<String, String> instanceIdMap, String version) {
-               // TODO should be a new one or the same service instance Id
-               String requestId = instanceIdMap.get("serviceId");
-               long startTime = System.currentTimeMillis();
-               msoLogger.debug("requestId is: " + requestId);
-               E2EServiceInstanceDeleteRequest e2eDelReq = null;
-
-               MsoRequest msoRequest = new MsoRequest(requestId);
-
-               ObjectMapper mapper = new ObjectMapper();
-               try {
-                       e2eDelReq = mapper.readValue(requestJSON,
-                                       E2EServiceInstanceDeleteRequest.class);
-
-               } catch (Exception e) {
-
-                       msoLogger.debug("Mapping of request to JSON object failed : ", e);
-                       Response response = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_BAD_REQUEST,
-                                       MsoException.ServiceException,
-                                       "Mapping of request to JSON object failed.  "
-                                                       + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,
-                                       null);
-                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,
-                                       MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.SchemaError,
-                                       "Mapping of request to JSON object failed");
-                       msoLogger.debug("End of the transaction, the final response is: "
-                                       + (String) response.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return response;
-               }
-
-               CatalogDatabase db = null;
-               RecipeLookupResult recipeLookupResult = null;
-               try {
-                       db = CatalogDatabase.getInstance();
-                       //TODO  Get the service template model version uuid from AAI.
-                       recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);
-               } catch (Exception e) {
-                       msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,
-                                       MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.AvailabilityError,
-                                       "Exception while communciate with Catalog DB", e);
-                       msoRequest
-                                       .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
-                       Response response = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
-                                       "No communication to catalog DB " + e.getMessage(),
-                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
-                       alarmLogger.sendAlarm("MsoDatabaseAccessError",
-                                       MsoAlarmLogger.CRITICAL, Messages.errors
-                                                       .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
-                       msoRequest.createRequestRecord(Status.FAILED, action);
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.DBAccessError,
-                                       "Exception while communciate with DB");
-                       msoLogger.debug(END_OF_THE_TRANSACTION
-                                       + (String) response.getEntity());
-                       return response;
-               } finally {
-                       closeCatalogDB(db);
-               }
-               if (recipeLookupResult == null) {
-                       msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,
-                                       MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.DataError, "No recipe found in DB");
-                       msoRequest
-                                       .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
-                       Response response = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,
-                                       "Recipe does not exist in catalog DB",
-                                       ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
-                       msoRequest.createRequestRecord(Status.FAILED, action);
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.DataNotFound,
-                                       "No recipe found in DB");
-                       msoLogger.debug(END_OF_THE_TRANSACTION
-                                       + (String) response.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return response;
-               }
-
-               RequestClient requestClient = null;
-               HttpResponse response = null;
-
-               long subStartTime = System.currentTimeMillis();
-               // String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
-
-               try {
-                       requestClient = RequestClientFactory.getRequestClient(
-                                       recipeLookupResult.getOrchestrationURI(),
-                                       MsoPropertiesUtils.loadMsoProperties());
-
-                       JSONObject jjo = new JSONObject(requestJSON);
-                       jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));
-
-                       String bpmnRequest = jjo.toString();
-
-                       // Capture audit event
-                       msoLogger
-                                       .debug("MSO API Handler Posting call to BPEL engine for url: "
-                                                       + requestClient.getUrl());
-                       String serviceId = instanceIdMap.get("serviceId");
-                       String serviceInstanceType = e2eDelReq.getServiceType();
-                       response = requestClient.post(requestId, false,
-                                       recipeLookupResult.getRecipeTimeout(), action.name(),
-                                       serviceId, null, null, null, null, serviceInstanceType,
-                                       null, null, null, bpmnRequest, recipeLookupResult.getRecipeParamXsd());
-
-                       msoLogger.recordMetricEvent(subStartTime,
-                                       MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                                       "Successfully received response from BPMN engine", "BPMN",
-                                       recipeLookupResult.getOrchestrationURI(), null);
-               } catch (Exception e) {
-                       msoLogger.recordMetricEvent(subStartTime,
-                                       MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.CommunicationError,
-                                       "Exception while communicate with BPMN engine", "BPMN",
-                                       recipeLookupResult.getOrchestrationURI(), null);
-                       Response resp = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                                       "Failed calling bpmn " + e.getMessage(),
-                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
-                       alarmLogger.sendAlarm("MsoConfigurationError",
-                                       MsoAlarmLogger.CRITICAL,
-                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
-                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
-                                       MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.AvailabilityError,
-                                       "Exception while communicate with BPMN engine");
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.CommunicationError,
-                                       "Exception while communicate with BPMN engine");
-                       msoLogger.debug("End of the transaction, the final response is: "
-                                       + (String) resp.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return resp;
-               }
-
-               if (response == null) {
-                       Response resp = msoRequest.buildServiceErrorResponse(
-                                       HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,
-                                       "bpelResponse is null",
-                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
-                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,
-                                       MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.BusinessProcesssError,
-                                       "Null response from BPEL");
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.InternalError,
-                                       "Null response from BPMN");
-                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return resp;
-               }
-
-               ResponseHandler respHandler = new ResponseHandler(response,
-                               requestClient.getType());
-               int bpelStatus = respHandler.getStatus();
-
-               return beplStatusUpdate(requestId, startTime, msoRequest,
-                               requestClient, respHandler, bpelStatus, action, instanceIdMap);
-       }
-
-       private Response processE2EserviceInstances(String requestJSON, Action action,
-                       HashMap<String, String> instanceIdMap, String version) {
-
-               String requestId = UUIDChecker.generateUUID(msoLogger);
-               long startTime = System.currentTimeMillis();
-               msoLogger.debug("requestId is: " + requestId);
-               E2EServiceInstanceRequest e2eSir = null;
-
-               MsoRequest msoRequest = new MsoRequest(requestId);
-               ObjectMapper mapper = new ObjectMapper();
-               try {
-                       e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);
-
-               } catch (Exception e) {
-          //TODO update the service name
-          this.createOperationStatusRecordForError(action, requestId);
-                 
-                       msoLogger.debug("Mapping of request to JSON object failed : ", e);
-                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
-                                       MsoException.ServiceException, "Mapping of request to JSON object failed.  " + e.getMessage(),
-                                       ErrorNumbers.SVC_BAD_PARAMETER, null);
-                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
-                                       "Mapping of request to JSON object failed");
-                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
-                       return response;
-               }
-
-               mapReqJsonToSvcInstReq(e2eSir, requestJSON);
-               sir.getRequestDetails().getRequestParameters().setaLaCarte(true);
-               try {
-                       msoRequest.parse(sir, instanceIdMap, action, version);
-               } catch (Exception e) {
-                       msoLogger.debug("Validation failed: ", e);
-                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,
-                                       MsoException.ServiceException, "Error parsing request.  " + e.getMessage(),
-                                       ErrorNumbers.SVC_BAD_PARAMETER, null);
-                       if (msoRequest.getRequestId() != null) {
-                               msoLogger.debug("Logging failed message to the database");
-                               //TODO update the service name
-                         this.createOperationStatusRecordForError(action, requestId);
-                       }
-                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,
-                                       "Validation of the input request failed");
-                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
-                       return response;
-               }
-               
-               OperationStatus dup = null;
-               String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();
-               String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();
-               try {
-                       if (!(instanceName == null && "service".equals(requestScope)
-                                       && (action == Action.createInstance || action == Action.activateInstance))) {
-                         //TODO : Need to check for the duplicate record from the operation status,
-                         //TODO : commenting this check for unblocking current testing for now...  induces dead code...
-                               dup = chkDuplicateServiceNameInOperStatus( instanceName);
-                       }
-               } catch (Exception e) {
-                       msoLogger.error(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.DataError, "Error during duplicate check ", e);
-
-                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
-                                       MsoException.ServiceException, e.getMessage(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
-
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
-                                       "Error during duplicate check");
-                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
-                       return response;
-               }
-
-               if (dup != null) {
-                       // Found the duplicate record. Return the appropriate error.
-                       String instance = null;
-                       if (instanceName != null) {
-                               instance = instanceName;
-                       } else {
-                               instance = instanceIdMap.get(requestScope + "InstanceId");
-                       }
-                       String dupMessage = "Error: Locked instance - This " + requestScope + " (" + instance + ") "
-                                       + "already has a request being worked with a status of " + dup.getProgress() + " (ServiceId - "
-                                       + dup.getServiceId() + "). The existing request must finish or be cleaned up before proceeding.";
-
-                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT,
-                                       MsoException.ServiceException, dupMessage, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);
-
-                       msoLogger.warn(MessageEnum.APIH_DUPLICATE_FOUND, dupMessage, "", "", MsoLogger.ErrorCode.SchemaError,
-                                       "Duplicate request - Subscriber already has a request for this service");
-                       
-                       
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict,
-                                       dupMessage);
-                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return response;
-               }
-               
-               CatalogDatabase db = null;
-               RecipeLookupResult recipeLookupResult = null;
-               try {
-                       db = CatalogDatabase.getInstance();
-                       recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getTemplateId(), action);
-               } catch (Exception e) {
-                       msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);
-                       msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
-                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
-                                       MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),
-                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
-                       alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,
-                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));
-                       
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
-                                       "Exception while communciate with DB");
-                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return response;
-               } finally {
-                       closeCatalogDB(db);
-               }
-
-               if (recipeLookupResult == null) {
-                       msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.DataError, "No recipe found in DB");
-                       msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
-                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,
-                                       MsoException.ServiceException, "Recipe does not exist in catalog DB",
-                                       ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);
-               
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,
-                                       "No recipe found in DB");
-                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return response;
-               }
-//             try {
-//                     msoRequest.createRequestRecord(Status.PENDING, action);
-//                     //createOperationStatusRecord(action, requestId);
-//             } catch (Exception e) {
-//                     msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "",
-//                                     MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e);
-//                     msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);
-//                     Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,
-//                                     MsoException.ServiceException, "Exception while creating record in DB " + e.getMessage(),
-//                                     ErrorNumbers.SVC_BAD_PARAMETER, null);
-//                     msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,
-//                                     "Exception while creating record in DB");
-//                     msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());
-//                     return response;
-//             }
-
-               String serviceInstanceType = e2eSir.getService().getParameters().getServiceType();
-
-               String serviceId = "";
-               RequestClient requestClient = null;
-               HttpResponse response = null;
-
-               long subStartTime = System.currentTimeMillis();
-               String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);
-
-               try {
-                       requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),
-                                       MsoPropertiesUtils.loadMsoProperties());
-
-                       // Capture audit event
-                       msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());
-
-                       response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),
-                                       serviceId, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson, recipeLookupResult.getRecipeParamXsd());
-
-                       msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                                       "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),
-                                       null);
-               } catch (Exception e) {
-                       msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,
-                                       MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",
-                                       recipeLookupResult.getOrchestrationURI(), null);
-                       Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
-                                       MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),
-                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
-                       alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,
-                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));
-                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,
-                                       "Exception while communicate with BPMN engine");
-                       msoLogger.debug("End of the transaction, the final response is: " + (String) resp.getEntity());
-                       createOperationStatusRecordForError(action, requestId);
-                       return resp;
-               }
-
-               if (response == null) {
-                       Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,
-                                       MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);
-                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",
-                                       MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");
-                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,
-                                       "Null response from BPMN");
-                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());
-                       return resp;
-               }
-
-               ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());
-               int bpelStatus = respHandler.getStatus();
-
-               return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);
-       }
-
-       private void closeCatalogDB(CatalogDatabase db) {
-               if (db != null) {
-                       db.close();
-               }
-       }
-
-       private Response beplStatusUpdate(String requestId, long startTime,
-                       MsoRequest msoRequest, RequestClient requestClient,
-                       ResponseHandler respHandler, int bpelStatus, Action action,
-                       HashMap<String, String> instanceIdMap) {
-               // BPMN accepted the request, the request is in progress
-               if (bpelStatus == HttpStatus.SC_ACCEPTED) {
-                       String camundaJSONResponseBody = respHandler.getResponseBody();
-                       msoLogger
-                                       .debug("Received from Camunda: " + camundaJSONResponseBody);
-
-                       // currently only for delete case we update the status here
-                       if (action == Action.deleteInstance) {
-                               ObjectMapper mapper = new ObjectMapper();
-                               try {
-                                       DelE2ESvcResp jo = mapper.readValue(
-                                                       camundaJSONResponseBody, DelE2ESvcResp.class);
-                                       String operationId = jo.getOperationId();
-                               this.createOperationStatusRecord("DELETE", requestId,
-                                                               operationId);
-                               } catch (Exception ex) {
-                                       msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
-                                                       requestClient.getUrl(), "", "",
-                                                       MsoLogger.ErrorCode.BusinessProcesssError,
-                                                       "Response from BPEL engine is failed with HTTP Status="
-                                                                       + bpelStatus);
-                               }
-                       }
-                       msoLogger.recordAuditEvent(startTime,
-                                       MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,
-                                       "BPMN accepted the request, the request is in progress");
-                       msoLogger.debug(END_OF_THE_TRANSACTION + camundaJSONResponseBody);
-                       return Response.status(HttpStatus.SC_ACCEPTED)
-                                       .entity(camundaJSONResponseBody).build();
-               } else {
-                       List<String> variables = new ArrayList<>();
-                       variables.add(bpelStatus + "");
-                       String camundaJSONResponseBody = respHandler.getResponseBody();
-                       if (camundaJSONResponseBody != null
-                                       && !camundaJSONResponseBody.isEmpty()) {
-                               Response resp = msoRequest.buildServiceErrorResponse(
-                                               bpelStatus, MsoException.ServiceException,
-                                               "Request Failed due to BPEL error with HTTP Status= %1 "
-                                                               + '\n' + camundaJSONResponseBody,
-                                               ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables);
-                               msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
-                                               requestClient.getUrl(), "", "",
-                                               MsoLogger.ErrorCode.BusinessProcesssError,
-                                               "Response from BPEL engine is failed with HTTP Status="
-                                                               + bpelStatus);
-                               msoLogger.recordAuditEvent(startTime,
-                                               MsoLogger.StatusCode.ERROR,
-                                               MsoLogger.ResponseCode.InternalError,
-                                               "Response from BPMN engine is failed");
-                               msoLogger.debug(END_OF_THE_TRANSACTION
-                                               + (String) resp.getEntity());
-                               return resp;
-                       } else {
-                               Response resp = msoRequest
-                                               .buildServiceErrorResponse(
-                                                               bpelStatus,
-                                                               MsoException.ServiceException,
-                                                               "Request Failed due to BPEL error with HTTP Status= %1",
-                                                               ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,
-                                                               variables);
-                               msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,
-                                               requestClient.getUrl(), "", "",
-                                               MsoLogger.ErrorCode.BusinessProcesssError,
-                                               "Response from BPEL engine is empty");
-                               msoLogger.recordAuditEvent(startTime,
-                                               MsoLogger.StatusCode.ERROR,
-                                               MsoLogger.ResponseCode.InternalError,
-                                               "Response from BPEL engine is empty");
-                               msoLogger.debug(END_OF_THE_TRANSACTION
-                                               + (String) resp.getEntity());
-                               return resp;
-                       }
-               }
-       }
-
-       /**
-        * Getting recipes from catalogDb
-        * 
-        * @param db the catalog db
-        * @param serviceModelUUID the service model version uuid
-        * @param action the action for the service
-        * @return the service recipe result
-        */
-       private RecipeLookupResult getServiceInstanceOrchestrationURI(
-                       CatalogDatabase db, String serviceModelUUID, Action action) {
-
-               RecipeLookupResult recipeLookupResult = getServiceURI(db, serviceModelUUID, action);
-
-               if (recipeLookupResult != null) {
-                       msoLogger.debug("Orchestration URI is: "
-                                       + recipeLookupResult.getOrchestrationURI()
-                                       + ", recipe Timeout is: "
-                                       + Integer.toString(recipeLookupResult.getRecipeTimeout()));
-               } else {
-                       msoLogger.debug("No matching recipe record found");
-               }
-               return recipeLookupResult;
-       }
-
-       /**
-        * Getting recipes from catalogDb
-        * If Service recipe is not set, use default recipe, if set , use special recipe.
-        * @param db the catalog db
-        * @param serviceModelUUID the service version uuid
-        * @param action the action of the service.
-        * @return the service recipe result.
-        */
-       private RecipeLookupResult getServiceURI(CatalogDatabase db, String serviceModelUUID, Action action) {
-
-               String defaultServiceModelName = "UUI_DEFAULT";
-
-               Service defaultServiceRecord = db
-                               .getServiceByModelName(defaultServiceModelName);
-               ServiceRecipe defaultRecipe = db.getServiceRecipeByModelUUID(
-                       defaultServiceRecord.getModelUUID(), action.name());
-               //set recipe as default generic recipe
-               ServiceRecipe recipe = defaultRecipe;
-               //check the service special recipe 
-               if(null != serviceModelUUID && ! serviceModelUUID.isEmpty()){
-                     ServiceRecipe serviceSpecialRecipe = db.getServiceRecipeByModelUUID(
-                             serviceModelUUID, action.name());
-                     if(null != serviceSpecialRecipe){
-                         //set service special recipe.
-                         recipe = serviceSpecialRecipe;
-                     }
-               }       
-               
-               if (recipe == null) {
-                       return null;
-               }
-               return new RecipeLookupResult(recipe.getOrchestrationUri(),
-                               recipe.getRecipeTimeout(), recipe.getServiceParamXSD());
-
-       }
-
-       /**
-        * Converting E2EServiceInstanceRequest to ServiceInstanceRequest and
-        * passing it to camunda engine.
-        * 
-        * @param e2eSir
-        * @return
-        */
-       private String mapReqJsonToSvcInstReq(E2EServiceInstanceRequest e2eSir,
-                       String requestJSON) {
-
-               sir = new ServiceInstancesRequest();
-
-               String returnString = null;
-               RequestDetails requestDetails = new RequestDetails();
-               ModelInfo modelInfo = new ModelInfo();
-
-               // ModelInvariantId
-               modelInfo.setModelInvariantId(e2eSir.getService().getServiceDefId());
-
-               // modelNameVersionId
-               modelInfo.setModelNameVersionId(e2eSir.getService().getTemplateId());
-
-               // String modelInfoValue =
-               // e2eSir.getService().getParameters().getNodeTemplateName();
-               // String[] arrayOfInfo = modelInfoValue.split(":");
-               // String modelName = arrayOfInfo[0];
-               // String modelVersion = arrayOfInfo[1];
-
-               // TODO: To ensure, if we dont get the values from the UUI
-               String modelName = "voLTE";
-               String modelVersion = "1.0";
-               // modelName
-               modelInfo.setModelName(modelName);
-
-               // modelVersion
-               modelInfo.setModelVersion(modelVersion);
-
-               // modelType
-               modelInfo.setModelType(ModelType.service);
-
-               // setting modelInfo to requestDetails
-               requestDetails.setModelInfo(modelInfo);
-
-               SubscriberInfo subscriberInfo = new SubscriberInfo();
-
-               // globalsubscriberId
-               subscriberInfo.setGlobalSubscriberId(e2eSir.getService()
-                               .getParameters().getGlobalSubscriberId());
-
-               // subscriberName
-               subscriberInfo.setSubscriberName(e2eSir.getService().getParameters()
-                               .getSubscriberName());
-
-               // setting subscriberInfo to requestDetails
-               requestDetails.setSubscriberInfo(subscriberInfo);
-
-               RequestInfo requestInfo = new RequestInfo();
-
-               // instanceName
-               requestInfo.setInstanceName(e2eSir.getService().getName());
-
-               // source
-               requestInfo.setSource("UUI");
-
-               // suppressRollback
-               requestInfo.setSuppressRollback(true);
-
-               // setting requestInfo to requestDetails
-               requestDetails.setRequestInfo(requestInfo);
-
-               RequestParameters requestParameters = new RequestParameters();
-
-               // subscriptionServiceType
-               requestParameters.setSubscriptionServiceType("MOG");
-
-               // Userparams
-               List<E2EUserParam> userParams;
-               // userParams =
-               // e2eSir.getService().getParameters().getRequestParameters().getUserParams();
-               List<Map<String, String>> userParamList = new ArrayList<>();
-               Map<String, String> userParamMap = new HashMap<>();
-               // complete json request updated in the camunda
-               userParamMap.put("UUIRequest", requestJSON);
-               userParamMap.put("ServiceInstanceName", e2eSir.getService().getName());
-
-               // Map<String, String> userParamMap3 = null;
-               // for (E2EUserParam userp : userParams) {
-               // userParamMap.put(userp.getName(), userp.getValue());
-               //
-               // }
-               userParamList.add(userParamMap);
-               requestParameters.setUserParams(userParamList);
-
-               // setting requestParameters to requestDetails
-               requestDetails.setRequestParameters(requestParameters);
-
-               sir.setRequestDetails(requestDetails);
-
-               // converting to string
-               ObjectMapper mapper = new ObjectMapper();
-               try {
-                       returnString = mapper.writeValueAsString(sir);
-               } catch (IOException e) {
-                       msoLogger
-                                       .debug("Exception while converting ServiceInstancesRequest object to string",
-                                                       e);
-               }
-
-               return returnString;
-       }
-
-       private void createOperationStatusRecordForError(Action action,
-                       String requestId) throws MsoDatabaseException {
-
-               AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();
-
-               Session session = null;
-               try {
-
-                       session = requestsDbSessionFactoryManager.getSessionFactory()
-                                       .openSession();
-                       session.beginTransaction();
-
-                       OperationStatus os = new OperationStatus();
-                       os.setOperation(action.name());
-                       os.setOperationContent("");
-                       os.setOperationId("");
-                       os.setProgress("100");
-                       os.setReason("");
-                       os.setResult("error");
-                       os.setServiceId(requestId);
-                       os.setUserId("");
-                       Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
-                       Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());
-                       os.setFinishedAt(endTimeStamp);
-                       os.setOperateAt(startTimeStamp);
-
-                       session.save(os);
-                       session.getTransaction().commit();
-
-               } catch (Exception e) {
-                       msoLogger.error(MessageEnum.APIH_DB_INSERT_EXC, "", "",
-                                       MsoLogger.ErrorCode.DataError,
-                                       "Exception when creation record request in Operation", e);
-                       throw new MsoDatabaseException(
-                                       "Data did inserted in Operatus Status Table for failure", e);
-               } finally {
-                       if (null != session) {
-                               session.close();
-                       }
-               }
-       }
-
-       private void createOperationStatusRecord(String actionNm, String serviceId,
-                       String operationId) throws MsoDatabaseException {
-
-               AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();
-
-               Session session = null;
-               try {
-
-                       session = requestsDbSessionFactoryManager.getSessionFactory()
-                                       .openSession();
-                       session.beginTransaction();
-
-                       OperationStatus os = new OperationStatus();
-                       os.setOperation(actionNm);
-                       os.setOperationContent("");
-                       os.setOperationId(operationId);
-                       os.setProgress("0");
-                       os.setReason("");
-                       os.setResult("processing");
-                       os.setServiceId(serviceId);
-                       // TODO : to be updated...
-                       os.setUserId("");
-                       Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());
-                       Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());
-                       os.setFinishedAt(endTimeStamp);
-                       os.setOperateAt(startTimeStamp);
-
-                       session.save(os);
-                       session.getTransaction().commit();
-
-               } catch (Exception e) {
-                       msoLogger.error(MessageEnum.APIH_DB_INSERT_EXC, "", "",
-                                       MsoLogger.ErrorCode.DataError,
-                                       "Exception when creation record request in Operation", e);
-                       throw new MsoDatabaseException(
-                                       "Data did inserted in Operatus Status Table", e);
-               } finally {
-                       if (null != session) {
-                               session.close();
-                       }
-               }
-       }
-
-       private OperationStatus chkDuplicateServiceInOperStatus(String serviceId) {
-               OperationStatus dupServiceName = (RequestsDatabase.getInstance())
-                               .getOperationStatusByServiceId(serviceId);
-
-               return dupServiceName;
-       }
-
-       private OperationStatus chkDuplicateServiceNameInOperStatus(
-                       String serviceName) {
-               OperationStatus dupServiceName = (RequestsDatabase.getInstance())
-                               .getOperationStatusByServiceName(serviceName);
-
-               return dupServiceName;
-       }
+/*-\r
+ * ============LICENSE_START=======================================================\r
+ * ONAP - SO\r
+ * ================================================================================\r
+ * Copyright (C) 2017 Huawei Technologies Co., Ltd. All rights reserved.\r
+ * ================================================================================\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ * ============LICENSE_END=========================================================\r
+ */\r
+\r
+package org.openecomp.mso.apihandlerinfra;\r
+\r
+import java.io.IOException;\r
+import java.sql.Timestamp;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+import java.util.Map;\r
+\r
+import javax.ws.rs.Consumes;\r
+import javax.ws.rs.DELETE;\r
+import javax.ws.rs.GET;\r
+import javax.ws.rs.POST;\r
+import javax.ws.rs.PUT;\r
+import javax.ws.rs.Path;\r
+import javax.ws.rs.PathParam;\r
+import javax.ws.rs.Produces;\r
+import javax.ws.rs.core.MediaType;\r
+import javax.ws.rs.core.Response;\r
+\r
+import org.apache.http.HttpResponse;\r
+import org.apache.http.HttpStatus;\r
+import org.codehaus.jackson.map.ObjectMapper;\r
+import org.hibernate.Session;\r
+import org.json.JSONObject;\r
+import org.openecomp.mso.apihandler.common.ErrorNumbers;\r
+import org.openecomp.mso.apihandler.common.RequestClient;\r
+import org.openecomp.mso.apihandler.common.RequestClientFactory;\r
+import org.openecomp.mso.apihandler.common.ResponseHandler;\r
+import org.openecomp.mso.apihandlerinfra.Messages;\r
+import org.openecomp.mso.apihandlerinfra.MsoException;\r
+import org.openecomp.mso.apihandlerinfra.MsoRequest;\r
+import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.DelE2ESvcResp;\r
+import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceDeleteRequest;\r
+import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EServiceInstanceRequest;\r
+import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.E2EUserParam;\r
+import org.openecomp.mso.apihandlerinfra.e2eserviceinstancebeans.GetE2EServiceInstanceResponse;\r
+import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ModelInfo;\r
+import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestDetails;\r
+import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestInfo;\r
+import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.RequestParameters;\r
+import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.ServiceInstancesRequest;\r
+import org.openecomp.mso.apihandlerinfra.serviceinstancebeans.SubscriberInfo;\r
+import org.openecomp.mso.db.AbstractSessionFactoryManager;\r
+import org.openecomp.mso.db.catalog.CatalogDatabase;\r
+import org.openecomp.mso.db.catalog.beans.Service;\r
+import org.openecomp.mso.db.catalog.beans.ServiceRecipe;\r
+import org.openecomp.mso.logger.MessageEnum;\r
+import org.openecomp.mso.logger.MsoAlarmLogger;\r
+import org.openecomp.mso.logger.MsoLogger;\r
+import org.openecomp.mso.properties.MsoDatabaseException;\r
+import org.openecomp.mso.requestsdb.OperationStatus;\r
+import org.openecomp.mso.requestsdb.RequestsDatabase;\r
+import org.openecomp.mso.requestsdb.RequestsDbSessionFactoryManager;\r
+import org.openecomp.mso.utils.UUIDChecker;\r
+\r
+import com.wordnik.swagger.annotations.Api;\r
+import com.wordnik.swagger.annotations.ApiOperation;\r
+\r
+@Path("/e2eServiceInstances")\r
+@Api(value = "/e2eServiceInstances", description = "API Requests for E2E Service Instances")\r
+public class E2EServiceInstances {\r
+\r
+       private HashMap<String, String> instanceIdMap = new HashMap<>();\r
+       private static MsoLogger msoLogger = MsoLogger\r
+                       .getMsoLogger(MsoLogger.Catalog.APIH);\r
+       private static MsoAlarmLogger alarmLogger = new MsoAlarmLogger();\r
+       public static final String MSO_PROP_APIHANDLER_INFRA = "MSO_PROP_APIHANDLER_INFRA";\r
+       private ServiceInstancesRequest sir = null;\r
+\r
+       public static final String END_OF_THE_TRANSACTION = "End of the transaction, the final response is: ";\r
+       public static final String EXCEPTION_CREATING_DB_RECORD = "Exception while creating record in DB";\r
+       public static final String EXCEPTION_COMMUNICATE_BPMN_ENGINE = "Exception while communicate with BPMN engine";\r
+\r
+       /**\r
+        * POST Requests for E2E Service create Instance on a version provided\r
+        */\r
+\r
+       @POST\r
+       @Path("/{version:[vV][3-5]}")\r
+       @Consumes(MediaType.APPLICATION_JSON)\r
+       @Produces(MediaType.APPLICATION_JSON)\r
+       @ApiOperation(value = "Create an E2E Service Instance on a version provided", response = Response.class)\r
+       public Response createE2EServiceInstance(String request,\r
+                       @PathParam("version") String version) {\r
+\r
+               return processE2EserviceInstances(request, Action.createInstance, null,\r
+                               version);\r
+       }\r
+       \r
+       /**\r
+        * PUT Requests for E2E Service update Instance on a version provided\r
+        */\r
+\r
+       @PUT\r
+       @Path("/{version:[vV][3-5]}/{serviceId}")\r
+       @Consumes(MediaType.APPLICATION_JSON)\r
+       @Produces(MediaType.APPLICATION_JSON)\r
+       @ApiOperation(value = "Update an E2E Service Instance on a version provided and serviceId", response = Response.class)\r
+       public Response updateE2EServiceInstance(String request,\r
+                       @PathParam("version") String version,\r
+                       @PathParam("serviceId") String serviceId) {\r
+               \r
+               instanceIdMap.put("serviceId", serviceId);\r
+\r
+               return updateE2EserviceInstances(request, Action.updateInstance, instanceIdMap,\r
+                               version);\r
+       }\r
+\r
+       /**\r
+        * DELETE Requests for E2E Service delete Instance on a specified version\r
+        * and serviceId\r
+        */\r
+\r
+       @DELETE\r
+       @Path("/{version:[vV][3-5]}/{serviceId}")\r
+       @Consumes(MediaType.APPLICATION_JSON)\r
+       @Produces(MediaType.APPLICATION_JSON)\r
+       @ApiOperation(value = "Delete E2E Service Instance on a specified version and serviceId", response = Response.class)\r
+       public Response deleteE2EServiceInstance(String request,\r
+                       @PathParam("version") String version,\r
+                       @PathParam("serviceId") String serviceId) {\r
+\r
+               instanceIdMap.put("serviceId", serviceId);\r
+\r
+               return deleteE2EserviceInstances(request, Action.deleteInstance,\r
+                               instanceIdMap, version);\r
+       }\r
+\r
+       @GET\r
+       @Path("/{version:[vV][3-5]}/{serviceId}/operations/{operationId}")\r
+       @ApiOperation(value = "Find e2eServiceInstances Requests for a given serviceId and operationId", response = Response.class)\r
+       @Produces(MediaType.APPLICATION_JSON)\r
+       public Response getE2EServiceInstances(\r
+                       @PathParam("serviceId") String serviceId,\r
+                       @PathParam("version") String version,\r
+                       @PathParam("operationId") String operationId) {\r
+               return getE2EServiceInstances(serviceId, operationId);\r
+       }\r
+\r
+       private Response getE2EServiceInstances(String serviceId, String operationId) {\r
+               RequestsDatabase requestsDB = RequestsDatabase.getInstance();\r
+\r
+               GetE2EServiceInstanceResponse e2eServiceResponse = new GetE2EServiceInstanceResponse();\r
+\r
+               MsoRequest msoRequest = new MsoRequest(serviceId);\r
+\r
+               long startTime = System.currentTimeMillis();\r
+\r
+               OperationStatus operationStatus = null;\r
+\r
+               try {\r
+                       operationStatus = requestsDB.getOperationStatus(serviceId,\r
+                                       operationId);\r
+\r
+               } catch (Exception e) {\r
+                       msoLogger\r
+                                       .error(MessageEnum.APIH_DB_ACCESS_EXC,\r
+                                                       MSO_PROP_APIHANDLER_INFRA,\r
+                                                       "",\r
+                                                       "",\r
+                                                       MsoLogger.ErrorCode.AvailabilityError,\r
+                                                       "Exception while communciate with Request DB - Infra Request Lookup",\r
+                                                       e);\r
+                       msoRequest\r
+                                       .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,\r
+                                       e.getMessage(),\r
+                                       ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB, null);\r
+                       alarmLogger.sendAlarm("MsoDatabaseAccessError",\r
+                                       MsoAlarmLogger.CRITICAL, Messages.errors\r
+                                                       .get(ErrorNumbers.NO_COMMUNICATION_TO_REQUESTS_DB));\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.DBAccessError,\r
+                                       "Exception while communciate with Request DB");\r
+                       msoLogger.debug("End of the transaction, the final response is: "\r
+                                       + (String) response.getEntity());\r
+                       return response;\r
+\r
+               }\r
+\r
+               if (operationStatus == null) {\r
+                       Response resp = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_NO_CONTENT, MsoException.ServiceException,\r
+                                       "E2E serviceId " + serviceId + " is not found in DB",\r
+                                       ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,\r
+                                       MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.BusinessProcesssError,\r
+                                       "Null response from RequestDB when searching by serviceId");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.DataNotFound,\r
+                                       "Null response from RequestDB when searching by serviceId");\r
+                       msoLogger.debug("End of the transaction, the final response is: "\r
+                                       + (String) resp.getEntity());\r
+                       return resp;\r
+\r
+               }\r
+\r
+               e2eServiceResponse.setOperationStatus(operationStatus);\r
+\r
+               return Response.status(200).entity(e2eServiceResponse).build();\r
+       }\r
+\r
+       private Response deleteE2EserviceInstances(String requestJSON,\r
+                       Action action, HashMap<String, String> instanceIdMap, String version) {\r
+               // TODO should be a new one or the same service instance Id\r
+               String requestId = instanceIdMap.get("serviceId");\r
+               long startTime = System.currentTimeMillis();\r
+               msoLogger.debug("requestId is: " + requestId);\r
+               E2EServiceInstanceDeleteRequest e2eDelReq = null;\r
+\r
+               MsoRequest msoRequest = new MsoRequest(requestId);\r
+\r
+               ObjectMapper mapper = new ObjectMapper();\r
+               try {\r
+                       e2eDelReq = mapper.readValue(requestJSON,\r
+                                       E2EServiceInstanceDeleteRequest.class);\r
+\r
+               } catch (Exception e) {\r
+\r
+                       msoLogger.debug("Mapping of request to JSON object failed : ", e);\r
+                       Response response = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_BAD_REQUEST,\r
+                                       MsoException.ServiceException,\r
+                                       "Mapping of request to JSON object failed.  "\r
+                                                       + e.getMessage(), ErrorNumbers.SVC_BAD_PARAMETER,\r
+                                       null);\r
+                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR,\r
+                                       MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.SchemaError,\r
+                                       "Mapping of request to JSON object failed");\r
+                       msoLogger.debug("End of the transaction, the final response is: "\r
+                                       + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               }\r
+\r
+               CatalogDatabase db = null;\r
+               RecipeLookupResult recipeLookupResult = null;\r
+               try {\r
+                       db = CatalogDatabase.getInstance();\r
+                       //TODO  Get the service template model version uuid from AAI.\r
+                       recipeLookupResult = getServiceInstanceOrchestrationURI(db, null, action);\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC,\r
+                                       MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.AvailabilityError,\r
+                                       "Exception while communciate with Catalog DB", e);\r
+                       msoRequest\r
+                                       .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,\r
+                                       "No communication to catalog DB " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       alarmLogger.sendAlarm("MsoDatabaseAccessError",\r
+                                       MsoAlarmLogger.CRITICAL, Messages.errors\r
+                                                       .get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));\r
+                       msoRequest.createRequestRecord(Status.FAILED, action);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.DBAccessError,\r
+                                       "Exception while communciate with DB");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION\r
+                                       + (String) response.getEntity());\r
+                       return response;\r
+               } finally {\r
+                       closeCatalogDB(db);\r
+               }\r
+               if (recipeLookupResult == null) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND,\r
+                                       MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.DataError, "No recipe found in DB");\r
+                       msoRequest\r
+                                       .setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_NOT_FOUND, MsoException.ServiceException,\r
+                                       "Recipe does not exist in catalog DB",\r
+                                       ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);\r
+                       msoRequest.createRequestRecord(Status.FAILED, action);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.DataNotFound,\r
+                                       "No recipe found in DB");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION\r
+                                       + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               }\r
+\r
+               RequestClient requestClient = null;\r
+               HttpResponse response = null;\r
+\r
+               long subStartTime = System.currentTimeMillis();\r
+               // String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);\r
+\r
+               try {\r
+                       requestClient = RequestClientFactory.getRequestClient(\r
+                                       recipeLookupResult.getOrchestrationURI(),\r
+                                       MsoPropertiesUtils.loadMsoProperties());\r
+\r
+                       JSONObject jjo = new JSONObject(requestJSON);\r
+                       jjo.put("operationId", UUIDChecker.generateUUID(msoLogger));\r
+\r
+                       String bpmnRequest = jjo.toString();\r
+\r
+                       // Capture audit event\r
+                       msoLogger\r
+                                       .debug("MSO API Handler Posting call to BPEL engine for url: "\r
+                                                       + requestClient.getUrl());\r
+                       String serviceId = instanceIdMap.get("serviceId");\r
+                       String serviceInstanceType = e2eDelReq.getServiceType();\r
+                       response = requestClient.post(requestId, false,\r
+                                       recipeLookupResult.getRecipeTimeout(), action.name(),\r
+                                       serviceId, null, null, null, null, serviceInstanceType,\r
+                                       null, null, null, bpmnRequest, recipeLookupResult.getRecipeParamXsd());\r
+\r
+                       msoLogger.recordMetricEvent(subStartTime,\r
+                                       MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,\r
+                                       "Successfully received response from BPMN engine", "BPMN",\r
+                                       recipeLookupResult.getOrchestrationURI(), null);\r
+               } catch (Exception e) {\r
+                       msoLogger.recordMetricEvent(subStartTime,\r
+                                       MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.CommunicationError,\r
+                                       "Exception while communicate with BPMN engine", "BPMN",\r
+                                       recipeLookupResult.getOrchestrationURI(), null);\r
+                       Response resp = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,\r
+                                       "Failed calling bpmn " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       alarmLogger.sendAlarm("MsoConfigurationError",\r
+                                       MsoAlarmLogger.CRITICAL,\r
+                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,\r
+                                       MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.AvailabilityError,\r
+                                       "Exception while communicate with BPMN engine");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.CommunicationError,\r
+                                       "Exception while communicate with BPMN engine");\r
+                       msoLogger.debug("End of the transaction, the final response is: "\r
+                                       + (String) resp.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return resp;\r
+               }\r
+\r
+               if (response == null) {\r
+                       Response resp = msoRequest.buildServiceErrorResponse(\r
+                                       HttpStatus.SC_BAD_GATEWAY, MsoException.ServiceException,\r
+                                       "bpelResponse is null",\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR,\r
+                                       MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.BusinessProcesssError,\r
+                                       "Null response from BPEL");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.InternalError,\r
+                                       "Null response from BPMN");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return resp;\r
+               }\r
+\r
+               ResponseHandler respHandler = new ResponseHandler(response,\r
+                               requestClient.getType());\r
+               int bpelStatus = respHandler.getStatus();\r
+\r
+               return beplStatusUpdate(requestId, startTime, msoRequest,\r
+                               requestClient, respHandler, bpelStatus, action, instanceIdMap);\r
+       }\r
+\r
+       private Response updateE2EserviceInstances(String requestJSON, Action action,\r
+                       HashMap<String, String> instanceIdMap, String version) {\r
+\r
+               String requestId = instanceIdMap.get("serviceId");\r
+               long startTime = System.currentTimeMillis();\r
+               msoLogger.debug("requestId is: " + requestId);\r
+               E2EServiceInstanceRequest e2eSir = null;\r
+\r
+               MsoRequest msoRequest = new MsoRequest(requestId);\r
+               ObjectMapper mapper = new ObjectMapper();\r
+               try {\r
+                       e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);\r
+\r
+               } catch (Exception e) {\r
+          \r
+          this.createOperationStatusRecordForError(action, requestId);\r
+                 \r
+                       msoLogger.debug("Mapping of request to JSON object failed : ", e);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,\r
+                                       MsoException.ServiceException, "Mapping of request to JSON object failed.  " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_BAD_PARAMETER, null);\r
+                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,\r
+                                       "Mapping of request to JSON object failed");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       return response;\r
+               }\r
+\r
+               mapReqJsonToSvcInstReq(e2eSir, requestJSON);\r
+               sir.getRequestDetails().getRequestParameters().setaLaCarte(true);\r
+               try {\r
+                       msoRequest.parse(sir, instanceIdMap, action, version);\r
+               } catch (Exception e) {\r
+                       msoLogger.debug("Validation failed: ", e);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,\r
+                                       MsoException.ServiceException, "Error parsing request.  " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_BAD_PARAMETER, null);\r
+                       if (msoRequest.getRequestId() != null) {\r
+                               msoLogger.debug("Logging failed message to the database");\r
+                               this.createOperationStatusRecordForError(action, requestId);\r
+                       }\r
+                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,\r
+                                       "Validation of the input request failed");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       return response;\r
+               }\r
+               \r
+               //check for the current operation status\r
+               Response resp = checkE2ESvcInstStatus(action, requestId, startTime, msoRequest);\r
+               if(resp != null && resp.getStatus() != 200) {\r
+                       return resp;\r
+               }\r
+               \r
+               CatalogDatabase db = null;\r
+               RecipeLookupResult recipeLookupResult = null;\r
+               try {\r
+                       db = CatalogDatabase.getInstance();\r
+                       recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getTemplateId(), action);\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);\r
+                       msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,\r
+                                       MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,\r
+                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));\r
+                       \r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,\r
+                                       "Exception while communciate with DB");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               } finally {\r
+                       closeCatalogDB(db);\r
+               }\r
+\r
+               if (recipeLookupResult == null) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.DataError, "No recipe found in DB");\r
+                       msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,\r
+                                       MsoException.ServiceException, "Recipe does not exist in catalog DB",\r
+                                       ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);\r
+               \r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,\r
+                                       "No recipe found in DB");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               }\r
+\r
+               String serviceInstanceType = e2eSir.getService().getParameters().getServiceType();\r
+\r
+               String serviceId = "";\r
+               RequestClient requestClient = null;\r
+               HttpResponse response = null;\r
+\r
+               long subStartTime = System.currentTimeMillis();\r
+               String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);\r
+\r
+               try {\r
+                       requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),\r
+                                       MsoPropertiesUtils.loadMsoProperties());\r
+\r
+                       // Capture audit event\r
+                       msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());\r
+\r
+                       response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),\r
+                                       serviceId, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson, recipeLookupResult.getRecipeParamXsd());\r
+\r
+                       msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,\r
+                                       "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),\r
+                                       null);\r
+               } catch (Exception e) {\r
+                       msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",\r
+                                       recipeLookupResult.getOrchestrationURI(), null);\r
+                       Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,\r
+                                       MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,\r
+                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,\r
+                                       "Exception while communicate with BPMN engine");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) getBPMNResp.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return getBPMNResp;\r
+               }\r
+\r
+               if (response == null) {\r
+                       Response getBPMNResp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,\r
+                                       MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,\r
+                                       "Null response from BPMN");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) getBPMNResp.getEntity());\r
+                       return getBPMNResp;\r
+               }\r
+\r
+               ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());\r
+               int bpelStatus = respHandler.getStatus();\r
+\r
+               return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);\r
+       }\r
+\r
+       private Response checkE2ESvcInstStatus(Action action, String requestId, long startTime, MsoRequest msoRequest) {\r
+               OperationStatus curStatus = null;\r
+//             String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();\r
+               String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();\r
+               try {\r
+                       if (!(requestId == null && "service".equals(requestScope) && (action == Action.updateInstance))) {                          \r
+                               curStatus = chkSvcInstOperStatusbySvcId(requestId);\r
+                       }\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.DataError, "Error during current operation status check ", e);\r
+\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,\r
+                                       MsoException.ServiceException, e.getMessage(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);\r
+\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,\r
+                                       "Error during current operation status check");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       return response;\r
+               }\r
+\r
+               if (curStatus != null && !curStatus.getProgress().equals("100")) {\r
+                       String chkMessage = "Error: Locked instance - This " + requestScope + " (" + requestId + ") "\r
+                                       + "now being worked with a status of " + curStatus.getProgress() + " (ServiceName - "\r
+                                       + curStatus.getServiceName()\r
+                                       + "). The existing request must finish or be cleaned up before proceeding.";\r
+\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT,\r
+                                       MsoException.ServiceException, chkMessage, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);\r
+\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict,\r
+                                       chkMessage);\r
+\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+\r
+                       createOperationStatusRecordForError(action, requestId);\r
+\r
+                       return response;\r
+               }\r
+               \r
+               return Response.status(200).entity(null).build();\r
+       }\r
+       \r
+       private Response processE2EserviceInstances(String requestJSON, Action action,\r
+                       HashMap<String, String> instanceIdMap, String version) {\r
+\r
+               String requestId = UUIDChecker.generateUUID(msoLogger);\r
+               long startTime = System.currentTimeMillis();\r
+               msoLogger.debug("requestId is: " + requestId);\r
+               E2EServiceInstanceRequest e2eSir = null;\r
+\r
+               MsoRequest msoRequest = new MsoRequest(requestId);\r
+               ObjectMapper mapper = new ObjectMapper();\r
+               try {\r
+                       e2eSir = mapper.readValue(requestJSON, E2EServiceInstanceRequest.class);\r
+\r
+               } catch (Exception e) {\r
+          //TODO update the service name\r
+          this.createOperationStatusRecordForError(action, requestId);\r
+                 \r
+                       msoLogger.debug("Mapping of request to JSON object failed : ", e);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,\r
+                                       MsoException.ServiceException, "Mapping of request to JSON object failed.  " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_BAD_PARAMETER, null);\r
+                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,\r
+                                       "Mapping of request to JSON object failed");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       return response;\r
+               }\r
+\r
+               mapReqJsonToSvcInstReq(e2eSir, requestJSON);\r
+               sir.getRequestDetails().getRequestParameters().setaLaCarte(true);\r
+               try {\r
+                       msoRequest.parse(sir, instanceIdMap, action, version);\r
+               } catch (Exception e) {\r
+                       msoLogger.debug("Validation failed: ", e);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_REQUEST,\r
+                                       MsoException.ServiceException, "Error parsing request.  " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_BAD_PARAMETER, null);\r
+                       if (msoRequest.getRequestId() != null) {\r
+                               msoLogger.debug("Logging failed message to the database");\r
+                               //TODO update the service name\r
+                         this.createOperationStatusRecordForError(action, requestId);\r
+                       }\r
+                       msoLogger.error(MessageEnum.APIH_REQUEST_VALIDATION_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.SchemaError, requestJSON, e);\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.SchemaError,\r
+                                       "Validation of the input request failed");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       return response;\r
+               }\r
+               \r
+               OperationStatus dup = null;\r
+               String instanceName = sir.getRequestDetails().getRequestInfo().getInstanceName();\r
+               String requestScope = sir.getRequestDetails().getModelInfo().getModelType().name();\r
+               try {\r
+                       if (!(instanceName == null && "service".equals(requestScope)\r
+                                       && (action == Action.createInstance || action == Action.activateInstance))) {\r
+                         //TODO : Need to check for the duplicate record from the operation status,\r
+                         //TODO : commenting this check for unblocking current testing for now...  induces dead code...\r
+                               dup = chkDuplicateServiceNameInOperStatus( instanceName);\r
+                       }\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DUPLICATE_CHECK_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.DataError, "Error during duplicate check ", e);\r
+\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,\r
+                                       MsoException.ServiceException, e.getMessage(), ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);\r
+\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,\r
+                                       "Error during duplicate check");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       return response;\r
+               }\r
+\r
+               if (dup != null) {\r
+                       // Found the duplicate record. Return the appropriate error.\r
+                       String instance = null;\r
+                       if (instanceName != null) {\r
+                               instance = instanceName;\r
+                       } else {\r
+                               instance = instanceIdMap.get(requestScope + "InstanceId");\r
+                       }\r
+                       String dupMessage = "Error: Locked instance - This " + requestScope + " (" + instance + ") "\r
+                                       + "already has a request being worked with a status of " + dup.getProgress() + " (ServiceId - "\r
+                                       + dup.getServiceId() + "). The existing request must finish or be cleaned up before proceeding.";\r
+\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_CONFLICT,\r
+                                       MsoException.ServiceException, dupMessage, ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, null);\r
+\r
+                       msoLogger.warn(MessageEnum.APIH_DUPLICATE_FOUND, dupMessage, "", "", MsoLogger.ErrorCode.SchemaError,\r
+                                       "Duplicate request - Subscriber already has a request for this service");\r
+                       \r
+                       \r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.Conflict,\r
+                                       dupMessage);\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               }\r
+               \r
+               CatalogDatabase db = null;\r
+               RecipeLookupResult recipeLookupResult = null;\r
+               try {\r
+                       db = CatalogDatabase.getInstance();\r
+                       recipeLookupResult = getServiceInstanceOrchestrationURI(db, e2eSir.getService().getTemplateId(), action);\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.AvailabilityError, "Exception while communciate with Catalog DB", e);\r
+                       msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,\r
+                                       MsoException.ServiceException, "No communication to catalog DB " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       alarmLogger.sendAlarm("MsoDatabaseAccessError", MsoAlarmLogger.CRITICAL,\r
+                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_CATALOG_DB));\r
+                       \r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,\r
+                                       "Exception while communciate with DB");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               } finally {\r
+                       closeCatalogDB(db);\r
+               }\r
+\r
+               if (recipeLookupResult == null) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_ATTRIBUTE_NOT_FOUND, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.DataError, "No recipe found in DB");\r
+                       msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+                       Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_NOT_FOUND,\r
+                                       MsoException.ServiceException, "Recipe does not exist in catalog DB",\r
+                                       ErrorNumbers.SVC_GENERAL_SERVICE_ERROR, null);\r
+               \r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DataNotFound,\r
+                                       "No recipe found in DB");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) response.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return response;\r
+               }\r
+//             try {\r
+//                     msoRequest.createRequestRecord(Status.PENDING, action);\r
+//                     //createOperationStatusRecord(action, requestId);\r
+//             } catch (Exception e) {\r
+//                     msoLogger.error(MessageEnum.APIH_DB_ACCESS_EXC_REASON, "Exception while creating record in DB", "", "",\r
+//                                     MsoLogger.ErrorCode.SchemaError, "Exception while creating record in DB", e);\r
+//                     msoRequest.setStatus(org.openecomp.mso.apihandlerinfra.vnfbeans.RequestStatusType.FAILED);\r
+//                     Response response = msoRequest.buildServiceErrorResponse(HttpStatus.SC_INTERNAL_SERVER_ERROR,\r
+//                                     MsoException.ServiceException, "Exception while creating record in DB " + e.getMessage(),\r
+//                                     ErrorNumbers.SVC_BAD_PARAMETER, null);\r
+//                     msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.DBAccessError,\r
+//                                     "Exception while creating record in DB");\r
+//                     msoLogger.debug("End of the transaction, the final response is: " + (String) response.getEntity());\r
+//                     return response;\r
+//             }\r
+\r
+               String serviceInstanceType = e2eSir.getService().getParameters().getServiceType();\r
+\r
+               String serviceId = "";\r
+               RequestClient requestClient = null;\r
+               HttpResponse response = null;\r
+\r
+               long subStartTime = System.currentTimeMillis();\r
+               String sirRequestJson = mapReqJsonToSvcInstReq(e2eSir, requestJSON);\r
+\r
+               try {\r
+                       requestClient = RequestClientFactory.getRequestClient(recipeLookupResult.getOrchestrationURI(),\r
+                                       MsoPropertiesUtils.loadMsoProperties());\r
+\r
+                       // Capture audit event\r
+                       msoLogger.debug("MSO API Handler Posting call to BPEL engine for url: " + requestClient.getUrl());\r
+\r
+                       response = requestClient.post(requestId, false, recipeLookupResult.getRecipeTimeout(), action.name(),\r
+                                       serviceId, null, null, null, null, serviceInstanceType, null, null, null, sirRequestJson, recipeLookupResult.getRecipeParamXsd());\r
+\r
+                       msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,\r
+                                       "Successfully received response from BPMN engine", "BPMN", recipeLookupResult.getOrchestrationURI(),\r
+                                       null);\r
+               } catch (Exception e) {\r
+                       msoLogger.recordMetricEvent(subStartTime, MsoLogger.StatusCode.ERROR,\r
+                                       MsoLogger.ResponseCode.CommunicationError, "Exception while communicate with BPMN engine", "BPMN",\r
+                                       recipeLookupResult.getOrchestrationURI(), null);\r
+                       Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,\r
+                                       MsoException.ServiceException, "Failed calling bpmn " + e.getMessage(),\r
+                                       ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       alarmLogger.sendAlarm("MsoConfigurationError", MsoAlarmLogger.CRITICAL,\r
+                                       Messages.errors.get(ErrorNumbers.NO_COMMUNICATION_TO_BPEL));\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.AvailabilityError, "Exception while communicate with BPMN engine");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.CommunicationError,\r
+                                       "Exception while communicate with BPMN engine");\r
+                       msoLogger.debug("End of the transaction, the final response is: " + (String) resp.getEntity());\r
+                       createOperationStatusRecordForError(action, requestId);\r
+                       return resp;\r
+               }\r
+\r
+               if (response == null) {\r
+                       Response resp = msoRequest.buildServiceErrorResponse(HttpStatus.SC_BAD_GATEWAY,\r
+                                       MsoException.ServiceException, "bpelResponse is null", ErrorNumbers.SVC_NO_SERVER_RESOURCES, null);\r
+                       msoLogger.error(MessageEnum.APIH_BPEL_COMMUNICATE_ERROR, MSO_PROP_APIHANDLER_INFRA, "", "",\r
+                                       MsoLogger.ErrorCode.BusinessProcesssError, "Null response from BPEL");\r
+                       msoLogger.recordAuditEvent(startTime, MsoLogger.StatusCode.ERROR, MsoLogger.ResponseCode.InternalError,\r
+                                       "Null response from BPMN");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + (String) resp.getEntity());\r
+                       return resp;\r
+               }\r
+\r
+               ResponseHandler respHandler = new ResponseHandler(response, requestClient.getType());\r
+               int bpelStatus = respHandler.getStatus();\r
+\r
+               return beplStatusUpdate(requestId, startTime, msoRequest, requestClient, respHandler, bpelStatus, action, instanceIdMap);\r
+       }\r
+\r
+       private void closeCatalogDB(CatalogDatabase db) {\r
+               if (db != null) {\r
+                       db.close();\r
+               }\r
+       }\r
+\r
+       private Response beplStatusUpdate(String requestId, long startTime,\r
+                       MsoRequest msoRequest, RequestClient requestClient,\r
+                       ResponseHandler respHandler, int bpelStatus, Action action,\r
+                       HashMap<String, String> instanceIdMap) {\r
+               // BPMN accepted the request, the request is in progress\r
+               if (bpelStatus == HttpStatus.SC_ACCEPTED) {\r
+                       String camundaJSONResponseBody = respHandler.getResponseBody();\r
+                       msoLogger\r
+                                       .debug("Received from Camunda: " + camundaJSONResponseBody);\r
+\r
+                       // currently only for delete case we update the status here\r
+                       if (action == Action.deleteInstance) {\r
+                               ObjectMapper mapper = new ObjectMapper();\r
+                               try {\r
+                                       DelE2ESvcResp jo = mapper.readValue(\r
+                                                       camundaJSONResponseBody, DelE2ESvcResp.class);\r
+                                       String operationId = jo.getOperationId();\r
+                               this.createOperationStatusRecord("DELETE", requestId,\r
+                                                               operationId);\r
+                               } catch (Exception ex) {\r
+                                       msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,\r
+                                                       requestClient.getUrl(), "", "",\r
+                                                       MsoLogger.ErrorCode.BusinessProcesssError,\r
+                                                       "Response from BPEL engine is failed with HTTP Status="\r
+                                                                       + bpelStatus);\r
+                               }\r
+                       }\r
+                       msoLogger.recordAuditEvent(startTime,\r
+                                       MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc,\r
+                                       "BPMN accepted the request, the request is in progress");\r
+                       msoLogger.debug(END_OF_THE_TRANSACTION + camundaJSONResponseBody);\r
+                       return Response.status(HttpStatus.SC_ACCEPTED)\r
+                                       .entity(camundaJSONResponseBody).build();\r
+               } else {\r
+                       List<String> variables = new ArrayList<>();\r
+                       variables.add(bpelStatus + "");\r
+                       String camundaJSONResponseBody = respHandler.getResponseBody();\r
+                       if (camundaJSONResponseBody != null\r
+                                       && !camundaJSONResponseBody.isEmpty()) {\r
+                               Response resp = msoRequest.buildServiceErrorResponse(\r
+                                               bpelStatus, MsoException.ServiceException,\r
+                                               "Request Failed due to BPEL error with HTTP Status= %1 "\r
+                                                               + '\n' + camundaJSONResponseBody,\r
+                                               ErrorNumbers.SVC_DETAILED_SERVICE_ERROR, variables);\r
+                               msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,\r
+                                               requestClient.getUrl(), "", "",\r
+                                               MsoLogger.ErrorCode.BusinessProcesssError,\r
+                                               "Response from BPEL engine is failed with HTTP Status="\r
+                                                               + bpelStatus);\r
+                               msoLogger.recordAuditEvent(startTime,\r
+                                               MsoLogger.StatusCode.ERROR,\r
+                                               MsoLogger.ResponseCode.InternalError,\r
+                                               "Response from BPMN engine is failed");\r
+                               msoLogger.debug(END_OF_THE_TRANSACTION\r
+                                               + (String) resp.getEntity());\r
+                               return resp;\r
+                       } else {\r
+                               Response resp = msoRequest\r
+                                               .buildServiceErrorResponse(\r
+                                                               bpelStatus,\r
+                                                               MsoException.ServiceException,\r
+                                                               "Request Failed due to BPEL error with HTTP Status= %1",\r
+                                                               ErrorNumbers.SVC_DETAILED_SERVICE_ERROR,\r
+                                                               variables);\r
+                               msoLogger.error(MessageEnum.APIH_BPEL_RESPONSE_ERROR,\r
+                                               requestClient.getUrl(), "", "",\r
+                                               MsoLogger.ErrorCode.BusinessProcesssError,\r
+                                               "Response from BPEL engine is empty");\r
+                               msoLogger.recordAuditEvent(startTime,\r
+                                               MsoLogger.StatusCode.ERROR,\r
+                                               MsoLogger.ResponseCode.InternalError,\r
+                                               "Response from BPEL engine is empty");\r
+                               msoLogger.debug(END_OF_THE_TRANSACTION\r
+                                               + (String) resp.getEntity());\r
+                               return resp;\r
+                       }\r
+               }\r
+       }\r
+\r
+       /**\r
+        * Getting recipes from catalogDb\r
+        * \r
+        * @param db the catalog db\r
+        * @param serviceModelUUID the service model version uuid\r
+        * @param action the action for the service\r
+        * @return the service recipe result\r
+        */\r
+       private RecipeLookupResult getServiceInstanceOrchestrationURI(\r
+                       CatalogDatabase db, String serviceModelUUID, Action action) {\r
+\r
+               RecipeLookupResult recipeLookupResult = getServiceURI(db, serviceModelUUID, action);\r
+\r
+               if (recipeLookupResult != null) {\r
+                       msoLogger.debug("Orchestration URI is: "\r
+                                       + recipeLookupResult.getOrchestrationURI()\r
+                                       + ", recipe Timeout is: "\r
+                                       + Integer.toString(recipeLookupResult.getRecipeTimeout()));\r
+               } else {\r
+                       msoLogger.debug("No matching recipe record found");\r
+               }\r
+               return recipeLookupResult;\r
+       }\r
+\r
+       /**\r
+        * Getting recipes from catalogDb\r
+        * If Service recipe is not set, use default recipe, if set , use special recipe.\r
+        * @param db the catalog db\r
+        * @param serviceModelUUID the service version uuid\r
+        * @param action the action of the service.\r
+        * @return the service recipe result.\r
+        */\r
+       private RecipeLookupResult getServiceURI(CatalogDatabase db, String serviceModelUUID, Action action) {\r
+\r
+               String defaultServiceModelName = "UUI_DEFAULT";\r
+\r
+               Service defaultServiceRecord = db\r
+                               .getServiceByModelName(defaultServiceModelName);\r
+               ServiceRecipe defaultRecipe = db.getServiceRecipeByModelUUID(\r
+                       defaultServiceRecord.getModelUUID(), action.name());\r
+               //set recipe as default generic recipe\r
+               ServiceRecipe recipe = defaultRecipe;\r
+               //check the service special recipe \r
+               if(null != serviceModelUUID && ! serviceModelUUID.isEmpty()){\r
+                     ServiceRecipe serviceSpecialRecipe = db.getServiceRecipeByModelUUID(\r
+                             serviceModelUUID, action.name());\r
+                     if(null != serviceSpecialRecipe){\r
+                         //set service special recipe.\r
+                         recipe = serviceSpecialRecipe;\r
+                     }\r
+               }       \r
+               \r
+               if (recipe == null) {\r
+                       return null;\r
+               }\r
+               return new RecipeLookupResult(recipe.getOrchestrationUri(),\r
+                               recipe.getRecipeTimeout(), recipe.getServiceParamXSD());\r
+\r
+       }\r
+\r
+       /**\r
+        * Converting E2EServiceInstanceRequest to ServiceInstanceRequest and\r
+        * passing it to camunda engine.\r
+        * \r
+        * @param e2eSir\r
+        * @return\r
+        */\r
+       private String mapReqJsonToSvcInstReq(E2EServiceInstanceRequest e2eSir,\r
+                       String requestJSON) {\r
+\r
+               sir = new ServiceInstancesRequest();\r
+\r
+               String returnString = null;\r
+               RequestDetails requestDetails = new RequestDetails();\r
+               ModelInfo modelInfo = new ModelInfo();\r
+\r
+               // ModelInvariantId\r
+               modelInfo.setModelInvariantId(e2eSir.getService().getServiceDefId());\r
+\r
+               // modelNameVersionId\r
+               modelInfo.setModelNameVersionId(e2eSir.getService().getTemplateId());\r
+\r
+               // String modelInfoValue =\r
+               // e2eSir.getService().getParameters().getNodeTemplateName();\r
+               // String[] arrayOfInfo = modelInfoValue.split(":");\r
+               // String modelName = arrayOfInfo[0];\r
+               // String modelVersion = arrayOfInfo[1];\r
+\r
+               // TODO: To ensure, if we dont get the values from the UUI\r
+               String modelName = "voLTE";\r
+               String modelVersion = "1.0";\r
+               // modelName\r
+               modelInfo.setModelName(modelName);\r
+\r
+               // modelVersion\r
+               modelInfo.setModelVersion(modelVersion);\r
+\r
+               // modelType\r
+               modelInfo.setModelType(ModelType.service);\r
+\r
+               // setting modelInfo to requestDetails\r
+               requestDetails.setModelInfo(modelInfo);\r
+\r
+               SubscriberInfo subscriberInfo = new SubscriberInfo();\r
+\r
+               // globalsubscriberId\r
+               subscriberInfo.setGlobalSubscriberId(e2eSir.getService()\r
+                               .getParameters().getGlobalSubscriberId());\r
+\r
+               // subscriberName\r
+               subscriberInfo.setSubscriberName(e2eSir.getService().getParameters()\r
+                               .getSubscriberName());\r
+\r
+               // setting subscriberInfo to requestDetails\r
+               requestDetails.setSubscriberInfo(subscriberInfo);\r
+\r
+               RequestInfo requestInfo = new RequestInfo();\r
+\r
+               // instanceName\r
+               requestInfo.setInstanceName(e2eSir.getService().getName());\r
+\r
+               // source\r
+               requestInfo.setSource("UUI");\r
+\r
+               // suppressRollback\r
+               requestInfo.setSuppressRollback(true);\r
+\r
+               // setting requestInfo to requestDetails\r
+               requestDetails.setRequestInfo(requestInfo);\r
+\r
+               RequestParameters requestParameters = new RequestParameters();\r
+\r
+               // subscriptionServiceType\r
+               requestParameters.setSubscriptionServiceType("MOG");\r
+\r
+               // Userparams\r
+               List<E2EUserParam> userParams;\r
+               // userParams =\r
+               // e2eSir.getService().getParameters().getRequestParameters().getUserParams();\r
+               List<Map<String, String>> userParamList = new ArrayList<>();\r
+               Map<String, String> userParamMap = new HashMap<>();\r
+               // complete json request updated in the camunda\r
+               userParamMap.put("UUIRequest", requestJSON);\r
+               userParamMap.put("ServiceInstanceName", e2eSir.getService().getName());\r
+\r
+               // Map<String, String> userParamMap3 = null;\r
+               // for (E2EUserParam userp : userParams) {\r
+               // userParamMap.put(userp.getName(), userp.getValue());\r
+               //\r
+               // }\r
+               userParamList.add(userParamMap);\r
+               requestParameters.setUserParams(userParamList);\r
+\r
+               // setting requestParameters to requestDetails\r
+               requestDetails.setRequestParameters(requestParameters);\r
+\r
+               sir.setRequestDetails(requestDetails);\r
+\r
+               // converting to string\r
+               ObjectMapper mapper = new ObjectMapper();\r
+               try {\r
+                       returnString = mapper.writeValueAsString(sir);\r
+               } catch (IOException e) {\r
+                       msoLogger\r
+                                       .debug("Exception while converting ServiceInstancesRequest object to string",\r
+                                                       e);\r
+               }\r
+\r
+               return returnString;\r
+       }\r
+\r
+       private void createOperationStatusRecordForError(Action action,\r
+                       String requestId) throws MsoDatabaseException {\r
+\r
+               AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();\r
+\r
+               Session session = null;\r
+               try {\r
+\r
+                       session = requestsDbSessionFactoryManager.getSessionFactory()\r
+                                       .openSession();\r
+                       session.beginTransaction();\r
+\r
+                       OperationStatus os = new OperationStatus();\r
+                       os.setOperation(action.name());\r
+                       os.setOperationContent("");\r
+                       os.setOperationId("");\r
+                       os.setProgress("100");\r
+                       os.setReason("");\r
+                       os.setResult("error");\r
+                       os.setServiceId(requestId);\r
+                       os.setUserId("");\r
+                       Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());\r
+                       Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());\r
+                       os.setFinishedAt(endTimeStamp);\r
+                       os.setOperateAt(startTimeStamp);\r
+\r
+                       session.save(os);\r
+                       session.getTransaction().commit();\r
+\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_INSERT_EXC, "", "",\r
+                                       MsoLogger.ErrorCode.DataError,\r
+                                       "Exception when creation record request in Operation", e);\r
+                       throw new MsoDatabaseException(\r
+                                       "Data did inserted in Operatus Status Table for failure", e);\r
+               } finally {\r
+                       if (null != session) {\r
+                               session.close();\r
+                       }\r
+               }\r
+       }\r
+\r
+       private void createOperationStatusRecord(String actionNm, String serviceId,\r
+                       String operationId) throws MsoDatabaseException {\r
+\r
+               AbstractSessionFactoryManager requestsDbSessionFactoryManager = new RequestsDbSessionFactoryManager();\r
+\r
+               Session session = null;\r
+               try {\r
+\r
+                       session = requestsDbSessionFactoryManager.getSessionFactory()\r
+                                       .openSession();\r
+                       session.beginTransaction();\r
+\r
+                       OperationStatus os = new OperationStatus();\r
+                       os.setOperation(actionNm);\r
+                       os.setOperationContent("");\r
+                       os.setOperationId(operationId);\r
+                       os.setProgress("0");\r
+                       os.setReason("");\r
+                       os.setResult("processing");\r
+                       os.setServiceId(serviceId);\r
+                       // TODO : to be updated...\r
+                       os.setUserId("");\r
+                       Timestamp startTimeStamp = new Timestamp(System.currentTimeMillis());\r
+                       Timestamp endTimeStamp = new Timestamp(System.currentTimeMillis());\r
+                       os.setFinishedAt(endTimeStamp);\r
+                       os.setOperateAt(startTimeStamp);\r
+\r
+                       session.save(os);\r
+                       session.getTransaction().commit();\r
+\r
+               } catch (Exception e) {\r
+                       msoLogger.error(MessageEnum.APIH_DB_INSERT_EXC, "", "",\r
+                                       MsoLogger.ErrorCode.DataError,\r
+                                       "Exception when creation record request in Operation", e);\r
+                       throw new MsoDatabaseException(\r
+                                       "Data did inserted in Operatus Status Table", e);\r
+               } finally {\r
+                       if (null != session) {\r
+                               session.close();\r
+                       }\r
+               }\r
+       }\r
+\r
+       private OperationStatus chkSvcInstOperStatusbySvcId(String serviceId) {\r
+               OperationStatus svcInstanceOperStatus = (RequestsDatabase.getInstance())\r
+                               .getOperationStatusByServiceId(serviceId);\r
+\r
+               return svcInstanceOperStatus;\r
+       }\r
+\r
+       private OperationStatus chkDuplicateServiceNameInOperStatus(\r
+                       String serviceName) {\r
+               OperationStatus dupServiceName = (RequestsDatabase.getInstance())\r
+                               .getOperationStatusByServiceName(serviceName);\r
+\r
+               return dupServiceName;\r
+       }\r
 }
\ No newline at end of file
index df3b365..aa0b109 100644 (file)
@@ -610,4 +610,147 @@ public class E2EServiceInstancesTest {
                                .getE2EServiceInstances("12345", "v3", "123456");\r
 \r
        }\r
+       \r
+       @Test\r
+       public void updateE2EServiceInstanceTestNormal() {\r
+               new MockUp<RequestsDatabase>() {\r
+                       @Mock\r
+                       public OperationStatus getOperationStatusByServiceId(\r
+                                       String serviceID) {\r
+                               OperationStatus operationStatus = new OperationStatus();\r
+                               operationStatus.setProgress("100");\r
+                               return operationStatus;\r
+                       }\r
+               };\r
+               new MockUp<E2EServiceInstances>() {\r
+                       @Mock\r
+                       private void createOperationStatusRecordForError(Action action,\r
+                                       String requestId) throws MsoDatabaseException {\r
+\r
+                       }\r
+               };\r
+               new MockUp<CatalogDatabase>() {\r
+                       @Mock\r
+                       public Service getServiceByModelName(String modelName) {\r
+                               Service svc = new Service();\r
+                               return svc;\r
+                       }\r
+               };\r
+\r
+               new MockUp<CatalogDatabase>() {\r
+                       @Mock\r
+                       public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID,\r
+                                       String action) {\r
+                               ServiceRecipe rec = new ServiceRecipe();\r
+                               return rec;\r
+                       }\r
+               };\r
+\r
+               new MockUp<RequestClientFactory>() {\r
+                       @Mock\r
+                       public RequestClient getRequestClient(String orchestrationURI,\r
+                                       MsoJavaProperties props) throws IllegalStateException {\r
+                               RequestClient client = new CamundaClient();\r
+                               client.setUrl("/test/url");\r
+                               return client;\r
+                       }\r
+               };\r
+\r
+               new MockUp<CamundaClient>() {\r
+                       @Mock\r
+                       public HttpResponse post(String requestId, boolean isBaseVfModule,\r
+                                       int recipeTimeout, String requestAction,\r
+                                       String serviceInstanceId, String vnfId, String vfModuleId,\r
+                                       String volumeGroupId, String networkId, String serviceType,\r
+                                       String vnfType, String vfModuleType, String networkType,\r
+                                       String requestDetails, String recipeParamXsd) {\r
+                               ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);\r
+                               HttpResponse resp = new BasicHttpResponse(pv, 202,\r
+                                               "test response");\r
+                               BasicHttpEntity entity = new BasicHttpEntity();\r
+                               String body = "{\"response\":\"success\",\"message\":\"success\"}";\r
+                               InputStream instream = new ByteArrayInputStream(body.getBytes());\r
+                               entity.setContent(instream);\r
+                               resp.setEntity(entity);\r
+                               return resp;\r
+                       }\r
+               };\r
+\r
+               E2EServiceInstances instance = new E2EServiceInstances();\r
+               String request = "{\"service\":{\"name\":\"so_test4\",\"description\":\"so_test2\",\"serviceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561519\",\"templateId\":\"592f9437-a9c0-4303-b9f6-c445bb7e9814\",\"parameters\":{\"globalSubscriberId\":\"123457\",\"subscriberName\":\"Customer1\",\"serviceType\":\"voLTE\",\"templateName\":\"voLTE Service:1.0\",\"resources\":[{\"resourceName\":\"vIMS\",\"resourceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561516\",\"resourceId\":\"60c3e96e-0970-4871-b6e0-3b6de7561512\",\"nsParameters\":{\"locationConstraints\":[{\"vnfProfileId\":\"zte-vBAS-1.0\",\"locationConstraints\":{\"vimId\":\"4050083f-465f-4838-af1e-47a545222ad0\"}},{\"vnfProfileId\":\"zte-vMME-1.0\",\"locationConstraints\":{\"vimId\":\"4050083f-465f-4838-af1e-47a545222ad0\"}}],\"additionalParamForNs\":{}}},{\"resourceName\":\"vEPC\",\"resourceDefId\":\"61c3e96e-0970-4871-b6e0-3b6de7561516\",\"resourceId\":\"62c3e96e-0970-4871-b6e0-3b6de7561512\",\"nsParameters\":{\"locationConstraints\":[{\"vnfProfileId\":\"zte-CSCF-1.0\",\"locationConstraints\":{\"vimId\":\"4050083f-465f-4838-af1e-47a545222ad1\"}}],\"additionalParamForNs\":{}}},{\"resourceName\":\"underlayvpn\",\"resourceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561513\",\"resourceId\":\"60c3e96e-0970-4871-b6e0-3b6de7561514\",\"nsParameters\":{\"locationConstraints\":[],\"additionalParamForNs\":{\"externalDataNetworkName\":\"Flow_out_net\",\"m6000_mng_ip\":\"181.18.20.2\",\"externalCompanyFtpDataNetworkName\":\"Flow_out_net\",\"externalPluginManageNetworkName\":\"plugin_net_2014\",\"externalManageNetworkName\":\"mng_net_2017\",\"sfc_data_network\":\"sfc_data_net_2016\",\"NatIpRange\":\"210.1.1.10-210.1.1.20\",\"location\":\"4050083f-465f-4838-af1e-47a545222ad0\",\"sdncontroller\":\"9b9f02c0-298b-458a-bc9c-be3692e4f35e\"}}},{\"resourceName\":\"overlayvpn\",\"resourceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561517\",\"resourceId\":\"60c3e96e-0970-4871-b6e0-3b6de7561518\",\"nsParameters\":{\"locationConstraints\":[],\"additionalParamForNs\":{\"externalDataNetworkName\":\"Flow_out_net\",\"m6000_mng_ip\":\"181.18.20.2\",\"externalCompanyFtpDataNetworkName\":\"Flow_out_net\",\"externalPluginManageNetworkName\":\"plugin_net_2014\",\"externalManageNetworkName\":\"mng_net_2017\",\"sfc_data_network\":\"sfc_data_net_2016\",\"NatIpRange\":\"210.1.1.10-210.1.1.20\",\"location\":\"4050083f-465f-4838-af1e-47a545222ad0\",\"sdncontroller\":\"9b9f02c0-298b-458a-bc9c-be3692e4f35e\"}}}]}}}";\r
+               Response resp = instance.updateE2EServiceInstance(request, "v3", "12345");\r
+               String respStr = resp.getEntity().toString();\r
+               assertTrue(respStr.indexOf("success") != -1);\r
+       }\r
+       \r
+       @Test\r
+       public void updateE2EServiceInstanceTestChkStatusFalse() {\r
+               new MockUp<RequestsDatabase>() {\r
+                       @Mock\r
+                       public OperationStatus getOperationStatusByServiceId(\r
+                                       String serviceID) {\r
+                               OperationStatus operationStatus = new OperationStatus();\r
+                               return operationStatus;\r
+                       }\r
+               };\r
+               new MockUp<E2EServiceInstances>() {\r
+                       @Mock\r
+                       private void createOperationStatusRecordForError(Action action,\r
+                                       String requestId) throws MsoDatabaseException {\r
+\r
+                       }\r
+               };\r
+               new MockUp<CatalogDatabase>() {\r
+                       @Mock\r
+                       public Service getServiceByModelName(String modelName) {\r
+                               Service svc = new Service();\r
+                               return svc;\r
+                       }\r
+               };\r
+\r
+               new MockUp<CatalogDatabase>() {\r
+                       @Mock\r
+                       public ServiceRecipe getServiceRecipeByModelUUID(String modelUUID,\r
+                                       String action) {\r
+                               ServiceRecipe rec = new ServiceRecipe();\r
+                               return rec;\r
+                       }\r
+               };\r
+\r
+               new MockUp<RequestClientFactory>() {\r
+                       @Mock\r
+                       public RequestClient getRequestClient(String orchestrationURI,\r
+                                       MsoJavaProperties props) throws IllegalStateException {\r
+                               RequestClient client = new CamundaClient();\r
+                               client.setUrl("/test/url");\r
+                               return client;\r
+                       }\r
+               };\r
+\r
+               new MockUp<CamundaClient>() {\r
+                       @Mock\r
+                       public HttpResponse post(String requestId, boolean isBaseVfModule,\r
+                                       int recipeTimeout, String requestAction,\r
+                                       String serviceInstanceId, String vnfId, String vfModuleId,\r
+                                       String volumeGroupId, String networkId, String serviceType,\r
+                                       String vnfType, String vfModuleType, String networkType,\r
+                                       String requestDetails, String recipeParamXsd) {\r
+                               ProtocolVersion pv = new ProtocolVersion("HTTP", 1, 1);\r
+                               HttpResponse resp = new BasicHttpResponse(pv, 202,\r
+                                               "test response");\r
+                               BasicHttpEntity entity = new BasicHttpEntity();\r
+                               String body = "{\"response\":\"success\",\"message\":\"success\"}";\r
+                               InputStream instream = new ByteArrayInputStream(body.getBytes());\r
+                               entity.setContent(instream);\r
+                               resp.setEntity(entity);\r
+                               return resp;\r
+                       }\r
+               };\r
+\r
+               E2EServiceInstances instance = new E2EServiceInstances();\r
+               String request = "{\"service\":{\"name\":\"so_test4\",\"description\":\"so_test2\",\"serviceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561519\",\"templateId\":\"592f9437-a9c0-4303-b9f6-c445bb7e9814\",\"parameters\":{\"globalSubscriberId\":\"123457\",\"subscriberName\":\"Customer1\",\"serviceType\":\"voLTE\",\"templateName\":\"voLTE Service:1.0\",\"resources\":[{\"resourceName\":\"vIMS\",\"resourceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561516\",\"resourceId\":\"60c3e96e-0970-4871-b6e0-3b6de7561512\",\"nsParameters\":{\"locationConstraints\":[{\"vnfProfileId\":\"zte-vBAS-1.0\",\"locationConstraints\":{\"vimId\":\"4050083f-465f-4838-af1e-47a545222ad0\"}},{\"vnfProfileId\":\"zte-vMME-1.0\",\"locationConstraints\":{\"vimId\":\"4050083f-465f-4838-af1e-47a545222ad0\"}}],\"additionalParamForNs\":{}}},{\"resourceName\":\"vEPC\",\"resourceDefId\":\"61c3e96e-0970-4871-b6e0-3b6de7561516\",\"resourceId\":\"62c3e96e-0970-4871-b6e0-3b6de7561512\",\"nsParameters\":{\"locationConstraints\":[{\"vnfProfileId\":\"zte-CSCF-1.0\",\"locationConstraints\":{\"vimId\":\"4050083f-465f-4838-af1e-47a545222ad1\"}}],\"additionalParamForNs\":{}}},{\"resourceName\":\"underlayvpn\",\"resourceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561513\",\"resourceId\":\"60c3e96e-0970-4871-b6e0-3b6de7561514\",\"nsParameters\":{\"locationConstraints\":[],\"additionalParamForNs\":{\"externalDataNetworkName\":\"Flow_out_net\",\"m6000_mng_ip\":\"181.18.20.2\",\"externalCompanyFtpDataNetworkName\":\"Flow_out_net\",\"externalPluginManageNetworkName\":\"plugin_net_2014\",\"externalManageNetworkName\":\"mng_net_2017\",\"sfc_data_network\":\"sfc_data_net_2016\",\"NatIpRange\":\"210.1.1.10-210.1.1.20\",\"location\":\"4050083f-465f-4838-af1e-47a545222ad0\",\"sdncontroller\":\"9b9f02c0-298b-458a-bc9c-be3692e4f35e\"}}},{\"resourceName\":\"overlayvpn\",\"resourceDefId\":\"60c3e96e-0970-4871-b6e0-3b6de7561517\",\"resourceId\":\"60c3e96e-0970-4871-b6e0-3b6de7561518\",\"nsParameters\":{\"locationConstraints\":[],\"additionalParamForNs\":{\"externalDataNetworkName\":\"Flow_out_net\",\"m6000_mng_ip\":\"181.18.20.2\",\"externalCompanyFtpDataNetworkName\":\"Flow_out_net\",\"externalPluginManageNetworkName\":\"plugin_net_2014\",\"externalManageNetworkName\":\"mng_net_2017\",\"sfc_data_network\":\"sfc_data_net_2016\",\"NatIpRange\":\"210.1.1.10-210.1.1.20\",\"location\":\"4050083f-465f-4838-af1e-47a545222ad0\",\"sdncontroller\":\"9b9f02c0-298b-458a-bc9c-be3692e4f35e\"}}}]}}}";\r
+               Response resp = instance.updateE2EServiceInstance(request, "v3", "12345");\r
+               String respStr = resp.getEntity().toString();\r
+               assertTrue(respStr.indexOf("SVC2000") != -1);\r
+       }\r
 }\r
index 7f2f78d..d6b0b6b 100644 (file)
@@ -699,7 +699,7 @@ public class RequestsDatabase {
      * update the resource operation
      * <br>
      * 
-     * @param operstatus the resource operation object
+     * @param operStatus the resource operation object
      * @since ONAP Amsterdam Release
      */
     public void updateResOperStatus(ResourceOperationStatus operStatus) {
index 46d0473..c556dda 100644 (file)
@@ -36,6 +36,7 @@ import org.hibernate.Session;
 import org.openecomp.mso.db.AbstractSessionFactoryManager;
 import org.openecomp.mso.db.catalog.beans.AllottedResource;
 import org.openecomp.mso.db.catalog.beans.AllottedResourceCustomization;
+import org.openecomp.mso.db.catalog.beans.ArRecipe;
 import org.openecomp.mso.db.catalog.beans.HeatEnvironment;
 import org.openecomp.mso.db.catalog.beans.HeatFiles;
 import org.openecomp.mso.db.catalog.beans.HeatNestedTemplate;
@@ -87,6 +88,7 @@ public class CatalogDatabase implements Closeable {
     private static final String VNF_COMPONENT_TYPE = "vnfComponentType";
     private static final String MODEL_ID = "modelId";
     private static final String MODEL_NAME = "modelName";
+    private static final String MODEL_VERSION = "version";
     private static final String TYPE = "type";
     private static final String MODEL_TYPE = "modelType";
     private static final String MODEL_VERSION_ID = "modelVersionId";
@@ -1129,6 +1131,8 @@ public class CatalogDatabase implements Closeable {
         return resultList.get(0);
     }
 
+    
+    
     /**
      * Return a VNF recipe that matches a given VNF_TYPE and ACTION
      *
@@ -1161,6 +1165,63 @@ public class CatalogDatabase implements Closeable {
         LOGGER.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "getVnfRecipe", null);
         return resultList.get(0);
     }
+    
+    /**
+     * Return a VNF recipe that matches a given ModelName and Modelversion and ACTION
+     *
+     * @param modelName
+     * @param modelVersion
+     * @param action
+     * @return VnfRecipe object or null if none found
+     */
+    public VnfRecipe getVnfRecipeByNameVersion(String modelName, String modelVersion, String action) {
+        StringBuilder hql = new StringBuilder("FROM VnfRecipe WHERE vnfType = :vnfType AND version= :version AND action = :action ");
+
+        long startTime = System.currentTimeMillis();
+        LOGGER.debug("Catalog database - get VNF recipe with name " + modelName
+                                      + " and action "
+                                      + action);
+
+        Query query = getSession().createQuery(hql.toString());
+        query.setParameter(VNF_TYPE, modelName);
+        query.setParameter(MODEL_VERSION, modelVersion);
+        query.setParameter(ACTION, action);
+
+        @SuppressWarnings("unchecked")
+        List <VnfRecipe> resultList = query.list();
+
+        if (resultList.isEmpty()) {
+            LOGGER.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully. VNF recipe not found", "CatalogDB", "getVnfRecipe", null);
+            return null;
+        }
+
+        Collections.sort(resultList, new MavenLikeVersioningComparator());
+        Collections.reverse(resultList);
+
+        LOGGER.recordMetricEvent(startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "getVnfRecipe", null);
+        return resultList.get(0);
+    }
+    
+    /**
+     * Return a Network recipe that matches a given MODEL_UUID and ACTION
+     *
+     * @param modelName
+     * @param action
+     * @return NetworkRecipe object or null if none found
+     */
+    public VnfRecipe getVnfRecipeByModuleUuid (String vnfModelUuid, String action) {
+        LOGGER.debug ("Catalog database - get vnf recipe with vnf resource model uuid " + vnfModelUuid
+                + " and action "
+                + action
+                );
+        VnfResource vnfResource = getVnfResourceByModelUuid(vnfModelUuid);
+        if(null == vnfResource){
+            return null;
+        }
+        
+        VnfRecipe recipe = this.getVnfRecipeByNameVersion(vnfResource.getModelName(), vnfResource.getModelVersion(), action);
+        return recipe;        
+    }
 
     /**
      * Return a VNF recipe that matches a given VF_MODULE_ID and ACTION
@@ -1577,7 +1638,7 @@ public class CatalogDatabase implements Closeable {
      * Return the VnfResourceCustomization object identified by the given modelCustomizationUuid 1707
      * Note that the corresponding VnfResource Object will be put in the VnfResourceCustomization bean
      *
-     * @param getVnfResourceCustomizationByModelVersionId
+     * @param modelVersionId
      * @return VnfResourceCustomization or null if not found
      */
     public VnfResourceCustomization getVnfResourceCustomizationByModelVersionId(String modelVersionId) {
@@ -1859,7 +1920,7 @@ public class CatalogDatabase implements Closeable {
      * Return the VnfResourceCustomization object identified by the given modelCustomizationUuid 1707
      * Note that the corresponding VnfResource Object will be put in the VnfResourceCustomization bean
      *
-     * @param modelCustomizationUuid
+     * @param modelUuid
      * @return VnfResourceCustomization or null if not found
      */
     public VnfResource getVnfResourceByModelUuid(String modelUuid) {
@@ -2767,7 +2828,7 @@ public class CatalogDatabase implements Closeable {
      * Return a VNF Module List that matches a given VNF_TYPE, VF_MODULE_MODEL_NAME,
      * ASDC_SERVICE_MODEL_VERSION, MODEL_VERSION, and ACTION
      *
-     * @param vnfModuleType
+     * @param vfModuleType
      * @parm modelCustomizationUuid
      * @param asdcServiceModelVersion
      * @param modelVersion
@@ -3305,7 +3366,9 @@ public class CatalogDatabase implements Closeable {
     /**
      * Return a ServiceToResourceCustomization object 
      * 
-     * @param vfModuleModelUuid, heatFilesArtifactUuid
+     * @param serviceModelUuid
+     * @param resourceModelCustomizationUuid
+     * @param modelType
      * @return VfModuleToHeatFiles or null if none found
      */ 
     public ServiceToResourceCustomization getServiceToResourceCustomization(String serviceModelUuid, String resourceModelCustomizationUuid, String modelType) {
@@ -3331,7 +3394,7 @@ public class CatalogDatabase implements Closeable {
     /**
      * Return a Map<String, HeatFiles> for returning the heat files associated with a vfModule 1707
      * 
-     * @param parentHeatTemplateId
+     * @param vfModuleModelUuid
      * @return Map<String,Object> or null if none found
      */ 
     public Map <String, HeatFiles> getHeatFilesForVfModule(String vfModuleModelUuid) {
@@ -3547,7 +3610,7 @@ public class CatalogDatabase implements Closeable {
     /**
      * Retrieves a Heat environment from DB based on its unique key. 1707
      *
-     * @param name the environment artifact name
+     * @param artifactUuid the environment artifact name
      * @param version the environment resource version
      * @return the heat environment from DB or null if not found
      */
@@ -3780,7 +3843,7 @@ public class CatalogDatabase implements Closeable {
     /**
      * Return the newest version of a specific Tosca CSAR Record resource (queried by Name).
      *
-     * @param ToscaCsar
+     * @param artifactChecksum
      * @return ToscaCsar object or null if none found
      */
     public ToscaCsar getToscaCsar (String artifactChecksum) {
@@ -4343,9 +4406,7 @@ public class CatalogDatabase implements Closeable {
     /**
      * Return a Network Resource that matches the Network Customization defined by given MODEL_CUSTOMIZATION_UUID
      *
-     * @param networkType
-     * @param action
-     * @param serviceType
+     * @param modelUUID
      * @return NetworkRecipe object or null if none found
      */
     public NetworkResource getNetworkResourceByModelUuid(String modelUUID) {
@@ -4425,6 +4486,26 @@ public class CatalogDatabase implements Closeable {
         }
     }
 
+    /**
+     * Return a Network recipe that matches a given MODEL_UUID and ACTION
+     *
+     * @param modelName
+     * @param action
+     * @return NetworkRecipe object or null if none found
+     */
+    public NetworkRecipe getNetworkRecipeByModuleUuid (String networkModelUuid, String action) {
+        LOGGER.debug ("Catalog database - get network recipe with network model uuid " + networkModelUuid
+                + " and action "
+                + action
+                );
+        NetworkResource networkResource = getNetworkResourceByModelUuid(networkModelUuid);
+        if(null == networkResource){
+            return null;
+        }
+        
+        NetworkRecipe recipe = getNetworkRecipeByNameVersion(networkResource.getModelName(), networkResource.getModelVersion(), action);
+        return recipe;        
+    }
     
     /**
      * Return a Network recipe that matches a given MODEL_NAME and ACTION
@@ -4464,12 +4545,50 @@ public class CatalogDatabase implements Closeable {
         }
     }
 
+    /**
+     * get network recipe by module name and version and action.
+     * <br>
+     * 
+     * @param modelName
+     * @param modelVersion
+     * @param action
+     * @return
+     * @since ONAP Beijing Release
+     */
+    public NetworkRecipe getNetworkRecipeByNameVersion(String modelName, String modelVersion, String action) {
+
+        long startTime = System.currentTimeMillis ();
+        LOGGER.debug ("Catalog database - get network recipe with network model name " + modelName
+                                      +"model version " + modelVersion + " and action " + action);
+
+        try {
+            String hql = "FROM NetworkRecipe WHERE modelName = :modelName AND version=:version AND action = :action";
+
+            Query query = getSession ().createQuery (hql);
+            query.setParameter (MODEL_NAME, modelName);
+            query.setParameter (MODEL_VERSION, modelVersion);
+            query.setParameter (ACTION, action);
+
+            @SuppressWarnings("unchecked")
+            List <NetworkRecipe> resultList = query.list ();
+
+            if (resultList.isEmpty ()) {
+                return null;
+            }
+
+            Collections.sort (resultList, new MavenLikeVersioningComparator ());
+            Collections.reverse (resultList);
+
+            return resultList.get (0);
+        } finally {
+            LOGGER.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "getNetworkRecipe", null);
+        }
+    }
+    
     /**
      * Return a Network Resource that matches the Network Customization defined by given MODEL_CUSTOMIZATION_UUID
      *
-     * @param networkType
-     * @param action
-     * @param serviceType
+     * @param modelCustomizationUuid
      * @return NetworkRecipe object or null if none found
      */
     public NetworkResource getNetworkResourceByModelCustUuid(String modelCustomizationUuid) {
@@ -4558,7 +4677,7 @@ public class CatalogDatabase implements Closeable {
     /**
      * Return a VnfComponents recipe that matches a given VF_MODULE_ID, VNF_COMPONENT_TYPE, ACTION
      *
-     * @param vfModuleId
+     * @param vfModuleModelUUId
      * @param vnfComponentType
      * @param action
      * @return VnfComponentsRecipe object or null if none found
@@ -4680,7 +4799,7 @@ public class CatalogDatabase implements Closeable {
     /**
      * Return a VfModule record that matches a given MODEL_NAME
      *
-     * @param modelName
+     * @param modelUUID
      * @return VfModule object or null if none found
      */
     public VfModule getVfModuleByModelUUID (String modelUUID) {
@@ -5009,4 +5128,67 @@ public class CatalogDatabase implements Closeable {
         }
         return theObjects;
     }
+    
+    
+    /**
+     * get allotted resource recipe by module name and version and action.
+     * <br>
+     * 
+     * @param modelName
+     * @param modelVersion
+     * @param action
+     * @return
+     * @since ONAP Beijing Release
+     */
+    public ArRecipe getArRecipeByNameVersion(String modelName, String modelVersion, String action) {
+
+        long startTime = System.currentTimeMillis ();
+        LOGGER.debug ("Catalog database - get ar recipe with ar model name " + modelName
+                                      +"model version " + modelVersion + " and action " + action);
+
+        try {
+            String hql = "FROM ArRecipe WHERE modelName = :modelName AND version=:version AND action = :action";
+
+            Query query = getSession ().createQuery (hql);
+            query.setParameter (MODEL_NAME, modelName);
+            query.setParameter (MODEL_VERSION, modelVersion);
+            query.setParameter (ACTION, action);
+
+            @SuppressWarnings("unchecked")
+            List <ArRecipe> resultList = query.list ();
+
+            if (resultList.isEmpty ()) {
+                return null;
+            }
+
+            Collections.sort (resultList, new MavenLikeVersioningComparator ());
+            Collections.reverse (resultList);
+
+            return resultList.get (0);
+        } finally {
+            LOGGER.recordMetricEvent (startTime, MsoLogger.StatusCode.COMPLETE, MsoLogger.ResponseCode.Suc, "Successfully", "CatalogDB", "getNetworkRecipe", null);
+        }
+    }
+    
+    /**
+     * Return a allotted resource recipe that matches a given MODEL_UUID and ACTION
+     *
+     * @param modelName
+     * @param action
+     * @return ArRecipe object or null if none found
+     */
+    public ArRecipe getArRecipeByModuleUuid (String ArModelUuid, String action) {
+        LOGGER.debug ("Catalog database - get ar recipe with ar model uuid " + ArModelUuid
+                + " and action "
+                + action
+                );
+        AllottedResource arResource = this.getAllottedResourceByModelUuid(ArModelUuid);
+        if(null == arResource){
+            return null;
+        }
+        
+        ArRecipe recipe = getArRecipeByNameVersion(arResource.getModelName(), arResource.getModelVersion(), action);
+        return recipe;        
+    }
+    
 }
index 7f8c3db..7ef5a4a 100644 (file)
@@ -89,7 +89,7 @@ public class ModelRecipe extends MavenLikeVersioning implements Serializable {
        }
 
        /**
-        * @param versionStr the versionStr to set
+        * @param schemaVersion the versionStr to set
         */
        public void setSchemaVersion(String schemaVersion) {
                this.schemaVersion = schemaVersion;
diff --git a/pom.xml b/pom.xml
index a1f9ca7..33c4abc 100644 (file)
--- a/pom.xml
+++ b/pom.xml
@@ -31,7 +31,7 @@
     <module>status-control</module>
     <module>bpmn</module>
     <module>packages</module>
-    <module>aria</module>
+    <!--module>aria</module-->
   </modules>
   <properties>
     <project.mso.base.folder>.</project.mso.base.folder>