Merge "Take more Change-management Selenium screenshots"
diff --git a/vid-app-common/src/main/java/org/onap/vid/job/command/ResourceCommand.kt b/vid-app-common/src/main/java/org/onap/vid/job/command/ResourceCommand.kt
index 8c769d6..ac5c275 100644
--- a/vid-app-common/src/main/java/org/onap/vid/job/command/ResourceCommand.kt
+++ b/vid-app-common/src/main/java/org/onap/vid/job/command/ResourceCommand.kt
@@ -22,6 +22,7 @@
 
 
 import com.fasterxml.jackson.module.kotlin.convertValue
+import org.apache.commons.lang3.ObjectUtils.defaultIfNull
 import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate
 import org.onap.vid.changeManagement.RequestDetailsWrapper
 import org.onap.vid.exceptions.AbortingException
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/BaseResource.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/BaseResource.java
index 75658f2..642843a 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/BaseResource.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/BaseResource.java
@@ -58,6 +58,9 @@
 
 	protected String statusMessage;
 
+	protected Integer position;
+
+
 	private static final Map<String, Action> actionStingToEnumMap = ImmutableMap.<String, Action>builder()
 			.put("Delete", Action.Delete)
 			.put("Create", Action.Create)
@@ -70,17 +73,18 @@
 
 
 	protected BaseResource(@JsonProperty("modelInfo") ModelInfo modelInfo,
-						   @JsonProperty("instanceName") String instanceName,
-						   @JsonProperty("action") String action,
-						   @JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
-						   @JsonProperty("legacyRegion") String legacyRegion,
-						   @JsonProperty("tenantId") String tenantId,
-						   @JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
-						   @JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
-						   @JsonProperty("instanceId") String instanceId,
-						   @JsonProperty("trackById") String trackById,
-						   @JsonProperty("isFailed") Boolean isFailed,
-						   @JsonProperty("statusMessage") String statusMessage) {
+		@JsonProperty("instanceName") String instanceName,
+		@JsonProperty("action") String action,
+		@JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
+		@JsonProperty("legacyRegion") String legacyRegion,
+		@JsonProperty("tenantId") String tenantId,
+		@JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
+		@JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
+		@JsonProperty("instanceId") String instanceId,
+		@JsonProperty("trackById") String trackById,
+		@JsonProperty("isFailed") Boolean isFailed,
+		@JsonProperty("statusMessage") String statusMessage,
+		@JsonProperty("position") Integer position) {
 		this.modelInfo = modelInfo;
 		this.modelInfo.setModelType(getModelType());
 		this.rollbackOnFailure = rollbackOnFailure;
@@ -93,6 +97,7 @@
 		this.trackById = trackById;
 		this.isFailed = isFailed!= null ? isFailed: false;
 		this.statusMessage = statusMessage;
+		this.position = position;
 	}
 
 	private Action actionStringToEnum(String actionAsString) {
@@ -163,6 +168,14 @@
 		this.statusMessage = statusMessage;
 	}
 
+	public Integer getPosition() {
+		return position;
+	}
+
+	public void setPosition(Integer position) {
+		this.position = position;
+	}
+
 	@JsonIgnore
 	public abstract Collection<? extends BaseResource> getChildren();
 
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroup.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroup.java
index b945f13..f23c2e7 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroup.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroup.java
@@ -34,16 +34,18 @@
     private final  Map<String, InstanceGroupMember> vnfGroupMembers;
 
     public InstanceGroup(@JsonProperty("modelInfo") ModelInfo modelInfo,
-                         @JsonProperty("instanceName") String instanceName,
-                         @JsonProperty("action") String action,
-                         @JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
-                         @JsonProperty("instanceId") String instanceId,
-                         @JsonProperty("vnfs") Map<String, InstanceGroupMember> vnfGroupMembers,
-                         @JsonProperty("trackById") String trackById,
-                         @JsonProperty("isFailed") Boolean isFailed,
-                         @JsonProperty("statusMessage") String statusMessage) {
+        @JsonProperty("instanceName") String instanceName,
+        @JsonProperty("action") String action,
+        @JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
+        @JsonProperty("instanceId") String instanceId,
+        @JsonProperty("vnfs") Map<String, InstanceGroupMember> vnfGroupMembers,
+        @JsonProperty("trackById") String trackById,
+        @JsonProperty("isFailed") Boolean isFailed,
+        @JsonProperty("statusMessage") String statusMessage,
+        @JsonProperty("position") Integer position) {
 
-        super(modelInfo, instanceName, action, null, null, null, null, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage);
+        super(modelInfo, instanceName, action, null, null, null, null, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage,
+            position);
         this.vnfGroupMembers = vnfGroupMembers;
     }
 
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroupMember.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroupMember.java
index 7bfaf02..e9f34cc 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroupMember.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/InstanceGroupMember.java
@@ -30,11 +30,13 @@
 public class InstanceGroupMember extends BaseResource implements JobAdapter.AsyncJobRequest{
 
     public InstanceGroupMember(@JsonProperty("instanceId") String instanceId,
-                               @JsonProperty("action") String action,
-                               @JsonProperty("trackById") String trackById,
-                               @JsonProperty("isFailed") Boolean isFailed,
-                               @JsonProperty("statusMessage") String statusMessage) {
-        super(new ModelInfo(), null, action, null, null, null, null, false, instanceId, trackById, isFailed, statusMessage);
+        @JsonProperty("action") String action,
+        @JsonProperty("trackById") String trackById,
+        @JsonProperty("isFailed") Boolean isFailed,
+        @JsonProperty("statusMessage") String statusMessage,
+        @JsonProperty("position") Integer position) {
+        super(new ModelInfo(), null, action, null, null, null, null, false, instanceId, trackById, isFailed, statusMessage,
+            position);
     }
 
     @Override
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Network.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Network.java
index 797e28a..b9a0aeb 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Network.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Network.java
@@ -39,22 +39,24 @@
 	private final String lineOfBusiness;
 
 	public Network(@JsonProperty("modelInfo") ModelInfo modelInfo,
-				   @JsonProperty("productFamilyId") String productFamilyId,
-				   @JsonProperty("instanceName") String instanceName,
-				   @JsonProperty("action") String action,
-				   @JsonProperty("platformName") String platformName,
-				   @JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
-				   @JsonProperty("legacyRegion") String legacyRegion,
-				   @JsonProperty("tenantId") String tenantId,
-				   @JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
-				   @JsonProperty("lineOfBusinessName") String lineOfBusiness,
-				   @JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
-				   @JsonProperty("instanceId") String instanceId,
-				   @JsonProperty("trackById") String trackById,
-				   @JsonProperty("isFailed") Boolean isFailed,
-				   @JsonProperty("statusMessage") String statusMessage) {
+		@JsonProperty("productFamilyId") String productFamilyId,
+		@JsonProperty("instanceName") String instanceName,
+		@JsonProperty("action") String action,
+		@JsonProperty("platformName") String platformName,
+		@JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
+		@JsonProperty("legacyRegion") String legacyRegion,
+		@JsonProperty("tenantId") String tenantId,
+		@JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
+		@JsonProperty("lineOfBusinessName") String lineOfBusiness,
+		@JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
+		@JsonProperty("instanceId") String instanceId,
+		@JsonProperty("trackById") String trackById,
+		@JsonProperty("isFailed") Boolean isFailed,
+		@JsonProperty("statusMessage") String statusMessage,
+		@JsonProperty("position") Integer position) {
 
-		super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage);
+		super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage,
+            position);
 		this.productFamilyId = productFamilyId;
 		this.platformName = platformName;
 		this.lineOfBusiness = lineOfBusiness;
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/ServiceInstantiation.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/ServiceInstantiation.java
index afc8534..8828faf 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/ServiceInstantiation.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/ServiceInstantiation.java
@@ -104,7 +104,8 @@
                                 @JsonProperty("isFailed") Boolean isFailed,
                                 @JsonProperty("statusMessage") String statusMessage,
                                 @JsonProperty("vidNotions") VidNotions vidNotions) {
-        super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage);
+        super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage,
+            null);
         this.owningEntityId = owningEntityId;
         this.owningEntityName = owningEntityName;
         this.projectName = projectName;
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/VfModule.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/VfModule.java
index 233850d..41da85e 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/VfModule.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/VfModule.java
@@ -42,22 +42,24 @@
 	@JsonInclude(NON_NULL) private Boolean usePreload;
 	private Map<String, String> supplementaryParams;
 
