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