diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfig.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfig.java
index 5d16a95..275241f 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfig.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfig.java
@@ -22,10 +22,10 @@
 
 import java.io.FileReader;
 import java.io.IOException;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Map.Entry;
-
 import java.util.Optional;
 import org.codehaus.jackson.annotate.JsonProperty;
 import org.codehaus.jackson.map.DeserializationConfig;
@@ -78,8 +78,8 @@
     /**
      * Get a map of all cloud sites that have been loaded.
      */
-    public synchronized Map<String, CloudSite> getCloudSites() {
-        return cloudSites;
+    public Map<String, CloudSite> getCloudSites() {
+        return Collections.unmodifiableMap(cloudSites);
     }
 
     /**
diff --git a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfigFactory.java b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfigFactory.java
index 445c135..144506c 100644
--- a/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfigFactory.java
+++ b/adapters/mso-adapter-utils/src/main/java/org/openecomp/mso/cloud/CloudConfigFactory.java
@@ -20,12 +20,10 @@
 
 package org.openecomp.mso.cloud;
 
-
 import java.io.IOException;
 import java.io.Serializable;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.locks.ReentrantReadWriteLock;
-
 import javax.ejb.ConcurrencyManagement;
 import javax.ejb.ConcurrencyManagementType;
 import javax.ejb.LocalBean;
@@ -36,22 +34,17 @@
 import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.Response;
-
 import org.codehaus.jackson.JsonParseException;
 import org.codehaus.jackson.map.JsonMappingException;
-
+import org.openecomp.mso.logger.MessageEnum;
 import org.openecomp.mso.logger.MsoLogger;
 import org.openecomp.mso.openstack.exceptions.MsoCloudIdentityNotFound;
 import org.openecomp.mso.openstack.utils.MsoHeatUtils;
 import org.openecomp.mso.openstack.utils.MsoKeystoneUtils;
 import org.openecomp.mso.openstack.utils.MsoNeutronUtils;
-import org.openecomp.mso.properties.MsoPropertiesException;
-import org.openecomp.mso.logger.MessageEnum;
 
 /**
  * This class returns a cloud Config instances
- *
- *
  */
 
 @Singleton(name = "CloudConfigFactory")
@@ -62,13 +55,13 @@
 
     private static final long serialVersionUID = 2956662716453261085L;
 
-    private static CloudConfig cloudConfigCache = new CloudConfig ();
+    private CloudConfig cloudConfigCache = new CloudConfig();
 
     protected static String prefixMsoPropertiesPath = System.getProperty ("mso.config.path");
 
     private static final MsoLogger LOGGER = MsoLogger.getMsoLogger (MsoLogger.Catalog.RA);
 
-    private static int refreshTimer;
+    private int refreshTimer;
 
     private static final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock ();
 
@@ -79,7 +72,6 @@
     }
 
     public void initializeCloudConfig (String filePath, int refreshTimer) throws MsoCloudIdentityNotFound {
-
         rwl.writeLock ().lock ();
         try {
             cloudConfigCache.loadCloudConfig (prefixMsoPropertiesPath + filePath, refreshTimer);
@@ -95,18 +87,6 @@
         }
     }
 
