2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 - 2019 AT&T Intellectual Property. All rights reserved.
\r
6 * Modifications Copyright (C) 2019 IBM.
\r
7 * ================================================================================
\r
8 * Licensed under the Apache License, Version 2.0 (the "License");
\r
9 * you may not use this file except in compliance with the License.
\r
10 * You may obtain a copy of the License at
\r
12 * http://www.apache.org/licenses/LICENSE-2.0
\r
14 * Unless required by applicable law or agreed to in writing, software
\r
15 * distributed under the License is distributed on an "AS IS" BASIS,
\r
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
17 * See the License for the specific language governing permissions and
\r
18 * limitations under the License.
\r
19 * ============LICENSE_END=========================================================
\r
24 appDS2.controller("aaiSubscriberController", ["COMPONENT", "FIELD", "PARAMETER", "DataService", "PropertyService", "$scope", "$http", "$timeout", "$location", "$log", "$route", "$uibModal", "VIDCONFIGURATION", "UtilityService", "vidService", "AaiService", "MsoService", "OwningEntityService", "AsdcService","featureFlags", "$q", "_",
\r
25 function (COMPONENT, FIELD, PARAMETER, DataService, PropertyService, $scope, $http, $timeout, $location, $log, $route, $uibModal, VIDCONFIGURATION, UtilityService, vidService, AaiService, MsoService, OwningEntityService, AsdcService, featureFlags, $q, _) {
\r
27 $scope.showReportWindow = function() {
\r
30 if ($scope.errorMsg !== undefined && $scope.errorMsg !== null) {
\r
31 GuiMessage = $scope.errorMsg;
\r
33 GuiMessage = $scope.status;
\r
36 const modalWindow = $uibModal.open({
\r
37 templateUrl: 'app/vid/scripts/modals/report-modal/report-modal.html',
\r
38 controller: 'reportModalController',
\r
41 errorMsg: function () {
\r
48 $scope.showVnfDetails = function (vnf) {
\r
49 console.log("showVnfDetails");
\r
50 DataService.setVnfInstanceId(COMPONENT.VNF_INSTANCE_ID);
\r
52 .setInventoryItem(aaiResult[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM][0]);
\r
54 $scope.$broadcast(COMPONENT.SHOW_COMPONENT_DETAILS, {
\r
55 componentId: COMPONENT.VNF,
\r
56 callbackFunction: callbackFunction
\r
59 $scope.popup = new Object();
\r
62 $scope.isPopupVisible = false;
\r
63 $scope.defaultBaseUrl = "";
\r
64 $scope.responseTimeoutMsec = 60000;
\r
66 $scope.serviceTypes = [FIELD.PROMPT.SELECT_SERVICE, COMPONENT.UCPE_VMS, COMPONENT.SDN_L3_BONDING, COMPONENT.SDN_ETHERNET_INTERNET];
\r
67 $scope.defaultSubscriberName = [FIELD.PROMPT.SELECT_SUB];
\r
69 $scope.verifyButtonEnabled = true;
\r
71 var callbackFunction = function (response) {
\r
75 $scope.getSubs = function () {
\r
77 $scope.fetchSubs(FIELD.PROMPT.FETCHING_SUBS);
\r
78 $scope.fetchServices();
\r
81 $scope.cancelCreateSI = function () {
\r
83 window.location.href = COMPONENT.WELCOME_PATH;
\r
86 $scope.getServiceTypes = function (globalCustomerId) {
\r
87 DataService.setGlobalCustomerId(globalCustomerId);
\r
88 DataService.setServiceIdList($scope.customerList);
\r
90 if (globalCustomerId !== "" && globalCustomerId !== undefined) {
\r
91 window.location.href = COMPONENT.SERVICE_TYPE_LIST_PATH + $scope.serviceTypeList;
\r
95 $scope.refreshServiceTypes = function (globalCustomerId) {
\r
96 DataService.setGlobalCustomerId(globalCustomerId);
\r
98 $scope.getServiceTypesList();
\r
102 $scope.createSubscriberName = "";
\r
103 $scope.serviceTypeList = {};
\r
104 $scope.custSubList = [];
\r
105 $scope.getServiceTypesList = function () {
\r
106 var notFound = true;
\r
107 var globalCustomerId = DataService.getGlobalCustomerId();
\r
108 $scope.custSubList = DataService.getServiceIdList();
\r
109 if (globalCustomerId !== "" && globalCustomerId !== undefined) {
\r
110 $scope.subId = globalCustomerId;
\r
112 $scope.status = FIELD.PROMPT.FETCHING_SERVICE_TYPES;
\r
113 DataService.setGlobalCustomerId(globalCustomerId);
\r
115 AaiService.getSubscriptionServiceTypeList(DataService
\r
116 .getGlobalCustomerId(), function (response) {
\r
118 $scope.setProgress(100); // done
\r
119 $scope.status = FIELD.STATUS.DONE;
\r
120 $scope.isSpinnerVisible = false;
\r
121 $scope.serviceTypeList = response;
\r
122 for (var i = 0; i < $scope.custSubList.length; i++) {
\r
123 if (globalCustomerId === $scope.custSubList[i].globalCustomerId) {
\r
124 $scope.createSubscriberName = $scope.custSubList[i].subscriberName;
\r
127 }, function (response) { // failure
\r
128 $scope.showError(FIELD.ERROR.AAI);
\r
129 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_TYPES + response.status;
\r
130 $scope.errorDetails = response.data;
\r
133 alert(FIELD.ERROR.SELECT);
\r
138 $scope.subList = [];
\r
139 $scope.getAaiServiceModels = function (selectedServicetype, subName) {
\r
140 DataService.setGlobalCustomerId(selectedServicetype);
\r
141 DataService.setServiceIdList($scope.serviceTypeList);
\r
142 DataService.setSubscriberName(subName);
\r
144 DataService.setSubscribers($scope.custSubList);
\r
146 if (selectedServicetype !== "" && selectedServicetype !== 'undefined'&& selectedServicetype !== undefined) {
\r
147 $location.path(COMPONENT.CREATE_INSTANCE_PATH);
\r
151 $scope.serviceTypeName = "";
\r
152 $scope.getAaiServiceModelsList = function () {
\r
153 var globalCustomerId = "";
\r
154 var serviceTypeId = DataService.getGlobalCustomerId();
\r
155 $scope.serviceTypeList = DataService.getServiceIdList();
\r
156 $scope.createSubscriberName = DataService.getSubscriberName();
\r
157 $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG;
\r
158 $scope.custSubList = DataService.getSubscribers();
\r
159 for (var i = 0; i < $scope.serviceTypeList.length; i++) {
\r
160 if (parseInt(serviceTypeId) === i) {
\r
161 $scope.serviceTypeName = $scope.serviceTypeList[i].name;
\r
165 for (var i = 0; i < $scope.custSubList.length; i++) {
\r
166 if ($scope.createSubscriberName === $scope.custSubList[i].subscriberName) {
\r
167 globalCustomerId = $scope.custSubList[i].globalCustomerId;
\r
168 globalCustId = globalCustomerId;
\r
172 var pathQuery = "";
\r
174 if (null !== globalCustomerId && "" !== globalCustomerId && undefined !== globalCustomerId
\r
175 && null !== serviceTypeId && "" !== serviceTypeId && undefined !== serviceTypeId) {
\r
176 pathQuery = COMPONENT.SERVICES_PATH + globalCustomerId + "/" + $scope.serviceTypeName;
\r
179 var namedQueryId = '6e806bc2-8f9b-4534-bb68-be91267ff6c8';
\r
180 AaiService.getServiceModelsByServiceType(namedQueryId, globalCustomerId, $scope.serviceTypeName, function (response) { // success
\r
181 $scope.services = [];
\r
182 if (angular.isArray(response.data['inventory-response-item']) && response.data['inventory-response-item'].length > 0 && response.data['inventory-response-item'][0]['inventory-response-items']) {
\r
183 wholeData = response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item'];
\r
184 $scope.services = $scope.filterDataWithHigerVersion(response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item']);
\r
185 $scope.serviceType = response.data['inventory-response-item'][0]['service-subscription']['service-type'];
\r
186 $scope.viewPerPage = 10;
\r
187 $scope.totalPage = $scope.services.length / $scope.viewPerPage;
\r
188 $scope.sortBy = "name";
\r
189 $scope.scrollViewPerPage = 2;
\r
190 $scope.currentPage = 1;
\r
191 $scope.searchCategory;
\r
192 $scope.searchString = "";
\r
193 $scope.currentPageNum = 1;
\r
194 $scope.isSpinnerVisible = false;
\r
195 $scope.isProgressVisible = false;
\r
197 $scope.status = "Failed to get service models from SDC.";
\r
198 $scope.error = true;
\r
199 $scope.isSpinnerVisible = false;
\r
201 DataService.setServiceIdList(response);
\r
202 }, function (response) { // failure
\r
203 $scope.showError(FIELD.ERROR.AAI);
\r
204 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;
\r
205 $scope.errorDetails = response.data;
\r
210 var globalCustId;// This value will be assigned only on create new service instance screen-macro
\r
211 $scope.createType = "a la carte";
\r
212 $scope.deployService = function (service, hideServiceFields) {
\r
213 hideServiceFields = hideServiceFields || false;
\r
214 var temp = service;
\r
215 service.uuid = service['service-instance']['model-version-id'];
\r
217 console.log("Instantiating ASDC service " + service.uuid);
\r
219 $http.get('rest/models/services/' + service.uuid)
\r
220 .then(function (getServiceResponse) {
\r
221 getServiceResponse.data['service'].serviceTypeName = $scope.serviceTypeName;
\r
222 getServiceResponse.data['service'].createSubscriberName = $scope.createSubscriberName;
\r
223 var serviceModel = getServiceResponse.data;
\r
224 DataService.setServiceName(serviceModel.service.name);
\r
226 DataService.setModelInfo(COMPONENT.SERVICE, {
\r
227 "modelInvariantId": serviceModel.service.invariantUuid,
\r
228 "modelVersion": serviceModel.service.version,
\r
229 "modelNameVersionId": serviceModel.service.uuid,
\r
230 "modelName": serviceModel.service.name,
\r
231 "description": serviceModel.service.description,
\r
232 "serviceType": serviceModel.service.serviceType,
\r
233 "serviceRole": serviceModel.service.serviceRole,
\r
234 "category": serviceModel.service.category,
\r
235 "serviceTypeName": serviceModel.service.serviceTypeName,
\r
236 "createSubscriberName": serviceModel.service.createSubscriberName
\r
238 DataService.setHideServiceFields(hideServiceFields);
\r
239 if (hideServiceFields) {
\r
240 DataService.setServiceType($scope.serviceTypeName);
\r
241 DataService.setGlobalCustomerId(globalCustId);
\r
244 DataService.setALaCarte(true);
\r
245 $scope.createType = "a la carte";
\r
246 var broadcastType = "createComponent";
\r
248 DataService.setShouldIncludeInAsyncInstantiationFlow(AsdcService.shouldTakeTheAsyncInstantiationFlow(serviceModel));
\r
250 if (AsdcService.isMacro(serviceModel)) {
\r
251 DataService.setALaCarte(false);
\r
252 $scope.createType = "Macro";
\r
253 var convertedAsdcModel = UtilityService.convertModel(serviceModel);
\r
255 //console.log ("display inputs ");
\r
256 //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs));
\r
258 DataService.setModelInfo(COMPONENT.SERVICE, {
\r
259 "modelInvariantId": serviceModel.service.invariantUuid,
\r
260 "modelVersion": serviceModel.service.version,
\r
261 "modelNameVersionId": serviceModel.service.uuid,
\r
262 "modelName": serviceModel.service.name,
\r
263 "description": serviceModel.service.description,
\r
264 "category": serviceModel.service.category,
\r
265 "serviceEcompNaming": serviceModel.service.serviceEcompNaming,
\r
266 "inputs": serviceModel.service.inputs,
\r
267 "displayInputs": convertedAsdcModel.completeDisplayInputs,
\r
268 "serviceTypeName": serviceModel.service.serviceTypeName,
\r
269 "createSubscriberName": serviceModel.service.createSubscriberName,
\r
270 "serviceType": serviceModel.service.serviceType,
\r
271 "serviceRole": serviceModel.service.serviceRole
\r
275 $scope.$broadcast(broadcastType, {
\r
276 componentId: COMPONENT.SERVICE,
\r
277 callbackFunction: function (response) {
\r
278 if (response.isSuccessful) {
\r
279 vidService.setModel(serviceModel);
\r
281 var subscriberId = "Not Found";
\r
282 var serviceType = "Not Found";
\r
284 var serviceInstanceId = response.instanceId;
\r
286 for (var i = 0; i < response.control.length; i++) {
\r
287 if (response.control[i].id == "subscriberName") {
\r
288 subscriberId = response.control[i].value;
\r
289 } else if (response.control[i].id == "serviceType") {
\r
290 serviceType = response.control[i].value;
\r
295 $scope.refreshSubs(subscriberId, serviceType, serviceInstanceId);
\r
301 }, function (response) {
\r
302 $log.error("Error: ", response);
\r
307 //extract all models from service instances properties and filter by the higher model version
\r
308 $scope.filterDataWithHigerVersion = function(serviceData){
\r
310 //get all service instances & models collected into array. key = model invariant id
\r
311 var servicesByModelInvariant = _.reduce(serviceData, function(result, item) {
\r
312 if (item['extra-properties']['extra-property']) {
\r
313 var invariantId = item['extra-properties']['extra-property'][4];
\r
315 (result[invariantId["property-value"]] || (result[invariantId["property-value"]] = [])).push(item);
\r
321 //iterate over the array and get the highest model version for each group of services
\r
322 var filterDataServicesByVersion = [];
\r
323 _.forEach(servicesByModelInvariant, function(items) {
\r
324 var maxVersionItem = _.maxBy(items, function(item) { return parseFloat(item['extra-properties']['extra-property'][6]["property-value"]); });
\r
325 filterDataServicesByVersion.push(maxVersionItem);
\r
328 return filterDataServicesByVersion;
\r
331 $scope.tableData = [];
\r
333 $scope.loadPreviousVersionData = function (version, invariantUUID) {
\r
334 $scope.tableData = [];
\r
336 for (var i = 0; i < wholeData.length; i++) {
\r
337 if (wholeData[i]['extra-properties']['extra-property'] && wholeData[i]['extra-properties']['extra-property'][4]['property-value'] == invariantUUID && version != wholeData[i]['extra-properties']['extra-property'][6]['property-value']) {
\r
338 oldData.push(wholeData[i]);
\r
341 $scope.tableData = oldData;
\r
342 $scope.createType = "Previous Version";
\r
343 var broadcastType = "createTableComponent";
\r
344 $scope.componentName = invariantUUID;
\r
345 $scope.$broadcast(broadcastType, {
\r
346 componentId: COMPONENT.OLDVERSION,
\r
347 callbackFunction: function (response) {
\r
351 $scope.cancelCreateSIType = function () {
\r
353 window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH;
\r
357 $scope.fetchServices = function () {
\r
358 var serviceIdList = [];
\r
360 AaiService.getServices2(function (response) { // success
\r
361 DataService.setServiceIdList(response);
\r
362 }, function (response) { // failure
\r
363 $scope.showError(FIELD.ERROR.AAI);
\r
364 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;
\r
365 $scope.errorDetails = response.data;
\r
369 $scope.refreshSubs = function () {
\r
371 $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST);
\r
372 $scope.fetchServices();
\r
375 $scope.loadOwningEntity = function () {
\r
376 OwningEntityService.getOwningEntityProperties(function (response) {
\r
377 $scope.owningEntities = response.owningEntity;
\r
378 $scope.projects = response.project;
\r
380 // working project name: owning-entity-id-val-cp8128
\r
381 // working owning entity name: owning-entity-id-val-cp8128
\r
385 $scope.fetchSubs = function (status) {
\r
386 $scope.status = status;
\r
388 AaiService.getSubList(function (response) {
\r
389 $scope.setProgress(100); // done
\r
390 $scope.status = FIELD.STATUS.DONE;
\r
391 $scope.isSpinnerVisible = false;
\r
392 $scope.customerList = response;
\r
393 }, function (response) { // failure
\r
394 $scope.showError(FIELD.ERROR.AAI);
\r
395 $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;
\r
396 $scope.errorDetails = response.data;
\r
400 $scope.getPermitted = function (item) {
\r
401 return item.isPermitted || item[FIELD.ID.IS_PERMITTED];
\r
406 $scope.getSubDetails = function () {
\r
409 //$scope.selectedSubscriber = $location.search().selectedSubscriber;
\r
410 // $scope.selectedServiceInstance = $location.search().selectedServiceInstance;
\r
411 $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber;
\r
412 var query = $location.url().replace($location.path(),'');
\r
414 $scope.displayData = [];
\r
415 AaiService.searchServiceInstances(query).then(function (response) {
\r
416 $scope.displayData = response.displayData;
\r
417 if (response.displayData.length)
\r
419 var first = response.displayData[0];
\r
420 $scope.selectedSubscriberId = first.globalCustomerId;
\r
421 $scope.selectedSubscriberName = first.subscriberName;
\r
423 $scope.viewPerPage = 10;
\r
424 $scope.totalPage = $scope.displayData.length / $scope.viewPerPage;
\r
425 $scope.scrollViewPerPage = 2;
\r
426 $scope.currentPage = 1;
\r
427 $scope.searchCategory;
\r
428 $scope.searchString = "";
\r
429 $scope.currentPageNum = 1;
\r
430 $scope.defaultSort = COMPONENT.SUBSCRIBER_NAME;
\r
431 $scope.setProgress(100); // done
\r
432 $scope.status = FIELD.STATUS.DONE;
\r
433 $scope.isSpinnerVisible = false;
\r
435 }).catch(function (response) {
\r
436 $scope.showError(FIELD.ERROR.AAI);
\r
437 $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;
\r
438 $scope.errorDetails = response.data;
\r
443 $scope.$on(COMPONENT.MSO_DELETE_REQ, function (event, request) {
\r
444 // $log.debug("deleteInstance: request:");
\r
445 // $log.debug(request);
\r
448 $http.post($scope.baseUrl + request.url, {
\r
449 requestDetails: request.requestDetails
\r
451 timeout: $scope.responseTimeoutMsec
\r
452 }).then($scope.handleInitialResponse)
\r
453 ["catch"]($scope.handleServerError);
\r
456 $scope.init = function () {
\r
457 //PropertyService.setAaiBaseUrl("testaai");
\r
458 //PropertyService.setAsdcBaseUrl("testasdc");
\r
460 // takes a default value, retrieves the prop value from the file system and sets it
\r
461 var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();
\r
462 PropertyService.setMsoMaxPollingIntervalMsec(msecs);
\r
464 // takes a default value, retrieves the prop value from the file system and sets it
\r
465 var polls = PropertyService.retrieveMsoMaxPolls();
\r
466 PropertyService.setMsoMaxPolls(polls);
\r
469 * Common parameters that would typically be set when the page is
\r
470 * displayed for a specific service instance id.
\r
473 $scope.baseUrl = $scope.defaultBaseUrl;
\r
475 $scope.isSpinnerVisible = true;
\r
476 $scope.isProgressVisible = true;
\r
477 $scope.isPopupVisible = true;
\r
478 $scope.requestId = "";
\r
480 $scope.pollAttempts = 0;
\r
482 $scope.enableCloseButton(false);
\r
483 $scope.resetProgress();
\r
484 $scope.setProgress(2); // Show "a little" progress
\r
487 function getRelatedInstanceGroupsByVnfId(genericVnf) {
\r
488 var model = vidService.getModel();
\r
489 if (model && model.vnfs && !_.isEmpty(model.vnfs)) {
\r
490 Object.keys(model.vnfs).forEach(function (key) {
\r
491 var vnf = model.vnfs[key];
\r
492 if (vnf.vfcInstanceGroups && !_.isEmpty(vnf.vfcInstanceGroups) && vnf.uuid === genericVnf.modelVersionId) {
\r
493 AaiService.getInstanceGroupsByVNFInstanceId(genericVnf.nodeId,
\r
494 function (response) { //success
\r
495 handleGetRelatedInstanceGroupsResponseForVnf(response, genericVnf);
\r
497 function (response) { //failure
\r
498 $scope.showError(FIELD.ERROR.AAI);
\r
499 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status;
\r
500 $scope.errorDetails = response.data;
\r
508 function resolveModelDataIfMissing(modelVersionId) {
\r
509 var model = vidService.getModel();
\r
510 if (model && model.service && model.service.uuid === modelVersionId) {
\r
511 return $q.resolve(); // no need to resolve anything
\r
513 // resolve model and value of isPermitted
\r
514 return resolveIfIsPermitted()
\r
516 return getAsdcModelByVersionId(modelVersionId);
\r
521 function resolveIfIsPermitted() {
\r
522 var deferred = $q.defer();
\r
523 AaiService.searchServiceInstances(
\r
524 '?subscriberId=' + $location.search().subscriberId +
\r
525 '&serviceInstanceIdentifier=' + $location.search().serviceInstanceId + '&serviceInstanceIdentifierType=Service Instance Id')
\r
526 .then(function (response) {
\r
527 if (response.displayData && response.displayData.length) {
\r
528 var first = response.displayData[0];
\r
529 $scope.isPermitted = first.isPermitted;
\r
530 deferred.resolve(first.isPermitted);
\r
532 deferred.reject("some error while resolveIfIsPermitted");
\r
536 return deferred.promise;
\r
539 var serviceNetworkVlans = [];
\r
540 var vnfNetworksAndVlans = [];
\r
542 function fetchServiceIfMissing() {
\r
543 if (_.isEmpty(DataService.getServiceIdList())) {
\r
544 $scope.fetchServices();
\r
548 $scope.getComponentList = function (event, request) {
\r
550 $scope.isSpinnerVisible = true;
\r
551 $scope.isProgressVisible = true;
\r
552 $scope.isPopupVisible = true;
\r
553 $scope.requestId = "";
\r
555 $scope.pollAttempts = 0;
\r
558 $scope.resetProgress();
\r
559 $scope.setProgress(2); // Show "a little" progress
\r
561 $scope.globalCustomerId = $location.search().subscriberId;
\r
562 $scope.serviceType = $location.search().serviceType;
\r
563 $scope.serviceInstanceId = $location.search().serviceInstanceId;
\r
564 $scope.subscriberName = $location.search().subscriberName;
\r
566 //$scope.getAsdcModel($location.search().modelUuid);
\r
568 //make sure view/edit don't open new deploy service popup
\r
569 DataService.setShouldIncludeInAsyncInstantiationFlow(false);
\r
571 return getModelVersionIdForServiceInstance({
\r
572 globalCustomerId: $location.search().subscriberId,
\r
573 serviceInstanceId: $location.search().serviceInstanceId,
\r
574 aaiModelVersionId: $location.search().aaiModelVersionId
\r
576 .then(resolveModelDataIfMissing)
\r
577 .then($scope.prepareScopeWithModel)
\r
578 .then(fetchServiceIfMissing)
\r
579 .then(function () {
\r
580 return AaiService.getVlansByNetworksMapping($scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId, $scope.service.model.service.uuid);
\r
582 .then(function (vlanByNetwork) {
\r
583 serviceNetworkVlans = vlanByNetwork.serviceNetworks ? vlanByNetwork.serviceNetworks : [];
\r
584 vnfNetworksAndVlans = vlanByNetwork.vnfNetworks ? vlanByNetwork.vnfNetworks : [];
\r
585 $log.debug('vlanByNetwork', vlanByNetwork);
\r
586 $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID;
\r
587 $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId;
\r
589 $scope.hasFabricConfigurations = !UtilityService.isObjectEmpty($scope.service.model.fabricConfigurations);
\r
590 return AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId,
\r
591 function (response) { //success
\r
593 $log.debug("Getting inventory reponse items from Named Query with AAI query optimization - Before ");
\r
594 $scope.handleInitialResponseInventoryItemsOptimized(response);
\r
595 $log.debug("Getting inventory reponse items from Named Query with AAI query optimization - After ");
\r
597 $log.error("Exception: Fallback to original method of getting subscriber name and SI orch status.");
\r
598 $scope.handleInitialResponseInventoryItems(response);
\r
600 $scope.setProgress(100); // done
\r
601 $scope.status = FIELD.STATUS.DONE;
\r
602 $scope.isSpinnerVisible = false;
\r
605 function (response) { //failure
\r
606 $scope.showError(FIELD.ERROR.AAI);
\r
607 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status;
\r
608 $scope.errorDetails = response.data;
\r
614 $scope.handleServerError = function (response, status) {
\r
615 alert(response.statusText);
\r
618 function handleGetRelatedInstanceGroupsResponseForVnf(response, genericVnf) {
\r
619 _.forEach(response.data, function (instanceGroup) {
\r
620 var newInstanceGroup = {
\r
621 name: instanceGroup.name,
\r
622 type: instanceGroup.type
\r
624 genericVnf.instanceGroups.push(newInstanceGroup);
\r
630 function getModelVersionIdForServiceInstance(instance) {
\r
631 if (UtilityService.hasContents(instance.aaiModelVersionId)) {
\r
632 return $q.resolve(instance.aaiModelVersionId);
\r
633 } else if ($scope.modelVersionIdForServiceInstance
\r
634 && $scope.modelVersionIdForServiceInstance.globalCustomerId === instance.globalCustomerId
\r
635 && $scope.modelVersionIdForServiceInstance.serviceInstanceId === instance.serviceInstanceId
\r
637 return $q.resolve($scope.modelVersionIdForServiceInstance.aaiModelVersionId);
\r
639 $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId;
\r
640 return AaiService.getModelVersionId(instance.globalCustomerId, instance.serviceInstanceId, 'Service Instance Id')
\r
641 .then(function (aaiModelVersionId) {
\r
642 $scope.modelVersionIdForServiceInstance = {
\r
643 globalCustomerId: instance.globalCustomerId,
\r
644 serviceInstanceId: instance.serviceInstanceId,
\r
645 aaiModelVersionId: aaiModelVersionId
\r
647 return $q.resolve(aaiModelVersionId);
\r
652 $scope.onViewEditClick = function (disData) {
\r
653 $log.debug("disData", disData, null, 4);
\r
655 getModelVersionIdForServiceInstance(disData)
\r
656 .then(getAsdcModelByVersionId, handleErrorGettingModelVersion)
\r
657 .then(navigateToViewEditPage);
\r
660 function navigateToViewEditPage() {
\r
661 window.location.href = AsdcService.shouldTakeTheDrawingBoardViewEdit(vidService.getModel()) ?
\r
662 drawingBoardViewEditUrl() : oldViewEditUrl();
\r
665 function oldViewEditUrl() {
\r
666 return COMPONENT.INSTANTIATE_ROOT_PATH + disData.globalCustomerId +
\r
667 COMPONENT.SUBSCRIBERNAME_SUB_PATH + disData.subscriberName +
\r
668 COMPONENT.SERVICETYPE_SUB_PATH + disData.serviceType +
\r
669 COMPONENT.SERVICEINSTANCEID_SUB_PATH + disData.serviceInstanceId +
\r
670 COMPONENT.MODELVERSIONID_SUB_PATH + disData.aaiModelVersionId +
\r
671 COMPONENT.IS_PERMITTED_SUB_PATH + disData.isPermitted;
\r
674 function drawingBoardViewEditUrl() {
\r
675 return 'serviceModels.htm#/servicePlanning/EDIT?' +
\r
676 'serviceModelId=' + disData.aaiModelVersionId +
\r
677 '&subscriberId=' + disData.globalCustomerId +
\r
678 '&serviceType=' + disData.serviceType +
\r
679 '&serviceInstanceId=' + disData.serviceInstanceId;
\r
683 function handleErrorGettingModelVersion(err) {
\r
684 $log.error("aaiSubscriber getModelVersionIdForServiceInstance - " + err);
\r
685 $scope.errorMsg = err;
\r
686 alert($scope.errorMsg);
\r
687 return $q.reject();
\r
690 function getAsdcModelByVersionId(aaiModelVersionId) {
\r
691 // aaiModelVersionId is the model uuid
\r
692 var pathQuery = COMPONENT.SERVICES_PATH + aaiModelVersionId;
\r
696 }).then(function (response) {
\r
697 if (response.headers()['content-type'].includes('json')) {
\r
698 vidService.setModel(response.data);
\r
699 console.log("aaiSubscriber getAsdcModel DONE!!!!");
\r
701 // the response is erroneous
\r
702 console.log("aaiSubscriber getAsdcModel BAD RESPONSE");
\r
703 errorCallback(response);
\r
704 return $q.reject();
\r
708 function errorCallback(response) {
\r
709 $log.error("aaiSubscriber getAsdcModel - " + FIELD.ERROR.NO_MATCHING_MODEL_AAI + aaiModelVersionId);
\r
710 $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + aaiModelVersionId;
\r
711 alert($scope.errorMsg);
\r
715 function returnMatchingServiceSubscription(serviceSubs, serviceId){
\r
717 serviceSubs.forEach(function(item){
\r
718 if (item[FIELD.ID.SERVICE_INSTANCES] != null) {
\r
719 item[FIELD.ID.SERVICE_INSTANCES][FIELD.ID.SERVICE_INSTANCE].forEach(function (service) {
\r
720 if (service[FIELD.ID.SERVICE_INSTANCE_ID] === serviceId) {
\r
721 orchStatus = service['orchestration-status'];
\r
729 $scope.getTenants = function (globalCustomerId) {
\r
730 $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId)
\r
731 .then(function (response) {
\r
732 return response.data;
\r
733 //$location.path("/instantiate");
\r
734 }, function (response) {
\r
739 $scope.isConfigurationDataAvailiable = function (configuration) {
\r
740 $log.debug(configuration);
\r
741 return configuration.configData && (!configuration.configData.errorDescription);
\r
744 $scope.allowConfigurationActions = function (configuration) {
\r
745 $log.debug(configuration);
\r
746 return configuration.nodeStatus &&
\r
748 [FIELD.STATUS.AAI_ACTIVE, FIELD.STATUS.AAI_INACTIVE, FIELD.STATUS.AAI_CREATED],
\r
750 return s.toLowerCase() === configuration.nodeStatus.toLowerCase();
\r
754 $scope.isActivateDeactivateEnabled = function(btnType) {
\r
755 if ($scope.serviceOrchestrationStatus) {
\r
756 var status = $scope.serviceOrchestrationStatus.toLowerCase();
\r
759 return _.includes(COMPONENT.ACTIVATE_SERVICE_STATUSES, status);
\r
762 return status === 'active';
\r
770 $scope.isShowVerifyService = function () {
\r
771 return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_SHOW_VERIFY_SERVICE);
\r
774 $scope.isShowErrorReport = function() {
\r
775 return featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_CREATE_ERROR_REPORTS);
\r
778 $scope.isEnableVerifyService = function () {
\r
779 //Button should only be enabled when the service type is A la carte
\r
780 if (DataService.getALaCarte()) {
\r
781 return $scope.verifyButtonEnabled;
\r
786 $scope.activateVerifyService = function () {
\r
787 $scope.verifyButtonEnabled = false;
\r
788 let url = COMPONENT.VERIFY_SERVICE_URL;
\r
792 'Content-Type': 'application/json'
\r
797 "serviceInstanceList": [
\r
799 "serviceInstanceId": $scope.serviceInstanceId,
\r
800 "modelVersionId": $scope.service.model.service.uuid,
\r
801 "modelInvariantId": $scope.service.model.service.invariantUuid,
\r
802 "customerId": $scope.globalCustomerId,
\r
803 "serviceType": $scope.service.instance.serviceType,
\r
807 AaiService.postPOMBAverificationRequest(url, data, config);
\r
811 $scope.isShowAssignmentsEnabled = function () {
\r
812 if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_SHOW_ASSIGNMENTS) && $scope.serviceOrchestrationStatus) {
\r
813 return $scope.serviceOrchestrationStatus.toLowerCase() === 'assigned';
\r
818 $scope.isActivateFabricConfiguration = function () {
\r
820 if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_FABRIC_CONFIGURATION_ASSIGNMENTS) && $scope.hasFabricConfigurations) {
\r
821 if ($scope.serviceOrchestrationStatus) {
\r
822 return $scope.serviceOrchestrationStatus.toLowerCase() === 'assigned';
\r
828 $scope.isResumeShown = function (status) {
\r
829 var vfModuleStatus = status.toLowerCase();
\r
830 var vfModuleStatusHasAllowedResume = ['pendingactivation', 'assigned'];
\r
831 if (featureFlags.isOn(COMPONENT.FEATURE_FLAGS.FLAG_VF_MODULE_RESUME_STATUS_CREATE)) {
\r
832 vfModuleStatusHasAllowedResume.push('created');
\r
834 return _.includes(vfModuleStatusHasAllowedResume, vfModuleStatus) && !$scope.isActivateDeactivateEnabled("activate");
\r
837 $scope.handleInitialResponseInventoryItemsOptimized = function (response) {
\r
839 $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json
\r
840 $log.debug($scope.inventoryResponseItemList);
\r
842 $scope.displayData = [];
\r
845 $scope.counter = 100;
\r
847 $scope.subscriberName = $location.search().subscriberName;
\r
849 $scope.allConfigurationsAssigned = true;
\r
850 // look up the subscriber name and service orchestration status from A&AI here...
\r
851 AaiService.getSubscriberNameAndServiceInstanceInfo( $scope.globalCustomerId,
\r
852 $scope.serviceInstanceId,
\r
853 'Service Instance Id',$scope.subscriberName, function (response) {
\r
854 $scope.subscriberName = response['subscriberName'];
\r
855 DataService.setSubscriberName($scope.subscriberName);
\r
856 $scope.serviceOrchestrationStatus = response['orchestrationStatus'];
\r
857 if ($scope.serviceOrchestrationStatus.toLowerCase() !== FIELD.STATUS.ASSIGNED.toLowerCase()) {
\r
858 $scope.allConfigurationsAssigned = false;
\r
860 angular.forEach($scope.inventoryResponseItemList, function (inventoryResponseItem, key) {
\r
862 $scope.inventoryResponseItem = inventoryResponseItem;
\r
864 $scope.service.instance = {
\r
865 "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME],
\r
866 "serviceInstanceId": $scope.serviceInstanceId,
\r
867 "serviceType": $scope.serviceType,
\r
868 "globalCustomerId": $scope.globalCustomerId,
\r
869 "subscriberName": $scope.subscriberName,
\r
870 "id": $scope.serviceInstanceId,
\r
873 "type": PARAMETER.STRING,
\r
874 "description": FIELD.PROMPT.VAR_DESCRIPTION_A,
\r
875 "default": FIELD.PROMPT.DEFAULT_A
\r
878 "type": PARAMETER.STRING,
\r
879 "description": FIELD.PROMPT.VAR_DESCRIPTION_B,
\r
880 "default": FIELD.PROMPT.DEFAULT_B
\r
883 "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE],
\r
886 "configurations": []
\r
889 var portMirroringConfigurationIds = [];
\r
890 if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
892 angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subInventoryResponseItem, key) {
\r
893 // i expect to find vnfs now
\r
895 if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) {
\r
896 var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK];
\r
898 "id": $scope.counter++,
\r
899 "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],
\r
900 "itemType": FIELD.ID.L3_NETWORK,
\r
901 "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],
\r
902 "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],
\r
903 "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
904 "object": l3NetworkObject,
\r
909 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
910 //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]=");
\r
911 //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 ));
\r
912 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subSubInventoryResponseItem, key) {
\r
913 //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 ));
\r
916 if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) {
\r
917 subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET];
\r
919 "subnet-id": subnetObject[FIELD.ID.SUBNET_ID],
\r
920 "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME],
\r
921 "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS],
\r
922 "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS],
\r
923 "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK]
\r
925 l3Network.subnets.push(subnet);
\r
931 var networkObj = _.find(serviceNetworkVlans, { 'networkId': l3Network.nodeId});
\r
932 if (networkObj !== undefined && networkObj.vlans !== undefined) {
\r
933 l3Network["vlans"] = networkObj.vlans;
\r
935 $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network);
\r
938 if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) {
\r
939 var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF];
\r
942 "name": genericVnfObject[FIELD.ID.VNF_NAME],
\r
943 "id": $scope.counter++,
\r
944 "itemType": COMPONENT.VNF,
\r
945 "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE],
\r
946 "nodeId": genericVnfObject[FIELD.ID.VNF_ID],
\r
947 "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
948 "modelVersionId" : genericVnfObject[FIELD.ID.MODEL_VERSION_ID],
\r
949 "object": genericVnfObject,
\r
951 "volumeGroups": [],
\r
952 "instanceGroups": [],
\r
953 "availableVolumeGroups": [],
\r
957 var vnfNetworkObj = _.find(vnfNetworksAndVlans, { 'vnfId': genericVnf.nodeId});
\r
958 if (vnfNetworkObj !== undefined && vnfNetworkObj.networks !== undefined) {
\r
959 genericVnf["networks"] = vnfNetworkObj.networks;
\r
962 $scope.service.instance[FIELD.ID.VNFS].push(genericVnf);
\r
963 getRelatedInstanceGroupsByVnfId(genericVnf);
\r
967 // look for volume-groups
\r
968 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
969 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) {
\r
971 if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) {
\r
972 var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP];
\r
973 var volumeGroup = {
\r
974 "id": $scope.counter++,
\r
975 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],
\r
976 "itemType": FIELD.ID.VOLUME_GROUP,
\r
977 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],
\r
978 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],
\r
979 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
980 "object": volumeGroupObject,
\r
983 genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);
\r
984 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup);
\r
988 // now we've loaded up the availableVolumeGroups, we can use it
\r
989 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
990 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) {
\r
992 if (vfmodules[FIELD.ID.VF_MODULE] != null) {
\r
993 var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE];
\r
995 "id": $scope.counter++,
\r
996 "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME],
\r
997 "itemType": FIELD.ID.VF_MODULE,
\r
998 "nodeType": FIELD.ID.VF_MODULE,
\r
999 "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1000 "volumeGroups": [],
\r
1001 "object": vfModuleObject,
\r
1004 genericVnf[FIELD.ID.VF_MODULES].push(vfModule);
\r
1005 if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
1006 angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (networks, key) {
\r
1007 if (networks[FIELD.ID.L3_NETWORK] != null) {
\r
1008 var l3NetworkObject = networks[FIELD.ID.L3_NETWORK];
\r
1010 "id": $scope.counter++,
\r
1011 "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],
\r
1012 "itemType": FIELD.ID.L3_NETWORK,
\r
1013 "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],
\r
1014 "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],
\r
1015 "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1016 "object": l3NetworkObject,
\r
1019 vfModule[FIELD.ID.NETWORKS].push(l3Network);
\r
1021 if (networks[FIELD.ID.VOLUME_GROUP] != null) {
\r
1022 var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP];
\r
1024 var volumeGroup = {
\r
1025 "id": $scope.counter++,
\r
1026 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],
\r
1027 "itemType": FIELD.ID.VOLUME_GROUP,
\r
1028 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],
\r
1029 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],
\r
1030 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1031 "object": volumeGroupObject,
\r
1034 var tmpVolGroup = [];
\r
1036 angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function (avgroup, key) {
\r
1037 if (avgroup.name != volumeGroup.name) {
\r
1038 tmpVolGroup.push(avgroup);
\r
1042 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup;
\r
1044 vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);
\r
1055 if (subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION] != null) {
\r
1056 var configObject = subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION];
\r
1058 "id": $scope.counter++,
\r
1059 "name": configObject[FIELD.ID.CONFIGURATION_NAME],
\r
1060 "itemType": FIELD.ID.CONFIGURATION,
\r
1061 "nodeId": configObject[FIELD.ID.CONFIGURATION_ID],
\r
1062 "nodeType": configObject[FIELD.ID.CONFIGURATION_TYPE],
\r
1063 "nodeStatus": configObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1064 "modelInvariantId": configObject[FIELD.ID.MODEL_INVAR_ID],
\r
1065 "modelVersionId": configObject[FIELD.ID.MODEL_VERSION_ID],
\r
1066 "modelCustomizationId": configObject[FIELD.ID.MODEL_CUSTOMIZATION_ID],
\r
1067 "object": configObject,
\r
1069 "configData" : null
\r
1071 if( !$scope.hasFabricConfigurations ) {
\r
1072 portMirroringConfigurationIds.push(configObject[FIELD.ID.CONFIGURATION_ID]);
\r
1073 $scope.service.instance[FIELD.ID.CONFIGURATIONS].push(config);
\r
1075 if (config.nodeStatus.toLowerCase() !== FIELD.STATUS.ASSIGNED.toLowerCase()) {
\r
1076 $scope.allConfigurationsAssigned = false;
\r
1077 if ($scope.isActivateFabricConfiguration()) {
\r
1078 $scope.errorMsg = "Activate fabric configuration button is not available as some of the configuration objects are not in Assigned status. Check MSO logs for the reasons for this abnormal case.";
\r
1086 AaiService.getPortMirroringData(portMirroringConfigurationIds).then(function(result){
\r
1087 angular.forEach($scope.service.instance[FIELD.ID.CONFIGURATIONS], function(config){
\r
1088 config['configData'] = result.data[config['nodeId']];
\r
1090 if (config.configData && config.configData.errorDescription) {
\r
1091 $scope.errorMsg = ($scope.errorMsg ? $scope.errorMsg + "\n" : "") +
\r
1092 "Cannot read cloud-region for configuration \"" + config.name + "\": " +
\r
1093 config.configData.errorDescription;
\r
1098 AaiService.getPortMirroringSourcePorts(portMirroringConfigurationIds).then(function(result){
\r
1099 angular.forEach($scope.service.instance[FIELD.ID.CONFIGURATIONS], function(config){
\r
1100 angular.forEach(result.data[config['nodeId']], function(port){
\r
1101 if (port.errorDescription) {
\r
1102 $scope.errorMsg = ($scope.errorMsg ? $scope.errorMsg + "\n" : "") +
\r
1103 "Cannot read a source port for configuration \"" + config.name + "\": " +
\r
1104 port.errorDescription;
\r
1106 config.ports.push({
\r
1107 "portId": port[FIELD.ID.PORT_ID],
\r
1108 "portName": port[FIELD.ID.PORT_NAME],
\r
1109 "portStatus": port[FIELD.ID.PORT_MIRRORED] === true ? FIELD.STATUS.AAI_ENABLED : FIELD.STATUS.AAI_DISABLED
\r
1119 var aaiNetworkIds = _.map(serviceNetworkVlans, 'networkId');
\r
1120 var serviceInstanceNetworkIds = _.map($scope.service.instance[FIELD.ID.NETWORKS], 'nodeId');
\r
1121 var isContains = aaiNetworkIds.every(function(val) { return serviceInstanceNetworkIds.indexOf(val) >= 0; });
\r
1122 if (aaiNetworkIds.length && !isContains) {
\r
1123 $log.error("vlansByNetworks contain network that not found in service instance", aaiNetworkIds, serviceInstanceNetworkIds);
\r
1129 $scope.handleInitialResponseInventoryItems = function (response) {
\r
1131 $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json
\r
1132 $log.debug($scope.inventoryResponseItemList);
\r
1134 $scope.displayData = [];
\r
1137 $scope.counter = 100;
\r
1139 $scope.subscriberName = "";
\r
1141 $scope.allConfigurationsAssigned = true;
\r
1142 // just look up the subscriber name in A&AI here...
\r
1143 AaiService.getSubscriberName($scope.globalCustomerId, function (response) {
\r
1144 $scope.subscriberName = response.subscriberName;
\r
1145 DataService.setSubscriberName($scope.subscriberName);
\r
1146 $scope.serviceOrchestrationStatus = returnMatchingServiceSubscription(response.serviceSubscriptions[FIELD.ID.SERVICE_SUBSCRIPTION], $scope.serviceInstanceId);
\r
1147 if ($scope.serviceOrchestrationStatus.toLowerCase() !== FIELD.STATUS.ASSIGNED.toLowerCase()) {
\r
1148 $scope.allConfigurationsAssigned = false;
\r
1150 angular.forEach($scope.inventoryResponseItemList, function (inventoryResponseItem, key) {
\r
1152 $scope.inventoryResponseItem = inventoryResponseItem;
\r
1154 $scope.service.instance = {
\r
1155 "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME],
\r
1156 "serviceInstanceId": $scope.serviceInstanceId,
\r
1157 "serviceType": $scope.serviceType,
\r
1158 "globalCustomerId": $scope.globalCustomerId,
\r
1159 "subscriberName": $scope.subscriberName,
\r
1160 "id": $scope.serviceInstanceId,
\r
1163 "type": PARAMETER.STRING,
\r
1164 "description": FIELD.PROMPT.VAR_DESCRIPTION_A,
\r
1165 "default": FIELD.PROMPT.DEFAULT_A
\r
1168 "type": PARAMETER.STRING,
\r
1169 "description": FIELD.PROMPT.VAR_DESCRIPTION_B,
\r
1170 "default": FIELD.PROMPT.DEFAULT_B
\r
1173 "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE],
\r
1176 "configurations": []
\r
1179 var portMirroringConfigurationIds = [];
\r
1180 if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
1182 angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subInventoryResponseItem, key) {
\r
1183 // i expect to find vnfs now
\r
1185 if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) {
\r
1186 var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK];
\r
1188 "id": $scope.counter++,
\r
1189 "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],
\r
1190 "itemType": FIELD.ID.L3_NETWORK,
\r
1191 "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],
\r
1192 "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],
\r
1193 "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1194 "object": l3NetworkObject,
\r
1199 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
1200 //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]=");
\r
1201 //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 ));
\r
1202 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (subSubInventoryResponseItem, key) {
\r
1203 //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 ));
\r
1206 if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) {
\r
1207 subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET];
\r
1209 "subnet-id": subnetObject[FIELD.ID.SUBNET_ID],
\r
1210 "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME],
\r
1211 "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS],
\r
1212 "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS],
\r
1213 "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK]
\r
1215 l3Network.subnets.push(subnet);
\r
1221 var networkObj = _.find(serviceNetworkVlans, { 'networkId': l3Network.nodeId});
\r
1222 if (networkObj !== undefined && networkObj.vlans !== undefined) {
\r
1223 l3Network["vlans"] = networkObj.vlans;
\r
1225 $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network);
\r
1228 if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) {
\r
1229 var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF];
\r
1231 var genericVnf = {
\r
1232 "name": genericVnfObject[FIELD.ID.VNF_NAME],
\r
1233 "id": $scope.counter++,
\r
1234 "itemType": COMPONENT.VNF,
\r
1235 "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE],
\r
1236 "nodeId": genericVnfObject[FIELD.ID.VNF_ID],
\r
1237 "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1238 "modelVersionId" : genericVnfObject[FIELD.ID.MODEL_VERSION_ID],
\r
1239 "object": genericVnfObject,
\r
1241 "volumeGroups": [],
\r
1242 "instanceGroups": [],
\r
1243 "availableVolumeGroups": [],
\r
1247 var vnfNetworkObj = _.find(vnfNetworksAndVlans, { 'vnfId': genericVnf.nodeId});
\r
1248 if (vnfNetworkObj !== undefined && vnfNetworkObj.networks !== undefined) {
\r
1249 genericVnf["networks"] = vnfNetworkObj.networks;
\r
1252 $scope.service.instance[FIELD.ID.VNFS].push(genericVnf);
\r
1253 getRelatedInstanceGroupsByVnfId(genericVnf);
\r
1257 // look for volume-groups
\r
1258 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
1259 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) {
\r
1261 if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) {
\r
1262 var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP];
\r
1263 var volumeGroup = {
\r
1264 "id": $scope.counter++,
\r
1265 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],
\r
1266 "itemType": FIELD.ID.VOLUME_GROUP,
\r
1267 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],
\r
1268 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],
\r
1269 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1270 "object": volumeGroupObject,
\r
1273 genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);
\r
1274 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup);
\r
1278 // now we've loaded up the availableVolumeGroups, we can use it
\r
1279 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
1280 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (vfmodules, key) {
\r
1282 if (vfmodules[FIELD.ID.VF_MODULE] != null) {
\r
1283 var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE];
\r
1285 "id": $scope.counter++,
\r
1286 "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME],
\r
1287 "itemType": FIELD.ID.VF_MODULE,
\r
1288 "nodeType": FIELD.ID.VF_MODULE,
\r
1289 "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1290 "volumeGroups": [],
\r
1291 "object": vfModuleObject,
\r
1294 genericVnf[FIELD.ID.VF_MODULES].push(vfModule);
\r
1295 if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
1296 angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function (networks, key) {
\r
1297 if (networks[FIELD.ID.L3_NETWORK] != null) {
\r
1298 var l3NetworkObject = networks[FIELD.ID.L3_NETWORK];
\r
1300 "id": $scope.counter++,
\r
1301 "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],
\r
1302 "itemType": FIELD.ID.L3_NETWORK,
\r
1303 "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],
\r
1304 "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],
\r
1305 "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1306 "object": l3NetworkObject,
\r
1309 vfModule[FIELD.ID.NETWORKS].push(l3Network);
\r
1311 if (networks[FIELD.ID.VOLUME_GROUP] != null) {
\r
1312 var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP];
\r
1314 var volumeGroup = {
\r
1315 "id": $scope.counter++,
\r
1316 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],
\r
1317 "itemType": FIELD.ID.VOLUME_GROUP,
\r
1318 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],
\r
1319 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],
\r
1320 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1321 "object": volumeGroupObject,
\r
1324 var tmpVolGroup = [];
\r
1326 angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function (avgroup, key) {
\r
1327 if (avgroup.name != volumeGroup.name) {
\r
1328 tmpVolGroup.push(avgroup);
\r
1332 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup;
\r
1334 vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);
\r
1345 if (subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION] != null) {
\r
1346 var configObject = subInventoryResponseItem[FIELD.ID.GENERIC_CONFIGURATION];
\r
1348 "id": $scope.counter++,
\r
1349 "name": configObject[FIELD.ID.CONFIGURATION_NAME],
\r
1350 "itemType": FIELD.ID.CONFIGURATION,
\r
1351 "nodeId": configObject[FIELD.ID.CONFIGURATION_ID],
\r
1352 "nodeType": configObject[FIELD.ID.CONFIGURATION_TYPE],
\r
1353 "nodeStatus": configObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
1354 "modelInvariantId": configObject[FIELD.ID.MODEL_INVAR_ID],
\r
1355 "modelVersionId": configObject[FIELD.ID.MODEL_VERSION_ID],
\r
1356 "modelCustomizationId": configObject[FIELD.ID.MODEL_CUSTOMIZATION_ID],
\r
1357 "object": configObject,
\r
1359 "configData" : null
\r
1361 if( !$scope.hasFabricConfigurations ) {
\r
1362 portMirroringConfigurationIds.push(configObject[FIELD.ID.CONFIGURATION_ID]);
\r
1363 $scope.service.instance[FIELD.ID.CONFIGURATIONS].push(config);
\r
1365 if (config.nodeStatus.toLowerCase() !== FIELD.STATUS.ASSIGNED.toLowerCase()) {
\r
1366 $scope.allConfigurationsAssigned = false;
\r
1367 if ($scope.isActivateFabricConfiguration()) {
\r
1368 $scope.errorMsg = "Activate fabric configuration button is not available as some of the configuration objects are not in Assigned status. Check MSO logs for the reasons for this abnormal case.";
\r
1376 AaiService.getPortMirroringData(portMirroringConfigurationIds).then(function(result){
\r
1377 angular.forEach($scope.service.instance[FIELD.ID.CONFIGURATIONS], function(config){
\r
1378 config['configData'] = result.data[config['nodeId']];
\r
1380 if (config.configData && config.configData.errorDescription) {
\r
1381 $scope.errorMsg = ($scope.errorMsg ? $scope.errorMsg + "\n" : "") +
\r
1382 "Cannot read cloud-region for configuration \"" + config.name + "\": " +
\r
1383 config.configData.errorDescription;
\r
1388 AaiService.getPortMirroringSourcePorts(portMirroringConfigurationIds).then(function(result){
\r
1389 angular.forEach($scope.service.instance[FIELD.ID.CONFIGURATIONS], function(config){
\r
1390 angular.forEach(result.data[config['nodeId']], function(port){
\r
1391 if (port.errorDescription) {
\r
1392 $scope.errorMsg = ($scope.errorMsg ? $scope.errorMsg + "\n" : "") +
\r
1393 "Cannot read a source port for configuration \"" + config.name + "\": " +
\r
1394 port.errorDescription;
\r
1396 config.ports.push({
\r
1397 "portId": port[FIELD.ID.PORT_ID],
\r
1398 "portName": port[FIELD.ID.PORT_NAME],
\r
1399 "portStatus": port[FIELD.ID.PORT_MIRRORED] === true ? FIELD.STATUS.AAI_ENABLED : FIELD.STATUS.AAI_DISABLED
\r
1409 var aaiNetworkIds = _.map(serviceNetworkVlans, 'networkId');
\r
1410 var serviceInstanceNetworkIds = _.map($scope.service.instance[FIELD.ID.NETWORKS], 'nodeId');
\r
1411 var isContains = aaiNetworkIds.every(function(val) { return serviceInstanceNetworkIds.indexOf(val) >= 0; });
\r
1412 if (aaiNetworkIds.length && !isContains) {
\r
1413 $log.error("vlansByNetworks contain network that not found in service instance", aaiNetworkIds, serviceInstanceNetworkIds);
\r
1422 $scope.handleInitialResponse = function (response) {
\r
1424 $scope.enableCloseButton(true);
\r
1425 $scope.updateLog(response);
\r
1426 if (response.data.status < 200 || response.data.status > 202) {
\r
1427 $scope.showError(FIELD.ERROR.MSO);
\r
1428 $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status;
\r
1433 $scope.setProgress(100); // done
\r
1434 $scope.status = FIELD.STATUS.DONE;
\r
1435 $scope.isSpinnerVisible = false;
\r
1437 $scope.customer = response.data.customer; // get data from json
\r
1439 $scope.customerList = [];
\r
1441 angular.forEach($scope.customer, function (subVal, subKey) {
\r
1443 "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID],
\r
1444 "subscriberName": subVal[FIELD.ID.SUBNAME],
\r
1445 "isPermitted": subVal[FIELD.ID.IS_PERMITTED]
\r
1448 $scope.customerList.push(cust);
\r
1452 $scope.showContentError(error);
\r
1456 $scope.autoGetSubs = function () {
\r
1458 * Optionally comment in / out one of these method calls (or add a similar
\r
1459 * entry) to auto-invoke an entry when the test screen is redrawn.
\r
1465 $scope.updateLog = function (response) {
\r
1466 // $scope.log = UtilityService.getCurrentTime() + " HTTP Status: " +
\r
1467 // UtilityService.getHttpStatusText(response.data.status) + "\n" +
\r
1468 // angular.toJson(response.data.entity, true) + "\n\n" + $scope.log;
\r
1469 // UtilityService.checkUndefined("entity", response.data.entity);
\r
1470 // UtilityService.checkUndefined("status", response.data.status);
\r
1473 $scope.handleServerError = function (response, status) {
\r
1474 $scope.enableCloseButton(true);
\r
1475 var message = UtilityService.getHttpErrorMessage(response);
\r
1476 if (message != "") {
\r
1477 message = " (" + message + ")";
\r
1479 $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message);
\r
1482 $scope.showContentError = function (message) {
\r
1483 // $log.debug(message);
\r
1484 console.log(message);
\r
1485 if (UtilityService.hasContents(message)) {
\r
1486 $scope.showError("System failure (" + message + ")");
\r
1488 $scope.showError(FIELD.ERROR.SYSTEM_ERROR);
\r
1492 $scope.showError = function (message) {
\r
1493 $scope.isSpinnerVisible = false;
\r
1494 $scope.isProgressVisible = false;
\r
1495 $scope.error = message;
\r
1496 $scope.status = FIELD.STATUS.ERROR;
\r
1499 $scope.close = function () {
\r
1500 if ($scope.timer != undefined) {
\r
1501 $timeout.cancel($scope.timer);
\r
1503 $scope.isPopupVisible = false;
\r
1508 * Consider converting the progress bar mechanism, the disabled button handling
\r
1509 * and the following methods to generic Angular directive(s) and/or approach.
\r
1512 $scope.enableCloseButton = function (isEnabled) {
\r
1513 var selector = FIELD.STYLE.MSO_CTRL_BTN;
\r
1515 $scope.isCloseEnabled = isEnabled;
\r
1518 $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY);
\r
1520 $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED);
\r
1524 $scope.resetProgress = function () {
\r
1525 $scope.percentProgress = 0;
\r
1526 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO;
\r
1529 $scope.setProgress = function (percentProgress) {
\r
1530 percentProgress = parseInt(percentProgress);
\r
1531 if (percentProgress >= 100) {
\r
1532 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS;
\r
1535 if (percentProgress < $scope.percentProgress) {
\r
1539 $scope.percentProgress = percentProgress;
\r
1540 $scope.progressWidth = {width: percentProgress + "%"};
\r
1541 if (percentProgress >= 5) {
\r
1542 $scope.progressText = percentProgress + " %";
\r
1544 // Hidden since color combination is barely visible when progress portion is narrow.
\r
1545 $scope.progressText = "";
\r
1549 $scope.reloadRoute = function () {
\r
1553 $scope.prevPage = function () {
\r
1554 $scope.currentPage--;
\r
1557 var getAicZoneAndSendToMso = function (msoType, requestParams) {
\r
1558 AaiService.getAicZoneForPNF(
\r
1559 $scope.service.instance.globalCustomerId,
\r
1560 $scope.service.instance.serviceType,
\r
1561 $scope.service.instance.serviceInstanceId, function (aicZone) {
\r
1563 requestParams.aicZone = aicZone;
\r
1565 openMsoModal(msoType, requestParams);
\r
1569 var activateDeactivateServiceInstance = function (msoType) {
\r
1570 var requestParams = {
\r
1571 model: $scope.service.model,
\r
1572 instance: $scope.service.instance
\r
1575 if (DataService.getLoggedInUserId()) {
\r
1576 requestParams.userId = DataService.getLoggedInUserId();
\r
1577 getAicZoneAndSendToMso(msoType, requestParams)
\r
1579 AaiService.getLoggedInUserID(function (response) {
\r
1580 var userID = response.data;
\r
1581 DataService.setLoggedInUserId(userID);
\r
1582 requestParams.userId = userID;
\r
1584 getAicZoneAndSendToMso(msoType, requestParams);
\r
1590 var activateFabricConfigurationInstance = function (msoType) {
\r
1591 var requestParams = {
\r
1592 model: $scope.service.model,
\r
1593 service: $scope.service,
\r
1594 serviceInstanceId: $scope.serviceInstanceId
\r
1597 if (DataService.getLoggedInUserId()) {
\r
1598 requestParams.userId = DataService.getLoggedInUserId();
\r
1599 openMsoModal(COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_REQ, requestParams);
\r
1601 AaiService.getLoggedInUserID(function (response) {
\r
1602 var userID = response.data;
\r
1603 DataService.setLoggedInUserId(userID);
\r
1604 requestParams.userId = userID;
\r
1605 openMsoModal(COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_REQ, requestParams);
\r
1610 $scope.showAssignmentsSDNC = function () {
\r
1612 if ($scope.service && $scope.service.instance) {
\r
1613 return VIDCONFIGURATION.SDNC_SHOW_ASSIGNMENTS_URL.replace("<SERVICE_INSTANCE_ID>" , $scope.service.instance.id);
\r
1618 $scope.activateFabricConfigurationMSO = function () {
\r
1619 activateFabricConfigurationInstance(COMPONENT.MSO_ACTIVATE_FABRIC_CONFIGURATION_REQ);
\r
1622 $scope.activateMSOInstance = function () {
\r
1624 activateDeactivateServiceInstance(COMPONENT.MSO_ACTIVATE_SERVICE_REQ);
\r
1627 $scope.deactivateMSOInstance = function () {
\r
1629 activateDeactivateServiceInstance(COMPONENT.MSO_DEACTIVATE_SERVICE_REQ);
\r
1633 $scope.deleteConfiguration = function (serviceObject, configuration) {
\r
1634 AaiService.getLoggedInUserID(function (response) {
\r
1635 DataService.setLoggedInUserId(response.data);
\r
1636 var requestParams = {
\r
1638 "modelType": "configuration",
\r
1639 "modelInvariantId": serviceObject.model.service.invariantUuid,
\r
1640 "modelVersionId": serviceObject.model.service.uuid,
\r
1641 "modelName": serviceObject.model.service.name,
\r
1642 "modelVersion": serviceObject.model.service.version
\r
1644 configurationModel: {
\r
1645 "modelType": "configuration",
\r
1646 "modelInvariantId": configuration.modelInvariantId,
\r
1647 "modelVersionId": configuration.modelVersionId,
\r
1648 "modelCustomizationId": configuration.modelCustomizationId
\r
1650 serviceInstanceId: serviceObject.instance.serviceInstanceId,
\r
1651 configurationId: configuration.nodeId,
\r
1652 configStatus: configuration.DELETE,
\r
1653 userId: DataService.getLoggedInUserId()
\r
1656 openMsoModal(COMPONENT.MSO_DELETE_CONFIGURATION_REQ, requestParams, configuration);
\r
1661 $scope.toggleConfigurationStatus = function (serviceObject, configuration) {
\r
1662 AaiService.getLoggedInUserID(function (response) {
\r
1663 DataService.setLoggedInUserId(response.data);
\r
1664 var requestParams = {
\r
1666 "modelType": "service",
\r
1667 "modelInvariantId": serviceObject.model.service.invariantUuid,
\r
1668 "modelVersionId": serviceObject.model.service.uuid,
\r
1669 "modelName": serviceObject.model.service.name,
\r
1670 "modelVersion": serviceObject.model.service.version
\r
1672 configurationModel: {
\r
1673 "modelType": "configuration",
\r
1674 "modelInvariantId": configuration.modelInvariantId,
\r
1675 "modelVersionId": configuration.modelVersionId,
\r
1676 "modelCustomizationId": configuration.modelCustomizationId
\r
1678 serviceInstanceId: serviceObject.instance.serviceInstanceId,
\r
1679 configurationId: configuration.nodeId,
\r
1680 configStatus: configuration.nodeStatus,
\r
1681 userId: DataService.getLoggedInUserId()
\r
1684 openMsoModal(COMPONENT.MSO_CHANGE_CONFIG_STATUS_REQ, requestParams, configuration);
\r
1689 $scope.togglePortStatus = function (serviceObject, configuration, port) {
\r
1690 AaiService.getLoggedInUserID(function (response) {
\r
1691 DataService.setLoggedInUserId(response.data);
\r
1693 var requestParams = {
\r
1694 serviceInstanceId: serviceObject.instance.serviceInstanceId,
\r
1695 configurationId: configuration.nodeId,
\r
1696 portId: port.portId,
\r
1697 portStatus: port.portStatus,
\r
1699 "modelType": "service",
\r
1700 "modelInvariantId": serviceObject.model.service.invariantUuid,
\r
1701 "modelVersionId": serviceObject.model.service.uuid,
\r
1702 "modelName": serviceObject.model.service.name,
\r
1703 "modelVersion": serviceObject.model.service.version
\r
1705 configurationModel: {
\r
1706 "modelType": "configuration",
\r
1707 "modelInvariantId": configuration.modelInvariantId,
\r
1708 "modelVersionId": configuration.modelVersionId,
\r
1709 "modelCustomizationId": configuration.modelCustomizationId
\r
1711 userId: DataService.getLoggedInUserId()
\r
1714 openMsoModal(COMPONENT.MSO_CHANGE_PORT_STATUS_REQ, requestParams, configuration);
\r
1718 $scope.dissociatePnf = function (pnfName) {
\r
1721 status: "confirm",
\r
1722 message: "Are you sure you would like to dissociate " + pnfName + " from the service instance?"
\r
1725 var modalInstance = $uibModal.open({
\r
1726 templateUrl: 'app/vid/scripts/modals/alert-modal/alert-modal.html',
\r
1727 controller: 'alertModalController',
\r
1728 controllerAs: 'vm',
\r
1729 appendTo: angular.element("#pnfs-tree"),
\r
1731 jobInfo: function () {
\r
1737 modalInstance.result.then(function (result) {
\r
1738 console.log("This is the result of the alert modal.", result);
\r
1741 var requestParams = {
\r
1743 serviceModelInfo: {
\r
1744 invariantUuid: $scope.service.model.service.invariantUuid,
\r
1745 uuid: $scope.service.model.service.uuid,
\r
1746 version: $scope.service.model.service.version,
\r
1747 name: $scope.service.model.service.name
\r
1749 serviceInstanceId: $scope.service.instance.serviceInstanceId
\r
1752 if (DataService.getLoggedInUserId()) {
\r
1753 requestParams.userId = DataService.getLoggedInUserId();
\r
1754 requestParams.attuuid = DataService.getLoggedInUserId();
\r
1755 openMsoModal(COMPONENT.MSO_REMOVE_RELATIONSHIP, requestParams);
\r
1757 AaiService.getLoggedInUserID(function (response) {
\r
1758 DataService.setLoggedInUserId(response.data);
\r
1760 requestParams.userId = response.data;
\r
1761 requestParams.attuuid = response.data;
\r
1762 openMsoModal(COMPONENT.MSO_REMOVE_RELATIONSHIP, requestParams);
\r
1771 var openMsoModal = function (msoType, requestParams, configuration) {
\r
1772 var modalInstance = $uibModal.open({
\r
1773 templateUrl: 'app/vid/scripts/modals/mso-commit/mso-commit.html',
\r
1774 controller: "msoCommitModalController",
\r
1777 msoType: function () {
\r
1780 requestParams: function () {
\r
1781 requestParams.callbackFunction = updateViewCallbackFunction;
\r
1782 return requestParams;
\r
1784 configuration: function () {
\r
1785 return configuration;
\r
1791 var updateViewCallbackFunction = function (response) {
\r
1792 $scope.callbackResults = "";
\r
1793 var color = FIELD.ID.COLOR_NONE;
\r
1794 $scope.callbackStyle = {
\r
1795 "background-color": color
\r
1799 * This 1/2 delay was only added to visually highlight the status
\r
1800 * change. Probably not needed in the real application code.
\r
1802 $timeout(function () {
\r
1803 $scope.callbackResults = UtilityService.getCurrentTime()
\r
1804 + FIELD.STATUS.IS_SUCCESSFUL + response.isSuccessful;
\r
1805 if (response.isSuccessful) {
\r
1806 color = FIELD.ID.COLOR_8F8;
\r
1807 $scope.reloadRoute();
\r
1809 color = FIELD.ID.COLOR_F88;
\r
1811 $scope.callbackStyle = {
\r
1812 "background-color": color
\r
1817 $scope.nextPage = function () {
\r
1818 $scope.currentPage++;
\r
1821 $scope.serviceInstanceses = [{"sinstance": FIELD.NAME.SERVICE_INSTANCE_Id}, {"sinstance": FIELD.NAME.SERVICE_INSTANCE_NAME}];
\r
1823 function navigateToSearchResultsPage(globalCustomerId, selectedServiceInstance, selectedProjects, selectedOwningEntities, selectedInstanceIdentifierType) {
\r
1824 var projectQuery = AaiService.getMultipleValueParamQueryString(_.map(selectedProjects, 'id'), COMPONENT.PROJECT_SUB_PATH);
\r
1825 var owningEntityQuery = AaiService.getMultipleValueParamQueryString(_.map(selectedOwningEntities, 'id'), COMPONENT.OWNING_ENTITY_SUB_PATH);
\r
1826 var globalCustomerIdQuery = globalCustomerId ? COMPONENT.SELECTED_SUBSCRIBER_SUB_PATH + globalCustomerId : null;
\r
1827 var serviceInstanceQuery = selectedServiceInstance ? COMPONENT.SELECTED_SERVICE_INSTANCE_SUB_PATH + selectedServiceInstance : null;
\r
1828 var serviceInstanceTypeQuery = selectedInstanceIdentifierType ? COMPONENT.SELECTED_SERVICE_INSTANCE_TYPE_SUB_PATH + selectedInstanceIdentifierType : null;
\r
1829 var query = AaiService.getJoinedQueryString([projectQuery, owningEntityQuery, globalCustomerIdQuery, serviceInstanceQuery, serviceInstanceTypeQuery]);
\r
1831 window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + query;
\r
1834 $scope.getServiceInstancesSearchResults =
\r
1835 function (selectedCustomer, selectedInstanceIdentifierType, selectedServiceInstance, selectedProject, selectedOwningEntity) {
\r
1836 var isSelectionValid = UtilityService.hasContents(selectedCustomer) || UtilityService.hasContents(selectedProject)
\r
1837 || UtilityService.hasContents(selectedOwningEntity) || UtilityService.hasContents(selectedServiceInstance);
\r
1839 if (isSelectionValid) {
\r
1840 if (UtilityService.hasContents(selectedServiceInstance)) {
\r
1842 .getGlobalCustomerIdByInstanceIdentifier(selectedServiceInstance, selectedInstanceIdentifierType)
\r
1843 .then(handleCustomerIdResponse);
\r
1845 navigateToSearchResultsPage(selectedCustomer, null, selectedProject, selectedOwningEntity, selectedInstanceIdentifierType);
\r
1848 alert(FIELD.ERROR.SELECT);
\r
1851 function handleCustomerIdResponse(globalCustomerId) {
\r
1852 if (UtilityService.hasContents(globalCustomerId)) {
\r
1853 navigateToSearchResultsPage(globalCustomerId, selectedServiceInstance, selectedProject, selectedOwningEntity, selectedInstanceIdentifierType);
\r
1855 alert(FIELD.ERROR.SERVICE_INST_DNE);
\r
1860 ]).directive('restrictInput', function () {
\r
1865 require: 'ngModel',
\r
1866 link: function ($scope, element, attr, ctrl) {
\r
1867 ctrl.$parsers.unshift(function (viewValue) {
\r
1869 var types = $scope.$eval(attr.restrictInput);
\r
1870 if (!types.regex && types.type) {
\r
1872 switch (types.type) {
\r
1873 case 'Service Instance Name' :
\r
1874 types.regex = '^[a-zA-Z0-9-_]*$';
\r
1880 var reg = new RegExp(types.regex);
\r
1881 if (reg.test(viewValue)) {
\r
1884 var overrideValue = (reg.test(viewValue) ? viewValue : '');
\r
1885 element.val(overrideValue);
\r
1886 return overrideValue;
\r
1893 appDS2.controller('TreeCtrl', ['$scope', function ($scope) {
\r
1894 $scope.remove = function (scope) {
\r
1898 $scope.toggle = function (scope) {
\r
1902 $scope.moveLastToTheBeginning = function () {
\r
1903 var a = $scope.data.pop();
\r
1904 $scope.data.splice(0, 0, a);
\r
1907 $scope.newSubItem = function (scope) {
\r
1908 var nodeData = scope.$modelValue;
\r
1909 nodeData.nodes.push({
\r
1910 id: nodeData.id * 10 + nodeData.nodes.length,
\r
1911 title: nodeData.title + '.' + (nodeData.nodes.length + 1),
\r
1916 $scope.collapseAll = function () {
\r
1917 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL);
\r
1920 $scope.expandAll = function () {
\r
1921 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL);
\r