-	public VfModule( @JsonProperty("modelInfo") ModelInfo modelInfo,
-					 @JsonProperty("instanceName") String instanceName,
-					 @JsonProperty("volumeGroupName") String volumeGroupInstanceName,
-					 @JsonProperty("action") String action,
-					 @JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
-					 @JsonProperty("legacyRegion") String legacyRegion,
-					 @JsonProperty("tenantId") String tenantId,
-					 @JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
-					 @JsonProperty("supplementaryFileContent") Map<String, String> supplementaryParams,
-					 @JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
-					 @JsonProperty("sdncPreLoad") Boolean usePreload,
-					 @JsonProperty("instanceId") String instanceId,
-					 @JsonProperty("trackById") String trackById,
-					 @JsonProperty("isFailed") Boolean isFailed,
-					 @JsonProperty("statusMessage") String statusMessage) {
-		super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage);
+	public VfModule(@JsonProperty("modelInfo") ModelInfo modelInfo,
+		@JsonProperty("instanceName") String instanceName,
+		@JsonProperty("volumeGroupName") String volumeGroupInstanceName,
+		@JsonProperty("action") String action,
+		@JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
+		@JsonProperty("legacyRegion") String legacyRegion,
+		@JsonProperty("tenantId") String tenantId,
+		@JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
+		@JsonProperty("supplementaryFileContent") Map<String, String> supplementaryParams,
+		@JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
+		@JsonProperty("sdncPreLoad") Boolean usePreload,
+		@JsonProperty("instanceId") String instanceId,
+		@JsonProperty("trackById") String trackById,
+		@JsonProperty("isFailed") Boolean isFailed,
+		@JsonProperty("statusMessage") String statusMessage,
+		@JsonProperty("position") Integer position) {
+		super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage,
+			position);
 		this.volumeGroupInstanceName = volumeGroupInstanceName;
 		this.usePreload = usePreload;
 		this.supplementaryParams = supplementaryParams;
@@ -107,8 +109,7 @@
 				this.getInstanceId(),
 				this.getTrackById(),
 				this.getIsFailed(),
-				this.getStatusMessage()
-		);
-
+				this.getStatusMessage(),
+				this.getPosition());
 	}
 }
\ No newline at end of file
diff --git a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Vnf.java b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Vnf.java
index 0da3f06..fc71f27 100644
--- a/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Vnf.java
+++ b/vid-app-common/src/main/java/org/onap/vid/model/serviceInstantiation/Vnf.java
@@ -44,23 +44,25 @@
 	private final Map<String, Map<String, VfModule>> vfModules;
 
 	public Vnf(@JsonProperty("modelInfo") ModelInfo modelInfo,
-			   @JsonProperty("productFamilyId") String productFamilyId,
-			   @JsonProperty("instanceName") String instanceName,
-			   @JsonProperty("action") String action,
-			   @JsonProperty("platformName") String platformName,
-			   @JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
-			   @JsonProperty("legacyRegion") String legacyRegion,
-			   @JsonProperty("tenantId") String tenantId,
-			   @JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
-			   @JsonProperty("lineOfBusinessName") String lineOfBusiness,
-			   @JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
-			   @JsonProperty("instanceId") String instanceId,
-			   @JsonProperty("vfModules") Map<String, Map<String, VfModule>> vfModules,
-			   @JsonProperty("trackById") String trackById,
-			   @JsonProperty("isFailed") Boolean isFailed,
-			   @JsonProperty("statusMessage") String statusMessage) {
+		@JsonProperty("productFamilyId") String productFamilyId,
+		@JsonProperty("instanceName") String instanceName,
+		@JsonProperty("action") String action,
+		@JsonProperty("platformName") String platformName,
+		@JsonProperty("lcpCloudRegionId") String lcpCloudRegionId,
+		@JsonProperty("legacyRegion") String legacyRegion,
+		@JsonProperty("tenantId") String tenantId,
+		@JsonProperty("instanceParams") List<Map<String, String>> instanceParams,
+		@JsonProperty("lineOfBusinessName") String lineOfBusiness,
+		@JsonProperty("rollbackOnFailure") boolean rollbackOnFailure,
+		@JsonProperty("instanceId") String instanceId,
+		@JsonProperty("vfModules") Map<String, Map<String, VfModule>> vfModules,
+		@JsonProperty("trackById") String trackById,
+		@JsonProperty("isFailed") Boolean isFailed,
+		@JsonProperty("statusMessage") String statusMessage,
+		@JsonProperty("position") Integer position) {
 
-		super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage);
+		super(modelInfo, instanceName, action, lcpCloudRegionId, legacyRegion, tenantId, instanceParams, rollbackOnFailure, instanceId, trackById, isFailed, statusMessage,
+			position);
 		this.productFamilyId = productFamilyId;
 		this.platformName = platformName;
 		this.lineOfBusiness = lineOfBusiness;
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
index f70d625..20e964c 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
@@ -69,6 +69,10 @@
             return (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH));
         };
 
+        $scope.removeVendorFromCloudOwner = function (cloudOwner) {
+            return AaiService.removeVendorFromCloudOwner(cloudOwner)
+        };
+
         vm.isDisabledVNFmodelVersion = function (vnfTypePristine) {
             if ($scope.isNewFilterChangeManagmentEnabled()) {
                 return !vm.isSearchedVNF;
@@ -537,8 +541,34 @@
                 });
         };
 
