Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / java / org / onap / vid / mso / MsoBusinessLogicImpl.java
index 00db464..7fe79b3 100644 (file)
@@ -26,64 +26,68 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.ObjectMapper;
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.util.SystemProperties;
 import org.onap.vid.changeManagement.ChangeManagementRequest;
 import org.onap.vid.changeManagement.RequestDetailsWrapper;
-import org.onap.vid.controllers.OperationalEnvironmentController;
-import org.onap.vid.domain.mso.RequestInfo;
+import org.onap.vid.controller.OperationalEnvironmentController;
 import org.onap.vid.exceptions.GenericUncheckedException;
-import org.onap.vid.mso.model.OperationalEnvironmentActivateInfo;
-import org.onap.vid.mso.model.OperationalEnvironmentDeactivateInfo;
+import org.onap.vid.model.RequestReferencesContainer;
+import org.onap.vid.model.SoftDeleteRequest;
+import org.onap.vid.mso.model.*;
 import org.onap.vid.mso.rest.OperationalEnvironment.OperationEnvironmentRequestDetails;
 import org.onap.vid.mso.rest.*;
-import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
-import org.onap.portalsdk.core.util.SystemProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.togglz.core.manager.FeatureManager;
 
 import javax.ws.rs.BadRequestException;
 import java.io.IOException;
-import java.text.DateFormat;
-import java.text.SimpleDateFormat;
 import java.util.*;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
+import static java.util.stream.Collectors.collectingAndThen;
+import static java.util.stream.Collectors.toList;
 import static org.apache.commons.lang.StringUtils.upperCase;
 import static org.onap.vid.changeManagement.ChangeManagementRequest.MsoChangeManagementRequest;
-import static org.onap.vid.controllers.MsoController.*;
+import static org.onap.vid.controller.MsoController.*;
 import static org.onap.vid.mso.MsoProperties.*;
 import static org.onap.vid.properties.Features.FLAG_UNASSIGN_SERVICE;
 import static org.onap.vid.utils.Logging.debugRequestDetails;
 
 public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
-    public static final String START = " start";
-    public static final String RESOURCE_TYPE = "resourceType";
-    FeatureManager featureManager;
-
-    /**
-     * The Constant dateFormat.
-     */
-    private static final DateFormat dateFormat = new SimpleDateFormat("HH:mm:ss:SSSS");
+    static final List<String> DASHBOARD_ALLOWED_TYPES = Stream.of(RequestType.REPLACE_INSTANCE,
+            RequestType.UPDATE_INSTANCE,
+            RequestType.APPLY_UPDATED_CONFIG,
+            RequestType.IN_PLACE_SOFTWARE_UPDATE,
+            RequestType.SCALE_OUT)
+            .map(requestType -> requestType.toString().toUpperCase())
+            .collect(collectingAndThen(toList(), Collections::unmodifiableList));
+    private static final String RESOURCE_TYPE = "resourceType";
     private static final Pattern SOFTWARE_VERSION_PATTERN = Pattern.compile("^[A-Za-z0-9.\\-]+$");
     private static final Pattern NUMBER_PATTERN = Pattern.compile("^[0-9]+$");
     private static final String ACTIVATE = "/activate";
     private static final String DEACTIVATE = "/deactivate";
     private static final String ENABLE_PORT = "/enablePort";
     private static final String DISABLE_PORT = "/disablePort";
+    private static final String ACTIVATE_FABRIC_CONFIGURATION = "/activateFabricConfiguration";
+    private static final String DEACTIVATE_AND_CLOUD_DELETE = "/deactivateAndCloudDelete";
     private static final String RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT = "operationalEnvironment";
     private static final String SOURCE_OPERATIONAL_ENVIRONMENT = "VID";
     private static final ObjectMapper objectMapper = new ObjectMapper();
+    /**
+     * The logger.
+     */
+    private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
     /**
      * The Mso REST client
      * This should be replaced with mso client factory.
      */
     private final MsoInterface msoClientInterface;
+    FeatureManager featureManager;
 
