4 appDS2.controller("newChangeManagementModalController", ["$uibModalInstance", "$uibModal", "AaiService", "changeManagementService",
5 "$log", "$scope", "_", newChangeManagementModalController]);
7 function newChangeManagementModalController($uibModalInstance, $uibModal, AaiService, changeManagementService, $log, $scope, _) {
10 var init = function () {
11 vm.changeManagement = {};
13 loadServicesCatalog();
14 registerVNFNamesWatcher();
18 var loadServicesCatalog = function () {
19 changeManagementService.getAllSDCServices()
20 .then(function (response) {
21 vm.SDCServicesCatalog = response.data;
23 .catch(function (error) {
28 var registerVNFNamesWatcher = function () {
29 $scope.$watch('vm.changeManagement.vnfNames', function (newVal, oldVal) {
30 if (!oldVal || newVal && newVal.length > oldVal.length) { //JUST THE LAST ONE ADDED
31 var newVNFName = _.last(vm.changeManagement.vnfNames);
33 vm.changeManagement.vnfNames = oldVal;
34 vm.changeManagement.vnfNames.push(newVNFName);
36 if (newVNFName && newVNFName["service-instance-node"]) {
37 var availableVersions = [];
38 var services = _.filter(vm.SDCServicesCatalog.services,
39 {"invariantUUID": newVNFName["service-instance-node"][0].properties["model-invariant-id"]});
41 _.each(services, function (service) {
42 changeManagementService.getSDCService(service.uuid)
43 .then(function (response) {
44 _.each(response.data.vnfs, function (vnf) {
45 if (newVNFName["invariant-id"] === vnf.invariantUuid) {
46 availableVersions.push(extractVNFModel(vnf, response.data.service, newVNFName));
49 var versions = _.uniqBy(availableVersions, ['modelInfo.modelVersion']);
50 newVNFName.availableVersions = _.uniq(versions, response.data.service, true);
51 }).catch(function (error) {
60 var extractVNFModel = function (csarVNF, sdcService, selectionVNF) {
61 var versionCsarData = {
63 vnfName: csarVNF.name,
66 modelInvariantId: csarVNF.invariantUuid,
67 modelVersionId: selectionVNF.modelVersionId,
68 modelName: csarVNF.name,
69 modelVersion: csarVNF.version,
70 modelCustomizationName: csarVNF.modelCustomizationName,
71 modelCustomizationId: csarVNF.customizationUuid
74 lcpCloudRegionId: "mdt1",
75 tenantId: "88a6ca3ee0394ade9403f075db23167e"
79 suppressRollback: false,
82 relatedInstanceList: [
85 instanceId: selectionVNF["service-instance-node"]["0"].properties['service-instance-id'],
88 modelInvariantId: selectionVNF["service-instance-node"]["0"].properties['model-invariant-id'],
89 modelVersionId: selectionVNF.modelVersionId,
90 modelName: sdcService.name,
91 modelVersion: sdcService.version,
92 modelCustomizationName: selectionVNF["service-instance-node"]["0"].properties['model-customization-name'], //TODO: Missing
93 modelCustomizationId: selectionVNF["service-instance-node"]["0"].properties['model-customization-id']
103 return versionCsarData;
106 vm.close = function () {
107 $uibModalInstance.close();
110 vm.schedule = function () {
111 $uibModalInstance.close(vm.changeManagement);
113 var modalInstance = $uibModal.open({
114 templateUrl: 'app/vid/scripts/modals/new-scheduler/new-scheduler.html',
115 controller: 'newSchedulerController',
118 changeManagement: function () {
119 return vm.changeManagement;
124 modalInstance.result.then(function (result) {
125 console.log("This is the result of the new change management modal.", result);
129 vm.loadSubscribers = function () {
131 AaiService.getSubscribers(function (response) {
132 vm.subscribers = response;
136 vm.loadServiceTypes = function () {
137 vm.serviceTypes = [];
139 AaiService.getSubscriberServiceTypes(vm.changeManagement.subscriberId)
140 .then(function (response) {
141 vm.serviceTypes = response.data;
143 .catch(function (error) {
148 vm.loadVNFTypes = function () {
150 vm.vnfTypesTemp = [];
151 vm.serviceInstances = [];
153 var instances = vm.changeManagement.serviceType["service-instances"]["service-instance"];
154 // var promiseArrOfGetVnfs = preparePromiseArrOfGetVnfs(instances);
158 AaiService.getVnfsByCustomerIdAndServiceType(
159 vm.changeManagement.subscriberId,
160 vm.changeManagement.serviceType["service-type"]
161 ).then(function (response) {
162 var vnfsData = response.data.results;
164 for (var i = 0; i < vnfsData.length; i++) {
166 const nodeType = vnfsData[i]['node-type'];
167 if (nodeType === "generic-vnf") {
168 _.forEach(vnfsData[i]['related-to'], function (node) {
169 if (node['node-type'] === 'vserver') {
170 vm.vnfs.push(vnfsData[i]);
173 } else if (nodeType === "service-instance") {
174 vm.serviceInstances.push(vnfsData[i]);
179 vm.vnfs = _.flattenDeep(
180 _.remove(vm.vnfs, function (vnf) {
181 var nfRole = vnf.properties['nf-role'];
182 if (nfRole !== undefined) {
183 return nfRole !== 'null' && nfRole !== '';
188 var filteredVnfs = _.uniqBy(vm.vnfs, function (vnf) {
189 return vnf.properties['nf-role'];
192 _.forEach(filteredVnfs, function (vnf) {
193 vm.vnfTypes.push(vnf.properties['nf-role'])
200 vm.loadVNFVersions = function () {
201 vm.fromVNFVersions = [];
202 vm.serviceInstancesToGetVersions = [];
204 _.forEach(vm.vnfs, function (vnf) {
205 if (vnf.properties['nf-role'] === vm.changeManagement['vnfType']) {
207 vm.serviceInstancesToGetVersions.push(vnf);
209 versions.push(vnf.properties["model-invariant-id"]);
215 AaiService.getVnfVersionsByInvariantId(versions).then(function (response) {
217 var key = response.data.model["0"]["model-invariant-id"];
218 var value = response.data.model["0"]["model-vers"]["model-ver"]["0"]["model-version"];
219 var element = {"key": key, "value": value};
220 vm.fromVNFVersions.push(element);
222 //TODO promise all and call the new api to get the versions.
223 // vm.fromVNFVersions.push(response.data.model["0"]["model-vers"]["model-ver"]["0"]["model-version"]);
224 // if(vm.serviceInstancesToGetVersions.length > 0){
226 // var promiseArrOfGetVnfs = preparePromiseArrOfGetVersions('a9a77d5a-123e-4ca2-9eb9-0b015d2ee0fb');
228 // Promise.all(promiseArrOfGetVnfs).then(function (allData) {
229 // vm.vnfs = _.flattenDeep(_.without(allData, null));
230 // var filteredVnfs = _.sortedUniqBy(vm.vnfs, function (vnf) {
231 // return vnf.properties.vnfType;
234 // _.forEach(filteredVnfs, function (vnf) {
235 // vm.vnfTypes.push(vnf.properties.vnfType)
238 // }).catch(function (error) {
247 // function preparePromiseArrOfGetVersions(serviceInstances) {
248 // var promiseArr = [];
249 // for (var i = 0; i < serviceInstances.length; i++) {
250 // var modelInvariantId = serviceInstances[i].properties["model-invariant-id"];
252 // getVnfs(modelInvariantId)
255 // return promiseArr;
258 function getVnfs(modelInvariantId) {
259 return new Promise(function (resolve, reject) {
260 AaiService.getVnfVersionsByInvariantId(modelInvariantId)
261 .then(function (response) {
262 if (response.data.httpCode !== null &&
263 response.data.httpCode === 200) {
264 var vnfsData = response.data.t.results;
265 for (var i = 0; i < vnfsData.length; i++) {
267 if (vnfsData[i].nodeType === "generic-vnf") {
268 resolve(vnfsData[i]);
269 } else if (vnfsData[i].nodeType === "service-instance") {
270 vm.serviceInstances.push(vnfsData[i]);
278 .catch(function (error) {
284 vm.loadVNFNames = function () {
287 _.forEach(vm.vnfs, function (vnf) {
289 if (vnf.properties['nf-role'] === vm.changeManagement.vnfType) {
292 _.forEach(vnf['related-to'], function (node) {
293 if (node['node-type'] === 'vserver') {
294 vServer = extractLcpRegionIdAndTenantId(node.url);
299 "id": vnf.properties["vnf-id"],
300 "name": vnf.properties["vnf-name"],
301 "invariant-id": vnf.properties["model-invariant-id"],
302 "service-instance-node": _.filter(vm.serviceInstances, {id: vnf["related-to"][0].id}),
303 "modelVersionId": vnf.properties["model-version-id"],
304 "properties": vnf.properties,
305 'cloudConfiguration': vServer,
306 "relatedTo": vnf['related-to']
312 function extractLcpRegionIdAndTenantId(url) {
314 var cloudConfiguration = {
315 lcpCloudRegionId: '',
319 var splitedUrlByDash = _.split(url, '/', 100);
321 cloudConfiguration.lcpCloudRegionId = splitedUrlByDash[7];
322 cloudConfiguration.tenantId = splitedUrlByDash[10];
324 return cloudConfiguration;
327 vm.loadWorkFlows = function () {
329 angular.forEach(vm.changeManagement.vnfNames, function (vnfName) {
330 vnfs.push(vnfName.name)
333 //TODO: When we'll have the mappings, use the backend call to get the workflows
334 // changeManagementService.getWorkflows(vnfs)
335 // .then(function(response) {
336 // vm.workflows = response.data;
338 // .catch(function(error) {
339 // $log.error(error);
342 vm.workflows = ["Update", "Replace"];
345 //Must be $scope because we bind to the onchange of the html (cannot attached to vm variable).
346 $scope.selectFileForVNFName = function (fileInput) {
347 if (fileInput && fileInput.id) {
348 var vnfName = _.filter(vm.changeManagement.vnfNames, {"invariant-id": fileInput.id});
349 var file = fileInput.files[0];
350 var fileReader = new FileReader();
351 fileReader.onload = function (load) {
353 var lines = load.target.result;
354 vnfName[0].selectedFile = JSON.parse(lines);
359 fileReader.readAsText(file);
363 vm.selectVersionForVNFName = function (vnfName) {
364 console.log("Will add version for selected vnf name: " + vnfName.name);