+        function isCompatibleVNFRole(vnf) {
+
+            return vnf.properties['nf-role'] === vm.changeManagement['vnfType'] || !vm.changeManagement['vnfType'];
+
+        }
+
+        function isValidVnf(vnf) {
+
+            let result =  isCompatibleVNFRole(vnf) && vnf.properties["model-invariant-id"]
+                && vnf.properties["model-version-id"];
+
+            return result;
+        }
+
+        function loadCloudRegions() {
+            AaiService.getLcpCloudRegionTenantList(
+                vm.changeManagement.subscriberId,
+                vm.changeManagement.serviceType["service-type"],
+                function (response) {
+                    $scope.isFeatureFlagCloudOwner = featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_1810_CR_ADD_CLOUD_OWNER_TO_MSO_REQUEST);
+                    $scope.cloudRegionList = _.uniqBy(response, 'cloudRegionOptionId');
+                });
+        }
+
         vm.serviceTypeChanged = function () {
-            if (!$scope.isNewFilterChangeManagmentEnabled()) {
+            if ($scope.isNewFilterChangeManagmentEnabled()) {
+                loadCloudRegions();
+            } else {
                 vm.searchVNFs();
             }
         };
@@ -547,23 +577,30 @@
             vm.vnfTypes = [];
             vm.vnfTypesTemp = [];
             vm.serviceInstances = [];
+            vm.fromVNFVersions=[];
+            vm.vnfNames =[];
+            vm.changeManagement.vnfNames =[];
 
             var instances = vm.changeManagement.serviceType["service-instances"]["service-instance"];
             // var promiseArrOfGetVnfs = preparePromiseArrOfGetVnfs(instances);
 
             vm.vnfs = [];
             vm.vfModules = [];
-            let vnfRole = $scope.isNewFilterChangeManagmentEnabled() ? vm.changeManagement.vnfType : null;
+
+            let vnfRole = null;
             let cloudRegion = null;
 
+            if ($scope.isNewFilterChangeManagmentEnabled()) {
+                vnfRole = vm.changeManagement.vnfType ? vm.changeManagement.vnfType : null;
+                cloudRegion = vm.changeManagement.cloudRegion ? vm.changeManagement.cloudRegion : null;
+            }
 
             AaiService.getVnfsByCustomerIdAndServiceType(
                 vm.changeManagement.subscriberId,
                 vm.changeManagement.serviceType["service-type"],
                 vnfRole,
                 cloudRegion,
-        ).
-            then(function (response) {
+            ).then(function (response) {
                     vm.isSearchedVNF = true;
                     var vnfsData = response.data.results;
                     if (vnfsData) {
@@ -601,6 +638,9 @@
                             vm.vnfTypes.push(vnf.properties['nf-role'])
                         });
                     }
+                    if ($scope.isNewFilterChangeManagmentEnabled()) {
+                        vm.loadVNFVersions();
+                    }
                 }
             );
         };
@@ -612,9 +652,7 @@
             vm.serviceInstancesToGetVersions = [];
             var versions = [];
             _.forEach(vm.vnfs, function (vnf) {
-                if (vnf.properties['nf-role'] === vm.changeManagement['vnfType']
-                    && vnf.properties["model-invariant-id"]
-                    && vnf.properties["model-version-id"]) {
+                if (isValidVnf(vnf)) {
                     vm.serviceInstancesToGetVersions.push({
                             "model-invariant-id": vnf.properties["model-invariant-id"],
                             "model-version-id": vnf.properties["model-version-id"]
@@ -685,13 +723,15 @@
         };
 
         vm.loadVNFNames = function () {
+            vm.changeManagement.vnfNames =[];
             vm.vnfNames = [];
+
             const vnfs = vm.changeManagement.fromVNFVersion ? vm.vnfs : [];
             _.forEach(vnfs, function (vnf) {
 
                 var selectedVersionNumber = getVersionNameForId(vm.changeManagement.fromVNFVersion);
 
-                if (vnf.properties['nf-role'] === vm.changeManagement.vnfType &&
+                if (isCompatibleVNFRole(vnf) &&
                     selectedVersionNumber === getVersionNameForId(vnf.properties["model-version-id"])) {
                     var vServer = {};
 
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.css b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.css
index 19b5f2b..dda9834 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.css
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.css
@@ -137,8 +137,8 @@
     position: relative;
 }
 
-.nf-role-input {
-    width: 50%
+.new-filter-field {
+    width: 39%
 }
 
 /*LESS*/
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.html b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.html
index 40bb92b..3f2489d 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.html
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.html
@@ -70,22 +70,37 @@
         <div ng-if="isNewFilterChangeManagmentEnabled()">
 
             <div class="form-group form-row">
-                <div class="col nf-role-input">
+                <div class="col new-filter-field">
                     <label class="control-label">NF Role</label>
                     <input class="form-control" ng-model="vm.changeManagement.vnfType"
-                           name="vnfType" id="vnfTypeInput"
+                           name="vnfType" id="vnfTypeInput" data-tests-id="vnfType"
                            data-ng-disabled="newChangeManagement.serviceType.$pristine">
                 </div>
 
+                <div class="col new-filter-field">
+                    <label class="control-label">Cloud Region</label>
+                    <select name="cloudRegion" class="form-control" ng-model="vm.changeManagement.cloudRegion"  data-tests-id="cloudRegion" id="cloudRegion"
+                            data-ng-disabled="newChangeManagement.serviceType.$pristine">
+                        <option value="" >select cloud Region</option>
+                        <option ng-repeat="option in cloudRegionList" value="{{option.tenantId}}"
+                                data-ng-if="option.isPermitted && !isFeatureFlagCloudOwner">{{option.cloudRegionId}}
+                        </option>
+                        <option ng-repeat="option in cloudRegionList" value="{{option.tenantId}}"
+                                data-ng-if="option.isPermitted && isFeatureFlagCloudOwner">
+                            {{option.cloudRegionId}} ({{removeVendorFromCloudOwner(option.cloudOwner).toUpperCase()}})
+                        </option>
+                    </select>
+                </div>
+
                 <div class="col">
-                    <button class="search-vnf" type="button" id="searchVNF" name="searchVNFs" class="btn btn-primary"
+                    <button class="btn btn-primary search-vnf" type="button" id="searchVNF" name="searchVNFs"
                             ng-click="vm.searchVNFs()"
-                            ng-disabled="newChangeManagement.subscriber.$pristine || newChangeManagement.serviceType.$pristine">
+                            ng-disabled="newChangeManagement.subscriber.$pristine || newChangeManagement.serviceType.$pristine"
+                            data-tests-id="searchVNFs">
                         Search VNFs
                     </button>
                 </div>
             </div>
-
         </div>
 
 
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/services/aaiService.js b/vid-app-common/src/main/webapp/app/vid/scripts/services/aaiService.js
index 994a3e4..0e1beef 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/services/aaiService.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/services/aaiService.js
@@ -86,6 +86,23 @@
         }).join("&");
     }
 
+    function getConfigParams(vnfRole, cloudRegion) {
+        if (!featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH)) {
+            return null
+        }
+
+        let data = {
+            vnfRole: vnfRole,
+            cloudRegion: cloudRegion,
+        };
+
+        let config = {
+            params: data
+        };
+
+        return config;
+    }
+
     return {
         getSubscriberName: function (globalCustomerId,
                                      successCallbackFunction) {
@@ -630,24 +647,17 @@
         },
 
         getVnfsByCustomerIdAndServiceType: function (globalSubscriberId, serviceType, vnfRole, cloudRegion) {
-            var deferred = $q.defer();
+            let deferred = $q.defer();
 
             let url = globalSubscriberId + COMPONENT.FORWARD_SLASH + serviceType
 
-            if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH)){
-                if (vnfRole) {
-                    url + COMPONENT.FORWARD_SLASH + vnfRole
-                }
-                if (cloudRegion) {
-                    url + COMPONENT.FORWARD_SLASH + cloudRegion;
-                }
-            }
-
+            const path = COMPONENT.AAI_GET_VNF_BY_CUSTOMERID_AND_SERVICETYPE + url;
+            let config = getConfigParams(vnfRole, cloudRegion);
 
             if (UtilityService.hasContents(globalSubscriberId) &&
                 UtilityService.hasContents(serviceType)) {
 
-                $http.get(COMPONENT.AAI_GET_VNF_BY_CUSTOMERID_AND_SERVICETYPE + url)
+                $http.get(path, config)
                     .success(function (response) {
                         if (response) {
                             deferred.resolve({data: response});
diff --git a/vid-app-common/src/test/java/org/onap/vid/controller/AaiControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controller/AaiControllerTest.java
index 3e38ba8..83cc61e 100644
--- a/vid-app-common/src/test/java/org/onap/vid/controller/AaiControllerTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/controller/AaiControllerTest.java
@@ -39,6 +39,7 @@
 import com.google.common.collect.ImmutableMultimap;
 import com.google.common.collect.Lists;
 import com.google.common.collect.Multimap;
+import java.util.List;
 import java.util.Map;
 import java.util.UUID;
 import javax.ws.rs.core.Response;
@@ -295,10 +296,10 @@
         given(aaiService.getAaiZones()).willReturn(new AaiResponse(aicZones, "", HttpStatus.OK.value()));
 
         mockMvc.perform(get("/aai_get_aic_zones")
-                .contentType(MediaType.APPLICATION_JSON)
-                .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andExpect(content().json(objectMapper.writeValueAsString(aicZones)));
+            .contentType(MediaType.APPLICATION_JSON)
+            .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(objectMapper.writeValueAsString(aicZones)));
     }
 
     @Test
@@ -308,32 +309,32 @@
             .willReturn(new AaiResponse(null, expectedErrorMessage, HttpStatus.INTERNAL_SERVER_ERROR.value()));
 
         mockMvc.perform(get("/aai_get_aic_zones")
-                .contentType(MediaType.APPLICATION_JSON)
-                .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isInternalServerError())
-                .andExpect(content().string(expectedErrorMessage));
+            .contentType(MediaType.APPLICATION_JSON)
+            .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isInternalServerError())
+            .andExpect(content().string(expectedErrorMessage));
     }
 
     @Test
     public void getSpecificPnf_shouldReturnPnfObjectForPnfId() throws Exception {
         String pnfId = "MyPnfId";
         Pnf pnf = Pnf.builder()
-                .withPnfId(pnfId)
-                .withPnfName("TestPnf")
-                .withPnfName2("pnfName2")
-                .withPnfName2Source("pnfNameSource")
-                .withEquipModel("model")
-                .withEquipType("type")
-                .withEquipVendor("vendor")
-                .build();
+            .withPnfId(pnfId)
+            .withPnfName("TestPnf")
+            .withPnfName2("pnfName2")
+            .withPnfName2Source("pnfNameSource")
+            .withEquipModel("model")
+            .withEquipType("type")
+            .withEquipVendor("vendor")
+            .build();
         AaiResponse<Pnf> aaiResponse = new AaiResponse<>(pnf, "", HttpStatus.OK.value());
         given(aaiService.getSpecificPnf(pnfId)).willReturn(aaiResponse);
 
         mockMvc.perform(get("/aai_get_pnfs/pnf/{pnf_id}", pnfId)
-                .contentType(MediaType.APPLICATION_JSON)
-                .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andExpect(content().json(objectMapper.writeValueAsString(pnf)));
+            .contentType(MediaType.APPLICATION_JSON)
+            .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(objectMapper.writeValueAsString(pnf)));
     }
 
     @Test
@@ -343,10 +344,10 @@
         given(aaiService.getSpecificPnf(pnfId)).willThrow(new RuntimeException(expectedErrorMessage));
 
         mockMvc.perform(get("/aai_get_pnfs/pnf/{pnf_id}", pnfId)
-                .contentType(MediaType.APPLICATION_JSON)
-                .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isInternalServerError())
-                .andExpect(content().string(expectedErrorMessage));
+            .contentType(MediaType.APPLICATION_JSON)
+            .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isInternalServerError())
+            .andExpect(content().string(expectedErrorMessage));
     }
 
     public void getPNFInstances_shouldReturnOKResponseFromAAIService() throws Exception {
@@ -366,12 +367,12 @@
                 equipModel)).willReturn(aaiResponse);
 
         mockMvc.perform(
-                get(urlTemplate, globalCustomerId, serviceType, modelVersionId,
-                        modelInvariantId, cloudRegion, equipVendor, equipModel)
-                        .contentType(MediaType.APPLICATION_JSON)
-                        .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andExpect(content().string(expectedResponseBody));
+            get(urlTemplate, globalCustomerId, serviceType, modelVersionId,
+                modelInvariantId, cloudRegion, equipVendor, equipModel)
+                .contentType(MediaType.APPLICATION_JSON)
+                .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().string(expectedResponseBody));
     }
 
     @Test
@@ -385,12 +386,12 @@
             .getVersionByInvariantId(request.versions)).willReturn(response);
 
         mockMvc.perform(
-                post("/aai_get_version_by_invariant_id")
-                        .content(objectMapper.writeValueAsString(request))
-                        .contentType(MediaType.APPLICATION_JSON)
-                        .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andExpect(content().string(expectedResponse));
+            post("/aai_get_version_by_invariant_id")
+                .content(objectMapper.writeValueAsString(request))
+                .contentType(MediaType.APPLICATION_JSON)
+                .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().string(expectedResponse));
     }
 
     @Test
@@ -408,12 +409,12 @@
             .willReturn(aaiResponse);
 
         mockMvc.perform(
-                get("/aai_sub_details/{subscriberId}", subscriberId)
-                        .param("omitServiceInstances", Boolean.toString(omitServiceInstances))
-                        .contentType(MediaType.APPLICATION_JSON)
-                        .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andExpect(content().string(objectMapper.writeValueAsString(okResponseBody)));
+            get("/aai_sub_details/{subscriberId}", subscriberId)
+                .param("omitServiceInstances", Boolean.toString(omitServiceInstances))
+                .contentType(MediaType.APPLICATION_JSON)
+                .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().string(objectMapper.writeValueAsString(okResponseBody)));
     }
 
     @Test