-    /**
-     * The logger.
-     */
-    private static final EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(MsoBusinessLogicImpl.class);
-    
     @Autowired
     public MsoBusinessLogicImpl(MsoInterface msoClientInterface, FeatureManager featureManager) {
         this.msoClientInterface = msoClientInterface;
@@ -101,46 +105,36 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     // this function should get params from tosca and send them to instance at mso, then return success response.
     @Override
     public MsoResponseWrapper createSvcInstance(RequestDetails msoRequest) {
-        String methodName = "createSvcInstance ";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createSvcInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
 
         return msoClientInterface.createSvcInstance(msoRequest, endpoint);
     }
 
     @Override
-    public MsoResponseWrapper createE2eSvcInstance(Object msoRequest){
-        String methodName = "createE2eSvcInstance ";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
-
+    public MsoResponseWrapper createE2eSvcInstance(Object msoRequest) {
+        logInvocationInDebug("createE2eSvcInstance");
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE);
 
         return msoClientInterface.createE2eSvcInstance(msoRequest, endpoint);
-    } 
+    }
 
     @Override
     public MsoResponseWrapper createVnf(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "createVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createVnf");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
 
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        return msoClientInterface.createVnf(requestDetails, vnf_endpoint);
+        String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        return msoClientInterface.createVnf(requestDetails, vnfEndpoint);
     }
 
     @Override
     public MsoResponseWrapper createNwInstance(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "createNwInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createNwInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
 
         String nw_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         return msoClientInterface.createNwInstance(requestDetails, nw_endpoint);
@@ -148,25 +142,21 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
     @Override
     public MsoResponseWrapper createVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "createVolumeGroupInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createVolumeGroupInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
 
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        vnf_endpoint = vnf_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
+        String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        vnfEndpoint = vnfEndpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
 
-        return msoClientInterface.createVolumeGroupInstance(requestDetails, vnf_endpoint);
+        return msoClientInterface.createVolumeGroupInstance(requestDetails, vnfEndpoint);
     }
 
     @Override
     public MsoResponseWrapper createVfModuleInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "createVfModuleInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createVfModuleInstance");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
 
         String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
@@ -174,10 +164,25 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
         return msoClientInterface.createVfModuleInstance(requestDetails, vf_module_endpoint);
     }
 
+    @Override
+    public MsoResponseWrapper scaleOutVfModuleInstance(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
+        logInvocationInDebug("scaleOutVfModuleInstance");
+
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_SCALE_OUT);
+
+        String partial_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        String vf_module_endpoint = partial_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
+        RequestDetailsWrapper wrapper = new RequestDetailsWrapper();
+        requestDetails.setVnfName(null);
+        requestDetails.setVnfInstanceId(null);
+        wrapper.requestDetails = requestDetails;
+
+        return msoClientInterface.scaleOutVFModuleInstance(wrapper, vf_module_endpoint);
+    }
+
     @Override
     public MsoResponseWrapper createConfigurationInstance(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper, String serviceInstanceId) {
-        String methodName = "createConfigurationInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("createConfigurationInstance");
 
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATIONS);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
@@ -187,24 +192,21 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
     @Override
     public MsoResponseWrapper deleteE2eSvcInstance(Object requestDetails, String serviceInstanceId) {
-        String methodName = "deleteE2eSvcInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteE2eSvcInstance");
 
-        String endpoint;
-               endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE) + "/" + serviceInstanceId;
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_E2E_SVC_INSTANCE) + "/" + serviceInstanceId;
 
         return msoClientInterface.deleteE2eSvcInstance(requestDetails, endpoint);
     }
 
     @Override
     public MsoResponseWrapper deleteSvcInstance(RequestDetails requestDetails, String serviceInstanceId, String serviceStatus) {
-        String methodName = "deleteSvcInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteSvcInstance");
         String endpoint;
 
