org.onap migration
[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/deleteResumeDialog.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 ? "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 data-tests-id="service-instanceId-th-id" 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.pnfs && aService.instance.pnfs.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}} | ORCH STATUS: {{serviceOrchestrationStatus}}\r
71                                                 <a ng-if="((isMacro()) ||  (isObjectEmpty(aService.instance.vnfs) && isObjectEmpty(aService.instance.networks) && isObjectEmpty(aService.instance.pnfs))) && 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||aService.convertedModel.vnfs) &&(!isObjectEmpty(aService.convertedModel.pnfs)||!isObjectEmpty(aService.convertedModel.pnfs))  && !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 node instance<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 node instance<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))) && isPermitted">\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 data-tests-id="addNetworkOption-{{network.modelCustomizationName}}" 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="deactivateButton" ng-disabled="!isActivateDeactivateEnabled('deactivate')" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="deactivateMSOInstance()" style="margin-right: 8px;">\r
109                                                         Deactivate\r
110                                                 </a>\r
111                                                 <a data-tests-id="activateButton" ng-disabled="!isActivateDeactivateEnabled('activate')" class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="activateMSOInstance()" style="margin-right: 8px;">\r
112                                                         Activate\r
113                                                 </a>\r
114                                         </div>\r
115                                         <ol ui-tree-nodes="" ng-model="aService.instance.vnfs" ng-class="{hidden: collapsed}">\r
116                                                 <li ng-repeat="vnf in aService.instance.vnfs" ui-tree-node>\r
117                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
118                                                                 <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
119                                                                         <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>\r
120                                                                 </a>\r
121                                                                 VNF: {{vnf.name}} | TYPE: {{vnf.nodeType}} | ORCH STATUS: {{vnf.nodeStatus}}\r
122 \r
123                                                                 <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
124                                                                         <span class="glyphicon glyphicon-remove"></span>\r
125                                                                 </a>\r
126                                                                 <!--  <div class="pull-right btn-group" ng-if="aService.convertedModel.vnfs[vnf.object['model-invariant-id']][vnf.object['model-version-id']].vfModules">-->\r
127                                                                 <div class="pull-right btn-group" ng-if="(hasVfModules(vnf.object) && (aService.convertedModel.isNewFlow)) && isPermitted">\r
128 \r
129                                                                         <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
130                                                                                 Add VF-Module<span class="caret"></span>\r
131                                                                         </button>\r
132                                                                         <ul class="dropdown-menu" ng-model="vfModule" >\r
133                                                                                 <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
134                                                                         </ul>\r
135                                                                 </div>\r
136 \r
137 \r
138                                                                 <div class="pull-right btn-group" ng-if="(hasVfModules(vnf.object) && (!(aService.convertedModel.isNewFlow))) && isPermitted">\r
139 \r
140                                                                         <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
141                                                                                 Add VF-Module<span class="caret"></span>\r
142                                                                         </button>\r
143                                                                         <ul class="dropdown-menu" ng-model="vnf">\r
144                                                                                 <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
145                                                                                 </li>\r
146                                                                         </ul>\r
147 \r
148                                                                 </div>\r
149 \r
150                                                                 <div class="pull-right btn-group" ng-if="(hasVolumeGroups(vnf.object) && (aService.convertedModel.isNewFlow)) && isPermitted">\r
151                                                                         <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
152                                                                                 Add Volume Group<span class="caret"></span>\r
153                                                                         </button>\r
154                                                                         <ul class="dropdown-menu" ng-model="volumeGroup" >\r
155                                                                                 <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
156                                                                         </ul>\r
157                                                                 </div>\r
158 \r
159                                                                 <div class="pull-right btn-group" ng-if="(hasVolumeGroups(vnf.object) && (!(aService.convertedModel.isNewFlow))) && isPermitted">\r
160 \r
161                                                                         <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
162                                                                                 Add Volume Group<span class="caret"></span>\r
163                                                                         </button>\r
164                                                                         <ul class="dropdown-menu" ng-model="vnf">\r
165                                                                                 <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
166                                                                                 </li>\r
167                                                                         </ul>\r
168 \r
169                                                                 </div>\r
170 \r
171                                                                 <!-- 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
172                                     <span class="glyphicon glyphicon-exclamation-sign"></span>\r
173                                 </a>  -->\r
174                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVnf(aService.instance, vnf)" style="margin-right: 8px;">\r
175                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
176                                                                 </a>\r
177                                                         </div>\r
178                                                         <ol ui-tree-nodes="" ng-model="vnf.vfModules" ng-class="{hidden: collapsed}">\r
179                                                                 <li ng-repeat="vfModule in vnf.vfModules" ui-tree-node>\r
180                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
181                                                                                 <a class="btn btn-success btn-xs" ng-if="(vfModule.volumeGroups && vfModule.volumeGroups.length > 0)" data-nodrag ng-click="this.toggle()">\r
182                                                                                         <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>\r
183                                                                                 </a>\r
184                                                                                 VFMODULE: {{vfModule.name}} | TYPE: {{vfModule.nodeType}} | ORCH STATUS: {{vfModule.nodeStatus}}\r
185                                                                                 <!--  -->\r
186                                                                                 <a class="pull-right btn btn-danger btn-xs" ng-if="isPermitted" data-tests-id="deleteVFModuleButton-{{vfModule.name}}" data-nodrag ng-click="deleteVfModule(aService.instance, vfModule, vnf)">\r
187                                                                                         <span class="glyphicon glyphicon-remove"></span>\r
188                                                                                 </a>\r
189                                                                                 <div class="pull-right btn-group">\r
190                                                                                         <!--   <button type="button" class="btn btn-success btn-xs dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">\r
191                                                 Attach Volume Group<span class="caret"></span>\r
192                                               </button>\r
193                                               <ul class="dropdown-menu" ng-model="vnf.volumeGroups">\r
194                                                 <li ng-repeat="volumeGroup in vnf.availableVolumeGroups">\r
195                                                     <a ng-click="attachVolumeGroupInstance(vfModule, volumeGroup)">{{volumeGroup.name}}</a>\r
196                                                 </li>\r
197                                               </ul> -->\r
198                                                                                 </div>\r
199                                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVfModule(aService.instance, vfModule, vnf)" style="margin-right: 8px;">\r
200                                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
201                                                                                 </a>\r
202                                                                                 <div class="resume" ng-if="isPermitted&&(vfModule.nodeStatus==resumeStatus)">\r
203                                                                                         <a data-tests-id="resumeVFModuleButton-{{vfModule.name}}" class="pull-right btn btn-success btn-xs button-margin" ng-click="resume(aService.instance, vfModule, vnf)" >\r
204                                                                                                 Resume\r
205                                                                                         </a>\r
206                                                                                 </div>\r
207 \r
208                                                                         </div>\r
209                                                                         <ol ui-tree-nodes="" ng-model="vfModule.volumeGroups" ng-class="{hidden: collapsed}">\r
210                                                                                 <li ng-repeat="volumeGroup in vfModule.volumeGroups" ui-tree-node>\r
211                                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
212                                                                                                 VOLUME GROUP: {{volumeGroup.name}} | TYPE: {{volumeGroup.nodeType}} | ORCH STATUS: {{volumeGroup.nodeStatus}}\r
213                                                                                                 <!-- <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteVolumeGroup(aService.instance, vnf, vfModule, volumeGroup)">\r
214                                                     <span class="glyphicon glyphicon-remove"></span>\r
215                                                 </a> -->\r
216                                                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVolumeGroup(aService.instance, vnf, volumeGroup)" style="margin-right: 8px;">\r
217                                                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
218                                                                                                 </a>\r
219                                                                                         </div>\r
220                                                                                 </li>\r
221                                                                         </ol>\r
222                                                                 </li>\r
223                                                         </ol>\r
224                                                         <ol ui-tree-nodes="" ng-model="vnf.availableVolumeGroups" ng-class="{hidden: collapsed}">\r
225                                                                 <li ng-repeat="volumeGroup in vnf.availableVolumeGroups" ui-tree-node>\r
226                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
227                                                                                 VOLUME GROUP: {{volumeGroup.name}} | TYPE: {{volumeGroup.nodeType}} | ORCH STATUS: {{volumeGroup.nodeStatus}}\r
228                                                                                 <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
229                                                                                         <span class="glyphicon glyphicon-remove"></span>\r
230                                                                                 </a>\r
231                                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeVolumeGroup(aService.instance, vnf, volumeGroup)" style="margin-right: 8px;">\r
232                                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
233                                                                                 </a>\r
234                                                                         </div>\r
235                                                                 </li>\r
236                                                         </ol>\r
237                                                 </li>\r
238                                         </ol>\r
239 \r
240                                         <ol ui-tree-nodes="" ng-model="aService.instance.networks" ng-class="{hidden: collapsed}">\r
241                                                 <li ng-repeat="network in aService.instance.networks" ui-tree-node>\r
242                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
243                                                                 NETWORK: {{network.name}} | TYPE: {{network.nodeType}} | ORCH   STATUS: {{network.nodeStatus}}\r
244 \r
245                                                                 <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
246                                                                         <span class="glyphicon glyphicon-remove"></span>\r
247                                                                 </a>\r
248                                                                 <!--  <a class="pull-right btn btn-danger btn-xs" data-nodrag ng-click="deleteNetwork(aService.instance, network)">\r
249                                    <span class="glyphicon glyphicon-remove"></span>\r
250                                </a>-->\r
251                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="describeNetwork(aService.instance, network)" style="margin-right: 8px;">\r
252                                                                         <span class="glyphicon glyphicon-info-sign"></span>\r
253                                                                 </a>\r
254                                                         </div>\r
255                                                 </li>\r
256                                         </ol>\r
257 \r
258 \r
259                                         <ol ui-tree-nodes="" ng-model="aService.instance.configurations" ng-class="{hidden: collapsed}">\r
260                                                 <li ng-repeat="configuration in aService.instance.configurations" ui-tree-node>\r
261                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
262                                                                 <a class="btn btn-success btn-xs" ng-if="(configuration.ports && configuration.ports.length > 0)" data-nodrag ng-click="this.toggle()">\r
263                                                                         <span class="glyphicon" ng-class="{'glyphicon-chevron-right': collapsed,'glyphicon-chevron-down': !collapsed}"></span>\r
264                                                                 </a>\r
265                                                                 CONFIGURATION: {{configuration.name}} | TYPE: {{configuration.nodeType}} | ORCH STATUS: {{configuration.nodeStatus}}\r
266 \r
267                                                                 <a class="pull-right btn btn-danger btn-xs" ng-if="!isMacro() && isPermitted && configuration.nodeStatus === STATUS_CONSTANTS.AAI_INACTIVE" data-tests-id="deleteConfigurationButton" data-nodrag ng-click="deleteConfiguration(aService.instance, configuration)">\r
268                                                                         <span class="glyphicon glyphicon-remove"></span>\r
269                                                                 </a>\r
270 \r
271                                                                 <a class="pull-right btn btn-primary btn-xs" data-nodrag ng-click="toggleConfigurationStatus(aService, configuration)" ng-if="isPermitted && allowConfigurationActions">\r
272                                                                         {{configuration.nodeStatus === STATUS_CONSTANTS.AAI_ACTIVE ? "Deactivate" : "Activate"}}\r
273                                                                 </a>\r
274                                                         </div>\r
275                                                         <ol ui-tree-nodes="" ng-model="configuration.ports" ng-class="{hidden: collapsed}">\r
276                                                                 <li ng-repeat="port in configuration.ports" ui-tree-node>\r
277                                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
278                                                                                 PORT: {{port.portName}} | ORCH STATUS: {{port.portStatus}}\r
279 \r
280                                                                                 <button type="button" class="pull-right btn btn-primary btn-xs" ng-if="configuration.nodeStatus == STATUS_CONSTANTS.AAI_ACTIVE" ng-click="togglePortStatus(aService, configuration, port)">\r
281                                                                                         {{port.portStatus === STATUS_CONSTANTS.AAI_ENABLED ? "Disable" : "Enable"}}\r
282                                                                                 </button>\r
283                                                                         </div>\r
284                                                                 </li>\r
285                                                         </ol>\r
286                                                 </li>\r
287                                         </ol>\r
288 \r
289                                         <ol id="pnfs-tree" ui-tree-nodes="" ng-model="pnfs" ng-class="{hidden: collapsed || pnf.length === 0}">\r
290                                                 <li ng-repeat="pnf in pnfs" ui-tree-node>\r
291                                                         <div ui-tree-handle class="tree-node tree-node-content">\r
292                                                                 PNF: {{pnf}}\r
293 \r
294                                                                 <a class="dissociate-pnf pull-right btn btn-primary btn-xs" data-nodrag ng-click="dissociatePnf(pnf)" style="margin-right: 8px;">\r
295                                                                         <span>Dissociate</span>\r
296                                                                 </a>\r
297                                                         </div>\r
298                                                 </li>\r
299                                         </ol>\r
300                                 </li>\r
301                         </ol>\r
302                 </div>\r
303         </div>\r
304 </div>\r