@@ -437,50 +438,98 @@
     @Test
     public void getPortMirroringConfigData_givenThreeIds_ReturnsThreeResults() {
 
-        final AaiResponseTranslator.PortMirroringConfigDataOk toBeReturnedForA = new AaiResponseTranslator.PortMirroringConfigDataOk("foobar");
-        final AaiResponseTranslator.PortMirroringConfigDataError toBeReturnedForB = new AaiResponseTranslator.PortMirroringConfigDataError("foo", "{ baz: qux }");
-        final AaiResponseTranslator.PortMirroringConfigDataOk toBeReturnedForC = new AaiResponseTranslator.PortMirroringConfigDataOk("corge");
+        final AaiResponseTranslator.PortMirroringConfigDataOk toBeReturnedForA = new AaiResponseTranslator.PortMirroringConfigDataOk(
+            "foobar");
+        final AaiResponseTranslator.PortMirroringConfigDataError toBeReturnedForB = new AaiResponseTranslator.PortMirroringConfigDataError(
+            "foo", "{ baz: qux }");
+        final AaiResponseTranslator.PortMirroringConfigDataOk toBeReturnedForC = new AaiResponseTranslator.PortMirroringConfigDataOk(
+            "corge");
 
         Mockito
-                .doReturn(toBeReturnedForA)
-                .doReturn(toBeReturnedForB)
-                .doReturn(toBeReturnedForC)
-                .when(aaiService).getPortMirroringConfigData(Mockito.anyString());
+            .doReturn(toBeReturnedForA)
+            .doReturn(toBeReturnedForB)
+            .doReturn(toBeReturnedForC)
+            .when(aaiService).getPortMirroringConfigData(Mockito.anyString());
 
-        final Map<String, AaiResponseTranslator.PortMirroringConfigData> result = aaiController.getPortMirroringConfigsData(ImmutableList.of("a", "b", "c"));
+        final Map<String, AaiResponseTranslator.PortMirroringConfigData> result = aaiController
+            .getPortMirroringConfigsData(ImmutableList.of("a", "b", "c"));
 
         assertThat(result, is(ImmutableMap.of(
-                "a", toBeReturnedForA,
-                "b", toBeReturnedForB,
-                "c", toBeReturnedForC
+            "a", toBeReturnedForA,
+            "b", toBeReturnedForB,
+            "c", toBeReturnedForC
         )));
     }
 
     @Test
     public void getSubscriberDetails_shouldIncludeServiceInstancesFromSubscriberData_whenFeatureDisabled_andOmitFlagIsFalse()