-        if (featureManager.isActive(FLAG_UNASSIGN_SERVICE)){
+        if (featureManager.isActive(FLAG_UNASSIGN_SERVICE)) {
             endpoint = validateEndpointPath(MsoProperties.MSO_DELETE_OR_UNASSIGN_REST_API_SVC_INSTANCE);
-            if (shouldUnassignService(serviceStatus)){
+            if (shouldUnassignService(serviceStatus)) {
                 logger.debug(EELFLoggerDelegate.debugLogger, "unassign service");
                 String svc_endpoint = endpoint + "/" + serviceInstanceId + "/unassign";
                 return msoClientInterface.unassignSvcInstance(requestDetails, svc_endpoint);
@@ -218,32 +220,26 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     }
 
     private boolean shouldUnassignService(String serviceStatus) {
-            return ImmutableList.of("created","pendingdelete","pending-delete", "assigned").contains(serviceStatus.toLowerCase());
+        return ImmutableList.of("created", "pendingdelete", "pending-delete", "assigned").contains(serviceStatus.toLowerCase());
     }
 
     @Override
     public MsoResponseWrapper deleteVnf(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "deleteVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deleteVnf");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
+        String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        vnfEndpoint = vnfEndpoint + '/' + vnfInstanceId;
 
-        return msoClientInterface.deleteVnf(requestDetails, vnf_endpoint);
+        return msoClientInterface.deleteVnf(requestDetails, vnfEndpoint);
     }
 
     @Override
     public MsoResponseWrapper deleteVfModule(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String vfModuleId) {
-        String methodName = "deleteVfModule";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
+        logInvocationInDebug("deleteVfModule");
 
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
         String vf__modules_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId).replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
-
         String delete_vf_endpoint = vf__modules_endpoint + '/' + vfModuleId;
 
         return msoClientInterface.deleteVfModule(requestDetails, delete_vf_endpoint);
@@ -251,27 +247,21 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
     @Override
     public MsoResponseWrapper deleteVolumeGroupInstance(RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId, String volumeGroupId) {
-        String methodName = "deleteVolumeGroupInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
+        logInvocationInDebug("deleteVolumeGroupInstance");
 
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VOLUME_GROUP_INSTANCE);
         String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        String vnf_endpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
-        String delete_volume_group_endpoint = vnf_endpoint + "/" + volumeGroupId;
+        String vnfEndpoint = svc_endpoint.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
+        String delete_volume_group_endpoint = vnfEndpoint + "/" + volumeGroupId;
 
         return msoClientInterface.deleteVolumeGroupInstance(requestDetails, delete_volume_group_endpoint);
     }
 
     @Override
     public MsoResponseWrapper deleteNwInstance(RequestDetails requestDetails, String serviceInstanceId, String networkInstanceId) {
-        String methodName = "deleteNwInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
+        logInvocationInDebug("deleteNwInstance");
 
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_NETWORK_INSTANCE);
         String svc_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
         String delete_nw_endpoint = svc_endpoint + "/" + networkInstanceId;
 
@@ -281,7 +271,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public MsoResponseWrapper getOrchestrationRequest(String requestId) {
         String methodName = "getOrchestrationRequest";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQ);
             String path = p + "/" + requestId;
@@ -289,8 +279,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             return msoClientInterface.getOrchestrationRequest(path);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -298,7 +287,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public MsoResponseWrapper getOrchestrationRequests(String filterString) {
         String methodName = "getOrchestrationRequest";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
             String path = p + filterString;
@@ -306,8 +295,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             return msoClientInterface.getOrchestrationRequest(path);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -315,48 +303,51 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public List<Request> getOrchestrationRequestsForDashboard() {
         String methodName = "getOrchestrationRequestsForDashboard";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-        List<Request> filteredOrchestrationRequests = new ArrayList<>();
-        try {
-            String path = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS);
-            path += "filter=modelType:EQUALS:vnf";
-            RestObject<String> restObjStr = new RestObject<>();
-            String str = new String();
-            restObjStr.set(str);
+        logInvocationInDebug(methodName);
 
-            MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequestsForDashboard(str, "", path, restObjStr);
-            List<RequestWrapper> allOrchestrationRequests = deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
-
-            final ImmutableList<String> suppoertedRequestTypes = ImmutableList.of(
-                    RequestType.REPLACE_INSTANCE.toString().toUpperCase(),
-                    RequestType.UPDATE_INSTANCE.toString().toUpperCase(),
-                    RequestType.APPLY_UPDATED_CONFIG.toString().toUpperCase(),
-                    RequestType.IN_PLACE_SOFTWARE_UPDATE.toString().toUpperCase()
-            );
-
-            for (RequestWrapper currentRequest : allOrchestrationRequests) {
-                if (currentRequest.getRequest() != null
-                        && "vnf".equalsIgnoreCase(currentRequest.getRequest().getRequestScope())
-                        && suppoertedRequestTypes.contains(upperCase(currentRequest.getRequest().getRequestType()))
-                ) {
-                    filteredOrchestrationRequests.add(currentRequest.getRequest());
-                }
-            }
+        List<Request> dashboardOrchestrationReqs = new ArrayList<>();
+        try {
+            List<RequestWrapper> vnfOrchestrationReqsWrappers = getOrchestrationRequestsByFilter("modelType", "vnf");
+            dashboardOrchestrationReqs = vnfOrchestrationReqsWrappers.stream()
+                    .filter(reqWrapper -> Objects.nonNull(reqWrapper.getRequest())
+                            && DASHBOARD_ALLOWED_TYPES.contains(upperCase(reqWrapper.getRequest().getRequestType())))
+                    .map(RequestWrapper::getRequest)
+                    .collect(Collectors.toList());
+
+            List<RequestWrapper> scaleOutOrchestrationReqWrappers = getOrchestrationRequestsByFilter("action", "scaleOut");
+            List<Request> scaleoutRequests = scaleOutOrchestrationReqWrappers.stream()
+                    .filter(reqWrapper -> Objects.nonNull(reqWrapper.getRequest()))
+                    .map(RequestWrapper::getRequest)
+                    .collect(Collectors.toList());
+
+            dashboardOrchestrationReqs.addAll(scaleoutRequests);
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
         }
-        return filteredOrchestrationRequests;
+        return dashboardOrchestrationReqs;
+    }
+
+    private String constructOrchestrationRequestFilter(String filterName, String filterValue) {
+        return String.format("%sfilter=%s:EQUALS:%s",
+                SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_ORC_REQS), filterName, filterValue);
+    }
+
+    private List<RequestWrapper> getOrchestrationRequestsByFilter(String filterName, String filterValue) {
+        String orchestrationReqPath = constructOrchestrationRequestFilter(filterName, filterValue);
+        RestObject<String> restObjStr = new RestObject<>();
+        String str = new String();
+        restObjStr.set(str);
+        MsoResponseWrapper msoResponseWrapper = msoClientInterface.getOrchestrationRequest(str, "", orchestrationReqPath, restObjStr, true);
+        return deserializeOrchestrationRequestsJson(msoResponseWrapper.getEntity());
     }
 
     private List<RequestWrapper> deserializeOrchestrationRequestsJson(String orchestrationRequestsJson) {
-        String methodName = "deserializeOrchestrationRequestsJson";
-        logger.debug(dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deserializeOrchestrationRequestsJson");
 
         ObjectMapper mapper = new ObjectMapper();
         mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
         mapper.configure(DeserializationFeature.READ_ENUMS_USING_TO_STRING, true);
-        RequestList requestList = null;
+        RequestList requestList;
         try {
             requestList = mapper.readValue(orchestrationRequestsJson, RequestList.class);
         } catch (IOException e) {
@@ -369,7 +360,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public List<Task> getManualTasksByRequestId(String originalRequestId) {
         String methodName = "getManualTasksByRequestId";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
 
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
@@ -383,15 +374,13 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             return deserializeManualTasksJson(msoResponseWrapper.getEntity());
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
 
     private List<Task> deserializeManualTasksJson(String manualTasksJson) {
-        String methodName = "deserializeManualTasksJson";
-        logger.debug(dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("deserializeManualTasksJson");
 
         ObjectMapper mapper = new ObjectMapper();
         try {
@@ -406,7 +395,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public MsoResponseWrapper completeManualTask(RequestDetails requestDetails, String taskId) {
         String methodName = "completeManualTask";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String p = SystemProperties.getProperty(MsoProperties.MSO_REST_API_GET_MAN_TASKS);
             String path = p + "/" + taskId + "/complete";
@@ -420,8 +409,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             return MsoUtil.wrapResponse(restObjStr);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -429,7 +417,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public MsoResponseWrapper activateServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
         String methodName = "activateServiceInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug(methodName);
         try {
             String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
             String activateServicePath = serviceEndpoint + "/" + serviceInstanceId + ACTIVATE;
@@ -443,8 +431,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             return MsoUtil.wrapResponse(restObjStr);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logException(methodName, e);
             throw e;
         }
     }
@@ -452,27 +439,24 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
     @Override
     public MsoResponseWrapperInterface updateVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "updateVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("updateVnf");
 
         String endpoint;
         endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_INSTANCE);
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        vnf_endpoint = vnf_endpoint + '/' + vnfInstanceId;
-        return msoClientInterface.updateVnf(requestDetails, vnf_endpoint);
+        String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        vnfEndpoint = vnfEndpoint + '/' + vnfInstanceId;
+        return msoClientInterface.updateVnf(requestDetails, vnfEndpoint);
     }
 
     @Override
     public MsoResponseWrapperInterface replaceVnf(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "replaceVnf";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("replaceVnf");
 
-        String endpoint;
-        endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
-        vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, MsoChangeManagementRequest.REPLACE);
-        return msoClientInterface.replaceVnf(requestDetails, vnf_endpoint);
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
+        String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        vnfEndpoint = vnfEndpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
+        vnfEndpoint = vnfEndpoint.replace(REQUEST_TYPE, MsoChangeManagementRequest.REPLACE);
+        return msoClientInterface.replaceVnf(requestDetails, vnfEndpoint);
     }
 
     public RequestDetailsWrapper generateInPlaceMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) {
@@ -489,53 +473,101 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     @Override
     public RequestDetailsWrapper generateConfigMsoRequest(org.onap.vid.changeManagement.RequestDetails requestDetails) {
         validateUpdateVnfConfig(requestDetails);
-        RequestDetails ConfigUpdateRequest = new RequestDetails();
-        ConfigUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
-        ConfigUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
+        RequestDetails configUpdateRequest = new RequestDetails();
+        configUpdateRequest.setRequestParameters(requestDetails.getRequestParameters());
+        configUpdateRequest.setRequestInfo(requestDetails.getRequestInfo());
         RequestDetailsWrapper requestDetailsWrapper = new RequestDetailsWrapper();
-        requestDetailsWrapper.requestDetails = ConfigUpdateRequest;
+        requestDetailsWrapper.requestDetails = configUpdateRequest;
         return requestDetailsWrapper;
     }
 
+    @Override
+    public String getActivateFabricConfigurationPath(String serviceInstanceId) {
+        String path = validateEndpointPath(MsoProperties.MSO_REST_API_SERVICE_INSTANCE_CREATE);
+        path += "/" + serviceInstanceId + ACTIVATE_FABRIC_CONFIGURATION;
+
+        return path;
+    }
+
+    @Override
+    public String getDeactivateAndCloudDeletePath(String serviceInstanceId, String vnfInstanceId, String vfModuleInstanceId) {
+        String path = validateEndpointPath(MsoProperties.MSO_REST_API_VF_MODULE_INSTANCE);
+        path = path.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        path = path.replaceFirst(VNF_INSTANCE_ID, vnfInstanceId);
+        path += "/" + vfModuleInstanceId + DEACTIVATE_AND_CLOUD_DELETE;
+
+        return path;
+    }
+
+    @Override
+    public RequestDetails buildRequestDetailsForSoftDelete(SoftDeleteRequest softDeleteRequest) {
+        RequestDetails requestDetails = new RequestDetails();
+        RequestInfo requestInfo = new RequestInfo();
+        requestInfo.setSource("VID");
+        requestInfo.setRequestorId(softDeleteRequest.getUserId());
+        requestDetails.setRequestInfo(requestInfo);
+
+        CloudConfiguration cloudConfiguration = new CloudConfiguration();
+        cloudConfiguration.setTenantId(softDeleteRequest.getTenantId());
+        cloudConfiguration.setLcpCloudRegionId(softDeleteRequest.getLcpCloudRegionId());
+        requestDetails.setCloudConfiguration(cloudConfiguration);
 
+        ModelInfo modelInfo = new ModelInfo();
+        modelInfo.setModelType("vfModule");
+        requestDetails.setModelInfo(modelInfo);
 
+        RequestParameters requestParameters = new RequestParameters();
+        requestParameters.setTestApi("GR_API");
+        requestDetails.setRequestParameters(requestParameters);
+
+        return requestDetails;
+    }
+
+    @Override
+    public MsoResponseWrapper2 deactivateAndCloudDelete(String serviceInstanceId, String vnfInstanceId, String vfModuleInstanceId, RequestDetails requestDetails) {
+        String path = getDeactivateAndCloudDeletePath(serviceInstanceId, vnfInstanceId, vfModuleInstanceId);
+        return new MsoResponseWrapper2<>(msoClientInterface.post(path, new RequestDetailsWrapper<>(requestDetails), RequestReferencesContainer.class));
+    }
+
+    @Override
+    public MsoResponseWrapper2 activateFabricConfiguration(String serviceInstanceId, RequestDetails requestDetails) {
+        String path = getActivateFabricConfigurationPath(serviceInstanceId);
+        return new MsoResponseWrapper2<>(msoClientInterface.post(path, new RequestDetailsWrapper<>(requestDetails), RequestReferencesContainer.class));
+    }
 
 
     @Override
     public MsoResponseWrapperInterface updateVnfSoftware(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "updateVnfSoftware";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
-        String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.SOFTWARE_UPDATE); //workflow name in mso is different than workflow name in vid UI
+        logInvocationInDebug("updateVnfSoftware");
+        String vnfEndpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.SOFTWARE_UPDATE); //workflow name in mso is different than workflow name in vid UI
         RequestDetailsWrapper finalRequestDetails = generateInPlaceMsoRequest(requestDetails);
-        return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
+        return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnfEndpoint);
     }
 
     @Override
     public MsoResponseWrapperInterface updateVnfConfig(org.onap.vid.changeManagement.RequestDetails requestDetails, String serviceInstanceId, String vnfInstanceId) {
-        String methodName = "updateVnfConfig";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("updateVnfConfig");
         RequestDetailsWrapper finalRequestDetails = generateConfigMsoRequest(requestDetails);
-        String vnf_endpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.CONFIG_UPDATE);
-        return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnf_endpoint);
+        String vnfEndpoint = getChangeManagementEndpoint(serviceInstanceId, vnfInstanceId, MsoChangeManagementRequest.CONFIG_UPDATE);
+        return msoClientInterface.changeManagementUpdate(finalRequestDetails, vnfEndpoint);
     }
 
     private String getChangeManagementEndpoint(String serviceInstanceId, String vnfInstanceId, String vnfRequestType) {
-        String endpoint  = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
-        String vnf_endpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
-        vnf_endpoint = vnf_endpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
-        vnf_endpoint = vnf_endpoint.replace(REQUEST_TYPE, vnfRequestType);
-        return vnf_endpoint;
+        String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_VNF_CHANGE_MANAGEMENT_INSTANCE);
+        String vnfEndpoint = endpoint.replaceFirst(SVC_INSTANCE_ID, serviceInstanceId);
+        vnfEndpoint = vnfEndpoint.replace(VNF_INSTANCE_ID, vnfInstanceId);
+        vnfEndpoint = vnfEndpoint.replace(REQUEST_TYPE, vnfRequestType);
+        return vnfEndpoint;
     }
 
