bypassing scheduler for immediate operations

Change-Id: I634763a2065b75b0d550e2896a9352a74dd02b44
Issue-ID: VID-174
Signed-off-by: Sonsino, Ofir (os0695) <os0695@intl.att.com>
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/constants/componentConstants.js b/vid-app-common/src/main/webapp/app/vid/scripts/constants/componentConstants.js
index fa9ff1c..a59da05 100755
--- a/vid-app-common/src/main/webapp/app/vid/scripts/constants/componentConstants.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/constants/componentConstants.js
@@ -108,6 +108,7 @@
 	VPN_ID_1 : "1a2b3c4d5e6f",
 
 	// PATHS
+	CHANGE_MANAGEMENT_OPERATION_NO_SCHEDULER: "change-management/workflow/@vnfName",
 	GET_WORKFLOW: "change-management/get_vnf_workflow_relation",
 	GET_MSO_WORKFLOWS: "change-management/mso",
 	GET_SCHEDULER_CHANGE_MANAGEMENTS: "change-management/scheduler",
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
index f0b85a6..2444646 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/modals/new-change-management/new-change-management.controller.js
@@ -132,21 +132,143 @@
         };
 
 
+		/***converting objects to scheduler format (taken from IST)***/
+		function extractChangeManagementCallbackDataStr(changeManagement) {
+			console.log(changeManagement);
+			var result = {};
+			result.requestType = changeManagement.workflow;
+			var workflowType = changeManagement.workflow;
+			result.requestDetails = [];
+			_.forEach(changeManagement.vnfNames, function (vnf) {
+				
+				try{
+				var requestInfoData ={};
+				var requestParametersData ={};
+				if (vnf.availableVersions && vnf.availableVersions.length!=0){
+					
+					requestInfoData ={
+						source: vnf.availableVersions[0].requestInfo.source,
+						suppressRollback: vnf.availableVersions[0].requestInfo.suppressRollback,
+						requestorId: vnf.availableVersions[0].requestInfo.requestorId
+					}
+					
+					if(workflowType=='Update'){
+						requestParametersData = {
+							usePreload: vnf.availableVersions[0].requestParameters.usePreload
+						}
+					}else if(workflowType=="Replace"){
+						requestParametersData = {
+							rebuildVolumeGroups: vnf.availableVersions[0].requestParameters.usePreload
+						}
+					}else if(workflowType=="VNF In Place Software Update"){
+						var payloadObj = {
+							'existing_software_version':changeManagement.existingSoftwareVersion,
+							'new_software_version':changeManagement.newSoftwareVersion,
+							'operations_timeout':changeManagement.operationTimeout
+						};
+						requestParametersData = {
+							payload: JSON.stringify(payloadObj)
+						}
+					}else if(workflowType=="VNF Config Update"){
+						requestParametersData = {
+							payload: changeManagement.configUpdateFile
+						}
+					}
+					$log.info('SchedulerWidgetCtrl:extractChangeManagementCallbackDataStr info:: workflowType '+ workflowType);
+					$log.info('SchedulerWidgetCtrl:extractChangeManagementCallbackDataStr info:: requestParametersData '+ requestParametersData);
+
+				}else if(workflowType=="VNF In Place Software Update"){
+					var payloadObj = {
+						'existing_software_version':changeManagement.existingSoftwareVersion,
+						'new_software_version':changeManagement.newSoftwareVersion,
+						'operations_timeout':changeManagement.operationTimeout
+					};
+					requestParametersData = {
+						payload: JSON.stringify(payloadObj)
+					}
+				}else if(workflowType=="VNF Config Update"){
+					requestParametersData = {
+						payload: changeManagement.configUpdateFile
+					}
+				}	
+				
+				var data = {
+					vnfName: vnf.name,
+					vnfInstanceId: vnf.id,
+					modelInfo: {
+						modelType: 'vnf',
+						modelInvariantId: vnf.properties['model-invariant-id'],
+						modelVersionId: vnf.modelVersionId,
+						modelName: vnf.properties['vnf-name'],
+						modelVersion: vnf.version,
+						modelCustomizationName: vnf.properties['model-customization-name'],
+						modelCustomizationId: vnf.properties['model-customization-id']
+					},
+					cloudConfiguration: vnf.cloudConfiguration,
+					requestInfo: requestInfoData,
+					relatedInstanceList: [],
+					requestParameters:requestParametersData
+				};
+
+				var serviceInstanceId = '';
+				_.forEach(vnf['service-instance-node'], function (instanceNode) {
+					if(instanceNode['node-type'] === 'service-instance'){
+						serviceInstanceId = instanceNode.properties['service-instance-id'];
+					}
+				});
+
+				if (vnf.availableVersions && vnf.availableVersions.length!=0){
+					_.forEach(vnf.availableVersions[0].relatedInstanceList, function (related) {
+						var rel = related.relatedInstance;
+						var relatedInstance = {
+							instanceId: serviceInstanceId,
+							modelInfo: {
+								modelType: rel.modelInfo.modelType,
+								modelInvariantId: rel.modelInfo.modelInvariantId,
+								modelVersionId: rel.modelInfo.modelVersionId,
+								modelName: rel.modelInfo.modelName,
+								modelVersion: rel.modelInfo.modelVersion,
+								modelCustomizationName: rel.modelInfo.modelCustomizationName,
+								modelCustomizationId: rel.modelInfo.modelCustomizationId
+							}
+						};
+						if (rel.vnfInstanceId)
+							relatedInstance.instanceId = rel.vnfInstanceId;
+
+						data.relatedInstanceList.push({relatedInstance: relatedInstance});
+					});
+				}
+				}catch(err){
+					$log.error('SchedulerCtrl::extractChangeManagementCallbackDataStr error: ' + err);
+				}
+
+				result.requestDetails.push(data);
+			});
+			return JSON.stringify(result);
+		}
+		
         vm.openModal = function () {
-            $scope.widgetParameter = ""; // needed by the scheduler?
+            if(VIDCONFIGURATION.SCHEDULER_PORTAL_URL) { //scheduling supported
+				$scope.widgetParameter = ""; // needed by the scheduler?
 
-            // properties needed by the scheduler so it knows whether to show
-            // policy or sniro related features on the scheduler UI or not.
-            vm.changeManagement.policyYN = "Y";
-            vm.changeManagement.sniroYN = "Y";
+				// properties needed by the scheduler so it knows whether to show
+				// policy or sniro related features on the scheduler UI or not.
+				vm.changeManagement.policyYN = "Y";
+				vm.changeManagement.sniroYN = "Y";
 
-            var data = {
-                widgetName: 'Portal-Common-Scheduler',
-                widgetData: vm.changeManagement,
-                widgetParameter: $scope.widgetParameter
-            };
-
-            window.parent.postMessage(data, VIDCONFIGURATION.SCHEDULER_PORTAL_URL);
+				var data = {
+					widgetName: 'Portal-Common-Scheduler',
+					widgetData: vm.changeManagement,
+					widgetParameter: $scope.widgetParameter
+				};
+			
+				window.parent.postMessage(data, VIDCONFIGURATION.SCHEDULER_PORTAL_URL);
+			} else {
+				//no scheduling support
+				var dataToSo = extractChangeManagementCallbackDataStr(vm.changeManagement);
+				var vnfName = vm.changeManagement.vnfNames[0].name;
+				changeManagementService.postChangeManagementNow(dataToSo, vnfName);
+			}
         };
 
         vm.loadSubscribers = function () {
diff --git a/vid-app-common/src/main/webapp/app/vid/scripts/services/change-management.service.js b/vid-app-common/src/main/webapp/app/vid/scripts/services/change-management.service.js
index fdab656..f170c41 100644
--- a/vid-app-common/src/main/webapp/app/vid/scripts/services/change-management.service.js
+++ b/vid-app-common/src/main/webapp/app/vid/scripts/services/change-management.service.js
@@ -76,5 +76,16 @@
 
             return deferred.promise;
         };
+		
+		this.postChangeManagementNow = function (requestData, vnfName) {
+			var url = COMPONENT.CHANGE_MANAGEMENT_OPERATION_NO_SCHEDULER.replace('@vnfName', vnfName);
+            return $http.post(url, requestData)
+            .success(function (response) {
+                return {data: response};
+            })
+                .catch(function (err) {
+                    return {data: []};
+                });
+        };
     }
 })();