-            throws Exception {
+        throws Exception {
         boolean isFeatureActive = false;
         boolean omitServiceInstances = false;
         getSubscriberDetails_assertServiceInstancesInclusion(isFeatureActive, omitServiceInstances);
     }
 
     private void getSubscriberDetails_assertServiceInstancesInclusion(boolean isFeatureActive,
-                                                                      boolean omitServiceInstances) throws Exception {
+        boolean omitServiceInstances) throws Exception {
         String subscriberId = "subscriberId";
         String okResponseBody = "OK_RESPONSE";
         AaiResponse<String> aaiResponse = new AaiResponse<>(okResponseBody, "", HttpStatus.OK.value());
         given(featureManager.isActive(Features.FLAG_1906_AAI_SUB_DETAILS_REDUCE_DEPTH)).willReturn(isFeatureActive);
         given(aaiService.getSubscriberData(eq(subscriberId), isA(RoleValidatorByRoles.class),
-                eq(isFeatureActive && omitServiceInstances)))
-                .willReturn(aaiResponse);
+            eq(isFeatureActive && omitServiceInstances)))
+            .willReturn(aaiResponse);
 
         mockMvc.perform(
-                get("/aai_sub_details/{subscriberId}", subscriberId)
-                        .param("omitServiceInstances", Boolean.toString(omitServiceInstances))
-                        .contentType(MediaType.APPLICATION_JSON)
-                        .accept(MediaType.APPLICATION_JSON))
-                .andExpect(status().isOk())
-                .andExpect(content().string(objectMapper.writeValueAsString(okResponseBody)));
+            get("/aai_sub_details/{subscriberId}", subscriberId)
+                .param("omitServiceInstances", Boolean.toString(omitServiceInstances))
+                .contentType(MediaType.APPLICATION_JSON)
+                .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().string(objectMapper.writeValueAsString(okResponseBody)));
     }
+
+    @Test
+    public void getSpecificConfiguration_shouldReturnOkResponse() throws Exception {
+        String configurationId = "testGlobalCustomerId";
+        String expectedResponseBody = "OK_RESPONSE";
+        Response response = mock(Response.class);
+        given(response.readEntity(String.class)).willReturn(expectedResponseBody);
+        given(response.getStatus()).willReturn(HttpStatus.OK.value());
+
+        given(aaiRestInterface.RestGet(
+            eq("VidAaiController"),
+            anyString(),
+            eq(Unchecked.toURI("network/configurations/configuration/" + configurationId)),
+            eq(false)).getResponse()).willReturn(response);
+
+        mockMvc
+            .perform(
+                get("/aai_get_configuration/{configuration_id}", configurationId)
+                    .contentType(MediaType.APPLICATION_JSON)
+                    .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().string(expectedResponseBody));
+    }
+
+    @Test
+    public void getServiceInstanceAssociatedPnfs_shouldReturnPnfs() throws Exception {
+        String globalCustomerId = "testCustomerId";
+        String serviceType = "testServiceType";
+        String serviceInstanceId = "testServiceInstanceId";
+        List<String> expectedPnfs = ImmutableList.of("pnf1", "pnf2", "pnf3");
+
+        given(aaiService.getServiceInstanceAssociatedPnfs(globalCustomerId, serviceType, serviceInstanceId))
+            .willReturn(expectedPnfs);
+
+        mockMvc
+            .perform(
+                get("/aai_get_service_instance_pnfs/{globalCustomerId}/{serviceType}/{serviceInstanceId}",
+                    globalCustomerId, serviceType, serviceInstanceId)
+                    .contentType(MediaType.APPLICATION_JSON)
+                    .accept(MediaType.APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(objectMapper.writeValueAsString(expectedPnfs)));
+    }
+
 }
 
diff --git a/vid-app-common/src/test/java/org/onap/vid/controller/MsoControllerTest.java b/vid-app-common/src/test/java/org/onap/vid/controller/MsoControllerTest.java
index a324505..5aa6505 100644
--- a/vid-app-common/src/test/java/org/onap/vid/controller/MsoControllerTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/controller/MsoControllerTest.java
@@ -127,6 +127,137 @@
     }
 
     @Test
