Change management and PNF support
[vid.git] / vid-app-common / src / main / webapp / app / vid / scripts / view-models / instantiate.htm
1 <!--\r
2   ============LICENSE_START=======================================================\r
3   VID\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
10   \r
11        http://www.apache.org/licenses/LICENSE-2.0\r
12   \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
19   -->\r
20 \r
21 <div ng-controller="InstantiationController">\r
22 \r
23         <div popup-window class="popupContents" ngx-show="{{popup.isVisible}}"\r
24                  ng-cloak>\r
25                 <div ng-include="'app/vid/scripts/view-models/creationDialog.htm'"></div>\r
26                 <div ng-include="'app/vid/scripts/view-models/deletionDialog.htm'"></div>\r
27                 <div ng-include="'app/vid/scripts/view-models/detailsDialog.htm'"></div>\r
28                 <div ng-include="'app/vid/scripts/view-models/statusDialog.htm'"></div>\r
29         </div>\r
30         <div ng-controller="aaiSubscriberController" ng-init="getComponentList() ">\r
31                 <div class="statusLine" ng-class="{true:'aaiVisible', false:'aaiHidden'}[isSpinnerVisible]">\r
32                         <img src="app/vid/images/spinner.gif"></img>\r
33                         <label>Status:</label><span class="status">{{status}}</span>\r
34                 </div>\r
35 \r
36                 <div ng-if="errorMsg != null"><font color='red'>{{errorMsg}}<pre>{{errorDetails | json}}</pre></font></div>\r
37 \r
38                 <h1 class="heading1" style="margin-top: 20px;">{{isPermitted == "true" ? "View/Edit" : "View"}} Service Instance</h1>\r
39                 <a class="btn btn-primary btn-xs pull-right" ng-click="reloadRoute();" ><span class="glyphicon glyphicon-refresh"></span></a>\r
40 \r
41                 <br>\r
42 \r
43                 <center>\r
44                         <table att-table border="1" ng-model="service">\r
45                                 <tr>\r
46                                         <th style="text-align: center" width="33%">SUBSCRIBER:\r
47                                                 {{service.instance.subscriberName}}</th>\r
48                                         <th style="text-align: center" width="34%">SERVICE TYPE:\r
49                                                 {{service.instance.serviceType}}</th>\r
50                                         <th style="text-align: center" width="33%">SERVICE INSTANCE\r
51                                                 ID: {{service.instance.serviceInstanceId}}</th>\r
52                                 <tr>\r
53                                 <tr>\r
54                                         <td colspan='3' style="text-align: center">Service Instance\r
55                                                 Name: {{service.instance.name || "Not defined"}}\r
56                                         </td>\r
57                                 <tr>\r
58                         </table>\r
59 \r
60                 </center>\r
61 \r
62                 <div ui-tree data-drag-enabled="false" data-nodrop-enabled="true" style="margin: 30px">\r
63 \r
64                         <ol ui-tree-nodes="" ng-model="service"  >\r
65                                 <li ng-repeat="aService in [service]" ui-tree-node>\r
66                                         <div ui-tree-handle class="tree-node tree-node-content">\r
67                                                 <a class="btn btn-success btn-xs" ng-if="(aService.instance.vnfs && aService.instance.vnfs.length > 0) || (aService.instance.networks && aService.instance.networks.length > 0)" data-nodrag ng-click="this.toggle()">\r
68                                                         <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>\r
69                                                 </a>\r
70                                                 SERVICE INSTANCE: {{aService.instance.name}}\r
71                                                 <a ng-if="((isMacro()) ||  (isObjectEmpty(aService.instance.vnfs) && isObjectEmpty(aService.instance.networks))) && isPermitted" data-tests-id="deleteServiceButton" class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteService(aService.instance);">\r
72                                                         <span class="glyphicon glyphicon-remove"></span>\r
73                                                 </a>\r
74                                                 <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs && !isObjectEmpty(aService.convertedModel.vnfs) && !aService.convertedModel.isNewFlow && isPermitted">\r
75                                                         <button type="button" data-tests-id="addVNFButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
76                                                                 Add VNF<span class="caret"></span>\r
77                                                         </button>\r
78                                                         <ul class="dropdown-menu" ng-model="aService.convertedModel.vnfs">\r
79                                                                 <a role="menuitem" ng-repeat="(vnfUuid, vnf) in aService.convertedModel.vnfs" data-tests-id="addVNFOption-{{vnf.modelCustomizationName}}" ng-click="addVnfInstance(vnf, aService.instance.vnfs)">{{vnf.modelCustomizationName}}</a>\r
80 \r
81                                                         </ul>\r
82                                                 </div>\r
83                                                 <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs && !isObjectEmpty(aService.convertedModel.vnfs) && aService.convertedModel.isNewFlow && isPermitted">\r
84                                                         <button type="button" data-tests-id="addVNFButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
85                                                                 Add VNF<span class="caret"></span>\r
86                                                         </button>\r
87                                                         <ul class="dropdown-menu" ng-model="aService.convertedModel.vnfs" data-tests-id="addVnfsDropdown">\r
88                                                                 <li role="menuitem" ng-repeat="(vnfUuid, vnf) in aService.convertedModel.vnfs">\r
89                                                                         <a data-tests-id="addVNFOption-{{vnf.modelCustomizationName}}" ng-click="addVnfInstance(vnf, aService.instance.vnfs)">{{vnf.modelCustomizationName}} {{vnf.nfType}} {{vnf.nfRole}} {{vnf.nfFunction}} {{vnf.nfCode}}</a>\r
90                                                                 </li>\r
91                                                         </ul>\r
92                                                 </div>\r
93                                                 <!--  <div class="pull-right btn-group" ng-if="aService.model.networks && !equals(aService.model.networks, {})">-->\r
94                                                 <div class="pull-right btn-group" ng-if="aService.convertedModel.networks && (!(isObjectEmpty(aService.convertedModel.networks)))">\r
95                                                         <!--<div class="pull-right btn-group" ng-if="aService.model.networks">-->\r
96                                                         <button type="button" data-tests-id="addNetworkButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
97                                                                 Add Network<span class="caret"></span>\r
98                                                         </button>\r
99                                                         <ul class="dropdown-menu" ng-model="aService.convertedModel.networks">\r
100                                                                 <li ng-repeat="(networkUuid, network) in aService.convertedModel.networks">\r
101                                                                         <a ng-click="addNetworkInstance(network, aService.instance.vnfs)">{{network.modelCustomizationName}}</a>\r
102                                                                 </li>\r
103                                                         </ul>\r
104                                                 </div>\r
105                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeService(aService.instance)" style="margin-right: 8px;">\r
106                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
107                                                 </a>\r
108                                                 <a data-tests-id="activateButton" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="activateMSOInstance()" style="margin-right: 8px;">\r
109                                                         Activate\r
110                                                 </a>\r
111                                         </div>\r
112                                         <ol ui-tree-nodes="" ng-model="aService.instance.vnfs" ng-class="{hidden: collapsed}">\r
113                                                 <li ng-repeat="vnf in aService.instance.vnfs" ui-tree-node>\r
114                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
115                                                                 <a class="btn btn-success btn-xs" ng-if="(vnf.vfModules && vnf.vfModules.length > 0) || (vnf.volumeGroups && vnf.volumeGroups.length > 0)" data-nodrag ng-click="this.toggle()">\r
116                                                                         <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>\r
117                                                                 </a>\r
118                                                                 VNF: {{vnf.name}} | TYPE: {{vnf.nodeType}} | ORCH STATUS: {{vnf.nodeStatus}}\r
119 \r
120                                                                 <a ng-if="(vnf.vfModules.length == 0) && (vnf.volumeGroups.length == 0) && isPermitted" data-tests-id="deleteVNFButton" class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteVnf(aService.instance, vnf)">\r
121                                                                         <span class="glyphicon glyphicon-remove"></span>\r
122                                                                 </a>\r
123                                                                 <!--  <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs[vnf.object['model-invariant-id']][vnf.object['model-version-id']].vfModules">-->\r
124                                                                 <div class="pull-right btn-group" ng-if="(hasVfModules(vnf.object) && (aService.convertedModel.isNewFlow)) && isPermitted">\r
125 \r
126                                                                         <button type="button" data-tests-id="addVFModuleButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
127                                                                                 Add VF-Module<span class="caret"></span>\r
128                                                                         </button>\r
129                                                                         <ul class="dropdown-menu" ng-model="vfModule" >\r
130                                                                                 <a ng-repeat="(vfModuleCustomizationUuid, vfModule) in aService.convertedModel.vnfs[vnf.object['model-customization-id']].vfModules" data-tests-id="addVFModuleOption-{{vfModule.modelCustomizationName}}" ng-click="addVfModuleInstance(vnf, vfModule)">{{vfModule.modelCustomizationName}} </a>\r
131                                                                         </ul>\r
132                                                                 </div>\r
133 \r
134 \r
135                                                                 <div class="pull-right btn-group" ng-if="(hasVfModules(vnf.object) && (!(aService.convertedModel.isNewFlow))) && isPermitted">\r
136 \r
137                                                                         <button type="button" data-tests-id="addVFModuleButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
138                                                                                 Add VF-Module<span class="caret"></span>\r
139                                                                         </button>\r
140                                                                         <ul class="dropdown-menu" ng-model="vnf">\r
141                                                                                 <a ng-repeat="(vfModuleUuid, vfModule) in aService.convertedModel.vnfs[vnf.object['model-version-id']].vfModules" data-tests-id="addVFModuleOption-{{vfModule.modelCustomizationName}}" ng-click="addVfModuleInstance(vnf, vfModule)">{{vfModule.modelCustomizationName}}</a>\r
142                                                                                 </li>\r
143                                                                         </ul>\r
144 \r
145                                                                 </div>\r
146 \r
147                                                                 <div class="pull-right btn-group" ng-if="(hasVolumeGroups(vnf.object) && (aService.convertedModel.isNewFlow)) && isPermitted">\r
148                                                                         <button type="button" data-tests-id="addVolumeGroupButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
149                                                                                 Add Volume Group<span class="caret"></span>\r
150                                                                         </button>\r
151                                                                         <ul class="dropdown-menu" ng-model="volumeGroup" >\r
152                                                                                 <a ng-repeat="(volumeGroupCustomizationUuid, volumeGroup) in aService.convertedModel.vnfs[vnf.object['model-customization-id']].volumeGroups" data-tests-id="addVolumeGroupOption-{{volumeGroup.modelCustomizationName}}" ng-click="addVolumeGroupInstance(vnf, volumeGroup)">{{volumeGroup.modelCustomizationName}}</a>\r
153                                                                         </ul>\r
154                                                                 </div>\r
155 \r
156                                                                 <div class="pull-right btn-group" ng-if="(hasVolumeGroups(vnf.object) && (!(aService.convertedModel.isNewFlow))) && isPermitted">\r
157 \r
158                                                                         <button type="button" data-tests-id="addVolumeGroupButton" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
159                                                                                 Add Volume Group<span class="caret"></span>\r
160                                                                         </button>\r
161                                                                         <ul class="dropdown-menu" ng-model="vnf">\r
162                                                                                 <a ng-repeat="(volumeGroupUuid, volumeGroup) in aService.convertedModel.vnfs[vnf.object['model-version-id']].volumeGroups" data-tests-id="addVolumeGroupOption-{{volumeGroup.modelCustomizationName}}" ng-click="addVolumeGroupInstance(vnf, volumeGroup)">{{volumeGroup.modelCustomizationName}}</a>\r
163                                                                                 </li>\r
164                                                                         </ul>\r
165 \r
166                                                                 </div>\r
167 \r
168                                                                 <!-- VID-374/378 - switching-off feature <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="getStatusOfVnf(aService.instance, vnf)" style="margin-right: 8px;">\r
169                                     <span class="glyphicon glyphicon-exclamation-sign"></span>\r
170                                 </a>  -->\r
171                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVnf(aService.instance, vnf)" style="margin-right: 8px;">\r
172                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
173                                                                 </a>\r
174                                                         </div>\r
175                                                         <ol ui-tree-nodes="" ng-model="vnf.vfModules" ng-class="{hidden: collapsed}">\r
176                                                                 <li ng-repeat="vfModule in vnf.vfModules" ui-tree-node>\r
177                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
178                                                                                 <a class="btn btn-success btn-xs" ng-if="(vfModule.volumeGroups && vfModule.volumeGroups.length > 0)" data-nodrag ng-click="this.toggle()">\r
179                                                                                         <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>\r
180                                                                                 </a>\r
181                                                                                 VFMODULE: {{vfModule.name}} | TYPE: {{vfModule.nodeType}} | ORCH STATUS: {{vfModule.nodeStatus}}\r
182                                                                                 <!--  -->\r
183                                                                                 <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVFModuleButton" data-nodrag ng-click="deleteVfModule(aService.instance, vfModule, vnf)">\r
184                                                                                         <span class="glyphicon glyphicon-remove"></span>\r
185                                                                                 </a>\r
186                                                                                 <div class="pull-right btn-group">\r
187                                                                                         <!--   <button type="button" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
188                                                 Attach Volume Group<span class="caret"></span>\r
189                                               </button>\r
190                                               <ul class="dropdown-menu" ng-model="vnf.volumeGroups">\r
191                                                 <li ng-repeat="volumeGroup in vnf.availableVolumeGroups">\r
192                                                     <a ng-click="attachVolumeGroupInstance(vfModule, volumeGroup)">{{volumeGroup.name}}</a>\r
193                                                 </li>\r
194                                               </ul> -->\r
195                                                                                 </div>\r
196                                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVfModule(aService.instance, vfModule, vnf)" style="margin-right: 8px;">\r
197                                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
198                                                                                 </a>\r
199                                                                         </div>\r
200                                                                         <ol ui-tree-nodes="" ng-model="vfModule.volumeGroups" ng-class="{hidden: collapsed}">\r
201                                                                                 <li ng-repeat="volumeGroup in vfModule.volumeGroups" ui-tree-node>\r
202                                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
203                                                                                                 VOLUME GROUP: {{volumeGroup.name}} | TYPE: {{volumeGroup.nodeType}} | ORCH STATUS: {{volumeGroup.nodeStatus}}\r
204                                                                                                 <!-- <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteVolumeGroup(aService.instance, vnf, vfModule, volumeGroup)">\r
205                                                     <span class="glyphicon glyphicon-remove"></span>\r
206                                                 </a> -->\r
207                                                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVolumeGroup(aService.instance, vnf, volumeGroup)" style="margin-right: 8px;">\r
208                                                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
209                                                                                                 </a>\r
210                                                                                         </div>\r
211                                                                                 </li>\r
212                                                                         </ol>\r
213                                                                 </li>\r
214                                                         </ol>\r
215                                                         <ol ui-tree-nodes="" ng-model="vnf.availableVolumeGroups" ng-class="{hidden: collapsed}">\r
216                                                                 <li ng-repeat="volumeGroup in vnf.availableVolumeGroups" ui-tree-node>\r
217                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
218                                                                                 VOLUME GROUP: {{volumeGroup.name}} | TYPE: {{volumeGroup.nodeType}} | ORCH STATUS: {{volumeGroup.nodeStatus}}\r
219                                                                                 <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVNFVolumeGroupButton" data-nodrag ng-click="deleteVnfVolumeGroup(aService.instance, vnf, volumeGroup)">\r
220                                                                                         <span class="glyphicon glyphicon-remove"></span>\r
221                                                                                 </a>\r
222                                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVolumeGroup(aService.instance, vnf, volumeGroup)" style="margin-right: 8px;">\r
223                                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
224                                                                                 </a>\r
225                                                                         </div>\r
226                                                                 </li>\r
227                                                         </ol>\r
228                                                 </li>\r
229                                         </ol>\r
230                                         <ol ui-tree-nodes="" ng-model="aService.instance.networks" ng-class="{hidden: collapsed}">\r
231                                                 <li ng-repeat="network in aService.instance.networks" ui-tree-node>\r
232                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
233                                                                 NETWORK: {{network.name}} | TYPE: {{network.nodeType}} | ORCH   STATUS: {{network.nodeStatus}}\r
234 \r
235                                                                 <a class="pull-right btn btn-danger btn-xs" ng-if="!isMacro() && isPermitted" data-tests-id="deleteNetworkButton" data-nodrag ng-click="deleteNetwork(aService.instance, network)">\r
236                                                                         <span class="glyphicon glyphicon-remove"></span>\r
237                                                                 </a>\r
238                                                                 <!--  <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteNetwork(aService.instance, network)">\r
239                                    <span class="glyphicon glyphicon-remove"></span>\r
240                                </a>-->\r
241                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeNetwork(aService.instance, network)" style="margin-right: 8px;">\r
242                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
243                                                                 </a>\r
244                                                         </div>\r
245                                                 </li>\r
246                                         </ol>\r
247                                 </li>\r
248                         </ol>\r
249                 </div>\r
250         </div>\r
251 </div>\r