-    private Map getChangeManagementPayload(RequestDetails requestDetails, String message){
-        if(requestDetails.getRequestParameters()==null||requestDetails.getRequestParameters().getAdditionalProperties()==null){
+    private Map getChangeManagementPayload(RequestDetails requestDetails, String message) {
+        if (requestDetails.getRequestParameters() == null || requestDetails.getRequestParameters().getAdditionalProperties() == null) {
             throw new BadRequestException(message);
         }
-        Object payloadRaw=requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
-        try{
-            return objectMapper.readValue((String)payloadRaw,Map.class);
-        }
-        catch(Exception exception){
+        Object payloadRaw = requestDetails.getRequestParameters().getAdditionalProperties().get("payload");
+        try {
+            return objectMapper.readValue((String) payloadRaw, Map.class);
+        } catch (Exception exception) {
             throw new BadRequestException(message);
         }
     }
@@ -564,30 +596,12 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
         }
     }
 
-    private void validateUpdateVnfConfig(RequestDetails requestDetails) {
-        final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
-
-        Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
-        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
-        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
-    }
-
-    private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
-        final String noValidPayloadPropertyMsg = noValidPayloadMsg+ ", "+ propertyName + " property is not valid";
-        if(!payload.containsKey(propertyName)) {
-            throw new BadRequestException( noValidPayloadPropertyMsg);
-        }
-    }
-
     @Override