+    public void shouldCreateVfModuleInstance() throws Exception {
+        // given
+        RequestDetails requestDetails = modelGenerator.nextObject(RequestDetails.class);
+        String serviceInstanceId = "bc305d54-75b4-431b-adb2-eb6b9e546014";
+        String vnfInstanceId = "fe9000-0009-9999";
+
+        MsoResponseWrapper expectedResponse = new MsoResponseWrapper(200, "test");
+        given(msoBusinessLogic
+            .createVfModuleInstance(objectEqualTo(requestDetails), eq(serviceInstanceId), eq(vnfInstanceId)))
+            .willReturn(expectedResponse);
+
+        // when & then
+        mockMvc.perform(post(format("/mso/mso_create_vfmodule_instance/%s/vnfs/%s", serviceInstanceId, vnfInstanceId))
+            .content(asJson(requestDetails))
+            .contentType(APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(asJson(expectedResponse)));
+
+        then(cloudService).should(only()).enrichRequestWithCloudOwner(objectEqualTo(requestDetails));
+    }
+    
+    @Test
+    public void shouldCreateConfigurationInstance() throws Exception {
+        // given
+        RequestDetailsWrapper requestDetails = modelGenerator.nextObject(RequestDetailsWrapper.class);
+        String serviceInstanceId = "bc305d54-75b4-431b-adb2-eb6b9e546014";
+
+        MsoResponseWrapper expectedResponse = new MsoResponseWrapper(200, "test");
+        given(msoBusinessLogic
+            .createConfigurationInstance(objectEqualTo(requestDetails), eq(serviceInstanceId)))
+            .willReturn(expectedResponse);
+
+        // when & then
+        mockMvc.perform(post(format("/mso/mso_create_configuration_instance/%s/configurations/", serviceInstanceId))
+            .content(asJson(requestDetails))
+            .contentType(APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(asJson(expectedResponse)));
+
+        then(cloudService).should(only()).enrichRequestWithCloudOwner(objectEqualTo(requestDetails.getRequestDetails()));
+    }
+
+    @Test
+    public void shouldDeleteE2eSvcInstance() throws Exception {
+        // given
+        RequestDetails requestDetails = modelGenerator.nextObject(RequestDetails.class);
+        String serviceInstanceId = "bc305d54-75b4-431b-adb2-eb6b9e546014";
+        String configurationId = "28630972-d548-4d5f-acc2-ad1d748d023d";
+
+        MsoResponseWrapper expectedResponse = new MsoResponseWrapper(200, "test");
+        given(msoBusinessLogic
+            .setConfigurationActiveStatus(objectEqualTo(requestDetails), eq(serviceInstanceId), eq(configurationId), eq(true)))
+            .willReturn(expectedResponse);
+
+        // when & then
+        mockMvc.perform(post(format("/mso/mso_activate_configuration/%s/configurations/%s", serviceInstanceId, configurationId))
+            .content(asJson(requestDetails))
+            .contentType(APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(asJson(expectedResponse)));
+
+        then(cloudService).should(only()).enrichRequestWithCloudOwner(objectEqualTo(requestDetails));
+    }
+
+    @Test
+    public void shouldDeactivateConfiguration() throws Exception {
+        // given
+        RequestDetails requestDetails = modelGenerator.nextObject(RequestDetails.class);
+        String serviceInstanceId = "bc305d54-75b4-431b-adb2-eb6b9e546014";
+        String configurationId = "28630972-d548-4d5f-acc2-ad1d748d023d";
+
+        MsoResponseWrapper expectedResponse = new MsoResponseWrapper(200, "test");
+        given(msoBusinessLogic
+            .setConfigurationActiveStatus(objectEqualTo(requestDetails), eq(serviceInstanceId), eq(configurationId), eq(false)))
+            .willReturn(expectedResponse);
+
+        // when & then
+        mockMvc.perform(post(format("/mso/mso_deactivate_configuration/%s/configurations/%s", serviceInstanceId, configurationId))
+            .content(asJson(requestDetails))
+            .contentType(APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(asJson(expectedResponse)));
+
+        then(cloudService).should(only()).enrichRequestWithCloudOwner(objectEqualTo(requestDetails));
+    }
+
+    @Test
+    public void shouldDisablePortOnConfiguration() throws Exception {
+        // given
+        RequestDetails requestDetails = modelGenerator.nextObject(RequestDetails.class);
+        String serviceInstanceId = "bc305d54-75b4-431b-adb2-eb6b9e546014";
+        String configurationId = "28630972-d548-4d5f-acc2-ad1d748d023d";
+
+        MsoResponseWrapper expectedResponse = new MsoResponseWrapper(200, "test");
+        given(msoBusinessLogic
+            .setPortOnConfigurationStatus(objectEqualTo(requestDetails), eq(serviceInstanceId), eq(configurationId), eq(false)))
+            .willReturn(expectedResponse);
+
+        // when & then
+        mockMvc.perform(post(format("/mso/mso_disable_port_configuration/%s/configurations/%s", serviceInstanceId, configurationId))
+            .content(asJson(requestDetails))
+            .contentType(APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(asJson(expectedResponse)));
+
+        then(cloudService).should(only()).enrichRequestWithCloudOwner(objectEqualTo(requestDetails));
+    }
+
+    @Test
+    public void shouldEnablePortOnConfiguration() throws Exception {
+        // given
+        RequestDetails requestDetails = modelGenerator.nextObject(RequestDetails.class);
+        String serviceInstanceId = "bc305d54-75b4-431b-adb2-eb6b9e546014";
+        String configurationId = "28630972-d548-4d5f-acc2-ad1d748d023d";
+
+        MsoResponseWrapper expectedResponse = new MsoResponseWrapper(200, "test");
+        given(msoBusinessLogic
+            .setPortOnConfigurationStatus(objectEqualTo(requestDetails), eq(serviceInstanceId), eq(configurationId), eq(true)))
+            .willReturn(expectedResponse);
+
+        // when & then
+        mockMvc.perform(post(format("/mso/mso_enable_port_configuration/%s/configurations/%s", serviceInstanceId, configurationId))
+            .content(asJson(requestDetails))
+            .contentType(APPLICATION_JSON))
+            .andExpect(status().isOk())
+            .andExpect(content().json(asJson(expectedResponse)));
+
+        then(cloudService).should(only()).enrichRequestWithCloudOwner(objectEqualTo(requestDetails));
+    }
+
+    @Test
     public void shouldCreateVolumeInstance() throws Exception {
         // given
         RequestDetails requestDetails = modelGenerator.nextObject(RequestDetails.class);
diff --git a/vid-app-common/src/test/java/org/onap/vid/job/command/ResourceCommandTest.java b/vid-app-common/src/test/java/org/onap/vid/job/command/ResourceCommandTest.java
index 2780e15..9501614 100644
--- a/vid-app-common/src/test/java/org/onap/vid/job/command/ResourceCommandTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/job/command/ResourceCommandTest.java
@@ -273,30 +273,35 @@
         }
 
         static InstanceGroup createGroup(List<InstanceGroupMember> groupMembers, Action action) {
-            return new InstanceGroup(mock(ModelInfo.class), null, action.name(), false, null, convertToMap(groupMembers), null, null, null);
+            return new InstanceGroup(mock(ModelInfo.class), null, action.name(), false, null, convertToMap(groupMembers), null, null, null,
+                null);
         }
 
         static InstanceGroupMember createMember(Action action) {
-            return new InstanceGroupMember(null, action.toString(), null, null, null);
+            return new InstanceGroupMember(null, action.toString(), null, null, null, null);
         }
 
         static Vnf createVnf(List<VfModule> vfModules, Action action) {
             Map<String, Map<String, VfModule>> vfModulesMap = new HashMap<>();
             vfModulesMap.put("abc",convertToMap(vfModules));
 
-            return new Vnf(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, null, false, null, vfModulesMap, null, null, null);
+            return new Vnf(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, null, false, null, vfModulesMap, null, null, null,
+                null);
         }
 
         static Vnf createVnf(Action action) {
-            return new Vnf(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, null, false, null,null, null, null, null);
+            return new Vnf(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, null, false, null,null, null, null, null,
+                null);
         }
 
         static VfModule createVfModule(Action action) {
-            return new VfModule(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, false, false, null, null, null, null);
+            return new VfModule(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, false, false, null, null, null, null,
+                null);
         }
 
         static Network createNetwork(Action action) {
-            return new Network(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, null, false, null, null, null, null);
+            return new Network(mock(ModelInfo.class), null, null, action.toString(), null, null, null, null, null, null, false, null, null, null, null,
+                null);
         }
     }
 
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java
index 9cc9711..9c0260e 100644
--- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBaseTest.java
@@ -171,11 +171,12 @@
             vfModuleInfo.setModelInvariantId("22222222-f63c-463e-ba94-286933b895f9");
             vfModuleInfo.setModelVersion("10.0");
             return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), "mdt1", null,
-                    "88a6ca3ee0394ade9403f075db23167e", instanceParams, supplementaryParams, false, true, null, UUID.randomUUID().toString(), null, null);
+                    "88a6ca3ee0394ade9403f075db23167e", instanceParams, supplementaryParams, false, true, null, UUID.randomUUID().toString(), null, null,
+                null);
         }
 
         return new VfModule(vfModuleInfo, instanceName, volumeGroupInstanceName, Action.Create.name(), null, null, null,
-                instanceParams, supplementaryParams, false, false, null, UUID.randomUUID().toString(), null, null);
+                instanceParams, supplementaryParams, false, false, null, UUID.randomUUID().toString(), null, null, null);
     }
 
     protected ModelInfo createVfModuleModelInfo(String modelName, String modelVersion, String modelVersionId, String modelInvariantId, String modelCustomizationId, String modelCustomizationName) {
@@ -184,7 +185,7 @@
 
     protected VfModule createVfModuleForReplace(ModelInfo vfModuleModelInfo, String instanceName, String lcpCloudRegionId, String tenantId) {
         return new VfModule( vfModuleModelInfo, instanceName, null, Action.Upgrade.name(), lcpCloudRegionId, null, tenantId,
-                null, null, true, null, null, UUID.randomUUID().toString(), null, null);
+                null, null, true, null, null, UUID.randomUUID().toString(), null, null, null);
     }
 
     protected ModelInfo createVnfModelInfo(boolean isAlacarte) {
@@ -267,7 +268,7 @@
 
         Vnf vnf = new Vnf(vnfModelInfo, "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb", (isUserProvidedNaming ? VNF_NAME : null), Action.Create.name(),
                 "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", vnfInstanceParams,"lineOfBusinessName" , false, null, vfModules,
-                UUID.randomUUID().toString(), null, null);
+                UUID.randomUUID().toString(), null, null, null);
 
         vnfs.put(vnf.getModelInfo().getModelName(), vnf);
         return vnfs;
