GBP UI fixes
[groupbasedpolicy.git] / groupbasedpolicy-ui / module / src / main / resources / gbp / gbp.services.js
1 define(['app/gbp/gbp.module'], function(gbp) {\r
2 \r
3     gbp.register.factory('GBPRestangular', function(Restangular, ENV) {\r
4         return Restangular.withConfig(function(RestangularConfig) {\r
5             RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));\r
6         });\r
7     });\r
8 \r
9     gbp.register.factory('GBPConstants', function() {\r
10         var c = { colors: {}, strings: {}};\r
11 \r
12         c.strings.flood = 'flood';\r
13         c.strings.bridge = 'bridge';\r
14         c.strings.l3ctx = 'l3ctx';\r
15         c.strings.subnet = 'subnet';\r
16 \r
17         c.strings.config = 'CONFIG';\r
18         c.strings.oper = 'OPERATIONAL';\r
19         c.strings.l2l3 = 'L2L3';\r
20         c.strings.mock = 'MOCK';\r
21         c.strings.sigmaTopoDefaultText = 'SIGMATOPODEFAULTTEXT';\r
22         c.strings.sigmaTopoDefault = 'SIGMATOPODEFAULTTEXT';\r
23 \r
24         c.colors[c.strings.flood] = '#DF0101';\r
25         c.colors[c.strings.bridge] = '#0080FF';\r
26         c.colors[c.strings.l3ctx] = '#3ADF00';\r
27         c.colors[c.strings.subnet] = '#FF9933';\r
28         c.colors[c.strings.sigmaTopoDefaultText] = '#fff';\r
29 \r
30         c.colors[c.strings.flood+'-'+c.strings.bridge] = '#6666FF';\r
31         c.colors[c.strings.bridge+'-'+c.strings.l3ctx] = '#6666FF';\r
32 \r
33         c.colors[c.strings.subnet+'-'] = '#6666FF';\r
34 \r
35         return c;\r
36     });\r
37 \r
38     gbp.register.factory('MockServices', function() {\r
39 \r
40         var ms = {};\r
41 \r
42         ms.mockTopoData = function() {\r
43             var lid = 0,\r
44                 nodeRaw = [0, 1, 2, 3],\r
45                 linkRaw = [[0, 1], [2, 3], [3, 0], [0, 3]],\r
46                 nodes = nodeRaw.map(function(data) {\r
47                     return {\r
48                                 'id': 'n' + data,\r
49                                 'label': 'LABEL'+data,\r
50                                 'size': 3,\r
51                                 'x': Math.random(),\r
52                                 'y': Math.random(),\r
53                                 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
54                             };\r
55                 }),\r
56                 links = linkRaw.map(function(data) {\r
57                     var obj = {\r
58                                 id: 'e' + lid,\r
59                                 source: 'n' + data[0],\r
60                                 target: 'n' + data[1],\r
61                                 color: GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
62                             };\r
63                     lid = lid + 1;\r
64                     return obj;\r
65                 });\r
66 \r
67             return {nodes: nodes, links: links};\r
68         };\r
69 \r
70         return ms;\r
71     });\r
72 \r
73     gbp.register.factory('TopologyDataLoaders', function(GBPRestangular, GBPConstants) {\r
74         var tdl = {};\r
75 \r
76         tdl.getSubjectsBetweenEndpointGroups = function(storage, tenantId, successCbk, errorCbk) {\r
77             var restObj = GBPRestangular.one('restconf').one('operations'),\r
78                 rpcRes = 'ui-backend:get-subjects-between-endpoint-groups',\r
79                 reqData = { "input": { "tenant-id": tenantId }};\r
80 \r
81             if(storage) {\r
82                 reqData.input['from-oper-data'] = {};\r
83             }\r
84 \r
85             restObj.post(rpcRes, reqData).then(function(data) {\r
86                 // console.info('got data', data.output);\r
87                 successCbk(data);\r
88             }, function(res) {\r
89                 errorCbk(res);\r
90             });\r
91         };\r
92 \r
93         //Policies are representing links in PGN topology\r
94         tdl.getGroupRulesBetweenEndpointGroups = function(successCbk, errorCbk) {\r
95             var restObj = GBPRestangular.one('restconf').one('operations'),\r
96                 rpcRes = 'pgn-application:get-group-rules-between-endpoint-groups',\r
97                 reqData = { "input": { "endpoint-group-pair":[] }};\r
98 \r
99             restObj.post(rpcRes, reqData).then(function(data) {\r
100                 successCbk(data); //set topology links\r
101             }, function(res) {\r
102                 errorCbk(res);\r
103             });\r
104         };\r
105 \r
106         //Groups are representing nodes in PGN topology\r
107         tdl.getEndpointGroups = function(successCbk, errorCbk) {\r
108             var tenantId = getId(idTypes.tenant),\r
109                 restObj = GBPRestangular.one('restconf').one('operations'),\r
110                 rpcRes = 'pgn-application:get-endpoint-groups',\r
111                 reqData = {\r
112                             "input": {\r
113                                 "endpoint-group-id":[\r
114                                     {\r
115                                         "pgn-application:tenant-id": tenantId\r
116                                     }\r
117                                 ]\r
118                             }\r
119                         };\r
120 \r
121           restObj.post(rpcRes, reqData).then(function(data) {\r
122               successCbk(data); //set topology nodes\r
123           }, function(res) {\r
124               errorCbk(res);\r
125           });\r
126 \r
127         };\r
128 \r
129         tdl.getEpgTopo = function(data){\r
130             var epgData = data.output['endpoint-group-pair-with-subject'],\r
131                 nodes = [],\r
132                 edges = [],\r
133                 setNode = function(obj){\r
134                     var nodeObj = {\r
135                             'id': 'n' + nodes.length,\r
136                             'label': obj.name || obj.id,\r
137                             'name': obj.name,\r
138                             'size': 1,\r
139                             'x': Math.random(),\r
140                             'y': Math.random(),\r
141                             'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
142                         };\r
143 \r
144                     nodes.push(nodeObj);\r
145                     return nodeObj.id;\r
146                 },\r
147                 setEdge = function(sourceId, destId, data) {\r
148                     var obj = {\r
149                             'id': 'e' + edges.length,\r
150                             'source': sourceId,\r
151                             'target': destId,\r
152                             'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],\r
153                             'data': data\r
154                             // 'type': 'curve',\r
155                             // 'size' : 100\r
156                         };\r
157 \r
158                     edges.push(obj);\r
159                 },\r
160                 getObjByProp = function(val, prop, list) {\r
161                     return list.filter(function(i){\r
162                         return i[prop] === val;\r
163                     });\r
164                 };\r
165 \r
166             if(epgData) {\r
167                 epgData.forEach(function(e){\r
168                     var cepgnId = null,\r
169                         pepgnId = null;\r
170 \r
171                     if ( !getObjByProp(e['consumer-endpoint-group-id'],'name', nodes).length ) {\r
172                         var objCepg = {\r
173                             type: 'epg',\r
174                             name: e['consumer-endpoint-group-id']\r
175                         };\r
176                         cepgnId = setNode(objCepg);\r
177                     } else {\r
178                         cepgnId = getObjByProp(e['consumer-endpoint-group-id'],'name', nodes)[0].id;\r
179                     }\r
180                     if ( !getObjByProp(e['provider-endpoint-group-id'],'name', nodes).length ) {\r
181                         var objPepg = {\r
182                             type: 'epg',\r
183                             name: e['provider-endpoint-group-id']\r
184                         };\r
185                         pepgnId = setNode(objPepg);\r
186                     } else {\r
187                         pepgnId = getObjByProp(e['provider-endpoint-group-id'],'name', nodes)[0].id;\r
188                     }\r
189                     if ( cepgnId && pepgnId ) {\r
190                         setEdge(cepgnId, pepgnId, e['ui-subject']);\r
191                     }\r
192                 });\r
193             }\r
194 \r
195             return {\r
196                 nodes: nodes,\r
197                 links: edges\r
198             };\r
199         };\r
200 \r
201         \r
202         tdl.getL2L3 = function(storage, tenantId, successCbk, errorCbk) {\r
203             //l2-bridge-domain\r
204             var lid = 0,\r
205                 nid = 0,\r
206                 getL2L3Label = function(node) {\r
207                     return node.name || node.id;\r
208                 },\r
209                 getSubnetLabel = function(node) {\r
210                     return node['ip-prefix'] || node.id;\r
211                 },\r
212                 getNodeColor = function(src) {\r
213                     return GBPConstants.colors[src] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];\r
214                 },\r
215                 getLinkColor = function(from, to) {\r
216                     return GBPConstants.colors[from+'-'+to] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];\r
217                 },\r
218                 getNodes = function(data, srcDesc, getLabelCbk) {\r
219                     var nodes = data.map(function(elem) {\r
220                         var obj = {\r
221                             'id': 'n' + nid,\r
222                             'label': getLabelCbk(elem),\r
223                             'uuid': elem.id,\r
224                             'size': 3,\r
225                             'x': Math.random(),\r
226                             'y': Math.random(),\r
227                             'color': getNodeColor(srcDesc)\r
228                         };\r
229 \r
230                         nid += 1;\r
231                         return obj;\r
232                     });\r
233 \r
234                     return nodes;\r
235                 },\r
236                 getLinks = function(data, srcNodes, targetNodes, fromDesc, toDesc) {\r
237                     var findByUUID = function(array, uuid) {\r
238                         return array.filter(function(elem) {\r
239                             return elem.uuid === uuid;\r
240                         })[0];\r
241                     };\r
242 \r
243                     var links = data.map(function(elem) {\r
244                         var obj = null,\r
245                             src = findByUUID(srcNodes, elem.id),\r
246                             trg = findByUUID(targetNodes, elem.parent);\r
247 \r
248                         if(src && trg) {\r
249                             obj = {\r
250                                 'id': 'e' + lid,\r
251                                 'source': src.id,\r
252                                 'target': trg.id,\r
253                                 'color': getLinkColor(fromDesc, toDesc)\r
254                             };\r
255                             lid += 1;\r
256                         }\r
257 \r
258                         return obj;\r
259                     }).filter(function(elem) {\r
260                         return elem !== null;\r
261                     });\r
262 \r
263                     return links;\r
264                 };\r
265 \r
266             restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);\r
267 \r
268             restObj.get().then(function(data) {\r
269                 var l2FloodNodes = getNodes(data.tenant[0]['l2-flood-domain'] || [], GBPConstants.strings.flood, getL2L3Label),\r
270                     l2BridgeNodes = getNodes(data.tenant[0]['l2-bridge-domain'] || [], GBPConstants.strings.bridge, getL2L3Label),\r
271                     l3ContextNodes = getNodes(data.tenant[0]['l3-context'] || [], GBPConstants.strings.l3ctx, getL2L3Label),\r
272                     subnetNodes = getNodes(data.tenant[0]['subnet'] || [], GBPConstants.strings.subnet, getSubnetLabel),\r
273                     l2FloodLinks = getLinks(data.tenant[0]['l2-flood-domain'] || [], l2FloodNodes, l2BridgeNodes, GBPConstants.strings.flood, GBPConstants.strings.bridge),\r
274                     l2BridgeLinks = getLinks(data.tenant[0]['l2-bridge-domain'] || [], l2BridgeNodes, l3ContextNodes, GBPConstants.strings.bridge, GBPConstants.strings.l3ctx),\r
275                     subnetLinks = getLinks(data.tenant[0]['subnet'] || [], subnetNodes, l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes), GBPConstants.strings.subnet, ''),\r
276                     allNodes = l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes).concat(subnetNodes),\r
277                     allLinks = l2BridgeLinks.concat(l2FloodLinks).concat(subnetLinks);\r
278 \r
279                 successCbk(allNodes, allLinks);\r
280             }, function(res) {\r
281                 errorCbk(res.data, res.status);\r
282             });\r
283         };\r
284 \r
285         return tdl;\r
286 \r
287     });\r
288 \r
289     gbp.register.factory('TopoServices', function(TopologyDataLoaders, MockServices, GBPConstants) {\r
290 \r
291         var ts = {};\r
292 \r
293         var loaders = {};\r
294 \r
295         var legends = {};\r
296 \r
297         var transformPGNTopoNodes = function(data) {\r
298             return data.output['endpoint-group'].map(function(d) {\r
299                 return {\r
300                     id: d.id,\r
301                     group: d.name,\r
302                     sgt: d['security-group-tag']\r
303                 };\r
304             });\r
305         };\r
306 \r
307         var transformPGNTopoLinks = function(data) {\r
308             return data.output['endpoint-group-pair-with-rules'].map(function(d) {\r
309                 return {\r
310                     source: d['provider-group-id'],\r
311                     target: d['consumer-group-id'],\r
312                     policy: d['group-rule'][0]['action-ref'].map(function(r) {\r
313                         return r.name;\r
314                     })\r
315                 };\r
316             });\r
317         };\r
318 \r
319         var gbpLegend = {\r
320             'epg' : GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
321         };\r
322 \r
323         legends[GBPConstants.strings.empty] = {};\r
324         legends[GBPConstants.strings.config] = gbpLegend;\r
325         legends[GBPConstants.strings.oper] = gbpLegend;\r
326         legends[GBPConstants.strings.mock] = gbpLegend;\r
327         legends[GBPConstants.strings.l2l3] = {\r
328             'l2-flood': GBPConstants.colors[GBPConstants.strings.flood],\r
329             'l2-bridge': GBPConstants.colors[GBPConstants.strings.bridge],\r
330             'l3-context': GBPConstants.colors[GBPConstants.strings.l3ctx],\r
331             'subnet': GBPConstants.colors[GBPConstants.strings.subnet],\r
332             'link': GBPConstants.colors[GBPConstants.strings.subnet+'-']\r
333         };\r
334 \r
335         loaders[GBPConstants.strings.empty] = function(successCbk, errorCbk) {\r
336             successCbk([], []);\r
337         };\r
338 \r
339         loaders[GBPConstants.strings.config] = function(successCbk, errorCbk, args) {\r
340             var storage = args.storage || 'config',\r
341                 tenantId = args.tenantId;\r
342                 \r
343        \r
344             TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){\r
345                 var topo = TopologyDataLoaders.getEpgTopo(data);\r
346                 successCbk(topo.nodes, topo.links);\r
347                 //successCbk\r
348             }, errorCbk);\r
349         };\r
350 \r
351         loaders[GBPConstants.strings.oper] = function(successCbk, errorCbk, args) {\r
352             var storage = args.storage || 'config',\r
353                 tenantId = args.tenantId;\r
354 \r
355             TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){\r
356                 var topo = TopologyDataLoaders.getEpgTopo(data);\r
357                 successCbk(topo.nodes, topo.links);\r
358                 //successCbk\r
359             }, errorCbk);\r
360         };\r
361 \r
362         loaders[GBPConstants.strings.l2l3] = function(successCbk, errorCbk, args) {\r
363             var storage = args.storage || 'config',\r
364                 tenantId = args.tenantId;\r
365 \r
366             if(storage && tenantId) {\r
367                 TopologyDataLoaders.getL2L3(storage, tenantId, successCbk, errorCbk);\r
368             } else {\r
369                 //different kind of error\r
370                 errorCbk();\r
371             }\r
372         };\r
373 \r
374         loaders[GBPConstants.strings.mock] = function(successCbk, errorCbk) {\r
375             var data = MockServices.mockTopoData();\r
376             successCbk(data.nodes, data.links);\r
377         };\r
378 \r
379         ts.getConsProvLabel = function(edge, topo){\r
380             var provName = '',\r
381                 conName = '';\r
382 \r
383             topo.nodes.forEach(function(n){\r
384 \r
385                 if ( edge.source === n.id ) {\r
386                     provName = n.name;\r
387                 }\r
388 \r
389                 if ( edge.target === n.id ) {\r
390                     conName = n.name;\r
391                 }\r
392             });\r
393 \r
394             return provName + ':' + conName;\r
395         };\r
396 \r
397         ts.getLegend = function(type) {\r
398             if(type === null || legends.hasOwnProperty(type) === false) {\r
399                 type = GBPConstants.strings.empty;\r
400             }\r
401 \r
402             return legends[type];\r
403         };\r
404 \r
405         ts.loadTopology = function(type, successCbk, errorCbk, args) {\r
406             if(type === null || loaders.hasOwnProperty(type) === false) {\r
407                 type = GBPConstants.strings.empty;\r
408             }\r
409 \r
410             loaders[type](successCbk, errorCbk, args);\r
411         };\r
412 \r
413         return ts;\r
414     });\r
415 \r
416     gbp.register.factory('GPBServices', function(GBPRestangular) {\r
417 \r
418         var s = {};\r
419 \r
420         s.getDefinitions = function(successCbk, errorCbk) {\r
421             var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');\r
422 \r
423             restObj.get().then(function(data) {\r
424                 if(data['subject-feature-definitions']) {\r
425                     var classifiersDefs = data['subject-feature-definitions']['classifier-definition'] || [],\r
426                         actionsDefs = data['subject-feature-definitions']['action-definition'] || [];\r
427                         successCbk(classifiersDefs, actionsDefs);\r
428                 } else {\r
429                     //TODO log error\r
430                 }\r
431             }, function(res) {\r
432                 // errorCbk(res);\r
433             });\r
434         };\r
435 \r
436         s.getUUIDnumber = function() {\r
437             var d = new Date().getTime();\r
438             return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r
439                         var r = (d + Math.random()*16)%16 | 0;\r
440                         d = Math.floor(d/16);\r
441                         return (c=='x' ? r : (r&0x3|0x8)).toString(16);\r
442                     });\r
443         };\r
444 \r
445         s.createRestObj = function(storage) {\r
446             storage = storage || 'config';\r
447             restObj = GBPRestangular.one('restconf').one(storage);\r
448 \r
449             return restObj;\r
450         };\r
451 \r
452         s.send = function(restObj, reqData, successCbk, errorCbk) {\r
453             restObj.customPUT(reqData).then(function(data) {\r
454                 successCbk(data);\r
455             }, function(res) {\r
456                 errorCbk(res.data, res.status);\r
457             });\r
458         };\r
459 \r
460         s.post = function(restObj, reqData, successCbk, errorCbk) {\r
461             restObj.customPOST(reqData).then(function(data) {\r
462                 successCbk(data);\r
463             }, function(res) {\r
464                 errorCbk(res.data, res.status);\r
465             });\r
466         };\r
467 \r
468         s.delete = function(restObj, successCbk, errorCbk) {\r
469             restObj.remove().then(function(data) {\r
470                 successCbk(data);\r
471             }, function(res) {\r
472                 errorCbk(res.data, res.status);\r
473             });\r
474         };\r
475 \r
476         s.load = function(restObj, transformCallback, successCbk, errorCbk) {\r
477             restObj.get().then(function(data) {\r
478                 var objs = transformCallback(data) || [];\r
479                 successCbk(objs);\r
480             }, function(res) {\r
481                 errorCbk(res.data, res.status);\r
482             });\r
483         };\r
484 \r
485         s.stripNullValues = function(obj) {\r
486             Object.keys(obj).forEach(function(k) {\r
487                 if(obj[k] === null) {\r
488                     delete obj[k];\r
489                 }\r
490             });\r
491 \r
492             return obj;\r
493         };\r
494 \r
495         s.removeEmptyElementsFromList = function(list) {\r
496             return list.filter(function(e) {\r
497                 return e !== "";\r
498             });\r
499         };\r
500 \r
501         s.createParamObj = function(name, type, value) {\r
502             var obj = { name: name };\r
503 \r
504             obj[type+'-value'] = value;\r
505 \r
506             return obj;\r
507         };\r
508 \r
509         s.getInstanceParamValue = function(param) {\r
510             return param['int-value'] || param['string-value'] || param['range-value'];\r
511         };\r
512 \r
513         s.getDefinitionObjParams = function(defObj, id) {\r
514             var obj = defObj.filter(function(def) {\r
515                     return def.id === id;\r
516                 })[0],\r
517                 params = (obj && obj.parameter) ? obj.parameter : [];\r
518 \r
519             return params;\r
520 \r
521         };\r
522 \r
523         return s;\r
524 \r
525     });\r
526 \r
527     gbp.register.factory('GBPTenantServices', function(GPBServices) {\r
528 \r
529         var s = {};\r
530 \r
531         var Tenant = function(id, name, description) {\r
532             this.id = id || GPBServices.getUUIDnumber();\r
533             this.name = name || null;\r
534             this.description = description || null;\r
535         };\r
536 \r
537         var createBaseRestObj = function() {\r
538             return GPBServices\r
539                 .createRestObj().one('policy:tenants');\r
540         };\r
541 \r
542         var createRestObj = function(pathObj) {\r
543             return createBaseRestObj().one('tenant').one(pathObj.tenantId);\r
544         };\r
545 \r
546         var transformCallback = function(rawData) {\r
547             // return rawData.map(function(rawObj){\r
548             //     return new Tenant(rawObj.id, rawObj.name, rawObj.description);\r
549             // });\r
550             return rawData.tenants.tenant;\r
551         };\r
552 \r
553         var createData = function(obj) {\r
554             return { tenant : [ GPBServices.stripNullValues(obj) ] };\r
555         };\r
556 \r
557         s.createPathObj = function(tenantId) {\r
558             return {\r
559                 tenantId: tenantId\r
560             };\r
561         };\r
562 \r
563         s.createObj = function() {\r
564             return new Tenant();\r
565         };\r
566 \r
567         s.send = function(path, obj, successCbk, errorCbk) {\r
568             var restObj = createRestObj(path),\r
569                 reqData = createData(obj);\r
570 \r
571             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
572         };\r
573 \r
574         s.modify = function(path, obj, successCbk, errorCbk) {\r
575             var restObj = createRestObj(path),\r
576                 reqData = createData(obj);\r
577 \r
578             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
579         };\r
580 \r
581         s.delete = function(path, successCbk, errorCbk) {\r
582             var restObj = createRestObj(path);\r
583 \r
584             GPBServices.delete(restObj, successCbk, errorCbk);\r
585         };\r
586 \r
587         s.load = function(successCbk, errorCbk) {\r
588             var restObj = createBaseRestObj();\r
589             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
590         };\r
591 \r
592         return s;\r
593 \r
594     });\r
595 \r
596     gbp.register.factory('GBPContractServices', function(GPBServices) {\r
597 \r
598         var s = {};\r
599 \r
600         var Contract = function(id, description, parent) {\r
601             this.id = id || GPBServices.getUUIDnumber();\r
602             this.description = description || null;\r
603             this.parent = parent || null;\r
604         };\r
605 \r
606         var createBaseRestObj = function(pathObj) {\r
607             return GPBServices.createRestObj().one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
608         };\r
609 \r
610         var createRestObj = function(pathObj) {\r
611             return createBaseRestObj(pathObj).one('contract').one(pathObj.contractId);\r
612         };\r
613 \r
614         var transformCallback = function(rawData) {\r
615             // return rawData.map(function(rawObj){\r
616             //     return new Contract(rawObj.id, rawObj.description);\r
617             // });\r
618             return rawData.tenant[0].contract;\r
619         };\r
620 \r
621         var createData = function(obj) {\r
622             return { contract : [ GPBServices.stripNullValues(obj) ] };\r
623         };\r
624 \r
625         s.createPathObj = function(tenantId, contractId) {\r
626             return {\r
627                 tenantId: tenantId,\r
628                 contractId: contractId\r
629             };\r
630         };\r
631 \r
632         s.createObj = function() {\r
633             return new Contract();\r
634         };\r
635 \r
636         s.send = function(path, obj, successCbk, errorCbk) {\r
637             var restObj = createRestObj(path),\r
638                 reqData = createData(obj);\r
639 \r
640             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
641         };\r
642 \r
643         s.delete = function(path, successCbk, errorCbk) {\r
644             var restObj = createRestObj(path);\r
645 \r
646             GPBServices.delete(restObj, successCbk, errorCbk);\r
647         };\r
648 \r
649         s.load = function(path, successCbk, errorCbk) {\r
650             var restObj = createBaseRestObj(path);\r
651 \r
652             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
653         };\r
654 \r
655         return s;\r
656 \r
657     });\r
658 \r
659     gbp.register.factory('GBPClauseServices', function(GPBServices) {\r
660 \r
661         var s = {};\r
662 \r
663         var Clause = function(name, subjectRefs) {\r
664             this.name = name || null;\r
665             this['subject-refs'] = subjectRefs || [];\r
666         };\r
667 \r
668         var createBaseRestObj = function(pathObj) {\r
669             return GPBServices.createRestObj()\r
670                 .one('policy:tenants').one('tenant').one(pathObj.tenantId)\r
671                 .one('contract').one(pathObj.contractId);\r
672         };\r
673 \r
674         var createRestObj = function(pathObj) {\r
675             return createBaseRestObj(pathObj).one('clause').one(pathObj.clauseId);\r
676         };\r
677 \r
678         var transformCallback = function(rawData) {\r
679             var data = null,\r
680                 clauseData = rawData.contract[0].clause;\r
681 \r
682             if(clauseData) {\r
683                 data = clauseData.map(function(elem) {\r
684                     if(elem.hasOwnProperty('subject-refs') === false) {\r
685                         elem['subject-refs'] = [];\r
686                     }\r
687                     return elem;\r
688                 });\r
689             }\r
690 \r
691             return data;\r
692         };\r
693 \r
694         var createData = function(obj) {\r
695             var o = GPBServices.stripNullValues(obj);\r
696 \r
697             if(o['subject-refs']) {\r
698                 o['subject-refs'] = GPBServices.removeEmptyElementsFromList(o['subject-refs']);\r
699             }\r
700 \r
701             return { clause : [ o ] };\r
702         };\r
703 \r
704         s.createPathObj = function(tenantId, contractId, clauseId) {\r
705             return {\r
706                 tenantId: tenantId,\r
707                 contractId: contractId,\r
708                 clauseId: clauseId\r
709             };\r
710         };\r
711 \r
712         s.createObj = function() {\r
713             return new Clause();\r
714         };\r
715 \r
716         s.send = function(path, obj, successCbk, errorCbk) {\r
717             var restObj = createRestObj(path),\r
718                 reqData = createData(obj);\r
719 \r
720             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
721         };\r
722 \r
723         s.delete = function(path, successCbk, errorCbk) {\r
724             var restObj = createRestObj(path);\r
725 \r
726             GPBServices.delete(restObj, successCbk, errorCbk);\r
727         };\r
728 \r
729         s.load = function(path, successCbk, errorCbk) {\r
730             var restObj = createBaseRestObj(path);\r
731 \r
732             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
733         };\r
734 \r
735         return s;\r
736 \r
737     });\r
738 \r
739     gbp.register.factory('GBPSubjectServices', function(GPBServices) {\r
740 \r
741         var s = {};\r
742 \r
743         var Subject = function(name, order) {\r
744             this.name = name || null;\r
745             this.order = order || null;\r
746         };\r
747 \r
748         var createBaseRestObj = function(pathObj) {\r
749             return GPBServices.createRestObj()\r
750                 .one('policy:tenants').one('tenant').one(pathObj.tenantId)\r
751                 .one('contract').one(pathObj.contractId);\r
752         };\r
753 \r
754         var createRestObj = function(pathObj) {\r
755             return createBaseRestObj(pathObj).one('subject').one(pathObj.subjectId);\r
756         };\r
757 \r
758         var transformCallback = function(rawData) {\r
759             // return rawData.map(function(rawObj){\r
760             //     return new Subject(rawObj.name, rawObj.order);\r
761             // });\r
762             return rawData.contract[0].subject;\r
763         };\r
764 \r
765         var createData = function(obj) {\r
766             return { subject : [ GPBServices.stripNullValues(obj) ] };\r
767         };\r
768 \r
769         s.createPathObj = function(tenantId, contractId, subjectId) {\r
770             return {\r
771                 tenantId: tenantId,\r
772                 contractId: contractId,\r
773                 subjectId: subjectId\r
774             };\r
775         };\r
776 \r
777         s.createObj = function() {\r
778             return new Subject();\r
779         };\r
780 \r
781         s.send = function(path, obj, successCbk, errorCbk) {\r
782             var restObj = createRestObj(path),\r
783                 reqData = createData(obj);\r
784 \r
785             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
786         };\r
787 \r
788         s.delete = function(path, successCbk, errorCbk) {\r
789             var restObj = createRestObj(path);\r
790 \r
791             GPBServices.delete(restObj, successCbk, errorCbk);\r
792         };\r
793 \r
794         s.load = function(path, successCbk, errorCbk) {\r
795             var restObj = createBaseRestObj(path);\r
796 \r
797             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
798         };\r
799 \r
800         return s;\r
801 \r
802     });\r
803 \r
804     gbp.register.factory('GBPRuleServices', function(GPBServices) {\r
805 \r
806         var s = {};\r
807 \r
808         var Rule = function(name, order) {\r
809             this.name = name || null;\r
810             this.order = order || null;\r
811         };\r
812 \r
813         var createBaseRestObj = function(pathObj) {\r
814             return GPBServices.createRestObj()\r
815                 .one('policy:tenants').one('tenant')\r
816                 .one(pathObj.tenantId).one('contract').one(pathObj.contractId)\r
817                 .one('subject').one(pathObj.subjectId);\r
818         };\r
819 \r
820         var createRestObj = function(pathObj) {\r
821             return createBaseRestObj(pathObj).one('rule').one(pathObj.ruleId);\r
822         };\r
823 \r
824         var transformCallback = function(rawData) {\r
825             // return rawData.map(function(rawObj){\r
826             //     return new Rule(rawObj.name, rawObj.order);\r
827             // });\r
828             return rawData.subject[0].rule;\r
829         };\r
830 \r
831         var createData = function(obj) {\r
832             return { rule : [ GPBServices.stripNullValues(obj) ] };\r
833         };\r
834 \r
835         s.createPathObj = function(tenantId, contractId, subjectId, ruleId) {\r
836             return {\r
837                 tenantId: tenantId,\r
838                 contractId: contractId,\r
839                 subjectId: subjectId,\r
840                 ruleId: ruleId\r
841             };\r
842         };\r
843 \r
844         s.createObj = function() {\r
845             return new Rule();\r
846         };\r
847 \r
848         s.send = function(path, obj, successCbk, errorCbk) {\r
849             var restObj = createRestObj(path),\r
850                 reqData = createData(obj);\r
851 \r
852             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
853         };\r
854 \r
855         s.delete = function(path, successCbk, errorCbk) {\r
856             var restObj = createRestObj(path);\r
857 \r
858             GPBServices.delete(restObj, successCbk, errorCbk);\r
859         };\r
860 \r
861         s.load = function(path, successCbk, errorCbk) {\r
862             var restObj = createBaseRestObj(path);\r
863 \r
864             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
865         };\r
866 \r
867         return s;\r
868 \r
869     });\r
870 \r
871     gbp.register.factory('GBPClassifierRefsServices', function(GPBServices) {\r
872 \r
873         var s = {};\r
874 \r
875         var ClassifierRef = function(name, direction, instanceName, connectionTracking) {\r
876             this.name = name || null;\r
877             this.direction = direction || null;\r
878             this['instance-name'] = instanceName || null;\r
879             this['connection-tracking'] = connectionTracking || null;\r
880         };\r
881 \r
882         var createBaseRestObj = function(pathObj) {\r
883             return GPBServices.createRestObj()\r
884                 .one('policy:tenants').one('tenant')\r
885                 .one(pathObj.tenantId).one('contract').one(pathObj.contractId)\r
886                 .one('subject').one(pathObj.subjectId)\r
887                 .one('rule').one(pathObj.ruleId);\r
888         };\r
889 \r
890         var createRestObj = function(pathObj) {\r
891             return createBaseRestObj(pathObj).one('classifier-ref').one(pathObj.classifierRefId);\r
892         };\r
893 \r
894         var transformCallback = function(rawData) {\r
895             // return rawData.map(function(rawObj){\r
896             //     return new ClassifierRef(rawObj.name, rawObj.direction, rawObj['instance-name']);\r
897             // });\r
898             return rawData.rule[0]['classifier-ref'];\r
899         };\r
900 \r
901         var createData = function(obj) {\r
902             return { 'classifier-ref' : [ GPBServices.stripNullValues(obj) ] };\r
903         };\r
904 \r
905         s.createPathObj = function(tenantId, contractId, subjectId, ruleId, classifierRefId) {\r
906             return {\r
907                 tenantId: tenantId,\r
908                 contractId: contractId,\r
909                 subjectId: subjectId,\r
910                 ruleId: ruleId,\r
911                 classifierRefId: classifierRefId\r
912             };\r
913         };\r
914 \r
915         s.createObj = function() {\r
916             return new ClassifierRef();\r
917         };\r
918 \r
919         s.send = function(path, obj, successCbk, errorCbk) {\r
920             var restObj = createRestObj(path),\r
921                 reqData = createData(obj);\r
922 \r
923             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
924         };\r
925 \r
926         s.delete = function(path, successCbk, errorCbk) {\r
927             var restObj = createRestObj(path);\r
928 \r
929             GPBServices.delete(restObj, successCbk, errorCbk);\r
930         };\r
931 \r
932         s.load = function(path, successCbk, errorCbk) {\r
933             var restObj = createBaseRestObj(path);\r
934 \r
935             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
936         };\r
937 \r
938         return s;\r
939 \r
940     });\r
941 \r
942     gbp.register.factory('GBPActionRefsServices', function(GPBServices) {\r
943 \r
944         var s = {};\r
945 \r
946         var ActionRef = function(name, order, instanceName) {\r
947             this.name = name || null;\r
948             this.order = order || null;\r
949         };\r
950 \r
951         var createBaseRestObj = function(pathObj) {\r
952             return GPBServices.createRestObj()\r
953                 .one('policy:tenants').one('tenant')\r
954                 .one(pathObj.tenantId).one('contract').one(pathObj.contractId)\r
955                 .one('subject').one(pathObj.subjectId)\r
956                 .one('rule').one(pathObj.ruleId);\r
957         };\r
958 \r
959         var createRestObj = function(pathObj) {\r
960             return createBaseRestObj(pathObj).one('action-ref').one(pathObj.actionRefId);\r
961         };\r
962 \r
963         var transformCallback = function(rawData) {\r
964             // return rawData.map(function(rawObj){\r
965             //     return new ActionRef(rawObj.name, rawObj.order);\r
966             // });\r
967             return rawData.rule[0]['action-ref'];\r
968         };\r
969 \r
970         var createData = function(obj) {\r
971             return { 'action-ref' : [ GPBServices.stripNullValues(obj) ] };\r
972         };\r
973 \r
974         s.createPathObj = function(tenantId, contractId, subjectId, ruleId, actionRefId) {\r
975             return {\r
976                 tenantId: tenantId,\r
977                 contractId: contractId,\r
978                 subjectId: subjectId,\r
979                 ruleId: ruleId,\r
980                 actionRefId: actionRefId\r
981             };\r
982         };\r
983 \r
984         s.createObj = function() {\r
985             return new ActionRef();\r
986         };\r
987 \r
988         s.send = function(path, obj, successCbk, errorCbk) {\r
989             var restObj = createRestObj(path),\r
990                 reqData = createData(obj);\r
991 \r
992             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
993         };\r
994 \r
995         s.delete = function(path, successCbk, errorCbk) {\r
996             var restObj = createRestObj(path);\r
997 \r
998             GPBServices.delete(restObj, successCbk, errorCbk);\r
999         };\r
1000 \r
1001         s.load = function(path, successCbk, errorCbk) {\r
1002             var restObj = createBaseRestObj(path);\r
1003 \r
1004             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1005         };\r
1006 \r
1007         return s;\r
1008 \r
1009     });\r
1010 \r
1011     gbp.register.factory('GBPL2FloodDomainServices', function(GPBServices) {\r
1012 \r
1013         var s = {};\r
1014 \r
1015         var L2FloodDomain = function(id, name, description, parent) {\r
1016             this.id = id || GPBServices.getUUIDnumber();\r
1017             this.name = name || null;\r
1018             this.description = description || null;\r
1019             this.parent = parent || null;\r
1020         };\r
1021 \r
1022         var createBaseRestObj = function(pathObj) {\r
1023             return GPBServices.createRestObj()\r
1024                 .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
1025         };\r
1026 \r
1027         var createRestObj = function(pathObj) {\r
1028             return createBaseRestObj(pathObj).one('l2-flood-domain').one(pathObj.l2FloodDomain);\r
1029         };\r
1030 \r
1031         var transformCallback = function(rawData) {\r
1032             // return rawData.map(function(rawObj){\r
1033             //     return new L2FloodDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);\r
1034             // });\r
1035             return rawData.tenant[0]['l2-flood-domain'];\r
1036         };\r
1037 \r
1038         var createData = function(obj) {\r
1039             return { 'l2-flood-domain' : [ GPBServices.stripNullValues(obj) ] };\r
1040         };\r
1041 \r
1042         s.createPathObj = function(tenantId, l2FloodDomain) {\r
1043             return {\r
1044                 tenantId: tenantId,\r
1045                 l2FloodDomain: l2FloodDomain\r
1046             };\r
1047         };\r
1048 \r
1049         s.createObj = function() {\r
1050             return new L2FloodDomain();\r
1051         };\r
1052 \r
1053         s.send = function(path, obj, successCbk, errorCbk) {\r
1054             var restObj = createRestObj(path),\r
1055                 reqData = createData(obj);\r
1056 \r
1057             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1058         };\r
1059 \r
1060         s.delete = function(path, successCbk, errorCbk) {\r
1061             var restObj = createRestObj(path);\r
1062 \r
1063             GPBServices.delete(restObj, successCbk, errorCbk);\r
1064         };\r
1065 \r
1066         s.load = function(path, successCbk, errorCbk) {\r
1067             var restObj = createBaseRestObj(path);\r
1068 \r
1069             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1070         };\r
1071 \r
1072         return s;\r
1073 \r
1074     });\r
1075 \r
1076     gbp.register.factory('GBPL2BridgeDomainServices', function(GPBServices) {\r
1077 \r
1078         var s = {};\r
1079 \r
1080         var L2BridgeDomain = function(id, name, description, parent) {\r
1081             this.id = id || GPBServices.getUUIDnumber();\r
1082             this.name = name || null;\r
1083             this.description = description || null;\r
1084             this.parent = parent || null;\r
1085         };\r
1086 \r
1087         var createBaseRestObj = function(pathObj) {\r
1088             return GPBServices.createRestObj()\r
1089                 .one('policy:tenants').one('tenant')\r
1090                 .one(pathObj.tenantId);\r
1091         };\r
1092 \r
1093         var createRestObj = function(pathObj) {\r
1094             return createBaseRestObj(pathObj).one('l2-bridge-domain').one(pathObj.l2BridgeDomain);\r
1095         };\r
1096 \r
1097         var transformCallback = function(rawData) {\r
1098             // return rawData.map(function(rawObj){\r
1099             //     return new L2BridgeDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);\r
1100             // });\r
1101             return rawData.tenant[0]['l2-bridge-domain'];\r
1102         };\r
1103 \r
1104         var createData = function(obj) {\r
1105             return { 'l2-bridge-domain' : [ GPBServices.stripNullValues(obj) ] };\r
1106         };\r
1107 \r
1108         s.createPathObj = function(tenantId, l2BridgeDomain) {\r
1109             return {\r
1110                 tenantId: tenantId,\r
1111                 l2BridgeDomain: l2BridgeDomain\r
1112             };\r
1113         };\r
1114 \r
1115         s.createObj = function() {\r
1116             return new L2BridgeDomain();\r
1117         };\r
1118 \r
1119         s.send = function(path, obj, successCbk, errorCbk) {\r
1120             var restObj = createRestObj(path),\r
1121                 reqData = createData(obj);\r
1122 \r
1123             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1124         };\r
1125 \r
1126         s.delete = function(path, successCbk, errorCbk) {\r
1127             var restObj = createRestObj(path);\r
1128 \r
1129             GPBServices.delete(restObj, successCbk, errorCbk);\r
1130         };\r
1131 \r
1132         s.load = function(path, successCbk, errorCbk) {\r
1133             var restObj = createBaseRestObj(path);\r
1134 \r
1135             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1136         };\r
1137 \r
1138         return s;\r
1139 \r
1140     });\r
1141 \r
1142     gbp.register.factory('GBPL3ContextServices', function(GPBServices) {\r
1143 \r
1144         var s = {};\r
1145 \r
1146         var L3Context = function(id, name, description) {\r
1147             this.id = id || GPBServices.getUUIDnumber();\r
1148             this.name = name || null;\r
1149             this.description = description || null;\r
1150         };\r
1151 \r
1152         var createBaseRestObj = function(pathObj) {\r
1153             return GPBServices.createRestObj()\r
1154                 .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
1155         };\r
1156 \r
1157         var createRestObj = function(pathObj) {\r
1158             return createBaseRestObj(pathObj).one('l3-context').one(pathObj.l3Context);\r
1159         };\r
1160 \r
1161         var transformCallback = function(rawData) {\r
1162             // return rawData.map(function(rawObj){\r
1163             //     return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
1164             // });\r
1165             return rawData.tenant[0]['l3-context'];\r
1166         };\r
1167 \r
1168         var createData = function(obj) {\r
1169             return { 'l3-context' : [ GPBServices.stripNullValues(obj) ] };\r
1170         };\r
1171 \r
1172         s.createPathObj = function(tenantId, l3Context) {\r
1173             return {\r
1174                 tenantId: tenantId,\r
1175                 l3Context: l3Context\r
1176             };\r
1177         };\r
1178 \r
1179         s.createObj = function() {\r
1180             return new L3Context();\r
1181         };\r
1182 \r
1183         s.send = function(path, obj, successCbk, errorCbk) {\r
1184             var restObj = createRestObj(path),\r
1185                 reqData = createData(obj);\r
1186 \r
1187             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1188         };\r
1189 \r
1190         s.delete = function(path, successCbk, errorCbk) {\r
1191             var restObj = createRestObj(path);\r
1192 \r
1193             GPBServices.delete(restObj, successCbk, errorCbk);\r
1194         };\r
1195 \r
1196         s.load = function(path, successCbk, errorCbk) {\r
1197             var restObj = createBaseRestObj(path);\r
1198 \r
1199             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1200         };\r
1201 \r
1202         return s;\r
1203 \r
1204     });\r
1205 \r
1206     gbp.register.factory('GBPSubnetServices', function(GPBServices) {\r
1207 \r
1208         var s = {};\r
1209 \r
1210         var Subnet = function(id, name, description, parent, ipPrefix, virtualRouterIp) {\r
1211             this.id = id || GPBServices.getUUIDnumber();\r
1212             this.name = name || null;\r
1213             this.description = description || null;\r
1214             this.parent = parent || null;\r
1215             this['ip-prefix'] = ipPrefix || null;\r
1216             this['virtual-router-ip'] = virtualRouterIp || null;\r
1217         };\r
1218 \r
1219         var createBaseRestObj = function(pathObj) {\r
1220             return GPBServices.createRestObj()\r
1221                 .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
1222         };\r
1223 \r
1224         var createRestObj = function(pathObj) {\r
1225             return createBaseRestObj(pathObj).one('subnet').one(pathObj.subnet);\r
1226         };\r
1227 \r
1228         var transformCallback = function(rawData) {\r
1229             // return rawData.map(function(rawObj){\r
1230             //     return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
1231             // });\r
1232             return rawData.tenant[0]['subnet'];\r
1233         };\r
1234 \r
1235         var createData = function(obj) {\r
1236             return { 'subnet' : [ GPBServices.stripNullValues(obj) ] };\r
1237         };\r
1238 \r
1239         s.createPathObj = function(tenantId, subnet) {\r
1240             return {\r
1241                 tenantId: tenantId,\r
1242                 subnet: subnet\r
1243             };\r
1244         };\r
1245 \r
1246         s.createObj = function() {\r
1247             return new Subnet();\r
1248         };\r
1249 \r
1250         s.send = function(path, obj, successCbk, errorCbk) {\r
1251             var restObj = createRestObj(path),\r
1252                 reqData = createData(obj);\r
1253 \r
1254             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1255         };\r
1256 \r
1257         s.delete = function(path, successCbk, errorCbk) {\r
1258             var restObj = createRestObj(path);\r
1259 \r
1260             GPBServices.delete(restObj, successCbk, errorCbk);\r
1261         };\r
1262 \r
1263         s.load = function(path, successCbk, errorCbk) {\r
1264             var restObj = createBaseRestObj(path);\r
1265 \r
1266             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1267         };\r
1268 \r
1269         return s;\r
1270 \r
1271     });\r
1272 \r
1273     gbp.register.factory('GBPGatewayServices', function(GPBServices) {\r
1274 \r
1275         var s = {};\r
1276 \r
1277         var Gateway = function(gateway) {\r
1278             this.gateway = gateway || null;\r
1279         };\r
1280 \r
1281         var createBaseRestObj = function(pathObj) {\r
1282             return GPBServices.createRestObj()\r
1283                 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId);\r
1284         };\r
1285 \r
1286         var createRestObj = function(pathObj) {\r
1287             return createBaseRestObj(pathObj).one('gateways').one(pathObj.gateway);\r
1288         };\r
1289 \r
1290         var transformCallback = function(rawData) {\r
1291             // return rawData.map(function(rawObj){\r
1292             //     return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
1293             // });\r
1294             return rawData.subnet[0]['gateways'];\r
1295         };\r
1296 \r
1297         var createData = function(obj) {\r
1298             return { 'gateways' : [ GPBServices.stripNullValues(obj) ] };\r
1299         };\r
1300 \r
1301         s.createPathObj = function(tenantId, subnetId, gateway) {\r
1302             return {\r
1303                 tenantId: tenantId,\r
1304                 subnetId: subnetId,\r
1305                 gateway: gateway\r
1306             };\r
1307         };\r
1308 \r
1309         s.createObj = function() {\r
1310             return new Gateway();\r
1311         };\r
1312 \r
1313         s.send = function(path, obj, successCbk, errorCbk) {\r
1314             var restObj = createRestObj(path),\r
1315                 reqData = createData(obj);\r
1316 \r
1317             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1318         };\r
1319 \r
1320         s.delete = function(path, successCbk, errorCbk) {\r
1321             var restObj = createRestObj(path);\r
1322 \r
1323             GPBServices.delete(restObj, successCbk, errorCbk);\r
1324         };\r
1325 \r
1326         s.load = function(path, successCbk, errorCbk) {\r
1327             var restObj = createBaseRestObj(path);\r
1328 \r
1329             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1330         };\r
1331 \r
1332         return s;\r
1333 \r
1334     });\r
1335 \r
1336     gbp.register.factory('GBPPrefixServices', function(GPBServices) {\r
1337 \r
1338         var s = {};\r
1339 \r
1340         var Prefix = function(prefix) {\r
1341             this.prefix = prefix || null;\r
1342         };\r
1343 \r
1344         var createBaseRestObj = function(pathObj) {\r
1345             return GPBServices.createRestObj()\r
1346                 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId).one('gateways').one(pathObj.gatewayId);\r
1347         };\r
1348 \r
1349         var createRestObj = function(pathObj) {\r
1350             return createBaseRestObj(pathObj).one('prefixes').one(pathObj.prefixId);\r
1351         };\r
1352 \r
1353         var transformCallback = function(rawData) {\r
1354             // return rawData.map(function(rawObj){\r
1355             //     return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
1356             // });\r
1357             return rawData.gateways[0].prefixes;\r
1358         };\r
1359 \r
1360         var createData = function(obj) {\r
1361             return { 'prefixes' : [ GPBServices.stripNullValues(obj) ] };\r
1362         };\r
1363 \r
1364         s.createPathObj = function(tenantId, subnetId, gatewayId, prefixId) {\r
1365             return {\r
1366                 tenantId: tenantId,\r
1367                 subnetId: subnetId,\r
1368                 gatewayId: gatewayId,\r
1369                 prefixId: prefixId ? prefixId.replace("/", "%2F") : prefixId\r
1370             };\r
1371         };\r
1372 \r
1373         s.createObj = function() {\r
1374             return new Prefix();\r
1375         };\r
1376 \r
1377         s.send = function(path, obj, successCbk, errorCbk) {\r
1378             var restObj = createRestObj(path),\r
1379                 reqData = createData(obj);\r
1380 \r
1381             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1382         };\r
1383 \r
1384         s.delete = function(path, successCbk, errorCbk) {\r
1385             var restObj = createRestObj(path);\r
1386 \r
1387             GPBServices.delete(restObj, successCbk, errorCbk);\r
1388         };\r
1389 \r
1390         s.load = function(path, successCbk, errorCbk) {\r
1391             var restObj = createBaseRestObj(path);\r
1392 \r
1393             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1394         };\r
1395 \r
1396         return s;\r
1397 \r
1398     });\r
1399 \r
1400     gbp.register.factory('GBPClassifierInstanceServices', function(GPBServices) {\r
1401 \r
1402         var s = {};\r
1403 \r
1404         var ClassifierService = function(name, classifierDefId) {\r
1405             this.name = name || null;\r
1406             this['classifier-definition-id'] = classifierDefId || null;\r
1407             this['parameter-value'] = [];\r
1408         };\r
1409 \r
1410         var createBaseRestObj = function(pathObj) {\r
1411             return GPBServices.createRestObj()\r
1412                 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');\r
1413         };\r
1414 \r
1415         var createRestObj = function(pathObj) {\r
1416             return createBaseRestObj(pathObj).one('classifier-instance').one(pathObj.classfierInstanceId);\r
1417         };\r
1418 \r
1419         var transformCallback = function(rawData) {\r
1420             return rawData['subject-feature-instances']['classifier-instance'];\r
1421         };\r
1422 \r
1423         var createData = function(obj) {\r
1424             return { 'classifier-instance' : [ GPBServices.stripNullValues(obj) ] };\r
1425         };\r
1426 \r
1427         s.createPathObj = function(tenantId, classfierInstanceId) {\r
1428             return {\r
1429                 tenantId: tenantId,\r
1430                 classfierInstanceId: classfierInstanceId\r
1431             };\r
1432         };\r
1433 \r
1434         s.createObj = function() {\r
1435             return new ClassifierService();\r
1436         };\r
1437 \r
1438         s.send = function(path, obj, successCbk, errorCbk) {\r
1439             var restObj = createRestObj(path),\r
1440                 reqData = createData(obj);\r
1441 \r
1442             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1443         };\r
1444 \r
1445         s.delete = function(path, successCbk, errorCbk) {\r
1446             var restObj = createRestObj(path);\r
1447 \r
1448             GPBServices.delete(restObj, successCbk, errorCbk);\r
1449         };\r
1450 \r
1451         s.load = function(path, successCbk, errorCbk) {\r
1452             var restObj = createBaseRestObj(path);\r
1453 \r
1454             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1455         };\r
1456 \r
1457         return s;\r
1458 \r
1459     });\r
1460 \r
1461     gbp.register.factory('GBPActionInstanceServices', function(GPBServices) {\r
1462 \r
1463         var s = {};\r
1464 \r
1465         var ActionService = function(name, actionDefId) {\r
1466             this.name = name || null;\r
1467             this['action-definition-id'] = actionDefId || null;\r
1468             this['parameter-value'] = [];\r
1469         };\r
1470 \r
1471         var createBaseRestObj = function(pathObj) {\r
1472             return GPBServices.createRestObj()\r
1473                 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');\r
1474         };\r
1475 \r
1476         var createRestObj = function(pathObj) {\r
1477             return createBaseRestObj(pathObj).one('action-instance').one(pathObj.actionInstanceId);\r
1478         };\r
1479 \r
1480         var transformCallback = function(rawData) {\r
1481             return rawData['subject-feature-instances']['action-instance'];\r
1482         };\r
1483 \r
1484         var createData = function(obj) {\r
1485             return { 'action-instance' : [ GPBServices.stripNullValues(obj) ] };\r
1486         };\r
1487 \r
1488         s.createPathObj = function(tenantId, actionInstanceId) {\r
1489             return {\r
1490                 tenantId: tenantId,\r
1491                 actionInstanceId: actionInstanceId\r
1492             };\r
1493         };\r
1494 \r
1495         s.createObj = function() {\r
1496             return new ActionService();\r
1497         };\r
1498 \r
1499         s.send = function(path, obj, successCbk, errorCbk) {\r
1500             var restObj = createRestObj(path),\r
1501                 reqData = createData(obj);\r
1502 \r
1503             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1504         };\r
1505 \r
1506         s.delete = function(path, successCbk, errorCbk) {\r
1507             var restObj = createRestObj(path);\r
1508 \r
1509             GPBServices.delete(restObj, successCbk, errorCbk);\r
1510         };\r
1511 \r
1512         s.load = function(path, successCbk, errorCbk) {\r
1513             var restObj = createBaseRestObj(path);\r
1514 \r
1515             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1516         };\r
1517 \r
1518         s.getDefinitions = function(successCbk, errorCbk) {\r
1519             var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');\r
1520                 \r
1521             restObj.get().then(function(data) {\r
1522                 successCbk(data['subject-feature-definitions']['action-definition']);\r
1523             }, function(res) {\r
1524                 // errorCbk(res);\r
1525             });\r
1526         };\r
1527 \r
1528         return s;\r
1529 \r
1530     });\r
1531 \r
1532     gbp.register.factory('GBPEpgServices', function(GPBServices) {\r
1533 \r
1534         var s = {};\r
1535 \r
1536         var EPG = function(name, description, intraGroupPolicy, networkDomain, id, parent) {\r
1537             this.id = id || GPBServices.getUUIDnumber();\r
1538             this.name = name || null;\r
1539             this.description = description || null;\r
1540             this['intra-group-policy'] = intraGroupPolicy || null;\r
1541             this['network-domain'] = networkDomain || null;\r
1542             this.parent = parent || null;\r
1543         };\r
1544 \r
1545         var createBaseRestObj = function(pathObj) {\r
1546             return GPBServices.createRestObj()\r
1547                 .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
1548         };\r
1549 \r
1550         var createRestObj = function(pathObj) {\r
1551             return createBaseRestObj(pathObj).one('endpoint-group').one(pathObj.epgId);\r
1552         };\r
1553 \r
1554         var transformCallback = function(rawData) {\r
1555             return rawData.tenant[0]['endpoint-group'];\r
1556         };\r
1557 \r
1558         var createData = function(obj) {\r
1559             return { 'endpoint-group' : [ GPBServices.stripNullValues(obj) ] };\r
1560         };\r
1561 \r
1562         s.createPathObj = function(tenantId, epgId) {\r
1563             return {\r
1564                 tenantId: tenantId,\r
1565                 epgId: epgId\r
1566             };\r
1567         };\r
1568 \r
1569         s.createObj = function() {\r
1570             return new EPG();\r
1571         };\r
1572 \r
1573         s.send = function(path, obj, successCbk, errorCbk) {\r
1574             var restObj = createRestObj(path),\r
1575                 reqData = createData(obj);\r
1576 \r
1577             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1578         };\r
1579 \r
1580         s.delete = function(path, successCbk, errorCbk) {\r
1581             var restObj = createRestObj(path);\r
1582 \r
1583             GPBServices.delete(restObj, successCbk, errorCbk);\r
1584         };\r
1585 \r
1586         s.load = function(path, successCbk, errorCbk) {\r
1587             var restObj = createBaseRestObj(path);\r
1588 \r
1589             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1590         };\r
1591 \r
1592         return s;\r
1593 \r
1594     });\r
1595 \r
1596     gbp.register.factory('GBPConNamedSelServices', function(GPBServices) {\r
1597 \r
1598         var s = {};\r
1599 \r
1600         var ConsumerNamedSelector = function(name, contract) {\r
1601             this.name = name || null;\r
1602             this.contract = contract || [];\r
1603         };\r
1604 \r
1605         var createBaseRestObj = function(pathObj) {\r
1606             return GPBServices.createRestObj()\r
1607                 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);\r
1608         };\r
1609 \r
1610         var createRestObj = function(pathObj) {\r
1611             return createBaseRestObj(pathObj).one('consumer-named-selector').one(pathObj.cnsId);\r
1612         };\r
1613 \r
1614         var transformCallback = function(rawData) {\r
1615             var data = null,\r
1616                 consumerData = rawData['endpoint-group'][0]['consumer-named-selector'];\r
1617 \r
1618             if(consumerData) {\r
1619                 data = consumerData.map(function(elem) {\r
1620                     if(elem.hasOwnProperty('contract') === false) {\r
1621                         elem.contract = [];\r
1622                     }\r
1623                     return elem;\r
1624                 });\r
1625             }\r
1626 \r
1627             return data;\r
1628         };\r
1629 \r
1630         var createData = function(obj) {\r
1631             var o = GPBServices.stripNullValues(obj);\r
1632 \r
1633             if(o.contract) {\r
1634                 o.contract = GPBServices.removeEmptyElementsFromList(o.contract);\r
1635             }\r
1636 \r
1637             return { 'consumer-named-selector' : [ o ] };\r
1638         };\r
1639 \r
1640         s.createPathObj = function(tenantId, epgId, cnsId) {\r
1641             return {\r
1642                 tenantId: tenantId,\r
1643                 epgId: epgId,\r
1644                 cnsId: cnsId\r
1645             };\r
1646         };\r
1647 \r
1648         s.createObj = function() {\r
1649             return new ConsumerNamedSelector();\r
1650         };\r
1651 \r
1652         s.send = function(path, obj, successCbk, errorCbk) {\r
1653             var restObj = createRestObj(path),\r
1654                 reqData = createData(obj);\r
1655 \r
1656             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1657         };\r
1658 \r
1659         s.delete = function(path, successCbk, errorCbk) {\r
1660             var restObj = createRestObj(path);\r
1661 \r
1662             GPBServices.delete(restObj, successCbk, errorCbk);\r
1663         };\r
1664 \r
1665         s.load = function(path, successCbk, errorCbk) {\r
1666             var restObj = createBaseRestObj(path);\r
1667 \r
1668             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1669         };\r
1670 \r
1671         return s;\r
1672 \r
1673     });\r
1674 \r
1675 \r
1676     gbp.register.factory('GBPProNamedSelServices', function(GPBServices) {\r
1677 \r
1678         var s = {};\r
1679 \r
1680         var ProviderNamedSelector = function(name, contract) {\r
1681             this.name = name || null;\r
1682             this.contract = contract || [];\r
1683         };\r
1684 \r
1685         var createBaseRestObj = function(pathObj) {\r
1686             return GPBServices.createRestObj()\r
1687                 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);\r
1688         };\r
1689 \r
1690         var createRestObj = function(pathObj) {\r
1691             return createBaseRestObj(pathObj).one('provider-named-selector').one(pathObj.cnsId);\r
1692         };\r
1693 \r
1694         var transformCallback = function(rawData) {\r
1695             var data = null,\r
1696                 provderData = rawData['endpoint-group'][0]['provider-named-selector'];\r
1697 \r
1698             if(provderData) {\r
1699                 data = provderData.map(function(elem) {\r
1700                     if(elem.hasOwnProperty('contract') === false) {\r
1701                         elem.contract = [];\r
1702                     }\r
1703                     return elem;\r
1704                 });\r
1705             }\r
1706 \r
1707             return data;\r
1708         };\r
1709 \r
1710         var createData = function(obj) {\r
1711             var o = GPBServices.stripNullValues(obj);\r
1712 \r
1713             if(o.contract) {\r
1714                 o.contract = GPBServices.removeEmptyElementsFromList(o.contract);\r
1715             }\r
1716 \r
1717             return { 'provider-named-selector' : [ o ] };\r
1718         };\r
1719 \r
1720         s.createPathObj = function(tenantId, epgId, cnsId) {\r
1721             return {\r
1722                 tenantId: tenantId,\r
1723                 epgId: epgId,\r
1724                 cnsId: cnsId\r
1725             };\r
1726         };\r
1727 \r
1728         s.createObj = function() {\r
1729             return new ProviderNamedSelector();\r
1730         };\r
1731 \r
1732         s.send = function(path, obj, successCbk, errorCbk) {\r
1733             var restObj = createRestObj(path),\r
1734                 reqData = createData(obj);\r
1735 \r
1736             GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
1737         };\r
1738 \r
1739         s.delete = function(path, successCbk, errorCbk) {\r
1740             var restObj = createRestObj(path);\r
1741 \r
1742             GPBServices.delete(restObj, successCbk, errorCbk);\r
1743         };\r
1744 \r
1745         s.load = function(path, successCbk, errorCbk) {\r
1746             var restObj = createBaseRestObj(path);\r
1747 \r
1748             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1749         };\r
1750 \r
1751         return s;\r
1752 \r
1753     });\r
1754 \r
1755     gbp.register.factory('GBPEndpointServices', function(GPBServices) {\r
1756 \r
1757         var s = {};\r
1758 \r
1759         var Endpoint = function(tenantId) {\r
1760             this.tenant = tenantId || null;\r
1761             this['network-containment'] = null;\r
1762             this['endpoint-group'] = null;\r
1763             this['endpoint-groups'] = [];\r
1764             this.condition = [];\r
1765             this['l2-context'] = null;\r
1766             this['mac-address'] = null;\r
1767             this['l3-address'] = [];\r
1768         };\r
1769 \r
1770         var createRestObj = function() {\r
1771             return GPBServices.createRestObj('operations');\r
1772         };\r
1773 \r
1774         var transformCallback = function(rawData) {\r
1775             return rawData.endpoints.endpoint;\r
1776         };\r
1777 \r
1778         var createBaseData = function(obj) {\r
1779             var o = GPBServices.stripNullValues(obj);\r
1780 \r
1781             if(o.condition) {\r
1782                 o.condition = GPBServices.removeEmptyElementsFromList(o.condition);\r
1783             }\r
1784 \r
1785             if(o['endpoint-groups']) {\r
1786                 o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);\r
1787             }\r
1788 \r
1789             if(o['l3-address']) {\r
1790                 o['l3-address'] = GPBServices.removeEmptyElementsFromList(o['l3-address']);\r
1791             }\r
1792 \r
1793             return o;\r
1794         };\r
1795 \r
1796         var createSendData = function(obj) {\r
1797             var o = createBaseData(obj);\r
1798             return { 'input': o };\r
1799         };\r
1800 \r
1801         var createDeleteData = function(obj) {\r
1802             var o = { \r
1803                 'input': { \r
1804                     'l3': obj['l3-address'],\r
1805                     'l2': [\r
1806                         { \r
1807                             'l2-context': obj['l2-context'],\r
1808                             'mac-address': obj['mac-address']\r
1809                         }\r
1810                     ] \r
1811                 } \r
1812             };\r
1813 \r
1814             return o;\r
1815         };\r
1816 \r
1817         s.createObj = function(tenantId) {\r
1818             return new Endpoint(tenantId);\r
1819         };\r
1820 \r
1821         s.send = function(path, obj, successCbk, errorCbk) {\r
1822             var restObj = createRestObj().one('endpoint:register-endpoint'),\r
1823                 reqData = createSendData(obj);\r
1824 \r
1825             GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
1826         };\r
1827 \r
1828         s.delete = function(path, obj, successCbk, errorCbk) {\r
1829             var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),\r
1830                 reqData = createDeleteData(obj);\r
1831             GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
1832         };\r
1833 \r
1834         s.load = function(path, successCbk, errorCbk) {\r
1835             var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');\r
1836 \r
1837             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1838         };\r
1839 \r
1840         return s;\r
1841 \r
1842     });\r
1843 \r
1844     gbp.register.factory('GBPEndpointL3Services', function(GPBServices) {\r
1845 \r
1846         var s = {};\r
1847 \r
1848         var EndpointL3 = function(tenantId) {\r
1849             this.tenant = tenantId || null;\r
1850             this['endpoint-group'] = null;\r
1851             this['endpoint-groups'] = [];\r
1852             this.condition = [];\r
1853             this['l3-context'] = null;\r
1854             this['ip-prefix'] = null;\r
1855             this['endpoint-l2-gateways'] = [];\r
1856             this['endpoint-l3-gateways'] = [];\r
1857         };\r
1858 \r
1859         var createRestObj = function() {\r
1860             return GPBServices.createRestObj('operations');\r
1861         };\r
1862 \r
1863         var transformCallback = function(rawData) {\r
1864             return rawData.endpoints['endpoint-l3-prefix'];\r
1865         };\r
1866 \r
1867         var createBaseData = function(obj) {\r
1868             var o = GPBServices.stripNullValues(obj);\r
1869 \r
1870             if(o.condition) {\r
1871                 o.condition = GPBServices.removeEmptyElementsFromList(o.condition);\r
1872             }\r
1873 \r
1874             if(o['endpoint-groups']) {\r
1875                 o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);\r
1876             }\r
1877 \r
1878             if(o['endpoint-l2-gateways']) {\r
1879                 o['endpoint-l2-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l2-gateways']);\r
1880             }\r
1881 \r
1882             if(o['endpoint-l3-gateways']) {\r
1883                 o['endpoint-l3-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l3-gateways']);\r
1884             }\r
1885 \r
1886             return o;\r
1887         };\r
1888 \r
1889         var createSendData = function(obj) {\r
1890             var o = createBaseData(obj);\r
1891             return { 'input': o };\r
1892         };\r
1893 \r
1894         var createDeleteData = function(obj) {\r
1895             var o = { \r
1896                 'input': { \r
1897                     'l3-prefix': [\r
1898                         {\r
1899                             'l3-context': obj['l3-context'],\r
1900                             'ip-prefix': obj['ip-prefix']\r
1901                         }\r
1902                     ],\r
1903                     'l2': obj['endpoint-l2-gateways'],\r
1904                     'l3': obj['endpoint-l3-gateways']\r
1905                 } \r
1906             };\r
1907 \r
1908             return o;\r
1909         };\r
1910 \r
1911         s.createObj = function(tenantId) {\r
1912             return new EndpointL3(tenantId);\r
1913         };\r
1914 \r
1915         s.send = function(path, obj, successCbk, errorCbk) {\r
1916             var restObj = createRestObj().one('endpoint:register-l3-prefix-endpoint'),\r
1917                 reqData = createSendData(obj);\r
1918 \r
1919             GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
1920         };\r
1921 \r
1922         s.delete = function(path, obj, successCbk, errorCbk) {\r
1923             var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),\r
1924                 reqData = createDeleteData(obj);\r
1925 \r
1926             GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
1927         };\r
1928 \r
1929         s.load = function(path, successCbk, errorCbk) {\r
1930             var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');\r
1931 \r
1932             GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
1933         };\r
1934 \r
1935         return s;\r
1936 \r
1937     });\r
1938 \r
1939     gbp.register.factory('PGNServices', function(GBPRestangular) {\r
1940 \r
1941         var s = {};\r
1942 \r
1943         var idGetter = {};\r
1944 \r
1945         var idTypes = {\r
1946             tenant: 'TENANT',\r
1947             uuid: 'UUID',\r
1948             l3ctx: 'L3CTX',\r
1949             pathAction: 'PATHACTION',\r
1950             accessAction: 'ACCESSACTION'\r
1951         };\r
1952 \r
1953         idGetter[idTypes.tenant] = function() {\r
1954             return 1;\r
1955         };\r
1956 \r
1957         idGetter[idTypes.uuid] = function() {\r
1958             return 2;\r
1959         };\r
1960 \r
1961         idGetter[idTypes.l3ctx] = function() {\r
1962             return 3;\r
1963         };\r
1964 \r
1965         idGetter[idTypes.pathAction] = function() {\r
1966             return 4;\r
1967         };\r
1968 \r
1969         idGetter[idTypes.accessAction] = function() {\r
1970             return 5;\r
1971         };\r
1972 \r
1973         var getId = function(type) {\r
1974             if(idGetter.hasOwnProperty(type)) {\r
1975                 return id = idGetter[type]();\r
1976             } else {\r
1977                 throw "Cannot get idGetter for type " + type;\r
1978             }\r
1979         };\r
1980 \r
1981         s.addReplaceEndpointGroup = function(successCbk, errorCbk, groupName, sgt, description) {\r
1982             var tenantId = getId(idTypes.tenant),\r
1983                 uuid = getId(idTypes.uuid),\r
1984                 restObj = GBPRestangular.one('restconf').one('operations'),\r
1985                 rpcRes = 'pgn-application:create-or-replace-endpoint-groups',\r
1986                 reqData = {\r
1987                                "input": \r
1988                                 {\r
1989                                     "endpoint-group":[\r
1990                                     {\r
1991                                         "pgn-application:tenant-id": tenantID, \r
1992                                         "pgn-application:id":uuid,\r
1993                                         "pgn-application:security-group-tag":sgt,\r
1994                                         "pgn-application:name":groupName,\r
1995                                         "pgn-application:description":description\r
1996                                     }\r
1997                                 ]\r
1998                             }\r
1999                         };\r
2000 \r
2001             restObj.post(rpcRes, reqData).then(function(data) {\r
2002                 successCbk(data);\r
2003             }, function(res) {\r
2004                 errorCbk(res);\r
2005             });\r
2006         };\r
2007 \r
2008         s.deleteEndpointGroup = function(successCbk, errorCbk, uuid) {\r
2009             var tenantId = getId(idTypes.tenant),\r
2010                 restObj = GBPRestangular.one('restconf').one('operations'),\r
2011                 rpcRes = 'pgn-application:delete-endpoint-groups',\r
2012                 reqData = {\r
2013                             "input": {\r
2014                                 "endpoint-group":[\r
2015                                     {\r
2016                                         "pgn-application:tenant-id": tenantId, \r
2017                                         "pgn-application:id":uuid\r
2018                                     }\r
2019                                 ]\r
2020                             }\r
2021                         };\r
2022 \r
2023             restObj.post(rpcRes, reqData).then(function(data) {\r
2024                 successCbk(data);\r
2025             }, function(res) {\r
2026                 errorCbk(res);\r
2027             });\r
2028         };\r
2029 \r
2030         s.getActions = function(successCbk, errorCbk) {\r
2031             var tenantId = getId(idTypes.tenant),\r
2032                 pathActionId = getId(idTypes.pathAction),\r
2033                 accessActionId = getId(idTypes.accessAction),\r
2034                 restObj = GBPRestangular.one('restconf').one('config').one('policy:tenants',  tenantId).one('subject-feature-instances');\r
2035 \r
2036             restObj.get().then(function(data) {\r
2037                 successCbk(data); //TODO fill actions\r
2038             }, function(res) {\r
2039                 errorCbk(res);\r
2040             });\r
2041         };\r
2042 \r
2043         s.applyPolicy = function(successCbk, errorCbk, providerId, consumerId, pathSelRule, accessCtrlRule) {\r
2044             var restObj = GBPRestangular.one('restconf').one('operations'),\r
2045                 rpcRes = 'pgn-application:wire-endpoint-groups',\r
2046                 actionRefName = (pathSelRule ? pathSelRule : '') + (accessCtrlRule ? accessCtrlRule : ''),\r
2047                 reqData = {\r
2048                                "input": {\r
2049                                     "endpoint-group-pair-with-rules": {\r
2050                                         "pgn-application:provider-tenant-id": tenantID, \r
2051                                         "pgn-application:consumer-tenant-id": tenantID, \r
2052                                         "pgn-application:provider-group-id":providerId,\r
2053                                         "pgn-application:consumer-group-id":consumerId,\r
2054                                         "pgn-application:group-rule": [\r
2055                                             {\r
2056                                                 "action-ref": [pathSelRule, accessCtrlRule].map(function(r) {\r
2057                                                     return { "name":r };\r
2058                                                 }),\r
2059                                                 "name":actionRefName\r
2060                                             }\r
2061                                         ]\r
2062                                     }\r
2063                                 }\r
2064                             };\r
2065 \r
2066             restObj.post(rpcRes, reqData).then(function(data) {\r
2067                 successCbk(data); //TODO reload policies\r
2068             }, function(res) {\r
2069                 errorCbk(res);\r
2070             });\r
2071         };\r
2072 \r
2073         s.deletePolicy = function(successCbk, errorCbk, providerId, consumerId) {\r
2074             var tenantId = getId(idTypes.tenant),\r
2075                 restObj = GBPRestangular.one('restconf').one('operations'),\r
2076                 rpcRes = 'pgn-application:unwire-endpoint-groups',\r
2077                 reqData = {\r
2078                            "input": \r
2079                             {\r
2080                                 "endpoint-group-pair":[\r
2081                                     {\r
2082                                         "pgn-application:provider-tenant-id": tenantId, \r
2083                                         "pgn-application:consumer-tenant-id": tenantId, \r
2084                                         "pgn-application:provider-group-id":providerId,\r
2085                                         "pgn-application:consumer-group-id":consumerId\r
2086                                     }\r
2087                                 ]\r
2088                             }\r
2089                         };\r
2090 \r
2091             restObj.post(rpcRes, reqData).then(function(data) {\r
2092                 successCbk(data); //TODO reload policies\r
2093             }, function(res) {\r
2094                 errorCbk(res);\r
2095             });\r
2096         };\r
2097 \r
2098         s.addEndPoint = function(successCbk, errorCbk, ipAddress, groupId) {\r
2099             var l3ctxId = getId(idTypes.l3ctx),\r
2100                 tenantId = getId(idTypes.tenant),\r
2101                 restObj = GBPRestangular.one('restconf').one('operations'),\r
2102                 rpcRes = 'endpoint:register-endpoint',\r
2103                 reqData = {\r
2104                             "input": {\r
2105                                 "endpoint-group": groupId,\r
2106                                 "l3-address": [\r
2107                                     {\r
2108                                         "ip-address": ipAddress,\r
2109                                         "l3-context": l3ctxId\r
2110                                     }\r
2111                                 ],\r
2112                                 "tenant": tenantId\r
2113                             }\r
2114                         };\r
2115 \r
2116             restObj.post(rpcRes, reqData).then(function(data) {\r
2117                 successCbk(data);\r
2118             }, function(res) {\r
2119                 errorCbk(res);\r
2120             });\r
2121         };\r
2122 \r
2123         s.getUUIDnumber = function() {\r
2124             var d = new Date().getTime();\r
2125             return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r
2126                         var r = (d + Math.random()*16)%16 | 0;\r
2127                         d = Math.floor(d/16);\r
2128                         return (c=='x' ? r : (r&0x3|0x8)).toString(16);\r
2129                     });\r
2130         };\r
2131 \r
2132         return s;\r
2133     });\r
2134 \r
2135     gbp.register.factory('DesignGbpFactory', function(){\r
2136 \r
2137         var dvf = {};\r
2138 \r
2139         dvf.setMainClass = function(){\r
2140             if ( $('.gbpWrapper').length ) {\r
2141                 $('.gbpWrapper').closest('.col-xs-12').addClass('gbpGlobalWrapper');\r
2142               }\r
2143         };\r
2144 \r
2145         return dvf;\r
2146 \r
2147     });\r
2148 });