-    public MsoResponseWrapper deleteConfiguration(
-            org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper,
-            String serviceInstanceId,
-            String configurationId) {
-
-        String methodName = "deleteConfiguration";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+    public MsoResponseWrapper deleteConfiguration(org.onap.vid.mso.rest.RequestDetailsWrapper requestDetailsWrapper,
+                                                  String serviceInstanceId,
+                                                  String configurationId) {
 
+        logInvocationInDebug("deleteConfiguration");
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
         endpoint = endpoint.replace(CONFIGURATION_ID, configurationId);
@@ -602,8 +616,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             String configurationId,
             boolean isActivate) {
 
-        String methodName = "setConfigurationActiveStatus";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("setConfigurationActiveStatus");
 
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
@@ -616,9 +629,9 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     }
 
     @Override
-    public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails , String serviceInstanceId, boolean isActivate) {
+    public MsoResponseWrapper setServiceInstanceStatus(RequestDetails requestDetails, String serviceInstanceId, boolean isActivate) {
+        logInvocationInDebug("setServiceInstanceStatus");
         String methodName = "setServiceInstanceStatus";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
         try {
             String serviceEndpoint = validateEndpointPath(MsoProperties.MSO_REST_API_SVC_INSTANCE);
             String endpoint = serviceEndpoint + "/" + serviceInstanceId;
@@ -631,13 +644,13 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             String str = "";
             restObjStr.set(str);
 
-            msoClientInterface.setServiceInstanceStatus(requestDetails , str, "", endpoint, restObjStr);
+            msoClientInterface.setServiceInstanceStatus(requestDetails, str, "", endpoint, restObjStr);
 
             return MsoUtil.wrapResponse(restObjStr);
 
         } catch (Exception e) {
-            logger.error(EELFLoggerDelegate.errorLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
-            logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + "." + methodName + e.toString());
+            logger.error(EELFLoggerDelegate.errorLogger, methodName + e.toString());
+            logger.debug(EELFLoggerDelegate.debugLogger, methodName + e.toString());
             throw e;
         }
     }
@@ -648,8 +661,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             String serviceInstanceId,
             String configurationId,
             boolean isEnable) {
-        String methodName = "setPortOnConfigurationStatus";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("setPortOnConfigurationStatus");
 
         String endpoint = validateEndpointPath(MsoProperties.MSO_REST_API_CONFIGURATION_INSTANCE);
         endpoint = endpoint.replace(SVC_INSTANCE_ID, serviceInstanceId);
@@ -663,7 +675,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
 
     @Override
-    public  RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
+    public RequestDetailsWrapper<RequestDetails> createOperationalEnvironmentActivationRequestDetails(OperationalEnvironmentActivateInfo details) {
         RequestDetails requestDetails = new RequestDetails();
         RequestInfo requestInfo = new RequestInfo();
         requestInfo.setAdditionalProperty(RESOURCE_TYPE, RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
@@ -671,13 +683,13 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
         requestInfo.setRequestorId(details.getUserId());
         requestDetails.setRequestInfo(requestInfo);
 
-        org.onap.vid.domain.mso.RelatedInstance relatedInstance = new org.onap.vid.domain.mso.RelatedInstance();
+        RelatedInstance relatedInstance = new RelatedInstance();
         relatedInstance.setAdditionalProperty(RESOURCE_TYPE, RESOURCE_TYPE_OPERATIONAL_ENVIRONMENT);
         relatedInstance.setInstanceId(details.getRelatedInstanceId());
         relatedInstance.setInstanceName(details.getRelatedInstanceName());
         requestDetails.setAdditionalProperty("relatedInstanceList", Collections.singletonList(ImmutableMap.of("relatedInstance", relatedInstance)));
 
-        org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
+        RequestParameters requestParameters = new RequestParameters();
         requestParameters.setUserParams(null);
         requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
         requestParameters.setAdditionalProperty("workloadContext", details.getWorkloadContext());
@@ -708,7 +720,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
         requestInfo.setRequestorId(details.getUserId());
         requestDetails.setRequestInfo(requestInfo);
 
-        org.onap.vid.domain.mso.RequestParameters requestParameters = new org.onap.vid.domain.mso.RequestParameters();
+        RequestParameters requestParameters = new RequestParameters();
         requestParameters.setUserParams(null);
         requestParameters.setAdditionalProperty("operationalEnvironmentType", "VNF");
         requestDetails.setRequestParameters(requestParameters);
@@ -737,7 +749,6 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
     }
 
 
-
     @Override
     public RequestDetailsWrapper<OperationEnvironmentRequestDetails> convertParametersToRequestDetails(OperationalEnvironmentController.OperationalEnvironmentCreateBody input, String userId) {
         OperationEnvironmentRequestDetails.RequestInfo requestInfo = new OperationEnvironmentRequestDetails.RequestInfo(
@@ -766,8 +777,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
     @Override
     public MsoResponseWrapper removeRelationshipFromServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "removeRelationshipFromServiceInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("removeRelationshipFromServiceInstance");
 
         String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
         String removeRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/removeRelationships";
@@ -777,8 +787,7 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
 
     @Override
     public MsoResponseWrapper addRelationshipToServiceInstance(RequestDetails requestDetails, String serviceInstanceId) {
-        String methodName = "addRelationshipToServiceInstance";
-        logger.debug(EELFLoggerDelegate.debugLogger, dateFormat.format(new Date()) + "<== " + methodName + START);
+        logInvocationInDebug("addRelationshipToServiceInstance");
 
         String serviceEndpoint = SystemProperties.getProperty(MsoProperties.MSO_REST_API_SVC_INSTANCE);
         String addRelationshipsPath = serviceEndpoint + "/" + serviceInstanceId + "/addRelationships";
@@ -786,8 +795,31 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
         return msoClientInterface.addRelationshipToServiceInstance(requestDetails, addRelationshipsPath);
     }
 
+    private void validateUpdateVnfConfig(RequestDetails requestDetails) {
+        final String noValidPayloadMsg = "No valid payload in " + ChangeManagementRequest.CONFIG_UPDATE + " request";
+
+        Map payload = getChangeManagementPayload(requestDetails, noValidPayloadMsg);
+        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "request-parameters");
+        validateConfigUpdateVnfPayloadProperty(payload, noValidPayloadMsg, "configuration-parameters");
+    }
+
+    private void validateConfigUpdateVnfPayloadProperty(Map payload, String noValidPayloadMsg, String propertyName) {
+        final String noValidPayloadPropertyMsg = noValidPayloadMsg + ", " + propertyName + " property is not valid";
+        if (!payload.containsKey(propertyName)) {
+            throw new BadRequestException(noValidPayloadPropertyMsg);
+        }
+    }
 
-    public enum RequestType {
+    private void logInvocationInDebug(String methodName) {
+        logger.debug(EELFLoggerDelegate.debugLogger, methodName + "  start");
+    }
+
+    private void logException(String methodName, Exception e) {
+        logger.error(EELFLoggerDelegate.errorLogger, methodName + e.toString());
+        logger.debug(EELFLoggerDelegate.debugLogger, methodName + e.toString());
+    }
+
+    enum RequestType {
 
         CREATE_INSTANCE("createInstance"),
         DELETE_INSTANCE("deleteInstance"),
@@ -797,13 +829,14 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
         DEACTIVATE_INSTANCE("deactivateInstance"),
         APPLY_UPDATED_CONFIG("applyUpdatedConfig"),
         IN_PLACE_SOFTWARE_UPDATE("inPlaceSoftwareUpdate"),
+        SCALE_OUT("scaleOut"),
         UNKNOWN("unknown"),
         NOT_PROVIDED("not provided");
         private final String value;
         private static final Map<String, RequestType> CONSTANTS = new HashMap<>();
 
         static {
-            for (RequestType c: values()) {
+            for (RequestType c : values()) {
                 CONSTANTS.put(c.value, c);
             }
         }
@@ -812,12 +845,6 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
             this.value = value;
         }
 
-        @JsonValue
-        @Override
-        public String toString() {
-            return this.value;
-        }
-
         @JsonCreator
         public static RequestType fromValue(String value) {
             RequestType constant = CONSTANTS.get(value);
@@ -827,5 +854,11 @@ public class MsoBusinessLogicImpl implements MsoBusinessLogic {
                 return constant;
             }
         }
+
+        @JsonValue
+        @Override
+        public String toString() {
+            return this.value;
+        }
     }
 }
\ No newline at end of file