@@ -320,7 +321,7 @@
                 details->new Network(createNetworkModelInfo(isALaCarte, details.modelCustomizationId), "a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb",
                 details.name, Action.Create.name(),
                 "platformName", "mdt1", null, "88a6ca3ee0394ade9403f075db23167e", instanceParams,"lineOfBusinessName" ,
-                false, null, UUID.randomUUID().toString(), null, null));
+                false, null, UUID.randomUUID().toString(), null, null, null));
 //        I can't tell why compiler don't like the statement if it's only one line...
         return networkStream.collect(Collectors.toMap(network -> network.getModelInfo().getModelCustomizationId(), network -> network));
     }
@@ -335,7 +336,8 @@
         modelInfo.setModelInvariantId("11111111-f63c-463e-ba94-286933b895f9");
         modelInfo.setModelVersion("10.0");
 
-        return new InstanceGroup(modelInfo, (isUserProvidedNaming ? VNF_GROUP_NAME : null), action.name(), false, null, emptyMap(), UUID.randomUUID().toString(), null, null);
+        return new InstanceGroup(modelInfo, (isUserProvidedNaming ? VNF_GROUP_NAME : null), action.name(), false, null, emptyMap(), UUID.randomUUID().toString(), null, null,
+            null);
     }
 
     protected ModelInfo createServiceModelInfo() {
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java
index ce0aa42..c1a6abc 100644
--- a/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/services/AsyncInstantiationBusinessLogicTest.java
@@ -1048,7 +1048,7 @@
     public void whenLcpRegionNotEmpty_thenCloudRegionIdOfResourceIsLegacy() {
         String legacyCloudRegion = "legacyCloudRegion";
         Vnf vnf = new Vnf(new ModelInfo(), null, null, Action.Create.name(), null, "anyCloudRegion", legacyCloudRegion,
-                null, null, null, false, null, null, UUID.randomUUID().toString(), null, null);
+                null, null, null, false, null, null, UUID.randomUUID().toString(), null, null, null);
         assertThat(vnf.getLcpCloudRegionId(), equalTo(legacyCloudRegion));
     }
 
diff --git a/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java b/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java
index 2c70b3d..e28ea30 100644
--- a/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java
+++ b/vid-app-common/src/test/java/org/onap/vid/services/MsoRequestBuilderTest.java
@@ -533,7 +533,8 @@
                         "  }" +
                         "}";
         Vnf vnfDetails = new Vnf(createVnfModelInfo(true), "productFamily", "instanceName", Action.Delete.name(), "platform", "AAIAIC25", null,
-                "092eb9e8e4b7412e8787dd091bc58e86", null, null, false, "VNF_INSTANCE_ID", null, UUID.randomUUID().toString(), null, null);
+                "092eb9e8e4b7412e8787dd091bc58e86", null, null, false, "VNF_INSTANCE_ID", null, UUID.randomUUID().toString(), null, null,
+            null);
         RequestDetailsWrapper<VnfInstantiationRequestDetails> result =
                 msoRequestBuilder.generateDeleteVnfRequest(vnfDetails, "az2018");
         MsoOperationalEnvironmentTest.assertThatExpectationIsLikeObject(expected, result);
diff --git a/vid-automation/src/main/java/vid/automation/test/Constants.java b/vid-automation/src/main/java/vid/automation/test/Constants.java
index a81757e..689c463 100644
--- a/vid-automation/src/main/java/vid/automation/test/Constants.java
+++ b/vid-automation/src/main/java/vid/automation/test/Constants.java
@@ -94,6 +94,9 @@
         public static final String newModalSubscriberInputId = "subscriber";
         public static final String newModalServiceTypeInputId = "serviceType";
         public static final String newModalVNFTypeInputId = "vnfType";
+        public static final String newModalVNFTypeInputId1 = "vnfTypeInput";
+        public static final String newModalVNFCloudRegion = "cloudRegion";
+        public static final String newModalVNFSearchVNF = "searchVNF";
         public static final String newModalFromVNFVersionInputId = "fromVNFVersion";
         public static final String newModalVNFNameInputId = "vnfName";
         public static final String newModalWorkFlowInputId = "workflow";
diff --git a/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java b/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java
index 0f75df6..500d981 100644
--- a/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java
+++ b/vid-automation/src/main/java/vid/automation/test/test/ChangeManagementTest.java
@@ -40,6 +40,7 @@
 import org.onap.sdc.ci.tests.execute.setup.ExtentTestActions;
 import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
+import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetTenants;
 import org.onap.simulator.presetGenerator.presets.aai.PresetBaseAAICustomQuery;
 import org.onap.simulator.presetGenerator.presets.scheduler.PresetDeleteSchedulerChangeManagement;
 import org.openqa.selenium.JavascriptExecutor;
@@ -93,7 +94,15 @@
         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalSubscriberInputId));
         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalServiceTypeInputId));
         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFNameInputId));
-        Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFTypeInputId));
+
+        if (Features.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH.isActive()) {
+            Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFTypeInputId1));
+            Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFCloudRegion));
+            Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFSearchVNF));
+        } else {
+            Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalVNFTypeInputId));
+        }
+
         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalFromVNFVersionInputId));
         Assert.assertTrue(Exists.byId(Constants.ChangeManagement.newModalWorkFlowInputId));
         Assert.assertTrue(Exists.byId(Constants.generalSubmitButtonId));
@@ -105,6 +114,7 @@
         String subscriberName = VNF_DATA_WITH_IN_PLACE.subscriberName;
         String serviceType = VNF_DATA_WITH_IN_PLACE.serviceType;
         String vnfType = VNF_DATA_WITH_IN_PLACE.vnfType;
+        String cloudRegion = VNF_DATA_WITH_IN_PLACE.cloudRegion;
         String vnfSourceVersion = VNF_DATA_WITH_IN_PLACE.vnfSourceVersion;
         ChangeManagementPage.openNewChangeManagementModal();
         Wait.angularHttpRequestsLoaded();
@@ -115,8 +125,15 @@
         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalServiceTypeInputId, serviceType);
         Wait.angularHttpRequestsLoaded();
 
-        SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalVNFTypeInputId, vnfType);
+        if (Features.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH.isActive()) {
+            Input.text(vnfType, Constants.ChangeManagement.newModalVNFTypeInputId);
+            SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalVNFCloudRegion, cloudRegion);
+            Click.byId(Constants.ChangeManagement.newModalVNFSearchVNF);
+        } else {
+            SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalVNFTypeInputId, vnfType);
+        }
         Wait.angularHttpRequestsLoaded();
+
         SelectOption.byIdAndVisibleText(Constants.ChangeManagement.newModalFromVNFVersionInputId, vnfSourceVersion);
         Wait.angularHttpRequestsLoaded();
         Click.byId(Constants.ChangeManagement.newModalVNFNameInputId);