-    public void changeMsoPropertiesFilePath (String newMsoPropPath) {
-        rwl.writeLock ().lock ();
-        try {
-            CloudConfigFactory.cloudConfigCache.configFilePath = prefixMsoPropertiesPath + newMsoPropPath;
-        } finally {
-            rwl.writeLock ().unlock ();
-        }
-    }
-
-    public CloudConfigFactory () {
-    }
-
     public CloudConfig getCloudConfig () {
         rwl.readLock ().lock ();
         try {
@@ -127,7 +107,7 @@
      * @return true if Properties have been reloaded, false otherwise
      */
     @Schedule(minute = "*/1", hour = "*", persistent = false)
-    public static void reloadCloudConfig () {
+    public void reloadCloudConfig () {
 
         try {
             if (!rwl.writeLock ().tryLock () && !rwl.writeLock ().tryLock (30L, TimeUnit.SECONDS)) {
@@ -180,23 +160,17 @@
     @Path("/showConfig")
     @Produces("text/plain")
     public Response showCloudConfig () {
-        CloudConfig cloudConfig = this.getCloudConfig ();
-        if (cloudConfig != null) {
-            StringBuffer response = new StringBuffer ();
-            response.append ("Cloud Sites:\n");
-            for (CloudSite site : cloudConfig.getCloudSites ().values ()) {
-                response.append(site.toString()).append("\n");
-            }
-    
-            response.append ("\n\nCloud Identity Services:\n");
-            for (CloudIdentity identity : cloudConfig.getIdentityServices ().values ()) {
-                response.append(identity.toString()).append("\n");
-            }
-    
-            return Response.status (200).entity (response).build ();
-        } else {
-            return Response.status (500).entity ("Cloud Config has not been loaded properly, this could be due to a bad JSON structure (Check the logs for additional details)").build ();
+        CloudConfig cloudConfig = this.getCloudConfig();
+        StringBuffer response = new StringBuffer();
+        response.append("Cloud Sites:\n");
+        for (CloudSite site : cloudConfig.getCloudSites().values()) {
+            response.append(site.toString()).append("\n");
         }
+        response.append("\n\nCloud Identity Services:\n");
+        for (CloudIdentity identity : cloudConfig.getIdentityServices().values()) {
+            response.append(identity.toString()).append("\n");
+        }
+        return Response.status(200).entity(response).build();
     }
 
     @GET
@@ -207,8 +181,7 @@
         MsoKeystoneUtils.adminCacheReset ();
         MsoHeatUtils.heatCacheReset ();
         MsoNeutronUtils.neutronCacheReset ();
-
-        String response = "Client caches reset.  All entries removed.";
+        String response = "Client caches reset. All entries removed.";
         return Response.status (200).entity (response).build ();
     }
 
@@ -220,8 +193,7 @@
         MsoKeystoneUtils.adminCacheCleanup ();
         MsoHeatUtils.heatCacheCleanup ();
         MsoNeutronUtils.neutronCacheCleanup ();
-
-        String response = "Client caches cleaned up.  All expired entries removed";
+        String response = "Client caches cleaned up. All expired entries removed.";
         return Response.status (200).entity (response).build ();
     }
 
diff --git a/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigFactoryTest.java b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigFactoryTest.java
new file mode 100644
index 0000000..fe768b5
--- /dev/null
+++ b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigFactoryTest.java
@@ -0,0 +1,164 @@
+/*-
+ * ============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.cloud;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.HashMap;
+import java.util.Map;
+import javax.ws.rs.core.Response;
+import org.junit.Before;
+import org.junit.Test;
+import org.openecomp.mso.openstack.exceptions.MsoCloudIdentityNotFound;
+
+public class CloudConfigFactoryTest {
+
+    private static final String CLOUD_CONFIG_FIELD_NAME = "cloudConfigCache";
+    private static final int REFRESH_TIMER_VALUE = 1;
+
+    private CloudConfigFactory testedObject;
+    private CloudConfig cloudConfigMock;
+
+    @Before
+    public void init() throws NoSuchFieldException, IllegalAccessException {
+        cloudConfigMock = mock(CloudConfig.class);
+        testedObject = new CloudConfigFactory();
+        setCloudConfig();
+    }
+
+    @Test
+    public void initializeCloudConfigSuccessful() throws MsoCloudIdentityNotFound, IOException {
+        ClassLoader classLoader = CloudConfigFactoryTest.class.getClassLoader();
+        String cloudConfigJsonFilePath = classLoader.getResource("cloud_config.json").getPath();
+        testedObject.initializeCloudConfig(cloudConfigJsonFilePath, REFRESH_TIMER_VALUE);
+        verify(cloudConfigMock).loadCloudConfig(cloudConfigJsonFilePath, REFRESH_TIMER_VALUE);
+    }
+
+    @Test
+    public void getValidCloudConfig() {
+        when(cloudConfigMock.isValidCloudConfig()).thenReturn(true);
+
+        testedObject.getCloudConfig();
+
+        verify(cloudConfigMock).clone();
+    }
+
+    @Test
+    public void getNotValidCloudConfig() {
+        when(cloudConfigMock.isValidCloudConfig()).thenReturn(false);
+
+        CloudConfig result = testedObject.getCloudConfig();
+
+        assertThat(result).isNotNull();
+        assertThat(result.getCloudSites()).isEmpty();
+        assertThat(result.getIdentityServices()).isEmpty();
+    }
+
+    @Test
+    public void reload_CloudConfigValid() throws IOException, MsoCloudIdentityNotFound {
+        when(cloudConfigMock.isValidCloudConfig()).thenReturn(true);
+
+        testedObject.reloadCloudConfig();
+
+        verify(cloudConfigMock).clone();
+        verify(cloudConfigMock).reloadPropertiesFile();
+    }
+
+    @Test
+    public void reload_CloudConfigNotValid()
+            throws IOException, MsoCloudIdentityNotFound {
+        when(cloudConfigMock.isValidCloudConfig()).thenReturn(false);
+
+        testedObject.reloadCloudConfig();
+
+        verify(cloudConfigMock).reloadPropertiesFile();
+    }
+
+    @Test
+    public void showCloudConfig() throws NoSuchFieldException, IllegalAccessException {
+        when(cloudConfigMock.isValidCloudConfig()).thenReturn(true);
+        when(cloudConfigMock.clone()).thenReturn(createCloudConfig("IdTest576", "identityTest456"));
+        Response response = testedObject.showCloudConfig();
+
+        assertThat(response.getStatus()).isEqualTo(200);
+        assertThat(response.getEntity().toString()).containsPattern("CloudSite:.*IdTest576")
+                .containsPattern("Cloud Identity Service:.*identityTest456");
+
+    }
+
+    @Test
+    public void resetClientCaches_Successful()  {
+        Response response = testedObject.resetClientCaches();
+        assertThat(response.getStatus()).isEqualTo(200);
+        assertThat(response.getEntity().toString()).isEqualTo("Client caches reset. All entries removed.");
+    }
+
+    @Test
+    public void cleanUpClientCache_Successful()  {
+        Response response = testedObject.cleanupClientCaches();
+        assertThat(response.getStatus()).isEqualTo(200);
+        assertThat(response.getEntity().toString()).isEqualTo("Client caches cleaned up. All expired entries removed.");
+    }
+
+    @Test
+    public void encryptPassword_Successful()  {
+        Response response = testedObject.encryptPassword("passTest123");
+        String expectedEncryptedPassword = CloudIdentity.encryptPassword("passTest123");
+        assertThat(response.getStatus()).isEqualTo(200);
+        assertThat(response.getEntity().toString()).isEqualTo("Encrypted Password = "+expectedEncryptedPassword);
+    }
+
+    private CloudConfig createCloudConfig(String cloudSiteId, String identityServiceId)
+            throws NoSuchFieldException, IllegalAccessException {
+        CloudConfig cloudConfig = new CloudConfig();
+        Map<String, CloudSite> cloudSiteMap = new HashMap<>();
+        CloudSite cs = new CloudSite();
+        cs.setId(cloudSiteId);
+        cloudSiteMap.put("keyTest", cs);
+        Field cloudSitesField = cloudConfig.getClass().getDeclaredField("cloudSites");
+        cloudSitesField.setAccessible(true);
+        cloudSitesField.set(cloudConfig, cloudSiteMap);
+
+        Map<String, CloudIdentity> identityServicesMap = new HashMap<>();
+        CloudIdentity cloudIdentity = new CloudIdentity();
+        cloudIdentity.setId(identityServiceId);
+        identityServicesMap.put("identityKey", cloudIdentity);
+
+        Field identityServicesField = cloudConfig.getClass().getDeclaredField("identityServices");
+        identityServicesField.setAccessible(true);
+        identityServicesField.set(cloudConfig, identityServicesMap);
+
+        return cloudConfig;
+    }
+
+    private void setCloudConfig()
+            throws NoSuchFieldException, IllegalAccessException {
+        Field field = testedObject.getClass().getDeclaredField(CLOUD_CONFIG_FIELD_NAME);
+        field.setAccessible(true);
+        field.set(testedObject, cloudConfigMock);
+    }
+
+}
diff --git a/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigTest.java b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigTest.java
index 1c2501e..5b6be03 100644
--- a/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigTest.java
+++ b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudConfigTest.java
@@ -20,161 +20,221 @@
 
 package org.openecomp.mso.cloud;
 
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
 import static org.junit.Assert.assertTrue;
 
-import java.util.Optional;
-import org.junit.Assert;
-import org.junit.BeforeClass;
-import org.junit.Test;
+import java.io.IOException;
+import java.lang.reflect.Field;
+import java.util.HashMap;
 import java.util.Map;
+import java.util.Optional;
+import org.junit.Before;
+import org.junit.Test;
 import org.openecomp.mso.openstack.exceptions.MsoCloudIdentityNotFound;
 
 public class CloudConfigTest {
 
-    private static String cloudConfigJsonFilePath;
-    private static String cloudDefaultConfigJsonFilePath;
-    private static String cloudConfigInvalidJsonFilePath;
+    private static final int NUMBER_OF_CLOUD_SITES_IN_JSON_FILE = 4;
+    private static final int NUMBER_OF_IDENTITY_SERVICES_IN_JSON_FILE = 4;
+    private static final String CLOUD_SITES_FIELD_NAME = "cloudSites";
+    private static final String IDENTITY_SERVICE_FIELD_NAME = "identityServices";
+    private static final String CLOUD_SITE_DEFAULT = "default";
+    private static final String CLOUD_CONFIG_JSON_FILE_NAME = "cloud_config.json";
+    private static final String CLOUD_CONFIG_INVALID_JSON_FILE_NAME = "cloud_config_bad.json";
 
-    @BeforeClass
-    public static void preparePaths() {
-        ClassLoader classLoader = CloudConfigTest.class.getClassLoader();
-        cloudConfigJsonFilePath = classLoader.getResource("cloud_config.json").getPath();
-        cloudDefaultConfigJsonFilePath = classLoader.getResource("cloud_default_config.json").getPath();
-        cloudConfigInvalidJsonFilePath = classLoader.getResource("cloud_config_bad.json").getPath();
-    }
+    private CloudConfig testedObject;
+    private CloudSite cloudSite;
+    private CloudSite cloudSiteDefault;
 
-    private CloudConfig createTestObject(String jsonFilePath) throws MsoCloudIdentityNotFound {
-        CloudConfigFactory cloudConfigFactory = new CloudConfigFactory();
-        cloudConfigFactory.initializeCloudConfig(jsonFilePath, 1);
-        return cloudConfigFactory.getCloudConfig();
+    @Before
+    public void init() {
+        testedObject = new CloudConfig();
     }
 
     @Test
-    public void testGetCloudSites() throws MsoCloudIdentityNotFound {
-        CloudConfig con = createTestObject(cloudConfigJsonFilePath);
-        Map<String, CloudSite> siteMap = con.getCloudSites();
-        assertNotNull(siteMap);
+    public void cloudSite_returnEmptyOptionalIfIdIsNull() {
+        Optional<CloudSite> cloudConfigOpt = new CloudConfig().getCloudSite(null);
+        assertThat(cloudConfigOpt).isEmpty();
+    }
 
+    @Test
+    public void cloudSiteIsGotById_when_IdFound() throws NoSuchFieldException, IllegalAccessException {
+        setCloudSitesMap();
+        Optional<CloudSite> cloudSiteOpt = testedObject.getCloudSite(cloudSite.getId());
+        assertThat(cloudSiteOpt).isPresent();
+        assertThat(cloudSiteOpt.get().getId()).isEqualTo(cloudSite.getId());
+        assertThat(cloudSiteOpt.get().getClli()).isEqualTo(cloudSite.getClli());
+    }
+
+    @Test
+    public void cloudSiteIsGotByClli_when_IdNotFound() throws NoSuchFieldException, IllegalAccessException {
+        setCloudSitesMap();
+        Optional<CloudSite> cloudSiteOpt = testedObject.getCloudSite(cloudSite.getClli());
+        assertTrue(cloudSiteOpt.isPresent());
+        assertThat(cloudSiteOpt.get().getId()).isEqualTo(cloudSite.getId());
+        assertThat(cloudSiteOpt.get().getClli()).isEqualTo(cloudSite.getClli());
+    }
+
+    @Test
+    public void cloudSiteIsGotByDefault_when_IdAndClliNotFound() throws NoSuchFieldException, IllegalAccessException {
+        setCloudSitesMap();
+        Optional<CloudSite> cloudSiteOpt = testedObject.getCloudSite("not_existing_id");
+        assertTrue(cloudSiteOpt.isPresent());
+        assertThat(cloudSiteOpt.get().getId()).isEqualTo("not_existing_id");
+        assertThat(cloudSiteOpt.get().getClli()).isEqualTo(cloudSiteDefault.getClli());
+    }
+
+    @Test
+    public void cloudSiteNotFound_returnNull() {
+        assertThat(testedObject.getCloudSite("not_existing_id")).isEmpty();
+    }
+
+    @Test
+    public void identityServiceFoundById() throws NoSuchFieldException, IllegalAccessException {
+        CloudIdentity cloudIdentity = createCloudIdentity();
+        setIdentityServiceMap();
+        CloudIdentity cloudIdentityResult = testedObject.getIdentityService(cloudIdentity.getId());
+
+        assertThat(cloudIdentityResult).isNotNull();
+        assertThat(cloudIdentityResult.getId()).isEqualTo(cloudIdentity.getId());
+        assertThat(cloudIdentityResult.getMsoId()).isEqualTo(cloudIdentity.getMsoId());
+    }
+
+    @Test
+    public void defaultClodeSiteNotFound_returnNull() {
+        assertThat(testedObject.getIdentityService("not_existing_id")).isNull();
+    }
+
+    @Test
+    public void loadCloudConfigSuccessful() throws IOException, MsoCloudIdentityNotFound {
+        ClassLoader classLoader = CloudConfigTest.class.getClassLoader();
+        String cloudConfigJsonFilePath = classLoader.getResource(CLOUD_CONFIG_JSON_FILE_NAME).getPath();
+        testedObject.loadCloudConfig(cloudConfigJsonFilePath, 1);
+        assertThat(testedObject.isValidCloudConfig()).isTrue();
+        checkCloudSites();
+        checkIdentityServices();
+    }
+
+    @Test
+    public void loadCloudConfig_cloudIdentityNotFound() {
+        ClassLoader classLoader = CloudConfigTest.class.getClassLoader();
+        String cloudConfigInvalidJsonFilePath = classLoader.getResource(CLOUD_CONFIG_INVALID_JSON_FILE_NAME).getPath();
+        assertThatThrownBy(() -> testedObject.loadCloudConfig(cloudConfigInvalidJsonFilePath, 1))
+                .isInstanceOf(MsoCloudIdentityNotFound.class)
+                .hasMessage("Cloud Identity [MT Cloud site refers to a non-existing identity service: "
+                        + "MT_KEYSTONE_NOT_EXISTING] not found");
+        assertThat(testedObject.isValidCloudConfig()).isFalse();
+    }
+
+    private void checkCloudSites() {
+        Map<String, CloudSite> siteMap = testedObject.getCloudSites();
+        assertThat(siteMap).isNotEmpty().hasSize(NUMBER_OF_CLOUD_SITES_IN_JSON_FILE);
         CloudSite site1 = siteMap.get("MT");
         CloudSite site2 = siteMap.get("DAN");
         CloudSite site3 = siteMap.get("MTINJVCC101");
         CloudSite site4 = siteMap.get("MTSNJA4LCP1");
 
-        assertEquals("regionOne", site1.getRegionId());
-        assertEquals("MT_KEYSTONE", site1.getIdentityServiceId());
-        assertEquals("RegionOne", site2.getRegionId());
-        assertEquals("DAN_KEYSTONE", site2.getIdentityServiceId());
-        assertEquals("regionTwo", site3.getRegionId());
-        assertEquals("MTINJVCC101_DCP", site3.getIdentityServiceId());
-        assertEquals("mtsnjlcp1", site4.getRegionId());
-        assertEquals("MTSNJA3DCP1", site4.getIdentityServiceId());
+        assertThat(site1.getId()).isEqualTo("MT");
+        assertThat(site1.getRegionId()).isEqualTo("regionOne");
+        assertThat(site1.getIdentityServiceId()).isEqualTo("MT_KEYSTONE");
+        assertThat(site1.getIdentityService()).isNotNull();
+        assertThat(site1.getIdentityService().getId()).isEqualTo(site1.getIdentityServiceId());
+
+        assertThat(site2.getId()).isEqualTo("DAN");
+        assertThat(site2.getRegionId()).isEqualTo("RegionOne");
+        assertThat(site2.getIdentityServiceId()).isEqualTo("DAN_KEYSTONE");
+        assertThat(site2.getIdentityService()).isNotNull();
+        assertThat(site2.getIdentityService().getId()).isEqualTo(site2.getIdentityServiceId());
+
+        assertThat(site3.getId()).isEqualTo("MTINJVCC101");
+        assertThat(site3.getRegionId()).isEqualTo("regionTwo");
+        assertThat(site3.getIdentityServiceId()).isEqualTo("MTINJVCC101_DCP");
+        assertThat(site3.getIdentityService()).isNotNull();
+        assertThat(site3.getIdentityService().getId()).isEqualTo(site3.getIdentityServiceId());
+
+        assertThat(site4.getId()).isEqualTo("MTSNJA4LCP1");
+        assertThat(site4.getRegionId()).isEqualTo("mtsnjlcp1");
+        assertThat(site4.getIdentityServiceId()).isEqualTo("MTSNJA3DCP1");
+        assertThat(site4.getIdentityService()).isNotNull();
+        assertThat(site4.getIdentityService().getId()).isEqualTo(site4.getIdentityServiceId());
     }
 
-    @Test
-    public void testGetIdentityServices() throws MsoCloudIdentityNotFound {
-        CloudConfig con = createTestObject(cloudConfigJsonFilePath);
-        Map<String, CloudIdentity> identityMap = con.getIdentityServices();
-        assertNotNull(identityMap);
+    private void checkIdentityServices() {
+        Map<String, CloudIdentity> identityMap = testedObject.getIdentityServices();
+        assertThat(identityMap).isNotEmpty().hasSize(NUMBER_OF_IDENTITY_SERVICES_IN_JSON_FILE);
 
         CloudIdentity identity1 = identityMap.get("MT_KEYSTONE");
         CloudIdentity identity2 = identityMap.get("DAN_KEYSTONE");
         CloudIdentity identity3 = identityMap.get("MTINJVCC101_DCP");
         CloudIdentity identity4 = identityMap.get("MTSNJA3DCP1");
 
-        assertEquals("john", identity1.getMsoId());
-        assertEquals("changeme", identity1.getMsoPass());
-        assertEquals("admin", identity1.getAdminTenant());
-        assertEquals("_member_", identity1.getMemberRole());
-        assertFalse(identity1.hasTenantMetadata());
+        assertThat(identity1.getMsoId()).isEqualTo("john");
+        assertThat(identity1.getMsoPass()).isEqualTo("changeme");
+        assertThat(identity1.getAdminTenant()).isEqualTo("admin");
+        assertThat(identity1.getMemberRole()).isEqualTo("_member_");
+        assertThat(identity1.hasTenantMetadata()).isFalse();
 
-        assertEquals("mockId", identity2.getMsoId());
-        assertEquals("stack123", identity2.getMsoPass());
-        assertEquals("service", identity2.getAdminTenant());
-        assertEquals("_member_", identity2.getMemberRole());
-        assertFalse(identity2.hasTenantMetadata());
+        assertThat(identity2.getMsoId()).isEqualTo("mockId");
+        assertThat(identity2.getMsoPass()).isEqualTo("stack123");
+        assertThat(identity2.getAdminTenant()).isEqualTo("service");
+        assertThat(identity2.getMemberRole()).isEqualTo("_member_");
+        assertThat(identity2.hasTenantMetadata()).isFalse();
 
-        assertEquals("mockIdToo", identity3.getMsoId());
-        assertEquals("AICG@mm@@2015", identity3.getMsoPass());
-        assertEquals("service", identity3.getAdminTenant());
-        assertEquals("admin", identity3.getMemberRole());
-        assertTrue(identity3.hasTenantMetadata());
+        assertThat(identity3.getMsoId()).isEqualTo("mockIdToo");
+        assertThat(identity3.getMsoPass()).isEqualTo("AICG@mm@@2015");
+        assertThat(identity3.getAdminTenant()).isEqualTo("service");
+        assertThat(identity3.getMemberRole()).isEqualTo("admin");
+        assertThat(identity3.hasTenantMetadata()).isTrue();
 
-        assertEquals("mockIdToo", identity4.getMsoId());
-        assertEquals("2315QRS2015srq", identity4.getMsoPass());
-        assertEquals("service", identity4.getAdminTenant());
-        assertEquals("admin", identity4.getMemberRole());
-        assertTrue(identity4.hasTenantMetadata());
+        assertThat(identity4.getMsoId()).isEqualTo("mockIdToo");
+        assertThat(identity4.getMsoPass()).isEqualTo("2315QRS2015srq");
+        assertThat(identity4.getAdminTenant()).isEqualTo("service");
+        assertThat(identity4.getMemberRole()).isEqualTo("admin");
+        assertThat(identity4.hasTenantMetadata()).isTrue();
     }
 
     @Test
-    public void cloudSiteIsGotById_when_IdFound() throws MsoCloudIdentityNotFound {
-        CloudConfig con = createTestObject(cloudConfigJsonFilePath);
-        Optional<CloudSite> cloudSite = con.getCloudSite("MT");
-        assertTrue(cloudSite.isPresent());
-        assertEquals("regionOne", cloudSite.get().getRegionId());
-        assertEquals("MT_KEYSTONE", cloudSite.get().getIdentityServiceId());
+    public void cloneSuccessful() throws NoSuchFieldException, IllegalAccessException {
+        setCloudSitesMap();
+        setIdentityServiceMap();
+        assertThat(testedObject.clone()).isEqualTo(testedObject);
     }
 
-    @Test
-    public void cloudSiteIsGotByClli_when_IdNotFound() throws MsoCloudIdentityNotFound {
-        CloudConfig con = createTestObject(cloudConfigJsonFilePath);
-        Optional<CloudSite> cloudSite = con.getCloudSite("CS_clli");
-        assertTrue(cloudSite.isPresent());
-        assertEquals("clliRegion", cloudSite.get().getRegionId());
-        assertEquals("CS_clli", cloudSite.get().getClli());
-        assertEquals("CS_service", cloudSite.get().getIdentityServiceId());
+    private void setCloudSitesMap() throws NoSuchFieldException, IllegalAccessException {
+        Field field = testedObject.getClass().getDeclaredField(CLOUD_SITES_FIELD_NAME);
+        field.setAccessible(true);
+        Map<String, CloudSite> cloudSites = new HashMap<>();
+        cloudSite = createCloudSite("idTest1", "clliTest1");
+        cloudSiteDefault = createCloudSite(CLOUD_SITE_DEFAULT, "clliTest2");
+        cloudSites.put(cloudSite.getId(), cloudSite);
+        cloudSites.put(cloudSiteDefault.getId(), cloudSiteDefault);
+        field.set(testedObject, cloudSites);
     }
 
-    @Test
-    public void cloudSiteIsGotByDefault_when_IdAndClliNotFound() throws MsoCloudIdentityNotFound {
-        CloudConfig con = createTestObject(cloudDefaultConfigJsonFilePath);
-        Optional<CloudSite> cloudSite = con.getCloudSite("not_existing_id");
-        assertTrue(cloudSite.isPresent());
-        assertEquals("not_existing_id", cloudSite.get().getId());
-        assertEquals("not_existing_id", cloudSite.get().getRegionId());
+    private void setIdentityServiceMap() throws NoSuchFieldException, IllegalAccessException {
+        Field field = testedObject.getClass().getDeclaredField(IDENTITY_SERVICE_FIELD_NAME);
+        field.setAccessible(true);
+
+        Map<String, CloudIdentity> cloudIdentityMap = new HashMap<>();
+        CloudIdentity cloudIdentity = createCloudIdentity();
+        cloudIdentityMap.put(cloudIdentity.getId(), cloudIdentity);
+        field.set(testedObject, cloudIdentityMap);
     }
 
-    @Test
-    public void testGetIdentityService() throws MsoCloudIdentityNotFound {
-        CloudConfig con = createTestObject(cloudConfigJsonFilePath);
-        CloudIdentity identity1 = con.getIdentityService("MT_KEYSTONE");
-        assertNotNull(identity1);
-        assertEquals("john", identity1.getMsoId());
-        assertEquals("changeme", identity1.getMsoPass());
-        assertEquals("admin", identity1.getAdminTenant());
-        assertEquals("_member_", identity1.getMemberRole());
-        assertFalse(identity1.hasTenantMetadata());
-
-        CloudIdentity identity2 = con.getIdentityService("Test");
-        assertNull(identity2);
+    private CloudIdentity createCloudIdentity() {
+        CloudIdentity cloudIdentity = new CloudIdentity();
+        cloudIdentity.setId("identityTestId");
+        cloudIdentity.setMsoId("msoTestId");
+        return cloudIdentity;
     }
 
-    @Test(expected = MsoCloudIdentityNotFound.class)
-    public void testLoadWithWrongFile() throws MsoCloudIdentityNotFound {
-        createTestObject(cloudConfigInvalidJsonFilePath);
+    private CloudSite createCloudSite(String id, String clli) {
+        CloudSite cloudSite = new CloudSite();
+        cloudSite.setId(id);
+        cloudSite.setClli(clli);
+        cloudSite.setAic_version("2.5");
+        cloudSite.setIdentityService(createCloudIdentity());
+        return cloudSite;
     }
-
-    @Test
-    public void testReloadWithWrongFile() {
-        CloudConfigFactory cloudConfigFactory = new CloudConfigFactory();
-        try {
-            cloudConfigFactory.initializeCloudConfig(cloudConfigInvalidJsonFilePath, 1);
-            Assert.fail("MsoCloudIdentityNotFound was expected");
-        } catch (MsoCloudIdentityNotFound e) {
-
-        }
-        assertTrue("Should be an empty CloudConfig", cloudConfigFactory.getCloudConfig().getCloudSites().isEmpty());
-        assertTrue("Should be an empty CloudConfig",
-                cloudConfigFactory.getCloudConfig().getIdentityServices().isEmpty());
-        // Now reload the right config
-        cloudConfigFactory.changeMsoPropertiesFilePath(cloudConfigJsonFilePath);
-        cloudConfigFactory.reloadCloudConfig();
-        assertTrue("Flag valid Config should be true now that the cloud_config is correct",
-                cloudConfigFactory.getCloudConfig().isValidCloudConfig());
-    }
-
 }
diff --git a/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudSiteTest.java b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudSiteTest.java
new file mode 100644
index 0000000..4c5ceb2
--- /dev/null
+++ b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/cloud/CloudSiteTest.java
@@ -0,0 +1,67 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.cloud;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+public class CloudSiteTest {
+
+    @Mock
+    CloudIdentity ci= new CloudIdentity();
+    
+    @InjectMocks
+    CloudSite cs = new CloudSite();
+
+    
+@Before
+public void init(){
+    MockitoAnnotations.initMocks(this);
+ }
+ @Test
+    public void testCloudSite() {
+        cs.setAic_version("aic_version");
+        cs.setClli("clli");
+        cs.setId("id");
+        cs.setIdentityService(ci);
+        cs.setRegionId("regionId");
+        assert(cs.getAic_version().equals("aic_version"));
+        assert(cs.getClli().equals("clli"));
+        assert(cs.getId().equals("id"));
+        assert(cs.getIdentityService().equals(ci));
+        assert(cs.getRegionId().equals("regionId"));
+    }
+  @Test
+    public void testtoStringmethod(){
+        assert(cs.toString()!=null);
+    }
+  @Test
+    public void testhashCodemethod(){
+        assert(cs.hashCode()!=0);
+    }
+    @Test
+    public void testclone(){
+        assert(cs.clone()!=null);
+    }
+}
diff --git a/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/openstack/beans/MsoTenantTest.java b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/openstack/beans/MsoTenantTest.java
new file mode 100644
index 0000000..a1de54e
--- /dev/null
+++ b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/openstack/beans/MsoTenantTest.java
@@ -0,0 +1,42 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.openstack.beans;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Test;
+
+public class MsoTenantTest {
+ MsoTenant ms = new MsoTenant();
+    
+    @Test
+    public void test() {
+       Map<String, String> map = new HashMap<>();
+       map.put("id","name");
+       ms.setTenantId("tenantId");
+       ms.setTenantName("tenantName");
+       ms.setMetadata(map);
+       assert(ms.getMetadata().equals(map));
+       assert(ms.getTenantId().equals("tenantId"));
+       assert(ms.getTenantName().equals("tenantName"));
+    }
+}
diff --git a/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/openstack/beans/NetworkRollbackTest.java b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/openstack/beans/NetworkRollbackTest.java
new file mode 100644
index 0000000..d70c01d
--- /dev/null
+++ b/adapters/mso-adapter-utils/src/test/java/org/openecomp/mso/openstack/beans/NetworkRollbackTest.java
@@ -0,0 +1,69 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.openstack.beans;
+
+import static org.junit.Assert.*;
+import java.util.ArrayList;
+import java.util.List;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.openecomp.mso.entity.MsoRequest;
+
+public class NetworkRollbackTest {
+    @Mock
+    MsoRequest ms = new MsoRequest();
+
+    @InjectMocks
+    NetworkRollback nr = new NetworkRollback();
+ 
+    @Test
+    public void test() {
+        List<Integer> vlans = new ArrayList();
+       vlans.add(1);
+       vlans.add(2); 
+        nr.setCloudId("cloudId");
+        nr.setModelCustomizationUuid("modelCustomizationUuid");
+        nr.setNetworkId("networkId");
+        nr.setNetworkName("networkName");
+        nr.setNetworkStackId("networkStackId");
+        nr.setNetworkType("networkType");;
+        nr.setNeutronNetworkId("neutronNetworkId");
+        nr.setPhysicalNetwork("physicalNetwork");
+        nr.setTenantId("tenantId");
+        nr.setNetworkCreated(false);
+        nr.setVlans(vlans);
+        nr.setMsoRequest(ms);
+        assert(nr.getCloudId().equals("cloudId"));
+        assert(nr.getModelCustomizationUuid().equals("modelCustomizationUuid"));
+        assert(nr.getNetworkId().equals("networkId"));
+        assert(nr.getNetworkName().equals("networkName"));
+        assert(nr.getNetworkStackId().equals("networkStackId"));
+        assert(nr.getNeutronNetworkId().equals("neutronNetworkId"));
+        assert(nr.getPhysicalNetwork().equals("physicalNetwork"));
+        assert(nr.getNetworkType().equals("networkType"));
+        assert(nr.getTenantId().equals("tenantId"));
+        assert(nr.getMsoRequest().equals(ms));
+        assertFalse(nr.getNetworkCreated());
+        assert(nr.getVlans().equals(vlans));
+        assert(nr.toString()!=null);    
+    }
+}
diff --git a/adapters/mso-adapter-utils/src/test/resources/cloud_config.json b/adapters/mso-adapter-utils/src/test/resources/cloud_config.json
index ff24633..ee3532f 100644
--- a/adapters/mso-adapter-utils/src/test/resources/cloud_config.json
+++ b/adapters/mso-adapter-utils/src/test/resources/cloud_config.json
@@ -44,8 +44,7 @@
 			"tenant_metadata": true,
 			"identity_server_type": "KEYSTONE",
 			"identity_authentication_type": "USERNAME_PASSWORD"
-		},
-		"CS_service": {}
+		}
 
 	},
 	"cloud_sites":
@@ -77,14 +76,8 @@
 			"clli": "MTSNJA4LCP1",
 			"aic_version": "2.5",
 			"identity_service_id": "MTSNJA3DCP1"
-		},
-		"CS":
-		{
-			"region_id": "clliRegion",
-			"clli": "CS_clli",
-			"aic_version": "2.5",
-			"identity_service_id": "CS_service"
 		}
+
 	}
 }
 }
diff --git a/adapters/mso-adapter-utils/src/test/resources/cloud_default_config.json b/adapters/mso-adapter-utils/src/test/resources/cloud_default_config.json
deleted file mode 100644
index 35d18e9..0000000
--- a/adapters/mso-adapter-utils/src/test/resources/cloud_default_config.json
+++ /dev/null
@@ -1,13 +0,0 @@
-{
-  "cloud_config": {
-    "identity_services": {
-      "default_service": {}
-    },
-    "cloud_sites": {
-      "default": {
-        "region_id": "defaultRegion",
-        "identity_service_id": "default_service"
-      }
-    }
-  }
-}
\ No newline at end of file
diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/RequestInformationTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/RequestInformationTest.java
new file mode 100644
index 0000000..c6d815a
--- /dev/null
+++ b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/RequestInformationTest.java
@@ -0,0 +1,57 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 TechMahindra
+ * ================================================================================
+ * 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.adapters.sdncrest;
+
+import org.junit.Assert;
+
+import org.junit.Before;
+import org.junit.Test;
+
+public class RequestInformationTest {
+
+    private RequestInformation requestInformation;
+
+    @Before
+    public void setUp() {
+        requestInformation = new RequestInformation();
+    }
+
+    @Test
+    public void testGetRequestId() {
+        requestInformation.setRequestId("requestId");
+        Assert.assertNotNull(requestInformation.getRequestId());
+        Assert.assertEquals(requestInformation.getRequestId(), "requestId");
+    }
+
+    @Test
+    public void testGetSource() {
+        requestInformation.setSource("source");
+        Assert.assertNotNull(requestInformation.getSource());
+        Assert.assertEquals(requestInformation.getSource(), "source");
+    }
+
+    @Test
+    public void testGetNotificationUrl() {
+        requestInformation.setNotificationUrl("notificationUrl");
+        Assert.assertNotNull(requestInformation.getNotificationUrl());
+        Assert.assertEquals(requestInformation.getNotificationUrl(), "notificationUrl");
+    }
+}
diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCEventTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCEventTest.java
new file mode 100644
index 0000000..81d888b
--- /dev/null
+++ b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCEventTest.java
@@ -0,0 +1,81 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP - SO
+ * ================================================================================
+ * Copyright (C) 2018 TechMahindra
+ * ================================================================================
+ * 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.adapters.sdncrest;
+
+import static org.junit.Assert.*;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class SDNCEventTest {
+
+    private SDNCEvent sdncEvent;
+    private Map<String, String> param;
+    private String name = "name";
+    private String value = "value";
+
+    @Before
+    public void setUp() {
+        sdncEvent = new SDNCEvent();
+    }
+
+    @Test
+    public void testGetEventType() {
+        sdncEvent.setEventType("eventType");
+        Assert.assertNotNull(sdncEvent.getEventType());
+        Assert.assertEquals(sdncEvent.getEventType(), "eventType");
+    }
+
+    @Test
+    public void testGetEventCorrelatorType() {
+        sdncEvent.setEventCorrelatorType("eventCorrelatorType");
+        Assert.assertNotNull(sdncEvent.getEventCorrelatorType());
+        Assert.assertEquals(sdncEvent.getEventCorrelatorType(), "eventCorrelatorType");
+    }
+
+    @Test
+    public void testGetEventCorrelator() {
+        sdncEvent.setEventCorrelator("eventCorrelator");
+        Assert.assertNotNull(sdncEvent.getEventCorrelator());
+        Assert.assertEquals(sdncEvent.getEventCorrelator(), "eventCorrelator");
+    }
+
+    @Test
+    public void testGetParams() {
+        param = new HashMap<>();
+        param.put("paramKey", "paramValue");
+        sdncEvent.setParams(param);
+        Assert.assertNotNull(sdncEvent.getParams());
+        Assert.assertTrue(sdncEvent.getParams().containsKey("paramKey"));
+        Assert.assertTrue(sdncEvent.getParams().containsValue("paramValue"));
+    }
+
+    @Test
+    public void testAddParam() {
+        sdncEvent.addParam("name", "value");
+
+    }
+
+}
diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceErrorTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceErrorTest.java
new file mode 100644
index 0000000..df69b37
--- /dev/null
+++ b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceErrorTest.java
@@ -0,0 +1,51 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.sdncrest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.mso.adapters.sdncrest.SDNCErrorCommon;
+import org.openecomp.mso.adapters.sdncrest.SDNCServiceError;
+
+public class SDNCServiceErrorTest {
+
+	@Mock
+	SDNCErrorCommon sec;
+	
+	@InjectMocks
+	SDNCServiceError ssc;
+	
+	@Before
+	public void init(){
+	    MockitoAnnotations.initMocks(this);
+	 }
+	
+	@Test
+	public void testSDNCServiceError() {
+		
+		ssc= new SDNCServiceError("id", "200",
+				"msg", "indicator");
+		assert(ssc!=null);		
+	}
+}
diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceRequestTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceRequestTest.java
new file mode 100644
index 0000000..c63f1b8
--- /dev/null
+++ b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceRequestTest.java
@@ -0,0 +1,79 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.sdncrest;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.mso.adapters.sdncrest.SDNCRequestCommon;
+import org.openecomp.mso.adapters.sdncrest.ServiceInformation;
+import org.openecomp.mso.adapters.sdncrest.RequestInformation;
+
+public class SDNCServiceRequestTest {
+
+	@Mock
+	SDNCRequestCommon src;
+	
+	@Mock
+	ServiceInformation si;
+	
+	@Mock
+	RequestInformation ri;
+	
+	@InjectMocks
+	SDNCServiceRequest ssr;
+	
+	@Before
+	public void init(){
+	    MockitoAnnotations.initMocks(this);
+	 }
+	
+	@Test
+	public void test() {
+		ssr= new SDNCServiceRequest("url", "timeout",
+				"sdncRequestId", "sdncService", "sdncOperation",
+				ri,
+				si, "sdncServiceDataType",
+				"sndcServiceData");
+		
+	ssr.setSDNCService("sdncService");
+	ssr.setSDNCServiceData("sndcServiceData");
+	ssr.setSDNCServiceDataType("sdncServiceDataType");
+	ssr.setBPTimeout("timeout");
+	ssr.setBPNotificationUrl("url");
+	ssr.setRequestInformation(ri);
+	ssr.setServiceInformation(si);
+	ssr.setSDNCOperation("sdncOperation");
+	ssr.setSDNCRequestId("sdncRequestId");
+	assert(ssr.getSDNCService().equals("sdncService"));
+	assert(ssr.getSDNCServiceData().equals("sndcServiceData"));
+	assert(ssr.getSDNCServiceDataType().equals("sdncServiceDataType"));
+	assert(ssr.getBPTimeout().equals("timeout"));
+	assert(ssr.getBPNotificationUrl().equals("url"));
+	assert(ssr.getRequestInformation().equals(ri));
+	assert(ssr.getServiceInformation().equals(si));
+	assert(ssr.getSDNCOperation().equals("sdncOperation"));
+	assert(ssr.getSDNCRequestId().equals("sdncRequestId"));	
+	}
+
+}
diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceResponseTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceResponseTest.java
new file mode 100644
index 0000000..9c4e98a
--- /dev/null
+++ b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/SDNCServiceResponseTest.java
@@ -0,0 +1,58 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.sdncrest;
+
+import static org.junit.Assert.*;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+import org.openecomp.mso.adapters.sdncrest.SDNCResponseCommon;
+
+public class SDNCServiceResponseTest {
+
+	@Mock
+	SDNCResponseCommon src;
+	
+	@InjectMocks
+	SDNCServiceResponse ssr;
+	
+	@Before
+	public void init(){
+	    MockitoAnnotations.initMocks(this);
+	 }
+	
+	@Test
+	public void test() {
+		ssr=new SDNCServiceResponse("sdncRequestId", "200",
+				"msg", "indicator");
+		Map<String, String> mp = new HashMap<>();
+		mp.put("name", "value");
+		ssr.setParams(mp);
+		assert(ssr.getParams().equals(mp));
+		assertNotNull(ssr);
+	}
+}
diff --git a/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/ServiceInformationTest.java b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/ServiceInformationTest.java
new file mode 100644
index 0000000..2b87bbf
--- /dev/null
+++ b/adapters/mso-adapters-rest-interface/src/test/java/org/openecomp/mso/adapters/sdncrest/ServiceInformationTest.java
@@ -0,0 +1,42 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.sdncrest;
+
+import org.junit.Test;
+
+public class ServiceInformationTest {
+
+	
+	
+	@Test
+	public void test() {
+		ServiceInformation si= new ServiceInformation("id","service","GlobalId","name");
+		
+		si.setServiceInstanceId("id");
+		si.setServiceType("service");
+		si.setSubscriberGlobalId("GlobalId");
+		si.setSubscriberName("name");
+		assert(si.getServiceInstanceId().equals("id"));
+		assert(si.getServiceType().equals("service"));
+		assert(si.getSubscriberGlobalId().equals("GlobalId"));
+		assert(si.getSubscriberName().equals("name"));
+	}
+}
diff --git a/adapters/mso-sdnc-adapter/src/main/java/org/openecomp/mso/adapters/sdnc/sdncrest/SDNCServiceRequestConnector.java b/adapters/mso-sdnc-adapter/src/main/java/org/openecomp/mso/adapters/sdnc/sdncrest/SDNCServiceRequestConnector.java
index ab2c4ef..69e015e 100644
--- a/adapters/mso-sdnc-adapter/src/main/java/org/openecomp/mso/adapters/sdnc/sdncrest/SDNCServiceRequestConnector.java
+++ b/adapters/mso-sdnc-adapter/src/main/java/org/openecomp/mso/adapters/sdnc/sdncrest/SDNCServiceRequestConnector.java
@@ -115,7 +115,7 @@
 				} else if ("ack-final-indicator".equals(child.getNodeName())) {
 					ackFinalIndicator = child.getTextContent();
 				} else if ("response-parameters".equals(child.getNodeName())) {
-                    responseParameters.add((Element) child);
+                    responseParameters.add(child);
 				}
 			}
 
diff --git a/adapters/mso-sdnc-adapter/src/test/java/org/openecomp/mso/adapters/sdnc/impl/SDNCResponseTest.java b/adapters/mso-sdnc-adapter/src/test/java/org/openecomp/mso/adapters/sdnc/impl/SDNCResponseTest.java
new file mode 100644
index 0000000..f8867ae
--- /dev/null
+++ b/adapters/mso-sdnc-adapter/src/test/java/org/openecomp/mso/adapters/sdnc/impl/SDNCResponseTest.java
@@ -0,0 +1,49 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.sdnc.impl;
+
+import static org.junit.Assert.*;
+
+import org.junit.Test;
+
+public class SDNCResponseTest {
+    
+   private SDNCResponse sdncresponse = new SDNCResponse(null, 0, null);
+    
+   @Test
+    public void testSDNCResponse() 
+   {
+       sdncresponse.setReqId("reqId");
+       sdncresponse.setRespCode(0);
+       sdncresponse.setRespMsg("respMsg");
+       sdncresponse.setSdncRespXml("sdncRespXml");
+       assertEquals(sdncresponse.getReqId(), "reqId");
+       assertEquals(sdncresponse.getRespCode(), 0);
+       assertEquals(sdncresponse.getRespMsg(), "respMsg");
+       assertEquals(sdncresponse.getSdncRespXml(),"sdncRespXml");         
+    }
+   
+   @Test
+   public void testtoString()
+   {
+       assert(sdncresponse.toString()!=null);
+   }
+}
+   
\ No newline at end of file
diff --git a/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantAlreadyExistsTest.java b/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantAlreadyExistsTest.java
new file mode 100644
index 0000000..7f30b70
--- /dev/null
+++ b/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantAlreadyExistsTest.java
@@ -0,0 +1,32 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.tenant.exceptions;
+
+import org.junit.Test;
+
+public class TenantAlreadyExistsTest {
+
+	@Test
+	public void test() {
+		TenantAlreadyExists tar= new TenantAlreadyExists("name", "cloudId", "tenantId");
+        assert(tar!=null);
+	}
+}
\ No newline at end of file
diff --git a/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantExceptionBeanTest.java b/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantExceptionBeanTest.java
new file mode 100644
index 0000000..c2f1d4e
--- /dev/null
+++ b/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantExceptionBeanTest.java
@@ -0,0 +1,47 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.tenant.exceptions;
+
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.openecomp.mso.openstack.exceptions.MsoExceptionCategory;
+
+public class TenantExceptionBeanTest {
+
+@Mock
+private MsoExceptionCategory mec;
+
+@InjectMocks
+private TenantExceptionBean teb;
+
+@Test
+	public void test() {
+        teb =new TenantExceptionBean("message",mec);
+        teb.setMessage("message");
+        teb.setCategory(MsoExceptionCategory.INTERNAL);
+        teb.setCategory(MsoExceptionCategory.IO);
+        teb.setCategory(MsoExceptionCategory.OPENSTACK);
+        teb.setCategory(MsoExceptionCategory.USERDATA);
+        assert(teb.getMessage().equals("message"));
+        assert(teb.getCategory()!=null);
+	}
+}
diff --git a/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantExceptionTest.java b/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantExceptionTest.java
new file mode 100644
index 0000000..32e1fd1
--- /dev/null
+++ b/adapters/mso-tenant-adapter/src/test/java/org/openecomp/mso/adapters/tenant/exceptions/TenantExceptionTest.java
@@ -0,0 +1,49 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.tenant.exceptions;
+
+import org.junit.Test;
+import org.mockito.InjectMocks;
+import org.mockito.Mock;
+import org.openecomp.mso.openstack.exceptions.MsoExceptionCategory;
+
+public class TenantExceptionTest {
+	
+	@Mock
+	private TenantExceptionBean teb;
+	
+	@Mock
+	private MsoExceptionCategory mec;
+	
+	@InjectMocks
+	private TenantException te;
+	
+	@Test
+	public void test() {
+	    teb=new TenantExceptionBean("message");
+		teb.setMessage("message");
+		teb.setCategory(MsoExceptionCategory.INTERNAL);
+	    te = new TenantException("message", mec);
+	    te.setFaultInfo(teb);
+	    assert(te.getFaultInfo()!=null);
+	    assert(te.getFaultInfo().equals(teb));
+	}
+}
diff --git a/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/VfcManager.java b/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/VfcManager.java
index 2c2143c..6f06fbf 100644
--- a/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/VfcManager.java
+++ b/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/VfcManager.java
@@ -398,7 +398,7 @@
 
         String url;
         String originalUrl;
-        originalUrl = (String)nfvoUrlMap.get(step);
+        originalUrl = nfvoUrlMap.get(step);
         url = String.format(originalUrl, variable);
         return url;
 
diff --git a/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/model/RestfulResponse.java b/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/model/RestfulResponse.java
index 483c952..e4f7f30 100644
--- a/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/model/RestfulResponse.java
+++ b/adapters/mso-vfc-adapter/src/main/java/org/openecomp/mso/adapters/vfc/model/RestfulResponse.java
@@ -65,7 +65,7 @@
 
     public int getRespHeaderInt(String key) {
         if(this.respHeaderMap != null) {
-            String result = (String)this.respHeaderMap.get(key);
+            String result = this.respHeaderMap.get(key);
             if(result != null) {
                 return Integer.parseInt(result);
             }
@@ -75,7 +75,7 @@
 
     public long getRespHeaderLong(String key) {
         if(this.respHeaderMap != null) {
-            String result = (String)this.respHeaderMap.get(key);
+            String result = this.respHeaderMap.get(key);
             if(result != null) {
                 return Long.parseLong(result);
             }
@@ -85,7 +85,7 @@
 
     public String getRespHeaderStr(String key) {
         if(this.respHeaderMap != null) {
-            return ((String)this.respHeaderMap.get(key));
+            return this.respHeaderMap.get(key);
         }
         return null;
     }
diff --git a/adapters/mso-vnf-adapter/src/test/java/org/openecomp/mso/adapters/vnf/VfRollbackTest.java b/adapters/mso-vnf-adapter/src/test/java/org/openecomp/mso/adapters/vnf/VfRollbackTest.java
new file mode 100644
index 0000000..03de139
--- /dev/null
+++ b/adapters/mso-vnf-adapter/src/test/java/org/openecomp/mso/adapters/vnf/VfRollbackTest.java
@@ -0,0 +1,69 @@
+/*
+* ============LICENSE_START=======================================================
+* ONAP : SO
+* ================================================================================
+* Copyright 2018 TechMahindra
+*=================================================================================
+* 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.adapters.vnf;
+import static org.junit.Assert.assertEquals;
+import org.junit.Test;
+public class VfRollbackTest {
+	private VfRollback vfRollback = new VfRollback();
+
+	@Test
+	public void test() {
+		vfRollback.setVnfId("vnfId");
+		vfRollback.setTenantId("tenantId");
+		vfRollback.setCloudSiteId("cloudId");
+		vfRollback.setTenantCreated(true);
+		vfRollback.setVnfCreated(true);
+		vfRollback.setMsoRequest(null);
+		vfRollback.setVolumeGroupName("volumeGroupName");
+		vfRollback.setVolumeGroupId("volumeGroupId");
+		vfRollback.setRequestType("requestType");
+		vfRollback.setVolumeGroupHeatStackId("volumeGroupHeatStackId");
+		vfRollback.setBaseGroupHeatStackId("baseGroupHeatStackId");
+		vfRollback.setIsBase(true);
+		vfRollback.setVfModuleStackId("vfModuleStackId");
+		assert(vfRollback.getVnfId() != null);
+		assert(vfRollback.getTenantId() != null);
+		assert(vfRollback.getCloudSiteId() != null);
+		assert(vfRollback.getVolumeGroupName() != null);
+		assert(vfRollback.getVolumeGroupId() != null);
+		assert(vfRollback.getRequestType() != null);
+		assert(vfRollback.getVolumeGroupHeatStackId() != null);
+		assert(vfRollback.getBaseGroupHeatStackId() != null);
+		assert(vfRollback.getVfModuleStackId() != null);
+		assertEquals(vfRollback.getVnfId(), "vnfId");
+		assertEquals(vfRollback.getTenantId(),"tenantId");
+		assertEquals(vfRollback.getCloudSiteId(), "cloudId");
+		assertEquals(vfRollback.getTenantCreated(), true);
+		assertEquals(vfRollback.getVnfCreated(), true);
+		assertEquals(vfRollback.getMsoRequest(), null);
+		assertEquals(vfRollback.getVolumeGroupName(), "volumeGroupName");
+		assertEquals(vfRollback.getVolumeGroupId(), "volumeGroupId");
+		assertEquals(vfRollback.getRequestType(), "requestType");
+		assertEquals(vfRollback.getVolumeGroupHeatStackId(), "volumeGroupHeatStackId");
+		assertEquals(vfRollback.getBaseGroupHeatStackId(), "baseGroupHeatStackId");
+		assertEquals(vfRollback.isBase(), true);
+		assertEquals(vfRollback.getVfModuleStackId(), "vfModuleStackId");	
+	}
+	
+	@Test
+	public void testtoString() {
+		assert(vfRollback.toString() != null);
+		}
+}
diff --git a/aria/aria-rest-java-client/pom.xml b/aria/aria-rest-java-client/pom.xml
index 0af9923..adfc253 100755
--- a/aria/aria-rest-java-client/pom.xml
+++ b/aria/aria-rest-java-client/pom.xml
@@ -23,7 +23,7 @@
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
 
-    <groupId>aria-client</groupId>
+    <groupId>org.onap.so</groupId>
     <artifactId>aria-client</artifactId>
     <version>1.2.0-SNAPSHOT</version>
 
diff --git a/aria/pom.xml b/aria/pom.xml
index 95ef93b..c2617da 100644
--- a/aria/pom.xml
+++ b/aria/pom.xml
@@ -17,7 +17,7 @@
 
 	<modules>
 		<module>aria-rest-java-client</module>
-		<module>aria-rest-server</module>
+		<!-- <module>aria-rest-server</module> -->
 		<!-- <module>multivim-plugin</module> -->
 	</modules>
 </project>
diff --git a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java
index 33f64c8..3f05720 100644
--- a/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java
+++ b/bpmn/MSOCommonBPMN/src/main/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilder.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018 Huawei 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.
@@ -44,7 +44,7 @@
 public class ResourceRequestBuilder {
 
     public static String CUSTOMIZATION_UUID = "customizationUUID";
-    public static String SERVICE_URL_TOSCA_CSAR = "http://localhost:3099/serviceToscaCsar?serviceModelUuid=";
+    public static String SERVICE_URL_TOSCA_CSAR = "http://localhost:8080/ecomp/mso/catalog/v3/serviceToscaCsar?serviceModelUuid=";
 
     private static MsoLogger LOGGER = MsoLogger.getMsoLogger(MsoLogger.Catalog.RA);
 
@@ -114,13 +114,13 @@
     private static String getCsarFromUuid(String uuid) throws Exception {
 
         ResteasyClient client = new ResteasyClientBuilder().build();
-        ResteasyWebTarget target = client.target(SERVICE_URL_TOSCA_CSAR + uuid + "\"");
+        ResteasyWebTarget target = client.target(SERVICE_URL_TOSCA_CSAR + uuid);
         Response response = target.request().get();
         String value = response.readEntity(String.class);
 
         HashMap<String,String> map = new Gson().fromJson(value, new TypeToken<HashMap<String, String>>(){}.getType());
 
-        File csarFile = new File(System.getProperty("mso.config.path") + "ASDC/" + map.get("NAME"));
+        File csarFile = new File(System.getProperty("mso.config.path") + "ASDC/" + map.get("name"));
 
         if (!csarFile.exists()) {
             throw new Exception("csar file does not exist.");
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
index 6f0095f..849aae8 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/WorkflowTest.java
@@ -133,8 +133,7 @@
 		List<ResponseTransformer> transformerList = new ArrayList<ResponseTransformer>();
 
 		for (Field field : getClass().getFields()) {
-			WorkflowTestTransformer annotation = (WorkflowTestTransformer)
-				field.getAnnotation(WorkflowTestTransformer.class);
+			WorkflowTestTransformer annotation = field.getAnnotation(WorkflowTestTransformer.class);
 
 			if (annotation == null) {
 				continue;
diff --git a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilderTest.java b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilderTest.java
index 262c12e..54442b1 100644
--- a/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilderTest.java
+++ b/bpmn/MSOCommonBPMN/src/test/java/org/openecomp/mso/bpmn/common/resource/ResourceRequestBuilderTest.java
@@ -2,7 +2,7 @@
  * ============LICENSE_START=======================================================
  * ONAP - SO
  * ================================================================================
- * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * Copyright (C) 2018 Huawei 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.
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
index a1719a9..98659d2 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/PropertyConfigurationSetup.java
@@ -217,7 +217,7 @@
 			String newTimestamp = PropertyConfiguration.getInstance().getProperties(type)
 				.get(PropertyConfiguration.TIMESTAMP_PROPERTY);
 
-			if (newTimestamp != oldTimestamp) {
+			if (!newTimestamp.equals(oldTimestamp)) {
 				return;
 			}
 
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
index b0152a1..bfad9ba 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/json/JsonUtils.java
@@ -327,7 +327,7 @@
 					return null;
 				} else {
 					if (rawValue instanceof String) {
-						msoLogger.debug("getJsonValue(): the raw value is a String Object=" + ((String) rawValue));
+						msoLogger.debug("getJsonValue(): the raw value is a String Object=" + rawValue);
 						return (String) rawValue;
 					} else {
 						msoLogger.debug("getJsonValue(): the raw value is NOT a String Object=" + rawValue.toString());
@@ -356,7 +356,7 @@
 					return null;
 				} else {
 					if (rawValue instanceof String) {
-						msoLogger.debug("getJsonNodeValue(): the raw value is a String Object=" + ((String) rawValue));
+						msoLogger.debug("getJsonNodeValue(): the raw value is a String Object=" + rawValue);
 						return (String) rawValue;
 					} else {
 						msoLogger.debug("getJsonNodeValue(): the raw value is NOT a String Object=" + rawValue.toString());
@@ -388,7 +388,7 @@
 					return 0;
 				} else {
 					if (rawValue instanceof Integer) {
-						msoLogger.debug("getJsonValue(): the raw value is an Integer Object=" + ((String) rawValue));
+						msoLogger.debug("getJsonValue(): the raw value is an Integer Object=" + rawValue);
 						return (Integer) rawValue;
 					} else {
 						msoLogger.debug("getJsonValue(): the raw value is NOT an Integer Object=" + rawValue.toString());
@@ -416,7 +416,7 @@
 					return false;
 				} else {
 					if (rawValue instanceof Boolean) {
-						msoLogger.debug("getJsonValue(): the raw value is a Boolean Object=" + ((String) rawValue));
+						msoLogger.debug("getJsonValue(): the raw value is a Boolean Object=" + rawValue);
 						return (Boolean) rawValue;
 					} else {
 						msoLogger.debug("getJsonValue(): the raw value is NOT an Boolean Object=" + rawValue.toString());
@@ -462,7 +462,7 @@
 				return null;
 			} else {
 				if (rawValue instanceof JSONArray) {
-					msoLogger.debug("getJsonParamValue(): keys=" + keys + " points to JSONArray: " + ((JSONArray) rawValue).toString());
+					msoLogger.debug("getJsonParamValue(): keys=" + keys + " points to JSONArray: " + rawValue.toString());
 					int arrayLen = ((JSONArray) rawValue).length();
 					if (index < 0 || arrayLen < index+1) {
 						msoLogger.debug("getJsonParamValue(): index: " + index + " is out of bounds for array size of " + arrayLen);
@@ -549,7 +549,7 @@
 				msoLogger.debug("getJsonValueForKey(): iterating over the keys");
 				Iterator <String> itr = jsonObj.keys();
 				while (itr.hasNext()) {
-					String nextKey = (String) itr.next();
+					String nextKey = itr.next();
 					Object obj = jsonObj.get(nextKey);
 					if (obj instanceof JSONObject) {
 						msoLogger.debug("getJsonValueForKey(): key=" + nextKey + ", points to JSONObject, recursive call");
@@ -592,7 +592,7 @@
 				msoLogger.debug("getJsonValueForKey(): iterating over the keys");
 				Iterator <String> itr = jsonObj.keys();
 				while (itr.hasNext()) {
-					String nextKey = (String) itr.next();
+					String nextKey = itr.next();
 					Object obj = jsonObj.get(nextKey);
 					if (obj instanceof JSONObject) {
 						msoLogger.debug("getJsonValueForKey(): key=" + nextKey + ", points to JSONObject, recursive call");
@@ -634,7 +634,7 @@
 				msoLogger.debug("getJsonBooleanValueForKey(): iterating over the keys");
 				Iterator <String> itr = jsonObj.keys();
 				while (itr.hasNext()) {
-					String nextKey = (String) itr.next();
+					String nextKey = itr.next();
 					Object obj = jsonObj.get(nextKey);
 					if (obj instanceof JSONObject) {
 						msoLogger.debug("getJsonBooleanValueForKey(): key=" + nextKey + ", points to JSONObject, recursive call");
@@ -690,7 +690,7 @@
 		if (!jsonValueExists(jsonStr, keys)) {
 			return putJsonValue(jsonStr, keys, value);
 		} else {
-			msoLogger.debug("addJsonValue(): JSON add failed, key=" + keys + "/value=" + (String) value + " already exists");
+			msoLogger.debug("addJsonValue(): JSON add failed, key=" + keys + "/value=" + value + " already exists");
 			return jsonStr;
 		}
 	}
@@ -826,7 +826,7 @@
 						msoLogger.debug("putJsonValue(): key=" + keyStr + " points to json object");
 						jsonObj = (JSONObject) keyValue;
 					} else {
-						msoLogger.debug("putJsonValue(): key=" + keyStr + " not the last key but points to non-json object: " + (String) keyValue);
+						msoLogger.debug("putJsonValue(): key=" + keyStr + " not the last key but points to non-json object: " + keyValue);
 						return null;
 					}
 				} else { // at the last/new key value
diff --git a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java
index 730c145..b66169d 100644
--- a/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java
+++ b/bpmn/MSOCoreBPMN/src/main/java/org/openecomp/mso/bpmn/core/plugins/LoggingAndURNMappingPlugin.java
@@ -421,7 +421,7 @@
 				try {
 					String id = execution.getId();
 					if ("START".equals(event) && id != null ) {
-						startTimes.put(id, (Long)System.currentTimeMillis());
+						startTimes.put(id, System.currentTimeMillis());
 					} else if ("END".equals(event) && id != null) {
 						String prefix = (String) execution.getVariable("prefix");
 
diff --git a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java
index 2d204c3..d434ac7 100644
--- a/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java
+++ b/bpmn/MSOCoreBPMN/src/test/java/org/openecomp/mso/bpmn/core/TestBaseTask.java
@@ -58,8 +58,8 @@
 		Map<String, Object> variables = new HashMap<>();
 		variables.put("firstName", "Jane");
 		variables.put("lastName", "Doe");
-		variables.put("age", (Integer)25);
-		variables.put("lastVisit", (Long)1438270117000L);
+		variables.put("age", 25);
+		variables.put("lastVisit", 1438270117000L);
 
 		RuntimeService runtimeService = processEngineRule.getRuntimeService();
 		assertNotNull(runtimeService);
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
new file mode 100644
index 0000000..400b0d4
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateSDNCNetworkResource.groovy
@@ -0,0 +1,144 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * OPENECOMP - SO
+ * ================================================================================
+ * Copyright (C) 2018 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.bpmn.infrastructure.scripts;
+
+import static org.apache.commons.lang3.StringUtils.*;
+import groovy.xml.XmlUtil
+import groovy.json.*
+import org.openecomp.mso.bpmn.common.scripts.AbstractServiceTaskProcessor 
+import org.openecomp.mso.bpmn.common.scripts.ExceptionUtil 
+import org.openecomp.mso.bpmn.core.WorkflowException 
+import org.openecomp.mso.bpmn.core.json.JsonUtils 
+import org.openecomp.mso.rest.APIResponse
+
+import java.util.UUID;
+
+import org.camunda.bpm.engine.delegate.BpmnError 
+import org.camunda.bpm.engine.runtime.Execution
+import org.apache.commons.lang3.*
+import org.apache.commons.codec.binary.Base64;
+import org.springframework.web.util.UriUtils 
+import org.openecomp.mso.rest.RESTClient 
+import org.openecomp.mso.rest.RESTConfig
+import org.openecomp.mso.rest.APIResponse;
+
+/**
+ * This groovy class supports the <class>CreateSDNCCNetworkResource.bpmn</class> process.
+ * flow for SDNC Network Resource Create
+ */
+public class CreateSDNCCNetworkResource extends AbstractServiceTaskProcessor {
+
+    String vfcUrl = "/vfc/rest/v1/vfcadapter"
+    
+    String host = "http://mso.mso.testlab.openecomp.org:8080"
+    
+    ExceptionUtil exceptionUtil = new ExceptionUtil()
+
+    JsonUtils jsonUtil = new JsonUtils()
+    
+    /**
+     * Pre Process the BPMN Flow Request
+     * Inclouds:
+     * generate the nsOperationKey
+     * generate the nsParameters
+     */
+    public void preProcessRequest (Execution execution) {
+	   def isDebugEnabled=execution.getVariable("isDebugLogEnabled")
+       String msg = ""
+       utils.log("INFO", " *** preProcessRequest() *** ", isDebugEnabled)
+       try {
+           //deal with nsName and Description
+           String nsServiceName = execution.getVariable("nsServiceName")
+           String nsServiceDescription = execution.getVariable("nsServiceDescription")
+           utils.log("INFO", "nsServiceName:" + nsServiceName + " nsServiceDescription:" + nsServiceDescription, isDebugEnabled)
+           //deal with operation key
+           String globalSubscriberId = execution.getVariable("globalSubscriberId")
+           utils.log("INFO", "globalSubscriberId:" + globalSubscriberId, isDebugEnabled)
+           String serviceType = execution.getVariable("serviceType")
+           utils.log("INFO", "serviceType:" + serviceType, isDebugEnabled)
+           String serviceId = execution.getVariable("serviceId")
+           utils.log("INFO", "serviceId:" + serviceId, isDebugEnabled)
+           String operationId = execution.getVariable("operationId")
+           utils.log("INFO", "serviceType:" + serviceType, isDebugEnabled)
+           String nodeTemplateUUID = execution.getVariable("resourceUUID")
+           utils.log("INFO", "nodeTemplateUUID:" + nodeTemplateUUID, isDebugEnabled)
+           /*
+            * segmentInformation needed as a object of segment
+            * {
+            *     "domain":"",
+            *     "nodeTemplateName":"",
+            *     "nodeType":"",
+            *     "nsParameters":{
+            *       //this is the nsParameters sent to VF-C
+            *     }
+            * }
+            */
+           String nsParameters = execution.getVariable("resourceParameters")
+           utils.log("INFO", "nsParameters:" + nsParameters, isDebugEnabled)
+           String nsOperationKey = """{
+                   "globalSubscriberId":"${globalSubscriberId}",
+                   "serviceType":"${serviceType}",
+                   "serviceId":"${serviceId}",
+                   "operationId":"${operationId}",
+                   "nodeTemplateUUID":"${nodeTemplateUUID}"
+                    }"""
+           execution.setVariable("nsOperationKey", nsOperationKey);
+           execution.setVariable("nsParameters", nsParameters)
+           
+
+       } catch (BpmnError e) {
+           throw e;
+       } catch (Exception ex){
+           msg = "Exception in preProcessRequest " + ex.getMessage()
+           utils.log("INFO", msg, isDebugEnabled)
+           exceptionUtil.buildAndThrowWorkflowException(execution, 7000, msg)
+       }
+       utils.log("INFO"," ***** Exit preProcessRequest *****",  isDebugEnabled)
+	}
+
+    
+    /**
+     * post request
+     * url: the url of the request
+     * requestBody: the body of the request
+     */
+    private APIResponse postRequest(Execution execution, String url, String requestBody){
+        def isDebugEnabled = execution.getVariable("isDebugLogEnabled")
+        utils.log("INFO"," ***** Started Execute VFC adapter Post Process *****",  isDebugEnabled)
+        utils.log("INFO","url:"+url +"\nrequestBody:"+ requestBody,  isDebugEnabled)
+        APIResponse apiResponse = null
+        try{
+            RESTConfig config = new RESTConfig(url);
+            RESTClient client = new RESTClient(config).addHeader("Content-Type", "application/json").addHeader("Accept","application/json").addHeader("Authorization","Basic QlBFTENsaWVudDpwYXNzd29yZDEk");
+            apiResponse = client.httpPost(requestBody)
+            utils.log("INFO","response code:"+ apiResponse.getStatusCode() +"\nresponse body:"+ apiResponse.getResponseBodyAsString(),  isDebugEnabled)    
+            utils.log("INFO","======== Completed Execute VF-C adapter Post Process ======== ",  isDebugEnabled)
+        }catch(Exception e){
+            utils.log("ERROR","Exception occured while executing AAI Post Call. Exception is: \n" + e,  isDebugEnabled)
+            throw new BpmnError("MSOWorkflowException")
+        }        
+        return apiResponse
+    }
+    
+    public void postCreateSDNCCall(Execution execution){
+        
+    }
+}
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVFCNSResource.groovy
similarity index 98%
rename from bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
rename to bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVFCNSResource.groovy
index 06cf8c3..970a4f7 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/DoCreateVFCNetworkServiceInstance.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/CreateVFCNSResource.groovy
@@ -44,7 +44,7 @@
  * This groovy class supports the <class>DoCreateVFCNetworkServiceInstance.bpmn</class> process.
  * flow for VFC Network Service Create
  */
-public class DoCreateVFCNetworkServiceInstance extends AbstractServiceTaskProcessor {
+public class CreateVFCNSResource extends AbstractServiceTaskProcessor {
 
     String vfcUrl = "/vfc/rest/v1/vfcadapter"
     
@@ -54,7 +54,7 @@
 
     JsonUtils jsonUtil = new JsonUtils()
     
-    /**
+    /**CreateVFCNSResource
      * Pre Process the BPMN Flow Request
      * Inclouds:
      * generate the nsOperationKey
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy
index c91f353..44eaa34 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy
+++ b/bpmn/MSOInfrastructureBPMN/src/main/groovy/org/openecomp/mso/bpmn/infrastructure/scripts/UpdateCustomE2EServiceInstance.groovy
@@ -118,6 +118,15 @@
 			} else {
 				execution.setVariable("serviceType", serviceType)
 			}
+			
+			//operationId
+			String operationId = jsonUtil.getJsonValue(siRequest, "operationId")
+		 	if (isBlank(operationId)) {
+		 		operationId = UUID.randomUUID().toString()
+		 	 }   
+			execution.setVariable("operationId", operationId) 
+			execution.setVariable("operationType", "UPDATE")
+			
 			execution.setVariable("URN_mso_adapters_openecomp_db_endpoint","http://mso.mso.testlab.openecomp.org:8080/dbadapters/RequestsDbAdapter")
 
 		} catch (BpmnError e) {
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateSDNCNetworkResource.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateSDNCNetworkResource.bpmn
new file mode 100644
index 0000000..c88f787
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateSDNCNetworkResource.bpmn
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="1.10.0">
+  <bpmn:process id="CreateSDNCNetworkResource" name="CreateSDNCNetworkResource" isExecutable="true">
+    <bpmn:startEvent id="createNS_StartEvent" name="createNS_StartEvent">
+      <bpmn:outgoing>SequenceFlow_1qo2pln</bpmn:outgoing>
+    </bpmn:startEvent>
+    <bpmn:sequenceFlow id="SequenceFlow_1qo2pln" sourceRef="createNS_StartEvent" targetRef="PreprocessIncomingRequest_task" />
+    <bpmn:sequenceFlow id="SequenceFlow_0khtova" sourceRef="PreprocessIncomingRequest_task" targetRef="CallActivity_1600xlj" />
+    <bpmn:scriptTask id="PreprocessIncomingRequest_task" name="Preprocess Incoming Request" scriptFormat="groovy">
+      <bpmn:incoming>SequenceFlow_1qo2pln</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0khtova</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new CreateSDNCNetworkResource()
+dcsi.preProcessRequest(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+    <bpmn:endEvent id="EndEvent_1x6k78c" name="create SDNC call end">
+      <bpmn:incoming>SequenceFlow_0ow44q0</bpmn:incoming>
+    </bpmn:endEvent>
+    <bpmn:callActivity id="CallActivity_1600xlj" name="Call SDNC RSRC Create&#10; Adapter V1&#10;" calledElement="sdncAdapter">
+      <bpmn:extensionElements>
+        <camunda:in source="CRENWKI_activateSDNCRequest" target="sdncAdapterWorkflowRequest" />
+        <camunda:in source="mso-request-id" target="mso-request-id" />
+        <camunda:in source="mso-service-instance-id" target="mso-service-instance-id" />
+        <camunda:out source="sdncAdapterResponse" target="CRENWKI_activateSDNCResponse" />
+        <camunda:out source="SDNCA_ResponseCode" target="CRENWKI_sdncActivateReturnCode" />
+        <camunda:out source="SDNCA_SuccessIndicator" target="SDNCA_SuccessIndicator" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+      </bpmn:extensionElements>
+      <bpmn:incoming>SequenceFlow_0khtova</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_1xk5xed</bpmn:outgoing>
+    </bpmn:callActivity>
+    <bpmn:sequenceFlow id="SequenceFlow_1xk5xed" sourceRef="CallActivity_1600xlj" targetRef="Task_023hred" />
+    <bpmn:sequenceFlow id="SequenceFlow_0ow44q0" sourceRef="Task_023hred" targetRef="EndEvent_1x6k78c" />
+    <bpmn:scriptTask id="Task_023hred" name="post SDNC create call">
+      <bpmn:incoming>SequenceFlow_1xk5xed</bpmn:incoming>
+      <bpmn:outgoing>SequenceFlow_0ow44q0</bpmn:outgoing>
+      <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new CreateSDNCNetworkResource()
+dcsi.postCreateSDNCCall(execution)]]></bpmn:script>
+    </bpmn:scriptTask>
+  </bpmn:process>
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateSDNCNetworkResource">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="createNS_StartEvent">
+        <dc:Bounds x="175" y="111" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="152" y="147" width="83" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1qo2pln_di" bpmnElement="SequenceFlow_1qo2pln">
+        <di:waypoint xsi:type="dc:Point" x="211" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="251" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="251" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="129" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="266" y="123" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0khtova_di" bpmnElement="SequenceFlow_0khtova">
+        <di:waypoint xsi:type="dc:Point" x="393" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="544" y="129" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="423.5" y="108" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_03j6ogo_di" bpmnElement="PreprocessIncomingRequest_task">
+        <dc:Bounds x="293" y="89" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_15pcuuc_di" bpmnElement="EndEvent_1x6k78c">
+        <dc:Bounds x="951" y="111" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="912" y="153" width="85" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_1600xlj_di" bpmnElement="CallActivity_1600xlj">
+        <dc:Bounds x="544" y="89" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1xk5xed_di" bpmnElement="SequenceFlow_1xk5xed">
+        <di:waypoint xsi:type="dc:Point" x="644" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="800" y="129" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="677" y="108" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ow44q0_di" bpmnElement="SequenceFlow_0ow44q0">
+        <di:waypoint xsi:type="dc:Point" x="900" y="129" />
+        <di:waypoint xsi:type="dc:Point" x="951" y="129" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="880.5" y="108" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0gyej62_di" bpmnElement="Task_023hred">
+        <dc:Bounds x="800" y="89" width="100" height="80" />
+      </bpmndi:BPMNShape>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn:definitions>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVFCNSResource.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVFCNSResource.bpmn
index 29dbca4..e6d4af3 100644
--- a/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVFCNSResource.bpmn
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/process/CreateVFCNSResource.bpmn
@@ -11,21 +11,21 @@
       <bpmn:incoming>SequenceFlow_0khtova</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1uiz85h</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateVFCNetworkServiceInstance()
+def dcsi = new CreateVFCNSResource()
 dcsi.createNetworkService(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="PreprocessIncomingRequest_task" name="Preprocess Incoming Request" scriptFormat="groovy">
       <bpmn:incoming>SequenceFlow_1qo2pln</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0khtova</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateVFCNetworkServiceInstance()
+def dcsi = new CreateVFCNSResource()
 dcsi.preProcessRequest(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="instantiate_NSTask" name="Instantiate Network Service" scriptFormat="groovy">
       <bpmn:incoming>createNSSuccess_SequenceFlow</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1ywe21t</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateVFCNetworkServiceInstance()
+def dcsi = new CreateVFCNSResource()
 dcsi.instantiateNetworkService(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:exclusiveGateway id="ExclusiveGateway_0zfksms" name="Create NS Success?">
@@ -77,14 +77,14 @@
       <bpmn:incoming>SequenceFlow_1gsbpxj</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0xqo13p</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateVFCNetworkServiceInstance()
+def dcsi = new CreateVFCNSResource()
 dcsi.queryNSProgress(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:scriptTask id="finishNSCreate_Task" name="Add NS RelationShip" scriptFormat="groovy">
       <bpmn:incoming>operationFinished_SequenceFlow</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_0cq2q6g</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateVFCNetworkServiceInstance()
+def dcsi = new CreateVFCNSResource()
 dcsi.addNSRelationship(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_0xqo13p" sourceRef="queryJob_Task" targetRef="ExclusiveGateway_15492gl" />
@@ -92,13 +92,13 @@
       <bpmn:incoming>operationProcessing_SequenceFlow</bpmn:incoming>
       <bpmn:outgoing>SequenceFlow_1gsbpxj</bpmn:outgoing>
       <bpmn:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
-def dcsi = new DoCreateVFCNetworkServiceInstance()
+def dcsi = new CreateVFCNSResource()
 dcsi.timeDelay(execution)]]></bpmn:script>
     </bpmn:scriptTask>
     <bpmn:sequenceFlow id="SequenceFlow_1gsbpxj" sourceRef="timeDelay_Task" targetRef="queryJob_Task" />
   </bpmn:process>
   <bpmndi:BPMNDiagram id="BPMNDiagram_1">
-    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoCreateVFCNetworkServiceInstance">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="CreateVFCNSResource">
       <bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="createNS_StartEvent">
         <dc:Bounds x="175" y="111" width="36" height="36" />
         <bpmndi:BPMNLabel>
diff --git a/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn
new file mode 100644
index 0000000..75f6b4c
--- /dev/null
+++ b/bpmn/MSOInfrastructureBPMN/src/main/resources/subprocess/DoUpdateE2EServiceInstance.bpmn
@@ -0,0 +1,821 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<bpmn2:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="_MagIIMOUEeW8asg-vCEgWQ" targetNamespace="http://camunda.org/schema/1.0/bpmn" exporter="Camunda Modeler" exporterVersion="1.11.3" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd">
+  <bpmn2:process id="DoUpdateE2EServiceInstance" name="DoUpdateE2EServiceInstance" isExecutable="true">
+    <bpmn2:startEvent id="createSI_startEvent" name="Start Flow">
+      <bpmn2:outgoing>SequenceFlow_1</bpmn2:outgoing>
+    </bpmn2:startEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_1" name="" sourceRef="createSI_startEvent" targetRef="preProcessRequest_ScriptTask" />
+    <bpmn2:scriptTask id="preProcessRequest_ScriptTask" name="PreProcess Incoming Request" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_2</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new DoUpdateE2EServiceInstance()
+dcsi.preProcessRequest(execution)
+]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_2" name="" sourceRef="preProcessRequest_ScriptTask" targetRef="CallActivity_18nvmnn" />
+    <bpmn2:scriptTask id="ScriptTask_0i8cqdy_PostProcessAAIGET" name="Post Process AAI GET" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0qg0uyn</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0wc7v9z</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new DoUpdateE2EServiceInstance()
+dcsi.postProcessAAIGET(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:scriptTask id="Task_09laxun" name="PreProcess for Add Resources" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_115mdln</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0yztz2p</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def csi = new  DoUpdateE2EServiceInstance()
+csi.preProcessForAddResource(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:callActivity id="Task_1wyyy33" name="Call DoCreateResources" calledElement="DoCreateResources">
+      <bpmn2:extensionElements>
+        <camunda:in source="nsServiceName" target="nsServiceName" />
+        <camunda:in source="nsServiceDescription" target="nsServiceDescription" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="serviceType" target="serviceType" />
+        <camunda:in source="serviceId" target="serviceId" />
+        <camunda:in source="operationId" target="operationId" />
+        <camunda:in source="resourceType" target="resourceType" />
+        <camunda:in source="resourceUUID" target="resourceUUID" />
+        <camunda:in source="resourceParameters" target="resourceParameters" />
+        <camunda:in source="operationType" target="operationType" />
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0yztz2p</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0lblyhi</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:scriptTask id="Task_0ag30bf" name="PostProcess for Add Resource" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0lblyhi</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1fr4uwt</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def csi = new  DoUpdateE2EServiceInstance()
+csi.postProcessForAddResource(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:scriptTask id="ScriptTask_04rn9mp" name="Post Config Service Instance Update" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0cnuo36</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1lkpfe2</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def csi = new  DoUpdateE2EServiceInstance()
+csi.postConfigRequest(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:intermediateCatchEvent id="StartEvent_StartResource" name="StartAddResources">
+      <bpmn2:outgoing>SequenceFlow_115mdln</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="StartAddResource" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_1dwg5lz" name="GoToStartCompareModelVersions">
+      <bpmn2:incoming>SequenceFlow_1i45vfx</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="StartCompareModelVersions" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_1rebkae" sourceRef="StartEvent_0jhv664" targetRef="ScriptTask_1wk7zcu" />
+    <bpmn2:intermediateCatchEvent id="StartEvent_0jhv664" name="FinishProcess">
+      <bpmn2:outgoing>SequenceFlow_1rebkae</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="FinishProcess" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:endEvent id="EndEvent_0x8im5g">
+      <bpmn2:incoming>SequenceFlow_1lkpfe2</bpmn2:incoming>
+    </bpmn2:endEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_1lkpfe2" sourceRef="ScriptTask_04rn9mp" targetRef="EndEvent_0x8im5g" />
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_GoToFinishProcess" name="GoTo StartDeleteResources">
+      <bpmn2:incoming>SequenceFlow_1fr4uwt</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="StartDeleteResources" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:intermediateCatchEvent id="StartEvent_1p7w4fj" name="Update Resource Oper Status">
+      <bpmn2:outgoing>SequenceFlow_0e8oxe4</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="UpdateResourceOperStatus" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_0e8oxe4" sourceRef="StartEvent_1p7w4fj" targetRef="ScriptTask_1pwo0jp" />
+    <bpmn2:scriptTask id="ScriptTask_1wk7zcu" name="Prepare Update Service Oper Status(100%)" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1rebkae</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0gr3l25</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+execution.setVariable("progress", "100")
+execution.setVariable("operationStatus", "End")
+def ddsi = new DoUpdateE2EServiceInstance()
+ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:serviceTask id="ServiceTask_1a6cmdu" name="Update Service Oper Status">
+      <bpmn2:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${URN_mso_openecomp_adapters_db_endpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_updateServiceOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0gr3l25</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0cnuo36</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_0gr3l25" sourceRef="ScriptTask_1wk7zcu" targetRef="ServiceTask_1a6cmdu" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0cnuo36" sourceRef="ServiceTask_1a6cmdu" targetRef="ScriptTask_04rn9mp" />
+    <bpmn2:scriptTask id="ScriptTask_1pwo0jp" name="Prepare Resource Oper Status" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0e8oxe4</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0aylb6e</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddsi = new DoUpdateE2EServiceInstance()
+ddsi.preInitResourcesOperStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_0aylb6e" sourceRef="ScriptTask_1pwo0jp" targetRef="ServiceTask_1dqzdko" />
+    <bpmn2:serviceTask id="ServiceTask_1dqzdko" name="Init Resource Oper Status">
+      <bpmn2:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0aylb6e</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1r1hl23</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_1r1hl23" sourceRef="ServiceTask_1dqzdko" targetRef="ScriptTask_17ssed5" />
+    <bpmn2:sequenceFlow id="SequenceFlow_115mdln" sourceRef="StartEvent_StartResource" targetRef="Task_09laxun" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0yztz2p" sourceRef="Task_09laxun" targetRef="Task_1wyyy33" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0lblyhi" sourceRef="Task_1wyyy33" targetRef="Task_0ag30bf" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1fr4uwt" sourceRef="Task_0ag30bf" targetRef="IntermediateThrowEvent_GoToFinishProcess" />
+    <bpmn2:scriptTask id="ScriptTask_1xxvnst" name="PreProcess for Delete Resources" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1qn0865</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_14rubz2</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def csi = new  DoUpdateE2EServiceInstance()
+csi.preProcessForDeleteResource(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:callActivity id="CallActivity_0yphqzk" name="Call DoDeleteResources" calledElement="DoDeleteResources">
+      <bpmn2:extensionElements>
+        <camunda:in source="nsServiceName" target="nsServiceName" />
+        <camunda:in source="nsServiceDescription" target="nsServiceDescription" />
+        <camunda:in source="globalSubscriberId" target="globalSubscriberId" />
+        <camunda:in source="serviceType" target="serviceType" />
+        <camunda:in source="serviceId" target="serviceId" />
+        <camunda:in source="operationId" target="operationId" />
+        <camunda:in source="resourceType" target="resourceType" />
+        <camunda:in source="resourceUUID" target="resourceUUID" />
+        <camunda:in source="resourceParameters" target="resourceParameters" />
+        <camunda:in source="operationType" target="operationType" />
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_14rubz2</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0tm9bw9</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:scriptTask id="ScriptTask_00wgfrc" name="PostProcess for Delete Resource" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_0tm9bw9</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0ynd3rm</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def csi = new  DoUpdateE2EServiceInstance()
+csi.postProcessForDeleteResource(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_0h6d9jb" name="StartDeleteResources">
+      <bpmn2:outgoing>SequenceFlow_1qn0865</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="StartDeleteResources" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_1er2v7q" name="GoTo FinishProcess">
+      <bpmn2:incoming>SequenceFlow_0ynd3rm</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="FinishProcess" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_1qn0865" sourceRef="IntermediateCatchEvent_0h6d9jb" targetRef="ScriptTask_1xxvnst" />
+    <bpmn2:sequenceFlow id="SequenceFlow_14rubz2" sourceRef="ScriptTask_1xxvnst" targetRef="CallActivity_0yphqzk" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0tm9bw9" sourceRef="CallActivity_0yphqzk" targetRef="ScriptTask_00wgfrc" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0ynd3rm" sourceRef="ScriptTask_00wgfrc" targetRef="IntermediateThrowEvent_1er2v7q" />
+    <bpmn2:subProcess id="SubProcess_0roysbg" name="Sub-process for UnexpectedErrors" triggeredByEvent="true">
+      <bpmn2:startEvent id="StartEvent_0xtpw6j">
+        <bpmn2:outgoing>SequenceFlow_19sogyb</bpmn2:outgoing>
+        <bpmn2:errorEventDefinition />
+      </bpmn2:startEvent>
+      <bpmn2:scriptTask id="ScriptTask_0xk9fk3" name="Log / Print Unexpected Error" scriptFormat="groovy">
+        <bpmn2:incoming>SequenceFlow_19sogyb</bpmn2:incoming>
+        <bpmn2:outgoing>SequenceFlow_0ofhz2u</bpmn2:outgoing>
+        <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.common.scripts.*
+ExceptionUtil ex = new ExceptionUtil()
+ex.processJavaException(execution)]]></bpmn2:script>
+      </bpmn2:scriptTask>
+      <bpmn2:sequenceFlow id="SequenceFlow_19sogyb" name="" sourceRef="StartEvent_0xtpw6j" targetRef="ScriptTask_0xk9fk3" />
+      <bpmn2:endEvent id="EndEvent_05a2pr9">
+        <bpmn2:incoming>SequenceFlow_0ofhz2u</bpmn2:incoming>
+      </bpmn2:endEvent>
+      <bpmn2:sequenceFlow id="SequenceFlow_0ofhz2u" sourceRef="ScriptTask_0xk9fk3" targetRef="EndEvent_05a2pr9" />
+    </bpmn2:subProcess>
+    <bpmn2:scriptTask id="ScriptTask_0wl77h6" name="Post for Compare Model Versions" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_02d5ibj</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0l4gosl</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def csi = new  DoUpdateE2EServiceInstance()
+csi.postCompareModelVersions(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_0gk8ige" name="StartCompareModelVersions">
+      <bpmn2:outgoing>SequenceFlow_1vtlt1v</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="StartCompareModelVersions" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:scriptTask id="ScriptTask_1afvv50" name="Prepare for Compare Model Versions" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1vtlt1v</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0h40pn8</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def ddsi = new DoUpdateE2EServiceInstance()
+ddsi.preCompareModelVersions(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_02d5ibj" sourceRef="ServiceTask_02u5iza" targetRef="ScriptTask_0wl77h6" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1vtlt1v" sourceRef="IntermediateCatchEvent_0gk8ige" targetRef="ScriptTask_1afvv50" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0h40pn8" sourceRef="ScriptTask_1afvv50" targetRef="ServiceTask_02u5iza" />
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_09ur9ds" name="GoTo StartAddResources">
+      <bpmn2:incoming>SequenceFlow_0l4gosl</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="StartAddResource" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:sequenceFlow id="SequenceFlow_0l4gosl" sourceRef="ScriptTask_0wl77h6" targetRef="IntermediateThrowEvent_09ur9ds" />
+    <bpmn2:callActivity id="ServiceTask_02u5iza" name="Call DoCompareModelVersions" calledElement="DoCompareModelVersions">
+      <bpmn2:incoming>SequenceFlow_0h40pn8</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_02d5ibj</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_0cabwkq" name="GoTo UpdateResourceOperStatus">
+      <bpmn2:incoming>SequenceFlow_0wc7v9z</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="UpdateResourceOperStatus" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:callActivity id="CallActivity_18nvmnn" name="Call AAI Generic GetService" calledElement="GenericGetService">
+      <bpmn2:extensionElements>
+        <camunda:in source="serviceInstanceId" target="GENGS_serviceInstanceId" />
+        <camunda:in sourceExpression="service-instance" target="GENGS_type" />
+        <camunda:out source="GENGS_FoundIndicator" target="GENGS_FoundIndicator" />
+        <camunda:out source="GENGS_SuccessIndicator" target="GENGS_SuccessIndicator" />
+        <camunda:out source="WorkflowException" target="WorkflowException" />
+        <camunda:out source="GENGS_siResourceLink" target="GENGS_siResourceLink" />
+        <camunda:out source="GENGS_service" target="GENGS_service" />
+        <camunda:in source="globalSubscriberId" target="GENGS_globalCustomerId" />
+        <camunda:in source="serviceType" target="GENGS_serviceType" />
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_2</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0qg0uyn</bpmn2:outgoing>
+    </bpmn2:callActivity>
+    <bpmn2:sequenceFlow id="SequenceFlow_0qg0uyn" sourceRef="CallActivity_18nvmnn" targetRef="ScriptTask_0i8cqdy_PostProcessAAIGET" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0wc7v9z" sourceRef="ScriptTask_0i8cqdy_PostProcessAAIGET" targetRef="IntermediateThrowEvent_0cabwkq" />
+    <bpmn2:scriptTask id="ScriptTask_17ssed5" name="Post Resource Oper Status" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1r1hl23</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1i45vfx</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new DoUpdateE2EServiceInstance()
+dcsi.postResourcesOperStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_1i45vfx" sourceRef="ScriptTask_17ssed5" targetRef="IntermediateThrowEvent_1dwg5lz" />
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_1da7q01" name="GoToStartCompareModelVersions">
+      <bpmn2:incoming>SequenceFlow_16evvx4</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="StartCompareModelVersions" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_1uv1dxj" name="Update Resource Oper Status">
+      <bpmn2:outgoing>SequenceFlow_1sphzdm</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="UpdateResourceOperStatus" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:scriptTask id="ScriptTask_0acnvkp" name="Prepare Resource Oper Status(10%)" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1sphzdm</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0r6c0ci</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+execution.setVariable("progress", "10")
+def ddsi = new DoUpdateE2EServiceInstance()
+ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:serviceTask id="ServiceTask_17u9q9u" name="Init Resource Oper Status">
+      <bpmn2:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_0r6c0ci</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1muxopq</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:scriptTask id="ScriptTask_0r74c3c" name="Post Resource Oper Status" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1muxopq</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_16evvx4</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new DoUpdateE2EServiceInstance()
+dcsi.postResourcesOperStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_16evvx4" sourceRef="ScriptTask_0r74c3c" targetRef="IntermediateThrowEvent_1da7q01" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1sphzdm" sourceRef="IntermediateCatchEvent_1uv1dxj" targetRef="ScriptTask_0acnvkp" />
+    <bpmn2:sequenceFlow id="SequenceFlow_0r6c0ci" sourceRef="ScriptTask_0acnvkp" targetRef="ServiceTask_17u9q9u" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1muxopq" sourceRef="ServiceTask_17u9q9u" targetRef="ScriptTask_0r74c3c" />
+    <bpmn2:intermediateThrowEvent id="IntermediateThrowEvent_0vneaao" name="GoToStartCompareModelVersions">
+      <bpmn2:incoming>SequenceFlow_0s57qft</bpmn2:incoming>
+      <bpmn2:linkEventDefinition name="StartCompareModelVersions" />
+    </bpmn2:intermediateThrowEvent>
+    <bpmn2:intermediateCatchEvent id="IntermediateCatchEvent_0a418ef" name="Update Resource Oper Status">
+      <bpmn2:outgoing>SequenceFlow_02taco0</bpmn2:outgoing>
+      <bpmn2:linkEventDefinition name="UpdateResourceOperStatus" />
+    </bpmn2:intermediateCatchEvent>
+    <bpmn2:scriptTask id="ScriptTask_1na4qzo" name="Prepare Resource Oper Status(60%)" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_02taco0</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_07l3twh</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+execution.setVariable("progress", "60")
+def ddsi = new DoUpdateE2EServiceInstance()
+ddsi.preUpdateServiceOperationStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:serviceTask id="ServiceTask_0c13nyt" name="Init Resource Oper Status">
+      <bpmn2:extensionElements>
+        <camunda:connector>
+          <camunda:inputOutput>
+            <camunda:inputParameter name="url">${CVFMI_dbAdapterEndpoint}</camunda:inputParameter>
+            <camunda:inputParameter name="headers">
+              <camunda:map>
+                <camunda:entry key="content-type">application/soap+xml</camunda:entry>
+                <camunda:entry key="Authorization">Basic QlBFTENsaWVudDpwYXNzd29yZDEk</camunda:entry>
+              </camunda:map>
+            </camunda:inputParameter>
+            <camunda:inputParameter name="payload">${CVFMI_initResOperStatusRequest}</camunda:inputParameter>
+            <camunda:inputParameter name="method">POST</camunda:inputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponseCode">${statusCode}</camunda:outputParameter>
+            <camunda:outputParameter name="CVFMI_dbResponse">${response}</camunda:outputParameter>
+          </camunda:inputOutput>
+          <camunda:connectorId>http-connector</camunda:connectorId>
+        </camunda:connector>
+      </bpmn2:extensionElements>
+      <bpmn2:incoming>SequenceFlow_07l3twh</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_1eg944u</bpmn2:outgoing>
+    </bpmn2:serviceTask>
+    <bpmn2:scriptTask id="ScriptTask_0iq531p" name="Post Resource Oper Status" scriptFormat="groovy">
+      <bpmn2:incoming>SequenceFlow_1eg944u</bpmn2:incoming>
+      <bpmn2:outgoing>SequenceFlow_0s57qft</bpmn2:outgoing>
+      <bpmn2:script><![CDATA[import org.openecomp.mso.bpmn.infrastructure.scripts.*
+def dcsi = new DoUpdateE2EServiceInstance()
+dcsi.postResourcesOperStatus(execution)]]></bpmn2:script>
+    </bpmn2:scriptTask>
+    <bpmn2:sequenceFlow id="SequenceFlow_0s57qft" sourceRef="ScriptTask_0iq531p" targetRef="IntermediateThrowEvent_0vneaao" />
+    <bpmn2:sequenceFlow id="SequenceFlow_02taco0" sourceRef="IntermediateCatchEvent_0a418ef" targetRef="ScriptTask_1na4qzo" />
+    <bpmn2:sequenceFlow id="SequenceFlow_07l3twh" sourceRef="ScriptTask_1na4qzo" targetRef="ServiceTask_0c13nyt" />
+    <bpmn2:sequenceFlow id="SequenceFlow_1eg944u" sourceRef="ServiceTask_0c13nyt" targetRef="ScriptTask_0iq531p" />
+  </bpmn2:process>
+  <bpmn2:error id="Error_2" name="MSOWorkflowException" errorCode="MSOWorkflowException" />
+  <bpmn2:error id="Error_1" name="java.lang.Exception" errorCode="java.lang.Exception" />
+  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
+    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="DoUpdateE2EServiceInstance">
+      <bpmndi:BPMNShape id="_BPMNShape_StartEvent_47" bpmnElement="createSI_startEvent">
+        <dc:Bounds x="-14" y="334" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-20" y="375" width="50" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="_BPMNShape_ScriptTask_61" bpmnElement="preProcessRequest_ScriptTask">
+        <dc:Bounds x="293" y="312" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_47" targetElement="_BPMNShape_ScriptTask_61">
+        <di:waypoint xsi:type="dc:Point" x="22" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="352" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="112.5" y="337" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_3" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_ScriptTask_61" targetElement="CallActivity_18nvmnn_di">
+        <di:waypoint xsi:type="dc:Point" x="393" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="352" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="446" y="337" width="90" height="0" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0i8cqdy_di" bpmnElement="ScriptTask_0i8cqdy_PostProcessAAIGET">
+        <dc:Bounds x="858" y="312" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1azssf7_di" bpmnElement="Task_09laxun">
+        <dc:Bounds x="293" y="828" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_1v57nb9_di" bpmnElement="Task_1wyyy33">
+        <dc:Bounds x="589" y="828" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1fj89ew_di" bpmnElement="Task_0ag30bf">
+        <dc:Bounds x="858" y="828" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_04rn9mp_di" bpmnElement="ScriptTask_04rn9mp">
+        <dc:Bounds x="858" y="1208" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_0jks7by_di" bpmnElement="StartEvent_StartResource">
+        <dc:Bounds x="-14" y="850" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-38" y="895" width="84" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_0ys6800_di" bpmnElement="IntermediateThrowEvent_1dwg5lz">
+        <dc:Bounds x="1239" y="473" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1213" y="513" width="90" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1rebkae_di" bpmnElement="SequenceFlow_1rebkae">
+        <di:waypoint xsi:type="dc:Point" x="22" y="1248" />
+        <di:waypoint xsi:type="dc:Point" x="283" y="1248" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="107.5" y="1227" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_05z1jyy_di" bpmnElement="StartEvent_0jhv664">
+        <dc:Bounds x="-14" y="1230" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-31" y="1270" width="70" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_0x8im5g_di" bpmnElement="EndEvent_0x8im5g">
+        <dc:Bounds x="1239" y="1230" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1212" y="1270" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1lkpfe2_di" bpmnElement="SequenceFlow_1lkpfe2">
+        <di:waypoint xsi:type="dc:Point" x="958" y="1248" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="1248" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1053.5" y="1227" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_11jt9tx_di" bpmnElement="IntermediateThrowEvent_GoToFinishProcess">
+        <dc:Bounds x="1239" y="850" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1214" y="892" width="86" height="36" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_0v3ecwh_di" bpmnElement="StartEvent_1p7w4fj">
+        <dc:Bounds x="-14" y="473" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-38" y="513" width="86" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0e8oxe4_di" bpmnElement="SequenceFlow_0e8oxe4">
+        <di:waypoint xsi:type="dc:Point" x="22" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="158" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="158" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="491" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="128" y="485" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1wk7zcu_di" bpmnElement="ScriptTask_1wk7zcu">
+        <dc:Bounds x="283" y="1208" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_1a6cmdu_di" bpmnElement="ServiceTask_1a6cmdu">
+        <dc:Bounds x="589" y="1208" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0gr3l25_di" bpmnElement="SequenceFlow_0gr3l25">
+        <di:waypoint xsi:type="dc:Point" x="383" y="1248" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="1248" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="441" y="1227" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0cnuo36_di" bpmnElement="SequenceFlow_0cnuo36">
+        <di:waypoint xsi:type="dc:Point" x="689" y="1248" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="1248" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="728.5" y="1227" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1pwo0jp_di" bpmnElement="ScriptTask_1pwo0jp">
+        <dc:Bounds x="293" y="451" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0aylb6e_di" bpmnElement="SequenceFlow_0aylb6e">
+        <di:waypoint xsi:type="dc:Point" x="393" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="491" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="522" y="485" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ServiceTask_1dqzdko_di" bpmnElement="ServiceTask_1dqzdko">
+        <dc:Bounds x="589" y="451" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1r1hl23_di" bpmnElement="SequenceFlow_1r1hl23">
+        <di:waypoint xsi:type="dc:Point" x="689" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="491" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="728.5" y="470" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_115mdln_di" bpmnElement="SequenceFlow_115mdln">
+        <di:waypoint xsi:type="dc:Point" x="22" y="868" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="868" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="112.5" y="847" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0yztz2p_di" bpmnElement="SequenceFlow_0yztz2p">
+        <di:waypoint xsi:type="dc:Point" x="393" y="868" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="868" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="446" y="847" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0lblyhi_di" bpmnElement="SequenceFlow_0lblyhi">
+        <di:waypoint xsi:type="dc:Point" x="689" y="868" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="868" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="728.5" y="847" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1fr4uwt_di" bpmnElement="SequenceFlow_1fr4uwt">
+        <di:waypoint xsi:type="dc:Point" x="958" y="868" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="868" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1053.5" y="847" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_1xxvnst_di" bpmnElement="ScriptTask_1xxvnst">
+        <dc:Bounds x="293" y="1081" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_0yphqzk_di" bpmnElement="CallActivity_0yphqzk">
+        <dc:Bounds x="589" y="1081" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_00wgfrc_di" bpmnElement="ScriptTask_00wgfrc">
+        <dc:Bounds x="858" y="1081" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_0h6d9jb_di" bpmnElement="IntermediateCatchEvent_0h6d9jb">
+        <dc:Bounds x="-14" y="1103" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-38" y="1143" width="86" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_1er2v7q_di" bpmnElement="IntermediateThrowEvent_1er2v7q">
+        <dc:Bounds x="1239" y="1103" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1224" y="1143" width="70" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1qn0865_di" bpmnElement="SequenceFlow_1qn0865">
+        <di:waypoint xsi:type="dc:Point" x="22" y="1121" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="1121" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="112.5" y="1100" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_14rubz2_di" bpmnElement="SequenceFlow_14rubz2">
+        <di:waypoint xsi:type="dc:Point" x="393" y="1121" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="1121" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="446" y="1100" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0tm9bw9_di" bpmnElement="SequenceFlow_0tm9bw9">
+        <di:waypoint xsi:type="dc:Point" x="689" y="1121" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="1121" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="728.5" y="1100" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ynd3rm_di" bpmnElement="SequenceFlow_0ynd3rm">
+        <di:waypoint xsi:type="dc:Point" x="958" y="1121" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="1121" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1053.5" y="1100" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="SubProcess_0roysbg_di" bpmnElement="SubProcess_0roysbg" isExpanded="true">
+        <dc:Bounds x="-50" y="1386" width="1361" height="147" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="StartEvent_0xtpw6j_di" bpmnElement="StartEvent_0xtpw6j">
+        <dc:Bounds x="-14" y="1453" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-131" y="1494" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="EndEvent_05a2pr9_di" bpmnElement="EndEvent_05a2pr9">
+        <dc:Bounds x="1229" y="1453" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1112" y="1494" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0xk9fk3_di" bpmnElement="ScriptTask_0xk9fk3">
+        <dc:Bounds x="585" y="1431" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_19sogyb_di" bpmnElement="SequenceFlow_19sogyb">
+        <di:waypoint xsi:type="dc:Point" x="22" y="1471" />
+        <di:waypoint xsi:type="dc:Point" x="304" y="1471" />
+        <di:waypoint xsi:type="dc:Point" x="304" y="1471" />
+        <di:waypoint xsi:type="dc:Point" x="585" y="1471" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="274" y="1465" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_0wl77h6_di" bpmnElement="ScriptTask_0wl77h6">
+        <dc:Bounds x="858" y="600" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_0gk8ige_di" bpmnElement="IntermediateCatchEvent_0gk8ige">
+        <dc:Bounds x="-14" y="622" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-38" y="684" width="89" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1afvv50_di" bpmnElement="ScriptTask_1afvv50">
+        <dc:Bounds x="293" y="600" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_02d5ibj_di" bpmnElement="SequenceFlow_02d5ibj">
+        <di:waypoint xsi:type="dc:Point" x="689" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="774" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="774" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="640" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="744" y="593" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1vtlt1v_di" bpmnElement="SequenceFlow_1vtlt1v">
+        <di:waypoint xsi:type="dc:Point" x="22" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="640" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="112.5" y="578" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0h40pn8_di" bpmnElement="SequenceFlow_0h40pn8">
+        <di:waypoint xsi:type="dc:Point" x="393" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="640" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="446" y="578" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_09ur9ds_di" bpmnElement="IntermediateThrowEvent_09ur9ds">
+        <dc:Bounds x="1239" y="622" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1215" y="663" width="84" height="36" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0l4gosl_di" bpmnElement="SequenceFlow_0l4gosl">
+        <di:waypoint xsi:type="dc:Point" x="958" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="1098" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="1098" y="640" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="640" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1068" y="593" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="CallActivity_00ftzjj_di" bpmnElement="ServiceTask_02u5iza">
+        <dc:Bounds x="589" y="600" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_0nf1193_di" bpmnElement="IntermediateThrowEvent_0cabwkq">
+        <dc:Bounds x="1235" y="334" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1215" y="374" width="83" height="36" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="CallActivity_18nvmnn_di" bpmnElement="CallActivity_18nvmnn">
+        <dc:Bounds x="589" y="312" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0qg0uyn_di" bpmnElement="SequenceFlow_0qg0uyn">
+        <di:waypoint xsi:type="dc:Point" x="689" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="352" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="728.5" y="331" width="90" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0wc7v9z_di" bpmnElement="SequenceFlow_0wc7v9z">
+        <di:waypoint xsi:type="dc:Point" x="958" y="352" />
+        <di:waypoint xsi:type="dc:Point" x="1235" y="352" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1096.5" y="331" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="ScriptTask_17ssed5_di" bpmnElement="ScriptTask_17ssed5">
+        <dc:Bounds x="858" y="451" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_1i45vfx_di" bpmnElement="SequenceFlow_1i45vfx">
+        <di:waypoint xsi:type="dc:Point" x="958" y="491" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="491" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1098.5" y="470" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_1da7q01_di" bpmnElement="IntermediateThrowEvent_1da7q01">
+        <dc:Bounds x="1239" y="718" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1212" y="760" width="90" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_1uv1dxj_di" bpmnElement="IntermediateCatchEvent_1uv1dxj">
+        <dc:Bounds x="-14" y="718" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-36" y="760" width="86" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0acnvkp_di" bpmnElement="ScriptTask_0acnvkp">
+        <dc:Bounds x="293" y="696" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_17u9q9u_di" bpmnElement="ServiceTask_17u9q9u">
+        <dc:Bounds x="589" y="696" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0r74c3c_di" bpmnElement="ScriptTask_0r74c3c">
+        <dc:Bounds x="858" y="696" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_16evvx4_di" bpmnElement="SequenceFlow_16evvx4">
+        <di:waypoint xsi:type="dc:Point" x="958" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="736" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1098.5" y="753" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1sphzdm_di" bpmnElement="SequenceFlow_1sphzdm">
+        <di:waypoint xsi:type="dc:Point" x="22" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="158" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="158" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="736" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="173" y="768" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0r6c0ci_di" bpmnElement="SequenceFlow_0r6c0ci">
+        <di:waypoint xsi:type="dc:Point" x="393" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="736" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="567" y="768" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1muxopq_di" bpmnElement="SequenceFlow_1muxopq">
+        <di:waypoint xsi:type="dc:Point" x="689" y="736" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="736" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="773.5" y="753" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNShape id="IntermediateThrowEvent_0vneaao_di" bpmnElement="IntermediateThrowEvent_0vneaao">
+        <dc:Bounds x="1239" y="948" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1213" y="988" width="90" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="IntermediateCatchEvent_0a418ef_di" bpmnElement="IntermediateCatchEvent_0a418ef">
+        <dc:Bounds x="-14" y="948" width="36" height="36" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="-38" y="988" width="86" height="24" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_1na4qzo_di" bpmnElement="ScriptTask_1na4qzo">
+        <dc:Bounds x="293" y="926" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ServiceTask_0c13nyt_di" bpmnElement="ServiceTask_0c13nyt">
+        <dc:Bounds x="589" y="926" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNShape id="ScriptTask_0iq531p_di" bpmnElement="ScriptTask_0iq531p">
+        <dc:Bounds x="858" y="926" width="100" height="80" />
+      </bpmndi:BPMNShape>
+      <bpmndi:BPMNEdge id="SequenceFlow_0s57qft_di" bpmnElement="SequenceFlow_0s57qft">
+        <di:waypoint xsi:type="dc:Point" x="958" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="1239" y="966" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="1098.5" y="945" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_02taco0_di" bpmnElement="SequenceFlow_02taco0">
+        <di:waypoint xsi:type="dc:Point" x="22" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="158" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="158" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="293" y="966" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="128" y="960" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_07l3twh_di" bpmnElement="SequenceFlow_07l3twh">
+        <di:waypoint xsi:type="dc:Point" x="393" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="552" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="589" y="966" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="522" y="960" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_1eg944u_di" bpmnElement="SequenceFlow_1eg944u">
+        <di:waypoint xsi:type="dc:Point" x="689" y="966" />
+        <di:waypoint xsi:type="dc:Point" x="858" y="966" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="728.5" y="945" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+      <bpmndi:BPMNEdge id="SequenceFlow_0ofhz2u_di" bpmnElement="SequenceFlow_0ofhz2u">
+        <di:waypoint xsi:type="dc:Point" x="685" y="1471" />
+        <di:waypoint xsi:type="dc:Point" x="1229" y="1471" />
+        <bpmndi:BPMNLabel>
+          <dc:Bounds x="957" y="1450" width="0" height="12" />
+        </bpmndi:BPMNLabel>
+      </bpmndi:BPMNEdge>
+    </bpmndi:BPMNPlane>
+  </bpmndi:BPMNDiagram>
+</bpmn2:definitions>
diff --git a/common/src/main/resources/ASDC.properties b/common/src/main/resources/ASDC.properties
index 4f3864d..5f4f0ba 100644
--- a/common/src/main/resources/ASDC.properties
+++ b/common/src/main/resources/ASDC.properties
@@ -51,7 +51,7 @@
                   MSO-ASDC-5301W|\
                   WARNING: {0}|\
                   Please check other logs for more detailed info|\
-                  General warning 
+                  General warning
 ASDC_AUDIT_EXEC=\
                   MSO-ASDC-5302I|\
                   Executing method: {0}. {1}|\
@@ -61,77 +61,77 @@
                   MSO-ASDC-5305I|\
                   Executed method: {0}. {1}|\
                   No resolution needed|\
-                  Generate information for Metric events 
+                  Generate information for Metric events
 ASDC_CREATE_SERVICE=\
                   MSO-ASDC-5306I|\
                   Creating new VNF Resource for service {0} with id {1} and version {2}|\
                   No resolution needed|\
-                  Method triggered to create new VNF Resource                                                                                                                                                                                                                                                                                                                                     
+                  Method triggered to create new VNF Resource
 ASDC_CREATE_ARTIFACT=\
                   MSO-ASDC-5307I|\
                   Installing new {0} for service {1} with id {2} and version {3}|\
                   No resolution needed|\
-                  Method triggered to create new VNF Resource   
+                  Method triggered to create new VNF Resource
 ASDC_ARTIFACT_ALREADY_DEPLOYED=\
                   MSO-ASDC-5308W|\
                   Constraint violation caught, artifact is already deployed {0} and version {1}|\
                   No resolution needed|\
-                  Artifact is already deployed   
+                  Artifact is already deployed
 ASDC_ARTIFACT_INSTALL_EXC=\
                   MSO-ASDC-5309E|\
                   Exception caught during installation of the {0}. Transaction rollback.|\
                   Please check other logs for more detailed info|\
-                  Exception caught during installation of the artifact   
+                  Exception caught during installation of the artifact
 ASDC_CHECK_HEAT_TEMPLATE=\
                   MSO-ASDC-5310I|\
                   Start to verify whether {0} with name {1} and version {2} is already deployed|\
                   No resolution needed|\
-                  Check artifact  
+                  Check artifact
 ASDC_ARTIFACT_ALREADY_DEPLOYED_DETAIL=\
                   MSO-ASDC-5311I|\
                   ResourceInstanceName:{0} (ResourceUUID:{1}) is already deployed for this Service:{2}/{3}(ServiceUUID:{4}) (ResourceName: {5})|\
                   No resolution needed|\
-                  Resource is already deployed  
+                  Resource is already deployed
 ASDC_ARTIFACT_NOT_DEPLOYED_DETAIL=\
                   MSO-ASDC-5312I|\
                  ResourceInstanceName:{0} (ResourceUUID:{1}) is not yet deployed for this Service:{2}/{3}(ServiceUUID:{4}) (ResourceName: {5})|\
                   No resolution needed|\
-                  Resource is not yet deployed  
+                  Resource is not yet deployed
 ASDC_INIT_ASDC_CLIENT_EXC=\
                   MSO-ASDC-5314W|\
                   ASDControllerException caught during the Init/closing of ASDC Client with address {0} and environment {1}|\
                   Please check other logs for more detailed info|\
-                  ASDControllerException caught during the Init/closing of ASDC Client      
+                  ASDControllerException caught during the Init/closing of ASDC Client
 ASDC_LOAD_ASDC_CLIENT_EXC=\
                   MSO-ASDC-5315W|\
                   ASDCParametersException caught during loading/reloading of the ASDC Client with address {0} and environment {1}|\
                   Please check other logs for more detailed info|\
-                  ASDCParametersException caught during loading/reloading of the ASDC Client                    
+                  ASDCParametersException caught during loading/reloading of the ASDC Client
 ASDC_SHUTDOWN_ASDC_CLIENT_EXC=\
                   MSO-ASDC-5317W|\
                   {0} caught during the ASDC Controller with address {1} and environment {2} shutdown|\
                   Please check other logs for more detailed info|\
-                  Exception caught during the ASDC Controller shutdown  
+                  Exception caught during the ASDC Controller shutdown
 ASDC_START_INSTALL_ARTIFACT=\
                   MSO-ASDC-5318I|\
                   Trying to install the artifact:{0}|\
                   No resolution needed|\
-                  Trying to install the artifact  
+                  Trying to install the artifact
 ASDC_ARTIFACT_TYPE_NOT_SUPPORT=\
                   MSO-ASDC-5319W|\
                   This artifact type is not supported:{0}|\
                   No resolution needed|\
-                  Artifact type is not supported  
+                  Artifact type is not supported
 ASDC_ARTIFACT_ALREADY_EXIST=\
                   MSO-ASDC-5320I|\
                   No need to download the artifact as it exists already in MSO:{0} (UUID:{1}) associated to ResourceName {2}|\
                   No resolution needed|\
-                  Artifact already exists                   
+                  Artifact already exists
 ASDC_ARTIFACT_DOWNLOAD_SUC=\
                   MSO-ASDC-5321I|\
                   Artifact successfully downloaded:{0} (UUID:{1}) (SIZE in Bytes:{2})|\
                   No resolution needed|\
-                  Artifact successfully downloaded   
+                  Artifact successfully downloaded
 ASDC_ARTIFACT_DOWNLOAD_FAIL=\
                   MSO-ASDC-5322E|\
                   Artifact :{0} could not be downloaded correctly from ASDC URL {1} (UUID:{2}) Error message is {3})|\
@@ -141,47 +141,47 @@
                   MSO-ASDC-5323I|\
                   Trying to deploy the artifact:{0} (UUID:{1})|\
                   No resolution needed|\
-                  Trying to deploy the artifact                                       
+                  Trying to deploy the artifact
 ASDC_ARTIFACT_DEPLOY_SUC=\
                   MSO-ASDC-5324I|\
                   Resource successfully installed:{0} (UUID:{1}) (Nb of Modules:{2})|\
                   No resolution needed|\
-                  Resource successfully installed  
+                  Resource successfully installed
 ASDC_SEND_NOTIF_ASDC=\
                   MSO-ASDC-5325I|\
                   Sending {0} ({1}) notification to ASDC for artifact:{2}|\
                   No resolution needed|\
-                  Sending notif to ASDC  
+                  Sending notif to ASDC
 ASDC_SEND_NOTIF_ASDC_EXEC=\
                   MSO-ASDC-5326W|\
                   Exception caught when trying to notify ASDC|\
                   Please check other logs for more detailed info|\
-                  Exception caught when trying to notify ASDC 
+                  Exception caught when trying to notify ASDC
 ASDC_RECEIVE_CALLBACK_NOTIF=\
                   MSO-ASDC-5327I|\
                   Receive a callback notification in ASDC, nb of artifacts: {0} (ServiceUUID:{1})|\
                   No resolution needed|\
-                  Receive a callback notification in ASDC  
+                  Receive a callback notification in ASDC
 ASDC_RECEIVE_SERVICE_NOTIF=\
                   MSO-ASDC-5328I|\
                   Notification is ServiceVNF, (ServiceUUID:{0})|\
                   No resolution needed|\
-                  Receive a callback notification for ServiceVNF 
+                  Receive a callback notification for ServiceVNF
 ASDC_ARTIFACT_NULL=\
                   MSO-ASDC-5329I|\
                   Nothing to deploy artifact is NULL, (ServiceUUID:{0})|\
                   No resolution needed|\
-                  Nothing to deploy artifact is NULL 
+                  Nothing to deploy artifact is NULL
 ASDC_SERVICE_NOT_SUPPORT=\
                   MSO-ASDC-5330W|\
                   Notification received, (ServiceUUID:{0}) is not a ServiceVNF and is therefore skipped|\
                   No resolution needed|\
-                  Service not support 
+                  Service not support
 ASDC_INIT_ASDC_CLIENT_SUC=\
                   MSO-ASDC-5331I|\
                   ASDC Controller successfully initialized|\
                   No resolution needed|\
-                  ASDC client initialized  
+                  ASDC client initialized
 ASDC_GENERAL_EXCEPTION_ARG=\
                   MSO-ASDC-9300E|\
                   Exception: {0}|\
@@ -212,4 +212,4 @@
                   MSO-ASDC-9305I|\
                   INFO: {0}|\
                   No resolution needed|\
-                  General Info 
+                  General Info
diff --git a/common/src/main/resources/ApiHandler.properties b/common/src/main/resources/ApiHandler.properties
index 82d452a..60ecf94 100644
--- a/common/src/main/resources/ApiHandler.properties
+++ b/common/src/main/resources/ApiHandler.properties
@@ -81,12 +81,12 @@
                   MSO-APIH-3008E|\
                   Unable to update record to DB: {0}|\
                   Please check other logs for more detailed info|\
-                  Unable to insert record to DB                                                                              
+                  Unable to insert record to DB
 APIH_VALIDATION_ERROR=\
                   MSO-APIH-4000E|\
                   Validation failed|\
                   Please check other logs for more detailed info|\
-                  Validation failed   
+                  Validation failed
 APIH_REQUEST_VALIDATION_ERROR=\
                   MSO-APIH-4001E|\
                   Validation of the input request failed, for incoming request:{0}|\
@@ -96,17 +96,17 @@
                   MSO-APIH-4002E|\
                   Service params failed schema validation|\
                   Please check other logs for more detailed info|\
-                  Service params failed schema validation  
+                  Service params failed schema validation
 APIH_REQUEST_VALIDATION_ERROR_REASON=\
                   MSO-APIH-4003E|\
                   Validation of the input request failed:{0}|\
                   Please verify the input request|\
-                  Validation of the input request failed 
+                  Validation of the input request failed
 APIH_VNFREQUEST_VALIDATION_ERROR=\
                   MSO-APIH-4004E|\
                   Validation of the VNF Request failed|\
                   Please verify the VNF Request|\
-                  Validation of the VNF Request failed                                                           
+                  Validation of the VNF Request failed
 APIH_QUERY_PARAM_WRONG=\
                   MSO-APIH-5003W|\
                   Bad Request: {0}|\
@@ -116,7 +116,7 @@
                   MSO-APIH-5004W|\
                   WARNING: {0}|\
                   Please check other logs for more detailed info|\
-                  General warning 
+                  General warning
 APIH_AUDIT_EXEC=\
                   MSO-APIH-5005I|\
                   Executing request: {0}. {1}|\
@@ -126,32 +126,32 @@
                   MSO-APIH-5008I|\
                   Executed method: {0}. {1}|\
                   No resolution needed|\
-                  Generate information for Metric events   
+                  Generate information for Metric events
 APIH_REQUEST_NULL=\
 				          MSO-APIH-5009W|\
                   The request received by MSO is null|\
                   Please check other logs for more detailed info|\
-                  The request received by MSO is null  
+                  The request received by MSO is null
 APIH_DUPLICATE_FOUND=\
 				          MSO-APIH-5011W|\
                   Duplicated request found: {0}|\
                   Please check other logs for more detailed info|\
-                  Duplicated request found 
+                  Duplicated request found
 APIH_BAD_ORDER=\
 				          MSO-APIH-5012W|\
                   Request received with wrong order: {0}|\
                   Please check other logs for more detailed info|\
-                  Request received with wrong order                        
+                  Request received with wrong order
 APIH_BPEL_RESPONSE_ERROR=\
 				          MSO-APIH-5014E|\
                   Abnormal response received from BPEL server: {0}|\
                   Please check other logs for more detailed info|\
-                  Abnormal response received from BPEL server  
+                  Abnormal response received from BPEL server
 APIH_WARP_REQUEST=\
 				          MSO-APIH-5015E|\
                   Error wrapping request|\
                   Please check other logs for more detailed info|\
-                  Error wrapping request to be sent to BPEL server   
+                  Error wrapping request to be sent to BPEL server
 APIH_ERROR_FROM_BPEL_SERVER=\
 				          MSO-APIH-5016E|\
                   Error from {0} with status:{1} and responseBody:{2}|\
@@ -161,12 +161,12 @@
 				          MSO-APIH-5017E|\
                   MSO Configuration Error - Unable to read the schema file|\
                   Please check other logs for more detailed info|\
-                  MSO Configuration Error - Unable to read the schema file  
+                  MSO Configuration Error - Unable to read the schema file
 APIH_PROPERTY_LOAD_SUC=\
 				          MSO-APIH-5018I|\
                   Properties file loaded successfully|\
                   No resolution needed|\
-                  Properties file loaded successfully   
+                  Properties file loaded successfully
 APIH_NO_PROPERTIES=\
 				          MSO-APIH-5019E|\
                   Missing or invalid properties file: {0}|\
@@ -201,7 +201,7 @@
                   MSO-APIH-9001E|\
                   Exception encountered|\
                   Please check other logs for more detailed info|\
-                  Exception encountered   
+                  Exception encountered
 APIH_HEALTH_CHECK_EXCEPTION=\
                   MSO-APIH-9002E|\
                   Exception during health check|\
@@ -221,27 +221,27 @@
 				          MSO-APIH-9005E|\
                   Exception during BPEL POST|\
                   Please check other logs for more detailed info|\
-                  Exception during BPEL POST 
+                  Exception during BPEL POST
 APIH_SDNC_COMMUNICATE_ERROR=\
 				          MSO-APIH-9006E|\
                   Exception when sending HTTP POST request to SDNC Adapter|\
                   Please check other logs for more detailed info|\
-                  Exception when sending HTTP POST request to SDNC Adapter 
+                  Exception when sending HTTP POST request to SDNC Adapter
 APIH_SDNC_RESPONSE_ERROR=\
 				          MSO-APIH-9007E|\
                   IOException getting SDNC Adapter response body|\
                   Please check other logs for more detailed info|\
-                  IOException getting SDNC Adapter response body 
+                  IOException getting SDNC Adapter response body
 APIH_JAXB_MARSH_ERROR=\
 				          MSO-APIH-9008E|\
                   Exception when translating query results into string with Jaxb|\
                   Please check other logs for more detailed info|\
-                  Exception when translating query results into string with Jaxb 
+                  Exception when translating query results into string with Jaxb
 APIH_JAXB_UNMARSH_ERROR=\
 				          MSO-APIH-9009E|\
                   Exception when formatting for VNF outputs with Jaxb|\
                   Please check other logs for more detailed info|\
-                  Exception when formatting for VNF outputs  
+                  Exception when formatting for VNF outputs
 APIH_DOM2STR_ERROR=\
 				          MSO-APIH-9010E|\
                   Error converting xml Document to String|\
diff --git a/common/src/main/resources/BPMN.properties b/common/src/main/resources/BPMN.properties
index 9e8a7e7..848135e 100644
--- a/common/src/main/resources/BPMN.properties
+++ b/common/src/main/resources/BPMN.properties
@@ -51,12 +51,12 @@
                   MSO-BPEL-5100I|\
                   INFO: {0}|\
                   No resolution needed|\
-                  General info 
+                  General info
 BPMN_GENERAL_WARNING=\
                   MSO-BPEL-5101W|\
                   WARNING: {0}|\
                   Please check other logs for more information|\
-                  General warning 
+                  General warning
 BPMN_AUDIT_EXEC=\
                   MSO-BPEL-5102I|\
                   Executing method: {0}. {1}|\
@@ -76,7 +76,7 @@
                   MSO-BPEL-5107W|\
                   Variable {0} is null; skipped|\
                   No resolution needed|\
-                  Variable is null                                                                                                                                            
+                  Variable is null
 BPMN_GENERAL_EXCEPTION_ARG=\
                   MSO-BPEL-9100E|\
                   Exception: {0}|\
@@ -86,7 +86,7 @@
                   MSO-BPEL-9101E|\
                   Exception encountered|\
                   Please check other logs for more information|\
-                  Exception encountered        
+                  Exception encountered
 BPMN_CALLBACK_EXCEPTION=\
                   MSO-BPEL-9102E|\
                   {0} Exception occurred processing callback to BPMN process {1}|\
diff --git a/common/src/main/resources/GenericMessages.properties b/common/src/main/resources/GenericMessages.properties
index 2640323..a9aa13f 100644
--- a/common/src/main/resources/GenericMessages.properties
+++ b/common/src/main/resources/GenericMessages.properties
@@ -51,52 +51,52 @@
                   MSO-GENERAL-5401W|\
                   WARNING: {0}|\
                   Please check other logs for more detailed info|\
-                  General warning 
+                  General warning
 AUDIT_EXEC=\
                   MSO-GENERAL-5402I|\
                   Executing method: {0}. {1}|\
                   No resolution needed|\
-                  Executing method 
+                  Executing method
 GENERAL_METRICS=\
                   MSO-GENERAL-5405I|\
                   Executed method: {0}. {1}|\
                   No resolution needed|\
-                  Generate information for Metric events       
+                  Generate information for Metric events
 LOGGER_SETUP=\
                   MSO-GENERAL-5406I|\
                   Request received to update logger level|\
                   No resolution needed|\
-                  Request received to update logger level 
+                  Request received to update logger level
 LOGGER_NOT_FOUND=\
                   MSO-GENERAL-5407I|\
                   Logger Servlet: Logger not found: : {0}|\
                   No resolution needed|\
-                  Logger not found 
+                  Logger not found
 LOGGER_UPDATE_SUC=\
                   MSO-GENERAL-5408I|\
                   Successfully update Logger: {0} from level {1} to level {2}|\
                   No resolution needed|\
-                  Generate information for Metric events    
+                  Generate information for Metric events
 LOGGER_UPDATE_DEBUG=\
                   MSO-GENERAL-5409I|\
                   Request received to update debug mode|\
                   No resolution needed|\
-                  Request received to update debug mode   
+                  Request received to update debug mode
 LOGGER_UPDATE_DEBUG_SUC=\
                   MSO-GENERAL-5410I|\
                   Successfully {0} debug mode|\
                   No resolution needed|\
-                  Successfully updated debug mode    
+                  Successfully updated debug mode
 LOAD_PROPERTIES_SUC=\
                   MSO-GENERAL-5411I|\
                   Properties file loaded successfully from file {0}|\
                   No resolution needed|\
-                  Properties file loaded successfully   
+                  Properties file loaded successfully
 NO_PROPERTIES=\
                   MSO-GENERAL-5412E|\
                   Missing or invalid properties file: {0}|\
                   Please verify whether properties file exist or readable|\
-                  Missing or invalid properties file   
+                  Missing or invalid properties file
 LOAD_PROPERTIES_FAIL=\
                   MSO-GENERAL-5413E|\
                   Failed loading properties file: {0}|\
@@ -106,17 +106,17 @@
                   MSO-GENERAL-5414I|\
                   Prepare to initialize loggers from {0}|\
                   No resolution needed|\
-                  Prepare to initialize loggers    
+                  Prepare to initialize loggers
 MADATORY_PARAM_MISSING=\
                   MSO-GENERAL-5415E|\
                   Not able to get mandatory parameter: {0} from file {1}|\
                   No resolution needed|\
-                  Mandatory parameter missing                      
+                  Mandatory parameter missing
 IDENTITY_SERVICE_NOT_FOUND=\
                   MSO-GENERAL-5416E|\
                   Identity service not found: region={0} ,cloud={1}|\
                   Please check other logs for more detailed info|\
-                  Identity service not found                                                                                                                                                                                                                                                                                                                                     
+                  Identity service not found
 GENERAL_EXCEPTION_ARG=\
                   MSO-GENERAL-9400E|\
                   Exception: {0}|\
@@ -126,7 +126,7 @@
                   MSO-GENERAL-9401E|\
                   Exception encountered|\
                   Please check other logs for more detailed info|\
-                  Exception encountered 
+                  Exception encountered
 INIT_LOGGER_FAIL=\
                   MSO-GENERAL-9402E|\
                   Failed to initialize loggers|\
diff --git a/common/src/main/resources/ResourceAdapter.properties b/common/src/main/resources/ResourceAdapter.properties
index 0dbbb3c..8eed385 100644
--- a/common/src/main/resources/ResourceAdapter.properties
+++ b/common/src/main/resources/ResourceAdapter.properties
@@ -56,42 +56,42 @@
                   MSO-RA-2201E|\
                   Delete Stack - Polling timeout exceeded. cloud={0}, tenant={1}, stack={2}, status={3}|\
                   Please check other logs for more detailed info|\
-                  Delete Stack timeout  
+                  Delete Stack timeout
 RA_UPDATE_STACK_TIMEOUT=\
                   MSO-RA-2202E|\
                   Update Stack - Polling timeout exceeded. cloud={0}, tenant={1}, stack={2}, status={3}|\
                   Please check other logs for more detailed info|\
-                  Delete Stack timeout   
+                  Delete Stack timeout
 RA_MISSING_PARAM=\
                   MSO-RA-4200I|\
                   Missing Required parameter: {0}|\
                   No resolution needed|\
-                  Mandatory Parameter Missing  
+                  Mandatory Parameter Missing
 RA_PARSING_ERROR=\
                   MSO-RA-4201E|\
                   Error parsing file {0}|\
                   No resolution needed|\
-                  Error parsing file                     
+                  Error parsing file
 RA_MARSHING_ERROR=\
                   MSO-RA-4202E|\
                   Error marshalling callback request with JaxB|\
                   Please check other logs for more detailed info|\
-                  Error marshalling callback request 
+                  Error marshalling callback request
 RA_PARSING_REQUEST_ERROR=\
                   MSO-RA-4203E|\
                   Error parsing request:{0}|\
                   Please check other logs for more detailed info|\
-                  Error parsing request                                                        
+                  Error parsing request
 RA_VLAN_PARSE=\
                   MSO-RA-4204E|\
                   Error parsing VLAN parameter in network stack {0}:{1}|\
                   Please check other logs for more detailed info|\
-                  Error parsing VLAN parameter in network stack 
+                  Error parsing VLAN parameter in network stack
 RA_GENERAL_WARNING=\
                   MSO-RA-5201W|\
                   WARNING: {0}|\
                   Please check other logs for more detailed info|\
-                  General warning 
+                  General warning
 RA_AUDIT_EXEC=\
                   MSO-RA-5202I|\
                   Executing method: {0}. {1}|\
@@ -101,52 +101,52 @@
                   MSO-RA-5205I|\
                   Executed method: {0}. {1}|\
                   No resolution needed|\
-                  Generate information for Metric events  
+                  Generate information for Metric events
 RA_PROPERTIES_NOT_FOUND=\
                   MSO-RA-5206E|\
                   Properties file: {0} not found|\
                   Please verify whether properties file exist or readable|\
-                  Properties file not found 
+                  Properties file not found
 RA_LOAD_PROPERTIES_SUC=\
                   MSO-RA-5207I|\
                   Properties file loaded successfully from file {0}|\
                   No resolution needed|\
-                  Properties file loaded successfully     
+                  Properties file loaded successfully
 RA_PARAM_NOT_FOUND=\
                   MSO-RA-5208E|\
                   Attribute {0} not found in DB. For {1}={2}|\
                   No resolution needed|\
-                  Attribute not found in DB    
+                  Attribute not found in DB
 RA_UNKOWN_PARAM=\
                   MSO-RA-5209E|\
                   Unknown {0}:{1}|\
                   Please check other logs for more detailed info|\
-                  Unknown attribute  
+                  Unknown attribute
 RA_CONFIG_EXC=\
                   MSO-RA-5210E|\
                   Configuration error:{0}|\
                   Please check other logs for more detailed info|\
-                  Configuration Error  
+                  Configuration Error
 RA_CONFIG_NOT_FOUND=\
                   MSO-RA-5211E|\
                   Could not found configuration file:{0}|\
                   Please verify whether configuration file exist or readable|\
-                  Configuration file not found                    
+                  Configuration file not found
 RA_SEND_REQUEST_SDNC=\
                   MSO-RA-5212I|\
                   Sending request to SDNC:{0}|\
                   No resolution needed|\
-                  Sending request to SDNC      
+                  Sending request to SDNC
 RA_RESPONSE_FROM_SDNC=\
                   MSO-RA-5213I|\
                   Response received from SDNC:{0}|\
                   No resolution needed|\
-                  Response received from SDNC     
+                  Response received from SDNC
 RA_CALLBACK_BPEL=\
                   MSO-RA-5218E|\
                   Callback to BPEL:{0} |\
                   Please check other logs for more detailed info|\
-                  Callback to BPEL       
+                  Callback to BPEL
 RA_NETWORK_ALREADY_EXIST=\
                   MSO-RA-5240W|\
                   Network already exists: {0} in {1}/{2}|\
@@ -156,117 +156,117 @@
                   MSO-RA-5241E|\
                   Network doesn't exist: {0} in {1}/{2}|\
                   Please check other logs for more detailed info|\
-                  Network doesn't exist  
+                  Network doesn't exist
 RA_NETWORK_ORCHE_MODE_NOT_SUPPORT=\
                   MSO-RA-5243E|\
                   Network Type Orchestrated mode:{0} is not supported|\
                   Please check other logs for more detailed info|\
-                  Network Type Orchestrated mode                                                                                                                          
+                  Network Type Orchestrated mode
 RA_ROLLBACK_NULL=\
                   MSO-RA-5249W|\
                   Rollback: No action to perform|\
                   No resolution needed|\
-                  Rollback: No action to perform                                                                 
+                  Rollback: No action to perform
 RA_ASYNC_ROLLBACK=\
                   MSO-RA-5251I|\
                   Async Rollback Network {0}|\
                   No resolution needed|\
-                  Async Rollback Network  
+                  Async Rollback Network
 RA_WSDL_NOT_FOUND=\
                   MSO-RA-5252E|\
                   Unable to find wsdl file {0} in classpath|\
                   No resolution needed|\
-                  Unable to find wsdl file in classpath                                                                                       
+                  Unable to find wsdl file in classpath
 RA_CALLBACK_BPEL_COMPLETE=\
                   MSO-RA-5258I|\
                   Completed processing BPEL request|\
                   No resolution needed|\
-                  Completed processing BPEL request  
+                  Completed processing BPEL request
 RA_SDNC_MISS_CONFIG_PARAM=\
                   MSO-RA-5259E|\
                   Missing configuration for:{0}|\
                   Please check other logs for more detailed info|\
-                  Missing configuration for  
+                  Missing configuration for
 RA_SDNC_INVALID_CONFIG=\
                   MSO-RA-5260W|\
                   Invalid configuration(most requests require atleast 3 params:method,timeout,action) for Key:{0} Value:{1}|\
                   Please check other logs for more detailed info|\
-                  Invalid configuration                    
+                  Invalid configuration
 RA_TENANT_NOT_FOUND=\
                   MSO-RA-5263E|\
                   Tenant not found: tenant={0}, cloudSiteId={1}|\
                   Please check other logs for more detailed info|\
-                  Tenant not found     
+                  Tenant not found
 RA_PRINT_URL=\
                   MSO-RA-5264I|\
                   {0} URL:{1}|\
                   No resolution needed|\
-                  Log the URL    
+                  Log the URL
 RA_RECEIVE_SDNC_NOTIF=\
                   MSO-RA-5268I|\
                   Received SDNC Notification. XML:{0}|\
                   No resolution needed|\
-                  Received SDNC Notification   
+                  Received SDNC Notification
 RA_INIT_SDNC_ADAPTER=\
                   MSO-RA-5269I|\
                   Initializing mso-sdnc-adapter|\
                   No resolution needed|\
-                  Initializing mso-sdnc-adapter     
+                  Initializing mso-sdnc-adapter
 RA_RECEIVE_BPEL_REQUEST=\
                   MSO-RA-5270I|\
                   BPEL request received [{0}] with callback URL [{1}]|\
                   No resolution needed|\
-                  BPEL request received  
+                  BPEL request received
 RA_SEND_REQUEST_SDNC_ERR=\
                   MSO-RA-5271E|\
                   Error sending request to SDNC. Failed to start SDNC Client thread|\
                   Please check other logs for more detailed info|\
-                  Error sending request to SDNC         
+                  Error sending request to SDNC
 RA_TENANT_ALREADY_EXIST=\
                   MSO-RA-5272E|\
                   Tenant {0} already exists in {1}|\
                   No resolution needed|\
-                  Tenant alaredy exists                    
+                  Tenant alaredy exists
 RA_SEND_REQUEST_APPC_ERR=\
                   MSO-RA-5273E|\
                   Error sending request to APPC|\
                   Please check other logs for more detailed info|\
-                  Error sending request to APPC     
+                  Error sending request to APPC
 RA_VNF_ALREADY_EXIST=\
                   MSO-RA-5275E|\
                   Stack {0} already exists in {1}/{2}|\
                   No resolution needed|\
-                  VNF already exists   
+                  VNF already exists
 RA_VNF_UNKNOWN_PARAM=\
                   MSO-RA-5276E|\
                   Unknown  {0}:{1}|\
                   No resolution needed|\
-                  Uknown parameter  
+                  Uknown parameter
 RA_VNF_EXTRA_PARAM=\
                   MSO-RA-5277E|\
                   Create Stack ({0}) extra input params received:{1}|\
                   Please check other logs for more detailed info|\
-                  Extra input params received   
+                  Extra input params received
 RA_VNF_NOT_EXIST=\
                   MSO-RA-5278E|\
                   Stack {0} does not exist in {1}/{2}|\
                   No resolution needed|\
-                  Stack does not exist                                                                                                                                                                                                                                            
+                  Stack does not exist
 RA_ASYNC_CREATE_VNF=\
                   MSO-RA-5282I|\
                   Async Create VNF :{0} of type {1} in {2}/{3}|\
                   No resolution needed|\
-                  Async Create VNF 
+                  Async Create VNF
 RA_SEND_VNF_NOTIF_ERR=\
                   MSO-RA-5283E|\
                   Error sending createVnf notification|\
                   Please check other logs for more detailed info|\
-                  Error sending createVnf notification                                                                                                                                                                                                                                                                                         
+                  Error sending createVnf notification
 RA_ASYNC_CREATE_VNF_COMPLETE=\
                   MSO-RA-5284I|\
                   Completed createVnfA|\
                   No resolution needed|\
-                  Completed createVnfA 
+                  Completed createVnfA
 RA_ASYNC_UPDATE_VNF=\
                   MSO-RA-5285I|\
                   Async Update VNF :{0} of type {1} in {2}/{3}|\
@@ -276,7 +276,7 @@
                   MSO-RA-5286I|\
                   Completed updateVnfA|\
                   No resolution needed|\
-                  Completed updateVnfA                    
+                  Completed updateVnfA
 RA_ASYNC_QUERY_VNF=\
                   MSO-RA-5287I|\
                   Async Query VNF :{0} of type {1} in {2}/{3}|\
@@ -286,7 +286,7 @@
                   MSO-RA-5288I|\
                   Completed queryVnfA|\
                   No resolution needed|\
-                  Completed queryVnfA    
+                  Completed queryVnfA
 RA_ASYNC_DELETE_VNF=\
                   MSO-RA-5289I|\
                   Async Delete VNF :{0} of type {1} in {2}/{3}|\
@@ -296,7 +296,7 @@
                   MSO-RA-5290I|\
                   Completed deleteVnfA|\
                   No resolution needed|\
-                  Completed deleteVnfA    
+                  Completed deleteVnfA
 RA_ASYNC_ROLLBACK_VNF=\
                   MSO-RA-5291I|\
                   Async Rollback VNF|\
@@ -306,7 +306,7 @@
                   MSO-RA-5292I|\
                   Completed rollbackVnfA|\
                   No resolution needed|\
-                  Completed rollbackVnfA     
+                  Completed rollbackVnfA
 RA_DB_INVALID_STATUS=\
                   MSO-RA-5293E|\
                   Invalid status value|\
@@ -316,12 +316,12 @@
                   MSO-RA-5294E|\
                   Request ID={0} does not exist in DB|\
                   Please check other logs for more detailed info|\
-                  Record does not exist in DB                  
+                  Record does not exist in DB
 RA_CANT_UPDATE_REQUEST=\
                   MSO-RA-5295E|\
                   Enable to update {0} in DB for Request ID={1}|\
                   Please check other logs for more detailed info|\
-                  Enable to update DB    
+                  Enable to update DB
 RA_CONFIG_LOAD=\
                   MSO-RA-5296I|\
                   Configuration loaded from {0}|\
@@ -331,42 +331,42 @@
                   MSO-RA-5297I|\
                   Received Workflow Message: {0}|\
                   No resolution needed|\
-                  Received Workflow Message   
+                  Received Workflow Message
 RA_NS_EXC=\
                   MSO-RA-5298I|\
                   VFC Adatper Message: {0}|\
                   No resolution needed|\
-                  VFC Adatper Message                                                                                   
+                  VFC Adatper Message
 RA_GENERAL_EXCEPTION_ARG=\
                   MSO-RA-9200E|\
                   Exception: {0}|\
                   Please check other logs for more detailed info|\
-                  General exception with reason 
+                  General exception with reason
 RA_GENERAL_EXCEPTION=\
                   MSO-RA-9201E|\
                   Exception encountered|\
                   Please check other logs for more detailed info|\
-                  Exception encountered     
+                  Exception encountered
 RA_CONNECTION_EXCEPTION=\
                   MSO-RA-9202E|\
                   Exception communicating with {0}: {1}|\
                   Please check other logs for more detailed info|\
-                  Communication Exception 
+                  Communication Exception
 RA_EXCEPTION_COMMUNICATE_SDNC=\
                   MSO-RA-9203E|\
                   Exception while processing request to SDNC|\
                   Please check other logs for more detailed info|\
-                  Exception while processing request to SDNC   
+                  Exception while processing request to SDNC
 RA_EVALUATE_XPATH_ERROR=\
                   MSO-RA-9204E|\
                   Error while evaluating xpath {0} - {1}|\
                   Please check other logs for more detailed info|\
-                  Error while evaluating xpath   
+                  Error while evaluating xpath
 RA_ANALYZE_ERROR_EXC=\
                   MSO-RA-9205E|\
                   Problem analyzing error returned by SDN-C|\
                   Please check other logs for more detailed info|\
-                  Problem analyzing error returned by SDN-C  
+                  Problem analyzing error returned by SDN-C
 RA_ERROR_GET_RESPONSE_SDNC=\
                   MSO-RA-9206E|\
                   Error getting response code from errored SDNC request|\
@@ -381,7 +381,7 @@
                   MSO-RA-9208E|\
                   Create Stack Error: {0}|\
                   Please check other logs for more detailed info|\
-                  Create Stack Error  
+                  Create Stack Error
 RA_UPDATE_STACK_ERR=\
                   MSO-RA-9209E|\
                   Update Stack Error - Polling complete with non-success status: {0}, {1}|\
@@ -391,17 +391,17 @@
                   MSO-RA-9210E|\
                   Exception while update network, {0} in {1}/{2}|\
                   Please check other logs for more detailed info |\
-                  Update Network Error  
+                  Update Network Error
 RA_QUERY_NETWORK_EXC=\
                   MSO-RA-9211E|\
                   Exception while query network: {0} in {1}/{2}|\
                   Please check other logs for more detailed info|\
-                  Exception while query network:    
+                  Exception while query network:
 RA_CREATE_NETWORK_EXC=\
                   MSO-RA-9212E|\
                   Exception while create network: {0} in {1}/{2}|\
                   Please check other logs for more detailed info|\
-                  Create Network Error  
+                  Create Network Error
 RA_DELETE_NETWORK_EXC=\
                   MSO-RA-9213E|\
                   Exception while delete network: {0} in {1}/{2}|\
@@ -416,12 +416,12 @@
                   MSO-RA-9215E|\
                   {0} URL converion failed|\
                   Please check other logs for more detailed info|\
-                  WSDL URL converion failed 
+                  WSDL URL converion failed
 RA_INIT_NOTIF_EXC=\
                   MSO-RA-9216E|\
                   Caught exception initializing Notification Url|\
                   Please check other logs for more detailed info|\
-                  Caught exception initializing Notification Url  
+                  Caught exception initializing Notification Url
 RA_SET_CALLBACK_AUTH_EXC=\
                   MSO-RA-9217E|\
                   Unable to set authorization in callback request|\
@@ -431,7 +431,7 @@
                   MSO-RA-9218E|\
                   Exception caught while getting fault info|\
                   Please check other logs for more detailed info|\
-                  Exception caught while getting fault info 
+                  Exception caught while getting fault info
 RA_CALLBACK_BPEL_EXC=\
                   MSO-RA-9219E|\
                   Error sending BPEL Callback request|\
@@ -441,7 +441,7 @@
                   MSO-RA-9220E|\
                   Create Tenant Error: {0}|\
                   Please check other logs for more detailed info|\
-                  Create Tenant Error  
+                  Create Tenant Error
 RA_DELETE_TEMAMT_ERR=\
                   MSO-RA-9221E|\
                   Delete Tenant Error: {0}|\
@@ -451,12 +451,12 @@
                   MSO-RA-9222E|\
                   Error creating SDNC request|\
                   Please check other logs for more detailed info|\
-                  Error creating SDNC request  
+                  Error creating SDNC request
 RA_ERROR_CREATE_SDNC_RESPONSE=\
                   MSO-RA-9223E|\
                   Error creating SDNC response|\
                   Please check other logs for more detailed info|\
-                  Error creating SDNC response   
+                  Error creating SDNC response
 RA_ERROR_CONVERT_XML2STR=\
                   MSO-RA-9224E|\
                   Error converting xml Document to String|\
@@ -466,12 +466,12 @@
                   MSO-RA-9225E|\
                   Update Tenant Error: {0}|\
                   Please check other logs for more detailed info|\
-                  Update Tenant Error  
+                  Update Tenant Error
 RA_ROLLBACK_TENANT_ERR=\
                   MSO-RA-9226E|\
                   Rollback Tenant Error: {0}|\
                   Please check other logs for more detailed info|\
-                  Rollback Tenant Error  
+                  Rollback Tenant Error
 RA_QUERY_VNF_ERR=\
                   MSO-RA-9227E|\
                   Exception while query VNF:{0} in {1}/{2}|\
@@ -481,12 +481,12 @@
                   MSO-RA-9228E|\
                   Exception while update VNF:{0} in {1}/{2}|\
                   Please check other logs for more detailed info|\
-                  Exception while update VNF 
+                  Exception while update VNF
 RA_DELETE_VNF_ERR=\
                   MSO-RA-9229E|\
                   Exception while delete VNF:{0} in {1}/{2}|\
                   Please check other logs for more detailed info|\
-                  Exception while delete VNF     
+                  Exception while delete VNF
 RA_CREATE_VNF_ERR=\
                   MSO-RA-9230E|\
                   Exception while create VNF:{0} in {1}/{2}|\
@@ -496,4 +496,4 @@
                   MSO-RA-9231E|\
                   Exception while rollback VNF|\
                   Please check other logs for more detailed info|\
-                  Exception while rollback VNF                                                                                                                                                                                                                                                                                                                                                                   
+                  Exception while rollback VNF
