2 * ============LICENSE_START=======================================================
\r
4 * ================================================================================
\r
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
\r
6 * ================================================================================
\r
7 * Licensed under the Apache License, Version 2.0 (the "License");
\r
8 * you may not use this file except in compliance with the License.
\r
9 * You may obtain a copy of the License at
\r
11 * http://www.apache.org/licenses/LICENSE-2.0
\r
13 * Unless required by applicable law or agreed to in writing, software
\r
14 * distributed under the License is distributed on an "AS IS" BASIS,
\r
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
\r
16 * See the License for the specific language governing permissions and
\r
17 * limitations under the License.
\r
18 * ============LICENSE_END=========================================================
\r
23 appDS2.controller("aaiSubscriberController", [ "COMPONENT", "FIELD", "PARAMETER", "DataService", "PropertyService", "$scope", "$http", "$timeout", "$location", "$log", "$route", "VIDCONFIGURATION", "UtilityService", "vidService","AaiService",
\r
24 function(COMPONENT, FIELD, PARAMETER, DataService, PropertyService, $scope, $http, $timeout, $location, $log, $route, VIDCONFIGURATION, UtilityService, vidService, AaiService) {
\r
26 $scope.showVnfDetails = function(vnf) {
\r
27 console.log("showVnfDetails");
\r
28 DataService.setVnfInstanceId(COMPONENT.VNF_INSTANCE_ID);
\r
30 .setInventoryItem(aaiResult[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM][0]);
\r
32 $scope.$broadcast(COMPONENT.SHOW_COMPONENT_DETAILS, {
\r
33 componentId : COMPONENT.VNF,
\r
34 callbackFunction : callbackFunction
\r
37 $scope.popup = new Object();
\r
40 $scope.isPopupVisible = false;
\r
41 $scope.defaultBaseUrl = "";
\r
42 $scope.responseTimeoutMsec = 60000;
\r
44 $scope.serviceTypes=[ FIELD.PROMPT.SELECT_SERVICE, COMPONENT.UCPE_VMS, COMPONENT.SDN_L3_BONDING, COMPONENT.SDN_ETHERNET_INTERNET];
\r
45 $scope.defaultSubscriberName=[ FIELD.PROMPT.SELECT_SUB ];
\r
47 var callbackFunction = function(response) {
\r
51 $scope.getSubs = function() {
\r
53 $scope.fetchSubs(FIELD.PROMPT.FETCHING_SUBS);
\r
54 $scope.fetchServices();
\r
58 $scope.cancelCreateSI = function(){
\r
60 window.location.href = COMPONENT.WELCOME_PATH;
\r
64 $scope.getServiceTypes = function(globalCustomerId){
\r
65 DataService.setGlobalCustomerId(globalCustomerId);
\r
66 DataService.setServiceIdList($scope.customerList)
\r
68 if (globalCustomerId !== "" && globalCustomerId !== undefined ) {
\r
69 window.location.href = COMPONENT.SERVICE_TYPE_LIST_PATH + $scope.serviceTypeList;
\r
73 $scope.refreshServiceTypes = function(globalCustomerId){
\r
74 DataService.setGlobalCustomerId(globalCustomerId);
\r
76 $scope.getServiceTypesList();
\r
80 $scope.createSubscriberName="";
\r
81 $scope.serviceTypeList={};
\r
82 $scope.custSubList=[];
\r
83 $scope.getServiceTypesList = function(){
\r
84 var notFound = true;
\r
85 var globalCustomerId = DataService.getGlobalCustomerId();
\r
86 $scope.custSubList = DataService.getServiceIdList();
\r
87 if(globalCustomerId !== "" && globalCustomerId !== undefined ){
\r
88 $scope.subId=globalCustomerId;
\r
90 $scope.status = FIELD.PROMPT.FETCHING_SERVICE_TYPES;
\r
91 DataService.setGlobalCustomerId(globalCustomerId);
\r
93 AaiService.getSubscriptionServiceTypeList(DataService
\r
94 .getGlobalCustomerId(), function(response) {
\r
96 $scope.setProgress(100); // done
\r
97 $scope.status = FIELD.STATUS.DONE;
\r
98 $scope.isSpinnerVisible = false;
\r
99 $scope.serviceTypeList = response;
\r
100 for(var i=0; i<$scope.custSubList.length;i++){
\r
101 if(globalCustomerId === $scope.custSubList[i].globalCustomerId){
\r
102 $scope.createSubscriberName = $scope.custSubList[i].subscriberName;
\r
105 }, function(response) { // failure
\r
106 $scope.showError(FIELD.ERROR.AAI);
\r
107 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_TYPES + response.status;
\r
108 $scope.errorDetails = response.data;
\r
111 alert(FIELD.ERROR.SELECT);
\r
116 $scope.subList = [];
\r
117 $scope.getAaiServiceModels = function(selectedServicetype,subName){
\r
118 DataService.setGlobalCustomerId(selectedServicetype);
\r
119 DataService.setServiceIdList($scope.serviceTypeList)
\r
120 DataService.setSubscriberName(subName);
\r
122 DataService.setSubscribers($scope.custSubList);
\r
124 if (selectedServicetype !== "" && selectedServicetype !== 'undefined') {
\r
125 $location.path(COMPONENT.CREATE_INSTANCE_PATH);
\r
129 $scope.serviceTypeName="";
\r
130 $scope.getAaiServiceModelsList = function(){
\r
131 var globalCustomerId="";
\r
132 var serviceTypeId = DataService.getGlobalCustomerId();
\r
133 $scope.serviceTypeList = DataService.getServiceIdList();
\r
134 $scope.createSubscriberName = DataService.getSubscriberName();
\r
135 $scope.status = FIELD.STATUS.FETCHING_SERVICE_CATALOG;
\r
136 $scope.custSubList = DataService.getSubscribers();
\r
137 for(var i=0; i<$scope.serviceTypeList.length;i++){
\r
138 if(parseInt(serviceTypeId) === i ){
\r
139 $scope.serviceTypeName = $scope.serviceTypeList[i];
\r
142 for(var i=0; i<$scope.custSubList.length;i++){
\r
143 if($scope.createSubscriberName === $scope.custSubList[i].subscriberName){
\r
144 globalCustomerId = $scope.custSubList[i].globalCustomerId;
\r
145 globalCustId = globalCustomerId;
\r
151 if(null !== globalCustomerId && "" !== globalCustomerId && undefined !== globalCustomerId
\r
152 && null !== serviceTypeId && "" !== serviceTypeId && undefined !== serviceTypeId){
\r
153 pathQuery = COMPONENT.SERVICES_PATH +globalCustomerId+"/"+$scope.serviceTypeName;
\r
156 var namedQueryId='6e806bc2-8f9b-4534-bb68-be91267ff6c8';
\r
157 AaiService.getServiceModelsByServiceType(namedQueryId,globalCustomerId,$scope.serviceTypeName,function(response) { // success
\r
158 $scope.services = [];
\r
159 if (angular.isArray(response.data['inventory-response-item'])) {
\r
160 $scope.services = response.data['inventory-response-item'][0]['inventory-response-items']['inventory-response-item'];
\r
161 $scope.serviceType = response.data['inventory-response-item'][0]['service-subscription']['service-type'];
\r
162 $scope.viewPerPage=10;
\r
163 $scope.totalPage=$scope.services.length/$scope.viewPerPage;
\r
164 $scope.sortBy="name";
\r
165 $scope.scrollViewPerPage=2;
\r
166 $scope.currentPage=1;
\r
167 $scope.searchCategory;
\r
168 $scope.searchString="";
\r
169 $scope.currentPageNum=1;
\r
170 $scope.isSpinnerVisible = false;
\r
171 $scope.isProgressVisible = false;
\r
173 $scope.status = "Failed to get service models from ASDC.";
\r
174 $scope.error = true;
\r
175 $scope.isSpinnerVisible = false;
\r
177 DataService.setServiceIdList(response);
\r
178 }, function(response) { // failure
\r
179 $scope.showError(FIELD.ERROR.AAI);
\r
180 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES+ response.status;
\r
181 $scope.errorDetails = response.data;
\r
186 var globalCustId;// This value will be assigned only on create new service instance screen-macro
\r
187 $scope.createType = "a la carte";
\r
188 $scope.deployService = function(service,hideServiceFields) {
\r
189 hideServiceFields = hideServiceFields|| false;
\r
190 var temp = service;
\r
191 service.uuid = service['service-instance']['model-version-id'];
\r
193 console.log("Instantiating ASDC service " + service.uuid);
\r
195 $http.get('rest/models/services/' + service.uuid)
\r
196 .then(function successCallback(getServiceResponse) {
\r
197 getServiceResponse.data['service'].serviceTypeName =$scope.serviceTypeName ;
\r
198 getServiceResponse.data['service'].createSubscriberName =$scope.createSubscriberName ;
\r
199 var serviceModel = getServiceResponse.data;
\r
200 DataService.setServiceName(serviceModel.service.name);
\r
202 DataService.setModelInfo(COMPONENT.SERVICE, {
\r
203 "modelInvariantId": serviceModel.service.invariantUuid,
\r
204 "modelVersion": serviceModel.service.version,
\r
205 "modelNameVersionId": serviceModel.service.uuid,
\r
206 "modelName": serviceModel.service.name,
\r
207 "description": serviceModel.service.description,
\r
208 "category":serviceModel.service.category,
\r
209 "serviceTypeName":serviceModel.service.serviceTypeName,
\r
210 "createSubscriberName":serviceModel.service.createSubscriberName
\r
212 DataService.setHideServiceFields(hideServiceFields);
\r
213 if(hideServiceFields){
\r
214 DataService.setServiceType($scope.serviceTypeName);
\r
215 DataService.setGlobalCustomerId(globalCustId);
\r
218 DataService.setALaCarte (true);
\r
219 $scope.createType = "a la carte";
\r
220 var broadcastType = "createComponent";
\r
222 if (UtilityService.arrayContains (VIDCONFIGURATION.MACRO_SERVICES, serviceModel.service.invariantUuid )) {
\r
223 DataService.setALaCarte (false);
\r
224 $scope.createType = "Macro";
\r
225 var convertedAsdcModel = UtilityService.convertModel(serviceModel);
\r
227 //console.log ("display inputs ");
\r
228 //console.log (JSON.stringify ( convertedAsdcModel.completeDisplayInputs));
\r
230 DataService.setModelInfo(COMPONENT.SERVICE, {
\r
231 "modelInvariantId": serviceModel.service.invariantUuid,
\r
232 "modelVersion": serviceModel.service.version,
\r
233 "modelNameVersionId": serviceModel.service.uuid,
\r
234 "modelName": serviceModel.service.name,
\r
235 "description": serviceModel.service.description,
\r
236 "category":serviceModel.service.category,
\r
237 "serviceEcompNaming": serviceModel.service.serviceEcompNaming,
\r
238 "inputs": serviceModel.service.inputs,
\r
239 "displayInputs": convertedAsdcModel.completeDisplayInputs,
\r
240 "serviceTypeName":serviceModel.service.serviceTypeName,
\r
241 "createSubscriberName":serviceModel.service.createSubscriberName
\r
245 $scope.$broadcast(broadcastType, {
\r
246 componentId : COMPONENT.SERVICE,
\r
247 callbackFunction : function(response) {
\r
248 if (response.isSuccessful) {
\r
249 vidService.setModel(serviceModel);
\r
251 var subscriberId = "Not Found";
\r
252 var serviceType = "Not Found";
\r
254 var serviceInstanceId = response.instanceId;
\r
256 for (var i = 0; i < response.control.length; i++) {
\r
257 if (response.control[i].id == "subscriberName") {
\r
258 subscriberId = response.control[i].value;
\r
259 } else if (response.control[i].id == "serviceType") {
\r
260 serviceType = response.control[i].value;
\r
265 $scope.refreshSubs(subscriberId,serviceType,serviceInstanceId);
\r
271 }, function errorCallback(response) {
\r
272 console.log("Error: " + response);
\r
276 $scope.cancelCreateSIType = function(){
\r
278 window.location.href = COMPONENT.SERVICE_MODLES_INSTANCES_SUBSCRIBERS_PATH;
\r
282 $scope.fetchServices = function() {
\r
283 var serviceIdList = [];
\r
285 AaiService.getServices2(function(response) { // success
\r
286 DataService.setServiceIdList(response);
\r
287 }, function(response) { // failure
\r
288 $scope.showError(FIELD.ERROR.AAI);
\r
289 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICES + response.status;
\r
290 $scope.errorDetails = response.data;
\r
294 $scope.refreshSubs = function() {
\r
296 $scope.fetchSubs(FIELD.PROMPT.REFRESH_SUB_LIST);
\r
297 $scope.fetchServices();
\r
300 $scope.fetchSubs = function(status) {
\r
301 $scope.status = status;
\r
303 AaiService.getSubList(function(response) { // sucesss
\r
304 $scope.setProgress(100); // done
\r
305 $scope.status = FIELD.STATUS.DONE;
\r
306 $scope.isSpinnerVisible = false;
\r
307 $scope.customerList = response;
\r
308 }, function(response) { // failure
\r
309 $scope.showError(FIELD.ERROR.AAI);
\r
310 $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;
\r
311 $scope.errorDetails = response.data;
\r
316 $scope.getSubDetails = function(request) {
\r
319 $scope.selectedSubscriber = $location.search().selectedSubscriber;
\r
320 $scope.selectedServiceInstance = $location.search().selectedServiceInstance;
\r
321 $scope.status = FIELD.STATUS.FETCHING_SUB_DETAILS + $scope.selectedSubscriber;
\r
323 $scope.displayData = [];
\r
324 AaiService.getSubDetails($scope.selectedSubscriber, $scope.selectedServiceInstance, function(displayData, subscriberName) {
\r
325 $scope.displayData = displayData;
\r
326 $scope.viewPerPage=10;
\r
327 $scope.totalPage=$scope.displayData.length/$scope.viewPerPage;
\r
328 $scope.scrollViewPerPage=2;
\r
329 $scope.currentPage=1;
\r
330 $scope.searchCategory;
\r
331 $scope.searchString="";
\r
332 $scope.currentPageNum=1;
\r
333 $scope.defaultSort=COMPONENT.SUBSCRIBER_NAME;
\r
334 $scope.setProgress(100); // done
\r
335 $scope.status = FIELD.STATUS.DONE;
\r
336 $scope.isSpinnerVisible = false;
\r
337 $scope.subscriberName = subscriberName;
\r
338 }, function(response) {
\r
339 $scope.showError(FIELD.ERROR.AAI);
\r
340 $scope.errorMsg = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.status;
\r
341 $scope.errorDetails = response.data;
\r
346 $scope.$on(COMPONENT.MSO_DELETE_REQ, function(event, request) {
\r
347 // $log.debug("deleteInstance: request:");
\r
348 // $log.debug(request);
\r
351 $http.post($scope.baseUrl + request.url, {
\r
352 requestDetails: request.requestDetails
\r
354 timeout: $scope.responseTimeoutMsec
\r
355 }).then($scope.handleInitialResponse)
\r
356 ["catch"]($scope.handleServerError);
\r
359 $scope.init = function() {
\r
361 //PropertyService.setAaiBaseUrl("testaai");
\r
362 //PropertyService.setAsdcBaseUrl("testasdc");
\r
364 // takes a default value, retrieves the prop value from the file system and sets it
\r
365 var msecs = PropertyService.retrieveMsoMaxPollingIntervalMsec();
\r
366 PropertyService.setMsoMaxPollingIntervalMsec(msecs);
\r
368 // takes a default value, retrieves the prop value from the file system and sets it
\r
369 var polls = PropertyService.retrieveMsoMaxPolls();
\r
370 PropertyService.setMsoMaxPolls(polls);
\r
372 //PropertyService.setMsoBaseUrl("testmso");
\r
373 PropertyService.setServerResponseTimeoutMsec();
\r
376 * Common parameters that would typically be set when the page is
\r
377 * displayed for a specific service instance id.
\r
380 $scope.baseUrl = $scope.defaultBaseUrl;
\r
382 $scope.isSpinnerVisible = true;
\r
383 $scope.isProgressVisible = true;
\r
384 $scope.isPopupVisible = true;
\r
385 $scope.requestId = "";
\r
387 $scope.pollAttempts = 0;
\r
389 $scope.enableCloseButton(false);
\r
390 $scope.resetProgress();
\r
391 $scope.setProgress(2); // Show "a little" progress
\r
394 $scope.getComponentList = function(event, request) {
\r
396 $scope.isSpinnerVisible = true;
\r
397 $scope.isProgressVisible = true;
\r
398 $scope.isPopupVisible = true;
\r
399 $scope.requestId = "";
\r
401 $scope.pollAttempts = 0;
\r
404 $scope.resetProgress();
\r
405 $scope.setProgress(2); // Show "a little" progress
\r
407 $scope.globalCustomerId = $location.search().subscriberId;
\r
408 $scope.serviceType = $location.search().serviceType;
\r
409 $scope.serviceInstanceId = $location.search().serviceInstanceId;
\r
410 $scope.subscriberName = $location.search().subscriberName;
\r
412 //$scope.getAsdcModel($location.search().modelUuid);
\r
414 $scope.namedQueryId = VIDCONFIGURATION.COMPONENT_LIST_NAMED_QUERY_ID;
\r
415 $scope.status = FIELD.STATUS.FETCHING_SERVICE_INST_DATA + $scope.serviceInstanceId;
\r
417 AaiService.runNamedQuery($scope.namedQueryId, $scope.globalCustomerId, $scope.serviceType, $scope.serviceInstanceId,
\r
418 function(response) { //success
\r
419 $scope.handleInitialResponseInventoryItems(response);
\r
420 $scope.setProgress(100); // done
\r
421 $scope.status = FIELD.STATUS.DONE;
\r
422 $scope.isSpinnerVisible = false;
\r
424 function(response){ //failure
\r
425 $scope.showError(FIELD.ERROR.AAI);
\r
426 $scope.errorMsg = FIELD.ERROR.FETCHING_SERVICE_INSTANCE_DATA + response.status;
\r
427 $scope.errorDetails = response.data;
\r
433 $scope.handleServerError = function(response, status) {
\r
434 alert(response.statusText);
\r
437 $scope.getAsdcModel = function(disData) {
\r
439 console.log ("disData"); console.log (JSON.stringify (disData, null, 4));
\r
441 if ( !(UtilityService.hasContents (disData.aaiModelVersionId)) ) {
\r
442 $scope.errorMsg = FIELD.ERROR.MODEL_VERSION_ID_MISSING;
\r
443 alert($scope.errorMsg);
\r
447 // aaiModelVersionId is the model uuid
\r
448 var pathQuery = COMPONENT.SERVICES_PATH + disData.aaiModelVersionId;
\r
452 }).then(function successCallback(response) {
\r
453 vidService.setModel(response.data);
\r
454 window.location.href = COMPONENT.INSTANTIATE_ROOT_PATH + disData.globalCustomerId + COMPONENT.SUBSCRIBERNAME_SUB_PATH + disData.subscriberName + COMPONENT.SERVICETYPE_SUB_PATH + disData.serviceType + COMPONENT.SERVICEINSTANCEID_SUB_PATH + disData.serviceInstanceId;
\r
455 console.log("aaiSubscriber getAsdcModel DONE!!!!");
\r
456 }, function errorCallback(response) {
\r
457 console.log("aaiSubscriber getAsdcModel - No matching model found matching the A&AI model version ID = " + disData.aaiModelVersionId);
\r
458 $scope.errorMsg = FIELD.ERROR.NO_MATCHING_MODEL_AAI + disData.aaiModelVersionId;
\r
459 alert($scope.errorMsg);
\r
464 $scope.getTenants = function(globalCustomerId) {
\r
465 $http.get(FIELD.ID.AAI_GET_TENTANTS + globalCustomerId)
\r
466 .then(function successCallback(response) {
\r
467 return response.data;
\r
468 //$location.path("/instantiate");
\r
469 }, function errorCallback(response) {
\r
474 $scope.handleInitialResponseInventoryItems = function(response) {
\r
476 $scope.inventoryResponseItemList = response.data[FIELD.ID.INVENTORY_RESPONSE_ITEM]; // get data from json
\r
477 console.log($scope.inventoryResponseItemList.toString());
\r
479 $scope.displayData = [];
\r
482 $scope.counter = 100;
\r
484 $scope.subscriberName = "";
\r
485 // just look up the subscriber name in A&AI here...
\r
486 AaiService.getSubscriberName($scope.globalCustomerId, function(response) {
\r
487 $scope.subscriberName = response;
\r
488 DataService.setSubscriberName($scope.subscriberName);
\r
490 angular.forEach($scope.inventoryResponseItemList, function(inventoryResponseItem, key) {
\r
492 $scope.inventoryResponseItem = inventoryResponseItem;
\r
494 $scope.service.instance = {
\r
495 "name": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE][FIELD.ID.SERVICE_INSTANCE_NAME],
\r
496 "serviceInstanceId": $scope.serviceInstanceId,
\r
497 "serviceType": $scope.serviceType,
\r
498 "globalCustomerId": $scope.globalCustomerId,
\r
499 "subscriberName": $scope.subscriberName,
\r
500 "id": $scope.serviceInstanceId,
\r
503 "type": PARAMETER.STRING,
\r
504 "description": FIELD.PROMPT.VAR_DESCRIPTION_A,
\r
505 "default": FIELD.PROMPT.DEFAULT_A
\r
508 "type": PARAMETER.STRING,
\r
509 "description": FIELD.PROMPT.VAR_DESCRIPTION_B,
\r
510 "default": FIELD.PROMPT.DEFAULT_B
\r
513 "object": $scope.inventoryResponseItem[FIELD.ID.SERVICE_INSTANCE],
\r
518 if (inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
520 angular.forEach(inventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subInventoryResponseItem, key) {
\r
521 // i expect to find vnfs now
\r
523 if (subInventoryResponseItem[FIELD.ID.L3_NETWORK] != null) {
\r
524 var l3NetworkObject = subInventoryResponseItem[FIELD.ID.L3_NETWORK];
\r
525 var l3Network = { "id": $scope.counter++,
\r
526 "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],
\r
527 "itemType": FIELD.ID.L3_NETWORK,
\r
528 "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],
\r
529 "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],
\r
530 "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
531 "object": l3NetworkObject,
\r
535 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
536 //console.log ("subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS]=");
\r
537 //console.log (JSON.stringify (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS], null, 4 ));
\r
538 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(subSubInventoryResponseItem, key) {
\r
539 //console.log (JSON.stringify (subSubInventoryResponseItem, null, 4 ));
\r
542 if (subSubInventoryResponseItem[FIELD.ID.SUB_NET] != null) {
\r
543 subnetObject = subSubInventoryResponseItem[FIELD.ID.SUB_NET];
\r
545 "subnet-id": subnetObject[FIELD.ID.SUBNET_ID],
\r
546 "subnet-name": subnetObject[FIELD.ID.SUBNET_NAME],
\r
547 "gateway-address": subnetObject[FIELD.ID.GATEWAY_ADDRESS],
\r
548 "network-start-address": subnetObject[FIELD.ID.NETWORK_START_ADDRESS],
\r
549 "cidr-mask": subnetObject[FIELD.ID.CIDR_MASK]
\r
551 l3Network.subnets.push(subnet);
\r
555 $scope.service.instance[FIELD.ID.NETWORKS].push(l3Network);
\r
558 if (subInventoryResponseItem[FIELD.ID.GENERIC_VNF] != null) {
\r
559 var genericVnfObject = subInventoryResponseItem[FIELD.ID.GENERIC_VNF];
\r
562 "name": genericVnfObject[FIELD.ID.VNF_NAME],
\r
563 "id": $scope.counter++,
\r
564 "itemType": COMPONENT.VNF,
\r
565 "nodeType": genericVnfObject[FIELD.ID.VNF_TYPE],
\r
566 "nodeId": genericVnfObject[FIELD.ID.VNF_ID],
\r
567 "nodeStatus": genericVnfObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
568 "object": genericVnfObject,
\r
570 "volumeGroups": [],
\r
571 "availableVolumeGroups": []
\r
573 $scope.service.instance[FIELD.ID.VNFS].push(genericVnf);
\r
575 // look for volume-groups
\r
576 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
577 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) {
\r
579 if (vfmodules[FIELD.ID.VOLUME_GROUP] != null) {
\r
580 var volumeGroupObject = vfmodules[FIELD.ID.VOLUME_GROUP];
\r
581 var volumeGroup = { "id": $scope.counter++,
\r
582 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],
\r
583 "itemType": FIELD.ID.VOLUME_GROUP,
\r
584 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],
\r
585 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],
\r
586 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
587 "object": volumeGroupObject,
\r
590 genericVnf[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);
\r
591 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS].push(volumeGroup);
\r
595 // now we've loaded up the availableVolumeGroups, we can use it
\r
596 if (subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
597 angular.forEach(subInventoryResponseItem[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(vfmodules, key) {
\r
599 if (vfmodules[FIELD.ID.VF_MODULE] != null) {
\r
600 var vfModuleObject = vfmodules[FIELD.ID.VF_MODULE];
\r
601 var vfModule = { "id": $scope.counter++,
\r
602 "name": vfModuleObject[FIELD.ID.VF_MODULE_NAME],
\r
603 "itemType": FIELD.ID.VF_MODULE,
\r
604 "nodeType": FIELD.ID.VF_MODULE,
\r
605 "nodeStatus": vfModuleObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
606 "volumeGroups": [],
\r
607 "object": vfModuleObject,
\r
610 genericVnf[FIELD.ID.VF_MODULES].push(vfModule);
\r
611 if (vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS] != null) {
\r
612 angular.forEach(vfmodules[FIELD.ID.INVENTORY_RESPONSE_ITEMS][FIELD.ID.INVENTORY_RESPONSE_ITEM], function(networks, key) {
\r
613 if (networks[FIELD.ID.L3_NETWORK] != null) {
\r
614 var l3NetworkObject = networks[FIELD.ID.L3_NETWORK];
\r
615 var l3Network = { "id": $scope.counter++,
\r
616 "name": l3NetworkObject[FIELD.ID.NETWORK_NAME],
\r
617 "itemType": FIELD.ID.L3_NETWORK,
\r
618 "nodeId": l3NetworkObject[FIELD.ID.NETWORK_ID],
\r
619 "nodeType": l3NetworkObject[FIELD.ID.NETWORK_TYPE],
\r
620 "nodeStatus": l3NetworkObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
621 "object": l3NetworkObject,
\r
624 vfModule[FIELD.ID.NETWORKS].push(l3Network);
\r
626 if (networks[FIELD.ID.VOLUME_GROUP] != null) {
\r
627 var volumeGroupObject = networks[FIELD.ID.VOLUME_GROUP];
\r
629 var volumeGroup = { "id": $scope.counter++,
\r
630 "name": volumeGroupObject[FIELD.ID.VOLUME_GROUP_NAME],
\r
631 "itemType": FIELD.ID.VOLUME_GROUP,
\r
632 "nodeId": volumeGroupObject[FIELD.ID.VOLUME_GROUP_ID],
\r
633 "nodeType": volumeGroupObject[FIELD.ID.VNF_TYPE],
\r
634 "nodeStatus": volumeGroupObject[FIELD.ID.ORCHESTRATION_STATUS],
\r
635 "object": volumeGroupObject,
\r
638 var tmpVolGroup = [];
\r
640 angular.forEach(genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS], function(avgroup, key) {
\r
641 if (avgroup.name != volumeGroup.name) {
\r
642 tmpVolGroup.push(avgroup);
\r
646 genericVnf[FIELD.ID.AVAILABLEVOLUMEGROUPS] = tmpVolGroup;
\r
648 vfModule[FIELD.ID.VOLUMEGROUPS].push(volumeGroup);
\r
663 $scope.handleInitialResponse = function(response) {
\r
665 $scope.enableCloseButton(true);
\r
666 $scope.updateLog(response);
\r
667 if (response.data.status < 200 || response.data.status > 202) {
\r
668 $scope.showError(FIELD.ERROR.MSO);
\r
669 $scope.status = FIELD.ERROR.AAI_FETCHING_CUST_DATA + response.data.status;
\r
674 $scope.setProgress(100); // done
\r
675 $scope.status = FIELD.STATUS.DONE;
\r
676 $scope.isSpinnerVisible = false;
\r
678 $scope.customer = response.data.customer; // get data from json
\r
680 $scope.customerList = [];
\r
682 angular.forEach($scope.customer, function(subVal, subKey) {
\r
683 var cust = { "globalCustomerId": subVal[FIELD.ID.GLOBAL_CUSTOMER_ID], "subscriberName": subVal[FIELD.ID.SUBNAME] };
\r
684 $scope.customerList.push(cust);
\r
688 $scope.showContentError(error);
\r
692 $scope.autoGetSubs = function() {
\r
694 * Optionally comment in / out one of these method calls (or add a similar
\r
695 * entry) to auto-invoke an entry when the test screen is redrawn.
\r
701 $scope.updateLog = function(response) {
\r
702 // $scope.log = UtilityService.getCurrentTime() + " HTTP Status: " +
\r
703 // UtilityService.getHttpStatusText(response.data.status) + "\n" +
\r
704 // angular.toJson(response.data.entity, true) + "\n\n" + $scope.log;
\r
705 // UtilityService.checkUndefined("entity", response.data.entity);
\r
706 // UtilityService.checkUndefined("status", response.data.status);
\r
709 $scope.handleServerError = function(response, status) {
\r
710 $scope.enableCloseButton(true);
\r
711 var message = UtilityService.getHttpErrorMessage(response);
\r
712 if (message != ""){
\r
713 message = " (" + message + ")";
\r
715 $scope.showError(FIELD.ERROR.SYSTEM_ERROR + message);
\r
718 $scope.showContentError = function(message) {
\r
719 // $log.debug(message);
\r
720 console.log(message);
\r
721 if (UtilityService.hasContents(message)) {
\r
722 $scope.showError("System failure (" + message + ")");
\r
724 $scope.showError(FIELD.ERROR.SYSTEM_ERROR);
\r
728 $scope.showError = function(message) {
\r
729 $scope.isSpinnerVisible = false;
\r
730 $scope.isProgressVisible = false;
\r
731 $scope.error = message;
\r
732 $scope.status = FIELD.STATUS.ERROR;
\r
735 $scope.close = function() {
\r
736 if ($scope.timer != undefined) {
\r
737 $timeout.cancel($scope.timer);
\r
739 $scope.isPopupVisible = false;
\r
745 * Consider converting the progress bar mechanism, the disabled button handling
\r
746 * and the following methods to generic Angular directive(s) and/or approach.
\r
749 $scope.enableCloseButton = function(isEnabled) {
\r
750 var selector = FIELD.STYLE.MSO_CTRL_BTN;
\r
752 $scope.isCloseEnabled = isEnabled;
\r
755 $(selector).addClass(FIELD.STYLE.BTN_PRIMARY).removeClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.PRIMARY);
\r
757 $(selector).removeClass(FIELD.STYLE.BTN_PRIMARY).addClass(FIELD.STYLE.BTN_INACTIVE).attr(FIELD.STYLE.BTN_TYPE, FIELD.STYLE.DISABLED);
\r
761 $scope.resetProgress = function() {
\r
762 $scope.percentProgress = 0;
\r
763 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_INFO;
\r
766 $scope.setProgress = function(percentProgress) {
\r
767 percentProgress = parseInt(percentProgress);
\r
768 if (percentProgress >= 100) {
\r
769 $scope.progressClass = FIELD.STYLE.PROGRESS_BAR_SUCCESS;
\r
772 if (percentProgress < $scope.percentProgress) {
\r
776 $scope.percentProgress = percentProgress;
\r
777 $scope.progressWidth = {width: percentProgress + "%"};
\r
778 if (percentProgress >= 5) {
\r
779 $scope.progressText = percentProgress + " %";
\r
781 // Hidden since color combination is barely visible when progress portion is narrow.
\r
782 $scope.progressText = "";
\r
786 $scope.reloadRoute = function() {
\r
790 $scope.prevPage = function() {
\r
791 $scope.currentPage--;
\r
794 $scope.nextPage = function() {
\r
795 $scope.currentPage++;
\r
797 $scope.serviceInstanceses = [{"sinstance":FIELD.NAME.SERVICE_INSTANCE_Id},{"sinstance":FIELD.NAME.SERVICE_INSTANCE_NAME}]
\r
798 $scope.getSubscriberDet = function(selectedCustomer,selectedserviceinstancetype,selectedServiceInstance){
\r
800 var sintype =selectedserviceinstancetype;
\r
801 if (selectedServiceInstance != "" && selectedServiceInstance != undefined) {
\r
802 selectedServiceInstance.trim();
\r
805 $http.get(COMPONENT.AAI_GET_SERVICE_INSTANCE_PATH + selectedServiceInstance+"/"+sintype + "?r=" + Math.random(), {
\r
808 timeout: $scope.responseTimeoutMsec
\r
809 }).then(function(response) {
\r
810 var notFound = true;
\r
811 if (angular.isArray(response.data[FIELD.ID.RESULT_DATA])) {
\r
814 item = response.data[FIELD.ID.RESULT_DATA][0];
\r
815 var url = item[FIELD.ID.RESOURCE_LINK];
\r
816 var globalCustomerId = "";
\r
817 var serviceSubscription = "";
\r
818 // split it and find the customer Id and service-subscription
\r
819 urlParts = url.split("/");
\r
820 if (urlParts[7] === FIELD.ID.CUSTOMER) {
\r
821 globalCustomerId = urlParts[8];
\r
823 if (urlParts[10] === FIELD.ID.SERVICE_SUBSCRIPTION) {
\r
824 serviceSubscription = urlParts[11];
\r
827 if (globalCustomerId !== "") {
\r
829 window.location.href = COMPONENT.SELECTED_SERVICE_SUB_PATH + serviceSubscription + COMPONENT.SELECTEDSUBSCRIBER_SUB_PATH + globalCustomerId + COMPONENT.SELECTEDSERVICEINSTANCE_SUB_PATH + selectedServiceInstance;
\r
833 alert(FIELD.ERROR.SERVICE_INST_DNE);
\r
835 }); // add a failure callback...
\r
836 } else if (selectedCustomer != null) {
\r
837 window.location.href = COMPONENT.SELECTED_SUB_PATH + selectedCustomer;
\r
839 alert(FIELD.ERROR.SELECT);
\r
842 }]).directive('restrictInput', function(){
\r
847 require: 'ngModel',
\r
848 link: function($scope, element, attr, ctrl){
\r
849 ctrl.$parsers.unshift(function(viewValue){
\r
851 var types = $scope.$eval(attr.restrictInput);
\r
852 if(!types.regex && types.type){
\r
854 switch(types.type){
\r
855 case 'Service Instance Name' : types.regex = '^[a-zA-Z0-9-_]*$'; break;
\r
856 default: types.regex= '';
\r
859 var reg = new RegExp(types.regex);
\r
860 if(reg.test(viewValue)){
\r
863 var overrideValue = (reg.test(viewValue) ? viewValue : '');
\r
864 element.val(overrideValue);
\r
865 return overrideValue;
\r
872 appDS2.controller('TreeCtrl', ['$scope', function ($scope) {
\r
873 $scope.remove = function (scope) {
\r
877 $scope.toggle = function (scope) {
\r
881 $scope.moveLastToTheBeginning = function () {
\r
882 var a = $scope.data.pop();
\r
883 $scope.data.splice(0, 0, a);
\r
886 $scope.newSubItem = function (scope) {
\r
887 var nodeData = scope.$modelValue;
\r
888 nodeData.nodes.push({
\r
889 id: nodeData.id * 10 + nodeData.nodes.length,
\r
890 title: nodeData.title + '.' + (nodeData.nodes.length + 1),
\r
895 $scope.collapseAll = function () {
\r
896 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_COLLAPSEALL);
\r
899 $scope.expandAll = function () {
\r
900 $scope.$broadcast(FIELD.ID.ANGULAR_UI_TREE_EXPANDALL);
\r