@@ -159,6 +176,7 @@
         static String subscriberName = "Emanuel";
         static String serviceType = "vRichardson";
         static String vnfType = "vMobileDNS";
+        static String cloudRegion = "AAIAIC25 (AIC)";
         static String vnfSourceVersion = "1.0";
         static String vnfName = "zolson3amdns02test2";
         static String vnfTargetVersion = "5.0";
@@ -222,6 +240,18 @@
                 }
             }, APPEND);
         }
+
+
+        SimulatorApi.registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), SimulatorApi.RegistrationStrategy.APPEND);
+
+        if (Features.FLAG_FLASH_CLOUD_REGION_AND_NF_ROLE_OPTIONAL_SEARCH.isActive()) {
+            SimulatorApi.registerExpectationFromPreset(new PresetAAIGetTenants(
+                    VNF_DATA_WITH_IN_PLACE.subscriberId,
+                    VNF_DATA_WITH_IN_PLACE.serviceType,
+                    "presets_templates/PresetAAIGetTenants_service_type_vWINIFRED.json"), SimulatorApi.RegistrationStrategy.APPEND);
+
+        }
+
         registerDefaultTablesData();
         resetGetServicesCache();
     }
diff --git a/vid-automation/src/main/resources/presets_templates/PresetAAIGetTenants_service_type_vWINIFRED.json b/vid-automation/src/main/resources/presets_templates/PresetAAIGetTenants_service_type_vWINIFRED.json
new file mode 100644
index 0000000..8cd6d19
--- /dev/null
+++ b/vid-automation/src/main/resources/presets_templates/PresetAAIGetTenants_service_type_vWINIFRED.json
@@ -0,0 +1,128 @@
+{
+  "service-type": "vWINIFRED",
+  "resource-version": "1494001841964",
+  "relationship-list": {
+    "relationship": [
+      {
+        "related-to": "tenant",
+        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/AAIAIC25/tenants/tenant/092eb9e8e4b7412e8787dd091bc58e86",
+        "relationship-data": [
+          {
+            "relationship-key": "cloud-region.cloud-owner",
+            "relationship-value": "irma-aic"
+          },
+          {
+            "relationship-key": "cloud-region.cloud-region-id",
+            "relationship-value": "AAIAIC25"
+          },
+          {
+            "relationship-key": "tenant.tenant-id",
+            "relationship-value": "092eb9e8e4b7412e8787dd091bc58e86"
+          }
+        ],
+        "related-to-property": [
+          {
+            "property-key": "tenant.tenant-name",
+            "property-value": "USP-SIP-IC-24335-T-01"
+          }
+        ]
+      },
+      {
+        "related-to": "tenant",
+        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/hvf6/tenants/tenant/bae71557c5bb4d5aac6743a4e5f1d054",
+        "relationship-data": [
+          {
+            "relationship-key": "cloud-region.cloud-owner",
+            "relationship-value": "irma-aic"
+          },
+          {
+            "relationship-key": "cloud-region.cloud-region-id",
+            "relationship-value": "hvf6"
+          },
+          {
+            "relationship-key": "tenant.tenant-id",
+            "relationship-value": "bae71557c5bb4d5aac6743a4e5f1d054"
+          }
+        ],
+        "related-to-property": [
+          {
+            "property-key": "tenant.tenant-name",
+            "property-value": "AIN Web Tool-15-D-testalexandria"
+          }
+        ]
+      },
+      {
+        "related-to": "tenant",
+        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/hvf6/tenants/tenant/229bcdc6eaeb4ca59d55221141d01f8e",
+        "relationship-data": [
+          {
+            "relationship-key": "cloud-region.cloud-owner",
+            "relationship-value": "irma-aic"
+          },
+          {
+            "relationship-key": "cloud-region.cloud-region-id",
+            "relationship-value": "hvf6"
+          },
+          {
+            "relationship-key": "tenant.tenant-id",
+            "relationship-value": "229bcdc6eaeb4ca59d55221141d01f8e"
+          }
+        ],
+        "related-to-property": [
+          {
+            "property-key": "tenant.tenant-name",
+            "property-value": "AIN Web Tool-15-D-STTest2"
+          }
+        ]
+      },
+      {
+        "related-to": "tenant",
+        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/hvf6/tenants/tenant/cb42a77ff45b48a8b8deb83bb64acc74",
+        "relationship-data": [
+          {
+            "relationship-key": "cloud-region.cloud-owner",
+            "relationship-value": "irma-aic"
+          },
+          {
+            "relationship-key": "cloud-region.cloud-region-id",
+            "relationship-value": "hvf6"
+          },
+          {
+            "relationship-key": "tenant.tenant-id",
+            "relationship-value": "cb42a77ff45b48a8b8deb83bb64acc74"
+          }
+        ],
+        "related-to-property": [
+          {
+            "property-key": "tenant.tenant-name",
+            "property-value": "ro-T11"
+          }
+        ]
+      },
+      {
+        "related-to": "tenant",
+        "related-link": "/aai/v11/cloud-infrastructure/cloud-regions/cloud-region/irma-aic/hvf6/tenants/tenant/fa45ca53c80b492fa8be5477cd84fc2b",
+        "relationship-data": [
+          {
+            "relationship-key": "cloud-region.cloud-owner",
+            "relationship-value": "irma-aic"
+          },
+          {
+            "relationship-key": "cloud-region.cloud-region-id",
+            "relationship-value": "hvf6"
+          },
+          {
+            "relationship-key": "tenant.tenant-id",
+            "relationship-value": "fa45ca53c80b492fa8be5477cd84fc2b"
+          }
+        ],
+        "related-to-property": [
+          {
+            "property-key": "tenant.tenant-name",
+            "property-value": "ro-T112"
+          }
+        ]
+      }
+    ]
+  }
+}
diff --git a/vid-webpack-master/cypress/pipeline/run_group1.sh b/vid-webpack-master/cypress/pipeline/run_group1.sh
index d60b853..526fd7d 100644
--- a/vid-webpack-master/cypress/pipeline/run_group1.sh
+++ b/vid-webpack-master/cypress/pipeline/run_group1.sh
@@ -10,4 +10,4 @@
 cd ${CYPRESS_HOME_DIR}
 
 cat ${TESTS_GROUP_FILE}
-npm run cypress:headless -- --spec=$(cat ${TESTS_GROUP_FILE} | tr '\n' ',')
+npm run cypress:headless --max-old-space-size=4096 -- --spec=$(cat ${TESTS_GROUP_FILE} | tr '\n' ',')
diff --git a/vid-webpack-master/cypress/pipeline/run_group2.sh b/vid-webpack-master/cypress/pipeline/run_group2.sh
index 2f30fa7..43cfbc6 100644
--- a/vid-webpack-master/cypress/pipeline/run_group2.sh
+++ b/vid-webpack-master/cypress/pipeline/run_group2.sh
@@ -14,4 +14,4 @@
 ls -1 cypress/integration/*/*.e2e.ts | comm -3 - ${TESTS_GROUP_FILE_1} > ${TESTS_GROUP_FILE}
 
 cat ${TESTS_GROUP_FILE}
-npm run cypress:headless -- --spec=$(cat ${TESTS_GROUP_FILE} | tr '\n' ',')
+npm run cypress:headless --max-old-space-size=4096 -- --spec=$(cat ${TESTS_GROUP_FILE} | tr '\n' ',')