d139f9cff7d848d4966fcd04105c5b8e5c03d279
[groupbasedpolicy.git] / groupbasedpolicy-ui / module / src / main / resources / gbp / gbp.controller.js
1 var modules = ['app/gbp/gbp.module',\r
2                'app/gbp/gbp.services'\r
3                ];\r
4 \r
5 \r
6 define(modules, function(gbp) {\r
7 \r
8     gbp.register.controller('gbpCtrl', ['$scope', '$rootScope', 'GBPTenantServices','DesignGbpFactory', 'GBPConstants',\r
9         function ($scope, $rootScope, GBPTenantServices, DesignGbpFactory, GBPConstants) {\r
10             $rootScope['section_logo'] = 'logo_gbp';\r
11             $scope.view_path =  'src/app/gbp/views/';\r
12 \r
13             $scope.mainView = {\r
14                 main: true,\r
15                 'policy-renderer': false,\r
16                 governance: false\r
17             };\r
18 \r
19             $scope.policyRendererView = {\r
20                 slider : true,\r
21                 basic : true,\r
22                 policy: false,\r
23                 tenants : false,\r
24                 l2l3 : false,\r
25                 epg : false,\r
26                 contracts : false,\r
27                 docs : false,\r
28                 groupMenu: false,\r
29                 classifiers: false,\r
30                 actions: false,\r
31                 registerEndpoint : false,\r
32                 registerL3PrefixEndpoint : false\r
33             };\r
34 \r
35             $scope.subMenuView = {\r
36                 governance : false,\r
37                 policy : false,\r
38                 policySub : false,\r
39                 renderers : false,\r
40                 endpoints : false\r
41             };\r
42 \r
43             $scope.breadcrumbs = {'l1' : null,\r
44                                   'l2' : null,\r
45                                   'l3' : null};\r
46 \r
47             $scope.wizards = {\r
48                 accessModelWizard: false,\r
49                 actionReferenceWizard: false\r
50             };\r
51 \r
52             $scope.setBreadcrumb = function(level, label, visible){\r
53                 $scope.breadcrumbs[level] = visible ? label : null;\r
54                 if(level === 'l1'){\r
55                     $scope.breadcrumbs.l2 = null;\r
56                     $scope.breadcrumbs.l3 = null;\r
57                 }\r
58                 if(level === 'l2'){\r
59                     $scope.breadcrumbs.l3 = null;\r
60                 }\r
61             };\r
62 \r
63             $scope.setViewExpand = function(menu, expand, show){\r
64                 $scope[menu][expand] = show ? true : !$scope[menu][expand];\r
65                 for ( var property in $scope[menu] ) {\r
66                     $scope[menu][property] = expand !== property ? false : $scope[menu][expand];\r
67                 }\r
68 \r
69             };\r
70 \r
71             $scope.toggleExpandedMM = function(expand, show, broadcast){\r
72                 $scope.setViewExpand('mainView',expand, show);\r
73 \r
74                 if ( broadcast ) {\r
75                     $scope.$broadcast(broadcast);\r
76                 }\r
77             };\r
78 \r
79             $scope.sliceLabel = function(label){\r
80                 return label.length > GBPConstants.numbers.displayLabelLength ? label.slice(0,GBPConstants.numbers.displayLabelLength)+'...' : label;\r
81             };\r
82 \r
83             $scope.getDisplayLabel = function(obj, labelArray, dontSlice){\r
84                 var ret = '';\r
85 \r
86                 if((typeof labelArray) === 'string'){\r
87                     ret = obj[labelArray];\r
88                 } else if (angular.isFunction(labelArray)) {\r
89                     ret = labelArray(obj);\r
90                 } else {\r
91                     labelArray.some(function(labelParam) {\r
92                         if(angular.isFunction(labelParam)) {\r
93                             ret = labelParam(obj);\r
94                         } else if(obj.hasOwnProperty(labelParam)) {\r
95                             ret = obj[labelParam];\r
96                         }\r
97                         return ret;\r
98                     });\r
99                 }\r
100 \r
101                 return dontSlice ? ret : $scope.sliceLabel(ret);\r
102             };\r
103 \r
104             // TENANTS\r
105             $scope.tenantList = [];\r
106             $scope.selectedTenant = null;\r
107             $scope.tenantDisplayLabel = ['name' , 'id'];\r
108 \r
109             $scope.loadTenants = function() {\r
110                 GBPTenantServices.load(\r
111                     function(tenants) {\r
112                         $scope.tenantList = tenants;\r
113                         console.log('$scope.tenantList', $scope.tenantList);\r
114                     },\r
115                     function(){\r
116                         //TODO error\r
117                     });\r
118 \r
119                 DesignGbpFactory.setMainClass();\r
120             };\r
121 \r
122             $scope.setTenant = function(selectedTenant) {\r
123                 $scope.selectedTenant = selectedTenant;\r
124                 $scope.$broadcast('GBP_TENANT_RELOAD', $scope.selectedTenant);\r
125             };\r
126 \r
127             $scope.loadTenants();\r
128 \r
129             $scope.$on('GBP_GLOBAL_TENANT_RELOAD',function(){\r
130                 $scope.loadTenants();\r
131             });\r
132 \r
133             $scope.sendReloadEventFromRoot = function(eventName, val) {\r
134                 $scope.$broadcast(eventName, val);\r
135             };\r
136 \r
137 \r
138             // TODO: rework, use $scope.setViewContent or something\r
139             $scope.showWizard = function(wizardName, broadcast, broadcastedData, path) {\r
140                 $scope.wizards[wizardName] = true;\r
141 \r
142                 if ( broadcast ) {\r
143                     $scope.sendReloadEventFromRoot(broadcast, {data: broadcastedData, path: path});\r
144                 }\r
145             };\r
146 \r
147             $scope.closeWizard = function(wizardName) {\r
148                 $scope.wizards[wizardName] = false;\r
149             };\r
150 \r
151             $scope.updateList = function(list, object, key) {\r
152                 var elementPos = list.map(function(x) {return x[key]; }).indexOf(object[key]);\r
153 \r
154                 if(elementPos < 0) {\r
155                     list.push(object);\r
156                 }\r
157                 else {\r
158                     list[elementPos] = object;\r
159                 }\r
160             };\r
161 \r
162     }]);\r
163 \r
164     gbp.register.controller('governanceCtrl', ['$rootScope','$scope',\r
165         function ($rootScope, $scope) {\r
166             $scope.menuTpl = 'main-menu';\r
167             $scope.menuBox = null;\r
168             $scope.contentTpl = 'main';\r
169             // $scope.selectedTenant = null;\r
170             $scope.rendererList = [];\r
171             var broadcastObj = {};\r
172 \r
173             $scope.rendererList.push({'name' : 'of_overlay', 'id' : 0});\r
174 \r
175             $scope.toggleExpanded = function(expand, menu, tplType){\r
176                 var type = tplType ? tplType : 'contentTpl';\r
177                 $scope.menuBox = null;\r
178                 \r
179                 $scope[type] = expand;\r
180 \r
181                 if ( menu && menu === false ) {\r
182                     $scope.menuTpl = !menu ? null : menu;\r
183                 }\r
184             };\r
185 \r
186             \r
187 \r
188             $scope.setViewContent = function(tplName, data, broadcast, tplType) {\r
189 \r
190                 if ( $scope[tplType] === tplName ) {\r
191                     $scope.$broadcast(broadcast, data, true);\r
192                 } else {\r
193 \r
194                     broadcastObj[tplType] = {};\r
195                     broadcastObj[tplType].name = broadcast;\r
196                     broadcastObj[tplType].data = data;\r
197 \r
198                     $scope.toggleExpanded(tplName, null, tplType);\r
199                     $scope.$apply();\r
200 \r
201                 }\r
202             };\r
203 \r
204             $scope.broadcastCalling = function(tplType){\r
205                 $scope.$broadcast(broadcastObj[tplType].name, broadcastObj[tplType].data);\r
206             };\r
207 \r
208             $scope.checkBroadcastCalling = function(tplName){\r
209                 var objClickAction = {\r
210                     'epg-detail': function(){\r
211                         $scope.broadcastCalling('contentTpl');\r
212                     },\r
213                     'subject-detail': function(){\r
214                         $scope.broadcastCalling('contentTpl');\r
215                     }\r
216                 };\r
217 \r
218                 if ( angular.isFunction(objClickAction[tplName]) ) {\r
219                     objClickAction[tplName]();\r
220                 }\r
221                 \r
222             };\r
223 \r
224 \r
225             $scope.$on('GOV_INIT', function(){\r
226                 $scope.menuTpl = 'main-menu';\r
227                 $scope.contentTpl = 'main';\r
228                 // $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');\r
229                 $scope.menuBox = null;\r
230             });\r
231 \r
232             $scope.$on('GBP_TENANT_RELOAD', function(e, obj){\r
233                 $scope.selectedTenant = obj;\r
234             });\r
235 \r
236 \r
237     }]);\r
238 \r
239     gbp.register.controller('boxStaticCtrl',['$scope',\r
240         function($scope){\r
241 \r
242         $scope.selectedObj = null;\r
243 \r
244         $scope.getLabel = function(id, type){\r
245                 var objAction = {\r
246                 providerItems: function(){\r
247                     var name = $scope.selectedObj[type][id].attributes.objData['name'];\r
248                     return name ? name + ' : ' + id : id;\r
249                 },\r
250                 consumerItems: function(){\r
251                     var name = $scope.selectedObj[type][id].attributes.objData['name'];\r
252                     return name ? name + ' : ' + id : id;\r
253                 }\r
254             };\r
255 \r
256             if ( angular.isFunction(objAction[type]) ) {\r
257                 return objAction[type]();\r
258             }\r
259         };\r
260 \r
261         $scope.$on('SET_SEL_STA_OBJ', function(obj, data, apply){\r
262             $scope.selectedObj = data;\r
263 \r
264             if ( apply ) {\r
265                 $scope.$apply();\r
266             }\r
267 \r
268         });\r
269 \r
270     }]);\r
271 \r
272     gbp.register.controller('graphCtrl', ['$scope', function($scope){\r
273         var paper = null,\r
274             paperScale = 1;\r
275 \r
276         $scope.init = function(paperInstance){\r
277             paper = paperInstance;\r
278             $scope.loadMouseScrollEvent();\r
279         };\r
280 \r
281 \r
282         $scope.zoom = function(out){\r
283             paperScale = out ? paperScale - 0.1 : paperScale >= 1 ? 1 : paperScale + 0.1;\r
284             paper.scale(paperScale, paperScale);\r
285         };\r
286 \r
287         \r
288 \r
289         $scope.loadMouseScrollEvent = function(){\r
290             /*mouse wheel event for zooming*/\r
291             var graph = document.getElementById('graph'),\r
292             MouseWheelHandler = function(e){\r
293                 var mouseEvent = window.event || e; // old IE support\r
294                 var delta = Math.max(-1, Math.min(1, (mouseEvent.wheelDelta || -mouseEvent.detail)));\r
295                 $scope.zoom(delta === 1 ? false : true);\r
296             };\r
297 \r
298             if (graph.addEventListener) {\r
299                 // IE9, Chrome, Safari, Opera\r
300                 graph.addEventListener("mousewheel", MouseWheelHandler, false);\r
301                 // Firefox\r
302                 graph.addEventListener("DOMMouseScroll", MouseWheelHandler, false);\r
303             }\r
304             // IE 6/7/8\r
305             else {graph.attachEvent("onmousewheel", MouseWheelHandler);}\r
306             /*mouse wheel event for zooming - end*/\r
307         };\r
308         \r
309     }]);\r
310 \r
311     gbp.register.controller('expressedPolicyCtrl', ['$scope', 'JointGraphFactory', 'JointGraphOffsetFactory', 'GBPConstants',\r
312         function ($scope, JointGraphFactory, JointGraphOffsetFactory, GBPConstants) {\r
313             var paper = JointGraphFactory.createGraph(),\r
314                 epgItems = [],\r
315                 contractItems = [],\r
316                 linkItems = [];\r
317 \r
318             var objClickAction = {\r
319                 epg: function(data){\r
320                     $scope.setViewContent('epg-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
321                 },\r
322                 contract: function(data){\r
323                     $scope.setViewContent('contract-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
324                 }\r
325             };\r
326 \r
327             paper.on('cell:pointerdown', function(cell) { \r
328                 if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
329                     objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
330                 }\r
331             });\r
332 \r
333             var createEpgLinks = function(epg, epgItem, contracts) {\r
334                 var providers = epg['provider-named-selector'] && epg['provider-named-selector'].length>0 ? epg['provider-named-selector'] : [];\r
335                 var consumers = epg['consumer-named-selector'] && epg['consumer-named-selector'].length>0 ? epg['consumer-named-selector'] : [];\r
336                 var consumerLinkItems = [];\r
337                 var providerLinkItems = [];\r
338 \r
339                 consumers.forEach(function(c) {\r
340                     c.contract.forEach(function(con) {\r
341                         consumerLinkItems.push(JointGraphFactory.createLink(contracts[con].id, epgItem.id, 'green'));\r
342                     });\r
343                 });\r
344 \r
345                 providers.forEach(function(p) {\r
346                     p.contract.forEach(function(con) {\r
347                         providerLinkItems.push(JointGraphFactory.createLink(epgItem.id, contracts[con].id, 'blue'));\r
348                     });\r
349                 });\r
350 \r
351                 JointGraphFactory.addItemList(paper.model, providerLinkItems);\r
352                 JointGraphFactory.addItemList(paper.model, consumerLinkItems);\r
353 \r
354             };\r
355 \r
356             var loadData = function() {\r
357                 if($scope.selectedTenant) {\r
358                     var offsetObj = {\r
359                             ow: 100,\r
360                             oh: 100,\r
361                             w: 100,\r
362                             h: 100\r
363                         },\r
364                         marginObj = {\r
365                             w: 50,\r
366                             h: 80\r
367                         },\r
368                         offsetHobj = {\r
369                             contract: 0,\r
370                             epg: 0\r
371                         },\r
372                         itemsArray = {\r
373                             contract: [],\r
374                             epg: []\r
375                         };\r
376 \r
377                     JointGraphFactory.reloadGraph(paper.model);\r
378 \r
379                     if ( $scope.selectedTenant && $scope.selectedTenant.contract ) {\r
380 \r
381                         $scope.selectedTenant.contract.forEach(function(c, i) {\r
382                             var label = c.description ? $scope.sliceLabel(c.description) : c.id,\r
383                                 width = JointGraphFactory.getLabelLength(label.length);\r
384                                 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.contract, c, 'Click to see contract info', GBPConstants.colors.graph['subject'], 'Contract');\r
385 \r
386                             itemsArray.contract.push(item);\r
387 \r
388                             JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
389                             JointGraphFactory.addItem(paper.model, item);\r
390                             contractItems[c.id] = item;\r
391                         });\r
392 \r
393                         offsetHobj.contract = offsetObj.h;\r
394 \r
395                     }\r
396 \r
397                     if ( $scope.selectedTenant && $scope.selectedTenant['endpoint-group'] ) {\r
398 \r
399                         JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h > 400 ? offsetObj.h : 400);\r
400                         $scope.selectedTenant['endpoint-group'].forEach(function(e, i) {\r
401                             var label = e.name || e.id,\r
402                                 width = JointGraphFactory.getLabelLength(label.length);\r
403                                 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.epg, e, 'Click to see epg info', GBPConstants.colors.graph['pns'], 'EP group');\r
404 \r
405                             itemsArray.epg.push(item);\r
406 \r
407                             JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
408                             JointGraphFactory.addItem(paper.model, item);\r
409                             epgItems[e.id] = item;\r
410 \r
411                             createEpgLinks(e, item, contractItems);\r
412                         });\r
413                         \r
414                     }\r
415 \r
416                     offsetHobj.epg = JointGraphOffsetFactory.getCurrentOffset(itemsArray.contract, 'y');\r
417                     JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.epg ,offsetHobj.epg, paper);\r
418                 }\r
419 \r
420             };\r
421 \r
422             $scope.getPaperObj = function(){\r
423                 return paper;\r
424             };\r
425 \r
426             $scope.$on('GBP_TENANT_RELOAD',function(){\r
427                 if ($scope.selectedTenant) {\r
428                     loadData();\r
429                 }\r
430                 else {\r
431                     JointGraphFactory.reloadGraph(paper.model);\r
432                 }\r
433             });\r
434             \r
435             loadData();\r
436     }]);\r
437 \r
438     gbp.register.controller('deliveredPolicyCtrl', ['$scope', 'GPBServices', 'JointGraphFactory', 'GBPGovernanceServices', 'JointGraphOffsetFactory', 'GBPConstants',\r
439         function ($scope, GPBServices, JointGraphFactory, GBPGovernanceServices, JointGraphOffsetFactory, GBPConstants) {\r
440             var paper = JointGraphFactory.createGraph(),\r
441                 providerItems = {},\r
442                 consumerItems = {},\r
443                 subjectItems = {};\r
444 \r
445             var getEpList = function() {\r
446                 var providerEpKeys = Object.keys(providerItems),\r
447                     consumerEpKeys = Object.keys(consumerItems),\r
448                     epList = providerEpKeys.map(function (k) {\r
449                         return providerItems[k].attributes.objData;\r
450                     });\r
451 \r
452                 consumerEpKeys.forEach(function(k) {\r
453                     if(providerEpKeys.indexOf(k) === -1) {\r
454                         epList.push(consumerItems[k].attributes.objData);\r
455                     }\r
456                 });\r
457 \r
458                 return epList;\r
459             };\r
460 \r
461             var getSubjList = function() {\r
462                 return Object.keys(subjectItems).map(function (k) {\r
463                     return subjectItems[k].attributes.objData;\r
464                 });\r
465             };\r
466 \r
467             var objClickAction = {\r
468                 subject: function(data){\r
469                         data.providerItems = providerItems;\r
470                         data.consumerItems = consumerItems;\r
471                     $scope.setViewContent('subject-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
472                 },\r
473                 consumer: function(data) {\r
474                     $scope.setViewContent('epg-content-static', data, 'SET_SEL_STA_OBJ', 'menuBox');\r
475                 },\r
476                 provider: function(data) {\r
477                     $scope.setViewContent('epg-content-static', data, 'SET_SEL_STA_OBJ', 'menuBox');\r
478                 }\r
479             };\r
480 \r
481             var objDblClickAction = {\r
482                 consumer: function(data){\r
483                        $scope.setBreadcrumb('l3', 'Endpoint group detail', true);\r
484                        $scope.setViewContent('epg-detail', { ep: data, epList: getEpList() }, 'SET_SELECTED_EPG','contentTpl');\r
485                 },\r
486                 provider: function(data){\r
487                        $scope.setBreadcrumb('l3', 'Endpoint group detail', true);\r
488                        $scope.setViewContent('epg-detail', { ep: data, epList: getEpList() }, 'SET_SELECTED_EPG','contentTpl');\r
489                 },\r
490                 subject: function(data) {\r
491                         var obj = { subject: data, \r
492                                     subjList: Object.keys(subjectItems).map(function (k) {\r
493                                                 return subjectItems[k].attributes.objData;\r
494                                             }),\r
495                                     providerItems: providerItems,\r
496                                     consumerItems: consumerItems\r
497                                 };\r
498                         $scope.setBreadcrumb('l3', 'Subject detail', true);\r
499                         $scope.setViewContent('subject-detail', obj, 'SET_SELECTED_SUBJECT','contentTpl');\r
500                 }\r
501             };\r
502 \r
503             paper.on('cell:pointerdown', function(cell) { \r
504                 if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
505                     objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
506                 }\r
507             });\r
508 \r
509             paper.on('cell:pointerdblclick', function(cell) { \r
510                 objDblClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
511             });\r
512 \r
513             var createSubjectLinks = function(subject, subjectItem, providerItems, consumerItems) {\r
514                 var providerLinkItems = subject.providers.map(function(p) {\r
515                         return JointGraphFactory.createLink(providerItems[p].id, subjectItem.id, 'green');\r
516                     });\r
517                     consumerLinkItems = subject.consumers.map(function(c) {\r
518                         return JointGraphFactory.createLink(subjectItem.id, consumerItems[c].id, 'blue');\r
519                     });\r
520 \r
521                 JointGraphFactory.addItemList(paper.model, providerLinkItems);\r
522                 JointGraphFactory.addItemList(paper.model, consumerLinkItems);\r
523             };\r
524 \r
525             var loadData = function() {\r
526                 if($scope.selectedTenant) {\r
527                     providerItems = {};\r
528                     consumerItems = {};\r
529                     subjectItems = {};\r
530 \r
531                     var classifierInstances = $scope.selectedTenant['subject-feature-instances'] && \r
532                                           $scope.selectedTenant['subject-feature-instances']['classifier-instance'] && \r
533                                           $scope.selectedTenant['subject-feature-instances']['classifier-instance'].length > 0 ? $scope.selectedTenant['subject-feature-instances']['classifier-instance'] : [];\r
534 \r
535                     var offsetObj = {\r
536                             ow: 100,\r
537                             oh: 100,\r
538                             w: 100,\r
539                             h: 100\r
540                         },\r
541                         marginObj = {\r
542                             w: 50,\r
543                             h: 80\r
544                         },\r
545                         offsetHobj = {\r
546                             pEpg: 0,\r
547                             cEpg: 0,\r
548                             subject: 0\r
549                         },\r
550                         itemsArray = {\r
551                             pEpg: [],\r
552                             cEpg: [],\r
553                             subject: []\r
554                         };\r
555 \r
556                     JointGraphFactory.reloadGraph(paper.model);\r
557 \r
558                     GBPGovernanceServices.getEPGsAndSubjects($scope.selectedTenant.id, classifierInstances, function(data){\r
559                         data.providers.forEach(function(p, i) {\r
560                             var relatedObj = GPBServices.getPropFromListByProp($scope.selectedTenant['endpoint-group'], 'id', p.id),\r
561                                 label = relatedObj.name || p.id,\r
562                                 width = JointGraphFactory.getLabelLength(label.length);\r
563 \r
564                             relatedObj.rules = p.rules;\r
565                             var item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.provider, relatedObj, 'Click to see epg info, doubleclick to see Endpoint group detail', GBPConstants.colors.graph['pns'], 'Provider EPG');\r
566 \r
567                             itemsArray.pEpg.push(item);\r
568 \r
569                             JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
570                             JointGraphFactory.addItem(paper.model, item);\r
571                             providerItems[p.id] = item;\r
572                         });\r
573 \r
574                         offsetHobj.pEpg = offsetObj.h;\r
575 \r
576                         JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 500);\r
577                         data.consumers.forEach(function(c, i) {\r
578                             var relatedObj = GPBServices.getPropFromListByProp($scope.selectedTenant['endpoint-group'], 'id', c.id),\r
579                                 label = relatedObj.name || c.id,\r
580                                 width = JointGraphFactory.getLabelLength(label.length);\r
581 \r
582                             relatedObj.rules = c.rules;\r
583                             var item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.consumer, relatedObj, 'Click to see epg info, doubleclick to see Endpoint group detail', GBPConstants.colors.graph['cns'], 'Consumer EPG');\r
584 \r
585                             itemsArray.cEpg.push(item);\r
586 \r
587                             JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
588                             JointGraphFactory.addItem(paper.model, item);\r
589                             consumerItems[c.id] = item;\r
590                         });\r
591 \r
592                         JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetHobj.pEpg > 300 ? offsetHobj.pEpg : 300);\r
593                         data.subjects.forEach(function(s, i) {\r
594                             var label = s.name,\r
595                                 width = JointGraphFactory.getLabelLength(label.length),\r
596                                 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.subject, s, 'Click to see subject info, doubleclick to see Subject detail', GBPConstants.colors.graph['subject'], 'Subject');\r
597 \r
598                             itemsArray.subject.push(item);\r
599 \r
600                             JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
601                             JointGraphFactory.addItem(paper.model, item);\r
602                             subjectItems[s.name] = item;\r
603                             createSubjectLinks(s, item, providerItems, consumerItems);\r
604                         });\r
605 \r
606                         offsetHobj.pEpg = JointGraphOffsetFactory.getCurrentOffset(itemsArray.pEpg, 'y');\r
607                         JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.subject ,offsetHobj.pEpg, paper);\r
608                         offsetHobj.subject = JointGraphOffsetFactory.getCurrentOffset(itemsArray.subject, 'y');\r
609                         JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.cEpg ,offsetHobj.subject, paper);\r
610 \r
611                     }, function(){});\r
612 \r
613                 }\r
614 \r
615 \r
616                 // paper.scaleContentToFit();\r
617                 // paper.fitToContent();\r
618             };\r
619 \r
620             $scope.getPaperObj = function(){\r
621                 return paper;\r
622             };\r
623 \r
624 \r
625             $scope.$on('GBP_TENANT_RELOAD',function(){\r
626                 if ($scope.selectedTenant) {\r
627                     loadData();\r
628                 }\r
629                 else {\r
630                     JointGraphFactory.reloadGraph(paper.model);\r
631                 }\r
632             });\r
633 \r
634             loadData();\r
635     }]);\r
636 \r
637     gbp.register.controller('subjectDetailCtrl', ['$scope', 'GPBServices', 'JointGraphFactory', 'GBPGovernanceServices', 'JointGraphOffsetFactory', 'GBPConstants',\r
638         function ($scope, GPBServices, JointGraphFactory, GBPGovernanceServices, JointGraphOffsetFactory, GBPConstants) {\r
639             $scope.selectedSubject = null;\r
640             $scope.subjectList = [];\r
641 \r
642             var paper = JointGraphFactory.createGraph(),\r
643                 subjectItem = null,\r
644                 ruleItems = {},\r
645                 subjectItems = {};\r
646 \r
647             var createSubjectLinks = function(subjectItem, ruleItem) {\r
648                 var linkItem = JointGraphFactory.createLink(subjectItem.id, ruleItem.id, 'blue');\r
649                 JointGraphFactory.addItem(paper.model, linkItem);\r
650             };\r
651 \r
652             paper.on('cell:pointerdown', function(cell) { \r
653                 var objClickAction = {\r
654                     subject: function(data){\r
655                         $scope.setViewContent('subject-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
656                     },\r
657                     rule: function(data){\r
658                         $scope.setViewContent('rule-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
659                     }\r
660                 };\r
661 \r
662                 // console.log('cell.model.attributes.objType', cell.model.attributes.objType, cell.model.attributes.objData);\r
663                 if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
664                     objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
665                 }\r
666             });\r
667 \r
668             var loadData = function() {\r
669                 if($scope.selectedSubject) {\r
670                     subjectItem = null;\r
671                     ruleItems = {};\r
672 \r
673                     var offsetObj = {\r
674                             ow: 100,\r
675                             oh: 100,\r
676                             w: 100,\r
677                             h: 100\r
678                         },\r
679                         marginObj = {\r
680                             w: 50,\r
681                             h: 80\r
682                         };\r
683 \r
684                     JointGraphFactory.reloadGraph(paper.model);\r
685 \r
686                     var label = $scope.selectedSubject.name || $scope.selectedSubject.id,\r
687                         width = JointGraphFactory.getLabelLength(label.length);\r
688                         subjectItem = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.subject, $scope.selectedSubject, 'Click to see subject info', GBPConstants.colors.graph['subject'], 'Subject');\r
689 \r
690                     JointGraphFactory.addItem(paper.model, subjectItem);\r
691 \r
692                     JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 300);\r
693                     $scope.selectedSubject.rules.forEach(function(r, i) {\r
694                         var label = r.name,\r
695                             width = JointGraphFactory.getLabelLength(label.length);\r
696                             item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.rule, r, 'Click to see rule info', GBPConstants.colors.graph['cns'], 'Rule');\r
697 \r
698                         JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);\r
699                         JointGraphFactory.addItem(paper.model, item);\r
700                         ruleItems[r.name] = item;\r
701 \r
702                         createSubjectLinks(subjectItem, item);\r
703                     });\r
704                 }\r
705             };\r
706 \r
707             $scope.getPaperObj = function(){\r
708                 return paper;\r
709             };\r
710 \r
711             $scope.$on('SET_SELECTED_SUBJECT', function(event, data){\r
712                 $scope.selectedSubject = data.subject;\r
713                 $scope.subjectList = data.subjList;\r
714                 loadData();\r
715             });\r
716 \r
717             $scope.setSubject = function(subject) {\r
718                 $scope.selectedSubject = subject;\r
719                 loadData();\r
720             };\r
721 \r
722             loadData();\r
723     }]);\r
724 \r
725     gbp.register.controller('epgDetailCtrl', ['$scope', 'JointGraphFactory', 'TopologyDataLoaders', 'GBPEpgServices', 'JointGraphOffsetFactory', 'GBPConstants',\r
726         function ($scope, JointGraphFactory, TopologyDataLoaders, GBPEpgServices, JointGraphOffsetFactory, GBPConstants) {\r
727             var paper = JointGraphFactory.createGraph(),\r
728                 epgItem = {},\r
729                 epItems = {};\r
730 \r
731             $scope.epgDisplayLabel = ['name', 'id'];\r
732             $scope.epgList = [];\r
733             $scope.selectedEpg = null;\r
734 \r
735             $scope.$on('SET_SELECTED_EPG', function(event, epg){\r
736                 $scope.selectedEpg = epg.ep;\r
737                 $scope.epgList = epg.epList;\r
738                 loadData();\r
739             });\r
740 \r
741             $scope.setEpg = function(epg){\r
742                 selectedEpg = epg;\r
743                 loadData();\r
744             };\r
745 \r
746             paper.on('cell:pointerdown', function(cell) { \r
747                 var objClickAction = {\r
748                     ep: function(data){\r
749                         $scope.setViewContent('ep-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
750                     },\r
751                     epg: function(data){\r
752                         $scope.setViewContent('epg-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
753                     },\r
754                 };\r
755 \r
756                 if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
757                     objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
758                 }\r
759             });\r
760 \r
761             var loadData = function() {\r
762                 if($scope.selectedTenant && $scope.selectedEpg) {\r
763                     epgItem = {};\r
764                     epItems = {};\r
765                     links = [];\r
766 \r
767                     JointGraphFactory.reloadGraph(paper.model);\r
768 \r
769                     TopologyDataLoaders.getEndpointsFromEndpointGroup($scope.selectedTenant.id, $scope.selectedEpg.id, function(data){\r
770                        var offsetObj = {\r
771                             ow: 100,\r
772                             oh: 100,\r
773                             w: 100,\r
774                             h: 100\r
775                             },\r
776                             marginObj = {\r
777                                 w: 50,\r
778                                 h: 80\r
779                             };\r
780 \r
781                         var label = $scope.selectedEpg.name || $scope.selectedEpg.id,\r
782                             width = JointGraphFactory.getLabelLength(label.length);\r
783                             epgItem = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, 'epg', $scope.selectedEpg, 'Click to see epg info', GBPConstants.colors.graph['subject'], 'EPG');\r
784 \r
785                         JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);\r
786                         JointGraphFactory.addItem(paper.model, epgItem);\r
787 \r
788                         JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 500);\r
789                         if(data && data.output && data.output['ui-endpoint'] && data.output['ui-endpoint'].length){\r
790                             data.output['ui-endpoint'].forEach(function(ep, i){\r
791                                 var label = ep['mac-address'] + ':' + ep['l2-context'],\r
792                                     width = JointGraphFactory.getLabelLength(label.length);\r
793                                     item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, 'ep', ep, 'Click to see ep info', GBPConstants.colors.graph['pns'], 'Endpoint');\r
794 \r
795                                 JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);\r
796                                 JointGraphFactory.addItem(paper.model, item);\r
797                                 epItems[label] = item;\r
798                                 links.push(JointGraphFactory.createLink(item.id, epgItem.id, 'green'));\r
799                             });\r
800 \r
801                             JointGraphFactory.addItemList(paper.model, links);\r
802                         }\r
803                     }, function(){});\r
804                 }\r
805             };\r
806 \r
807             $scope.getPaperObj = function(){\r
808                 return paper;\r
809             };\r
810 \r
811             // init();\r
812     }]);\r
813 \r
814     gbp.register.controller('policyRendererCtrl', ['$scope', '$http', '$timeout', 'PGNServices', 'TopoServices', 'GBPTenantServices', 'GBPConstants', 'JointGraphFactory','GBPJointGraphBuilder',\r
815         function ($scope, $http, $timeout, PGNServices, TopoServices, GBPTenantServices, GBPConstants, JointGraphFactory, GBPJointGraphBuilder) {\r
816             \r
817             $scope.topologyData = { nodes: [], links: [] };\r
818             $scope.topologyType = null;\r
819             $scope.topologyArgs = {};\r
820             $scope.legend = {};\r
821             $scope.showLegend = false;\r
822 \r
823             var paper = JointGraphFactory.createGraph();\r
824 \r
825             var reloadShowLegend = function() {\r
826                 $scope.showLegend = !$.isEmptyObject($scope.legend);\r
827             };\r
828 \r
829             $scope.settingsSigma = {\r
830                 defaultLabelColor: '#fff',\r
831                 doubleClickEnabled: false,\r
832                 labelThreshold: 8\r
833             };\r
834 \r
835             $scope.settingsAtlas = {\r
836                 adjustSizes: true,\r
837                 gravity: 0.2\r
838             };\r
839 \r
840             $scope.viewTopo = {\r
841                 box: false,\r
842                 button: false\r
843             };\r
844 \r
845             paper.on('cell:pointerdown', function(cellView, evt) {\r
846                 if (cellView.model.isLink() && cellView.model.attributes.objData) {\r
847                     $scope.$broadcast('SET_LINK_DATA', cellView.model.attributes.objData);\r
848                 }\r
849             });\r
850 \r
851             $scope.mandatoryProperties = [];\r
852             $scope.loadTopology = function(type, args) {\r
853                 if ($scope.selectedTenant) {\r
854                     $scope.topologyType = type;\r
855                     $scope.topologyArgs = args;\r
856                     GBPJointGraphBuilder.loadTopology(args, paper, type);\r
857                 }\r
858             };\r
859             $scope.toggleExpanded = function(expand, show) {\r
860                 $scope.setViewExpand('policyRendererView',expand, show, 'l2');\r
861 \r
862                 if($scope.policyRendererView[expand] && $scope.selectedTenant) {\r
863                     $scope.topologyArgs.tenantId = $scope.selectedTenant.id;\r
864 \r
865                     if((expand === 'epg' || expand === 'contracts' || expand === 'classifiers' || expand === 'actions' || expand === 'renderers') && ($scope.topologyType !== GBPConstants.strings.config)) {\r
866                         $scope.loadTopology(GBPConstants.strings.config, $scope.topologyArgs);\r
867                     } else if((expand === 'l2l3' || expand === 'registerEndpoint' || expand === 'registerL3PrefixEndpoint') && ($scope.topologyType !== GBPConstants.strings.l2l3)) {\r
868                         $scope.loadTopology(GBPConstants.strings.l2l3, $scope.topologyArgs);\r
869                     }\r
870                 }\r
871             };\r
872 \r
873             $scope.reloadTopo = function() {\r
874                 if($scope.selectedTenant) {\r
875                     $scope.topologyArgs.tenantId = $scope.selectedTenant.id;\r
876                     GBPJointGraphBuilder.loadTopology($scope.topologyArgs, paper, $scope.topologyType);\r
877                 }\r
878             };\r
879 \r
880             $scope.getDisplayLabelsFromCtrl = function(eventName, val) {\r
881                 $scope.$broadcast(eventName, val);\r
882             };\r
883 \r
884             $scope.validateMandatory = function(newObj, mandatoryProps){\r
885                 var ret = true,\r
886                     notFilledProps = [];\r
887 \r
888                 mandatoryProps.forEach(function(el){\r
889                     if(newObj[el] === '' || newObj[el] === null || newObj[el] === undefined){\r
890                         notFilledProps.push(el);\r
891                         ret = false;\r
892                     }\r
893                 });\r
894 \r
895                 return {'status' : ret, 'notFilledProps' : notFilledProps};\r
896             };\r
897 \r
898             $scope.validate = function(value, errors){\r
899                 errors.int32 = !(parseInt(value) >= -2147483648 && parseInt(value) <= 2147483647);\r
900             };\r
901 \r
902             \r
903 \r
904             $scope.validateForm = function(form) {\r
905                 return form.$valid;\r
906             };\r
907           \r
908             $scope.$on('GBP_TENANT_RELOAD', function(e, obj){\r
909                 $scope.selectedTenant = obj;\r
910             });\r
911 \r
912     }]);\r
913 \r
914     gbp.register.controller('linkDataCtrl',['$scope', function($scope){\r
915         $scope.showTable = false;\r
916 \r
917         $scope.show = function(){\r
918             $scope.showTable = true;\r
919         };\r
920 \r
921         $scope.close = function(){\r
922             $scope.showTable = false;\r
923         };\r
924         \r
925         $scope.$on('SET_LINK_DATA', function(e, obj){\r
926            $scope.linkData = obj;\r
927            $scope.show();\r
928            $scope.$apply();\r
929         });\r
930     }]);\r
931 \r
932     gbp.register.controller('crudCtrl',['$scope',  function($scope){\r
933         $scope.selectedObj = null;\r
934         $scope.label = '';\r
935         $scope.q = {};\r
936 \r
937         $scope.add = function() {\r
938             $scope.selectedObj = null;\r
939             $scope.showForm();\r
940         };\r
941 \r
942         $scope.modify = function() {\r
943             $scope.$emit('PGN_EDIT_ELEM');\r
944         };\r
945 \r
946         $scope.init = function(label) {\r
947             $scope.label = label;\r
948         };\r
949 \r
950 \r
951         $scope.$on('EV_SET_SEL_CLASS', function(event, selObj){\r
952             $scope.selectedObj = selObj;\r
953         });\r
954     }]);\r
955 \r
956     gbp.register.controller('contractCtrl', ['$scope','GBPContractServices', '$filter', function($scope, GBPContractServices, $filter){\r
957         $scope.list = [];\r
958         $scope.selectedContract = null;\r
959         $scope.newContractObj = GBPContractServices.createObj();\r
960         $scope.displayLabel = ['description','id'];\r
961         $scope.crudLabel = 'Contract list';\r
962 \r
963         $scope.internalView = {\r
964             contract: false,\r
965             edit: "view"\r
966         };\r
967 \r
968         var path = null,\r
969             mandatoryProperties = [],\r
970             clear = function(){\r
971                 $scope.list = [];\r
972                 $scope.internalView = {\r
973                     contract: false,\r
974                     edit: "view"\r
975                 };\r
976                 $scope.selectedContract = null;\r
977                 $scope.newContractObj = GBPContractServices.createObj();\r
978             };\r
979 \r
980         $scope.init = function() {\r
981             if ( $scope.selectedTenant ) {\r
982                 $scope.selectedContract = null;\r
983                 path = GBPContractServices.createPathObj($scope.selectedTenant.id);\r
984                 \r
985                 GBPContractServices.load(path, function(data){\r
986                     $scope.list = data;\r
987                     // $scope.$broadcast('GBP_CONTRACT_RELOAD');\r
988                     $scope.sendReloadEventFromRoot('GBP_CONTRACT_RELOAD');\r
989                 }, function(){\r
990 \r
991                 });\r
992             }else{\r
993                 clear();\r
994             }\r
995         };\r
996 \r
997         $scope.save = function(){\r
998             var resp = $scope.validateMandatory($scope.newContractObj, mandatoryProperties);\r
999             if(resp.status){\r
1000                 path = GBPContractServices.createPathObj($scope.selectedTenant.id, $scope.newContractObj.id);\r
1001                 GBPContractServices.send(path, $scope.newContractObj, function(data){\r
1002                     $scope.init();\r
1003                     $scope.internalView.contract = false;\r
1004                     $scope.reloadNewObj();\r
1005                     $scope.internalView.edit = "view";\r
1006                 }, function(){\r
1007                     //TODO: error cbk\r
1008                 });\r
1009             }else{\r
1010                 alert($filter('translate')('GBP_MANDATORY_NOT_FILLED')+': '+resp.notFilledProps.join(', '));\r
1011             }\r
1012         };\r
1013 \r
1014         $scope.delete = function() {\r
1015             if ( $scope.selectedContract ) {\r
1016                 path = GBPContractServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);\r
1017                 GBPContractServices.delete(path, function(data){\r
1018                     $scope.init();\r
1019                     $scope.selectedContract = null;\r
1020                 }, function(){\r
1021                     //TODO: error cbk\r
1022                 });\r
1023             }\r
1024         };\r
1025 \r
1026         $scope.reloadNewObj = function() {\r
1027             $scope.newContractObj = GBPContractServices.createObj();\r
1028         };\r
1029 \r
1030         $scope.reload = function(selectedObj) {\r
1031             $scope.selectedContract = selectedObj;\r
1032             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1033             if(selectedObj){\r
1034                 $scope.internalView.contract = true;\r
1035             }else {\r
1036                 $scope.internalView.contract = false;\r
1037                 $scope.internalView.edit = "view";\r
1038             }\r
1039 \r
1040             if($scope.internalView.contract) {\r
1041                 angular.copy(selectedObj, $scope.newContractObj);\r
1042             }\r
1043             $scope.sendReloadEventFromRoot('GBP_CONTRACT_RELOAD');\r
1044         };\r
1045 \r
1046         $scope.showForm = function() {\r
1047             $scope.reloadNewObj();\r
1048             $scope.internalView.contract = true;\r
1049             $scope.selectedContract = null;\r
1050             $scope.internalView.edit = "add";\r
1051         };\r
1052 \r
1053         $scope.close = function(){\r
1054             $scope.internalView.contract = false;\r
1055             $scope.internalView.edit = "view";\r
1056         };\r
1057 \r
1058         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1059             if(!event.defaultPrevented) {\r
1060                 if ( $scope.selectedContract ) {\r
1061                     $scope.internalView.contract = true;\r
1062                     $scope.internalView.edit = "edit";\r
1063                     angular.copy($scope.selectedContract, $scope.newContractObj);\r
1064                 }\r
1065                 event.defaultPrevented = true;\r
1066             }\r
1067         });\r
1068 \r
1069         $scope.$on('GBP_TENANT_RELOAD',function(event){\r
1070             $scope.init();\r
1071         });\r
1072 \r
1073         $scope.$on('GBP_CONTRACTS_LABEL', function(event, obj){\r
1074             obj.labels = $scope.displayLabel;\r
1075         });\r
1076     }]);\r
1077 \r
1078     gbp.register.controller('clauseCtrl', ['$scope','GBPClauseServices', 'GBPSubjectServices', \r
1079         function($scope, GBPClauseServices, GBPSubjectServices){\r
1080         $scope.list = [];\r
1081         $scope.selectedClause = null;\r
1082         $scope.newClauseObj = GBPClauseServices.createObj();\r
1083         $scope.internalView = {\r
1084             clause: false,\r
1085             edit: "view"\r
1086         };\r
1087         $scope.displayLabel = 'name';\r
1088         $scope.crudLabel = 'Clause list';\r
1089 \r
1090         $scope.subjects = {'options' : [], 'labels' : null};\r
1091         $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);\r
1092 \r
1093         var path = null,\r
1094 \r
1095             clear = function(){\r
1096                 $scope.list = [];\r
1097                 $scope.selectedClause = null;\r
1098                 $scope.newClauseObj = GBPClauseServices.createObj();\r
1099                 $scope.internalView = {\r
1100                     clause: false,\r
1101                     edit: "view"\r
1102                 };\r
1103             };\r
1104 \r
1105         //move to separate ctrl \/\r
1106         $scope.addNewElem = function(templateObj) {\r
1107             if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
1108                 var objToPush = templateObj || "";\r
1109                 $scope.newClauseObj['subject-refs'].push(objToPush);\r
1110             }\r
1111         };\r
1112 \r
1113         $scope.deleteElemAt = function(index) {\r
1114             if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
1115                 $scope.newClauseObj['subject-refs'].splice(index, 1);\r
1116             }\r
1117         };\r
1118 \r
1119         $scope.updateAt = function(index, value) {\r
1120             if($scope.newClauseObj && $scope.newClauseObj['subject-refs'] && $scope.newClauseObj['subject-refs'].length >= index) {\r
1121                 $scope.newClauseObj['subject-refs'][index] = value;\r
1122             }\r
1123         };\r
1124         //move to separate ctrl /\\r
1125 \r
1126         var loadSubjects = function() {\r
1127             $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);\r
1128 \r
1129             GBPSubjectServices.load(path, function(data){\r
1130                 $scope.subjects.options = data;\r
1131             }, function(){\r
1132                 //TODO: error cbk\r
1133             });\r
1134         };\r
1135 \r
1136         $scope.init = function() {\r
1137             if ( $scope.selectedContract ) {\r
1138                 path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);\r
1139                 \r
1140                 GBPClauseServices.load(path, function(data){\r
1141                     $scope.list = data;\r
1142                 }, function(){\r
1143                     //TODO: error cbk\r
1144                 });\r
1145             }else{\r
1146                 clear();\r
1147             }\r
1148         };\r
1149 \r
1150         $scope.save = function(){\r
1151             if($scope.validateForm($scope.clauseForm)){\r
1152                 path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.newClauseObj.name);\r
1153                 GBPClauseServices.send(path, $scope.newClauseObj, function(data){\r
1154                     $scope.init();\r
1155                     $scope.internalView.clause = false;\r
1156                     $scope.reloadNewObj();\r
1157                     $scope.internalView.clause = "view";\r
1158                 }, function(){\r
1159                     //TODO: error cbk\r
1160                 });\r
1161             }\r
1162         };\r
1163 \r
1164         $scope.delete = function() {\r
1165             if ( $scope.selectedClause ) {\r
1166                 path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedClause.name);\r
1167                 GBPClauseServices.delete(path, function(data){\r
1168                     $scope.init();\r
1169                     $scope.selectedClause = null;\r
1170                 }, function(){\r
1171                     //TODO: error cbk\r
1172                 });\r
1173             }\r
1174         };\r
1175 \r
1176         $scope.reloadNewObj = function() {\r
1177             $scope.newClauseObj = GBPClauseServices.createObj();\r
1178         };\r
1179 \r
1180         $scope.reload = function(selectedObj) {\r
1181             $scope.selectedClause = selectedObj;\r
1182             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1183             if(selectedObj){\r
1184                 $scope.internalView.clause = true;\r
1185             }else {\r
1186                 $scope.internalView.clause = false;\r
1187                 $scope.internalView.edit = "view";\r
1188             }\r
1189             \r
1190             if($scope.internalView.clause) {\r
1191                 angular.copy(selectedObj, $scope.newClauseObj);\r
1192             }\r
1193         };\r
1194 \r
1195         $scope.showForm = function() {\r
1196             $scope.reloadNewObj();\r
1197             $scope.internalView.clause = true;\r
1198             $scope.internalView.edit = "add";\r
1199             $scope.selectedClause = null;\r
1200         };\r
1201 \r
1202         $scope.close = function(){\r
1203             $scope.internalView.clause = false;\r
1204             $scope.internalView.edit = "view";\r
1205         };\r
1206 \r
1207         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1208             if (!event.defaultPrevented) {\r
1209                 if ( $scope.selectedClause ) {\r
1210                     $scope.internalView.clause = true;\r
1211                     $scope.internalView.edit = "edit";\r
1212                     angular.copy($scope.selectedClause, $scope.newClauseObj);\r
1213                 }\r
1214                 event.defaultPrevented = true;\r
1215             }\r
1216         });\r
1217 \r
1218         $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
1219             $scope.internalView.clause = false;\r
1220             $scope.init();\r
1221         });\r
1222 \r
1223         $scope.$on('GBP_SUBJECT_RELOAD',function(){\r
1224             loadSubjects();\r
1225         });\r
1226     }]);\r
1227 \r
1228     gbp.register.controller('subjectCtrl', ['$scope','GBPSubjectServices', '$filter', function($scope, GBPSubjectServices, $filter){\r
1229         $scope.list = [];\r
1230         $scope.selectedSubject = null;\r
1231         $scope.newSubjectObj = GBPSubjectServices.createObj();\r
1232         $scope.displayLabel = 'name';\r
1233         $scope.internalView = {\r
1234             subject : false,\r
1235             edit : "view"\r
1236         };\r
1237         $scope.crudLabel = 'Subject list';\r
1238         $scope.errors = {};\r
1239 \r
1240         var path = null,\r
1241             mandatoryProperties = ['order'],\r
1242 \r
1243             clear = function(){\r
1244                 $scope.list = [];\r
1245                 $scope.selectedSubject = null;\r
1246                 $scope.newSubjectObj = GBPSubjectServices.createObj();\r
1247                 $scope.internalView = {\r
1248                     subject : false,\r
1249                     edit : "view"\r
1250                 };\r
1251             };\r
1252 \r
1253         $scope.init = function() {\r
1254             if ( $scope.selectedContract ) {\r
1255                 $scope.selectedSubject = null;\r
1256                 path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);\r
1257                 \r
1258                 GBPSubjectServices.load(path, function(data){\r
1259                     $scope.list = data;\r
1260                     $scope.sendReloadEventFromRoot('GBP_SUBJECT_RELOAD');\r
1261                 }, function(){\r
1262                     //TODO: error cbk\r
1263                 });\r
1264             }else{\r
1265                 clear();\r
1266             }\r
1267         };\r
1268 \r
1269         $scope.save = function(){\r
1270             if($scope.validateForm($scope.subjectForm)){\r
1271                 path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.newSubjectObj.name);\r
1272                 GBPSubjectServices.send(path, $scope.newSubjectObj, function(data){\r
1273                     $scope.init();\r
1274                     $scope.internalView.subject = false;\r
1275                     $scope.reloadNewObj();\r
1276                     $scope.internalView.edit = "view";\r
1277                 }, function(){\r
1278                     //TODO: error cbk\r
1279                 });\r
1280             }\r
1281         };\r
1282 \r
1283         $scope.delete = function() {\r
1284             if ( $scope.selectedSubject ) {\r
1285                 path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name);\r
1286                 GBPSubjectServices.delete(path, function(data){\r
1287                     $scope.init();\r
1288                     $scope.selectedSubject = null;\r
1289                 }, function(){\r
1290                     //TODO: error cbk\r
1291                 });\r
1292             }\r
1293         };\r
1294 \r
1295         $scope.reloadNewObj = function() {\r
1296             $scope.newSubjectObj = GBPSubjectServices.createObj();\r
1297         };\r
1298 \r
1299         $scope.reload = function(selectedObj) {\r
1300             $scope.selectedSubject = selectedObj;\r
1301             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1302             if(selectedObj){\r
1303                 $scope.internalView.subject = true;\r
1304             }else {\r
1305                 $scope.internalView.subject = false;\r
1306                 $scope.internalView.edit = "view";\r
1307             }\r
1308 \r
1309             if($scope.internalView.subject) {\r
1310                 angular.copy(selectedObj, $scope.newSubjectObj);\r
1311             }\r
1312             $scope.sendReloadEventFromRoot('GBP_SUBJECT_RELOAD');\r
1313         };\r
1314 \r
1315         $scope.showForm = function() {\r
1316             $scope.reloadNewObj();\r
1317             $scope.internalView.subject = true;\r
1318             $scope.internalView.edit = "add";\r
1319             $scope.selectedSubject = null;\r
1320         };\r
1321 \r
1322         $scope.close = function(){\r
1323             $scope.internalView.subject = false;\r
1324             $scope.internalView.edit = "view";\r
1325         };\r
1326 \r
1327         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1328             if (!event.defaultPrevented) {\r
1329                 if ( $scope.selectedSubject ) {\r
1330                     $scope.internalView.subject = true;\r
1331                     $scope.internalView.edit = "edit";\r
1332                     angular.copy($scope.selectedSubject, $scope.newSubjectObj);\r
1333                 }\r
1334                 event.defaultPrevented = true;\r
1335             }\r
1336         });\r
1337 \r
1338         $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
1339             $scope.internalView.subject = false;\r
1340             $scope.init();\r
1341         });\r
1342 \r
1343         $scope.$on('GBP_SUBJECTS_LABEL', function(event, obj){\r
1344             obj.labels = $scope.displayLabel;\r
1345         });\r
1346     }]);\r
1347 \r
1348     gbp.register.controller('ruleCtrl', ['$scope','GBPRuleServices', '$filter', function($scope, GBPRuleServices, $filter){\r
1349         $scope.list = [];\r
1350         $scope.selectedRule = null;\r
1351         $scope.newRuleObj = GBPRuleServices.createObj();\r
1352         $scope.displayLabel = 'name';\r
1353         $scope.internalView = {\r
1354             rule : false,\r
1355             edit : "view"\r
1356         };\r
1357         $scope.crudLabel = 'Rule list';\r
1358         $scope.errors = {};\r
1359 \r
1360         var path = null,\r
1361             mandatoryProperties = ['order'],\r
1362 \r
1363             clear = function(){\r
1364                 $scope.list = [];\r
1365                 $scope.selectedRule = null;\r
1366                 $scope.newRuleObj = GBPRuleServices.createObj();\r
1367                 $scope.internalView = {\r
1368                     rule : false,\r
1369                     edit : "view"\r
1370                 };\r
1371             };\r
1372 \r
1373         $scope.init = function() {\r
1374             if ( $scope.selectedSubject ) {\r
1375                 $scope.selectedRule = null;\r
1376                 path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name);\r
1377                 \r
1378                 GBPRuleServices.load(path, function(data){\r
1379                     $scope.list = data;\r
1380                 }, function(){\r
1381                     //TODO: error cbk\r
1382                 });\r
1383             }else{\r
1384                 clear();\r
1385             }\r
1386         };\r
1387 \r
1388         $scope.save = function(){\r
1389             if($scope.validateForm($scope.rulesForm)){\r
1390                 path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.newRuleObj.name);\r
1391                 GBPRuleServices.send(path, $scope.newRuleObj, function(data){\r
1392                     $scope.init();\r
1393                     $scope.internalView.rule = false;\r
1394                     $scope.reloadNewObj();\r
1395                     $scope.internalView.edit = "view";\r
1396                 }, function(){\r
1397                     //TODO: error cbk\r
1398                 });\r
1399             }\r
1400         };\r
1401 \r
1402         $scope.delete = function() {\r
1403             if ( $scope.selectedRule ) {\r
1404                 path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);\r
1405                 GBPRuleServices.delete(path, function(data){\r
1406                     $scope.init();\r
1407                     $scope.selectedRule = null;\r
1408                 }, function(){\r
1409                     //TODO: error cbk\r
1410                 });\r
1411             }\r
1412         };\r
1413 \r
1414         $scope.reloadNewObj = function() {\r
1415             $scope.newRuleObj = GBPRuleServices.createObj();\r
1416         };\r
1417 \r
1418         $scope.reload = function(selectedObj) {\r
1419             $scope.selectedRule = selectedObj;\r
1420             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1421             if(selectedObj){\r
1422                 $scope.internalView.rule = true;\r
1423             }else {\r
1424                 $scope.internalView.rule = false;\r
1425                 $scope.internalView.edit = "view";\r
1426             }\r
1427 \r
1428             if($scope.internalView.rule) {\r
1429                 angular.copy(selectedObj, $scope.newRuleObj);\r
1430             }\r
1431             $scope.$broadcast('GBP_RULE_RELOAD');\r
1432         };\r
1433 \r
1434         $scope.showForm = function() {\r
1435             $scope.reloadNewObj();\r
1436             $scope.internalView.rule = true;\r
1437             $scope.internalView.edit = "add";\r
1438             $scope.selectedRule = null;\r
1439         };\r
1440 \r
1441         $scope.close = function(){\r
1442             $scope.internalView.rule = false;\r
1443             $scope.internalView.edit = "view";\r
1444         };\r
1445 \r
1446         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1447             if (!event.defaultPrevented) {\r
1448                 if ( $scope.selectedRule ) {\r
1449                 $scope.internalView.rule = true;\r
1450                 $scope.internalView.edit = "edit";\r
1451                     angular.copy($scope.selectedRule, $scope.newRuleObj);\r
1452                 }\r
1453                 event.defaultPrevented = true;\r
1454             }\r
1455         });\r
1456 \r
1457         $scope.$on('GBP_SUBJECT_RELOAD',function(){\r
1458             $scope.init();\r
1459         });\r
1460     }]);\r
1461 \r
1462     gbp.register.controller('actionRefCtrl', ['$scope','GBPActionRefsServices', 'GBPActionInstanceServices', '$filter', function($scope, GBPActionRefsServices, GBPActionInstanceServices, $filter){\r
1463         $scope.list = [];\r
1464         $scope.selectedActionRef = null;\r
1465         $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
1466         $scope.displayLabel = 'name';\r
1467         $scope.internalView = {\r
1468             actionRef : false,\r
1469             edit : "view"\r
1470         };\r
1471         $scope.crudLabel = 'Action ref list';\r
1472         $scope.errors = {};\r
1473 \r
1474         $scope.actionInstanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
1475 \r
1476         var path = null,\r
1477             mandatoryProperties = ['order'],\r
1478 \r
1479             actionInstanceNamesLoad = function() {\r
1480                 var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);\r
1481                 GBPActionInstanceServices.load(actionInstancePath, function(data){\r
1482                     $scope.actionInstanceNames.options = data;\r
1483                 },function(){\r
1484                     //TODO: error cbk\r
1485                 });\r
1486             },\r
1487 \r
1488             clear = function(){\r
1489                 $scope.list = [];\r
1490                 $scope.selectedActionRef = null;\r
1491                 $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
1492                 $scope.internalView = {\r
1493                     actionRef : false,\r
1494                     edit : "view"\r
1495                 };\r
1496             };\r
1497 \r
1498         $scope.init = function() {\r
1499             if ( $scope.selectedRule ) {\r
1500                 $scope.selectedActionRef = null;\r
1501                 path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);\r
1502                 \r
1503                 GBPActionRefsServices.load(path, function(data){\r
1504                     $scope.list = data;\r
1505                 }, function(){\r
1506                     //TODO: error cbk\r
1507                 });\r
1508 \r
1509                 actionInstanceNamesLoad();\r
1510             }else{\r
1511                 clear();\r
1512             }\r
1513         };\r
1514 \r
1515         $scope.save = function(){\r
1516             if($scope.validateForm($scope.actionRefForm)){\r
1517                 path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.newActionRefObj.name);\r
1518                 GBPActionRefsServices.send(path, $scope.newActionRefObj, function(data){\r
1519                     $scope.init();\r
1520                     $scope.internalView.actionRef = false;\r
1521                     $scope.reloadNewObj();\r
1522                     $scope.internalView.edit = "view";\r
1523                 }, function(){\r
1524                     //TODO: error cbk\r
1525                 });\r
1526             }\r
1527         };\r
1528 \r
1529         $scope.delete = function() {\r
1530             if ( $scope.selectedActionRef ) {\r
1531                 path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.selectedActionRef.name);\r
1532                 GBPActionRefsServices.delete(path, function(data){\r
1533                     $scope.init();\r
1534                     $scope.selectedActionRef = null;\r
1535                 }, function(){\r
1536                     //TODO: error cbk\r
1537                 });\r
1538             }\r
1539         };\r
1540 \r
1541         $scope.reloadNewObj = function() {\r
1542             $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
1543         };\r
1544 \r
1545         $scope.reload = function(selectedObj) {\r
1546             $scope.selectedActionRef = selectedObj;\r
1547             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1548             if(selectedObj){\r
1549                 $scope.internalView.actionRef = true;\r
1550             }else {\r
1551                 $scope.internalView.actionRef = false;\r
1552                 $scope.internalView.edit = "view";\r
1553             }\r
1554 \r
1555             if($scope.internalView.actionRef) {\r
1556                 angular.copy(selectedObj, $scope.newActionRefObj);\r
1557             }\r
1558         };\r
1559 \r
1560         $scope.showForm = function() {\r
1561             $scope.reloadNewObj();\r
1562             $scope.internalView.actionRef = true;\r
1563             $scope.internalView.edit = "add";\r
1564             $scope.selectedActionRef = null;\r
1565         };\r
1566 \r
1567         $scope.close = function(){\r
1568             $scope.internalView.actionRef = false;\r
1569             $scope.internalView.edit = "view";\r
1570         };\r
1571 \r
1572         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1573             if (!event.defaultPrevented) {\r
1574                 if ( $scope.selectedActionRef ) {\r
1575                     $scope.internalView.actionRef = true;\r
1576                     $scope.internalView.edit = "edit";\r
1577                     angular.copy($scope.selectedActionRef, $scope.newActionRefObj);\r
1578                 }\r
1579                 event.defaultPrevented = true;\r
1580             }\r
1581         });\r
1582 \r
1583         $scope.$on('GBP_RULE_RELOAD',function(){\r
1584             $scope.internalView.actionRef = false;\r
1585             $scope.init();\r
1586         });\r
1587 \r
1588         $scope.$on('GBP_ACTION_INSTANCE_RELOAD',function(){\r
1589             actionInstanceNamesLoad();\r
1590         });\r
1591     }]);\r
1592 \r
1593     gbp.register.controller('classifierRefCtrl', ['$scope','GBPClassifierRefsServices', 'GBPClassifierInstanceServices', '$filter', function($scope, GBPClassifierRefsServices, GBPClassifierInstanceServices, $filter){\r
1594         $scope.list = [];\r
1595         $scope.selectedClassifierRef = null;\r
1596         $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
1597         $scope.displayLabel = 'name';\r
1598         $scope.internalView = {\r
1599             classifierRef : false,\r
1600             edit : "view"\r
1601         };\r
1602 \r
1603         $scope.instanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
1604 \r
1605         $scope.formDirections = ['in', 'out', 'bidirectional'];\r
1606         $scope.formConnectionTracking = ['normal', 'reflexive'];\r
1607 \r
1608         $scope.crudLabel = 'Classifier ref list';\r
1609 \r
1610         var path = null,\r
1611 \r
1612             instanceNamesLoad = function() {\r
1613                 var classifierInstancePath = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id);\r
1614                 GBPClassifierInstanceServices.load(classifierInstancePath, function(data){\r
1615                     $scope.instanceNames.options = data;\r
1616                 },function(){\r
1617                     //TODO: error cbk\r
1618                 });\r
1619             },\r
1620 \r
1621             clear = function(){\r
1622                 $scope.list = [];\r
1623                 $scope.selectedClassifierRef = null;\r
1624                 $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
1625                 $scope.internalView = {\r
1626                     classifierRef : false,\r
1627                     edit : "view"\r
1628                 };\r
1629             };\r
1630 \r
1631         $scope.init = function() {\r
1632             if ( $scope.selectedRule ) {\r
1633                 $scope.selectedClassifierRef = null;\r
1634                 path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);\r
1635                 \r
1636 \r
1637 \r
1638                 GBPClassifierRefsServices.load(path, function(data){\r
1639                     $scope.list = data;\r
1640                 }, function(){\r
1641                     //TODO: error cbk\r
1642                 });\r
1643 \r
1644                 instanceNamesLoad();\r
1645             }else{\r
1646                 clear();\r
1647             }\r
1648         };\r
1649 \r
1650         $scope.save = function(){\r
1651             if($scope.validateForm($scope.classifierRefForm)){\r
1652                 path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.newClassifierRefObj.name);\r
1653                 GBPClassifierRefsServices.send(path, $scope.newClassifierRefObj, function(data){\r
1654                     $scope.init();\r
1655                     $scope.internalView.classifierRef = false;\r
1656                     $scope.reloadNewObj();\r
1657                     $scope.internalView.edit = "view";\r
1658                 }, function(){\r
1659                     //TODO: error cbk\r
1660                 });\r
1661             }\r
1662         };\r
1663 \r
1664         $scope.delete = function() {\r
1665             if ( $scope.selectedClassifierRef ) {\r
1666                 path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.selectedClassifierRef.name);\r
1667                 GBPClassifierRefsServices.delete(path, function(data){\r
1668                     $scope.init();\r
1669                     $scope.selectedClassifierRef = null;\r
1670                 }, function(){\r
1671                     //TODO: error cbk\r
1672                 });\r
1673             }\r
1674         };\r
1675 \r
1676         $scope.reloadNewObj = function() {\r
1677             $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
1678         };\r
1679 \r
1680         $scope.reload = function(selectedObj) {\r
1681             $scope.selectedClassifierRef = selectedObj;\r
1682             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1683             if(selectedObj){\r
1684                 $scope.internalView.classifierRef = true;\r
1685             }else {\r
1686                 $scope.internalView.classifierRef = false;\r
1687                 $scope.internalView.edit = "view";\r
1688             }\r
1689 \r
1690             if($scope.internalView.classifierRef) {\r
1691                 angular.copy(selectedObj, $scope.newClassifierRefObj);\r
1692             }\r
1693         };\r
1694 \r
1695         $scope.showForm = function() {\r
1696             $scope.reloadNewObj();\r
1697             $scope.internalView.classifierRef = true;\r
1698             $scope.internalView.edit = "add";\r
1699             $scope.selectedClassifierRef = null;\r
1700         };\r
1701 \r
1702         $scope.close = function(){\r
1703             $scope.internalView.classifierRef = false;\r
1704             $scope.internalView.edit = "view";\r
1705         };\r
1706 \r
1707         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1708             if (!event.defaultPrevented) {\r
1709                 if ( $scope.selectedClassifierRef ) {\r
1710                     $scope.internalView.classifierRef = true;\r
1711                     $scope.internalView.edit = "edit";\r
1712                     angular.copy($scope.selectedClassifierRef, $scope.newClassifierRefObj);\r
1713                 }\r
1714                 event.defaultPrevented = true;\r
1715             }\r
1716         });\r
1717 \r
1718         $scope.$on('GBP_RULE_RELOAD',function(){\r
1719             $scope.internalView.classifierRef = false;\r
1720             $scope.init();\r
1721         });\r
1722 \r
1723         $scope.$on('GBP_CLASSIFIER_INSTANCE_RELOAD',function(){\r
1724             instanceNamesLoad();\r
1725         });\r
1726     }]);\r
1727 \r
1728     gbp.register.controller('tenantCtrl', ['$scope', 'GBPTenantServices', '$filter', function($scope, GBPTenantServices, $filter){ \r
1729         $scope.list = [];\r
1730         $scope.selectedTenantObj = null;\r
1731         $scope.newTenantObj = GBPTenantServices.createObj();\r
1732         $scope.displayLabel = ['name' , 'id'];\r
1733         $scope.crudLabel = 'Tenants list';\r
1734 \r
1735         $scope.view = {\r
1736             tenant: false,\r
1737             edit: "view"\r
1738         };\r
1739 \r
1740         $scope.init = function() {\r
1741             GBPTenantServices.load(\r
1742                 function(data) {\r
1743                     $scope.list = data;\r
1744                     $scope.newTenantObj = GBPTenantServices.createObj();\r
1745                     $scope.selectedTenantObj = null;\r
1746                 },\r
1747                 function(){\r
1748                     //TODO error\r
1749                 });\r
1750         };\r
1751 \r
1752         $scope.save = function(){\r
1753             if($scope.validateForm($scope.tenantForm)){\r
1754                 path = GBPTenantServices.createPathObj($scope.newTenantObj.id);\r
1755                 GBPTenantServices.send(path, $scope.newTenantObj, function(data){\r
1756                     $scope.init();\r
1757                     $scope.view.tenant = false;\r
1758                     $scope.view.edit = "view";\r
1759                     $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');\r
1760                 }, function(){\r
1761                     //TODO: error cbk\r
1762                 });\r
1763             }\r
1764         };\r
1765 \r
1766          $scope.delete = function() {\r
1767             if($scope.selectedTenantObj) {\r
1768                 path = GBPTenantServices.createPathObj($scope.selectedTenantObj.id);\r
1769 \r
1770                 GBPTenantServices.delete(path, function(data){\r
1771                     $scope.init();\r
1772                     $scope.view.tenant = false;\r
1773                     $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');\r
1774                 }, function(){\r
1775                     //TODO: error cbk\r
1776                 });\r
1777             }\r
1778         };\r
1779 \r
1780         $scope.reload = function(selectedObj) {\r
1781             $scope.selectedTenantObj = selectedObj;\r
1782 \r
1783             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
1784             if(selectedObj){\r
1785                 $scope.view.tenant = true;\r
1786             }\r
1787             else {\r
1788                 $scope.view.tenant = false;\r
1789                 $scope.view.edit = "view";\r
1790             }\r
1791 \r
1792             if ($scope.view.tenant) {\r
1793                 angular.copy(selectedObj, $scope.newTenantObj);\r
1794             }\r
1795         };\r
1796 \r
1797         $scope.showForm = function() {\r
1798             $scope.newTenantObj = GBPTenantServices.createObj();\r
1799             $scope.selectedTenantObj = null;\r
1800             $scope.view.tenant = true;\r
1801             $scope.view.edit = "add";\r
1802         };\r
1803 \r
1804         $scope.close = function(){\r
1805             $scope.view.tenant = false;\r
1806             $scope.view.edit = "view";\r
1807         };\r
1808 \r
1809        $scope.$on('PGN_EDIT_ELEM', function(event){\r
1810             if (!event.defaultPrevented) {\r
1811                 if ( $scope.selectedTenantObj ) {\r
1812                     $scope.view.tenant = true;\r
1813                     $scope.view.edit = "edit";\r
1814                     angular.copy($scope.selectedTenantObj, $scope.newTenantObj);\r
1815                 }\r
1816                 event.defaultPrevented = true;\r
1817             }\r
1818         });\r
1819 \r
1820         $scope.$on('GBP_GLOBAL_TENANT_RELOAD',function(){\r
1821             $scope.init();\r
1822         });\r
1823     }]);\r
1824 \r
1825     gbp.register.controller('epgCtrl',['$scope', 'GBPEpgServices', 'GBPContractServices', '$filter',\r
1826         function($scope, GBPEpgServices, GBPContractServices, $filter){\r
1827         $scope.selectedEpg = null;\r
1828         $scope.newEpgObj = GBPEpgServices.createObj();\r
1829         $scope.displayLabel = ['name', 'id'];\r
1830         $scope.crudLabel = 'Group list';\r
1831 \r
1832         $scope.igpOpts = ['allow', 'require-contract'];\r
1833 \r
1834         $scope.contracts = {'options' : [], 'labels' : null};\r
1835         $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contracts);\r
1836 \r
1837         $scope.list = [];\r
1838 \r
1839         $scope.internalView = {\r
1840             epg: false,\r
1841             edit: "view"\r
1842         };\r
1843 \r
1844         var loadContracts = function() {\r
1845                 GBPContractServices.load(path, function(data){\r
1846                     $scope.contracts.options = data;\r
1847                 }, function(){\r
1848                     //TODO: error cbk\r
1849                 });\r
1850             },\r
1851 \r
1852             mandatoryProperties = ['name'],\r
1853 \r
1854             clear = function(){\r
1855                 $scope.list = [];\r
1856                 $scope.selectedEpg = null;\r
1857                 $scope.newEpgObj = GBPEpgServices.createObj();\r
1858                  $scope.internalView = {\r
1859                     epg: false,\r
1860                     edit: "view"\r
1861                 };\r
1862             };\r
1863 \r
1864         $scope.init = function() {\r
1865             if ($scope.selectedTenant) {\r
1866                 path = GBPEpgServices.createPathObj($scope.selectedTenant.id);\r
1867                 \r
1868                 GBPEpgServices.load(path, function(data){\r
1869                     $scope.list = data;\r
1870                     // $scope.$broadcast('GBP_EPG_RELOAD');\r
1871                     $scope.sendReloadEventFromRoot('GBP_EPG_RELOAD');\r
1872                 }, function(){\r
1873                     //TODO: error cbk\r
1874                 });\r
1875 \r
1876                 loadContracts();\r
1877             }else{\r
1878                 clear();\r
1879             }\r
1880         };\r
1881 \r
1882         $scope.save = function(){\r
1883             if($scope.validateForm($scope.epgForm)){\r
1884                 path = GBPEpgServices.createPathObj($scope.selectedTenant.id, $scope.newEpgObj.id);\r
1885                 GBPEpgServices.send(path, $scope.newEpgObj, function(data){\r
1886                     $scope.init();\r
1887                     $scope.internalView.epg = false;\r
1888                     $scope.reloadNewObj();\r
1889                     $scope.internalView.edit = "view";\r
1890                     $scope.reloadTopo();\r
1891                 }, function(){\r
1892                     //TODO: error cbk\r
1893                 });\r
1894             }\r
1895         };\r
1896 \r
1897         $scope.delete = function() {\r
1898             if($scope.selectedTenant && $scope.selectedEpg) {\r
1899                 path = GBPEpgServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);\r
1900                 GBPEpgServices.delete(path, function(data){\r
1901                     $scope.init();\r
1902                     $scope.internalView.epg = false;\r
1903                     $scope.reloadTopo();\r
1904                 }, function(){\r
1905                     //TODO: error cbk\r
1906                 });\r
1907             }\r
1908         };\r
1909 \r
1910         $scope.showForm = function() {\r
1911             $scope.internalView.epg = true;\r
1912             $scope.reloadNewObj();\r
1913             $scope.selectedEpg = null;\r
1914             $scope.internalView.edit = "add";\r
1915         };\r
1916 \r
1917         $scope.reloadNewObj = function() {\r
1918             $scope.newEpgObj = GBPEpgServices.createObj();\r
1919         };\r
1920 \r
1921         $scope.reload = function(selectedObj) {\r
1922             $scope.selectedEpg = selectedObj;\r
1923             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
1924             if(selectedObj){\r
1925                 $scope.internalView.epg = true;\r
1926             }else {\r
1927                 $scope.internalView.epg = false;\r
1928                 $scope.internalView.edit = "view";\r
1929             }\r
1930 \r
1931             if($scope.internalView.epg) {\r
1932                 angular.copy(selectedObj, $scope.newEpgObj);\r
1933             }\r
1934             $scope.sendReloadEventFromRoot('GBP_EPG_RELOAD');\r
1935         };\r
1936 \r
1937         $scope.close = function(){\r
1938             $scope.internalView.epg = false;\r
1939             $scope.internalView.edit = "view";\r
1940         };\r
1941         $scope.$on('PGN_EDIT_ELEM', function(event){\r
1942             if (!event.defaultPrevented) {\r
1943                 if ( $scope.selectedEpg ) {\r
1944                     $scope.internalView.epg = true;\r
1945                     $scope.internalView.edit = "edit";\r
1946                     angular.copy($scope.selectedEpg, $scope.newEpgObj);\r
1947                 }\r
1948                 event.defaultPrevented = true;\r
1949             }\r
1950         });\r
1951 \r
1952         $scope.$on('GBP_TENANT_RELOAD',function(){\r
1953             $scope.init();\r
1954         });\r
1955 \r
1956         $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
1957             loadContracts();\r
1958         });\r
1959 \r
1960         $scope.$on('GBP_EPG_LABEL', function(event, obj){\r
1961             obj.labels = $scope.displayLabel;\r
1962         });\r
1963     }]);\r
1964 \r
1965     gbp.register.controller('cnsCtrl',['$scope', 'GBPConNamedSelServices', function($scope, GBPConNamedSelServices){\r
1966         $scope.list = [];\r
1967         $scope.selectedCNS = null;\r
1968         $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
1969         $scope.internalView = {\r
1970             cns: false,\r
1971             edit: "view"\r
1972         };\r
1973         $scope.displayLabel = 'name';\r
1974         $scope.crudLabel = 'Consumer named selectors list';\r
1975 \r
1976         var clear = function(){\r
1977                 $scope.list = [];\r
1978                 $scope.selectedCNS = null;\r
1979                 $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
1980                 $scope.internalView = {\r
1981                     cns: false,\r
1982                     edit: "view"\r
1983                 };\r
1984             };\r
1985 \r
1986         //move to separate ctrl \/\r
1987         $scope.addNewElem = function(templateObj) {\r
1988             if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
1989                 var objToPush = templateObj || "";\r
1990                 $scope.newCNSObj.contract.push(objToPush);\r
1991             }\r
1992         };\r
1993 \r
1994         $scope.deleteElemAt = function(index) {\r
1995             if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
1996                 $scope.newCNSObj.contract.splice(index, 1);\r
1997             }\r
1998         };\r
1999 \r
2000         $scope.updateAt = function(index, value) {\r
2001             if($scope.newCNSObj && $scope.newCNSObj.contract && $scope.newCNSObj.contract.length >= index) {\r
2002                 $scope.newCNSObj.contract[index] = value;\r
2003             }\r
2004         };\r
2005         //move to separate ctrl /\\r
2006 \r
2007         $scope.init = function() {\r
2008             if ($scope.selectedTenant && $scope.selectedEpg) {\r
2009                 path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);\r
2010 \r
2011                 GBPConNamedSelServices.load(path, function(data){\r
2012                     $scope.list = data;\r
2013                 }, function(){\r
2014                     //TODO: error cbk\r
2015                 });\r
2016             }else{\r
2017                 clear();\r
2018             }\r
2019         };\r
2020 \r
2021         $scope.save = function(){\r
2022             if($scope.validateForm($scope.cnsForm)){\r
2023                 path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.newCNSObj.name);\r
2024                 GBPConNamedSelServices.send(path, $scope.newCNSObj, function(data){\r
2025                     $scope.init();\r
2026                     $scope.internalView.cns = false;\r
2027                     $scope.internalView.cns = "view";\r
2028                     $scope.reloadNewObj();\r
2029                     $scope.reloadTopo();\r
2030                 }, function(){\r
2031                     //TODO: error cbk\r
2032                 });\r
2033             }\r
2034         };\r
2035 \r
2036         $scope.delete = function() {\r
2037             if($scope.selectedTenant && $scope.selectedEpg && $scope.selectedCNS) {\r
2038                 path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.selectedCNS.name);\r
2039                 GBPConNamedSelServices.delete(path, function(data){\r
2040                     $scope.init();\r
2041                     $scope.reloadTopo();\r
2042                 }, function(){\r
2043                     //TODO: error cbk\r
2044                 });\r
2045             }\r
2046         };\r
2047 \r
2048         $scope.showForm = function() {\r
2049             $scope.reloadNewObj();\r
2050             $scope.selectedCNS = null;\r
2051             $scope.internalView.cns = true;\r
2052             $scope.internalView.edit = "add";\r
2053         };\r
2054 \r
2055         $scope.reloadNewObj = function() {\r
2056             $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
2057         };\r
2058 \r
2059         $scope.reload = function(selectedObj) {\r
2060             $scope.selectedCNS = selectedObj;\r
2061             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
2062             if(selectedObj){\r
2063                 $scope.internalView.cns = true;\r
2064             }else {\r
2065                 $scope.internalView.cns = false;\r
2066                 $scope.internalView.edit = "view";\r
2067             }\r
2068 \r
2069             if($scope.internalView.cns) {\r
2070                 angular.copy(selectedObj, $scope.newCNSObj);\r
2071             }\r
2072         };\r
2073 \r
2074         $scope.close = function(){\r
2075             $scope.internalView.cns = false;\r
2076             $scope.internalView.edit = "view";\r
2077         };\r
2078 \r
2079         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2080             if (!event.defaultPrevented) {\r
2081                 if ( $scope.selectedEpg ) {\r
2082                     $scope.internalView.cns = true;\r
2083                     $scope.internalView.edit = "add";\r
2084                     angular.copy($scope.selectedCNS, $scope.newCNSObj);\r
2085                 }\r
2086                 event.defaultPrevented = true;\r
2087             }\r
2088         });\r
2089 \r
2090         $scope.$on('GBP_EPG_RELOAD',function(){\r
2091             $scope.init();\r
2092         });\r
2093     }]);\r
2094 \r
2095     gbp.register.controller('pnsCtrl',['$scope', 'GBPProNamedSelServices', function($scope, GBPProNamedSelServices){\r
2096         $scope.list = [];\r
2097         $scope.selectedPNS = null;\r
2098         $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
2099         $scope.displayLabel = 'name';\r
2100         $scope.crudLabel = 'Provider named selectors list';\r
2101         $scope.internalView = {\r
2102             pns: false,\r
2103             edit: "view"\r
2104         };\r
2105 \r
2106         var clear = function(){\r
2107                 $scope.list = [];\r
2108                 $scope.selectedPNS = null;\r
2109                 $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
2110                 $scope.internalView = {\r
2111                     pns: false,\r
2112                     edit: "view"\r
2113                 };\r
2114             };\r
2115 \r
2116         //move to separate ctrl \/\r
2117         $scope.addNewElem = function(templateObj) {\r
2118             if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
2119                 var objToPush = templateObj || "";\r
2120                 $scope.newPNSObj.contract.push(objToPush);\r
2121             }\r
2122         };\r
2123 \r
2124         $scope.deleteElemAt = function(index) {\r
2125             if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
2126                 $scope.newPNSObj.contract.splice(index, 1);\r
2127             }\r
2128         };\r
2129 \r
2130         $scope.updateAt = function(index, value) {\r
2131             if($scope.newPNSObj && $scope.newPNSObj.contract && $scope.newPNSObj.contract.length >= index) {\r
2132                 $scope.newPNSObj.contract[index] = value;\r
2133             }\r
2134         };\r
2135         //move to separate ctrl /\\r
2136 \r
2137         $scope.init = function() {\r
2138             if ($scope.selectedTenant && $scope.selectedEpg) {\r
2139                 path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);\r
2140                 \r
2141                 GBPProNamedSelServices.load(path, function(data){\r
2142                     $scope.list = data;\r
2143                 }, function(){\r
2144                     //TODO: error cbk\r
2145                 });\r
2146             }else{\r
2147                 clear();\r
2148             }\r
2149         };\r
2150 \r
2151         $scope.save = function(){\r
2152             if($scope.validateForm($scope.pnsForm)){\r
2153                 path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.newPNSObj.name);\r
2154                 GBPProNamedSelServices.send(path, $scope.newPNSObj, function(data){\r
2155                     $scope.init();\r
2156                     $scope.internalView.pns = false;\r
2157                     $scope.reloadNewObj();\r
2158                     $scope.internalView.cns = "view";\r
2159                     $scope.reloadTopo();\r
2160                 }, function(){\r
2161                     //TODO: error cbk\r
2162                 });\r
2163             }\r
2164         };\r
2165 \r
2166         $scope.delete = function() {\r
2167             if($scope.selectedTenant && $scope.selectedEpg && $scope.selectedPNS) {\r
2168                 path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.selectedPNS.name);\r
2169                 GBPProNamedSelServices.delete(path, function(data){\r
2170                     $scope.init();\r
2171                     $scope.reloadTopo();\r
2172                 }, function(){\r
2173                     //TODO: error cbk\r
2174                 });\r
2175             }\r
2176         };\r
2177 \r
2178         $scope.showForm = function() {\r
2179             $scope.reloadNewObj();\r
2180             $scope.internalView.pns = true;\r
2181             $scope.internalView.edit = "add";\r
2182             $scope.selectedPNS = null;\r
2183         };\r
2184 \r
2185         $scope.reloadNewObj = function() {\r
2186             $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
2187         };\r
2188 \r
2189         $scope.reload = function(selectedObj) {\r
2190             $scope.selectedPNS = selectedObj;\r
2191             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
2192             if(selectedObj){\r
2193                 $scope.internalView.pns = true;\r
2194             }else {\r
2195                 $scope.internalView.pns = false;\r
2196                 $scope.internalView.edit = "view";\r
2197             }\r
2198             \r
2199             if($scope.internalView.pns) {\r
2200                 angular.copy(selectedObj, $scope.newPNSObj);\r
2201             }\r
2202         };\r
2203 \r
2204         $scope.close = function(){\r
2205             $scope.internalView.pns = false;\r
2206             $scope.internalView.edit = "view";\r
2207         };\r
2208         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2209             if (!event.defaultPrevented) {\r
2210                 if ( $scope.selectedEpg ) {\r
2211                     $scope.internalView.pns = true;\r
2212                     $scope.internalView.edit = "edit";\r
2213                     angular.copy($scope.selectedPNS, $scope.newPNSObj);\r
2214                 }\r
2215                 event.defaultPrevented = true;\r
2216             }\r
2217         });\r
2218 \r
2219         $scope.$on('GBP_EPG_RELOAD',function(){\r
2220             $scope.init();\r
2221         });\r
2222     }]);\r
2223 \r
2224     gbp.register.controller('l2FloodCtrl', ['$scope', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', '$filter', function($scope, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, $filter){ \r
2225         $scope.list = [];\r
2226         $scope.selectedL2Flood = null;\r
2227         $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
2228         $scope.displayLabel = ['name', 'id'];\r
2229         $scope.crudLabel = 'L2 Flood Domain list';\r
2230 \r
2231         $scope.l2bridge = {'options' : [], 'labels' : null};\r
2232         $scope.getDisplayLabelsFromCtrl('GBP_L2BRIDGE_LABEL', $scope.l2bridge);\r
2233 \r
2234         $scope.view = {\r
2235             l2flood: false,\r
2236             edit: "view"\r
2237         };\r
2238 \r
2239         var path = null,\r
2240 \r
2241             loadL2BridgeList = function() {\r
2242                 GBPL2BridgeDomainServices.load(GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id), function(data){\r
2243                     $scope.l2bridge.options = data;\r
2244                 }, function(){\r
2245 \r
2246                 });\r
2247             },\r
2248 \r
2249             clear = function(){\r
2250                 $scope.list = [];\r
2251                 $scope.selectedL2Flood = null;\r
2252                 $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
2253                 $scope.view = {\r
2254                     l2flood: false,\r
2255                     edit: "view"\r
2256                 };\r
2257             };\r
2258 \r
2259         $scope.init = function() {\r
2260             if ( $scope.selectedTenant ) {\r
2261                 path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);\r
2262                 \r
2263                 GBPL2FloodDomainServices.load(path, function(data){\r
2264                     $scope.list = data;\r
2265                     // clear objects\r
2266                     $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
2267                     $scope.selectedL2Flood = null;\r
2268                 }, function(){\r
2269 \r
2270                 });\r
2271 \r
2272                 loadL2BridgeList();\r
2273             }else{\r
2274                 clear();\r
2275             }\r
2276         };\r
2277 \r
2278         $scope.save = function(){\r
2279             if($scope.validateForm($scope.l2FloodForm)){\r
2280                 path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id, $scope.newL2FloodObj.id);\r
2281                 GBPL2FloodDomainServices.send(path, $scope.newL2FloodObj, function(data){\r
2282                     $scope.init();\r
2283                     $scope.view.l2flood = false;\r
2284                     $scope.view.edit = "view";\r
2285                     $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');\r
2286 \r
2287                     $scope.reloadTopo();\r
2288                 }, function(){\r
2289                     //TODO: error cbk\r
2290                 });\r
2291             }\r
2292         };\r
2293 \r
2294         $scope.delete = function() {\r
2295             if($scope.selectedTenant && $scope.selectedL2Flood) {\r
2296                 path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id, $scope.selectedL2Flood.id);\r
2297                 GBPL2FloodDomainServices.delete(path, function(data){\r
2298                     $scope.init();\r
2299                     $scope.view.l2flood = false;\r
2300                     $scope.view.edit = "view";\r
2301                     $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');\r
2302 \r
2303                     $scope.reloadTopo();\r
2304                 }, function(){\r
2305                     //TODO: error cbk\r
2306                 });\r
2307             }\r
2308         };\r
2309 \r
2310         $scope.reload = function(selectedObj) {\r
2311             $scope.selectedL2Flood = selectedObj;\r
2312 \r
2313             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
2314             if(selectedObj){\r
2315                 $scope.view.l2flood = true;\r
2316             }\r
2317             else {\r
2318                 $scope.view.l2flood = false;\r
2319                 $scope.view.edit = "view";\r
2320             }\r
2321 \r
2322             if ($scope.view.l2flood) {\r
2323                 angular.copy(selectedObj, $scope.newL2FloodObj);\r
2324             }\r
2325 \r
2326             $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');\r
2327         };\r
2328 \r
2329         $scope.showForm = function() {\r
2330             $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
2331             $scope.selectedL2Flood = null;\r
2332             $scope.view.l2flood = true;\r
2333             $scope.view.edit = "add";\r
2334         };\r
2335 \r
2336         $scope.close = function(){\r
2337             $scope.view.l2flood = false;\r
2338         };\r
2339 \r
2340         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2341             if (!event.defaultPrevented) {\r
2342                 if ( $scope.selectedL2Flood ) {\r
2343                     $scope.view.l2flood = true;\r
2344                     $scope.view.edit = "edit";\r
2345                     angular.copy($scope.selectedL2Flood, $scope.newL2FloodObj);\r
2346                 }\r
2347                 event.defaultPrevented = true;\r
2348             }\r
2349         });\r
2350 \r
2351         $scope.$on('GBP_TENANT_RELOAD',function(){\r
2352             $scope.init();\r
2353         });\r
2354 \r
2355         $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
2356             loadL2BridgeList();\r
2357         });\r
2358 \r
2359         $scope.$on('GBP_L2FLOOD_LABEL', function(event, obj){\r
2360             obj.labels = $scope.displayLabel;\r
2361         });\r
2362     }]);\r
2363 \r
2364     gbp.register.controller('l2BridgeCtrl', ['$scope', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', '$filter', function($scope, GBPL2BridgeDomainServices, GBPL3ContextServices, $filter){ \r
2365         $scope.list = [];\r
2366         $scope.selectedL2Bridge = null;\r
2367         $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
2368         $scope.displayLabel = ['name', 'id'];\r
2369         $scope.crudLabel = 'L2 Bridge Domain list';\r
2370 \r
2371         $scope.l3context = {'options' : [], 'labels' : null};\r
2372         $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);\r
2373 \r
2374         $scope.view = {\r
2375             l2bridge: false,\r
2376             edit: "view"\r
2377         };\r
2378 \r
2379         var path = null,\r
2380 \r
2381             loadL3ContextList = function() {\r
2382                 GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){\r
2383                     $scope.l3context.options = data;\r
2384                     //$scope.$broadcast('GBP_L2BRIDGE_RELOAD');\r
2385                 }, function(){\r
2386 \r
2387                 });\r
2388             },\r
2389 \r
2390             clear = function(){\r
2391                 $scope.list = [];\r
2392                 $scope.selectedL2Bridge = null;\r
2393                 $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
2394                 $scope.view = {\r
2395                     l2bridge: false,\r
2396                     edit: "view"\r
2397                 };\r
2398             };\r
2399 \r
2400         $scope.init = function() {\r
2401             if ( $scope.selectedTenant ) {\r
2402                 path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);\r
2403                 \r
2404                 GBPL2BridgeDomainServices.load(path, function(data){\r
2405                     $scope.list = data;\r
2406                     $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
2407                     $scope.selectedL2Bridge = null;\r
2408                     // $scope.$broadcast('GBP_L2BRIDGE_RELOAD');\r
2409                 }, function(){\r
2410 \r
2411                 });\r
2412 \r
2413                 loadL3ContextList();\r
2414             }else{\r
2415                 clear();\r
2416             }\r
2417         };\r
2418 \r
2419 \r
2420 \r
2421         $scope.save = function(){\r
2422             if($scope.validateForm($scope.l2BridgeForm)){\r
2423                 path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id, $scope.newL2BridgeObj.id);\r
2424                 GBPL2BridgeDomainServices.send(path, $scope.newL2BridgeObj, function(data){\r
2425                     $scope.init();\r
2426                     $scope.view.l2bridge = false;\r
2427                     $scope.view.edit = "view";\r
2428                     $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
2429 \r
2430                     $scope.reloadTopo();\r
2431                 }, function(){\r
2432                     //TODO: error cbk\r
2433                 });\r
2434             }\r
2435         };\r
2436 \r
2437         $scope.delete = function() {\r
2438             if($scope.selectedTenant && $scope.selectedL2Bridge) {\r
2439                 path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id, $scope.selectedL2Bridge.id);\r
2440                 GBPL2BridgeDomainServices.delete(path, function(data){\r
2441                     $scope.init();\r
2442                     $scope.view.l2bridge = false;\r
2443                     $scope.view.edit = "view";\r
2444                     $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
2445 \r
2446                     $scope.reloadTopo();\r
2447                 }, function(){\r
2448                     //TODO: error cbk\r
2449                 });\r
2450             }\r
2451         };\r
2452 \r
2453         $scope.reload = function(selectedObj) {\r
2454             $scope.selectedL2Bridge = selectedObj;\r
2455 \r
2456             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
2457             if(selectedObj){\r
2458                 $scope.view.l2bridge = true;\r
2459             }\r
2460             else {\r
2461                 $scope.view.l2bridge = false;\r
2462                 $scope.view.edit = "view";\r
2463             }\r
2464 \r
2465             if ($scope.view.l2bridge) {\r
2466                 angular.copy(selectedObj, $scope.newL2BridgeObj);\r
2467             }\r
2468 \r
2469             $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
2470         };\r
2471 \r
2472         $scope.showForm = function() {\r
2473             $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
2474             $scope.selectedL2Bridge = null;\r
2475             $scope.view.l2bridge = true;\r
2476             $scope.view.edit = "add";\r
2477         };\r
2478 \r
2479         $scope.close = function(){\r
2480             $scope.view.l2bridge = false;\r
2481         };\r
2482 \r
2483         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2484             if (!event.defaultPrevented) {\r
2485                 if ( $scope.selectedL2Bridge ) {\r
2486                     $scope.view.l2bridge = true;\r
2487                     $scope.view.edit = "edit";\r
2488                     angular.copy($scope.selectedL2Bridge, $scope.newL2BridgeObj);\r
2489                 }\r
2490                 event.defaultPrevented = true;\r
2491             }\r
2492         });\r
2493 \r
2494         $scope.$on('GBP_TENANT_RELOAD',function(){\r
2495             $scope.init();\r
2496         });\r
2497 \r
2498         $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
2499             loadL3ContextList();\r
2500         });\r
2501 \r
2502         $scope.$on('GBP_L2BRIDGE_LABEL', function(event, obj){\r
2503             obj.labels = $scope.displayLabel;\r
2504         });\r
2505     }]);\r
2506 \r
2507     gbp.register.controller('l3ContextCtrl', ['$scope', 'GBPL3ContextServices', '$filter', function($scope, GBPL3ContextServices, $filter){ //GBPContractServices\r
2508         $scope.list = [];\r
2509         $scope.selectedL3Context = null;\r
2510         $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
2511         $scope.displayLabel = ['name', 'id'];\r
2512         $scope.crudLabel = 'L3 Context list';\r
2513 \r
2514         $scope.view = {\r
2515             l3context: false,\r
2516             edit: "view"\r
2517         };\r
2518 \r
2519         var path = null,\r
2520 \r
2521             clear = function(){\r
2522                 $scope.list = [];\r
2523                 $scope.view = {\r
2524                     l3context: false,\r
2525                     edit: "view"\r
2526                 };\r
2527                 $scope.selectedL3Context = null;\r
2528                 $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
2529             };\r
2530 \r
2531         $scope.init = function() {\r
2532             if ( $scope.selectedTenant ) {\r
2533                 path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id);\r
2534                 \r
2535                 GBPL3ContextServices.load(path, function(data){\r
2536                     $scope.list = data;\r
2537                     $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
2538                     $scope.selectedL3Context = null;\r
2539                 }, function(){\r
2540 \r
2541                 });\r
2542             }else{\r
2543                 clear();\r
2544             }\r
2545         };\r
2546 \r
2547         $scope.save = function(){\r
2548              if($scope.validateForm($scope.l3ContextForm)){\r
2549                 path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id, $scope.newL3ContextObj.id);\r
2550                 GBPL3ContextServices.send(path, $scope.newL3ContextObj, function(data){\r
2551                     $scope.init();\r
2552                     $scope.view.l3context = false;\r
2553                     $scope.view.edit = "view";\r
2554                     $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');\r
2555 \r
2556                     $scope.reloadTopo();\r
2557                 }, function(){\r
2558                     //TODO: error cbk\r
2559                 });\r
2560             }\r
2561         };\r
2562 \r
2563         $scope.delete = function() {\r
2564             if($scope.selectedTenant && $scope.selectedL3Context) {\r
2565                 path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id, $scope.selectedL3Context.id);\r
2566                 GBPL3ContextServices.delete(path, function(data){\r
2567                     $scope.init();\r
2568                     $scope.view.l3context = false;\r
2569                     $scope.view.edit = "view";\r
2570                     $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');\r
2571 \r
2572                     $scope.reloadTopo();\r
2573                 }, function(){\r
2574                     //TODO: error cbk\r
2575                 });\r
2576             }\r
2577         };\r
2578 \r
2579         $scope.reload = function(selectedObj) {\r
2580             $scope.selectedL3Context = selectedObj;\r
2581             \r
2582             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
2583             if(selectedObj){\r
2584                 $scope.view.l3context = true;\r
2585             }\r
2586             else {\r
2587                 $scope.view.l3context = false;\r
2588                 $scope.view.edit = "view";\r
2589             }\r
2590 \r
2591             if($scope.view.l3context) {\r
2592                 angular.copy(selectedObj, $scope.newL3ContextObj);\r
2593             }\r
2594 \r
2595             $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');\r
2596         };\r
2597 \r
2598         $scope.showForm = function() {\r
2599             $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
2600             $scope.selectedL3Context = null;\r
2601             $scope.view.l3context = true;\r
2602             $scope.view.edit = "add";\r
2603         };\r
2604 \r
2605         $scope.close = function(){\r
2606             $scope.view.l3context = false;\r
2607         };\r
2608 \r
2609         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2610             if (!event.defaultPrevented) {\r
2611                 if ( $scope.selectedL3Context ) {\r
2612                     $scope.view.l3context = true;\r
2613                     $scope.view.edit = "edit";\r
2614                     angular.copy($scope.selectedL3Context, $scope.newL3ContextObj);\r
2615                 }\r
2616                 event.defaultPrevented = true;\r
2617             }\r
2618         });\r
2619 \r
2620         $scope.$on('GBP_TENANT_RELOAD',function(){\r
2621             $scope.init();\r
2622         });\r
2623 \r
2624         $scope.$on('GBP_L3CONTEXT_LABEL', function(event, obj){\r
2625             obj.labels = $scope.displayLabel;\r
2626         });\r
2627     }]);\r
2628 \r
2629     gbp.register.controller('subnetCtrl', ['$scope', 'GBPSubnetServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', '$filter', function($scope, GBPSubnetServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, GBPL3ContextServices, $filter){ \r
2630         $scope.list = [];\r
2631         $scope.selectedSubnet = null;\r
2632         $scope.newSubnetObj = GBPSubnetServices.createObj();\r
2633         $scope.displayLabel = ['name', 'id'];\r
2634         $scope.crudLabel = 'Subnet list';\r
2635 \r
2636         $scope.l2L3List = {'options' : [], 'labels' : null};\r
2637         $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2L3List);\r
2638 \r
2639         $scope.view = {\r
2640             subnet: false,\r
2641             edit: "view"\r
2642         };\r
2643 \r
2644 \r
2645         var path = null,\r
2646 \r
2647             loadL2L3List = function() {\r
2648                 $scope.l2L3List.options = [];\r
2649 \r
2650                 GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(l3ContextData){\r
2651                     $scope.l2L3List.options = $scope.l2L3List.options.concat(l3ContextData);\r
2652                 }, function(){\r
2653 \r
2654                 });\r
2655 \r
2656                 GBPL2FloodDomainServices.load(GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id), function(l2FloodData){\r
2657                     $scope.l2L3List.options = $scope.l2L3List.options.concat(l2FloodData);\r
2658                 }, function(){\r
2659 \r
2660                 });\r
2661 \r
2662                 GBPL2BridgeDomainServices.load(GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id), function(l2BridgeData){\r
2663                     $scope.l2L3List.options = $scope.l2L3List.options.concat(l2BridgeData);\r
2664                 }, function(){\r
2665 \r
2666                 });\r
2667             },\r
2668 \r
2669             clear = function(){\r
2670                 $scope.list = [];\r
2671                 $scope.view = {\r
2672                     subnet: false,\r
2673                     edit: "view"\r
2674                 };\r
2675                 $scope.selectedSubnet = null;\r
2676                 $scope.newSubnetObj = GBPSubnetServices.createObj();\r
2677             };\r
2678 \r
2679         $scope.init = function() {\r
2680             if ( $scope.selectedTenant ) {\r
2681                 path = GBPSubnetServices.createPathObj($scope.selectedTenant.id);\r
2682                 \r
2683                 GBPSubnetServices.load(path, function(data){\r
2684                     $scope.list = data;\r
2685                     $scope.newSubnetObj = GBPSubnetServices.createObj();\r
2686                     $scope.selectedSubnet = null;\r
2687 \r
2688                     $scope.view.subnet = false;\r
2689                     $scope.view.edit = "view";\r
2690                     //$scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
2691                 }, function(){\r
2692 \r
2693                 });\r
2694 \r
2695                 loadL2L3List();\r
2696             }else{\r
2697                 clear();\r
2698             }\r
2699         };\r
2700 \r
2701         $scope.save = function(){\r
2702            if($scope.validateForm($scope.subnetForm)){\r
2703                 path = GBPSubnetServices.createPathObj($scope.selectedTenant.id, $scope.newSubnetObj.id);\r
2704                 GBPSubnetServices.send(path, $scope.newSubnetObj, function(data){\r
2705                     $scope.init();\r
2706                     $scope.view.subnet = false;\r
2707                     $scope.view.edit = "view";\r
2708 \r
2709                     $scope.reloadTopo();\r
2710                 }, function(){\r
2711                     //TODO: error cbk\r
2712                 });\r
2713             }\r
2714         };\r
2715 \r
2716         $scope.delete = function() {\r
2717             if($scope.selectedTenant && $scope.selectedSubnet) {\r
2718                 path = GBPSubnetServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id);\r
2719                 GBPSubnetServices.delete(path, function(data){\r
2720                     $scope.init();\r
2721                     $scope.view.subnet = false;\r
2722                     $scope.view.edit = "view";\r
2723 \r
2724                     $scope.reloadTopo();\r
2725                 }, function(){\r
2726                     //TODO: error cbk\r
2727                 });\r
2728             }\r
2729         };\r
2730 \r
2731         $scope.reload = function(selectedObj) {\r
2732             $scope.selectedSubnet = selectedObj;\r
2733             \r
2734             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
2735             if(selectedObj){\r
2736                 $scope.view.subnet = true;\r
2737             }\r
2738             else {\r
2739                 $scope.view.subnet = false;\r
2740                 $scope.view.edit = "view";\r
2741             }\r
2742 \r
2743             if($scope.view.subnet) {\r
2744                 angular.copy(selectedObj, $scope.newSubnetObj);\r
2745             }\r
2746 \r
2747             $scope.sendReloadEventFromRoot('GBP_SUBNET_RELOAD');\r
2748         };\r
2749 \r
2750         $scope.showForm = function() {\r
2751             $scope.newSubnetObj = GBPSubnetServices.createObj();\r
2752             $scope.selectedSubnet = null;\r
2753             $scope.view.subnet = true;\r
2754             $scope.view.edit = "add";\r
2755         };\r
2756 \r
2757         $scope.close = function(){\r
2758             $scope.view.subnet = false;\r
2759         };\r
2760 \r
2761         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2762             if (!event.defaultPrevented) {\r
2763                 if ( $scope.selectedSubnet ) {\r
2764                     $scope.view.subnet = true;\r
2765                     $scope.view.edit = "edit";\r
2766                     angular.copy($scope.selectedSubnet, $scope.newSubnetObj);\r
2767                 }\r
2768                 event.defaultPrevented = true;\r
2769             }\r
2770         });\r
2771 \r
2772         $scope.$on('GBP_TENANT_RELOAD',function(){\r
2773             $scope.init();\r
2774         });\r
2775 \r
2776         $scope.$on('GBP_GATEWAY_RELOAD',function(){\r
2777             $scope.init();\r
2778         });\r
2779         \r
2780         $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
2781             loadL2L3List();\r
2782         });\r
2783 \r
2784         $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
2785             loadL2L3List();\r
2786         });\r
2787 \r
2788         $scope.$on('GBP_L2FLOOD_RELOAD',function(){\r
2789             loadL2L3List();\r
2790         });\r
2791 \r
2792         $scope.$on('GBP_PREFIX_RELOAD',function(){\r
2793             $scope.init();\r
2794         });\r
2795     }]);\r
2796 \r
2797     gbp.register.controller('gatewayCtrl', ['$scope', 'GBPGatewayServices', function($scope, GBPGatewayServices){ \r
2798         $scope.list = [];\r
2799         $scope.gatewayView = false;\r
2800         $scope.selectedGateway = null;\r
2801         $scope.newGatewayObj = GBPGatewayServices.createObj();\r
2802         $scope.displayLabel = 'gateway';\r
2803         $scope.crudLabel = 'Gateway list';\r
2804         $scope.internalView = {\r
2805             gateway: false,\r
2806             edit: "view"\r
2807         };\r
2808 \r
2809         var path = null,\r
2810 \r
2811             clear = function(){\r
2812                 $scope.list = [];\r
2813                 $scope.gatewayView = false;\r
2814                 $scope.selectedGateway = null;\r
2815                 $scope.newGatewayObj = GBPGatewayServices.createObj();\r
2816             };\r
2817 \r
2818         $scope.init = function() {\r
2819             if ( $scope.selectedTenant && $scope.selectedSubnet ) {\r
2820                 path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id);\r
2821                 \r
2822                 GBPGatewayServices.load(path, function(data){\r
2823                     $scope.list = data;\r
2824                     $scope.newGatewayObj = GBPGatewayServices.createObj();\r
2825                     $scope.internalView.gateway = false;\r
2826                     $scope.selectedGateway = null;\r
2827                 }, function(){\r
2828 \r
2829                 });\r
2830             }else{\r
2831                 clear();\r
2832             }\r
2833         };\r
2834 \r
2835         $scope.save = function(){\r
2836             if($scope.validateForm($scope.gatewayForm)){\r
2837                 path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.newGatewayObj.gateway);\r
2838                 GBPGatewayServices.send(path, $scope.newGatewayObj, function(data){\r
2839                     $scope.init();\r
2840                     $scope.internalView.gateway = false;\r
2841                     $scope.internalView.edit = "view";\r
2842                     $scope.sendReloadEventFromRoot('GBP_GATEWAY_RELOAD');\r
2843                 }, function(){\r
2844                     //TODO: error cbk\r
2845                 });\r
2846             }\r
2847         };\r
2848 \r
2849         $scope.delete = function() {\r
2850             if($scope.selectedTenant && $scope.selectedSubnet && $scope.selectedGateway) {\r
2851                 path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway);\r
2852                 GBPGatewayServices.delete(path, function(data){\r
2853                     $scope.init();\r
2854                     $scope.internalView.gateway = false;\r
2855                     $scope.sendReloadEventFromRoot('GBP_GATEWAY_RELOAD');\r
2856                 }, function(){\r
2857                     //TODO: error cbk\r
2858                 });\r
2859             }\r
2860         };\r
2861 \r
2862         $scope.reload = function(selectedObj) {\r
2863             $scope.selectedGateway = selectedObj;\r
2864             angular.copy(selectedObj, $scope.newGatewayObj);\r
2865             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
2866             if(selectedObj){\r
2867                 $scope.internalView.gateway = true;\r
2868             }else {\r
2869                 $scope.internalView.gateway = false;\r
2870                 $scope.internalView.edit = "view";\r
2871             }\r
2872 \r
2873             $scope.sendReloadEventFromRoot('GBP_GATEWAY_SET');\r
2874         };\r
2875 \r
2876         $scope.showForm = function() {\r
2877             $scope.newGatewayObj = GBPGatewayServices.createObj();\r
2878             $scope.internalView.gateway = true;\r
2879             $scope.internalView.edit = "add";\r
2880             $scope.selectedGateway = null;\r
2881         };\r
2882 \r
2883         $scope.close = function(){\r
2884             $scope.internalView.gateway = false;\r
2885         };\r
2886 \r
2887         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2888             if (!event.defaultPrevented) {\r
2889                 if ( $scope.selectedGateway ) {\r
2890                     $scope.internalView.gateway = true;\r
2891                     $scope.internalView.edit = "edit";\r
2892                     angular.copy($scope.selectedGateway, $scope.newGatewayObj);\r
2893                 }\r
2894                 event.defaultPrevented = true;\r
2895             }\r
2896         });\r
2897 \r
2898         $scope.$on('GBP_SUBNET_RELOAD',function(){\r
2899             $scope.init();\r
2900         });\r
2901 \r
2902         $scope.$on('GBP_PREFIX_RELOAD',function(){\r
2903             $scope.init();\r
2904         });\r
2905     }]);\r
2906 \r
2907     gbp.register.controller('prefixCtrl', ['$scope', 'GBPPrefixServices', function($scope, GBPPrefixServices){ \r
2908         $scope.list = [];\r
2909         $scope.selectedPrefix = null;\r
2910         $scope.newPrefixObj = GBPPrefixServices.createObj();\r
2911         $scope.displayLabel = 'prefix';\r
2912         $scope.crudLabel = 'Prefix list';\r
2913         $scope.internalView = {\r
2914             prefix: false,\r
2915             edit: "view"\r
2916         };\r
2917 \r
2918         var path = null,\r
2919 \r
2920             clear = function(){\r
2921                 $scope.list = [];\r
2922                 $scope.selectedPrefix = null;\r
2923                 $scope.newPrefixObj = GBPPrefixServices.createObj();\r
2924                 $scope.internalView = {\r
2925                     prefix: false,\r
2926                     edit: "view"\r
2927                 };\r
2928             };\r
2929 \r
2930         $scope.init = function() {\r
2931             if ( $scope.selectedTenant && $scope.selectedSubnet && $scope.selectedGateway) {\r
2932                 path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway);\r
2933                 \r
2934                 GBPPrefixServices.load(path, function(data){\r
2935                     $scope.list = data;\r
2936                     $scope.newPrefixObj = GBPPrefixServices.createObj();\r
2937                     $scope.internalView.prefix = false;\r
2938                     $scope.selectedPrefix = null;\r
2939                 }, function(){\r
2940 \r
2941                 });\r
2942             }else{\r
2943                 clear();\r
2944             }\r
2945         };\r
2946 \r
2947         $scope.save = function(){\r
2948             if($scope.validateForm($scope.prefixForm)){\r
2949                 path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway, $scope.newPrefixObj.prefix);\r
2950                 GBPPrefixServices.send(path, $scope.newPrefixObj, function(data){\r
2951                     $scope.init();\r
2952                     $scope.internalView.prefix = false;\r
2953                     $scope.internalView.edit = "view";\r
2954                     $scope.sendReloadEventFromRoot('GBP_PREFIX_RELOAD');\r
2955                 }, function(){\r
2956                     //TODO: error cbk\r
2957                 });\r
2958             }\r
2959         };\r
2960 \r
2961         $scope.delete = function() {\r
2962             path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway, $scope.selectedPrefix.prefix);\r
2963             GBPPrefixServices.delete(path, function(data){\r
2964                 $scope.init();\r
2965                 $scope.internalView.prefix = false;\r
2966                 $scope.sendReloadEventFromRoot('GBP_PREFIX_RELOAD');\r
2967             }, function(){\r
2968                 //TODO: error cbk\r
2969             });\r
2970         };\r
2971 \r
2972         $scope.reload = function(selectedObj) {\r
2973             $scope.selectedPrefix = selectedObj;\r
2974             $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
2975             if(selectedObj){\r
2976                 $scope.internalView.prefix = true;\r
2977             }else {\r
2978                 $scope.internalView.prefix = false;\r
2979                 $scope.internalView.edit = "view";\r
2980             }\r
2981 \r
2982             angular.copy(selectedObj, $scope.newPrefixObj);\r
2983         };\r
2984 \r
2985         $scope.showForm = function() {\r
2986             $scope.newPrefixObj = GBPPrefixServices.createObj();\r
2987             $scope.internalView.prefix = true;\r
2988             $scope.internalView.edit = "add";\r
2989             $scope.selectedPrefix = null;\r
2990         };\r
2991 \r
2992         $scope.close = function(){\r
2993             $scope.internalView.prefix = false;\r
2994         };\r
2995 \r
2996         $scope.$on('PGN_EDIT_ELEM', function(event){\r
2997             if (!event.defaultPrevented) {\r
2998                 if ( $scope.selectedPrefix ) {\r
2999                     $scope.internalView.prefix = true;\r
3000                     $scope.internalView.edit = "edit";\r
3001                     angular.copy($scope.selectedPrefix, $scope.newPrefixObj);\r
3002                 }\r
3003                 event.defaultPrevented = true;\r
3004             }\r
3005         });\r
3006 \r
3007         $scope.$on('GBP_GATEWAY_SET',function(){\r
3008             $scope.init();\r
3009         });\r
3010     }]);\r
3011 \r
3012     gbp.register.controller('renderersCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){ //GBPContractServices\r
3013         $scope.classifierDefinitions = {'options' : [], 'labels' : null};\r
3014         $scope.actionDefinitions = {'options' : [], 'labels' : null};\r
3015 \r
3016         //reload on event?\r
3017 \r
3018         var loadDefinitions = function() {\r
3019             GPBServices.getDefinitions(function(classifierDefs, actionDefs) {\r
3020                 $scope.classifierDefinitions.options = classifierDefs;\r
3021                 $scope.getDisplayLabelsFromCtrl('GBP_CLASSIFIERS_LABEL', $scope.classifierDefinitions);\r
3022 \r
3023                 $scope.actionDefinitions.options = actionDefs;\r
3024                 $scope.getDisplayLabelsFromCtrl('GBP_ACTIONS_LABEL', $scope.actionDefinitions);\r
3025             });\r
3026         };\r
3027 \r
3028         loadDefinitions();\r
3029     }]);\r
3030 \r
3031     gbp.register.controller('paramCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){\r
3032         $scope.value = null;\r
3033 \r
3034         $scope.init = function(param, paramValues) {\r
3035             $scope.parameter = param;\r
3036 \r
3037             if(paramValues) {\r
3038                 paramValues.forEach(function(p) {\r
3039                     if($scope.parameter.name === p.name) {\r
3040                         $scope.value = GPBServices.getInstanceParamValue(p);\r
3041                     }\r
3042                 });\r
3043             }\r
3044         };\r
3045 \r
3046         $scope.$on('GBP_SAVE_PARAM', function(event){\r
3047             if($scope.value !== '' && $scope.value !== null) {\r
3048                 $scope.addParam($scope.parameter.name, $scope.parameter.type, $scope.value);\r
3049             }\r
3050         });\r
3051 \r
3052         $scope.$on('GBP_SET_PARAM_VALUE', function(event, name, intVal, strVal) {\r
3053             //console.info($scope.parameter, ' got GBP_SET_PARAM_VALUE', name, intVal, strVal, event);\r
3054             \r
3055         });\r
3056 \r
3057         $scope.$on('GBP_RESET_PARAM', function(event){\r
3058             $scope.value = null;\r
3059         });\r
3060     }]);\r
3061 \r
3062     gbp.register.controller('classifiersCtrl', ['$scope', 'GBPClassifierInstanceServices', 'GPBServices', '$filter',\r
3063         function($scope, GBPClassifierInstanceServices, GPBServices, $filter){\r
3064         $scope.list = [];\r
3065         $scope.classifiersView = false;\r
3066         $scope.displayLabel = 'name';\r
3067         $scope.selectedClassifier = null;\r
3068         $scope.crudLabel = 'Classifiers';\r
3069         $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();\r
3070         $scope.edit = "view";\r
3071 \r
3072         var mandatoryProperties = ['name'],\r
3073 \r
3074             clear = function(){\r
3075                 $scope.list = [];\r
3076                 $scope.classifiersView = false;\r
3077                 $scope.selectedClassifier = null;\r
3078                 $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();\r
3079                 $scope.edit = "view";\r
3080             };\r
3081 \r
3082         $scope.getDefinitionObjParams = function(id){\r
3083             return GPBServices.getDefinitionObjParams($scope.classifierDefinitions.options, id);\r
3084         };\r
3085 \r
3086         $scope.reloadDefs = function(){\r
3087             $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newClassifierObj['classifier-definition-id']));\r
3088         };\r
3089 \r
3090         $scope.addParam = function(name, type, value) {\r
3091             $scope.newClassifierObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));\r
3092         };\r
3093 \r
3094         var saveParams = function() {\r
3095             $scope.newClassifierObj['parameter-value'] = [];\r
3096             $scope.$broadcast('GBP_SAVE_PARAM');\r
3097         };\r
3098 \r
3099 \r
3100         $scope.init = function() {\r
3101             if ( $scope.selectedTenant ) {\r
3102                 path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id);\r
3103                 GBPClassifierInstanceServices.load(path, function(data){\r
3104                     $scope.list = data;\r
3105                     $scope.reloadDefs();\r
3106                 }, function(){\r
3107                     //TODO: error cbk\r
3108                 });\r
3109             }else{\r
3110                 clear();\r
3111             }\r
3112         };\r
3113 \r
3114         $scope.save = function(){\r
3115             if($scope.validateForm($scope.classifierForm)){\r
3116                 path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id, $scope.newClassifierObj.name);\r
3117                 saveParams();\r
3118                 GBPClassifierInstanceServices.send(path, $scope.newClassifierObj, function(data){\r
3119                     $scope.init();\r
3120                     $scope.classifiersView = false;\r
3121                     $scope.edit = "view";\r
3122                 $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');\r
3123                 }, function(){\r
3124                     //TODO: error cbk\r
3125                 });\r
3126             }\r
3127         };\r
3128 \r
3129         $scope.showForm = function() {\r
3130             $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();\r
3131             $scope.selectedClassifier = null;\r
3132             $scope.classifiersView = true;\r
3133             $scope.edit = "add";\r
3134             $scope.reloadDefs();\r
3135         };\r
3136 \r
3137         $scope.reload = function(selectedObj){\r
3138             $scope.selectedClassifier = selectedObj;\r
3139             $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');\r
3140 \r
3141             $scope.edit = $scope.edit == "edit" ? $scope.edit : "view";\r
3142             if(selectedObj){\r
3143                 $scope.classifiersView = true;\r
3144             }\r
3145             else {\r
3146                 $scope.classifiersView = false;\r
3147                 $scope.edit = "view";\r
3148             }\r
3149 \r
3150             if($scope.classifiersView) {\r
3151                 angular.copy(selectedObj, $scope.newClassifierObj);\r
3152             }\r
3153 \r
3154             $scope.reloadDefs();\r
3155         };\r
3156 \r
3157         $scope.close = function(){\r
3158             $scope.classifiersView = false;\r
3159             $scope.edit = "view";\r
3160         };\r
3161 \r
3162         $scope.$on('PGN_EDIT_ELEM', function(event){\r
3163             if (!event.defaultPrevented) {\r
3164                 if ( $scope.selectedClassifier ) {\r
3165                     $scope.classifiersView = true;\r
3166                     angular.copy($scope.selectedClassifier, $scope.newClassifierObj);\r
3167                     $scope.edit = "edit";\r
3168                     $scope.reloadDefs();\r
3169                 }\r
3170                 event.defaultPrevented = true;\r
3171             }\r
3172         });\r
3173 \r
3174         $scope.delete = function(){\r
3175             path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id, $scope.selectedClassifier.name);\r
3176             GBPClassifierInstanceServices.delete(path, function(data){\r
3177                 $scope.init();\r
3178                 $scope.classifiersView = false;\r
3179                 $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');\r
3180             }, function(){\r
3181                 //TODO: error cbk\r
3182             });\r
3183         };\r
3184 \r
3185         $scope.$on('GBP_TENANT_RELOAD',function(){\r
3186             $scope.init();\r
3187         });\r
3188 \r
3189         $scope.$on('GBP_CLASSIFIERS_LABEL', function(event, obj){\r
3190             obj.labels = $scope.displayLabel;\r
3191         });\r
3192     }]);\r
3193 \r
3194     gbp.register.controller('actionsCtrl', ['$scope', 'GBPActionInstanceServices', 'GPBServices', '$filter',\r
3195         function($scope, GBPActionInstanceServices, GPBServices, $filter){\r
3196         $scope.list = [];\r
3197         $scope.actionsView = false;\r
3198         $scope.displayLabel = 'name';\r
3199         $scope.selectedAction = null;\r
3200         $scope.crudLabel = 'Actions';\r
3201         $scope.newActionObj = GBPActionInstanceServices.createObj();\r
3202         $scope.edit = "view";\r
3203 \r
3204         var mandatoryProperties = ['name'],\r
3205 \r
3206             clear = function(){\r
3207                 $scope.list = [];\r
3208                 $scope.actionsView = false;\r
3209                 $scope.selectedAction = null;\r
3210                 $scope.newActionObj = GBPActionInstanceServices.createObj();\r
3211                 $scope.edit = "view";\r
3212             };\r
3213 \r
3214         $scope.getDefinitionObjParams = function(id){\r
3215             return GPBServices.getDefinitionObjParams($scope.actionDefinitions.options, id);\r
3216         };\r
3217 \r
3218         $scope.reloadDefs = function(){\r
3219             $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newActionObj['action-definition-id']));\r
3220         };\r
3221 \r
3222         $scope.addParam = function(name, type, value) {\r
3223             $scope.newActionObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));\r
3224         };\r
3225 \r
3226         var saveParams = function() {\r
3227             $scope.newActionObj['parameter-value'] = [];\r
3228             $scope.$broadcast('GBP_SAVE_PARAM');\r
3229         };\r
3230 \r
3231 \r
3232         $scope.init = function() {\r
3233             if ( $scope.selectedTenant ) {\r
3234                 path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);\r
3235                 GBPActionInstanceServices.load(path, function(data){\r
3236                     $scope.list = data;\r
3237                     $scope.reloadDefs();\r
3238                 }, function(){\r
3239                     //TODO: error cbk\r
3240                 });\r
3241             }else{\r
3242                 clear();\r
3243             }\r
3244         };\r
3245 \r
3246         $scope.save = function(){\r
3247             if($scope.validateForm($scope.actionsForm)){\r
3248                 path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id, $scope.newActionObj.name);\r
3249                 saveParams();\r
3250 \r
3251                 GBPActionInstanceServices.send(path, $scope.newActionObj, function(data){\r
3252                     $scope.init();\r
3253                     $scope.actionsView = false;\r
3254                     $scope.edit = "view";\r
3255                 $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
3256                 }, function(){\r
3257                     //TODO: error cbk\r
3258                 });\r
3259             }\r
3260         };\r
3261 \r
3262         $scope.showForm = function() {\r
3263             $scope.newActionObj = GBPActionInstanceServices.createObj();\r
3264             $scope.selectedAction = null;\r
3265             $scope.actionsView = true;\r
3266             $scope.edit = "add";\r
3267             $scope.reloadDefs();\r
3268         };\r
3269 \r
3270         $scope.reload = function(selectedObj){\r
3271             $scope.selectedAction = selectedObj;\r
3272             $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
3273 \r
3274             $scope.edit = $scope.edit == "edit" ? $scope.edit : "view";\r
3275             if(selectedObj){\r
3276                 $scope.actionsView = true;\r
3277             }\r
3278             else {\r
3279                 $scope.actionsView = false;\r
3280                 $scope.edit = "view";\r
3281             }\r
3282 \r
3283             if($scope.actionsView) {\r
3284                 angular.copy(selectedObj, $scope.newActionObj);\r
3285             }\r
3286 \r
3287             $scope.reloadDefs();\r
3288         };\r
3289 \r
3290         $scope.close = function(){\r
3291             $scope.actionsView = false;\r
3292             $scope.edit = "view";\r
3293         };\r
3294 \r
3295         $scope.$on('PGN_EDIT_ELEM', function(event){\r
3296             if (!event.defaultPrevented) {\r
3297                 if ( $scope.selectedAction ) {\r
3298                     $scope.actionsView = true;\r
3299                     angular.copy($scope.selectedAction, $scope.newActionObj);\r
3300                     $scope.edit = "edit";\r
3301                     $scope.reloadDefs();\r
3302                 }\r
3303                 event.defaultPrevented = true;\r
3304             }\r
3305         });\r
3306 \r
3307         $scope.delete = function(){\r
3308             path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id, $scope.selectedAction.name);\r
3309             GBPActionInstanceServices.delete(path, function(data){\r
3310                 $scope.init();\r
3311                 $scope.actionsView = false;\r
3312                 $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
3313             }, function(){\r
3314                 //TODO: error cbk\r
3315             });\r
3316         };\r
3317 \r
3318         $scope.$on('GBP_TENANT_RELOAD',function(){\r
3319             $scope.init();\r
3320         });\r
3321 \r
3322         $scope.$on('GBP_ACTIONS_LABEL', function(event, obj){\r
3323             obj.labels = $scope.displayLabel;\r
3324         });\r
3325     }]);\r
3326 \r
3327     gbp.register.controller('endpointCtrl', ['$scope', 'GBPEndpointServices', 'GPBServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', 'GBPEpgServices', '$filter', 'GBPSubnetServices',\r
3328         function($scope, GBPEndpointServices, GPBServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, GBPL3ContextServices, GBPEpgServices, $filter, GBPSubnetServices){\r
3329         $scope.list = [];\r
3330         $scope.selectedEndpoint = null;\r
3331         $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
3332         $scope.displayLabel = function(obj) {\r
3333             return obj['mac-address'] + ':' + obj['l2-context'];\r
3334         };\r
3335         $scope.crudLabel = 'Endpoint list';\r
3336 \r
3337         $scope.l2context = {'options' : [], 'labels' : null};\r
3338         $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2context);\r
3339 \r
3340         $scope.l3context = {'options' : [], 'labels' : null};\r
3341         $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);\r
3342 \r
3343         $scope.subnet = {'options' : [], 'labels' : null};\r
3344         $scope.getDisplayLabelsFromCtrl('GBP_SUBNET_LABEL', $scope.subnet);\r
3345 \r
3346         $scope.epg = {'options' : [], 'labels' : null};\r
3347         $scope.getDisplayLabelsFromCtrl('GBP_EPG_LABEL', $scope.epg);\r
3348 \r
3349         $scope.networkContainment = {'options' : [], 'labels' : null};\r
3350         $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.networkContainment);\r
3351 \r
3352         $scope.view = {\r
3353             endpoint: false,\r
3354             edit: "view"\r
3355         };\r
3356 \r
3357         var path = null,\r
3358             mandatoryProperties = [],\r
3359 \r
3360             loadEpgOptions = function() {\r
3361                 $scope.epg.options = [];\r
3362 \r
3363                 path = GBPEpgServices.createPathObj($scope.selectedTenant.id);\r
3364                 GBPEpgServices.load(path, function(data){\r
3365                     $scope.epg.options = data;\r
3366                 }, function(){\r
3367                     //TODO: error cbk\r
3368                 });\r
3369             },\r
3370 \r
3371             loadL2ContextOptions = function() {\r
3372                 removeL2ContextOptions($scope.networkContainment.options, $scope.l2context.options);\r
3373                 $scope.l2context.options = [];\r
3374 \r
3375                 path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);\r
3376                     \r
3377                 GBPL2FloodDomainServices.load(path, function(data){\r
3378                     $scope.l2context.options = $scope.l2context.options.concat(data);\r
3379                     $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
3380                 }, function(){\r
3381 \r
3382                 });\r
3383 \r
3384                 path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);\r
3385                 GBPL2BridgeDomainServices.load(path, function(data){\r
3386                     $scope.l2context.options = $scope.l2context.options.concat(data);\r
3387                     $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
3388                 }, function(){\r
3389 \r
3390                 });\r
3391             },\r
3392 \r
3393             loadL3ContextOptions = function(){\r
3394                 removeL2ContextOptions($scope.networkContainment.options, $scope.l3context.options);\r
3395                 $scope.l3context.options = [];\r
3396 \r
3397                 GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){\r
3398                     $scope.l3context.options = data;\r
3399                     $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
3400                 }, function(){\r
3401 \r
3402                 });\r
3403             },\r
3404 \r
3405             loadSubnetOptions = function(){\r
3406                 $scope.subnet.options = [];\r
3407 \r
3408                 GBPSubnetServices.load(GBPSubnetServices.createPathObj($scope.selectedTenant.id), function(data){\r
3409                     $scope.subnet.options = data;\r
3410                     $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
3411                 }, function(){\r
3412 \r
3413                 });\r
3414             },\r
3415 \r
3416             loadNetworkCotnaninemnt = function(){\r
3417                 $scope.networkContainment.options = [];\r
3418 \r
3419                 loadL2ContextOptions();\r
3420                 loadL3ContextOptions();\r
3421                 loadSubnetOptions();\r
3422             },\r
3423 \r
3424             clear = function(){\r
3425                 $scope.list = [];\r
3426                 $scope.selectedEndpoint = null;\r
3427                 $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
3428                 $scope.view = {\r
3429                     endpoint: false,\r
3430                     edit: "view"\r
3431                 };\r
3432             },\r
3433             removeL2ContextOptions = function(arr1, arr2) {\r
3434                 arr1 = arr1.filter( function( el ) {\r
3435                   return arr2.indexOf( el ) < 0;\r
3436                 });\r
3437             };\r
3438         \r
3439         $scope.init = function() {\r
3440             if ($scope.selectedTenant) {\r
3441 \r
3442                 GBPEndpointServices.load(path, function(data){\r
3443                     $scope.list = data;\r
3444                 }, function(){\r
3445                     //TODO: error cbk\r
3446                 });\r
3447 \r
3448                 loadEpgOptions();\r
3449                 /*loadL2ContextOptions();\r
3450                 loadL3ContextOptions();\r
3451                 loadSubnetOptions();*/\r
3452                 loadNetworkCotnaninemnt();\r
3453             }else{\r
3454                 clear();\r
3455             }\r
3456         };\r
3457 \r
3458         $scope.addNewL3address = function() {\r
3459             if($scope.newEndpointObj) {\r
3460                 if(!$scope.newEndpointObj['l3-address']){\r
3461                     $scope.newEndpointObj['l3-address'] = [];\r
3462                 }\r
3463                 var objToPush = {'l3-context' : '', 'ip-address' : ''};\r
3464                 $scope.newEndpointObj['l3-address'].push(objToPush);\r
3465             }\r
3466         };\r
3467 \r
3468         $scope.deleteNewL3address = function(index){\r
3469             if($scope.newEndpointObj) {\r
3470                 $scope.newEndpointObj['l3-address'].splice(index, 1);\r
3471             }\r
3472         };\r
3473 \r
3474         $scope.addNewLeafListEl = function(prop) {\r
3475             if($scope.newEndpointObj) {\r
3476                 if(!$scope.newEndpointObj[prop]){\r
3477                     $scope.newEndpointObj[prop] = [];\r
3478                 }\r
3479                 var objToPush = "";\r
3480                 $scope.newEndpointObj[prop].push(objToPush);\r
3481             }\r
3482         };\r
3483 \r
3484         $scope.updateLeafListEl = function(index, value, prop) {\r
3485             if($scope.newEndpointObj && $scope.newEndpointObj[prop] && $scope.newEndpointObj[prop].length >= index) {\r
3486                 $scope.newEndpointObj[prop][index] = value;\r
3487             }\r
3488         };\r
3489 \r
3490         $scope.deleteNewLeafListEl = function(index, prop){\r
3491             if($scope.newEndpointObj) {\r
3492                 $scope.newEndpointObj[prop].splice(index, 1);\r
3493             }\r
3494         };\r
3495 \r
3496         $scope.save = function(){\r
3497             if($scope.validateForm($scope.endpointForm)){\r
3498                 GBPEndpointServices.send(path, $scope.newEndpointObj, function(data){\r
3499                     $scope.init();\r
3500                     $scope.view.endpoint = false;\r
3501                     $scope.reloadNewObj();\r
3502                     $scope.view.edit = "view";\r
3503                 }, function(){\r
3504                     //TODO: error cbk\r
3505                 });\r
3506             }\r
3507         };\r
3508 \r
3509         $scope.delete = function() {\r
3510             if($scope.selectedTenant && $scope.selectedEndpoint) {\r
3511                 GBPEndpointServices.delete(path, $scope.selectedEndpoint, function(data){\r
3512                     $scope.init();\r
3513                     $scope.view.endpoint = false;\r
3514                 }, function(){\r
3515                     //TODO: error cbk\r
3516                 });\r
3517             }\r
3518         };\r
3519 \r
3520         $scope.showForm = function() {\r
3521             $scope.view.endpoint = true;\r
3522             $scope.reloadNewObj();\r
3523             $scope.selectedEndpoint = null;\r
3524 \r
3525             $scope.view.edit = "add";\r
3526         };\r
3527 \r
3528         $scope.reloadNewObj = function() {\r
3529             $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
3530         };\r
3531 \r
3532         $scope.reload = function(selectedObj) {\r
3533             $scope.selectedEndpoint = selectedObj;\r
3534             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
3535             if(selectedObj){\r
3536                 $scope.view.endpoint = true;\r
3537             }\r
3538             else {\r
3539                 $scope.view.endpoint = false;\r
3540                 $scope.view.edit = "view";\r
3541             }\r
3542 \r
3543             if($scope.view.endpoint) {\r
3544                 angular.copy(selectedObj, $scope.newEndpointObj);\r
3545             }\r
3546         };\r
3547 \r
3548         $scope.close = function(){\r
3549             $scope.view.endpoint = false;\r
3550             $scope.view.edit = "view";\r
3551         };\r
3552 \r
3553         $scope.$on('PGN_EDIT_ELEM', function(event){\r
3554             if (!event.defaultPrevented) {\r
3555                 if ( $scope.selectedEndpoint ) {\r
3556                     $scope.view.endpoint = true;\r
3557                     $scope.view.edit = "edit";\r
3558                     angular.copy($scope.selectedEndpoint, $scope.newEndpointObj);\r
3559                 }\r
3560                 event.defaultPrevented = true;\r
3561             }\r
3562         });\r
3563 \r
3564         $scope.$on('GBP_TENANT_RELOAD',function(){\r
3565             $scope.init();\r
3566         });\r
3567 \r
3568         $scope.$on('GBP_EPG_RELOAD',function(){\r
3569             loadEpgOptions();\r
3570         });\r
3571 \r
3572         $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
3573             //loadL2ContextOptions();\r
3574             loadNetworkCotnaninemnt();\r
3575         });\r
3576 \r
3577         $scope.$on('GBP_L2FLOOD_RELOAD',function(){\r
3578             //loadL2ContextOptions();\r
3579             loadNetworkCotnaninemnt();\r
3580         });\r
3581 \r
3582         $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
3583             //loadL3ContextOptions();\r
3584             loadNetworkCotnaninemnt();\r
3585         });\r
3586 \r
3587         $scope.$on('GBP_SUBNET_RELOAD',function(){\r
3588             //loadSubnetOptions();\r
3589             loadNetworkCotnaninemnt();\r
3590         });\r
3591     }]);\r
3592 \r
3593     gbp.register.controller('l3EndpointCtrl', ['$scope', 'GBPEndpointL3Services', 'GPBServices', 'GBPEpgServices', 'GBPL3ContextServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', '$filter',\r
3594         function($scope, GBPEndpointL3Services, GPBServices, GBPEpgServices, GBPL3ContextServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, $filter){\r
3595         $scope.list = [];\r
3596         $scope.selectedEndpoint = null;\r
3597         $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
3598         $scope.displayLabel = function(obj) {\r
3599             return obj['ip-prefix'] + ':' + obj['l3-context'];\r
3600         };\r
3601         $scope.crudLabel = 'L3 Prefix endpoint list';\r
3602 \r
3603         $scope.l2context = {'options' : [], 'labels' : null};\r
3604         $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2context);\r
3605 \r
3606         $scope.l3context = {'options' : [], 'labels' : null};\r
3607         $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);\r
3608 \r
3609         $scope.epg = {'options' : [], 'labels' : null};\r
3610         $scope.getDisplayLabelsFromCtrl('GBP_EPG_LABEL', $scope.epg);\r
3611 \r
3612         $scope.view = {\r
3613             endpoint: false,\r
3614             edit: "view"\r
3615         };\r
3616 \r
3617         var path = null,\r
3618             mandatoryProperties = [],\r
3619 \r
3620             loadEpgOptions = function() {\r
3621                 $scope.epg.options = [];\r
3622 \r
3623                 path = GBPEpgServices.createPathObj($scope.selectedTenant.id);\r
3624                 GBPEpgServices.load(path, function(data){\r
3625                     $scope.epg.options = data;\r
3626                 }, function(){\r
3627                     //TODO: error cbk\r
3628                 });\r
3629             },\r
3630 \r
3631             loadL2ContextOptions = function() {\r
3632                 $scope.l2context.options = [];\r
3633 \r
3634                 path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);\r
3635                     \r
3636                 GBPL2FloodDomainServices.load(path, function(data){\r
3637                     $scope.l2context.options = $scope.l2context.options.concat(data);\r
3638                 }, function(){\r
3639 \r
3640                 });\r
3641 \r
3642                 path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);\r
3643                 GBPL2BridgeDomainServices.load(path, function(data){\r
3644                     $scope.l2context.options = $scope.l2context.options.concat(data);\r
3645                 }, function(){\r
3646 \r
3647                 });\r
3648             },\r
3649 \r
3650             loadL3ContextOptions = function(){\r
3651                 $scope.l3context.options = [];\r
3652 \r
3653                 GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){\r
3654                     $scope.l3context.options = data;\r
3655                 }, function(){\r
3656 \r
3657                 });\r
3658             },\r
3659 \r
3660             clear = function(){\r
3661                 $scope.list = [];\r
3662                 $scope.selectedEndpoint = null;\r
3663                 $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
3664                 $scope.view = {\r
3665                     endpoint: false,\r
3666                     edit: "view"\r
3667                 };\r
3668             };\r
3669         \r
3670         $scope.init = function() {\r
3671             if ($scope.selectedTenant) {\r
3672 \r
3673                 GBPEndpointL3Services.load(path, function(data){\r
3674                     $scope.list = data;\r
3675                 }, function(){\r
3676                     //TODO: error cbk\r
3677                 });\r
3678 \r
3679                 loadEpgOptions();\r
3680                 loadL2ContextOptions();\r
3681                 loadL3ContextOptions();\r
3682             }else{\r
3683                 clear();\r
3684             }\r
3685         };\r
3686 \r
3687         $scope.addNewL2gateways = function() {\r
3688             if($scope.newEndpointObj) {\r
3689                 if(!$scope.newEndpointObj['endpoint-l2-gateways']){\r
3690                     $scope.newEndpointObj['endpoint-l2-gateways'] = [];\r
3691                 }\r
3692                 var objToPush = {'l2-context' : '', 'mac-address' : ''};\r
3693                 $scope.newEndpointObj['endpoint-l2-gateways'].push(objToPush);\r
3694             }\r
3695         };\r
3696 \r
3697         $scope.deleteNewL2gateways = function(index){\r
3698             if($scope.newEndpointObj) {\r
3699                 $scope.newEndpointObj['endpoint-l2-gateways'].splice(index, 1);\r
3700             }\r
3701         };\r
3702 \r
3703         $scope.addNewL3gateways = function() {\r
3704             if($scope.newEndpointObj) {\r
3705                 if(!$scope.newEndpointObj['endpoint-l3-gateways']){\r
3706                     $scope.newEndpointObj['endpoint-l3-gateways'] = [];\r
3707                 }\r
3708                 var objToPush = {'l3-context' : '', 'ip-address' : ''};\r
3709                 $scope.newEndpointObj['endpoint-l3-gateways'].push(objToPush);\r
3710             }\r
3711         };\r
3712 \r
3713         $scope.deleteNewL3gateways = function(index){\r
3714             if($scope.newEndpointObj) {\r
3715                 $scope.newEndpointObj['endpoint-l3-gateways'].splice(index, 1);\r
3716             }\r
3717         };\r
3718 \r
3719         $scope.addNewLeafListEl = function(prop) {\r
3720             if($scope.newEndpointObj) {\r
3721                 if(!$scope.newEndpointObj[prop]){\r
3722                     $scope.newEndpointObj[prop] = [];\r
3723                 }\r
3724                 var objToPush = "";\r
3725                 $scope.newEndpointObj[prop].push(objToPush);\r
3726             }\r
3727         };\r
3728 \r
3729         $scope.updateLeafListEl = function(index, value, prop) {\r
3730             if($scope.newEndpointObj && $scope.newEndpointObj[prop] && $scope.newEndpointObj[prop].length >= index) {\r
3731                 $scope.newEndpointObj[prop][index] = value;\r
3732             }\r
3733         };\r
3734 \r
3735         $scope.deleteNewLeafListEl = function(index, prop){\r
3736             if($scope.newEndpointObj) {\r
3737                 $scope.newEndpointObj[prop].splice(index, 1);\r
3738             }\r
3739         };\r
3740 \r
3741         $scope.save = function(){\r
3742             if($scope.validateForm($scope.l3EndpointForm)){\r
3743                 GBPEndpointL3Services.send(path, $scope.newEndpointObj, function(data){\r
3744                     $scope.init();\r
3745                     $scope.view.endpoint = false;\r
3746                     $scope.reloadNewObj();\r
3747                     $scope.view.edit = "view";\r
3748                 }, function(){\r
3749                     //TODO: error cbk\r
3750                 });\r
3751             }\r
3752         };\r
3753 \r
3754         $scope.delete = function() {\r
3755             if($scope.selectedTenant && $scope.selectedEndpoint) {\r
3756                 GBPEndpointL3Services.delete(path, $scope.selectedEndpoint, function(data){\r
3757                     $scope.init();\r
3758                 }, function(){\r
3759                     //TODO: error cbk\r
3760                 });\r
3761             }\r
3762         };\r
3763 \r
3764         $scope.showForm = function() {\r
3765             $scope.view.endpoint = true;\r
3766             $scope.reloadNewObj();\r
3767             $scope.selectedEndpoint = null;\r
3768             $scope.view.edit = "add";\r
3769         };\r
3770 \r
3771         $scope.reloadNewObj = function() {\r
3772             $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
3773         };\r
3774 \r
3775         $scope.reload = function(selectedObj) {\r
3776             $scope.selectedEndpoint = selectedObj;\r
3777             angular.copy(selectedObj, $scope.newEndpointObj);\r
3778             $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
3779             if(selectedObj){\r
3780                 $scope.view.endpoint = true;\r
3781             }\r
3782             else {\r
3783                 $scope.view.endpoint = false;\r
3784                 $scope.view.edit = "view";\r
3785             }\r
3786         };\r
3787 \r
3788         $scope.close = function(){\r
3789             $scope.view.endpoint = false;\r
3790             $scope.view.edit = "view";\r
3791         };\r
3792 \r
3793         $scope.$on('PGN_EDIT_ELEM', function(event){\r
3794             if (!event.defaultPrevented) {\r
3795                 if ( $scope.selectedEndpoint ) {\r
3796                     $scope.view.endpoint = true;\r
3797                     $scope.view.edit = "edit";\r
3798                     angular.copy($scope.selectedEndpoint, $scope.newEndpointObj);\r
3799                 }\r
3800                 event.defaultPrevented = true;\r
3801             }\r
3802         });\r
3803 \r
3804         $scope.$on('GBP_TENANT_RELOAD',function(){\r
3805             $scope.init();\r
3806         });\r
3807 \r
3808         $scope.$on('GBP_EPG_RELOAD',function(){\r
3809             loadEpgOptions();\r
3810         });\r
3811 \r
3812         $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
3813             loadL2ContextOptions();\r
3814         });\r
3815 \r
3816         $scope.$on('GBP_L2FLOOD_RELOAD',function(){\r
3817             loadL2ContextOptions();\r
3818         });\r
3819 \r
3820         $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
3821             loadL3ContextOptions();\r
3822         });\r
3823     }]);\r
3824 \r
3825     gbp.register.controller('accessModelWizardCtrl', ['$scope', '$filter', 'GBPTenantServices', 'GBPEpgServices', 'GBPContractServices', 'GPBServices', function($scope, $filter, GBPTenantServices, GBPEpgServices, GBPContractServices, GPBServices){ \r
3826         $scope.wizardPage = null;\r
3827 \r
3828         $scope.selectedTenant = null;\r
3829         $scope.tenant = null;\r
3830         //$scope.epgList = [];\r
3831         $scope.newContractObj = null;\r
3832 \r
3833         $scope.init = function() {\r
3834             $scope.setPage('tenants');\r
3835         };\r
3836 \r
3837         $scope.setPage = function(pageName, object) {\r
3838             $scope.wizardPage = pageName;\r
3839 \r
3840             switch(pageName) {\r
3841                 case 'contracts':\r
3842                     if(object) {\r
3843                         $scope.tenant = object;\r
3844                     }\r
3845 \r
3846                     break;\r
3847 \r
3848                 case 'summary':\r
3849                     $scope.tenant['endpoint-group'] = $scope.tenant['endpoint-group'] ? $scope.tenant['endpoint-group'] : [];\r
3850 \r
3851                     if(object) {\r
3852                         object.forEach(function(o) {\r
3853                             $scope.tenant['endpoint-group'].push(GPBServices.stripNullValues(o));\r
3854                         });\r
3855                     }\r
3856 \r
3857                     break;\r
3858 \r
3859                  case 'epgs':\r
3860                     $scope.tenant['contract'] = $scope.tenant['contract'] ? $scope.tenant['contract'] : [];\r
3861 \r
3862                     if(object) {\r
3863                         object.forEach(function(o) {\r
3864                             $scope.tenant['contract'].push(GPBServices.stripNullValues(o));\r
3865                         });\r
3866                     }\r
3867 \r
3868                     break;\r
3869             }\r
3870         };\r
3871 \r
3872         $scope.submit = function(object) {\r
3873             $scope.tenant['endpoint-group'] = $scope.tenant['endpoint-group'] ? $scope.tenant['endpoint-group'] : [];\r
3874 \r
3875             if(object) {\r
3876                 object.forEach(function(o) {\r
3877                     $scope.tenant['endpoint-group'].push(GPBServices.stripNullValues(o));\r
3878                 });\r
3879             }\r
3880 \r
3881             \r
3882             path = GBPTenantServices.createPathObj($scope.tenant.id);\r
3883             GBPTenantServices.send(path, $scope.tenant, function(data){\r
3884                 $scope.wizards.accessModelWizard = false;\r
3885                 $scope.sendReloadEventFromRoot('GBP_GLOBAL_TENANT_RELOAD');\r
3886                 $scope.reloadTopo();\r
3887             }, function(){\r
3888                 //TODO: error cbk\r
3889             });\r
3890         };\r
3891 \r
3892         // $scope.updateList = function(list, object, key) {\r
3893         //     var elementPos = list.map(function(x) {return x[key]; }).indexOf(object[key]);\r
3894 \r
3895         //     if(elementPos < 0) {\r
3896         //         list.push(object);\r
3897         //     }\r
3898         //     else {\r
3899         //         list[elementPos] = object;\r
3900         //     }\r
3901         // };\r
3902     }]);\r
3903 \r
3904     gbp.register.controller('wizardTenantCtrl', ['$scope', '$filter', 'GBPTenantServices', function($scope, $filter, GBPTenantServices){ \r
3905         // $scope.tenantList = [];\r
3906         $scope.newTenantObj = GBPTenantServices.createObj();\r
3907         $scope.displayLabel = ['name' , 'id'];\r
3908 \r
3909         $scope.view = {\r
3910             tenantEdit: false\r
3911         };\r
3912 \r
3913         // $scope.init = function() {\r
3914         //     $scope.getTenants();\r
3915         // };\r
3916 \r
3917         // $scope.getTenants = function() {\r
3918         //     GBPTenantServices.load(\r
3919         //         function(data) {\r
3920         //             $scope.tenantList = data;\r
3921         //             $scope.newTenantObj = GBPTenantServices.createObj();\r
3922         //         },\r
3923         //         function(){\r
3924         //             //TODO error\r
3925         //         }\r
3926         //     );\r
3927         // };\r
3928 \r
3929         $scope.reloadTenants = function(selectedObject) {\r
3930             if(!selectedObject) {\r
3931                 selectedObject = GBPTenantServices.createObj();\r
3932                  $scope.view.tenantEdit = false;\r
3933             }\r
3934             else {\r
3935                 $scope.view.tenantEdit = true;\r
3936             }\r
3937 \r
3938             $scope.selectedTenant = selectedObject;\r
3939             $scope.newTenantObj = selectedObject;\r
3940         };\r
3941 \r
3942         $scope.getNewTenantObject = function() {\r
3943             return GBPTenantServices.createObj();\r
3944         };\r
3945     }]); \r
3946 \r
3947     gbp.register.controller('wizardEpgCtrl', ['$scope', '$filter', 'GBPEpgServices', function($scope, $filter, GBPEpgServices){ \r
3948         $scope.list = [];\r
3949         $scope.newEpgObj = GBPEpgServices.createObj();\r
3950         $scope.selectedEpg = null;\r
3951         $scope.epgFormView = true;\r
3952 \r
3953         $scope.displayLabel = ['name', 'id'];\r
3954         $scope.crudLabel = 'Group list';\r
3955 \r
3956         $scope.igpOpts = ['allow', 'require-contract'];\r
3957 \r
3958         $scope.init = function() {\r
3959             \r
3960         };\r
3961 \r
3962         $scope.showForm = function() {\r
3963             $scope.epgFormView = true;\r
3964             $scope.newEpgObj = GBPEpgServices.createObj();\r
3965         };\r
3966 \r
3967         $scope.save = function() {\r
3968             $scope.updateList($scope.list, $scope.newEpgObj, "id");\r
3969             $scope.reload($scope.newEpgObj);\r
3970             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newEpgObj);\r
3971         };\r
3972 \r
3973         $scope.delete = function() {\r
3974             if($scope.selectedEpg) {\r
3975                 var index = $scope.list.indexOf($scope.selectedEpg);\r
3976                 $scope.list.splice(index, 1);\r
3977                 $scope.epgFormView = false;\r
3978             }\r
3979             //$scope.newEpgObj = GBPEpgServices.createObj();\r
3980         };\r
3981 \r
3982         $scope.reload = function(selectedObj) {\r
3983             $scope.selectedEpg = selectedObj;\r
3984             $scope.newEpgObj = selectedObj;\r
3985             $scope.epgFormView = true;\r
3986             $scope.$broadcast('WIZARD_EPG_RELOAD');\r
3987         };\r
3988 \r
3989         $scope.close = function() {\r
3990             $scope.epgFormView = false;\r
3991             $scope.newEpgObj = GBPEpgServices.createObj();\r
3992             $scope.selectedEpg = null;\r
3993         };\r
3994 \r
3995         $scope.$on('PGN_EDIT_ELEM', function(event){\r
3996             if (!event.defaultPrevented) {\r
3997                 if ( $scope.selectedEpg ) {\r
3998                     $scope.epgFormView = true;\r
3999                     angular.copy($scope.selectedEpg, $scope.newEpgObj);\r
4000                 }\r
4001                 event.defaultPrevented = true;\r
4002             }\r
4003         });\r
4004 \r
4005         $scope.$on("WIZARD_CNS_RELOAD", function(event, args){\r
4006             //$scope.selectedEpg['consumer-named-selector'] = args;\r
4007             $scope.newEpgObj['consumer-named-selector'] = args;\r
4008             $scope.updateList($scope.list, $scope.newEpgObj, "id");\r
4009         });\r
4010 \r
4011         $scope.$on("WIZARD_PNS_RELOAD", function(event, args){\r
4012             //$scope.selectedEpg['provider-named-selector'] = args;\r
4013             $scope.newEpgObj['provider-named-selector'] = args;\r
4014             $scope.updateList($scope.list, $scope.newEpgObj, "id");\r
4015         });\r
4016     }]); \r
4017 \r
4018     gbp.register.controller('wizardContractCtrl', ['$scope', '$filter', 'GBPContractServices', function($scope, $filter, GBPContractServices){ \r
4019         $scope.list = [];\r
4020         $scope.newContractObj = GBPContractServices.createObj();\r
4021         $scope.selectedContract = null;\r
4022 \r
4023         $scope.displayLabel = ['description', 'id'];\r
4024         $scope.crudLabel = 'Contract list';\r
4025 \r
4026         $scope.contractFormView = true;\r
4027 \r
4028         $scope.init = function() {\r
4029             \r
4030         };\r
4031 \r
4032         $scope.showForm = function() {\r
4033             $scope.contractFormView = true;\r
4034             $scope.newContractObj = GBPContractServices.createObj();\r
4035         };\r
4036 \r
4037         $scope.save = function() {\r
4038             $scope.updateList($scope.list, $scope.newContractObj, "id");\r
4039             $scope.reload($scope.newContractObj);\r
4040             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newContractObj);\r
4041         };\r
4042 \r
4043         $scope.delete = function() {\r
4044             if($scope.selectedContract) {\r
4045                 var index = $scope.list.indexOf($scope.selectedContract);\r
4046                 $scope.list.splice(index, 1);\r
4047                 $scope.contractFormView = false;\r
4048                 $scope.newContractObj = GBPContractServices.createObj();\r
4049                 $scope.selectedContract = null;\r
4050             }\r
4051         };\r
4052 \r
4053         $scope.reload = function(selectedObj) {\r
4054             $scope.selectedContract = selectedObj;\r
4055             $scope.newContractObj = selectedObj;\r
4056             $scope.contractFormView = true;\r
4057         };\r
4058 \r
4059         $scope.close = function() {\r
4060             $scope.contractFormView = false;\r
4061             //$scope.newContractObj = GBPContractServices.createObj();\r
4062             //$scope.selectedContract = null;\r
4063         };\r
4064 \r
4065         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4066             if (!event.defaultPrevented) {\r
4067                 if ( $scope.selectedContract ) {\r
4068                     $scope.contractFormView = true;\r
4069                     angular.copy($scope.selectedContract, $scope.newContractObj);\r
4070                 }\r
4071                 event.defaultPrevented = true;\r
4072             }\r
4073         });\r
4074 \r
4075         $scope.$on("WIZARD_SUBJECT_RELOAD", function(event, args){\r
4076             //$scope.selectedEpg['consumer-named-selector'] = args;\r
4077             $scope.newContractObj['subject'] = args;\r
4078             $scope.updateList($scope.list, $scope.newContractObj, "id");\r
4079         });\r
4080 \r
4081         $scope.$on("WIZARD_CLAUSE_RELOAD", function(event, args){\r
4082             //$scope.selectedEpg['consumer-named-selector'] = args;\r
4083             $scope.newContractObj['clause'] = args;\r
4084             $scope.updateList($scope.list, $scope.newContractObj, "id");\r
4085         });\r
4086     }]); \r
4087 \r
4088     gbp.register.controller('wizardCnsCtrl',['$scope', 'GBPConNamedSelServices', function($scope, GBPConNamedSelServices){\r
4089         $scope.list = [];\r
4090         $scope.selectedCNS = null;\r
4091         $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
4092         $scope.internalView = {\r
4093             cns: false,\r
4094             edit: "view"\r
4095         };\r
4096         $scope.displayLabel = 'name';\r
4097         $scope.crudLabel = 'Consumer named selectors list';\r
4098 \r
4099         $scope.contractList = {'options' : [], 'labels' : null};\r
4100         $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contractList);\r
4101 \r
4102         var clear = function(){\r
4103                 $scope.list = [];\r
4104                 $scope.selectedCNS = null;\r
4105                 $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
4106                 $scope.internalView = {\r
4107                     cns: false,\r
4108                     edit: "add"\r
4109                 };\r
4110             };\r
4111 \r
4112         //move to separate ctrl \/\r
4113         $scope.addNewElem = function(templateObj) {\r
4114             if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
4115                 var objToPush = templateObj || "";\r
4116                 $scope.newCNSObj.contract.push(objToPush);\r
4117             }\r
4118         };\r
4119 \r
4120         $scope.deleteElemAt = function(index) {\r
4121             if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
4122                 $scope.newCNSObj.contract.splice(index, 1);\r
4123             }\r
4124         };\r
4125 \r
4126         $scope.updateAt = function(index, value) {\r
4127             if($scope.newCNSObj && $scope.newCNSObj.contract && $scope.newCNSObj.contract.length >= index) {\r
4128                 $scope.newCNSObj.contract[index] = value;\r
4129             }\r
4130         };\r
4131         //move to separate ctrl /\\r
4132 \r
4133         $scope.init = function() {\r
4134             clear();\r
4135 \r
4136             if($scope.tenant && $scope.tenant['contract'].length>0) {\r
4137                 $scope.contractList.options = $scope.tenant['contract'];\r
4138             }\r
4139 \r
4140             if($scope.selectedEpg && $scope.selectedEpg['consumer-named-selector']) {\r
4141                 $scope.list = $scope.selectedEpg['consumer-named-selector'];\r
4142             }\r
4143         };\r
4144 \r
4145         $scope.save = function(){\r
4146             $scope.updateList($scope.list, $scope.newCNSObj, "name");\r
4147             $scope.reload($scope.newCNSObj);\r
4148             $scope.$emit('WIZARD_CNS_RELOAD', $scope.list);\r
4149             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newCNSObj);\r
4150         };\r
4151 \r
4152         $scope.delete = function() {\r
4153             if($scope.selectedCNS) {\r
4154                 var index = $scope.list.indexOf($scope.selectedCNS);\r
4155                 $scope.list.splice(index, 1);\r
4156                 $scope.internalView = {\r
4157                     cns: false,\r
4158                     edit: "add"\r
4159                 };\r
4160                 $scope.$emit('WIZARD_CNS_RELOAD', $scope.list);\r
4161             }\r
4162         };\r
4163 \r
4164         $scope.showForm = function() {\r
4165             $scope.reloadNewObj();\r
4166             $scope.selectedCNS = null;\r
4167             $scope.internalView.cns = true;\r
4168             $scope.internalView.edit = "add";\r
4169         };\r
4170 \r
4171         $scope.reloadNewObj = function() {\r
4172             $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
4173         };\r
4174 \r
4175         $scope.reload = function(selectedObj) {\r
4176             $scope.selectedCNS = selectedObj;\r
4177             $scope.newCNSObj = selectedObj;\r
4178             $scope.internalView.cns = true;\r
4179         };\r
4180 \r
4181         $scope.close = function(){\r
4182             $scope.internalView.cns = false;\r
4183             //$scope.internalView.edit = "view";\r
4184         };\r
4185 \r
4186         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4187             if (!event.defaultPrevented) {\r
4188                 if ( $scope.selectedEpg ) {\r
4189                     $scope.internalView.cns = true;\r
4190                     $scope.internalView.edit = "add";\r
4191                     angular.copy($scope.selectedCNS, $scope.newCNSObj);\r
4192                 }\r
4193                 event.defaultPrevented = true;\r
4194             }\r
4195         });\r
4196 \r
4197         $scope.$on('WIZARD_EPG_RELOAD',function(){\r
4198             $scope.init();\r
4199         });\r
4200     }]);\r
4201 \r
4202     gbp.register.controller('wizardPnsCtrl',['$scope', 'GBPProNamedSelServices', function($scope, GBPProNamedSelServices){\r
4203         $scope.list = [];\r
4204         $scope.selectedPNS = null;\r
4205         $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
4206         $scope.displayLabel = 'name';\r
4207         $scope.crudLabel = 'Provider named selectors list';\r
4208         $scope.internalView = {\r
4209             pns: false,\r
4210             edit: "view"\r
4211         };\r
4212 \r
4213         $scope.contractList = {'options' : [], 'labels' : null};\r
4214         $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contractList);\r
4215 \r
4216         var clear = function(){\r
4217                 $scope.list = [];\r
4218                 $scope.selectedPNS = null;\r
4219                 $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
4220                 $scope.internalView = {\r
4221                     pns: false,\r
4222                     edit: "view"\r
4223                 };\r
4224             };\r
4225 \r
4226         //move to separate ctrl \/\r
4227         $scope.addNewElem = function(templateObj) {\r
4228             if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
4229                 var objToPush = templateObj || "";\r
4230                 $scope.newPNSObj.contract.push(objToPush);\r
4231             }\r
4232         };\r
4233 \r
4234         $scope.deleteElemAt = function(index) {\r
4235             if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
4236                 $scope.newPNSObj.contract.splice(index, 1);\r
4237             }\r
4238         };\r
4239 \r
4240         $scope.updateAt = function(index, value) {\r
4241             if($scope.newPNSObj && $scope.newPNSObj.contract && $scope.newPNSObj.contract.length >= index) {\r
4242                 $scope.newPNSObj.contract[index] = value;\r
4243             }\r
4244         };\r
4245         //move to separate ctrl /\\r
4246 \r
4247         $scope.init = function() {\r
4248             clear();\r
4249 \r
4250             if($scope.tenant && $scope.tenant['contract'].length>0) {\r
4251                 $scope.contractList.options = $scope.tenant['contract'];\r
4252             }\r
4253 \r
4254             if($scope.selectedEpg && $scope.selectedEpg['provider-named-selector']) {\r
4255                 $scope.list = $scope.selectedEpg['provider-named-selector'];\r
4256             }\r
4257         };\r
4258 \r
4259         $scope.save = function(){\r
4260             $scope.updateList($scope.list, $scope.newPNSObj, "name");\r
4261             $scope.reload($scope.newPNSObj);\r
4262             $scope.$emit('WIZARD_PNS_RELOAD', $scope.list);\r
4263             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newPNSObj);\r
4264         };\r
4265 \r
4266         $scope.delete = function() {\r
4267             if($scope.selectedPNS) {\r
4268                 var index = $scope.list.indexOf($scope.selectedPNS);\r
4269                 $scope.list.splice(index, 1);\r
4270                 $scope.internalView = {\r
4271                     pns: false,\r
4272                     edit: "add"\r
4273                 };\r
4274                 $scope.$emit('WIZARD_PNS_RELOAD', $scope.list);\r
4275             }\r
4276         };\r
4277 \r
4278         $scope.showForm = function() {\r
4279             $scope.reloadNewObj();\r
4280             $scope.selectedPNS = null;\r
4281             $scope.internalView.pns = true;\r
4282             $scope.internalView.edit = "add";\r
4283         };\r
4284 \r
4285         $scope.reloadNewObj = function() {\r
4286             $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
4287         };\r
4288 \r
4289         $scope.reload = function(selectedObj) {\r
4290             $scope.selectedPNS = selectedObj;\r
4291             $scope.newPNSObj = selectedObj;\r
4292             $scope.internalView.pns = true;\r
4293         };\r
4294 \r
4295         $scope.close = function(){\r
4296             $scope.internalView.pns = false;\r
4297             $scope.internalView.edit = "view";\r
4298         };\r
4299         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4300             if (!event.defaultPrevented) {\r
4301                 if ( $scope.selectedEpg ) {\r
4302                     $scope.internalView.pns = true;\r
4303                     $scope.internalView.edit = "edit";\r
4304                     angular.copy($scope.selectedPNS, $scope.newPNSObj);\r
4305                 }\r
4306                 event.defaultPrevented = true;\r
4307             }\r
4308         });\r
4309 \r
4310         $scope.$on('WIZARD_EPG_RELOAD',function(){\r
4311             $scope.init();\r
4312         });\r
4313     }]);\r
4314 \r
4315     gbp.register.controller('wizardSubjectCtrl', ['$scope','GBPSubjectServices', '$filter', function($scope, GBPSubjectServices, $filter){\r
4316         $scope.list = [];\r
4317         $scope.selectedSubject = null;\r
4318         $scope.newSubjectObj = GBPSubjectServices.createObj();\r
4319         $scope.displayLabel = 'name';\r
4320         $scope.internalView = {\r
4321             subject : false,\r
4322             edit : "view"\r
4323         };\r
4324         $scope.crudLabel = 'Subject list';\r
4325         $scope.errors = {};\r
4326 \r
4327 \r
4328         var path = null,\r
4329             mandatoryProperties = ['order'],\r
4330 \r
4331             clear = function(){\r
4332                 $scope.list = [];\r
4333                 $scope.selectedSubject = null;\r
4334                 $scope.newSubjectObj = GBPSubjectServices.createObj();\r
4335                 $scope.internalView = {\r
4336                     subject : false,\r
4337                     edit : "view"\r
4338                 };\r
4339             };\r
4340 \r
4341         $scope.init = function() {\r
4342             \r
4343         };\r
4344 \r
4345         $scope.save = function(){\r
4346             $scope.updateList($scope.list, $scope.newSubjectObj, "name");\r
4347             $scope.reload($scope.newSubjectObj);\r
4348             $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);\r
4349             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newSubjectObj);\r
4350         };\r
4351 \r
4352         $scope.delete = function() {\r
4353             if($scope.selectedSubject) {\r
4354                 var index = $scope.list.indexOf($scope.selectedSubject);\r
4355                 $scope.list.splice(index, 1);\r
4356                 $scope.internalView = {\r
4357                     subject: false,\r
4358                     edit: "add"\r
4359                 };\r
4360                 $scope.reloadNewObj();\r
4361                 $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);\r
4362             }\r
4363         };\r
4364 \r
4365         $scope.reloadNewObj = function() {\r
4366             $scope.newSubjectObj = GBPSubjectServices.createObj();\r
4367         };\r
4368 \r
4369         $scope.reload = function(selectedObj) {\r
4370             $scope.selectedSubject = selectedObj;\r
4371             $scope.newSubjectObj = selectedObj;\r
4372             $scope.internalView.subject = true;\r
4373         };\r
4374 \r
4375         $scope.showForm = function() {\r
4376             $scope.reloadNewObj();\r
4377             $scope.internalView.subject = true;\r
4378             $scope.internalView.edit = "add";\r
4379             $scope.selectedSubject = null;\r
4380         };\r
4381 \r
4382         $scope.close = function(){\r
4383             $scope.internalView.subject = false;\r
4384             $scope.internalView.edit = "view";\r
4385         };\r
4386 \r
4387         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4388             if (!event.defaultPrevented) {\r
4389                 if ( $scope.selectedSubject ) {\r
4390                     $scope.internalView.subject = true;\r
4391                     $scope.internalView.edit = "edit";\r
4392                     angular.copy($scope.selectedSubject, $scope.newSubjectObj);\r
4393                 }\r
4394                 event.defaultPrevented = true;\r
4395             }\r
4396         });\r
4397 \r
4398         $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
4399             $scope.init();\r
4400         });\r
4401 \r
4402         $scope.$on('GBP_SUBJECTS_LABEL', function(event, obj){\r
4403             obj.labels = $scope.displayLabel;\r
4404         });\r
4405 \r
4406         $scope.$on("WIZARD_RULE_RELOAD", function(event, args){\r
4407             //$scope.selectedEpg['consumer-named-selector'] = args;\r
4408             $scope.newSubjectObj['rule'] = args;\r
4409             $scope.updateList($scope.list, $scope.newSubjectObj, "id");\r
4410             $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);\r
4411         });\r
4412     }]);\r
4413 \r
4414     gbp.register.controller('wizardRuleCtrl', ['$scope','GBPRuleServices', '$filter', function($scope, GBPRuleServices, $filter){\r
4415         $scope.list = [];\r
4416         $scope.selectedRule = null;\r
4417         $scope.newRuleObj = GBPRuleServices.createObj();\r
4418         $scope.displayLabel = 'name';\r
4419         $scope.internalView = {\r
4420             rule : false,\r
4421             edit : "view"\r
4422         };\r
4423         $scope.crudLabel = 'Rule list';\r
4424         $scope.errors = {};\r
4425 \r
4426         var path = null,\r
4427             mandatoryProperties = ['order'],\r
4428 \r
4429             clear = function(){\r
4430                 $scope.list = [];\r
4431                 $scope.selectedRule = null;\r
4432                 $scope.newRuleObj = GBPRuleServices.createObj();\r
4433                 $scope.internalView = {\r
4434                     rule : false,\r
4435                     edit : "view"\r
4436                 };\r
4437             };\r
4438 \r
4439         $scope.init = function() {\r
4440             \r
4441         };\r
4442 \r
4443         $scope.save = function(){\r
4444             $scope.updateList($scope.list, $scope.newRuleObj, "name");\r
4445             $scope.reload($scope.newRuleObj);\r
4446             $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
4447             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newRuleObj);\r
4448         };\r
4449 \r
4450         $scope.delete = function() {\r
4451             if($scope.selectedRule) {\r
4452                 var index = $scope.list.indexOf($scope.selectedRule);\r
4453                 $scope.list.splice(index, 1);\r
4454                 $scope.internalView = {\r
4455                     rule: false,\r
4456                     edit: "add"\r
4457                 };\r
4458                 $scope.reloadNewObj();\r
4459                 $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
4460             }\r
4461         };\r
4462 \r
4463         $scope.reloadNewObj = function() {\r
4464             $scope.newRuleObj = GBPRuleServices.createObj();\r
4465         };\r
4466 \r
4467         $scope.reload = function(selectedObj) {\r
4468             $scope.selectedRule = selectedObj;\r
4469             $scope.newRuleObj = selectedObj;\r
4470             $scope.internalView.rule = true;\r
4471             $scope.$broadcast('WIZARD_RULE_RELOAD');\r
4472         };\r
4473 \r
4474         $scope.showForm = function() {\r
4475             $scope.reloadNewObj();\r
4476             $scope.internalView.rule = true;\r
4477             $scope.internalView.edit = "add";\r
4478             $scope.selectedRule = null;\r
4479         };\r
4480 \r
4481         $scope.close = function(){\r
4482             $scope.internalView.rule = false;\r
4483             $scope.internalView.edit = "view";\r
4484         };\r
4485 \r
4486         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4487             if (!event.defaultPrevented) {\r
4488                 if ( $scope.selectedRule ) {\r
4489                 $scope.internalView.rule = true;\r
4490                 $scope.internalView.edit = "edit";\r
4491                     angular.copy($scope.selectedRule, $scope.newRuleObj);\r
4492                 }\r
4493                 event.defaultPrevented = true;\r
4494             }\r
4495         });\r
4496 \r
4497         $scope.$on('GBP_SUBJECT_RELOAD',function(){\r
4498             $scope.init();\r
4499         });\r
4500 \r
4501         $scope.$on("WIZARD_CLASREF_RELOAD", function(event, args){\r
4502             $scope.newRuleObj['classifier-ref'] = args;\r
4503             $scope.updateList($scope.list, $scope.newRuleObj, "name");\r
4504             $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
4505         });\r
4506 \r
4507         $scope.$on("WIZARD_ACTIONREF_RELOAD", function(event, args){\r
4508             $scope.newRuleObj['action-ref'] = args;\r
4509             $scope.updateList($scope.list, $scope.newRuleObj, "name");\r
4510             $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
4511         });\r
4512     }]);\r
4513 \r
4514     gbp.register.controller('wizardClauseCtrl', ['$scope','GBPClauseServices', 'GBPSubjectServices', \r
4515         function($scope, GBPClauseServices, GBPSubjectServices){\r
4516         $scope.list = [];\r
4517         $scope.selectedClause = null;\r
4518         $scope.newClauseObj = GBPClauseServices.createObj();\r
4519         $scope.internalView = {\r
4520             clause: false,\r
4521             edit: "view"\r
4522         };\r
4523         $scope.displayLabel = 'name';\r
4524         $scope.crudLabel = 'Clause list';\r
4525 \r
4526         $scope.subjects = {'options' : [], 'labels' : null};\r
4527         $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);\r
4528 \r
4529         var path = null,\r
4530 \r
4531             clear = function(){\r
4532                 $scope.list = [];\r
4533                 $scope.selectedClause = null;\r
4534                 $scope.newClauseObj = GBPClauseServices.createObj();\r
4535                 $scope.internalView = {\r
4536                     clause: false,\r
4537                     edit: "view"\r
4538                 };\r
4539             };\r
4540 \r
4541         //move to separate ctrl \/\r
4542         $scope.addNewElem = function(templateObj) {\r
4543             if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
4544                 $scope.init();\r
4545                 var objToPush = templateObj || "";\r
4546                 $scope.newClauseObj['subject-refs'].push(objToPush);\r
4547             }\r
4548         };\r
4549 \r
4550         $scope.deleteElemAt = function(index) {\r
4551             if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
4552                 $scope.newClauseObj['subject-refs'].splice(index, 1);\r
4553             }\r
4554         };\r
4555 \r
4556         $scope.updateAt = function(index, value) {\r
4557             if($scope.newClauseObj && $scope.newClauseObj['subject-refs'] && $scope.newClauseObj['subject-refs'].length >= index) {\r
4558                 $scope.newClauseObj['subject-refs'][index] = value;\r
4559             }\r
4560         };\r
4561         //move to separate ctrl /\\r
4562 \r
4563         $scope.init = function() {\r
4564             if($scope.selectedContract && $scope.selectedContract['subject'].length>0) {\r
4565                 $scope.subjects.options = $scope.selectedContract['subject'];\r
4566             }\r
4567         };\r
4568 \r
4569         $scope.save = function(){\r
4570             $scope.updateList($scope.list, $scope.newClauseObj, "name");\r
4571             $scope.reload($scope.newClauseObj);\r
4572             $scope.$emit('WIZARD_CLAUSE_RELOAD', $scope.list);\r
4573             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newClauseObj);\r
4574         };\r
4575 \r
4576         $scope.delete = function() {\r
4577             if($scope.selectedClause) {\r
4578                 var index = $scope.list.indexOf($scope.selectedClause);\r
4579                 $scope.list.splice(index, 1);\r
4580                 $scope.internalView = {\r
4581                     clause: false,\r
4582                     edit: "add"\r
4583                 };\r
4584                 $scope.$emit('WIZARD_CLAUSE_RELOAD', $scope.list);\r
4585             }\r
4586         };\r
4587 \r
4588         $scope.reloadNewObj = function() {\r
4589             $scope.newClauseObj = GBPClauseServices.createObj();\r
4590         };\r
4591 \r
4592         $scope.reload = function(selectedObj) {\r
4593             $scope.selectedClause = selectedObj;\r
4594             $scope.newClauseObj = selectedObj;\r
4595             $scope.internalView.clause = true;\r
4596         };\r
4597 \r
4598         $scope.showForm = function() {\r
4599             $scope.reloadNewObj();\r
4600             $scope.internalView.clause = true;\r
4601             $scope.internalView.edit = "add";\r
4602             $scope.selectedClause = null;\r
4603         };\r
4604 \r
4605         $scope.close = function(){\r
4606             $scope.internalView.clause = false;\r
4607             $scope.internalView.edit = "view";\r
4608         };\r
4609 \r
4610         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4611             if (!event.defaultPrevented) {\r
4612                 if ( $scope.selectedClause ) {\r
4613                     $scope.internalView.clause = true;\r
4614                     $scope.internalView.edit = "edit";\r
4615                     angular.copy($scope.selectedClause, $scope.newClauseObj);\r
4616                 }\r
4617                 event.defaultPrevented = true;\r
4618             }\r
4619         });\r
4620 \r
4621         $scope.$on('WIZARD_SUBJECT_RELOAD',function(){\r
4622             $scope.init();\r
4623         });\r
4624     }]);\r
4625 \r
4626     gbp.register.controller('wizardActionRefCtrl', ['$scope','GBPActionRefsServices', 'GBPActionInstanceServices', '$filter', function($scope, GBPActionRefsServices, GBPActionInstanceServices, $filter){\r
4627         $scope.list = [];\r
4628         $scope.selectedActionRef = null;\r
4629         $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
4630         $scope.displayLabel = 'name';\r
4631         $scope.internalView = {\r
4632             actionRef : false,\r
4633             edit : "view"\r
4634         };\r
4635         $scope.crudLabel = 'Action ref list';\r
4636 \r
4637         $scope.actionInstanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
4638 \r
4639         var path = null,\r
4640             mandatoryProperties = ['order'],\r
4641 \r
4642             actionInstanceNamesLoad = function() {\r
4643                 if($scope.tenant) {\r
4644                     var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.tenant.id);\r
4645                     GBPActionInstanceServices.load(actionInstancePath, function(data){\r
4646                         $scope.actionInstanceNames.options = data;\r
4647                     },function(){\r
4648                         //TODO: error cbk\r
4649                     });\r
4650                 }\r
4651             },\r
4652 \r
4653             clear = function(){\r
4654                 $scope.list = [];\r
4655                 $scope.selectedActionRef = null;\r
4656                 $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
4657                 $scope.internalView = {\r
4658                     actionRef : false,\r
4659                     edit : "view"\r
4660                 };\r
4661             };\r
4662 \r
4663         $scope.init = function() {\r
4664             actionInstanceNamesLoad();\r
4665         };\r
4666 \r
4667         $scope.save = function(){\r
4668             $scope.updateList($scope.list, $scope.newActionRefObj, "name");\r
4669             $scope.reload($scope.newActionRefObj);\r
4670             $scope.$emit('WIZARD_ACTIONREF_RELOAD', $scope.list);\r
4671             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newActionRefObj);\r
4672         };\r
4673 \r
4674         $scope.delete = function() {\r
4675             if($scope.selectedActionRef) {\r
4676                 var index = $scope.list.indexOf($scope.selectedActionRef);\r
4677                 $scope.list.splice(index, 1);\r
4678                 $scope.internalView = {\r
4679                     actionRef: false,\r
4680                     edit: "add"\r
4681                 };\r
4682                 $scope.$emit('WIZARD_ACTIONREF_RELOAD', $scope.list);\r
4683             }\r
4684         };\r
4685 \r
4686         $scope.reloadNewObj = function() {\r
4687             $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
4688         };\r
4689 \r
4690         $scope.reload = function(selectedObj) {\r
4691             $scope.selectedActionRef = selectedObj;\r
4692             $scope.newActionRefObj = selectedObj;\r
4693             $scope.internalView.actionRef = true;\r
4694         };\r
4695 \r
4696         $scope.showForm = function() {\r
4697             $scope.reloadNewObj();\r
4698             $scope.internalView.actionRef = true;\r
4699             $scope.internalView.edit = "add";\r
4700             $scope.selectedActionRef = null;\r
4701         };\r
4702 \r
4703         $scope.close = function(){\r
4704             $scope.internalView.actionRef = false;\r
4705             $scope.internalView.edit = "view";\r
4706         };\r
4707 \r
4708         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4709             if (!event.defaultPrevented) {\r
4710                 if ( $scope.selectedActionRef ) {\r
4711                     $scope.internalView.actionRef = true;\r
4712                     $scope.internalView.edit = "edit";\r
4713                     angular.copy($scope.selectedActionRef, $scope.newActionRefObj);\r
4714                 }\r
4715                 event.defaultPrevented = true;\r
4716             }\r
4717         });\r
4718 \r
4719         $scope.$on('WIZARD_RULE_RELOAD',function(){\r
4720             $scope.init();\r
4721         });\r
4722     }]);\r
4723 \r
4724     gbp.register.controller('wizardClassifierRefCtrl', ['$scope','GBPClassifierRefsServices', 'GBPClassifierInstanceServices', '$filter', function($scope, GBPClassifierRefsServices, GBPClassifierInstanceServices, $filter){\r
4725         $scope.list = [];\r
4726         $scope.selectedClassifierRef = null;\r
4727         $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
4728         $scope.displayLabel = 'name';\r
4729         $scope.internalView = {\r
4730             classifierRef : false,\r
4731             edit : "view"\r
4732         };\r
4733 \r
4734         $scope.instanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
4735 \r
4736         $scope.formDirections = ['in', 'out', 'bidirectional'];\r
4737         $scope.formConnectionTracking = ['normal', 'reflexive'];\r
4738 \r
4739         $scope.crudLabel = 'Classifier ref list';\r
4740 \r
4741         var path = null,\r
4742 \r
4743             instanceNamesLoad = function() {\r
4744                 if($scope.tenant) {\r
4745                     var classifierInstancePath = GBPClassifierInstanceServices.createPathObj($scope.tenant.id);\r
4746                     GBPClassifierInstanceServices.load(classifierInstancePath, function(data){\r
4747                         $scope.instanceNames.options = data;\r
4748                     },function(){\r
4749                         //TODO: error cbk\r
4750                     });\r
4751                 }\r
4752             },\r
4753 \r
4754             clear = function(){\r
4755                 $scope.list = [];\r
4756                 $scope.selectedClassifierRef = null;\r
4757                 $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
4758                 $scope.internalView = {\r
4759                     classifierRef : false,\r
4760                     edit : "view"\r
4761                 };\r
4762             };\r
4763 \r
4764         $scope.init = function() {\r
4765             instanceNamesLoad();\r
4766         };\r
4767 \r
4768         $scope.save = function(){\r
4769             $scope.updateList($scope.list, $scope.newClassifierRefObj, "name");\r
4770             $scope.reload($scope.newClassifierRefObj);\r
4771             $scope.$emit('WIZARD_CLASREF_RELOAD', $scope.list);\r
4772             $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newClassifierRefObj);\r
4773         };\r
4774 \r
4775         $scope.delete = function() {\r
4776             if($scope.selectedClassifierRef) {\r
4777                 var index = $scope.list.indexOf($scope.selectedClassifierRef);\r
4778                 $scope.list.splice(index, 1);\r
4779                 $scope.internalView = {\r
4780                     classifierRef: false,\r
4781                     edit: "add"\r
4782                 };\r
4783                 $scope.$emit('WIZARD_CLASREF_RELOAD', $scope.list);\r
4784             }\r
4785         };\r
4786 \r
4787         $scope.reloadNewObj = function() {\r
4788             $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
4789         };\r
4790 \r
4791         $scope.reload = function(selectedObj) {\r
4792             $scope.selectedClassifierRef = selectedObj;\r
4793             $scope.newClassifierRefObj = selectedObj;\r
4794             $scope.internalView.classifierRef = true;\r
4795         };\r
4796 \r
4797         $scope.showForm = function() {\r
4798             $scope.reloadNewObj();\r
4799             $scope.internalView.classifierRef = true;\r
4800             $scope.internalView.edit = "add";\r
4801             $scope.selectedClassifierRef = null;\r
4802         };\r
4803 \r
4804         $scope.close = function(){\r
4805             $scope.internalView.classifierRef = false;\r
4806             $scope.internalView.edit = "view";\r
4807         };\r
4808 \r
4809         $scope.$on('PGN_EDIT_ELEM', function(event){\r
4810             if (!event.defaultPrevented) {\r
4811                 if ( $scope.selectedClassifierRef ) {\r
4812                     $scope.internalView.classifierRef = true;\r
4813                     $scope.internalView.edit = "edit";\r
4814                     angular.copy($scope.selectedClassifierRef, $scope.newClassifierRefObj);\r
4815                 }\r
4816                 event.defaultPrevented = true;\r
4817             }\r
4818         });\r
4819 \r
4820         $scope.$on('WIZARD_RULE_RELOAD',function(){\r
4821             $scope.init();\r
4822         });\r
4823     }]);\r
4824 \r
4825     gbp.register.controller('rendererStateCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){\r
4826         $scope.data = {'subject-feature-definitions' : {}};\r
4827         $scope.view_path = 'src/app/gbp/views/governance';\r
4828 \r
4829         var init = function(){\r
4830             GPBServices.getDefinitions(function(classifiersDefs, actionsDefs){\r
4831                 $scope.data['subject-feature-definitions']['classifier-definition'] = classifiersDefs;\r
4832                 $scope.data['subject-feature-definitions']['action-definition'] = actionsDefs;\r
4833             }, function(){\r
4834                 //error\r
4835             });\r
4836         };\r
4837         \r
4838         init();\r
4839     }]);\r
4840 \r
4841     gbp.register.controller('layerCtrl', ['$scope', function($scope){\r
4842 \r
4843         var moveOffset = 1;\r
4844         $scope.currentDisplayIndex = 1;\r
4845         $scope.displayOffsets = [-1, 0, 1];\r
4846         $scope.expanded = true;\r
4847 \r
4848         $scope.init = function(key, value){\r
4849             $scope.data = value;\r
4850             if($scope.checkData(value, 'Array')){\r
4851                 $scope.setActData($scope.data[$scope.data.length - 1]);\r
4852             }\r
4853         }; \r
4854 \r
4855         $scope.toggleExpanded = function(){\r
4856             $scope.expanded = !$scope.expanded;\r
4857         };\r
4858 \r
4859         $scope.shiftDisplayNext = function() {\r
4860             $scope.currentDisplayIndex = Math.min($scope.currentDisplayIndex + moveOffset, $scope.data.length - 2);\r
4861         };\r
4862 \r
4863         $scope.shiftDisplayPrev = function() {\r
4864             $scope.currentDisplayIndex = Math.max($scope.currentDisplayIndex - moveOffset, 1);\r
4865         };\r
4866 \r
4867         $scope.showPrevButton = function() {\r
4868             return $scope.currentDisplayIndex > 1;\r
4869         };\r
4870 \r
4871         $scope.showNextButton = function() {\r
4872             return $scope.data && $scope.currentDisplayIndex < $scope.data.length - 2;\r
4873         };\r
4874 \r
4875         $scope.setActData = function(data) {\r
4876             $scope.actSelected = data;\r
4877         };\r
4878 \r
4879         $scope.checkData = function(data, type){\r
4880             var result = {'Array' : data instanceof Array,\r
4881                         'Object' : data instanceof Object};\r
4882 \r
4883             return result[type];\r
4884         };\r
4885     }]);\r
4886 \r
4887     gbp.register.controller('actionReferenceWizardCtrl', ['$scope', '$filter', 'GBPRuleServices', 'GBPActionInstanceServices', function($scope, $filter, GBPRuleServices, GBPActionInstanceServices){ \r
4888         $scope.wizardPage = null;\r
4889         $scope.path = {};\r
4890         $scope.rule = {};\r
4891 \r
4892         $scope.actionInstanceNames = {'options' : [], 'labels' : "name"};\r
4893 \r
4894         var actionInstanceNamesLoad = function() {\r
4895             var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);\r
4896             GBPActionInstanceServices.load(actionInstancePath, function(data){\r
4897                 $scope.actionInstanceNames.options = data;\r
4898             },function(){\r
4899                 //TODO: error cbk\r
4900             });\r
4901         };\r
4902 \r
4903         $scope.init = function() {\r
4904             $scope.setPage('reference');\r
4905         };\r
4906 \r
4907         $scope.setPage = function(pageName, object) {\r
4908             $scope.wizardPage = pageName;\r
4909         };\r
4910 \r
4911         $scope.submit = function() {\r
4912             //if($scope.validateForm($scope.actionsForm)){\r
4913                 $scope.actionInstanceNames.options.forEach(function(i) {\r
4914                     path = GBPActionInstanceServices.createPathObj($scope.path.tenantId, i.name);\r
4915                 //saveParams();\r
4916 \r
4917                     GBPActionInstanceServices.send(path, i, function(data){\r
4918                     $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
4919                     }, function(){\r
4920                         //TODO: error cbk\r
4921                     });\r
4922                 });\r
4923                 \r
4924             //}\r
4925 \r
4926             //if($scope.validateForm($scope.rulesForm)){\r
4927                 path = GBPRuleServices.createPathObj($scope.path.tenantId, $scope.path.contractId, $scope.path.subjectId, $scope.path.ruleId);\r
4928                 GBPRuleServices.send(path, $scope.rule, function(data){\r
4929 \r
4930                     $scope.wizards.actionReferenceWizard = false;\r
4931                     \r
4932                     //$scope.sendReloadEventFromRoot('GBP_TENANT_RELOAD');\r
4933                 }, function(){\r
4934                     //TODO: error cbk\r
4935                 });\r
4936             //}\r
4937             //$scope.\r
4938         };\r
4939 \r
4940         $scope.$on('ACTION_RULE_WIZARD_LOAD', function(event, data){\r
4941             $scope.rule = angular.copy(data.data);\r
4942             $scope.path = data.path;\r
4943         });\r
4944 \r
4945         $scope.$on('WIZARD_ACTIONREF_ADD', function(event, data){\r
4946             if(!$scope.rule['action-ref']) {\r
4947                 $scope.rule['action-ref'] = [];\r
4948             }\r
4949             $scope.updateList($scope.rule['action-ref'], data, "name");\r
4950         });\r
4951 \r
4952         $scope.$on('WIZARD_ACTIONREF_DELETE', function(event, data){\r
4953             $scope.rule['action-ref'].splice(data, 1);\r
4954         });\r
4955 \r
4956         $scope.$on('WIZARD_ACTIONINSTANCE_ADD', function(event, data){\r
4957             $scope.updateList($scope.actionInstanceNames.options, data, "name");\r
4958 \r
4959             $scope.setPage('reference');\r
4960         });\r
4961 \r
4962         $scope.$on('GBP_TENANT_RELOAD',function(){\r
4963             actionInstanceNamesLoad();\r
4964         });\r
4965 \r
4966     }]);\r
4967 \r
4968     gbp.register.controller('actionsRefListCtrl', ['$scope', '$filter', function($scope, $filter){ \r
4969         \r
4970         $scope.actionReferenceForm = false;\r
4971 \r
4972         $scope.showForm = function(object) {\r
4973             $scope.actionReferenceForm = true;\r
4974             $scope.newActionRefObj = object || null;\r
4975         };\r
4976 \r
4977         $scope.closeForm = function() {\r
4978             $scope.actionReferenceForm = false;\r
4979         };\r
4980 \r
4981         $scope.save = function(){\r
4982             $scope.$emit('WIZARD_ACTIONREF_ADD', $scope.newActionRefObj);\r
4983             $scope.resetObject();\r
4984         };\r
4985 \r
4986         $scope.deleteElemAt = function(index) {\r
4987             $scope.$emit('WIZARD_ACTIONREF_DELETE', index);\r
4988             $scope.resetObject();\r
4989         };\r
4990 \r
4991         $scope.resetObject = function() {\r
4992             $scope.newActionRefObj = null;\r
4993         };\r
4994 \r
4995         \r
4996 \r
4997     }]);\r
4998 \r
4999     gbp.register.controller('actionInstanceWizardCtrl', ['$scope', '$filter', 'GPBServices', 'GBPActionInstanceServices', function($scope, $filter, GPBServices, GBPActionInstanceServices){ \r
5000         $scope.actionDefinitions = {'options' : [], 'labels' : "name"};\r
5001         $scope.newActionObj = GBPActionInstanceServices.createObj();\r
5002 \r
5003         var loadDefinitions = function() {\r
5004             GPBServices.getDefinitions(function(classifierDefs, actionDefs) {\r
5005                 $scope.actionDefinitions.options = actionDefs;\r
5006                 //$scope.getDisplayLabelsFromCtrl('GBP_ACTIONS_LABEL', $scope.actionDefinitions);\r
5007             });\r
5008         };\r
5009 \r
5010         $scope.reloadDefs = function(){\r
5011             $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newActionObj['action-definition-id']));\r
5012 \r
5013             //TODO: rework\r
5014             if($scope.defs.length && $scope.defs[0].name === 'sfc-chain-name') {\r
5015                 GPBServices.getServiceFunctionChains(function(data) {\r
5016                     $scope.serviceFunctionChains = data;\r
5017                 });\r
5018             }\r
5019         };\r
5020 \r
5021         $scope.getDefinitionObjParams = function(id){\r
5022             return GPBServices.getDefinitionObjParams($scope.actionDefinitions.options, id);\r
5023         };\r
5024 \r
5025         $scope.save = function(){\r
5026             $scope.newActionObj['parameter-value'] = [];\r
5027             $scope.$broadcast('GBP_SAVE_PARAM');\r
5028             $scope.$emit('WIZARD_ACTIONINSTANCE_ADD', $scope.newActionObj);\r
5029             $scope.resetObject();\r
5030         };\r
5031 \r
5032         $scope.resetObject = function() {\r
5033             $scope.newActionObj = GBPActionInstanceServices.createObj();\r
5034         };\r
5035 \r
5036         $scope.saveParam = function() {\r
5037             \r
5038         };\r
5039 \r
5040         $scope.addParam = function(name, type, value) {\r
5041             $scope.newActionObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));\r
5042         };\r
5043 \r
5044         loadDefinitions();\r
5045 \r
5046     }]);\r
5047 \r
5048 });\r
5049 \r
5050 \r