Merge from ECOMP's repository
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / services / msoService.js
index 864abe6..790f798 100755 (executable)
 \r
 "use strict";\r
 \r
-var MsoService = function($http, $log, PropertyService, UtilityService, COMPONENT, FIELD) {\r
+var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) {\r
 \r
-       var _this = this;\r
+    var _this = this;\r
 \r
        /*\r
         * Common function to handle both create and delete instance requests\r
         */\r
-       var requestInstanceUpdate = function(request, successCallbackFunction) {\r
-               $log.debug("MsoService:requestInstanceUpdate: request:");\r
-               $log.debug(request);\r
-               $http.post( "mso/" + request.url, {\r
-                       requestDetails : request.requestDetails\r
-               }, {\r
-                       timeout : PropertyService.getServerResponseTimeoutMsec()\r
-               }).then(successCallbackFunction)["catch"]\r
-                               (UtilityService.runHttpErrorHandler);\r
-       }\r
-\r
-       var checkValidStatus = function(response) {\r
-               if (response.data.status < 200 || response.data.status > 202) {\r
-                       throw {\r
-                               type : FIELD.ID.MSO_FAILURE\r
-                       }\r
-               }\r
-       }\r
-\r
-       var addListEntry = function(name, value) {\r
-               var entry = '"' + name + '": ';\r
-               if (value === undefined) {\r
-                       return entry + "undefined";\r
-               } else {\r
-                       return entry + '"' + value + '"';\r
-               }\r
-       }\r
-\r
-       return {\r
-               createInstance : requestInstanceUpdate,\r
-               deleteInstance : requestInstanceUpdate,\r
-               getOrchestrationRequest : function(requestId, successCallbackFunction) {\r
-                       $log.debug("MsoService:getOrchestrationRequest: requestId: "\r
-                                       + requestId);\r
-                       $http.get(\r
-                                       "mso/mso_get_orch_req/"\r
-                                                       + requestId + "?r=" + Math.random(),\r
-                                       {\r
-                                               timeout : PropertyService\r
-                                                               .getServerResponseTimeoutMsec()\r
-                                       }).then(successCallbackFunction)["catch"]\r
-                                       (UtilityService.runHttpErrorHandler);\r
-               },\r
-               getOrchestrationRequests : function(filterString,\r
-                               successCallbackFunction) {\r
-                       $log.debug("MsoService:getOrchestrationRequests: filterString: "\r
-                                       + filterString);\r
-                       $http.get(\r
-                                       "mso/mso_get_orch_reqs/"\r
-                                                       + encodeURIComponent(filterString) + "?r="\r
-                                                       + Math.random(),\r
-                                       {\r
-                                               timeout : PropertyService\r
-                                                               .getServerResponseTimeoutMsec()\r
-                                       }).then(successCallbackFunction)["catch"]\r
-                                       (UtilityService.runHttpErrorHandler);\r
-               },\r
-               getFormattedCommonResponse : function(response) {\r
-                               return UtilityService.getCurrentTime() + " HTTP Status: "\r
-                                               + UtilityService.getHttpStatusText(response.data.status)\r
-                                               + "\n" + angular.toJson(response.data.entity, true)\r
-                       \r
-               },\r
-               checkValidStatus : checkValidStatus,\r
-               getFormattedGetOrchestrationRequestsResponse : function(response) {\r
-                       UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
-                       UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
-                       checkValidStatus(response);\r
-\r
-                       var list = response.data.entity.requestList\r
-                       UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);\r
-\r
-                       var message = "";\r
-\r
-                       for (var i = 0; i < list.length; i++) {\r
-                               var request = list[i].request;\r
-                               message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
-                               message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
-                                               + ",\n";\r
-                               var status = request.requestStatus;\r
-                               if (status === undefined) {\r
-                                       message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
-                               } else {\r
-                                       message += addListEntry(FIELD.ID.TIMESTAMP, status.timestamp)\r
-                                                       + ",\n";\r
-                                       message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
-                                                       + ",\n";\r
-                                       message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
-                                                       status.statusMessage)\r
-                                                       + ",\n";\r
-                                       message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
-                                                       status.percentProgress)\r
-                                                       + "\n";\r
-                               }\r
-                               if (i < (list.length - 1)) {\r
-                                       message += "\n";\r
-                               }\r
-                       }\r
-                       return message;\r
-               },\r
-               getFormattedSingleGetOrchestrationRequestResponse : function (response) {\r
-                       UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
-                       UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
-                       checkValidStatus(response);\r
-\r
-                       var message = "";\r
-                       if ( UtilityService.hasContents (response.data.entity.request) ) {\r
-                               var request = response.data.entity.request;\r
-                               message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
-                               message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
-                                               + ",\n";\r
-                               var status = request.requestStatus;\r
-                               if (status === undefined) {\r
-                                       message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
-                               } else {\r
-                                       message += addListEntry(FIELD.ID.TIMESTAMP, status.timestamp)\r
-                                                       + ",\n";\r
-                                       message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
-                                                       + ",\n";\r
-                                       message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
-                                                       status.statusMessage)\r
-                                                       + ",\n";\r
-                                       message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
-                                                       status.percentProgress)\r
-                                                       + "\n\n";\r
-                               }\r
-                       }\r
-                       return message;\r
-               },\r
-               showResponseContentError : function(error, showFunction) {\r
-                       switch (error.type) {\r
-                       case "undefinedObject":\r
-                               showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message);\r
-                               break;\r
-                       case "msoFailure":\r
-                               showFunction(FIELD.ERROR.MSO, "")\r
-                               break;\r
-                       default:\r
-                               showFunction(FIELD.ERROR.SYSTEM_FAILURE);\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-appDS2.factory("MsoService", [ "$http", "$log", "PropertyService",\r
-               "UtilityService", "COMPONENT", "FIELD", MsoService ]);\r
+    var requestInstanceUpdate = function(request, successCallbackFunction) {\r
+        $log.debug("MsoService:requestInstanceUpdate: request:");\r
+        $log.debug(request);\r
+        $http.post( "mso/" + request.url, {\r
+            requestDetails : request.requestDetails\r
+        }, {\r
+            timeout : PropertyService.getServerResponseTimeoutMsec()\r
+        }).then(successCallbackFunction)["catch"]\r
+        (UtilityService.runHttpErrorHandler);\r
+    };\r
+\r
+    var checkValidStatus = function(response) {\r
+        if (response.data.status < 200 || response.data.status > 202) {\r
+            throw {\r
+                type : FIELD.ID.MSO_FAILURE\r
+            }\r
+        }\r
+    };\r
+\r
+    var addListEntry = function(name, value) {\r
+        var entry = '"' + name + '": ';\r
+        if (value === undefined) {\r
+            return entry + "undefined";\r
+        } else {\r
+            return entry + '"' + value + '"';\r
+        }\r
+    };\r
+\r
+    var buildPayloadForServiceActivateDeactivate = function (model, userId) {\r
+        var requestDetails = {\r
+                "modelInfo": {\r
+                    "modelType": "service",\r
+                    "modelInvariantId": model.service.invariantUuid,\r
+                    "modelVersionId": model.service.uuid,\r
+                    "modelName": model.service.name,\r
+                    "modelVersion": model.service.version\r
+                },\r
+                "requestInfo": {\r
+                    "source": "VID",\r
+                    "requestorId": userId\r
+                },\r
+                "requestParameters": {\r
+                    // aicZone was sent from here\r
+                    "userParams": []\r
+                }\r
+        };\r
+\r
+        $log.debug("Service Activate/Deactivate payload", requestDetails);\r
+\r
+        return requestDetails;\r
+\r
+    };\r
+\r
+    var buildPayloadForActivateFabricConfiguration = function (model, userId) {\r
+        var requestDetails = {\r
+            "modelInfo": {\r
+                "modelType": "service",\r
+                "modelInvariantId": model.service.invariantUuid,\r
+                "modelVersionId": model.service.uuid,\r
+                "modelName": model.service.name,\r
+                "modelVersion": model.service.version\r
+            },\r
+            "requestInfo": {\r
+                "source": "VID",\r
+                "requestorId": userId\r
+            },\r
+            "requestParameters": {\r
+                "aLaCarte": false\r
+            }\r
+        };\r
+\r
+        $log.debug("Service Activate Fabric Configuration payload", requestDetails);\r
+\r
+        return requestDetails;\r
+\r
+    };\r
+\r
+    var activateInstance = function(requestParams) {\r
+        var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);\r
+\r
+        return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
+            requestDetails);\r
+    };\r
+\r
+    var deactivateInstance = function(requestParams) {\r
+        var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);\r
+\r
+        return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),\r
+            requestDetails);\r
+    };\r
+\r
+    var sendPostRequestWithBody = function(url, requestBody) {\r
+        var deferred = $q.defer();\r
+        if (url) {\r
+            $http.post(url, requestBody, {\r
+                timeout: PropertyService.getServerResponseTimeoutMsec()\r
+            }).success(function (response) {\r
+                deferred.resolve({data: response});\r
+            }).error(function (data, status) {\r
+                deferred.reject({message: data, status: status});\r
+            });\r
+        }\r
+\r
+        return deferred.promise;\r
+    };\r
+\r
+    var sendPostRequest = function(url, requestDetails) {\r
+        return sendPostRequestWithBody(url, {requestDetails: requestDetails});\r
+    };\r
+\r
+    return {\r
+        createInstance : requestInstanceUpdate,\r
+        deleteInstance : requestInstanceUpdate,\r
+        createAndDeleteInstance: function(requestParams)  {\r
+            return sendPostRequest("mso/" + requestParams.url, requestParams.requestDetails);\r
+        },\r
+        getOrchestrationRequest : function(requestId, successCallbackFunction) {\r
+            $log.debug("MsoService:getOrchestrationRequest: requestId: "\r
+                + requestId);\r
+            $http.get(\r
+                "mso/mso_get_orch_req/"\r
+                + requestId + "?r=" + Math.random(),\r
+                {\r
+                    timeout : PropertyService\r
+                        .getServerResponseTimeoutMsec()\r
+                }).then(successCallbackFunction)["catch"]\r
+            (UtilityService.runHttpErrorHandler);\r
+        },\r
+        getOrchestrationRequests : function(filterString,\r
+                                            successCallbackFunction) {\r
+            $log.debug("MsoService:getOrchestrationRequests: filterString: "\r
+                + filterString);\r
+            $http.get(\r
+                "mso/mso_get_orch_reqs/"\r
+                + encodeURIComponent(filterString) + "?r="\r
+                + Math.random(),\r
+                {\r
+                    timeout : PropertyService\r
+                        .getServerResponseTimeoutMsec()\r
+                }).then(successCallbackFunction)["catch"]\r
+            (UtilityService.runHttpErrorHandler);\r
+        },\r
+        getFormattedCommonResponse : function(response) {\r
+            return UtilityService.getCurrentTime() + " HTTP Status: "\r
+                + UtilityService.getHttpStatusText(response.data.status)\r
+                + "\n" + angular.toJson(response.data.entity, true)\r
+\r
+        },\r
+        checkValidStatus : checkValidStatus,\r
+        getFormattedGetOrchestrationRequestsResponse : function(response) {\r
+            UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
+            UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
+            checkValidStatus(response);\r
+\r
+            var list = response.data.entity.requestList;\r
+            UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);\r
+\r
+            var message = "";\r
+\r
+            for (var i = 0; i < list.length; i++) {\r
+                var request = list[i].request;\r
+                message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
+                message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
+                    + ",\n";\r
+                var status = request.requestStatus;\r
+                if (status === undefined) {\r
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
+                } else {\r
+                    if(status.finishTime) {\r
+                        message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date(status.finishTime)).format("ddd, DD MMM YYYY HH:mm:ss"))\r
+                            + ",\n";\r
+                    }\r
+                    message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
+                        + ",\n";\r
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
+                            status.statusMessage)\r
+                        + ",\n";\r
+                    message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
+                            status.percentProgress)\r
+                        + "\n";\r
+                }\r
+                if (i < (list.length - 1)) {\r
+                    message += "\n";\r
+                }\r
+            }\r
+            return message;\r
+        },\r
+        getFormattedSingleGetOrchestrationRequestResponse : function (response) {\r
+            UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);\r
+            UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);\r
+            //checkValidStatus(response);\r
+\r
+            var message = "";\r
+            if (! (response && response.data && response.data.entity)) {\r
+                return message;\r
+            }\r
+            if ( UtilityService.hasContents (response.data.entity.request) ) {\r
+                var request = response.data.entity.request;\r
+                message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";\r
+                message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)\r
+                    + ",\n";\r
+                var status = request.requestStatus;\r
+                if (status === undefined) {\r
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";\r
+                } else {\r
+                    message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss"))\r
+                        + ",\n";\r
+                    message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)\r
+                        + ",\n";\r
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS,\r
+                            status.statusMessage)\r
+                        + ",\n";\r
+                    message += addListEntry(FIELD.ID.PERCENT_PROGRESS,\r
+                            status.percentProgress)\r
+                        + "\n\n";\r
+                }\r
+            }\r
+            else {\r
+                if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) {\r
+                    message = this.getFormattedCommonResponse(response) + "\n";\r
+                }\r
+            }\r
+            return message;\r
+        },\r
+        getManualTasks : function(requestId) {\r
+            $log.debug("MsoService:getManualTasks: requestId: "\r
+                + requestId);\r
+            return $http.get(\r
+                "mso/mso_get_man_task/" + requestId,\r
+                {\r
+                    timeout: PropertyService\r
+                        .getServerResponseTimeoutMsec()\r
+                })\r
+                .catch(UtilityService.runHttpErrorHandler);\r
+        },\r
+        completeTask: function(taskId, taskToComplete) {\r
+            var promise = new Promise(function (resolve, reject) {\r
+                $log.debug("MsoService:completeTask: taskId: "\r
+                    + taskId);\r
+                AaiService.getLoggedInUserID(function (response) {\r
+                    var attuid = response.data;\r
+                    var source = "VID";\r
+                    var data = {\r
+                        requestDetails: {\r
+                            requestInfo: {\r
+                                source: source,\r
+                                responseValue: taskToComplete,\r
+                                requestorId: attuid\r
+                            }\r
+                        }\r
+                    };\r
+\r
+                    return $http.post(\r
+                        "mso/mso_post_man_task/" + taskId, data,\r
+                        {\r
+                            timeout: PropertyService\r
+                                .getServerResponseTimeoutMsec()\r
+                        }).then(function (response) {\r
+                            resolve(response);\r
+                    })\r
+                        .catch(UtilityService.runHttpErrorHandler);\r
+                }, function () {\r
+                    reject();\r
+                });\r
+            });\r
+\r
+            return promise;\r
+        },\r
+        showResponseContentError : function(error, showFunction) {\r
+            switch (error.type) {\r
+                case "undefinedObject":\r
+                    showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message);\r
+                    break;\r
+                case "msoFailure":\r
+                    showFunction(FIELD.ERROR.MSO, "");\r
+                    break;\r
+                default:\r
+                    showFunction(FIELD.ERROR.SYSTEM_FAILURE);\r
+            }\r
+        },\r
+        activateInstance: activateInstance,\r
+        deactivateInstance: deactivateInstance,\r
+\r
+\r
+        createConfigurationInstance: function(requestParams) {\r
+\r
+            const modelInfoOf = function (instance) {\r
+                const modelInfo = {\r
+                    "modelType": "vnf",\r
+                    "modelInvariantId": instance.properties['model-invariant-id'],\r
+                    "modelVersionId": instance.properties['model-version-id'],\r
+                    "modelName": instance.properties['model-name'],\r
+                    "modelVersion": instance.properties['model-version'],\r
+                    "modelCustomizationId": instance.properties['model-customization-id']\r
+                };\r
+\r
+                $log.debug("model info from instance", instance);\r
+                $log.debug("model info to model", modelInfo);\r
+\r
+                return modelInfo\r
+            };\r
+\r
+            var payload = {\r
+                "requestDetails": {\r
+                    "modelInfo": {\r
+                        "modelType": "configuration",\r
+                        "modelInvariantId": requestParams.configurationModelInfo.modelInvariantId,\r
+                        "modelVersionId": requestParams.configurationModelInfo.modelNameVersionId,\r
+                        "modelName": requestParams.configurationModelInfo.modelName, // "Port Mirroring Configuration"\r
+                        "modelVersion": requestParams.configurationModelInfo.modelVersion,\r
+                        "modelCustomizationId": requestParams.configurationModelInfo.customizationUuid,\r
+                        "modelCustomizationName": requestParams.configurationModelInfo.modelCustomizationName\r
+                    },\r
+                    "cloudConfiguration": {\r
+                        "lcpCloudRegionId": requestParams.portMirroringConfigFields.lcpRegion.value\r
+                    },\r
+                    "requestInfo": {\r
+                        "instanceName": requestParams.portMirroringConfigFields.instanceName.value,\r
+                        "source": "VID",\r
+                        "requestorId": requestParams.attuuid\r
+                    },\r
+                    "relatedInstanceList": [\r
+                        {\r
+                            "relatedInstance": {\r
+                                "instanceId": requestParams.topServiceInstanceId,\r
+                                "modelInfo": {\r
+                                    "modelType": "service", // relatedTopModelsInfo.modelType\r
+                                    "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId,\r
+                                    "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId,\r
+                                    "modelName": requestParams.relatedTopModelsInfo.modelName,\r
+                                    "modelVersion": requestParams.relatedTopModelsInfo.modelVersion\r
+                                }\r
+                            }\r
+                        },\r
+                        {\r
+                            "relatedInstance": {\r
+                                "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],\r
+                                "instanceDirection": "source",\r
+                                "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)\r
+                            }\r
+                        },\r
+                        {\r
+                            "relatedInstance": requestParams.configurationByPolicy ? {\r
+                                "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],\r
+                                "instanceDirection": "destination",\r
+                                "modelInfo": {\r
+                                    "modelType": "pnf"\r
+                                }\r
+                            } : {\r
+                                "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],\r
+                                "instanceDirection": "destination",\r
+                                "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)\r
+                            }\r
+                        }\r
+                    ],\r
+                    "requestParameters": {\r
+                        "userParams": []\r
+                    }\r
+                }\r
+            };\r
+\r
+            $log.debug("payload", payload);\r
+\r
+            var deferred = $q.defer();\r
+            $http.post([\r
+                'mso','mso_create_configuration_instance',\r
+                requestParams.topServiceInstanceId,\r
+                'configurations',''\r
+            ].join(COMPONENT.FORWARD_SLASH),\r
+                payload)\r
+                .success(function (response) {\r
+                    deferred.resolve({data : response});\r
+                }).error(function (data, status) {\r
+                deferred.reject({message: data, status: status});\r
+            });\r
+            return deferred.promise;\r
+        },\r
+        deleteConfiguration: function(requestParams, configuration) {\r
+\r
+            var requestDetails = {\r
+                "modelInfo": requestParams.configurationModel,\r
+                "cloudConfiguration": {\r
+                    "lcpCloudRegionId": configuration.configData.cloudRegionId\r
+                },\r
+                "requestInfo": {\r
+                    "source": "VID",\r
+                    "requestorId": requestParams.userId\r
+                },\r
+                "requestParameters": {\r
+                    "userParams": []\r
+                }\r
+            };\r
+\r
+            var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;\r
+            return sendPostRequest(url, requestDetails);\r
+        },\r
+        toggleConfigurationStatus: function(requestParams, configuration) {\r
+\r
+            var requestDetails = {\r
+                "modelInfo": requestParams.configurationModel,\r
+                "cloudConfiguration": {\r
+                    "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
+                },\r
+                "requestInfo": {\r
+                    "source": "VID",\r
+                    "requestorId": requestParams.userId\r
+                },\r
+                "relatedInstanceList": [{\r
+                    "relatedInstance": {\r
+                        "instanceId": requestParams.serviceInstanceId,\r
+                        "modelInfo": requestParams.serviceModel\r
+                    }\r
+                }],\r
+                "requestParameters": {\r
+                    "userParams": []\r
+                }\r
+            };\r
+\r
+            var url;\r
+            switch (requestParams.configStatus) {\r
+                case FIELD.STATUS.AAI_CREATED:\r
+                case FIELD.STATUS.AAI_INACTIVE:\r
+                    url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
+                    break;\r
+                case FIELD.STATUS.AAI_ACTIVE:\r
+                    url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
+                    break;\r
+            }\r
+\r
+            return sendPostRequest(url, requestDetails);\r
+        },\r
+\r
+        togglePortStatus: function(requestParams, configuration, defaultParams) {\r
+\r
+            var requestDetails = {\r
+                "modelInfo": requestParams.configurationModel,\r
+                "cloudConfiguration": {\r
+                    "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null\r
+                },\r
+                "requestInfo": {\r
+                    "source": "VID",\r
+                    "requestorId": requestParams.userId\r
+                },\r
+                "relatedInstanceList": [\r
+                    {\r
+                        "relatedInstance": {\r
+                            "instanceId": requestParams.serviceInstanceId,\r
+                            "modelInfo": requestParams.serviceModel\r
+                        }\r
+                    },\r
+                    {\r
+                        "relatedInstance": {\r
+                            "instanceId": requestParams.portId,\r
+                            "instanceDirection": "source",\r
+                            "modelInfo": {\r
+                                "modelType": "connectionPoint"\r
+                            }\r
+                        }\r
+                    }\r
+                ]\r
+            };\r
+\r
+            var url;\r
+            switch (requestParams.portStatus) {\r
+                case FIELD.STATUS.AAI_ENABLED:\r
+                    url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
+                    break;\r
+                case FIELD.STATUS.AAI_DISABLED:\r
+                    url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;\r
+                    break;\r
+            }\r
+\r
+            return sendPostRequest(url, requestDetails);\r
+        },\r
+\r
+        buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {\r
+            var payload = {\r
+                    "modelInfo": {\r
+                        "modelType": "service",\r
+                        "modelInvariantId": serviceModelInfo.invariantUuid,\r
+                        "modelVersionId": serviceModelInfo.uuid,\r
+                        "modelName": serviceModelInfo.name,\r
+                        "modelVersion": serviceModelInfo.version\r
+                    },\r
+                    "requestInfo": {\r
+                        "source": "VID",\r
+                        "requestorId": attuuid\r
+                    },\r
+                    "relatedInstanceList": [\r
+                        {\r
+                            "relatedInstance": {\r
+                                "instanceName": pnf,\r
+                                "modelInfo": {\r
+                                    "modelType": "pnf"\r
+                                }\r
+                            }\r
+                        }],\r
+                    "requestParameters": {\r
+                        "aLaCarte": true\r
+                    }\r
+            };\r
+\r
+            $log.debug("payload", payload);\r
+\r
+            return payload;\r
+        },\r
+        associatePnf: function(requestParams) {\r
+\r
+            var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);\r
+            return sendPostRequest([\r
+                    COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,\r
+                    requestParams.instanceId,\r
+                    ''\r
+                ].join(COMPONENT.FORWARD_SLASH), payload);\r
+        },\r
+        dissociatePnf: function(requestParams) {\r
+\r
+            var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);\r
+\r
+            return sendPostRequest([\r
+                COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,\r
+                requestParams.serviceInstanceId,\r
+                ''\r
+            ].join(COMPONENT.FORWARD_SLASH), payload);\r
+        }\r
+    }\r
+};\r
+\r
+appDS2.factory("MsoService", MsoService );\r