1 define(['app/gbp/gbp.module', 'app/gbp/js/joint.clean.build'], function(gbp, joint) {
3 gbp.register.factory('GBPRestangular', function(Restangular, ENV) {
4 return Restangular.withConfig(function(RestangularConfig) {
5 RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));
9 gbp.register.factory('GBPConstants', function() {
10 var c = { colors: {'graph' : {}}, strings: {}, jointElements: {}, objType: {}, numbers: {}};
12 c.strings.flood = 'flood';
13 c.strings.bridge = 'bridge';
14 c.strings.l3ctx = 'l3ctx';
15 c.strings.subnet = 'subnet';
16 c.strings.linklabel = 'linklabel';
18 c.strings.out = 'out';
19 c.strings.bi = 'bidirectional';
21 c.strings.config = 'CONFIG';
22 c.strings.oper = 'OPERATIONAL';
23 c.strings.l2l3 = 'L2L3';
24 c.strings.mock = 'MOCK';
25 c.strings.sigmaTopoDefaultText = 'SIGMATOPODEFAULTTEXT';
26 c.strings.sigmaTopoDefault = 'SIGMATOPODEFAULTTEXT';
28 c.colors[c.strings.flood] = '#DF0101';
29 c.colors[c.strings.bridge] = '#0080FF';
30 c.colors[c.strings.l3ctx] = '#3ADF00';
31 c.colors[c.strings.subnet] = '#FF9933';
32 c.colors[c.strings.sigmaTopoDefaultText] = '#fff';
33 c.colors[c.strings.epg] = '#8fde70';
34 c.colors[c.strings.linklabel] = '#3366CC';
36 c.colors[c.strings.flood+'-'+c.strings.bridge] = '#6666FF';
37 c.colors[c.strings.bridge+'-'+c.strings.l3ctx] = '#6666FF';
39 c.colors[c.strings.subnet+'-'] = '#6666FF';
41 c.colors['graph']['subject'] = '#FFFFD4';
42 c.colors['graph']['cns'] = '#8EEDFF';
43 c.colors['graph']['pns'] = '#FF9C9C';
45 c.jointElements.minWidth = 100;
46 c.jointElements.maxWidth = 300;
47 c.jointElements.minHeight = 50;
48 c.jointElements.maxHeight = 300;
50 c.objType.contract = 'contract';
51 c.objType.epg = 'epg';
52 c.objType.consumer = 'consumer';
53 c.objType.provider = 'provider';
54 c.objType.subject = 'subject';
55 c.objType.rule = 'rule';
57 c.numbers.displayLabelLength = 40;
62 gbp.register.factory('MockServices', function() {
66 ms.mockTopoData = function() {
68 nodeRaw = [0, 1, 2, 3],
69 linkRaw = [[0, 1], [2, 3], [3, 0], [0, 3]],
70 nodes = nodeRaw.map(function(data) {
73 'label': 'LABEL'+data,
77 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]
80 links = linkRaw.map(function(data) {
83 source: 'n' + data[0],
84 target: 'n' + data[1],
85 color: GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]
91 return {nodes: nodes, links: links};
97 gbp.register.factory('TopologyDataLoaders', function(GBPRestangular, GBPConstants) {
100 tdl.getSubjectsBetweenEndpointGroups = function(storage, tenantId, successCbk, errorCbk) {
101 var restObj = GBPRestangular.one('restconf').one('operations'),
102 rpcRes = 'ui-backend:get-subjects-between-endpoint-groups',
103 reqData = { "input": { "tenant-id": tenantId }};
106 reqData.input['from-oper-data'] = {};
109 restObj.post(rpcRes, reqData).then(function(data) {
110 // console.info('got data', data.output);
117 //Policies are representing links in PGN topology
118 tdl.getGroupRulesBetweenEndpointGroups = function(successCbk, errorCbk) {
119 var restObj = GBPRestangular.one('restconf').one('operations'),
120 rpcRes = 'pgn-application:get-group-rules-between-endpoint-groups',
121 reqData = { "input": { "endpoint-group-pair":[] }};
123 restObj.post(rpcRes, reqData).then(function(data) {
124 successCbk(data); //set topology links
130 //Groups are representing nodes in PGN topology
131 tdl.getEndpointGroups = function(successCbk, errorCbk) {
132 var tenantId = getId(idTypes.tenant),
133 restObj = GBPRestangular.one('restconf').one('operations'),
134 rpcRes = 'pgn-application:get-endpoint-groups',
137 "endpoint-group-id":[
139 "pgn-application:tenant-id": tenantId
145 restObj.post(rpcRes, reqData).then(function(data) {
146 successCbk(data); //set topology nodes
153 tdl.getEndpointsFromEndpointGroup = function(tenantId, epgId, successCbk, errorCbk) {
154 var restObj = GBPRestangular.one('restconf').one('operations'),
155 rpcRes = 'ui-backend:get-endpoints-from-endpoint-group',
158 "tenant-id": tenantId,
159 "endpoint-group-id":epgId
163 restObj.post(rpcRes, reqData).then(function(data) {
164 successCbk(data); //set topology nodes
171 tdl.getEpgTopo = function(data){
172 var epgData = data.output['endpoint-group-pair-with-subject'],
175 setNode = function(obj){
177 'id': 'n' + nodes.length,
178 'label': obj.name || obj.id,
183 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],
190 setEdge = function(sourceId, destId, data, direction) {
192 'id': 'e' + edges.length,
195 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],
197 'direction' : direction
204 getObjByProp = function(val, prop, list) {
205 return list.filter(function(i){
206 return i[prop] === val;
209 getDirection = function(subjects){
212 subjects.forEach(function(s){
213 if ( s['ui-rule'] ) {
214 s['ui-rule'].forEach(function(rule){
215 if ( rule['classifier-ref'] ) {
216 rule['classifier-ref'].forEach(function(classifier){
217 if ( classifier.direction && directions.indexOf(classifier.direction) === -1 ){
218 directions.push(classifier.direction);
226 return directions.length === 1 ? directions[0] : directions.length > 1 ? 'bidirectional' : null;
231 epgData.forEach(function(e){
235 if ( !getObjByProp(e['consumer-endpoint-group-id'],'name', nodes).length ) {
238 name: e['consumer-endpoint-group-id']
240 cepgnId = setNode(objCepg);
242 cepgnId = getObjByProp(e['consumer-endpoint-group-id'],'name', nodes)[0].id;
244 if ( !getObjByProp(e['provider-endpoint-group-id'],'name', nodes).length ) {
247 name: e['provider-endpoint-group-id']
249 pepgnId = setNode(objPepg);
251 pepgnId = getObjByProp(e['provider-endpoint-group-id'],'name', nodes)[0].id;
254 var direction = getDirection(e['ui-subject']);
256 if ( cepgnId && pepgnId ) {
257 setEdge(cepgnId, pepgnId, e['ui-subject'], direction);
269 tdl.getL2L3 = function(storage, tenantId, successCbk, errorCbk) {
273 getL2L3Label = function(node) {
274 return node.name || node.id;
276 getSubnetLabel = function(node) {
277 return node['ip-prefix'] || node.id;
279 getNodeColor = function(src) {
280 return GBPConstants.colors[src] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];
282 getLinkColor = function(from, to) {
283 return GBPConstants.colors[from+'-'+to] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];
285 getNodes = function(data, srcDesc, getLabelCbk) {
286 var nodes = data.map(function(elem) {
289 'label': getLabelCbk(elem),
294 'color': getNodeColor(srcDesc),
304 getLinks = function(data, srcNodes, targetNodes, fromDesc, toDesc) {
305 var findByUUID = function(array, uuid) {
306 return array.filter(function(elem) {
307 return elem.uuid === uuid;
311 var links = data.map(function(elem) {
313 src = findByUUID(srcNodes, elem.id),
314 trg = findByUUID(targetNodes, elem.parent);
321 'color': getLinkColor(fromDesc, toDesc)
327 }).filter(function(elem) {
328 return elem !== null;
334 restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);
336 restObj.get().then(function(data) {
337 var l2FloodNodes = getNodes(data.tenant[0]['l2-flood-domain'] || [], GBPConstants.strings.flood, getL2L3Label),
338 l2BridgeNodes = getNodes(data.tenant[0]['l2-bridge-domain'] || [], GBPConstants.strings.bridge, getL2L3Label),
339 l3ContextNodes = getNodes(data.tenant[0]['l3-context'] || [], GBPConstants.strings.l3ctx, getL2L3Label),
340 subnetNodes = getNodes(data.tenant[0]['subnet'] || [], GBPConstants.strings.subnet, getSubnetLabel),
341 l2FloodLinks = getLinks(data.tenant[0]['l2-flood-domain'] || [], l2FloodNodes, l2BridgeNodes, GBPConstants.strings.flood, GBPConstants.strings.bridge),
342 l2BridgeLinks = getLinks(data.tenant[0]['l2-bridge-domain'] || [], l2BridgeNodes, l3ContextNodes, GBPConstants.strings.bridge, GBPConstants.strings.l3ctx),
343 subnetLinks = getLinks(data.tenant[0]['subnet'] || [], subnetNodes, l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes), GBPConstants.strings.subnet, ''),
344 allNodes = l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes).concat(subnetNodes),
345 allLinks = l2BridgeLinks.concat(l2FloodLinks).concat(subnetLinks);
347 successCbk(allNodes, allLinks);
349 errorCbk(res.data, res.status);
353 tdl.getClassifierInstances = function() {
360 gbp.register.factory('TopoServices', function(TopologyDataLoaders, MockServices, GBPConstants) {
368 var transformPGNTopoNodes = function(data) {
369 return data.output['endpoint-group'].map(function(d) {
373 sgt: d['security-group-tag']
378 var transformPGNTopoLinks = function(data) {
379 return data.output['endpoint-group-pair-with-rules'].map(function(d) {
381 source: d['provider-group-id'],
382 target: d['consumer-group-id'],
383 policy: d['group-rule'][0]['action-ref'].map(function(r) {
391 'epg' : GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]
394 legends[GBPConstants.strings.empty] = {};
395 legends[GBPConstants.strings.config] = gbpLegend;
396 legends[GBPConstants.strings.oper] = gbpLegend;
397 legends[GBPConstants.strings.mock] = gbpLegend;
398 legends[GBPConstants.strings.l2l3] = {
399 'l2-flood': GBPConstants.colors[GBPConstants.strings.flood],
400 'l2-bridge': GBPConstants.colors[GBPConstants.strings.bridge],
401 'l3-context': GBPConstants.colors[GBPConstants.strings.l3ctx],
402 'subnet': GBPConstants.colors[GBPConstants.strings.subnet],
403 'link': GBPConstants.colors[GBPConstants.strings.subnet+'-']
406 loaders[GBPConstants.strings.empty] = function(successCbk, errorCbk) {
410 loaders[GBPConstants.strings.config] = function(successCbk, errorCbk, args) {
411 var storage = args.storage || 'config',
412 tenantId = args.tenantId;
415 TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){
416 var topo = TopologyDataLoaders.getEpgTopo(data);
417 successCbk(topo.nodes, topo.links);
422 loaders[GBPConstants.strings.oper] = function(successCbk, errorCbk, args) {
423 var storage = args.storage || 'config',
424 tenantId = args.tenantId;
426 TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){
427 var topo = TopologyDataLoaders.getEpgTopo(data);
428 successCbk(topo.nodes, topo.links);
433 loaders[GBPConstants.strings.l2l3] = function(successCbk, errorCbk, args) {
434 var storage = args.storage || 'config',
435 tenantId = args.tenantId;
437 if(storage && tenantId) {
438 TopologyDataLoaders.getL2L3(storage, tenantId, successCbk, errorCbk);
440 //different kind of error
445 loaders[GBPConstants.strings.mock] = function(successCbk, errorCbk) {
446 var data = MockServices.mockTopoData();
447 successCbk(data.nodes, data.links);
450 ts.getConsProvLabel = function(edge, topo){
454 topo.nodes.forEach(function(n){
456 if ( edge.source === n.id ) {
460 if ( edge.target === n.id ) {
465 return provName + ':' + conName;
468 ts.getLegend = function(type) {
469 if(type === null || legends.hasOwnProperty(type) === false) {
470 type = GBPConstants.strings.empty;
473 return legends[type];
476 ts.loadTopology = function(type, successCbk, errorCbk, args) {
477 if(type === null || loaders.hasOwnProperty(type) === false) {
478 type = GBPConstants.strings.empty;
481 loaders[type](successCbk, errorCbk, args);
487 gbp.register.factory('GPBServices', function(GBPRestangular) {
491 s.getDefinitions = function(successCbk, errorCbk) {
492 var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');
494 restObj.get().then(function(data) {
495 if(data['subject-feature-definitions']) {
496 var classifiersDefs = data['subject-feature-definitions']['classifier-definition'] || [],
497 actionsDefs = data['subject-feature-definitions']['action-definition'] || [];
498 successCbk(classifiersDefs, actionsDefs);
507 s.getServiceFunctionChains = function(successCbk, errorCbk) {
508 var restObj = GBPRestangular.one('restconf').one('config').one('service-function-chain:service-function-chains');
510 restObj.get().then(function(data) {
511 if(data['service-function-chains']) {
512 successCbk(data['service-function-chains']['service-function-chain']);
521 s.getUUIDnumber = function() {
522 var d = new Date().getTime();
523 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
524 var r = (d + Math.random()*16)%16 | 0;
525 d = Math.floor(d/16);
526 return (c=='x' ? r : (r&0x3|0x8)).toString(16);
530 s.createRestObj = function(storage) {
531 storage = storage || 'config';
532 restObj = GBPRestangular.one('restconf').one(storage);
537 s.send = function(restObj, reqData, successCbk, errorCbk) {
538 restObj.customPUT(reqData).then(function(data) {
541 errorCbk(res.data, res.status);
545 s.post = function(restObj, reqData, successCbk, errorCbk) {
546 restObj.customPOST(reqData).then(function(data) {
549 errorCbk(res.data, res.status);
553 s.delete = function(restObj, successCbk, errorCbk) {
554 restObj.remove().then(function(data) {
557 errorCbk(res.data, res.status);
561 s.load = function(restObj, transformCallback, successCbk, errorCbk) {
562 restObj.get().then(function(data) {
563 var objs = transformCallback(data) || [];
566 errorCbk(res.data, res.status);
570 s.stripNullValues = function(obj) {
571 Object.keys(obj).forEach(function(k) {
572 if(obj[k] === null) {
580 s.removeEmptyElementsFromList = function(list) {
581 return list.filter(function(e) {
586 s.createParamObj = function(name, type, value) {
587 var obj = { name: name };
589 obj[type+'-value'] = value;
594 s.getInstanceParamValue = function(param) {
595 return param['int-value'] || param['string-value'] || param['range-value'];
598 s.getDefinitionObjParams = function(defObj, id) {
599 var obj = defObj.filter(function(def) {
600 return def.id === id;
602 params = (obj && obj.parameter) ? obj.parameter : [];
608 s.getPropFromListByProp = function(list, propSrc, targetValue, propDst) {
610 selectedObj = list.filter(function(e) {
611 return e[propSrc] === targetValue;
616 output = selectedObj[propDst];
618 output = selectedObj;
629 gbp.register.factory('GBPGovernanceServices', function(TopologyDataLoaders) {
632 var subjectInList = function(subjectName, subjectList) {
633 return subjectList.some(function(s) {
634 return s.name === subjectName;
638 var EPG = function(epgId, tenantId) {
640 this.tenantId = tenantId;
643 var Subject = function(name) {
649 this.addProvider = function(providingEpg) {
650 if(this.providers.indexOf(providingEpg) === -1) {
651 this.providers.push(providingEpg);
655 this.addConsumer = function(consumingEpg) {
656 if(this.consumers.indexOf(consumingEpg) === -1) {
657 this.consumers.push(consumingEpg);
661 this.addRule = function(rule, classifierInstances) {
662 if(rule['classifier-ref'] && rule['classifier-ref'].length > 0) {
664 rule['classifier-ref'].forEach(function(cr) {
665 //cr['parameters'] = [];
666 classifierInstances.forEach(function(ci) {
667 if(ci['name'] === cr['instance-name']) {
668 cr['parameters'] = ci['parameter-value'];
674 this.rules.push(rule);
678 var addEpg = function(epgList, epgId, tenantId) {
681 if(epgList.some(function(epg) {
682 return epg.id === epgId && epg.tenantId === tenantId;
684 addedEpg = new EPG(epgId, tenantId);
687 if(addedEpg !== null) {
688 epgList.push(addedEpg);
693 addSubject = function(subject, subjects, providerEpg, consumerEpg, classifierInstances) {
694 //console.log('classifierInstances:', classifierInstances);
695 var existingSubject = subjects.filter(function(s) {
696 return s.name === subject.name;
698 newSubject = (existingSubject === undefined);
701 existingSubject = new Subject(subject.name);
704 existingSubject.addProvider(providerEpg);
705 existingSubject.addConsumer(consumerEpg);
707 if(subject['ui-rule'] && subject['ui-rule'].length > 0) {
708 subject['ui-rule'].forEach(function(r) {
709 existingSubject.addRule(r, classifierInstances);
714 subjects.push(existingSubject);
717 processPairData = function(providers, consumers, subjects, pairData, classifierInstances) {
718 addEpg(providers, pairData['provider-endpoint-group-id'], pairData['provider-tenant-id']);
719 addEpg(consumers, pairData['consumer-endpoint-group-id'], pairData['consumer-tenant-id']);
721 pairData['ui-subject'].forEach(function(s) {
722 addSubject(s, subjects, pairData['provider-endpoint-group-id'], pairData['consumer-endpoint-group-id'], classifierInstances);
726 s.getEPGsAndSubjects = function(tenantId, classifierInstances, successCbk, errorCbk) {
727 TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId,
729 var epgPairs = data.output['endpoint-group-pair-with-subject'],
735 epgPairs.forEach(function(p) {
736 processPairData(providers, consumers, subjects, p, classifierInstances);
740 successCbk({providers: providers, consumers: consumers, subjects: subjects});
750 gbp.register.factory('GBPTenantServices', function(GPBServices) {
754 var Tenant = function(id, name, description) {
755 this.id = id || GPBServices.getUUIDnumber();
756 this.name = name || null;
757 this.description = description || null;
760 var createBaseRestObj = function() {
762 .createRestObj().one('policy:tenants');
765 var createRestObj = function(pathObj) {
766 return createBaseRestObj().one('tenant').one(pathObj.tenantId);
769 var transformCallback = function(rawData) {
770 // return rawData.map(function(rawObj){
771 // return new Tenant(rawObj.id, rawObj.name, rawObj.description);
773 return rawData.tenants.tenant;
776 var createData = function(obj) {
777 return { tenant : [ GPBServices.stripNullValues(obj) ] };
780 s.createPathObj = function(tenantId) {
786 s.createObj = function() {
790 s.send = function(path, obj, successCbk, errorCbk) {
791 var restObj = createRestObj(path),
792 reqData = createData(obj);
794 GPBServices.send(restObj, reqData, successCbk, errorCbk);
797 s.modify = function(path, obj, successCbk, errorCbk) {
798 var restObj = createRestObj(path),
799 reqData = createData(obj);
801 GPBServices.send(restObj, reqData, successCbk, errorCbk);
804 s.delete = function(path, successCbk, errorCbk) {
805 var restObj = createRestObj(path);
807 GPBServices.delete(restObj, successCbk, errorCbk);
810 s.load = function(successCbk, errorCbk) {
811 var restObj = createBaseRestObj();
812 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
819 gbp.register.factory('GBPContractServices', function(GPBServices) {
823 var Contract = function(id, description, parent) {
824 this.id = id || GPBServices.getUUIDnumber();
825 this.description = description || null;
826 this.parent = parent || null;
829 var createBaseRestObj = function(pathObj) {
830 return GPBServices.createRestObj().one('policy:tenants').one('tenant').one(pathObj.tenantId);
833 var createRestObj = function(pathObj) {
834 return createBaseRestObj(pathObj).one('contract').one(pathObj.contractId);
837 var transformCallback = function(rawData) {
838 // return rawData.map(function(rawObj){
839 // return new Contract(rawObj.id, rawObj.description);
841 return rawData.tenant[0].contract;
844 var createData = function(obj) {
845 return { contract : [ GPBServices.stripNullValues(obj) ] };
848 s.createPathObj = function(tenantId, contractId) {
851 contractId: contractId
855 s.createObj = function() {
856 return new Contract();
859 s.send = function(path, obj, successCbk, errorCbk) {
860 var restObj = createRestObj(path),
861 reqData = createData(obj);
863 GPBServices.send(restObj, reqData, successCbk, errorCbk);
866 s.delete = function(path, successCbk, errorCbk) {
867 var restObj = createRestObj(path);
869 GPBServices.delete(restObj, successCbk, errorCbk);
872 s.load = function(path, successCbk, errorCbk) {
873 var restObj = createBaseRestObj(path);
875 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
882 gbp.register.factory('GBPClauseServices', function(GPBServices) {
886 var Clause = function(name, subjectRefs) {
887 this.name = name || null;
888 this['subject-refs'] = subjectRefs || [];
891 var createBaseRestObj = function(pathObj) {
892 return GPBServices.createRestObj()
893 .one('policy:tenants').one('tenant').one(pathObj.tenantId)
894 .one('contract').one(pathObj.contractId);
897 var createRestObj = function(pathObj) {
898 return createBaseRestObj(pathObj).one('clause').one(pathObj.clauseId);
901 var transformCallback = function(rawData) {
903 clauseData = rawData.contract[0].clause;
906 data = clauseData.map(function(elem) {
907 if(elem.hasOwnProperty('subject-refs') === false) {
908 elem['subject-refs'] = [];
917 var createData = function(obj) {
918 var o = GPBServices.stripNullValues(obj);
920 if(o['subject-refs']) {
921 o['subject-refs'] = GPBServices.removeEmptyElementsFromList(o['subject-refs']);
924 return { clause : [ o ] };
927 s.createPathObj = function(tenantId, contractId, clauseId) {
930 contractId: contractId,
935 s.createObj = function() {
939 s.send = function(path, obj, successCbk, errorCbk) {
940 var restObj = createRestObj(path),
941 reqData = createData(obj);
943 GPBServices.send(restObj, reqData, successCbk, errorCbk);
946 s.delete = function(path, successCbk, errorCbk) {
947 var restObj = createRestObj(path);
949 GPBServices.delete(restObj, successCbk, errorCbk);
952 s.load = function(path, successCbk, errorCbk) {
953 var restObj = createBaseRestObj(path);
955 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
962 gbp.register.factory('GBPSubjectServices', function(GPBServices) {
966 var Subject = function(name, order) {
967 this.name = name || null;
968 this.order = order || null;
971 var createBaseRestObj = function(pathObj) {
972 return GPBServices.createRestObj()
973 .one('policy:tenants').one('tenant').one(pathObj.tenantId)
974 .one('contract').one(pathObj.contractId);
977 var createRestObj = function(pathObj) {
978 return createBaseRestObj(pathObj).one('subject').one(pathObj.subjectId);
981 var transformCallback = function(rawData) {
982 // return rawData.map(function(rawObj){
983 // return new Subject(rawObj.name, rawObj.order);
985 return rawData.contract[0].subject;
988 var createData = function(obj) {
989 return { subject : [ GPBServices.stripNullValues(obj) ] };
992 s.createPathObj = function(tenantId, contractId, subjectId) {
995 contractId: contractId,
1000 s.createObj = function() {
1001 return new Subject();
1004 s.send = function(path, obj, successCbk, errorCbk) {
1005 var restObj = createRestObj(path),
1006 reqData = createData(obj);
1008 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1011 s.delete = function(path, successCbk, errorCbk) {
1012 var restObj = createRestObj(path);
1014 GPBServices.delete(restObj, successCbk, errorCbk);
1017 s.load = function(path, successCbk, errorCbk) {
1018 var restObj = createBaseRestObj(path);
1020 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1027 gbp.register.factory('GBPRuleServices', function(GPBServices) {
1031 var Rule = function(name, order) {
1032 this.name = name || null;
1033 this.order = order || null;
1036 var createBaseRestObj = function(pathObj) {
1037 return GPBServices.createRestObj()
1038 .one('policy:tenants').one('tenant')
1039 .one(pathObj.tenantId).one('contract').one(pathObj.contractId)
1040 .one('subject').one(pathObj.subjectId);
1043 var createRestObj = function(pathObj) {
1044 return createBaseRestObj(pathObj).one('rule').one(pathObj.ruleId);
1047 var transformCallback = function(rawData) {
1048 // return rawData.map(function(rawObj){
1049 // return new Rule(rawObj.name, rawObj.order);
1051 return rawData.subject[0].rule;
1054 var createData = function(obj) {
1055 return { rule : [ GPBServices.stripNullValues(obj) ] };
1058 s.createPathObj = function(tenantId, contractId, subjectId, ruleId) {
1061 contractId: contractId,
1062 subjectId: subjectId,
1067 s.createObj = function() {
1071 s.send = function(path, obj, successCbk, errorCbk) {
1072 var restObj = createRestObj(path),
1073 reqData = createData(obj);
1075 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1078 s.delete = function(path, successCbk, errorCbk) {
1079 var restObj = createRestObj(path);
1081 GPBServices.delete(restObj, successCbk, errorCbk);
1084 s.load = function(path, successCbk, errorCbk) {
1085 var restObj = createBaseRestObj(path);
1087 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1094 gbp.register.factory('GBPClassifierRefsServices', function(GPBServices) {
1098 var ClassifierRef = function(name, direction, instanceName, connectionTracking) {
1099 this.name = name || null;
1100 this.direction = direction || null;
1101 this['instance-name'] = instanceName || null;
1102 this['connection-tracking'] = connectionTracking || null;
1105 var createBaseRestObj = function(pathObj) {
1106 return GPBServices.createRestObj()
1107 .one('policy:tenants').one('tenant')
1108 .one(pathObj.tenantId).one('contract').one(pathObj.contractId)
1109 .one('subject').one(pathObj.subjectId)
1110 .one('rule').one(pathObj.ruleId);
1113 var createRestObj = function(pathObj) {
1114 return createBaseRestObj(pathObj).one('classifier-ref').one(pathObj.classifierRefId);
1117 var transformCallback = function(rawData) {
1118 // return rawData.map(function(rawObj){
1119 // return new ClassifierRef(rawObj.name, rawObj.direction, rawObj['instance-name']);
1121 return rawData.rule[0]['classifier-ref'];
1124 var createData = function(obj) {
1125 return { 'classifier-ref' : [ GPBServices.stripNullValues(obj) ] };
1128 s.createPathObj = function(tenantId, contractId, subjectId, ruleId, classifierRefId) {
1131 contractId: contractId,
1132 subjectId: subjectId,
1134 classifierRefId: classifierRefId
1138 s.createObj = function() {
1139 return new ClassifierRef();
1142 s.send = function(path, obj, successCbk, errorCbk) {
1143 var restObj = createRestObj(path),
1144 reqData = createData(obj);
1146 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1149 s.delete = function(path, successCbk, errorCbk) {
1150 var restObj = createRestObj(path);
1152 GPBServices.delete(restObj, successCbk, errorCbk);
1155 s.load = function(path, successCbk, errorCbk) {
1156 var restObj = createBaseRestObj(path);
1158 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1165 gbp.register.factory('GBPActionRefsServices', function(GPBServices) {
1169 var ActionRef = function(name, order, instanceName) {
1170 this.name = name || null;
1171 this.order = order || null;
1174 var createBaseRestObj = function(pathObj) {
1175 return GPBServices.createRestObj()
1176 .one('policy:tenants').one('tenant')
1177 .one(pathObj.tenantId).one('contract').one(pathObj.contractId)
1178 .one('subject').one(pathObj.subjectId)
1179 .one('rule').one(pathObj.ruleId);
1182 var createRestObj = function(pathObj) {
1183 return createBaseRestObj(pathObj).one('action-ref').one(pathObj.actionRefId);
1186 var transformCallback = function(rawData) {
1187 // return rawData.map(function(rawObj){
1188 // return new ActionRef(rawObj.name, rawObj.order);
1190 return rawData.rule[0]['action-ref'];
1193 var createData = function(obj) {
1194 return { 'action-ref' : [ GPBServices.stripNullValues(obj) ] };
1197 s.createPathObj = function(tenantId, contractId, subjectId, ruleId, actionRefId) {
1200 contractId: contractId,
1201 subjectId: subjectId,
1203 actionRefId: actionRefId
1207 s.createObj = function() {
1208 return new ActionRef();
1211 s.send = function(path, obj, successCbk, errorCbk) {
1212 var restObj = createRestObj(path),
1213 reqData = createData(obj);
1215 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1218 s.delete = function(path, successCbk, errorCbk) {
1219 var restObj = createRestObj(path);
1221 GPBServices.delete(restObj, successCbk, errorCbk);
1224 s.load = function(path, successCbk, errorCbk) {
1225 var restObj = createBaseRestObj(path);
1227 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1234 gbp.register.factory('GBPL2FloodDomainServices', function(GPBServices) {
1238 var L2FloodDomain = function(id, name, description, parent) {
1239 this.id = id || GPBServices.getUUIDnumber();
1240 this.name = name || null;
1241 this.description = description || null;
1242 this.parent = parent || null;
1245 var createBaseRestObj = function(pathObj) {
1246 return GPBServices.createRestObj()
1247 .one('policy:tenants').one('tenant').one(pathObj.tenantId);
1250 var createRestObj = function(pathObj) {
1251 return createBaseRestObj(pathObj).one('l2-flood-domain').one(pathObj.l2FloodDomain);
1254 var transformCallback = function(rawData) {
1255 // return rawData.map(function(rawObj){
1256 // return new L2FloodDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);
1258 return rawData.tenant[0]['l2-flood-domain'];
1261 var createData = function(obj) {
1262 return { 'l2-flood-domain' : [ GPBServices.stripNullValues(obj) ] };
1265 s.createPathObj = function(tenantId, l2FloodDomain) {
1268 l2FloodDomain: l2FloodDomain
1272 s.createObj = function() {
1273 return new L2FloodDomain();
1276 s.send = function(path, obj, successCbk, errorCbk) {
1277 var restObj = createRestObj(path),
1278 reqData = createData(obj);
1280 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1283 s.delete = function(path, successCbk, errorCbk) {
1284 var restObj = createRestObj(path);
1286 GPBServices.delete(restObj, successCbk, errorCbk);
1289 s.load = function(path, successCbk, errorCbk) {
1290 var restObj = createBaseRestObj(path);
1292 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1299 gbp.register.factory('GBPL2BridgeDomainServices', function(GPBServices) {
1303 var L2BridgeDomain = function(id, name, description, parent) {
1304 this.id = id || GPBServices.getUUIDnumber();
1305 this.name = name || null;
1306 this.description = description || null;
1307 this.parent = parent || null;
1310 var createBaseRestObj = function(pathObj) {
1311 return GPBServices.createRestObj()
1312 .one('policy:tenants').one('tenant')
1313 .one(pathObj.tenantId);
1316 var createRestObj = function(pathObj) {
1317 return createBaseRestObj(pathObj).one('l2-bridge-domain').one(pathObj.l2BridgeDomain);
1320 var transformCallback = function(rawData) {
1321 // return rawData.map(function(rawObj){
1322 // return new L2BridgeDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);
1324 return rawData.tenant[0]['l2-bridge-domain'];
1327 var createData = function(obj) {
1328 return { 'l2-bridge-domain' : [ GPBServices.stripNullValues(obj) ] };
1331 s.createPathObj = function(tenantId, l2BridgeDomain) {
1334 l2BridgeDomain: l2BridgeDomain
1338 s.createObj = function() {
1339 return new L2BridgeDomain();
1342 s.send = function(path, obj, successCbk, errorCbk) {
1343 var restObj = createRestObj(path),
1344 reqData = createData(obj);
1346 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1349 s.delete = function(path, successCbk, errorCbk) {
1350 var restObj = createRestObj(path);
1352 GPBServices.delete(restObj, successCbk, errorCbk);
1355 s.load = function(path, successCbk, errorCbk) {
1356 var restObj = createBaseRestObj(path);
1358 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1365 gbp.register.factory('GBPL3ContextServices', function(GPBServices) {
1369 var L3Context = function(id, name, description) {
1370 this.id = id || GPBServices.getUUIDnumber();
1371 this.name = name || null;
1372 this.description = description || null;
1375 var createBaseRestObj = function(pathObj) {
1376 return GPBServices.createRestObj()
1377 .one('policy:tenants').one('tenant').one(pathObj.tenantId);
1380 var createRestObj = function(pathObj) {
1381 return createBaseRestObj(pathObj).one('l3-context').one(pathObj.l3Context);
1384 var transformCallback = function(rawData) {
1385 // return rawData.map(function(rawObj){
1386 // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
1388 return rawData.tenant[0]['l3-context'];
1391 var createData = function(obj) {
1392 return { 'l3-context' : [ GPBServices.stripNullValues(obj) ] };
1395 s.createPathObj = function(tenantId, l3Context) {
1398 l3Context: l3Context
1402 s.createObj = function() {
1403 return new L3Context();
1406 s.send = function(path, obj, successCbk, errorCbk) {
1407 var restObj = createRestObj(path),
1408 reqData = createData(obj);
1410 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1413 s.delete = function(path, successCbk, errorCbk) {
1414 var restObj = createRestObj(path);
1416 GPBServices.delete(restObj, successCbk, errorCbk);
1419 s.load = function(path, successCbk, errorCbk) {
1420 var restObj = createBaseRestObj(path);
1422 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1429 gbp.register.factory('GBPSubnetServices', function(GPBServices) {
1433 var Subnet = function(id, name, description, parent, ipPrefix, virtualRouterIp) {
1434 this.id = id || GPBServices.getUUIDnumber();
1435 this.name = name || null;
1436 this.description = description || null;
1437 this.parent = parent || null;
1438 this['ip-prefix'] = ipPrefix || null;
1439 this['virtual-router-ip'] = virtualRouterIp || null;
1442 var createBaseRestObj = function(pathObj) {
1443 return GPBServices.createRestObj()
1444 .one('policy:tenants').one('tenant').one(pathObj.tenantId);
1447 var createRestObj = function(pathObj) {
1448 return createBaseRestObj(pathObj).one('subnet').one(pathObj.subnet);
1451 var transformCallback = function(rawData) {
1452 // return rawData.map(function(rawObj){
1453 // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
1455 return rawData.tenant[0]['subnet'];
1458 var createData = function(obj) {
1459 return { 'subnet' : [ GPBServices.stripNullValues(obj) ] };
1462 s.createPathObj = function(tenantId, subnet) {
1469 s.createObj = function() {
1470 return new Subnet();
1473 s.send = function(path, obj, successCbk, errorCbk) {
1474 var restObj = createRestObj(path),
1475 reqData = createData(obj);
1477 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1480 s.delete = function(path, successCbk, errorCbk) {
1481 var restObj = createRestObj(path);
1483 GPBServices.delete(restObj, successCbk, errorCbk);
1486 s.load = function(path, successCbk, errorCbk) {
1487 var restObj = createBaseRestObj(path);
1489 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1496 gbp.register.factory('GBPGatewayServices', function(GPBServices) {
1500 var Gateway = function(gateway) {
1501 this.gateway = gateway || null;
1504 var createBaseRestObj = function(pathObj) {
1505 return GPBServices.createRestObj()
1506 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId);
1509 var createRestObj = function(pathObj) {
1510 return createBaseRestObj(pathObj).one('gateways').one(pathObj.gateway);
1513 var transformCallback = function(rawData) {
1514 // return rawData.map(function(rawObj){
1515 // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
1517 return rawData.subnet[0]['gateways'];
1520 var createData = function(obj) {
1521 return { 'gateways' : [ GPBServices.stripNullValues(obj) ] };
1524 s.createPathObj = function(tenantId, subnetId, gateway) {
1532 s.createObj = function() {
1533 return new Gateway();
1536 s.send = function(path, obj, successCbk, errorCbk) {
1537 var restObj = createRestObj(path),
1538 reqData = createData(obj);
1540 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1543 s.delete = function(path, successCbk, errorCbk) {
1544 var restObj = createRestObj(path);
1546 GPBServices.delete(restObj, successCbk, errorCbk);
1549 s.load = function(path, successCbk, errorCbk) {
1550 var restObj = createBaseRestObj(path);
1552 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1559 gbp.register.factory('GBPPrefixServices', function(GPBServices) {
1563 var Prefix = function(prefix) {
1564 this.prefix = prefix || null;
1567 var createBaseRestObj = function(pathObj) {
1568 return GPBServices.createRestObj()
1569 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId).one('gateways').one(pathObj.gatewayId);
1572 var createRestObj = function(pathObj) {
1573 return createBaseRestObj(pathObj).one('prefixes').one(pathObj.prefixId);
1576 var transformCallback = function(rawData) {
1577 // return rawData.map(function(rawObj){
1578 // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
1580 return rawData.gateways[0].prefixes;
1583 var createData = function(obj) {
1584 return { 'prefixes' : [ GPBServices.stripNullValues(obj) ] };
1587 s.createPathObj = function(tenantId, subnetId, gatewayId, prefixId) {
1591 gatewayId: gatewayId,
1592 prefixId: prefixId ? prefixId.replace("/", "%2F") : prefixId
1596 s.createObj = function() {
1597 return new Prefix();
1600 s.send = function(path, obj, successCbk, errorCbk) {
1601 var restObj = createRestObj(path),
1602 reqData = createData(obj);
1604 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1607 s.delete = function(path, successCbk, errorCbk) {
1608 var restObj = createRestObj(path);
1610 GPBServices.delete(restObj, successCbk, errorCbk);
1613 s.load = function(path, successCbk, errorCbk) {
1614 var restObj = createBaseRestObj(path);
1616 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1623 gbp.register.factory('GBPClassifierInstanceServices', function(GPBServices) {
1627 var ClassifierService = function(name, classifierDefId) {
1628 this.name = name || null;
1629 this['classifier-definition-id'] = classifierDefId || null;
1630 this['parameter-value'] = [];
1633 var createBaseRestObj = function(pathObj) {
1634 return GPBServices.createRestObj()
1635 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');
1638 var createRestObj = function(pathObj) {
1639 return createBaseRestObj(pathObj).one('classifier-instance').one(pathObj.classfierInstanceId);
1642 var transformCallback = function(rawData) {
1643 return rawData['subject-feature-instances']['classifier-instance'];
1646 var createData = function(obj) {
1647 return { 'classifier-instance' : [ GPBServices.stripNullValues(obj) ] };
1650 s.createPathObj = function(tenantId, classfierInstanceId) {
1653 classfierInstanceId: classfierInstanceId
1657 s.createObj = function() {
1658 return new ClassifierService();
1661 s.send = function(path, obj, successCbk, errorCbk) {
1662 var restObj = createRestObj(path),
1663 reqData = createData(obj);
1665 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1668 s.delete = function(path, successCbk, errorCbk) {
1669 var restObj = createRestObj(path);
1671 GPBServices.delete(restObj, successCbk, errorCbk);
1674 s.load = function(path, successCbk, errorCbk) {
1675 var restObj = createBaseRestObj(path);
1677 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1684 gbp.register.factory('GBPActionInstanceServices', function(GPBServices) {
1688 var ActionService = function(name, actionDefId) {
1689 this.name = name || null;
1690 this['action-definition-id'] = actionDefId || null;
1691 this['parameter-value'] = [];
1694 var createBaseRestObj = function(pathObj) {
1695 return GPBServices.createRestObj()
1696 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');
1699 var createRestObj = function(pathObj) {
1700 return createBaseRestObj(pathObj).one('action-instance').one(pathObj.actionInstanceId);
1703 var transformCallback = function(rawData) {
1704 return rawData['subject-feature-instances']['action-instance'];
1707 var createData = function(obj) {
1708 return { 'action-instance' : [ GPBServices.stripNullValues(obj) ] };
1711 s.createPathObj = function(tenantId, actionInstanceId) {
1714 actionInstanceId: actionInstanceId
1718 s.createObj = function() {
1719 return new ActionService();
1722 s.send = function(path, obj, successCbk, errorCbk) {
1723 var restObj = createRestObj(path),
1724 reqData = createData(obj);
1726 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1729 s.delete = function(path, successCbk, errorCbk) {
1730 var restObj = createRestObj(path);
1732 GPBServices.delete(restObj, successCbk, errorCbk);
1735 s.load = function(path, successCbk, errorCbk) {
1736 var restObj = createBaseRestObj(path);
1738 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1741 s.getDefinitions = function(successCbk, errorCbk) {
1742 var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');
1744 restObj.get().then(function(data) {
1745 successCbk(data['subject-feature-definitions']['action-definition']);
1755 gbp.register.factory('GBPEpgServices', function(GPBServices) {
1759 var EPG = function(name, description, intraGroupPolicy, networkDomain, id, parent) {
1760 this.id = id || GPBServices.getUUIDnumber();
1761 this.name = name || null;
1762 this.description = description || null;
1763 this['intra-group-policy'] = intraGroupPolicy || null;
1764 this['network-domain'] = networkDomain || null;
1765 this.parent = parent || null;
1768 var createBaseRestObj = function(pathObj) {
1769 return GPBServices.createRestObj()
1770 .one('policy:tenants').one('tenant').one(pathObj.tenantId);
1773 var createRestObj = function(pathObj) {
1774 return createBaseRestObj(pathObj).one('endpoint-group').one(pathObj.epgId);
1777 var transformCallback = function(rawData) {
1778 return rawData.tenant[0]['endpoint-group'];
1781 var createData = function(obj) {
1782 return { 'endpoint-group' : [ GPBServices.stripNullValues(obj) ] };
1785 s.createPathObj = function(tenantId, epgId) {
1792 s.createObj = function() {
1796 s.send = function(path, obj, successCbk, errorCbk) {
1797 var restObj = createRestObj(path),
1798 reqData = createData(obj);
1800 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1803 s.delete = function(path, successCbk, errorCbk) {
1804 var restObj = createRestObj(path);
1806 GPBServices.delete(restObj, successCbk, errorCbk);
1809 s.load = function(path, successCbk, errorCbk) {
1810 var restObj = createBaseRestObj(path);
1812 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1819 gbp.register.factory('GBPConNamedSelServices', function(GPBServices) {
1823 var ConsumerNamedSelector = function(name, contract) {
1824 this.name = name || null;
1825 this.contract = contract || [];
1828 var createBaseRestObj = function(pathObj) {
1829 return GPBServices.createRestObj()
1830 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);
1833 var createRestObj = function(pathObj) {
1834 return createBaseRestObj(pathObj).one('consumer-named-selector').one(pathObj.cnsId);
1837 var transformCallback = function(rawData) {
1839 consumerData = rawData['endpoint-group'][0]['consumer-named-selector'];
1842 data = consumerData.map(function(elem) {
1843 if(elem.hasOwnProperty('contract') === false) {
1853 var createData = function(obj) {
1854 var o = GPBServices.stripNullValues(obj);
1857 o.contract = GPBServices.removeEmptyElementsFromList(o.contract);
1860 return { 'consumer-named-selector' : [ o ] };
1863 s.createPathObj = function(tenantId, epgId, cnsId) {
1871 s.createObj = function() {
1872 return new ConsumerNamedSelector();
1875 s.send = function(path, obj, successCbk, errorCbk) {
1876 var restObj = createRestObj(path),
1877 reqData = createData(obj);
1879 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1882 s.delete = function(path, successCbk, errorCbk) {
1883 var restObj = createRestObj(path);
1885 GPBServices.delete(restObj, successCbk, errorCbk);
1888 s.load = function(path, successCbk, errorCbk) {
1889 var restObj = createBaseRestObj(path);
1891 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1899 gbp.register.factory('GBPProNamedSelServices', function(GPBServices) {
1903 var ProviderNamedSelector = function(name, contract) {
1904 this.name = name || null;
1905 this.contract = contract || [];
1908 var createBaseRestObj = function(pathObj) {
1909 return GPBServices.createRestObj()
1910 .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);
1913 var createRestObj = function(pathObj) {
1914 return createBaseRestObj(pathObj).one('provider-named-selector').one(pathObj.cnsId);
1917 var transformCallback = function(rawData) {
1919 provderData = rawData['endpoint-group'][0]['provider-named-selector'];
1922 data = provderData.map(function(elem) {
1923 if(elem.hasOwnProperty('contract') === false) {
1933 var createData = function(obj) {
1934 var o = GPBServices.stripNullValues(obj);
1937 o.contract = GPBServices.removeEmptyElementsFromList(o.contract);
1940 return { 'provider-named-selector' : [ o ] };
1943 s.createPathObj = function(tenantId, epgId, cnsId) {
1951 s.createObj = function() {
1952 return new ProviderNamedSelector();
1955 s.send = function(path, obj, successCbk, errorCbk) {
1956 var restObj = createRestObj(path),
1957 reqData = createData(obj);
1959 GPBServices.send(restObj, reqData, successCbk, errorCbk);
1962 s.delete = function(path, successCbk, errorCbk) {
1963 var restObj = createRestObj(path);
1965 GPBServices.delete(restObj, successCbk, errorCbk);
1968 s.load = function(path, successCbk, errorCbk) {
1969 var restObj = createBaseRestObj(path);
1971 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
1978 gbp.register.factory('GBPEndpointServices', function(GPBServices) {
1982 var Endpoint = function(tenantId) {
1983 this.tenant = tenantId || null;
1984 this['network-containment'] = null;
1985 this['endpoint-group'] = null;
1986 this['endpoint-groups'] = [];
1987 this.condition = [];
1988 this['l2-context'] = null;
1989 this['mac-address'] = null;
1990 this['l3-address'] = [];
1993 var createRestObj = function() {
1994 return GPBServices.createRestObj('operations');
1997 var transformCallback = function(rawData) {
1998 return rawData.endpoints.endpoint;
2001 var createBaseData = function(obj) {
2002 var o = GPBServices.stripNullValues(obj);
2005 o.condition = GPBServices.removeEmptyElementsFromList(o.condition);
2008 if(o['endpoint-groups']) {
2009 o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);
2012 if(o['l3-address']) {
2013 o['l3-address'] = GPBServices.removeEmptyElementsFromList(o['l3-address']);
2019 var createSendData = function(obj) {
2020 var o = createBaseData(obj);
2021 return { 'input': o };
2024 var createDeleteData = function(obj) {
2027 'l3': obj['l3-address'],
2030 'l2-context': obj['l2-context'],
2031 'mac-address': obj['mac-address']
2040 s.createObj = function(tenantId) {
2041 return new Endpoint(tenantId);
2044 s.send = function(path, obj, successCbk, errorCbk) {
2045 var restObj = createRestObj().one('endpoint:register-endpoint'),
2046 reqData = createSendData(obj);
2048 GPBServices.post(restObj, reqData, successCbk, errorCbk);
2051 s.delete = function(path, obj, successCbk, errorCbk) {
2052 var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),
2053 reqData = createDeleteData(obj);
2054 GPBServices.post(restObj, reqData, successCbk, errorCbk);
2057 s.load = function(path, successCbk, errorCbk) {
2058 var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');
2060 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
2067 gbp.register.factory('GBPEndpointL3Services', function(GPBServices) {
2071 var EndpointL3 = function(tenantId) {
2072 this.tenant = tenantId || null;
2073 this['endpoint-group'] = null;
2074 this['endpoint-groups'] = [];
2075 this.condition = [];
2076 this['l3-context'] = null;
2077 this['ip-prefix'] = null;
2078 this['endpoint-l2-gateways'] = [];
2079 this['endpoint-l3-gateways'] = [];
2082 var createRestObj = function() {
2083 return GPBServices.createRestObj('operations');
2086 var transformCallback = function(rawData) {
2087 return rawData.endpoints['endpoint-l3-prefix'];
2090 var createBaseData = function(obj) {
2091 var o = GPBServices.stripNullValues(obj);
2094 o.condition = GPBServices.removeEmptyElementsFromList(o.condition);
2097 if(o['endpoint-groups']) {
2098 o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);
2101 if(o['endpoint-l2-gateways']) {
2102 o['endpoint-l2-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l2-gateways']);
2105 if(o['endpoint-l3-gateways']) {
2106 o['endpoint-l3-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l3-gateways']);
2112 var createSendData = function(obj) {
2113 var o = createBaseData(obj);
2114 return { 'input': o };
2117 var createDeleteData = function(obj) {
2122 'l3-context': obj['l3-context'],
2123 'ip-prefix': obj['ip-prefix']
2126 'l2': obj['endpoint-l2-gateways'],
2127 'l3': obj['endpoint-l3-gateways']
2134 s.createObj = function(tenantId) {
2135 return new EndpointL3(tenantId);
2138 s.send = function(path, obj, successCbk, errorCbk) {
2139 var restObj = createRestObj().one('endpoint:register-l3-prefix-endpoint'),
2140 reqData = createSendData(obj);
2142 GPBServices.post(restObj, reqData, successCbk, errorCbk);
2145 s.delete = function(path, obj, successCbk, errorCbk) {
2146 var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),
2147 reqData = createDeleteData(obj);
2149 GPBServices.post(restObj, reqData, successCbk, errorCbk);
2152 s.load = function(path, successCbk, errorCbk) {
2153 var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');
2155 GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
2162 gbp.register.factory('PGNServices', function(GBPRestangular) {
2172 pathAction: 'PATHACTION',
2173 accessAction: 'ACCESSACTION'
2176 idGetter[idTypes.tenant] = function() {
2180 idGetter[idTypes.uuid] = function() {
2184 idGetter[idTypes.l3ctx] = function() {
2188 idGetter[idTypes.pathAction] = function() {
2192 idGetter[idTypes.accessAction] = function() {
2196 var getId = function(type) {
2197 if(idGetter.hasOwnProperty(type)) {
2198 return id = idGetter[type]();
2200 throw "Cannot get idGetter for type " + type;
2204 s.addReplaceEndpointGroup = function(successCbk, errorCbk, groupName, sgt, description) {
2205 var tenantId = getId(idTypes.tenant),
2206 uuid = getId(idTypes.uuid),
2207 restObj = GBPRestangular.one('restconf').one('operations'),
2208 rpcRes = 'pgn-application:create-or-replace-endpoint-groups',
2214 "pgn-application:tenant-id": tenantID,
2215 "pgn-application:id":uuid,
2216 "pgn-application:security-group-tag":sgt,
2217 "pgn-application:name":groupName,
2218 "pgn-application:description":description
2224 restObj.post(rpcRes, reqData).then(function(data) {
2231 s.deleteEndpointGroup = function(successCbk, errorCbk, uuid) {
2232 var tenantId = getId(idTypes.tenant),
2233 restObj = GBPRestangular.one('restconf').one('operations'),
2234 rpcRes = 'pgn-application:delete-endpoint-groups',
2239 "pgn-application:tenant-id": tenantId,
2240 "pgn-application:id":uuid
2246 restObj.post(rpcRes, reqData).then(function(data) {
2253 s.getActions = function(successCbk, errorCbk) {
2254 var tenantId = getId(idTypes.tenant),
2255 pathActionId = getId(idTypes.pathAction),
2256 accessActionId = getId(idTypes.accessAction),
2257 restObj = GBPRestangular.one('restconf').one('config').one('policy:tenants', tenantId).one('subject-feature-instances');
2259 restObj.get().then(function(data) {
2260 successCbk(data); //TODO fill actions
2266 s.applyPolicy = function(successCbk, errorCbk, providerId, consumerId, pathSelRule, accessCtrlRule) {
2267 var restObj = GBPRestangular.one('restconf').one('operations'),
2268 rpcRes = 'pgn-application:wire-endpoint-groups',
2269 actionRefName = (pathSelRule ? pathSelRule : '') + (accessCtrlRule ? accessCtrlRule : ''),
2272 "endpoint-group-pair-with-rules": {
2273 "pgn-application:provider-tenant-id": tenantID,
2274 "pgn-application:consumer-tenant-id": tenantID,
2275 "pgn-application:provider-group-id":providerId,
2276 "pgn-application:consumer-group-id":consumerId,
2277 "pgn-application:group-rule": [
2279 "action-ref": [pathSelRule, accessCtrlRule].map(function(r) {
2280 return { "name":r };
2282 "name":actionRefName
2289 restObj.post(rpcRes, reqData).then(function(data) {
2290 successCbk(data); //TODO reload policies
2296 s.deletePolicy = function(successCbk, errorCbk, providerId, consumerId) {
2297 var tenantId = getId(idTypes.tenant),
2298 restObj = GBPRestangular.one('restconf').one('operations'),
2299 rpcRes = 'pgn-application:unwire-endpoint-groups',
2303 "endpoint-group-pair":[
2305 "pgn-application:provider-tenant-id": tenantId,
2306 "pgn-application:consumer-tenant-id": tenantId,
2307 "pgn-application:provider-group-id":providerId,
2308 "pgn-application:consumer-group-id":consumerId
2314 restObj.post(rpcRes, reqData).then(function(data) {
2315 successCbk(data); //TODO reload policies
2321 s.addEndPoint = function(successCbk, errorCbk, ipAddress, groupId) {
2322 var l3ctxId = getId(idTypes.l3ctx),
2323 tenantId = getId(idTypes.tenant),
2324 restObj = GBPRestangular.one('restconf').one('operations'),
2325 rpcRes = 'endpoint:register-endpoint',
2328 "endpoint-group": groupId,
2331 "ip-address": ipAddress,
2332 "l3-context": l3ctxId
2339 restObj.post(rpcRes, reqData).then(function(data) {
2346 s.getUUIDnumber = function() {
2347 var d = new Date().getTime();
2348 return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
2349 var r = (d + Math.random()*16)%16 | 0;
2350 d = Math.floor(d/16);
2351 return (c=='x' ? r : (r&0x3|0x8)).toString(16);
2358 gbp.register.factory('DesignGbpFactory', function(){
2362 dvf.setMainClass = function(){
2363 if ( $('.gbpWrapper').length ) {
2364 $('.gbpWrapper').closest('.col-xs-12').addClass('gbpGlobalWrapper');
2372 gbp.register.factory('JointGraphOffsetFactory', function(GBPConstants){
2375 jgof.createWHObj = function(w, h) {
2376 return {w: w || 0, h: h || 0};
2379 jgof.updateOffsets = function(delta, offset, margin, maximums, paper) {
2380 offset.w = offset.w + delta.w + margin.w;
2382 if(offset.w >= maximums.w) {
2383 paper.setDimensions(offset.w + 30, paper.options.height);
2384 offset.w = offset.ow;
2385 offset.h = offset.h + margin.h;
2390 jgof.resetOffsets = function(offset, w, h) {
2395 jgof.getCurrentOffset = function(array, type) {
2397 array.forEach(function(item){
2398 max = item.attributes.position[type] > max ? item.attributes.position[type] : max;
2404 jgof.checkObjsHoffsets = function(array, size, paper) {
2407 cellBottomOffset = 80,
2408 setItemPosition = function(item, type) {
2409 while (item.attributes.position[type] < size + cellBottomOffset) {
2410 item.translate(null, cellBottomOffset);
2414 array.forEach(function(item){
2415 addOffset = (size + cellBottomOffset) >= item.attributes.position.y;
2418 setItemPosition(item, 'y');
2421 if ( item.attributes.position.y + cellBottomOffset > paper.options.height ) {
2422 paper.setDimensions(paper.options.width, paper.options.height + cellBottomOffset);
2430 gbp.register.factory('JointGraphFactory', function(GBPConstants){
2431 var defaulColor = 'blue';
2435 jgf.getLabelLength = function(length) {
2436 return length * 10 > 200 ? 200 : length * 10;
2439 jgf.createGraph = function() {
2440 var graph = new joint.dia.Graph();
2442 var paper = new joint.dia.Paper({
2448 interactive: { vertexAdd: false }
2454 jgf.resetGraphDimension = function(paper, element, paddingT, paddingL){
2455 paddingT = paddingT ? paddingT : 0;
2456 paddingL = paddingL ? paddingL : paddingT;
2458 var paperWidth = element.width() - paddingL,
2459 paperHeight = element.height() - paddingT - 5;
2461 paper.setDimensions(paperWidth, paperHeight);
2464 jgf.reloadGraph = function(graph) {
2468 jgf.createElement = function(elementName, posx, posy, width, height, objectType, object, tooltip, bgcolor, titleName) {
2469 var setWidth = function(width) {
2470 return width < GBPConstants.jointElements.minWidth ? GBPConstants.jointElements.minWidth :
2471 width > GBPConstants.jointElements.maxWidth ? GBPConstants.jointElements.maxWidth : width;
2474 var setHeight = function(height) {
2475 return height < GBPConstants.jointElements.minHeight ? GBPConstants.jointElements.minHeight :
2476 height > GBPConstants.jointElements.maxHeight ? GBPConstants.jointElements.maxHeight : height;
2479 // joint.shapes.basic.Rect = joint.shapes.basic.Generic.extend({
2480 joint.shapes.html = {};
2481 joint.shapes.html.Element = joint.shapes.basic.Generic.extend({
2483 markup: '<g class="rotatable"><g class="scalable"><rect/><title /></g><text class="text1"></text><text class="text2"></text><title /></g>',
2485 defaults: joint.util.deepSupplement({
2486 type: 'html.Element',
2488 'rect': { fill: bgcolor, stroke: 'black', 'follow-scale': true, width: 80, height: 40, cursor: 'pointer' },
2489 '.text1': { ref: 'rect', 'ref-x': 0.5, 'ref-y': 0.3, 'y-alignment': 'middle', 'x-alignment': 'middle', cursor: 'pointer', 'font-weight' : 'bold'},
2490 '.text2': { ref: 'rect', 'ref-x': 0.5, 'ref-y': 0.7, 'y-alignment': 'middle', 'x-alignment': 'middle', cursor: 'pointer'},
2491 'title': {text: tooltip},
2494 }, joint.shapes.basic.Generic.prototype.defaults)
2497 // joint.shapes.html.ElementView = joint.dia.ElementView.extend({
2500 // '<input class="html-element" type="text" value="'+elementName+'"/>',
2504 // initialize: function() {
2505 // _.bindAll(this, 'updateBox');
2506 // joint.dia.ElementView.prototype.initialize.apply(this, arguments);
2508 // this.$box = $(_.template(this.template)());
2509 // // Prevent paper from handling pointerdown.
2510 // this.$box.find('input,select').on('mousedown click', function(evt) { evt.stopPropagation(); });
2511 // // This is an example of reacting on the input change and storing the input data in the cell model.
2512 // this.$box.find('input').on('change', _.bind(function(evt) {
2513 // this.model.set('input', $(evt.target).val());
2515 // this.$box.find('button').on('click', _.bind(function(evt) {
2516 // this.model.set('button', $('.divc').css('display','block'));
2518 // // Update the box position whenever the underlying model changes.
2519 // this.model.on('change', this.updateBox, this);
2521 // this.updateBox();
2523 // render: function() {
2524 // joint.dia.ElementView.prototype.render.apply(this, arguments);
2525 // this.paper.$el.prepend(this.$box);
2526 // this.updateBox();
2529 // updateBox: function() {
2530 // // Set the position and dimension of the box so that it covers the JointJS element.
2531 // var bbox = this.model.getBBox();
2532 // // Example of updating the HTML with a data stored in the cell model.
2533 // this.$box.css({ width: bbox.width, height: bbox.height, left: bbox.x, top: bbox.y, transform: 'rotate(' + (this.model.get('angle') || 0) + 'deg)' });
2535 // removeBox: function(evt) {
2536 // this.$box.remove();
2540 elementName = elementName.length > 20 ? elementName.slice(0,20) + '...' : elementName;
2541 // width = width > 200 ? 200 : width;
2543 // return new joint.shapes.basic.Rect({
2544 return new joint.shapes.html.Element({
2545 position: { x: posx || 0, y: posy || 0 },
2546 size: { width: width || GBPConstants.jointElements.minWidth, height: height || GBPConstants.jointElements.minHeight },
2547 attrs: { rect: { fill: bgcolor }, '.text1': { fill: 'black', text: titleName}, '.text2': { fill: 'black', text: elementName }},
2548 objType: objectType,
2553 jgf.transformElement = function(element, transformX, transformY) {
2554 return element.translate(transformX, transformY);
2557 jgf.addItem = function(graph, item) {
2558 graph.addCells([item]);
2561 jgf.addItemList = function(graph, listItem) {
2562 graph.addCells(listItem);
2565 jgf.createLink = function(srcId, targetId, colorIn, colorOut, direction, objData) {
2566 colorIn = colorIn || defaulColor;
2567 colorOut = colorOut || defaulColor;
2569 var labelTextColor = GBPConstants.colors[GBPConstants.strings.sigmaTopoDefaultText],
2570 labelBckColor = GBPConstants.colors[GBPConstants.strings.linklabel];
2573 source: { id: srcId },
2574 target: { id: targetId },
2576 '.connection': { stroke: colorIn, 'stroke-width': 2, name: 'normal' },
2577 '.connection-wrap': { 'stroke-width': 10 }
2582 if(direction === 'in' || direction == 'bidirectional' || direction === undefined || direction === null) {
2583 linkObj.attrs['.marker-target'] = { fill: colorIn, d: 'M 10 0 L 0 5 L 10 10 z' };
2586 if(direction === 'out' || direction == 'bidirectional') {
2587 linkObj.attrs['.marker-source'] = { fill: colorOut, d: 'M 10 0 L 0 5 L 10 10 z' };
2590 var link = new joint.dia.Link(linkObj);
2593 // link.label(0, { position: 0.3, attrs: { text: { text: labelText, fill: labelTextColor }, rect: { stroke: labelBckColor, 'stroke-width': 20 }}});
2603 gbp.register.factory('GBPJointGraphBuilder', function(GBPRestangular, GBPConstants, JointGraphFactory, JointGraphOffsetFactory, TopologyDataLoaders){
2608 var buildJointData = function(paper, nodes, links) {
2612 var setOperConfigTopoData = function(paper, data){
2613 var topo = TopologyDataLoaders.getEpgTopo(data);
2635 JointGraphFactory.resetGraphDimension(paper, $('.policyGraphWrapper'));
2636 JointGraphFactory.reloadGraph(paper.model);
2638 var deg2rad = function(deg){
2639 return deg * Math.PI / 180;
2642 var getXYInCircle = function(elementIndex, elementsCount, paperCenterX, paperCenterY, elementWidth, elementHeight){
2643 var result = {x:0, y:0};
2645 r = (paperCenterX < paperCenterY ? paperCenterX : paperCenterY ) - circleMargin;
2646 degs = 360 / elementsCount * (elementIndex+1) + 180;
2647 rads = deg2rad(degs);
2649 elementWidth = elementWidth ? elementWidth : GBPConstants.jointElements.minWidth;
2650 elementHeight = elementHeight ? elementHeight : GBPConstants.jointElements.minHeight;
2652 if(elementWidth < GBPConstants.jointElements.minWidth){elementWidth = GBPConstants.jointElements.minWidth;}
2653 if(elementWidth > GBPConstants.jointElements.maxWidth){elementWidth = GBPConstants.jointElements.maxWidth;}
2654 if(elementHeight < GBPConstants.jointElements.minHeight){elementHeight = GBPConstants.jointElements.minHeight;}
2655 if(elementHeight > GBPConstants.jointElements.maxHeight){elementHeight = GBPConstants.jointElements.maxHeight;}
2657 result.x = paperCenterX + r * Math.cos(rads);
2658 result.y = paperCenterY + r * Math.sin(rads);
2661 if(degs > 90 && degs < 270){
2662 result.x = result.x - elementWidth;
2664 if(degs == 90 || degs == 270){
2665 result.x = result.x - elementWidth / 2;
2667 if(degs > 180 && degs < 360){
2668 result.y = result.y - elementHeight;
2670 if(degs === 0 || degs == 180){
2671 result.y = result.y - elementHeight / 2;
2676 var paperCenterX = (paper.options.width) / 2;
2677 var paperCenterY = (paper.options.height) / 2;
2678 topo.nodes.forEach(function(i, index){
2679 var label = i.label,
2681 width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length)),
2682 color = GBPConstants.colors[GBPConstants.strings.epg];
2684 var itemPos = getXYInCircle(index, topo.nodes.length, paperCenterX, paperCenterY, width, null);
2685 var item = JointGraphFactory.createElement(label, itemPos.x, itemPos.y, width, null, GBPConstants.strings.epg , i, label, color, header);
2687 itemsArray.epg.push(item);
2689 // JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
2690 JointGraphFactory.addItem(paper.model, item);
2693 var getItemById = function(id, array){
2694 var item = array.filter(function(i){
2695 return i.attributes.objData.id === id;
2698 return item.length ? item[0] : null;
2701 topo.links.forEach(function(l){
2702 var sourceItem = getItemById(l.source, itemsArray.epg),
2703 targetItem = getItemById(l.target, itemsArray.epg);
2705 if (sourceItem && targetItem) {
2706 var link = JointGraphFactory.createLink(sourceItem.id, targetItem.id, 'blue', 'green', l.direction, l.data);
2707 linksArray.push(link);
2711 JointGraphFactory.addItemList(paper.model, linksArray);
2714 jgb.loadTopology = function(args, paper, type) {
2715 if(type === null || builders.hasOwnProperty(type) === false) {
2716 type = GBPConstants.strings.empty;
2719 builders[type](args, paper);
2722 builders[GBPConstants.strings.empty] = function(args, paper) {
2723 JointGraphFactory.reloadGraph(paper.model);
2726 builders[GBPConstants.strings.config] = function(args, paper) {
2727 var storage = args.storage || 'config',
2728 tenantId = args.tenantId;
2731 TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){
2732 setOperConfigTopoData(paper, data);
2736 builders[GBPConstants.strings.oper] = function(args, paper) {
2737 var storage = args.storage || 'config',
2738 tenantId = args.tenantId;
2740 TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){
2741 setOperConfigTopoData(paper, data);
2745 builders[GBPConstants.strings.l2l3] = function(args, paper) {
2746 var storage = args.storage || 'config',
2747 tenantId = args.tenantId;
2749 if(storage && tenantId) {
2750 restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);
2752 restObj.get().then(function(data) {
2753 var createLinks = function(srcList, srcItems, dstItems) {
2754 var linkItems = srcList.map(function(srcObj) {
2755 var linkItem = null;
2756 if(srcObj.parent && dstItems[srcObj.parent]) {
2757 linkItem = JointGraphFactory.createLink(srcItems[srcObj.id].id, dstItems[srcObj.parent].id, 'blue');
2760 }).filter(function(linkObj) {
2761 return linkObj !== null;
2784 JointGraphFactory.reloadGraph(paper.model);
2786 data.tenant[0]['l3-context'].forEach(function(c, i) {
2787 var label = c.name || c.id,
2788 header = 'L3 context',
2789 color = GBPConstants.colors[GBPConstants.strings.l3ctx],
2790 width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
2791 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.l3ctx , c, null, color, header);
2793 itemsArray.l3[c.id] = item;
2795 JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
2796 JointGraphFactory.addItem(paper.model, item);
2799 JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);
2801 data.tenant[0]['l2-bridge-domain'].forEach(function(c, i) {
2802 var label = c.name || c.id,
2803 header = 'L2 bridge domain',
2804 color = GBPConstants.colors[GBPConstants.strings.bridge],
2805 width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
2806 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.bridge , c, null, color, header);
2808 itemsArray.l2bridge[c.id] = item;
2810 JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
2811 JointGraphFactory.addItem(paper.model, item);
2814 JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);
2816 data.tenant[0]['l2-flood-domain'].forEach(function(c, i) {
2817 var label = c.name || c.id,
2818 header = 'L2 flood domain',
2819 color = GBPConstants.colors[GBPConstants.strings.flood],
2820 width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
2821 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.flood , c, null, color, header);
2823 itemsArray.l2flood[c.id] = item;
2825 JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
2826 JointGraphFactory.addItem(paper.model, item);
2829 JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);
2831 data.tenant[0]['subnet'].forEach(function(c, i) {
2832 var label = c.name || c.id,
2834 color = GBPConstants.colors[GBPConstants.strings.subnet],
2835 width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
2836 item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.subnet , c, null, color, header);
2838 itemsArray.subnets[c.id] = item;
2840 JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
2841 JointGraphFactory.addItem(paper.model, item);
2844 JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.oh);
2846 var l2bridgeL3 = createLinks(data.tenant[0]['l2-bridge-domain'], itemsArray.l2bridge, itemsArray.l3);
2847 JointGraphFactory.addItemList(paper.model, l2bridgeL3);
2849 var l2floodL2bridge = createLinks(data.tenant[0]['l2-flood-domain'], itemsArray.l2flood, itemsArray.l2bridge);
2850 JointGraphFactory.addItemList(paper.model, l2floodL2bridge);
2852 var l2floodSubnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l2flood);
2853 JointGraphFactory.addItemList(paper.model, l2floodSubnet);
2855 var l2bridgeSubnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l2bridge);
2856 JointGraphFactory.addItemList(paper.model, l2bridgeSubnet);
2858 var l3Subnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l3);
2859 JointGraphFactory.addItemList(paper.model, l3Subnet);