rewrite message when timed out while waiting for MSO
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / services / msoService.js
index ac6eeea..04a20f2 100755 (executable)
-/*-\r
- * ============LICENSE_START=======================================================\r
- * VID\r
- * ================================================================================\r
- * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.\r
- * ================================================================================\r
- * Licensed under the Apache License, Version 2.0 (the "License");\r
- * you may not use this file except in compliance with the License.\r
- * You may obtain a copy of the License at\r
- * \r
- *      http://www.apache.org/licenses/LICENSE-2.0\r
- * \r
- * Unless required by applicable law or agreed to in writing, software\r
- * distributed under the License is distributed on an "AS IS" BASIS,\r
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
- * See the License for the specific language governing permissions and\r
- * limitations under the License.\r
- * ============LICENSE_END=========================================================\r
- */\r
-\r
-"use strict";\r
-\r
-var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) {\r
-\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
-    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.cloudRegionId,\r
-                        "cloudOwner" : requestParams.portMirroringConfigFields.cloudOwner\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
-        activateFabricConfiguration: function(requestParams) {\r
-            var payload = buildPayloadForActivateFabricConfiguration(requestParams.model, requestParams.userId);\r
-\r
-            var url = COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId);\r
-            return sendPostRequest(url, payload);\r
-        },\r
-        deactivateAndCloudDelete : function (requestParams)  {\r
-            var payload = {\r
-                tenantId: requestParams.tenantId,\r
-                lcpCloudRegionId: requestParams.lcpCloudRegionId,\r
-                userId: requestParams.userId\r
-            };\r
-\r
-            var url = COMPONENT.MSO_DEACTIVATE_AND_CLOUD_DELETE_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId)\r
-                        .replace('@vnfInstanceId', requestParams.vnfInstanceId)\r
-                        .replace('@vfModuleInstanceId', requestParams.vfModuleInstanceId);\r
-\r
-            return sendPostRequestWithBody(url, payload);\r
-        }\r
-    };\r
-};\r
-\r
-appDS2.factory("MsoService", MsoService );\r
+/*-
+ * ============LICENSE_START=======================================================
+ * VID
+ * ================================================================================
+ * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ * ============LICENSE_END=========================================================
+ */
+
+"use strict";
+
+var MsoService = function($http, $log, $q, PropertyService, AaiService, UtilityService, COMPONENT, FIELD, moment) {
+
+    var _this = this;
+
+       /*
+        * Common function to handle both create and delete instance requests
+        */
+    var requestInstanceUpdate = function(request, successCallbackFunction) {
+        $log.debug("MsoService:requestInstanceUpdate: request:");
+        $log.debug(request);
+        $http.post( "mso/" + request.url, {
+            requestDetails : request.requestDetails
+        }, {
+            timeout : PropertyService.getServerResponseTimeoutMsec()
+        }).then(successCallbackFunction)["catch"]
+        (UtilityService.runHttpErrorHandler);
+    };
+
+    var checkValidStatus = function(response) {
+        if (response.data.status < 200 || response.data.status > 202) {
+            throw {
+                type : FIELD.ID.MSO_FAILURE
+            };
+        }
+    };
+
+    var addListEntry = function(name, value) {
+        var entry = '"' + name + '": ';
+        if (value === undefined) {
+            return entry + "undefined";
+        } else {
+            return entry + '"' + value + '"';
+        }
+    };
+
+    var buildPayloadForServiceActivateDeactivate = function (model, userId) {
+        var requestDetails = {
+                "modelInfo": {
+                    "modelType": "service",
+                    "modelInvariantId": model.service.invariantUuid,
+                    "modelVersionId": model.service.uuid,
+                    "modelName": model.service.name,
+                    "modelVersion": model.service.version
+                },
+                "requestInfo": {
+                    "source": "VID",
+                    "requestorId": userId
+                },
+                "requestParameters": {
+                    // aicZone was sent from here
+                    "userParams": []
+                }
+        };
+
+        $log.debug("Service Activate/Deactivate payload", requestDetails);
+
+        return requestDetails;
+
+    };
+
+    var buildPayloadForActivateFabricConfiguration = function (model, userId) {
+        var requestDetails = {
+            "modelInfo": {
+                "modelType": "service",
+                "modelInvariantId": model.service.invariantUuid,
+                "modelVersionId": model.service.uuid,
+                "modelName": model.service.name,
+                "modelVersion": model.service.version
+            },
+            "requestInfo": {
+                "source": "VID",
+                "requestorId": userId
+            },
+            "requestParameters": {
+                "aLaCarte": false
+            }
+        };
+
+        $log.debug("Service Activate Fabric Configuration payload", requestDetails);
+
+        return requestDetails;
+
+    };
+
+    var activateInstance = function(requestParams) {
+        var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);
+
+        return sendPostRequest(COMPONENT.MSO_ACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),
+            requestDetails);
+    };
+
+    var deactivateInstance = function(requestParams) {
+        var requestDetails = buildPayloadForServiceActivateDeactivate(requestParams.model, requestParams.userId);
+
+        return sendPostRequest(COMPONENT.MSO_DEACTIVATE_INSTANCE.replace('@serviceInstanceId', requestParams.instance.serviceInstanceId),
+            requestDetails);
+    };
+
+    var sendPostRequestWithBody = function(url, requestBody) {
+        var deferred = $q.defer();
+        if (url) {
+            $http.post(url, requestBody, {
+                timeout: PropertyService.getServerResponseTimeoutMsec()
+            }).success(function (response) {
+                deferred.resolve({data: response});
+            }).error(function (data, status) {
+                deferred.reject({message: data, status: status});
+            });
+        }
+
+        return deferred.promise;
+    };
+
+    var sendPostRequest = function(url, requestDetails) {
+        return sendPostRequestWithBody(url, {requestDetails: requestDetails});
+    };
+
+    return {
+        createInstance : requestInstanceUpdate,
+        deleteInstance : requestInstanceUpdate,
+        createAndDeleteInstance: function(requestParams)  {
+            return sendPostRequest("mso/" + requestParams.url, requestParams.requestDetails);
+        },
+        getOrchestrationRequest : function(requestId, successCallbackFunction) {
+            $log.debug("MsoService:getOrchestrationRequest: requestId: "
+                + requestId);
+            $http.get(
+                "mso/mso_get_orch_req/"
+                + requestId + "?r=" + Math.random(),
+                {
+                    timeout : PropertyService
+                        .getServerResponseTimeoutMsec()
+                }).then(successCallbackFunction)["catch"]
+            (UtilityService.runHttpErrorHandler);
+        },
+        getOrchestrationRequests : function(filterString,
+                                            successCallbackFunction) {
+            $log.debug("MsoService:getOrchestrationRequests: filterString: "
+                + filterString);
+            $http.get(
+                "mso/mso_get_orch_reqs/"
+                + encodeURIComponent(filterString) + "?r="
+                + Math.random(),
+                {
+                    timeout : PropertyService
+                        .getServerResponseTimeoutMsec()
+                }).then(successCallbackFunction)["catch"]
+            (UtilityService.runHttpErrorHandler);
+        },
+        getFormattedCommonResponse : function(response) {
+             if (response && response.data && response.data.status) {
+                return UtilityService.getCurrentTime() + " HTTP Status: "
+                    + UtilityService.getHttpStatusText(response.data.status)
+                    + "\n" + angular.toJson(response.data.entity, true);
+             }
+             else {
+                 return UtilityService.getCurrentTime() + " HTTP Status: "
+                    + "N/A\nVID has timed out waiting for an MSO response.\nPlease close this popup or refresh page.";
+            }
+
+        },
+        checkValidStatus : checkValidStatus,
+        getFormattedGetOrchestrationRequestsResponse : function(response) {
+            UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);
+            UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);
+            checkValidStatus(response);
+
+            var list = response.data.entity.requestList;
+            UtilityService.checkUndefined(FIELD.ID.REQUEST_LIST, list);
+
+            var message = "";
+
+            for (var i = 0; i < list.length; i++) {
+                var request = list[i].request;
+                message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";
+                message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)
+                    + ",\n";
+                var status = request.requestStatus;
+                if (status === undefined) {
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";
+                } else {
+                    if(status.finishTime) {
+                        message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date(status.finishTime)).format("ddd, DD MMM YYYY HH:mm:ss"))
+                            + ",\n";
+                    }
+                    message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)
+                        + ",\n";
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS,
+                            status.statusMessage)
+                        + ",\n";
+                    message += addListEntry(FIELD.ID.PERCENT_PROGRESS,
+                            status.percentProgress)
+                        + "\n";
+                }
+                if (i < (list.length - 1)) {
+                    message += "\n";
+                }
+            }
+            return message;
+        },
+        getFormattedSingleGetOrchestrationRequestResponse : function (response) {
+            UtilityService.checkUndefined(COMPONENT.ENTITY, response.data.entity);
+            UtilityService.checkUndefined(COMPONENT.STATUS, response.data.status);
+            //checkValidStatus(response);
+
+            var message = "";
+            if (! (response && response.data && response.data.entity)) {
+                return message;
+            }
+            if ( UtilityService.hasContents (response.data.entity.request) ) {
+                var request = response.data.entity.request;
+                message += addListEntry(FIELD.ID.REQUEST_ID, request.requestId) + ",\n";
+                message += addListEntry(FIELD.ID.REQUEST_TYPE, request.requestType)
+                    + ",\n";
+                var status = request.requestStatus;
+                if (status === undefined) {
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS, undefined) + "\n";
+                } else {
+                    message += addListEntry(FIELD.ID.TIMESTAMP, moment(new Date()).format("ddd, DD MMM YYYY HH:mm:ss"))
+                        + ",\n";
+                    message += addListEntry(FIELD.ID.REQUEST_STATE, status.requestState)
+                        + ",\n";
+                    message += addListEntry(FIELD.ID.REQUEST_STATUS,
+                            status.statusMessage)
+                        + ",\n";
+                    message += addListEntry(FIELD.ID.PERCENT_PROGRESS,
+                            status.percentProgress)
+                        + "\n\n";
+                }
+            }
+            else {
+                if (UtilityService.hasContents(response.data.status) && UtilityService.hasContents(response.data.entity)) {
+                    message = this.getFormattedCommonResponse(response) + "\n";
+                }
+            }
+            return message;
+        },
+        getManualTasks : function(requestId) {
+            $log.debug("MsoService:getManualTasks: requestId: "
+                + requestId);
+            return $http.get(
+                "mso/mso_get_man_task/" + requestId,
+                {
+                    timeout: PropertyService
+                        .getServerResponseTimeoutMsec()
+                })
+                .catch(UtilityService.runHttpErrorHandler);
+        },
+        completeTask: function(taskId, taskToComplete) {
+            var promise = new Promise(function (resolve, reject) {
+                $log.debug("MsoService:completeTask: taskId: "
+                    + taskId);
+                AaiService.getLoggedInUserID(function (response) {
+                    var attuid = response.data;
+                    var source = "VID";
+                    var data = {
+                        requestDetails: {
+                            requestInfo: {
+                                source: source,
+                                responseValue: taskToComplete,
+                                requestorId: attuid
+                            }
+                        }
+                    };
+
+                    return $http.post(
+                        "mso/mso_post_man_task/" + taskId, data,
+                        {
+                            timeout: PropertyService
+                                .getServerResponseTimeoutMsec()
+                        }).then(function (response) {
+                            resolve(response);
+                    })
+                        .catch(UtilityService.runHttpErrorHandler);
+                }, function () {
+                    reject();
+                });
+            });
+
+            return promise;
+        },
+        showResponseContentError : function(error, showFunction) {
+            switch (error.type) {
+                case "undefinedObject":
+                    showFunction(FIELD.ERROR.SYSTEM_FAILURE, error.message);
+                    break;
+                case "msoFailure":
+                    showFunction(FIELD.ERROR.MSO, "");
+                    break;
+                default:
+                    showFunction(FIELD.ERROR.SYSTEM_FAILURE);
+            }
+        },
+        activateInstance: activateInstance,
+        deactivateInstance: deactivateInstance,
+
+
+        createConfigurationInstance: function(requestParams) {
+
+            const modelInfoOf = function (instance) {
+                const modelInfo = {
+                    "modelType": "vnf",
+                    "modelInvariantId": instance.properties['model-invariant-id'],
+                    "modelVersionId": instance.properties['model-version-id'],
+                    "modelName": instance.properties['model-name'],
+                    "modelVersion": instance.properties['model-version'],
+                    "modelCustomizationId": instance.properties['model-customization-id']
+                };
+
+                $log.debug("model info from instance", instance);
+                $log.debug("model info to model", modelInfo);
+
+                return modelInfo;
+            };
+
+            var payload = {
+                "requestDetails": {
+                    "modelInfo": {
+                        "modelType": "configuration",
+                        "modelInvariantId": requestParams.configurationModelInfo.modelInvariantId,
+                        "modelVersionId": requestParams.configurationModelInfo.modelNameVersionId,
+                        "modelName": requestParams.configurationModelInfo.modelName, // "Port Mirroring Configuration"
+                        "modelVersion": requestParams.configurationModelInfo.modelVersion,
+                        "modelCustomizationId": requestParams.configurationModelInfo.customizationUuid,
+                        "modelCustomizationName": requestParams.configurationModelInfo.modelCustomizationName
+                    },
+                    "cloudConfiguration": {
+                        "lcpCloudRegionId": requestParams.portMirroringConfigFields.cloudRegionId,
+                        "cloudOwner" : requestParams.portMirroringConfigFields.cloudOwner
+                    },
+                    "requestInfo": {
+                        "instanceName": requestParams.portMirroringConfigFields.instanceName.value,
+                        "source": "VID",
+                        "requestorId": requestParams.attuuid
+                    },
+                    "relatedInstanceList": [
+                        {
+                            "relatedInstance": {
+                                "instanceId": requestParams.topServiceInstanceId,
+                                "modelInfo": {
+                                    "modelType": "service", // relatedTopModelsInfo.modelType
+                                    "modelInvariantId": requestParams.relatedTopModelsInfo.modelInvariantId,
+                                    "modelVersionId": requestParams.relatedTopModelsInfo.modelNameVersionId,
+                                    "modelName": requestParams.relatedTopModelsInfo.modelName,
+                                    "modelVersion": requestParams.relatedTopModelsInfo.modelVersion
+                                }
+                            }
+                        },
+                        {
+                            "relatedInstance": {
+                                "instanceId": requestParams.portMirroringConfigFields.sourceInstance.properties['vnf-id'],
+                                "instanceDirection": "source",
+                                "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.sourceInstance)
+                            }
+                        },
+                        {
+                            "relatedInstance": requestParams.configurationByPolicy ? {
+                                "instanceName": requestParams.portMirroringConfigFields.destinationInstance.properties['pnfName'],
+                                "instanceDirection": "destination",
+                                "modelInfo": {
+                                    "modelType": "pnf"
+                                }
+                            } : {
+                                "instanceId": requestParams.portMirroringConfigFields.destinationInstance.properties['vnf-id'],
+                                "instanceDirection": "destination",
+                                "modelInfo": modelInfoOf(requestParams.portMirroringConfigFields.destinationInstance)
+                            }
+                        }
+                    ],
+                    "requestParameters": {
+                        "userParams": []
+                    }
+                }
+            };
+
+            $log.debug("payload", payload);
+
+            var deferred = $q.defer();
+            $http.post([
+                'mso','mso_create_configuration_instance',
+                requestParams.topServiceInstanceId,
+                'configurations',''
+            ].join(COMPONENT.FORWARD_SLASH),
+                payload)
+                .success(function (response) {
+                    deferred.resolve({data : response});
+                }).error(function (data, status) {
+                deferred.reject({message: data, status: status});
+            });
+            return deferred.promise;
+        },
+        deleteConfiguration: function(requestParams, configuration) {
+
+            var requestDetails = {
+                "modelInfo": requestParams.configurationModel,
+                "cloudConfiguration": {
+                    "lcpCloudRegionId": configuration.configData.cloudRegionId
+                },
+                "requestInfo": {
+                    "source": "VID",
+                    "requestorId": requestParams.userId
+                },
+                "requestParameters": {
+                    "userParams": []
+                }
+            };
+
+            var url = "mso/mso_delete_configuration/" + requestParams.serviceInstanceId + "/configurations/" + requestParams.configurationId;
+            return sendPostRequest(url, requestDetails);
+        },
+        toggleConfigurationStatus: function(requestParams, configuration) {
+
+            var requestDetails = {
+                "modelInfo": requestParams.configurationModel,
+                "cloudConfiguration": {
+                    "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null
+                },
+                "requestInfo": {
+                    "source": "VID",
+                    "requestorId": requestParams.userId
+                },
+                "relatedInstanceList": [{
+                    "relatedInstance": {
+                        "instanceId": requestParams.serviceInstanceId,
+                        "modelInfo": requestParams.serviceModel
+                    }
+                }],
+                "requestParameters": {
+                    "userParams": []
+                }
+            };
+
+            var url;
+            switch (requestParams.configStatus) {
+                case FIELD.STATUS.AAI_CREATED:
+                case FIELD.STATUS.AAI_INACTIVE:
+                    url = "mso/mso_activate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
+                    break;
+                case FIELD.STATUS.AAI_ACTIVE:
+                    url = "mso/mso_deactivate_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
+                    break;
+            }
+
+            return sendPostRequest(url, requestDetails);
+        },
+
+        togglePortStatus: function(requestParams, configuration, defaultParams) {
+
+            var requestDetails = {
+                "modelInfo": requestParams.configurationModel,
+                "cloudConfiguration": {
+                    "lcpCloudRegionId": configuration && configuration.configData ? configuration.configData.cloudRegionId : null
+                },
+                "requestInfo": {
+                    "source": "VID",
+                    "requestorId": requestParams.userId
+                },
+                "relatedInstanceList": [
+                    {
+                        "relatedInstance": {
+                            "instanceId": requestParams.serviceInstanceId,
+                            "modelInfo": requestParams.serviceModel
+                        }
+                    },
+                    {
+                        "relatedInstance": {
+                            "instanceId": requestParams.portId,
+                            "instanceDirection": "source",
+                            "modelInfo": {
+                                "modelType": "connectionPoint"
+                            }
+                        }
+                    }
+                ]
+            };
+
+            var url;
+            switch (requestParams.portStatus) {
+                case FIELD.STATUS.AAI_ENABLED:
+                    url = "mso/mso_disable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
+                    break;
+                case FIELD.STATUS.AAI_DISABLED:
+                    url = "mso/mso_enable_port_configuration/"+requestParams.serviceInstanceId+"/configurations/"+requestParams.configurationId;
+                    break;
+            }
+
+            return sendPostRequest(url, requestDetails);
+        },
+
+        buildPayloadForAssociateDissociate: function(serviceModelInfo, attuuid, instanceId, pnf) {
+            var payload = {
+                    "modelInfo": {
+                        "modelType": "service",
+                        "modelInvariantId": serviceModelInfo.invariantUuid,
+                        "modelVersionId": serviceModelInfo.uuid,
+                        "modelName": serviceModelInfo.name,
+                        "modelVersion": serviceModelInfo.version
+                    },
+                    "requestInfo": {
+                        "source": "VID",
+                        "requestorId": attuuid
+                    },
+                    "relatedInstanceList": [
+                        {
+                            "relatedInstance": {
+                                "instanceName": pnf,
+                                "modelInfo": {
+                                    "modelType": "pnf"
+                                }
+                            }
+                        }],
+                    "requestParameters": {
+                        "aLaCarte": true
+                    }
+            };
+
+            $log.debug("payload", payload);
+
+            return payload;
+        },
+        associatePnf: function(requestParams) {
+
+            var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.instanceId, requestParams.pnf);
+            return sendPostRequest([
+                    COMPONENT.MSO, COMPONENT.MSO_CREATE_REALATIONSHIP,
+                    requestParams.instanceId,
+                    ''
+                ].join(COMPONENT.FORWARD_SLASH), payload);
+        },
+        dissociatePnf: function(requestParams) {
+
+            var payload = this.buildPayloadForAssociateDissociate(requestParams.serviceModelInfo, requestParams.attuuid, requestParams.serviceInstanceId, requestParams.pnf);
+
+            return sendPostRequest([
+                COMPONENT.MSO, COMPONENT.MSO_REMOVE_RELATIONSHIP,
+                requestParams.serviceInstanceId,
+                ''
+            ].join(COMPONENT.FORWARD_SLASH), payload);
+        },
+        activateFabricConfiguration: function(requestParams) {
+            var payload = buildPayloadForActivateFabricConfiguration(requestParams.model, requestParams.userId);
+
+            var url = COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId);
+            return sendPostRequest(url, payload);
+        },
+        deactivateAndCloudDelete : function (requestParams)  {
+            var payload = {
+                tenantId: requestParams.tenantId,
+                lcpCloudRegionId: requestParams.lcpCloudRegionId,
+                userId: requestParams.userId
+            };
+
+            var url = COMPONENT.MSO_DEACTIVATE_AND_CLOUD_DELETE_INSTANCE.replace('@serviceInstanceId', requestParams.serviceInstanceId)
+                        .replace('@vnfInstanceId', requestParams.vnfInstanceId)
+                        .replace('@vfModuleInstanceId', requestParams.vfModuleInstanceId);
+
+            return sendPostRequestWithBody(url, payload);
+        }
+    };
+};
+
+appDS2.factory("MsoService", MsoService );