</dependency>
<dependency>
<groupId>${project.groupId}</groupId>
- <artifactId>groupbasedpolicy-ui-bundle</artifactId>
+ <artifactId>groupbasedpolicy-old-ui-bundle</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
</dependency>
<dependency>
<groupId>org.opendaylight.groupbasedpolicy</groupId>
- <artifactId>groupbasedpolicy-ui-bundle</artifactId>
+ <artifactId>groupbasedpolicy-old-ui-bundle</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.groupbasedpolicy</groupId>
<feature version="${dlux.version}">odl-dlux-core</feature>
<feature version="${dlux.version}">odl-dlux-yangvisualizer</feature>
<feature version="${project.version}">odl-groupbasedpolicy-uibackend</feature>
- <bundle>mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-ui-bundle/{{VERSION}}</bundle>
+ <bundle>mvn:org.opendaylight.groupbasedpolicy/groupbasedpolicy-old-ui-bundle/{{VERSION}}</bundle>
</feature>
<!--
-<?xml version="1.0" encoding="UTF-8"?>\r
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">\r
- <modelVersion>4.0.0</modelVersion>\r
- <parent>\r
- <groupId>org.opendaylight.groupbasedpolicy</groupId>\r
- <artifactId>groupbasedpolicy-ui</artifactId>\r
- <version>0.4.0-SNAPSHOT</version>\r
- </parent>\r
-\r
- <artifactId>groupbasedpolicy-ui-bundle</artifactId>\r
- <name>groupbasedpolicy-ui-bundle</name>\r
- <packaging>bundle</packaging>\r
-\r
- <properties>\r
- <dlux.version>0.4.0-SNAPSHOT</dlux.version>\r
- </properties>\r
-\r
- <dependencies>\r
- <dependency>\r
- <groupId>org.opendaylight.dlux</groupId>\r
- <artifactId>loader</artifactId>\r
- <version>${dlux.version}</version>\r
- </dependency>\r
- <dependency>\r
- <groupId>org.opendaylight.groupbasedpolicy</groupId>\r
- <artifactId>groupbasedpolicy-ui-module</artifactId>\r
- <version>${project.version}</version>\r
- </dependency>\r
- </dependencies>\r
- <build>\r
- <resources>\r
- <resource>\r
- <directory>target/generated-resources</directory>\r
- </resource>\r
- <resource>\r
- <directory>src/main/resources</directory>\r
- </resource>\r
- </resources>\r
- <plugins>\r
- <plugin>\r
- <groupId>org.apache.maven.plugins</groupId>\r
- <artifactId>maven-dependency-plugin</artifactId>\r
- <version>2.6</version>\r
- <executions>\r
- <!--loader Resources-->\r
- <execution>\r
- <id>unpack-loader-resources</id>\r
- <goals>\r
- <goal>unpack-dependencies</goal>\r
- </goals>\r
- <phase>generate-resources</phase>\r
- <configuration>\r
- <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>\r
- <groupId>org.opendaylight.dlux</groupId>\r
- <includeArtifactIds>groupbasedpolicy-ui-module</includeArtifactIds>\r
- <excludes>META-INF\/**</excludes>\r
- <excludeTransitive>true</excludeTransitive>\r
- <ignorePermissions>false</ignorePermissions>\r
- </configuration>\r
- </execution>\r
- </executions>\r
- </plugin>\r
- <plugin>\r
- <groupId>org.apache.felix</groupId>\r
- <artifactId>maven-bundle-plugin</artifactId>\r
- <extensions>true</extensions>\r
- <configuration>\r
- <instructions>\r
- <Import-Package>org.osgi.service.http,\r
- org.osgi.framework;version="1.0.0",\r
- org.opendaylight.dlux.loader,\r
- org.slf4j\r
- </Import-Package>\r
- <Export-Package></Export-Package>\r
- </instructions>\r
- </configuration>\r
- </plugin>\r
- </plugins>\r
- </build>\r
- <scm>\r
- <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>\r
- <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>\r
- <tag>HEAD</tag>\r
- <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>\r
- </scm>\r
-</project>\r
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.opendaylight.groupbasedpolicy</groupId>
+ <artifactId>groupbasedpolicy-old-ui</artifactId>
+ <version>0.4.0-SNAPSHOT</version>
+ </parent>
+
+ <artifactId>groupbasedpolicy-old-ui-bundle</artifactId>
+ <name>groupbasedpolicy-old-ui-bundle</name>
+ <packaging>bundle</packaging>
+
+ <properties>
+ <dlux.version>0.4.0-SNAPSHOT</dlux.version>
+ </properties>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.opendaylight.dlux</groupId>
+ <artifactId>loader</artifactId>
+ <version>${dlux.version}</version>
+ </dependency>
+ <dependency>
+ <groupId>org.opendaylight.groupbasedpolicy</groupId>
+ <artifactId>groupbasedpolicy-old-ui-module</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <resources>
+ <resource>
+ <directory>target/generated-resources</directory>
+ </resource>
+ <resource>
+ <directory>src/main/resources</directory>
+ </resource>
+ </resources>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-dependency-plugin</artifactId>
+ <version>2.6</version>
+ <executions>
+ <!--loader Resources-->
+ <execution>
+ <id>unpack-loader-resources</id>
+ <goals>
+ <goal>unpack-dependencies</goal>
+ </goals>
+ <phase>generate-resources</phase>
+ <configuration>
+ <outputDirectory>${project.build.directory}/generated-resources</outputDirectory>
+ <groupId>org.opendaylight.dlux</groupId>
+ <includeArtifactIds>groupbasedpolicy-old-ui-module</includeArtifactIds>
+ <excludes>META-INF\/**</excludes>
+ <excludeTransitive>true</excludeTransitive>
+ <ignorePermissions>false</ignorePermissions>
+ </configuration>
+ </execution>
+ </executions>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <extensions>true</extensions>
+ <configuration>
+ <instructions>
+ <Import-Package>org.osgi.service.http,
+ org.osgi.framework;version="1.0.0",
+ org.opendaylight.dlux.loader,
+ org.slf4j
+ </Import-Package>
+ <Export-Package></Export-Package>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+ <scm>
+ <connection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</connection>
+ <developerConnection>scm:git:ssh://git.opendaylight.org:29418/dlux.git</developerConnection>
+ <tag>HEAD</tag>
+ <url>https://wiki.opendaylight.org/view/OpenDaylight_dlux:Main</url>
+ </scm>
+</project>
-<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">\r
- <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>\r
- <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>\r
- <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">\r
- <property name="httpService" ref="httpService"/>\r
- <property name="loader" ref="loader"/>\r
- <property name="moduleName" value="gbp"/>\r
- <property name="url" value="/src/app/gbp"/>\r
- <property name="directory" value="/gbp"/>\r
- <property name="requireJs" value="app/gbp/gbp.module"/>\r
- <property name="angularJs" value="app.gbp"/>\r
- <property name="cssDependencies">\r
- <list>\r
- <value>src/app/gbp/gbp.css</value>\r
- <value>src/app/gbp/js/joint.css</value>\r
- </list>\r
- </property>\r
- </bean>\r
-</blueprint>\r
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+ <reference id="httpService" availability="mandatory" activation="eager" interface="org.osgi.service.http.HttpService"/>
+ <reference id="loader" availability="mandatory" activation="eager" interface="org.opendaylight.dlux.loader.DluxModuleLoader"/>
+ <bean id="bundle" init-method="initialize" destroy-method="clean" class="org.opendaylight.dlux.loader.DluxModule">
+ <property name="httpService" ref="httpService"/>
+ <property name="loader" ref="loader"/>
+ <property name="moduleName" value="gbp"/>
+ <property name="url" value="/src/app/gbp"/>
+ <property name="directory" value="/gbp"/>
+ <property name="requireJs" value="app/gbp/gbp.module"/>
+ <property name="angularJs" value="app.gbp"/>
+ <property name="cssDependencies">
+ <list>
+ <value>src/app/gbp/gbp.css</value>
+ <value>src/app/gbp/js/joint.css</value>
+ </list>
+ </property>
+ </bean>
+</blueprint>
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.opendaylight.groupbasedpolicy</groupId>
- <artifactId>groupbasedpolicy-ui</artifactId>
+ <artifactId>groupbasedpolicy-old-ui</artifactId>
<version>0.4.0-SNAPSHOT</version>
</parent>
- <artifactId>groupbasedpolicy-ui-module</artifactId>
+ <artifactId>groupbasedpolicy-old-ui-module</artifactId>
<name>${project.artifactId}</name>
- <description>GBP UI Module Resources</description>
+ <description>GBP Old UI Module Resources</description>
<packaging>jar</packaging>
</project>
-var modules = ['app/gbp/gbp.module',\r
- 'app/gbp/gbp.services'\r
- ];\r
-\r
-\r
-define(modules, function(gbp) {\r
-\r
- gbp.register.controller('gbpCtrl', ['$scope', '$rootScope', 'GBPTenantServices','DesignGbpFactory', 'GBPConstants',\r
- function ($scope, $rootScope, GBPTenantServices, DesignGbpFactory, GBPConstants) {\r
- $rootScope['section_logo'] = 'logo_gbp';\r
- $scope.view_path = 'src/app/gbp/views/';\r
-\r
- $scope.mainView = {\r
- main: true,\r
- 'policy-renderer': false,\r
- governance: false\r
- };\r
-\r
- $scope.policyRendererView = {\r
- slider : true,\r
- basic : true,\r
- policy: false,\r
- tenants : false,\r
- l2l3 : false,\r
- epg : false,\r
- contracts : false,\r
- docs : false,\r
- groupMenu: false,\r
- classifiers: false,\r
- actions: false,\r
- registerEndpoint : false,\r
- registerL3PrefixEndpoint : false\r
- };\r
-\r
- $scope.subMenuView = {\r
- governance : false,\r
- policy : false,\r
- policySub : false,\r
- renderers : false,\r
- endpoints : false\r
- };\r
-\r
- $scope.breadcrumbs = {'l1' : null,\r
- 'l2' : null,\r
- 'l3' : null};\r
-\r
- $scope.wizards = {\r
- accessModelWizard: false,\r
- actionReferenceWizard: false\r
- };\r
-\r
- $scope.setBreadcrumb = function(level, label, visible){\r
- $scope.breadcrumbs[level] = visible ? label : null;\r
- if(level === 'l1'){\r
- $scope.breadcrumbs.l2 = null;\r
- $scope.breadcrumbs.l3 = null;\r
- }\r
- if(level === 'l2'){\r
- $scope.breadcrumbs.l3 = null;\r
- }\r
- };\r
-\r
- $scope.setViewExpand = function(menu, expand, show){\r
- $scope[menu][expand] = show ? true : !$scope[menu][expand];\r
- for ( var property in $scope[menu] ) {\r
- $scope[menu][property] = expand !== property ? false : $scope[menu][expand];\r
- }\r
-\r
- };\r
-\r
- $scope.toggleExpandedMM = function(expand, show, broadcast){\r
- $scope.setViewExpand('mainView',expand, show);\r
-\r
- if ( broadcast ) {\r
- $scope.$broadcast(broadcast);\r
- }\r
- };\r
-\r
- $scope.sliceLabel = function(label){\r
- return label.length > GBPConstants.numbers.displayLabelLength ? label.slice(0,GBPConstants.numbers.displayLabelLength)+'...' : label;\r
- };\r
-\r
- $scope.getDisplayLabel = function(obj, labelArray, dontSlice){\r
- var ret = '';\r
-\r
- if((typeof labelArray) === 'string'){\r
- ret = obj[labelArray];\r
- } else if (angular.isFunction(labelArray)) {\r
- ret = labelArray(obj);\r
- } else {\r
- labelArray.some(function(labelParam) {\r
- if(angular.isFunction(labelParam)) {\r
- ret = labelParam(obj);\r
- } else if(obj.hasOwnProperty(labelParam)) {\r
- ret = obj[labelParam];\r
- }\r
- return ret;\r
- });\r
- }\r
-\r
- return dontSlice ? ret : $scope.sliceLabel(ret);\r
- };\r
-\r
- // TENANTS\r
- $scope.tenantList = [];\r
- $scope.selectedTenant = null;\r
- $scope.tenantDisplayLabel = ['name' , 'id'];\r
-\r
- $scope.loadTenants = function() {\r
- GBPTenantServices.load(\r
- function(tenants) {\r
- $scope.tenantList = tenants;\r
- console.log('$scope.tenantList', $scope.tenantList);\r
- },\r
- function(){\r
- //TODO error\r
- });\r
-\r
- DesignGbpFactory.setMainClass();\r
- };\r
-\r
- $scope.setTenant = function(selectedTenant) {\r
- $scope.selectedTenant = selectedTenant;\r
- $scope.$broadcast('GBP_TENANT_RELOAD', $scope.selectedTenant);\r
- };\r
-\r
- $scope.loadTenants();\r
-\r
- $scope.$on('GBP_GLOBAL_TENANT_RELOAD',function(){\r
- $scope.loadTenants();\r
- });\r
-\r
- $scope.sendReloadEventFromRoot = function(eventName, val) {\r
- $scope.$broadcast(eventName, val);\r
- };\r
-\r
-\r
- // TODO: rework, use $scope.setViewContent or something\r
- $scope.showWizard = function(wizardName, broadcast, broadcastedData, path) {\r
- $scope.wizards[wizardName] = true;\r
-\r
- if ( broadcast ) {\r
- $scope.sendReloadEventFromRoot(broadcast, {data: broadcastedData, path: path});\r
- }\r
- };\r
-\r
- $scope.closeWizard = function(wizardName) {\r
- $scope.wizards[wizardName] = false;\r
- };\r
-\r
- $scope.updateList = function(list, object, key) {\r
- var elementPos = list.map(function(x) {return x[key]; }).indexOf(object[key]);\r
-\r
- if(elementPos < 0) {\r
- list.push(object);\r
- }\r
- else {\r
- list[elementPos] = object;\r
- }\r
- };\r
-\r
- }]);\r
-\r
- gbp.register.controller('governanceCtrl', ['$rootScope','$scope',\r
- function ($rootScope, $scope) {\r
- $scope.menuTpl = 'main-menu';\r
- $scope.menuBox = null;\r
- $scope.contentTpl = 'main';\r
- // $scope.selectedTenant = null;\r
- $scope.rendererList = [];\r
- var broadcastObj = {};\r
-\r
- $scope.rendererList.push({'name' : 'of_overlay', 'id' : 0});\r
-\r
- $scope.toggleExpanded = function(expand, menu, tplType){\r
- var type = tplType ? tplType : 'contentTpl';\r
- $scope.menuBox = null;\r
- \r
- $scope[type] = expand;\r
-\r
- if ( menu && menu === false ) {\r
- $scope.menuTpl = !menu ? null : menu;\r
- }\r
- };\r
-\r
- \r
-\r
- $scope.setViewContent = function(tplName, data, broadcast, tplType) {\r
-\r
- if ( $scope[tplType] === tplName ) {\r
- $scope.$broadcast(broadcast, data, true);\r
- } else {\r
-\r
- broadcastObj[tplType] = {};\r
- broadcastObj[tplType].name = broadcast;\r
- broadcastObj[tplType].data = data;\r
-\r
- $scope.toggleExpanded(tplName, null, tplType);\r
- $scope.$apply();\r
-\r
- }\r
- };\r
-\r
- $scope.broadcastCalling = function(tplType){\r
- $scope.$broadcast(broadcastObj[tplType].name, broadcastObj[tplType].data);\r
- };\r
-\r
- $scope.checkBroadcastCalling = function(tplName){\r
- var objClickAction = {\r
- 'epg-detail': function(){\r
- $scope.broadcastCalling('contentTpl');\r
- },\r
- 'subject-detail': function(){\r
- $scope.broadcastCalling('contentTpl');\r
- }\r
- };\r
-\r
- if ( angular.isFunction(objClickAction[tplName]) ) {\r
- objClickAction[tplName]();\r
- }\r
- \r
- };\r
-\r
-\r
- $scope.$on('GOV_INIT', function(){\r
- $scope.menuTpl = 'main-menu';\r
- $scope.contentTpl = 'main';\r
- // $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');\r
- $scope.menuBox = null;\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD', function(e, obj){\r
- $scope.selectedTenant = obj;\r
- });\r
-\r
-\r
- }]);\r
-\r
- gbp.register.controller('boxStaticCtrl',['$scope',\r
- function($scope){\r
-\r
- $scope.selectedObj = null;\r
-\r
- $scope.getLabel = function(id, type){\r
- var objAction = {\r
- providerItems: function(){\r
- var name = $scope.selectedObj[type][id].attributes.objData['name'];\r
- return name ? name + ' : ' + id : id;\r
- },\r
- consumerItems: function(){\r
- var name = $scope.selectedObj[type][id].attributes.objData['name'];\r
- return name ? name + ' : ' + id : id;\r
- }\r
- };\r
-\r
- if ( angular.isFunction(objAction[type]) ) {\r
- return objAction[type]();\r
- }\r
- };\r
-\r
- $scope.$on('SET_SEL_STA_OBJ', function(obj, data, apply){\r
- $scope.selectedObj = data;\r
-\r
- if ( apply ) {\r
- $scope.$apply();\r
- }\r
-\r
- });\r
-\r
- }]);\r
-\r
- gbp.register.controller('graphCtrl', ['$scope', function($scope){\r
- var paper = null,\r
- paperScale = 1;\r
-\r
- $scope.init = function(paperInstance){\r
- paper = paperInstance;\r
- $scope.loadMouseScrollEvent();\r
- };\r
-\r
-\r
- $scope.zoom = function(out){\r
- paperScale = out ? paperScale - 0.1 : paperScale >= 1 ? 1 : paperScale + 0.1;\r
- paper.scale(paperScale, paperScale);\r
- };\r
-\r
- \r
-\r
- $scope.loadMouseScrollEvent = function(){\r
- /*mouse wheel event for zooming*/\r
- var graph = document.getElementById('graph'),\r
- MouseWheelHandler = function(e){\r
- var mouseEvent = window.event || e; // old IE support\r
- var delta = Math.max(-1, Math.min(1, (mouseEvent.wheelDelta || -mouseEvent.detail)));\r
- $scope.zoom(delta === 1 ? false : true);\r
- };\r
-\r
- if (graph.addEventListener) {\r
- // IE9, Chrome, Safari, Opera\r
- graph.addEventListener("mousewheel", MouseWheelHandler, false);\r
- // Firefox\r
- graph.addEventListener("DOMMouseScroll", MouseWheelHandler, false);\r
- }\r
- // IE 6/7/8\r
- else {graph.attachEvent("onmousewheel", MouseWheelHandler);}\r
- /*mouse wheel event for zooming - end*/\r
- };\r
- \r
- }]);\r
-\r
- gbp.register.controller('expressedPolicyCtrl', ['$scope', 'JointGraphFactory', 'JointGraphOffsetFactory', 'GBPConstants',\r
- function ($scope, JointGraphFactory, JointGraphOffsetFactory, GBPConstants) {\r
- var paper = JointGraphFactory.createGraph(),\r
- epgItems = [],\r
- contractItems = [],\r
- linkItems = [];\r
-\r
- var objClickAction = {\r
- epg: function(data){\r
- $scope.setViewContent('epg-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- },\r
- contract: function(data){\r
- $scope.setViewContent('contract-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- }\r
- };\r
-\r
- paper.on('cell:pointerdown', function(cell) { \r
- if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
- objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
- }\r
- });\r
-\r
- var createEpgLinks = function(epg, epgItem, contracts) {\r
- var providers = epg['provider-named-selector'] && epg['provider-named-selector'].length>0 ? epg['provider-named-selector'] : [];\r
- var consumers = epg['consumer-named-selector'] && epg['consumer-named-selector'].length>0 ? epg['consumer-named-selector'] : [];\r
- var consumerLinkItems = [];\r
- var providerLinkItems = [];\r
-\r
- consumers.forEach(function(c) {\r
- c.contract.forEach(function(con) {\r
- consumerLinkItems.push(JointGraphFactory.createLink(contracts[con].id, epgItem.id, 'green'));\r
- });\r
- });\r
-\r
- providers.forEach(function(p) {\r
- p.contract.forEach(function(con) {\r
- providerLinkItems.push(JointGraphFactory.createLink(epgItem.id, contracts[con].id, 'blue'));\r
- });\r
- });\r
-\r
- JointGraphFactory.addItemList(paper.model, providerLinkItems);\r
- JointGraphFactory.addItemList(paper.model, consumerLinkItems);\r
-\r
- };\r
-\r
- var loadData = function() {\r
- if($scope.selectedTenant) {\r
- var offsetObj = {\r
- ow: 100,\r
- oh: 100,\r
- w: 100,\r
- h: 100\r
- },\r
- marginObj = {\r
- w: 50,\r
- h: 80\r
- },\r
- offsetHobj = {\r
- contract: 0,\r
- epg: 0\r
- },\r
- itemsArray = {\r
- contract: [],\r
- epg: []\r
- };\r
-\r
- JointGraphFactory.reloadGraph(paper.model);\r
-\r
- if ( $scope.selectedTenant && $scope.selectedTenant.contract ) {\r
-\r
- $scope.selectedTenant.contract.forEach(function(c, i) {\r
- var label = c.description ? $scope.sliceLabel(c.description) : c.id,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.contract, c, 'Click to see contract info', GBPConstants.colors.graph['subject'], 'Contract');\r
-\r
- itemsArray.contract.push(item);\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- contractItems[c.id] = item;\r
- });\r
-\r
- offsetHobj.contract = offsetObj.h;\r
-\r
- }\r
-\r
- if ( $scope.selectedTenant && $scope.selectedTenant['endpoint-group'] ) {\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h > 400 ? offsetObj.h : 400);\r
- $scope.selectedTenant['endpoint-group'].forEach(function(e, i) {\r
- var label = e.name || e.id,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.epg, e, 'Click to see epg info', GBPConstants.colors.graph['pns'], 'EP group');\r
-\r
- itemsArray.epg.push(item);\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- epgItems[e.id] = item;\r
-\r
- createEpgLinks(e, item, contractItems);\r
- });\r
- \r
- }\r
-\r
- offsetHobj.epg = JointGraphOffsetFactory.getCurrentOffset(itemsArray.contract, 'y');\r
- JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.epg ,offsetHobj.epg, paper);\r
- }\r
-\r
- };\r
-\r
- $scope.getPaperObj = function(){\r
- return paper;\r
- };\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- if ($scope.selectedTenant) {\r
- loadData();\r
- }\r
- else {\r
- JointGraphFactory.reloadGraph(paper.model);\r
- }\r
- });\r
- \r
- loadData();\r
- }]);\r
-\r
- gbp.register.controller('deliveredPolicyCtrl', ['$scope', 'GPBServices', 'JointGraphFactory', 'GBPGovernanceServices', 'JointGraphOffsetFactory', 'GBPConstants',\r
- function ($scope, GPBServices, JointGraphFactory, GBPGovernanceServices, JointGraphOffsetFactory, GBPConstants) {\r
- var paper = JointGraphFactory.createGraph(),\r
- providerItems = {},\r
- consumerItems = {},\r
- subjectItems = {};\r
-\r
- var getEpList = function() {\r
- var providerEpKeys = Object.keys(providerItems),\r
- consumerEpKeys = Object.keys(consumerItems),\r
- epList = providerEpKeys.map(function (k) {\r
- return providerItems[k].attributes.objData;\r
- });\r
-\r
- consumerEpKeys.forEach(function(k) {\r
- if(providerEpKeys.indexOf(k) === -1) {\r
- epList.push(consumerItems[k].attributes.objData);\r
- }\r
- });\r
-\r
- return epList;\r
- };\r
-\r
- var getSubjList = function() {\r
- return Object.keys(subjectItems).map(function (k) {\r
- return subjectItems[k].attributes.objData;\r
- });\r
- };\r
-\r
- var objClickAction = {\r
- subject: function(data){\r
- data.providerItems = providerItems;\r
- data.consumerItems = consumerItems;\r
- $scope.setViewContent('subject-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- },\r
- consumer: function(data) {\r
- $scope.setViewContent('epg-content-static', data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- },\r
- provider: function(data) {\r
- $scope.setViewContent('epg-content-static', data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- }\r
- };\r
-\r
- var objDblClickAction = {\r
- consumer: function(data){\r
- $scope.setBreadcrumb('l3', 'Endpoint group detail', true);\r
- $scope.setViewContent('epg-detail', { ep: data, epList: getEpList() }, 'SET_SELECTED_EPG','contentTpl');\r
- },\r
- provider: function(data){\r
- $scope.setBreadcrumb('l3', 'Endpoint group detail', true);\r
- $scope.setViewContent('epg-detail', { ep: data, epList: getEpList() }, 'SET_SELECTED_EPG','contentTpl');\r
- },\r
- subject: function(data) {\r
- var obj = { subject: data, \r
- subjList: Object.keys(subjectItems).map(function (k) {\r
- return subjectItems[k].attributes.objData;\r
- }),\r
- providerItems: providerItems,\r
- consumerItems: consumerItems\r
- };\r
- $scope.setBreadcrumb('l3', 'Subject detail', true);\r
- $scope.setViewContent('subject-detail', obj, 'SET_SELECTED_SUBJECT','contentTpl');\r
- }\r
- };\r
-\r
- paper.on('cell:pointerdown', function(cell) { \r
- if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
- objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
- }\r
- });\r
-\r
- paper.on('cell:pointerdblclick', function(cell) { \r
- objDblClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
- });\r
-\r
- var createSubjectLinks = function(subject, subjectItem, providerItems, consumerItems) {\r
- var providerLinkItems = subject.providers.map(function(p) {\r
- return JointGraphFactory.createLink(providerItems[p].id, subjectItem.id, 'green');\r
- });\r
- consumerLinkItems = subject.consumers.map(function(c) {\r
- return JointGraphFactory.createLink(subjectItem.id, consumerItems[c].id, 'blue');\r
- });\r
-\r
- JointGraphFactory.addItemList(paper.model, providerLinkItems);\r
- JointGraphFactory.addItemList(paper.model, consumerLinkItems);\r
- };\r
-\r
- var loadData = function() {\r
- if($scope.selectedTenant) {\r
- providerItems = {};\r
- consumerItems = {};\r
- subjectItems = {};\r
-\r
- var classifierInstances = $scope.selectedTenant['subject-feature-instances'] && \r
- $scope.selectedTenant['subject-feature-instances']['classifier-instance'] && \r
- $scope.selectedTenant['subject-feature-instances']['classifier-instance'].length > 0 ? $scope.selectedTenant['subject-feature-instances']['classifier-instance'] : [];\r
-\r
- var offsetObj = {\r
- ow: 100,\r
- oh: 100,\r
- w: 100,\r
- h: 100\r
- },\r
- marginObj = {\r
- w: 50,\r
- h: 80\r
- },\r
- offsetHobj = {\r
- pEpg: 0,\r
- cEpg: 0,\r
- subject: 0\r
- },\r
- itemsArray = {\r
- pEpg: [],\r
- cEpg: [],\r
- subject: []\r
- };\r
-\r
- JointGraphFactory.reloadGraph(paper.model);\r
-\r
- GBPGovernanceServices.getEPGsAndSubjects($scope.selectedTenant.id, classifierInstances, function(data){\r
- data.providers.forEach(function(p, i) {\r
- var relatedObj = GPBServices.getPropFromListByProp($scope.selectedTenant['endpoint-group'], 'id', p.id),\r
- label = relatedObj.name || p.id,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
-\r
- relatedObj.rules = p.rules;\r
- var item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.provider, relatedObj, 'Click to see epg info, doubleclick to see Endpoint group detail', GBPConstants.colors.graph['pns'], 'Provider EPG');\r
-\r
- itemsArray.pEpg.push(item);\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- providerItems[p.id] = item;\r
- });\r
-\r
- offsetHobj.pEpg = offsetObj.h;\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 500);\r
- data.consumers.forEach(function(c, i) {\r
- var relatedObj = GPBServices.getPropFromListByProp($scope.selectedTenant['endpoint-group'], 'id', c.id),\r
- label = relatedObj.name || c.id,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
-\r
- relatedObj.rules = c.rules;\r
- var item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.consumer, relatedObj, 'Click to see epg info, doubleclick to see Endpoint group detail', GBPConstants.colors.graph['cns'], 'Consumer EPG');\r
-\r
- itemsArray.cEpg.push(item);\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- consumerItems[c.id] = item;\r
- });\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetHobj.pEpg > 300 ? offsetHobj.pEpg : 300);\r
- data.subjects.forEach(function(s, i) {\r
- var label = s.name,\r
- width = JointGraphFactory.getLabelLength(label.length),\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.subject, s, 'Click to see subject info, doubleclick to see Subject detail', GBPConstants.colors.graph['subject'], 'Subject');\r
-\r
- itemsArray.subject.push(item);\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- subjectItems[s.name] = item;\r
- createSubjectLinks(s, item, providerItems, consumerItems);\r
- });\r
-\r
- offsetHobj.pEpg = JointGraphOffsetFactory.getCurrentOffset(itemsArray.pEpg, 'y');\r
- JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.subject ,offsetHobj.pEpg, paper);\r
- offsetHobj.subject = JointGraphOffsetFactory.getCurrentOffset(itemsArray.subject, 'y');\r
- JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.cEpg ,offsetHobj.subject, paper);\r
-\r
- }, function(){});\r
-\r
- }\r
-\r
-\r
- // paper.scaleContentToFit();\r
- // paper.fitToContent();\r
- };\r
-\r
- $scope.getPaperObj = function(){\r
- return paper;\r
- };\r
-\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- if ($scope.selectedTenant) {\r
- loadData();\r
- }\r
- else {\r
- JointGraphFactory.reloadGraph(paper.model);\r
- }\r
- });\r
-\r
- loadData();\r
- }]);\r
-\r
- gbp.register.controller('subjectDetailCtrl', ['$scope', 'GPBServices', 'JointGraphFactory', 'GBPGovernanceServices', 'JointGraphOffsetFactory', 'GBPConstants',\r
- function ($scope, GPBServices, JointGraphFactory, GBPGovernanceServices, JointGraphOffsetFactory, GBPConstants) {\r
- $scope.selectedSubject = null;\r
- $scope.subjectList = [];\r
-\r
- var paper = JointGraphFactory.createGraph(),\r
- subjectItem = null,\r
- ruleItems = {},\r
- subjectItems = {};\r
-\r
- var createSubjectLinks = function(subjectItem, ruleItem) {\r
- var linkItem = JointGraphFactory.createLink(subjectItem.id, ruleItem.id, 'blue');\r
- JointGraphFactory.addItem(paper.model, linkItem);\r
- };\r
-\r
- paper.on('cell:pointerdown', function(cell) { \r
- var objClickAction = {\r
- subject: function(data){\r
- $scope.setViewContent('subject-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- },\r
- rule: function(data){\r
- $scope.setViewContent('rule-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- }\r
- };\r
-\r
- // console.log('cell.model.attributes.objType', cell.model.attributes.objType, cell.model.attributes.objData);\r
- if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
- objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
- }\r
- });\r
-\r
- var loadData = function() {\r
- if($scope.selectedSubject) {\r
- subjectItem = null;\r
- ruleItems = {};\r
-\r
- var offsetObj = {\r
- ow: 100,\r
- oh: 100,\r
- w: 100,\r
- h: 100\r
- },\r
- marginObj = {\r
- w: 50,\r
- h: 80\r
- };\r
-\r
- JointGraphFactory.reloadGraph(paper.model);\r
-\r
- var label = $scope.selectedSubject.name || $scope.selectedSubject.id,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
- subjectItem = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.subject, $scope.selectedSubject, 'Click to see subject info', GBPConstants.colors.graph['subject'], 'Subject');\r
-\r
- JointGraphFactory.addItem(paper.model, subjectItem);\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 300);\r
- $scope.selectedSubject.rules.forEach(function(r, i) {\r
- var label = r.name,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.rule, r, 'Click to see rule info', GBPConstants.colors.graph['cns'], 'Rule');\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- ruleItems[r.name] = item;\r
-\r
- createSubjectLinks(subjectItem, item);\r
- });\r
- }\r
- };\r
-\r
- $scope.getPaperObj = function(){\r
- return paper;\r
- };\r
-\r
- $scope.$on('SET_SELECTED_SUBJECT', function(event, data){\r
- $scope.selectedSubject = data.subject;\r
- $scope.subjectList = data.subjList;\r
- loadData();\r
- });\r
-\r
- $scope.setSubject = function(subject) {\r
- $scope.selectedSubject = subject;\r
- loadData();\r
- };\r
-\r
- loadData();\r
- }]);\r
-\r
- gbp.register.controller('epgDetailCtrl', ['$scope', 'JointGraphFactory', 'TopologyDataLoaders', 'GBPEpgServices', 'JointGraphOffsetFactory', 'GBPConstants',\r
- function ($scope, JointGraphFactory, TopologyDataLoaders, GBPEpgServices, JointGraphOffsetFactory, GBPConstants) {\r
- var paper = JointGraphFactory.createGraph(),\r
- epgItem = {},\r
- epItems = {};\r
-\r
- $scope.epgDisplayLabel = ['name', 'id'];\r
- $scope.epgList = [];\r
- $scope.selectedEpg = null;\r
-\r
- $scope.$on('SET_SELECTED_EPG', function(event, epg){\r
- $scope.selectedEpg = epg.ep;\r
- $scope.epgList = epg.epList;\r
- loadData();\r
- });\r
-\r
- $scope.setEpg = function(epg){\r
- selectedEpg = epg;\r
- loadData();\r
- };\r
-\r
- paper.on('cell:pointerdown', function(cell) { \r
- var objClickAction = {\r
- ep: function(data){\r
- $scope.setViewContent('ep-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- },\r
- epg: function(data){\r
- $scope.setViewContent('epg-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');\r
- },\r
- };\r
-\r
- if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {\r
- objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);\r
- }\r
- });\r
-\r
- var loadData = function() {\r
- if($scope.selectedTenant && $scope.selectedEpg) {\r
- epgItem = {};\r
- epItems = {};\r
- links = [];\r
-\r
- JointGraphFactory.reloadGraph(paper.model);\r
-\r
- TopologyDataLoaders.getEndpointsFromEndpointGroup($scope.selectedTenant.id, $scope.selectedEpg.id, function(data){\r
- var offsetObj = {\r
- ow: 100,\r
- oh: 100,\r
- w: 100,\r
- h: 100\r
- },\r
- marginObj = {\r
- w: 50,\r
- h: 80\r
- };\r
-\r
- var label = $scope.selectedEpg.name || $scope.selectedEpg.id,\r
- width = JointGraphFactory.getLabelLength(label.length);\r
- epgItem = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, 'epg', $scope.selectedEpg, 'Click to see epg info', GBPConstants.colors.graph['subject'], 'EPG');\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);\r
- JointGraphFactory.addItem(paper.model, epgItem);\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 500);\r
- if(data && data.output && data.output['ui-endpoint'] && data.output['ui-endpoint'].length){\r
- data.output['ui-endpoint'].forEach(function(ep, i){\r
- var label = ep['mac-address'] + ':' + ep['l2-context'],\r
- width = JointGraphFactory.getLabelLength(label.length);\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, 'ep', ep, 'Click to see ep info', GBPConstants.colors.graph['pns'], 'Endpoint');\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- epItems[label] = item;\r
- links.push(JointGraphFactory.createLink(item.id, epgItem.id, 'green'));\r
- });\r
-\r
- JointGraphFactory.addItemList(paper.model, links);\r
- }\r
- }, function(){});\r
- }\r
- };\r
-\r
- $scope.getPaperObj = function(){\r
- return paper;\r
- };\r
-\r
- // init();\r
- }]);\r
-\r
- gbp.register.controller('policyRendererCtrl', ['$scope', '$http', '$timeout', 'PGNServices', 'TopoServices', 'GBPTenantServices', 'GBPConstants', 'JointGraphFactory','GBPJointGraphBuilder',\r
- function ($scope, $http, $timeout, PGNServices, TopoServices, GBPTenantServices, GBPConstants, JointGraphFactory, GBPJointGraphBuilder) {\r
- \r
- $scope.topologyData = { nodes: [], links: [] };\r
- $scope.topologyType = null;\r
- $scope.topologyArgs = {};\r
- $scope.legend = {};\r
- $scope.showLegend = false;\r
-\r
- var paper = JointGraphFactory.createGraph();\r
-\r
- var reloadShowLegend = function() {\r
- $scope.showLegend = !$.isEmptyObject($scope.legend);\r
- };\r
-\r
- $scope.settingsSigma = {\r
- defaultLabelColor: '#fff',\r
- doubleClickEnabled: false,\r
- labelThreshold: 8\r
- };\r
-\r
- $scope.settingsAtlas = {\r
- adjustSizes: true,\r
- gravity: 0.2\r
- };\r
-\r
- $scope.viewTopo = {\r
- box: false,\r
- button: false\r
- };\r
-\r
- paper.on('cell:pointerdown', function(cellView, evt) {\r
- if (cellView.model.isLink() && cellView.model.attributes.objData) {\r
- $scope.$broadcast('SET_LINK_DATA', cellView.model.attributes.objData);\r
- }\r
- });\r
-\r
- $scope.mandatoryProperties = [];\r
- $scope.loadTopology = function(type, args) {\r
- if ($scope.selectedTenant) {\r
- $scope.topologyType = type;\r
- $scope.topologyArgs = args;\r
- GBPJointGraphBuilder.loadTopology(args, paper, type);\r
- }\r
- };\r
- $scope.toggleExpanded = function(expand, show) {\r
- $scope.setViewExpand('policyRendererView',expand, show, 'l2');\r
-\r
- if($scope.policyRendererView[expand] && $scope.selectedTenant) {\r
- $scope.topologyArgs.tenantId = $scope.selectedTenant.id;\r
-\r
- if((expand === 'epg' || expand === 'contracts' || expand === 'classifiers' || expand === 'actions' || expand === 'renderers') && ($scope.topologyType !== GBPConstants.strings.config)) {\r
- $scope.loadTopology(GBPConstants.strings.config, $scope.topologyArgs);\r
- } else if((expand === 'l2l3' || expand === 'registerEndpoint' || expand === 'registerL3PrefixEndpoint') && ($scope.topologyType !== GBPConstants.strings.l2l3)) {\r
- $scope.loadTopology(GBPConstants.strings.l2l3, $scope.topologyArgs);\r
- }\r
- }\r
- };\r
-\r
- $scope.reloadTopo = function() {\r
- if($scope.selectedTenant) {\r
- $scope.topologyArgs.tenantId = $scope.selectedTenant.id;\r
- GBPJointGraphBuilder.loadTopology($scope.topologyArgs, paper, $scope.topologyType);\r
- }\r
- };\r
-\r
- $scope.getDisplayLabelsFromCtrl = function(eventName, val) {\r
- $scope.$broadcast(eventName, val);\r
- };\r
-\r
- $scope.validateMandatory = function(newObj, mandatoryProps){\r
- var ret = true,\r
- notFilledProps = [];\r
-\r
- mandatoryProps.forEach(function(el){\r
- if(newObj[el] === '' || newObj[el] === null || newObj[el] === undefined){\r
- notFilledProps.push(el);\r
- ret = false;\r
- }\r
- });\r
-\r
- return {'status' : ret, 'notFilledProps' : notFilledProps};\r
- };\r
-\r
- $scope.validate = function(value, errors){\r
- errors.int32 = !(parseInt(value) >= -2147483648 && parseInt(value) <= 2147483647);\r
- };\r
-\r
- \r
-\r
- $scope.validateForm = function(form) {\r
- return form.$valid;\r
- };\r
- \r
- $scope.$on('GBP_TENANT_RELOAD', function(e, obj){\r
- $scope.selectedTenant = obj;\r
- });\r
-\r
- }]);\r
-\r
- gbp.register.controller('linkDataCtrl',['$scope', function($scope){\r
- $scope.showTable = false;\r
-\r
- $scope.show = function(){\r
- $scope.showTable = true;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.showTable = false;\r
- };\r
- \r
- $scope.$on('SET_LINK_DATA', function(e, obj){\r
- $scope.linkData = obj;\r
- $scope.show();\r
- $scope.$apply();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('crudCtrl',['$scope', function($scope){\r
- $scope.selectedObj = null;\r
- $scope.label = '';\r
- $scope.q = {};\r
-\r
- $scope.add = function() {\r
- $scope.selectedObj = null;\r
- $scope.showForm();\r
- };\r
-\r
- $scope.modify = function() {\r
- $scope.$emit('PGN_EDIT_ELEM');\r
- };\r
-\r
- $scope.init = function(label) {\r
- $scope.label = label;\r
- };\r
-\r
-\r
- $scope.$on('EV_SET_SEL_CLASS', function(event, selObj){\r
- $scope.selectedObj = selObj;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('contractCtrl', ['$scope','GBPContractServices', '$filter', function($scope, GBPContractServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedContract = null;\r
- $scope.newContractObj = GBPContractServices.createObj();\r
- $scope.displayLabel = ['description','id'];\r
- $scope.crudLabel = 'Contract list';\r
-\r
- $scope.internalView = {\r
- contract: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
- mandatoryProperties = [],\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.internalView = {\r
- contract: false,\r
- edit: "view"\r
- };\r
- $scope.selectedContract = null;\r
- $scope.newContractObj = GBPContractServices.createObj();\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- $scope.selectedContract = null;\r
- path = GBPContractServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPContractServices.load(path, function(data){\r
- $scope.list = data;\r
- // $scope.$broadcast('GBP_CONTRACT_RELOAD');\r
- $scope.sendReloadEventFromRoot('GBP_CONTRACT_RELOAD');\r
- }, function(){\r
-\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- var resp = $scope.validateMandatory($scope.newContractObj, mandatoryProperties);\r
- if(resp.status){\r
- path = GBPContractServices.createPathObj($scope.selectedTenant.id, $scope.newContractObj.id);\r
- GBPContractServices.send(path, $scope.newContractObj, function(data){\r
- $scope.init();\r
- $scope.internalView.contract = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- alert($filter('translate')('GBP_MANDATORY_NOT_FILLED')+': '+resp.notFilledProps.join(', '));\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if ( $scope.selectedContract ) {\r
- path = GBPContractServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);\r
- GBPContractServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.selectedContract = null;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newContractObj = GBPContractServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedContract = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.contract = true;\r
- }else {\r
- $scope.internalView.contract = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.contract) {\r
- angular.copy(selectedObj, $scope.newContractObj);\r
- }\r
- $scope.sendReloadEventFromRoot('GBP_CONTRACT_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.contract = true;\r
- $scope.selectedContract = null;\r
- $scope.internalView.edit = "add";\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.contract = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if(!event.defaultPrevented) {\r
- if ( $scope.selectedContract ) {\r
- $scope.internalView.contract = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedContract, $scope.newContractObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(event){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_CONTRACTS_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('clauseCtrl', ['$scope','GBPClauseServices', 'GBPSubjectServices', \r
- function($scope, GBPClauseServices, GBPSubjectServices){\r
- $scope.list = [];\r
- $scope.selectedClause = null;\r
- $scope.newClauseObj = GBPClauseServices.createObj();\r
- $scope.internalView = {\r
- clause: false,\r
- edit: "view"\r
- };\r
- $scope.displayLabel = 'name';\r
- $scope.crudLabel = 'Clause list';\r
-\r
- $scope.subjects = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);\r
-\r
- var path = null,\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedClause = null;\r
- $scope.newClauseObj = GBPClauseServices.createObj();\r
- $scope.internalView = {\r
- clause: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- //move to separate ctrl \/\r
- $scope.addNewElem = function(templateObj) {\r
- if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
- var objToPush = templateObj || "";\r
- $scope.newClauseObj['subject-refs'].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
- $scope.newClauseObj['subject-refs'].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.updateAt = function(index, value) {\r
- if($scope.newClauseObj && $scope.newClauseObj['subject-refs'] && $scope.newClauseObj['subject-refs'].length >= index) {\r
- $scope.newClauseObj['subject-refs'][index] = value;\r
- }\r
- };\r
- //move to separate ctrl /\\r
-\r
- var loadSubjects = function() {\r
- $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);\r
-\r
- GBPSubjectServices.load(path, function(data){\r
- $scope.subjects.options = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedContract ) {\r
- path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);\r
- \r
- GBPClauseServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.clauseForm)){\r
- path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.newClauseObj.name);\r
- GBPClauseServices.send(path, $scope.newClauseObj, function(data){\r
- $scope.init();\r
- $scope.internalView.clause = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.clause = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if ( $scope.selectedClause ) {\r
- path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedClause.name);\r
- GBPClauseServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.selectedClause = null;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newClauseObj = GBPClauseServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedClause = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.clause = true;\r
- }else {\r
- $scope.internalView.clause = false;\r
- $scope.internalView.edit = "view";\r
- }\r
- \r
- if($scope.internalView.clause) {\r
- angular.copy(selectedObj, $scope.newClauseObj);\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.clause = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedClause = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.clause = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedClause ) {\r
- $scope.internalView.clause = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedClause, $scope.newClauseObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
- $scope.internalView.clause = false;\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_SUBJECT_RELOAD',function(){\r
- loadSubjects();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('subjectCtrl', ['$scope','GBPSubjectServices', '$filter', function($scope, GBPSubjectServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedSubject = null;\r
- $scope.newSubjectObj = GBPSubjectServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- subject : false,\r
- edit : "view"\r
- };\r
- $scope.crudLabel = 'Subject list';\r
- $scope.errors = {};\r
-\r
- var path = null,\r
- mandatoryProperties = ['order'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedSubject = null;\r
- $scope.newSubjectObj = GBPSubjectServices.createObj();\r
- $scope.internalView = {\r
- subject : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedContract ) {\r
- $scope.selectedSubject = null;\r
- path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);\r
- \r
- GBPSubjectServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.sendReloadEventFromRoot('GBP_SUBJECT_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.subjectForm)){\r
- path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.newSubjectObj.name);\r
- GBPSubjectServices.send(path, $scope.newSubjectObj, function(data){\r
- $scope.init();\r
- $scope.internalView.subject = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if ( $scope.selectedSubject ) {\r
- path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name);\r
- GBPSubjectServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.selectedSubject = null;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newSubjectObj = GBPSubjectServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedSubject = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.subject = true;\r
- }else {\r
- $scope.internalView.subject = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.subject) {\r
- angular.copy(selectedObj, $scope.newSubjectObj);\r
- }\r
- $scope.sendReloadEventFromRoot('GBP_SUBJECT_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.subject = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedSubject = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.subject = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedSubject ) {\r
- $scope.internalView.subject = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedSubject, $scope.newSubjectObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
- $scope.internalView.subject = false;\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_SUBJECTS_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('ruleCtrl', ['$scope','GBPRuleServices', '$filter', function($scope, GBPRuleServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedRule = null;\r
- $scope.newRuleObj = GBPRuleServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- rule : false,\r
- edit : "view"\r
- };\r
- $scope.crudLabel = 'Rule list';\r
- $scope.errors = {};\r
-\r
- var path = null,\r
- mandatoryProperties = ['order'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedRule = null;\r
- $scope.newRuleObj = GBPRuleServices.createObj();\r
- $scope.internalView = {\r
- rule : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedSubject ) {\r
- $scope.selectedRule = null;\r
- path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name);\r
- \r
- GBPRuleServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.rulesForm)){\r
- path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.newRuleObj.name);\r
- GBPRuleServices.send(path, $scope.newRuleObj, function(data){\r
- $scope.init();\r
- $scope.internalView.rule = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if ( $scope.selectedRule ) {\r
- path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);\r
- GBPRuleServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.selectedRule = null;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newRuleObj = GBPRuleServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedRule = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.rule = true;\r
- }else {\r
- $scope.internalView.rule = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.rule) {\r
- angular.copy(selectedObj, $scope.newRuleObj);\r
- }\r
- $scope.$broadcast('GBP_RULE_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.rule = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedRule = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.rule = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedRule ) {\r
- $scope.internalView.rule = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedRule, $scope.newRuleObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_SUBJECT_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('actionRefCtrl', ['$scope','GBPActionRefsServices', 'GBPActionInstanceServices', '$filter', function($scope, GBPActionRefsServices, GBPActionInstanceServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedActionRef = null;\r
- $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- actionRef : false,\r
- edit : "view"\r
- };\r
- $scope.crudLabel = 'Action ref list';\r
- $scope.errors = {};\r
-\r
- $scope.actionInstanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
-\r
- var path = null,\r
- mandatoryProperties = ['order'],\r
-\r
- actionInstanceNamesLoad = function() {\r
- var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);\r
- GBPActionInstanceServices.load(actionInstancePath, function(data){\r
- $scope.actionInstanceNames.options = data;\r
- },function(){\r
- //TODO: error cbk\r
- });\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedActionRef = null;\r
- $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
- $scope.internalView = {\r
- actionRef : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedRule ) {\r
- $scope.selectedActionRef = null;\r
- path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);\r
- \r
- GBPActionRefsServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
-\r
- actionInstanceNamesLoad();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.actionRefForm)){\r
- path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.newActionRefObj.name);\r
- GBPActionRefsServices.send(path, $scope.newActionRefObj, function(data){\r
- $scope.init();\r
- $scope.internalView.actionRef = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if ( $scope.selectedActionRef ) {\r
- path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.selectedActionRef.name);\r
- GBPActionRefsServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.selectedActionRef = null;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedActionRef = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.actionRef = true;\r
- }else {\r
- $scope.internalView.actionRef = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.actionRef) {\r
- angular.copy(selectedObj, $scope.newActionRefObj);\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.actionRef = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedActionRef = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.actionRef = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedActionRef ) {\r
- $scope.internalView.actionRef = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedActionRef, $scope.newActionRefObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_RULE_RELOAD',function(){\r
- $scope.internalView.actionRef = false;\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_ACTION_INSTANCE_RELOAD',function(){\r
- actionInstanceNamesLoad();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('classifierRefCtrl', ['$scope','GBPClassifierRefsServices', 'GBPClassifierInstanceServices', '$filter', function($scope, GBPClassifierRefsServices, GBPClassifierInstanceServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedClassifierRef = null;\r
- $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- classifierRef : false,\r
- edit : "view"\r
- };\r
-\r
- $scope.instanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
-\r
- $scope.formDirections = ['in', 'out', 'bidirectional'];\r
- $scope.formConnectionTracking = ['normal', 'reflexive'];\r
-\r
- $scope.crudLabel = 'Classifier ref list';\r
-\r
- var path = null,\r
-\r
- instanceNamesLoad = function() {\r
- var classifierInstancePath = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id);\r
- GBPClassifierInstanceServices.load(classifierInstancePath, function(data){\r
- $scope.instanceNames.options = data;\r
- },function(){\r
- //TODO: error cbk\r
- });\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedClassifierRef = null;\r
- $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
- $scope.internalView = {\r
- classifierRef : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedRule ) {\r
- $scope.selectedClassifierRef = null;\r
- path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);\r
- \r
-\r
-\r
- GBPClassifierRefsServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
-\r
- instanceNamesLoad();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.classifierRefForm)){\r
- path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.newClassifierRefObj.name);\r
- GBPClassifierRefsServices.send(path, $scope.newClassifierRefObj, function(data){\r
- $scope.init();\r
- $scope.internalView.classifierRef = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if ( $scope.selectedClassifierRef ) {\r
- path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.selectedClassifierRef.name);\r
- GBPClassifierRefsServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.selectedClassifierRef = null;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedClassifierRef = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.classifierRef = true;\r
- }else {\r
- $scope.internalView.classifierRef = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.classifierRef) {\r
- angular.copy(selectedObj, $scope.newClassifierRefObj);\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.classifierRef = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedClassifierRef = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.classifierRef = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedClassifierRef ) {\r
- $scope.internalView.classifierRef = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedClassifierRef, $scope.newClassifierRefObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_RULE_RELOAD',function(){\r
- $scope.internalView.classifierRef = false;\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_CLASSIFIER_INSTANCE_RELOAD',function(){\r
- instanceNamesLoad();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('tenantCtrl', ['$scope', 'GBPTenantServices', '$filter', function($scope, GBPTenantServices, $filter){ \r
- $scope.list = [];\r
- $scope.selectedTenantObj = null;\r
- $scope.newTenantObj = GBPTenantServices.createObj();\r
- $scope.displayLabel = ['name' , 'id'];\r
- $scope.crudLabel = 'Tenants list';\r
-\r
- $scope.view = {\r
- tenant: false,\r
- edit: "view"\r
- };\r
-\r
- $scope.init = function() {\r
- GBPTenantServices.load(\r
- function(data) {\r
- $scope.list = data;\r
- $scope.newTenantObj = GBPTenantServices.createObj();\r
- $scope.selectedTenantObj = null;\r
- },\r
- function(){\r
- //TODO error\r
- });\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.tenantForm)){\r
- path = GBPTenantServices.createPathObj($scope.newTenantObj.id);\r
- GBPTenantServices.send(path, $scope.newTenantObj, function(data){\r
- $scope.init();\r
- $scope.view.tenant = false;\r
- $scope.view.edit = "view";\r
- $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenantObj) {\r
- path = GBPTenantServices.createPathObj($scope.selectedTenantObj.id);\r
-\r
- GBPTenantServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.view.tenant = false;\r
- $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedTenantObj = selectedObj;\r
-\r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.tenant = true;\r
- }\r
- else {\r
- $scope.view.tenant = false;\r
- $scope.view.edit = "view";\r
- }\r
-\r
- if ($scope.view.tenant) {\r
- angular.copy(selectedObj, $scope.newTenantObj);\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newTenantObj = GBPTenantServices.createObj();\r
- $scope.selectedTenantObj = null;\r
- $scope.view.tenant = true;\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.tenant = false;\r
- $scope.view.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedTenantObj ) {\r
- $scope.view.tenant = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedTenantObj, $scope.newTenantObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_GLOBAL_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('epgCtrl',['$scope', 'GBPEpgServices', 'GBPContractServices', '$filter',\r
- function($scope, GBPEpgServices, GBPContractServices, $filter){\r
- $scope.selectedEpg = null;\r
- $scope.newEpgObj = GBPEpgServices.createObj();\r
- $scope.displayLabel = ['name', 'id'];\r
- $scope.crudLabel = 'Group list';\r
-\r
- $scope.igpOpts = ['allow', 'require-contract'];\r
-\r
- $scope.contracts = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contracts);\r
-\r
- $scope.list = [];\r
-\r
- $scope.internalView = {\r
- epg: false,\r
- edit: "view"\r
- };\r
-\r
- var loadContracts = function() {\r
- GBPContractServices.load(path, function(data){\r
- $scope.contracts.options = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- },\r
-\r
- mandatoryProperties = ['name'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedEpg = null;\r
- $scope.newEpgObj = GBPEpgServices.createObj();\r
- $scope.internalView = {\r
- epg: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ($scope.selectedTenant) {\r
- path = GBPEpgServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPEpgServices.load(path, function(data){\r
- $scope.list = data;\r
- // $scope.$broadcast('GBP_EPG_RELOAD');\r
- $scope.sendReloadEventFromRoot('GBP_EPG_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
-\r
- loadContracts();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.epgForm)){\r
- path = GBPEpgServices.createPathObj($scope.selectedTenant.id, $scope.newEpgObj.id);\r
- GBPEpgServices.send(path, $scope.newEpgObj, function(data){\r
- $scope.init();\r
- $scope.internalView.epg = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.edit = "view";\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedEpg) {\r
- path = GBPEpgServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);\r
- GBPEpgServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.internalView.epg = false;\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.internalView.epg = true;\r
- $scope.reloadNewObj();\r
- $scope.selectedEpg = null;\r
- $scope.internalView.edit = "add";\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newEpgObj = GBPEpgServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedEpg = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.epg = true;\r
- }else {\r
- $scope.internalView.epg = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.epg) {\r
- angular.copy(selectedObj, $scope.newEpgObj);\r
- }\r
- $scope.sendReloadEventFromRoot('GBP_EPG_RELOAD');\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.epg = false;\r
- $scope.internalView.edit = "view";\r
- };\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEpg ) {\r
- $scope.internalView.epg = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedEpg, $scope.newEpgObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
- loadContracts();\r
- });\r
-\r
- $scope.$on('GBP_EPG_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('cnsCtrl',['$scope', 'GBPConNamedSelServices', function($scope, GBPConNamedSelServices){\r
- $scope.list = [];\r
- $scope.selectedCNS = null;\r
- $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
- $scope.internalView = {\r
- cns: false,\r
- edit: "view"\r
- };\r
- $scope.displayLabel = 'name';\r
- $scope.crudLabel = 'Consumer named selectors list';\r
-\r
- var clear = function(){\r
- $scope.list = [];\r
- $scope.selectedCNS = null;\r
- $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
- $scope.internalView = {\r
- cns: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- //move to separate ctrl \/\r
- $scope.addNewElem = function(templateObj) {\r
- if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
- var objToPush = templateObj || "";\r
- $scope.newCNSObj.contract.push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
- $scope.newCNSObj.contract.splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.updateAt = function(index, value) {\r
- if($scope.newCNSObj && $scope.newCNSObj.contract && $scope.newCNSObj.contract.length >= index) {\r
- $scope.newCNSObj.contract[index] = value;\r
- }\r
- };\r
- //move to separate ctrl /\\r
-\r
- $scope.init = function() {\r
- if ($scope.selectedTenant && $scope.selectedEpg) {\r
- path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);\r
-\r
- GBPConNamedSelServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.cnsForm)){\r
- path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.newCNSObj.name);\r
- GBPConNamedSelServices.send(path, $scope.newCNSObj, function(data){\r
- $scope.init();\r
- $scope.internalView.cns = false;\r
- $scope.internalView.cns = "view";\r
- $scope.reloadNewObj();\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedEpg && $scope.selectedCNS) {\r
- path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.selectedCNS.name);\r
- GBPConNamedSelServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.selectedCNS = null;\r
- $scope.internalView.cns = true;\r
- $scope.internalView.edit = "add";\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedCNS = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.cns = true;\r
- }else {\r
- $scope.internalView.cns = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- if($scope.internalView.cns) {\r
- angular.copy(selectedObj, $scope.newCNSObj);\r
- }\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.cns = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEpg ) {\r
- $scope.internalView.cns = true;\r
- $scope.internalView.edit = "add";\r
- angular.copy($scope.selectedCNS, $scope.newCNSObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_EPG_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('pnsCtrl',['$scope', 'GBPProNamedSelServices', function($scope, GBPProNamedSelServices){\r
- $scope.list = [];\r
- $scope.selectedPNS = null;\r
- $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.crudLabel = 'Provider named selectors list';\r
- $scope.internalView = {\r
- pns: false,\r
- edit: "view"\r
- };\r
-\r
- var clear = function(){\r
- $scope.list = [];\r
- $scope.selectedPNS = null;\r
- $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
- $scope.internalView = {\r
- pns: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- //move to separate ctrl \/\r
- $scope.addNewElem = function(templateObj) {\r
- if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
- var objToPush = templateObj || "";\r
- $scope.newPNSObj.contract.push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
- $scope.newPNSObj.contract.splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.updateAt = function(index, value) {\r
- if($scope.newPNSObj && $scope.newPNSObj.contract && $scope.newPNSObj.contract.length >= index) {\r
- $scope.newPNSObj.contract[index] = value;\r
- }\r
- };\r
- //move to separate ctrl /\\r
-\r
- $scope.init = function() {\r
- if ($scope.selectedTenant && $scope.selectedEpg) {\r
- path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);\r
- \r
- GBPProNamedSelServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.pnsForm)){\r
- path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.newPNSObj.name);\r
- GBPProNamedSelServices.send(path, $scope.newPNSObj, function(data){\r
- $scope.init();\r
- $scope.internalView.pns = false;\r
- $scope.reloadNewObj();\r
- $scope.internalView.cns = "view";\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedEpg && $scope.selectedPNS) {\r
- path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.selectedPNS.name);\r
- GBPProNamedSelServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.pns = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedPNS = null;\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedPNS = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.pns = true;\r
- }else {\r
- $scope.internalView.pns = false;\r
- $scope.internalView.edit = "view";\r
- }\r
- \r
- if($scope.internalView.pns) {\r
- angular.copy(selectedObj, $scope.newPNSObj);\r
- }\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.pns = false;\r
- $scope.internalView.edit = "view";\r
- };\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEpg ) {\r
- $scope.internalView.pns = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedPNS, $scope.newPNSObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_EPG_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('l2FloodCtrl', ['$scope', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', '$filter', function($scope, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, $filter){ \r
- $scope.list = [];\r
- $scope.selectedL2Flood = null;\r
- $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
- $scope.displayLabel = ['name', 'id'];\r
- $scope.crudLabel = 'L2 Flood Domain list';\r
-\r
- $scope.l2bridge = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L2BRIDGE_LABEL', $scope.l2bridge);\r
-\r
- $scope.view = {\r
- l2flood: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
-\r
- loadL2BridgeList = function() {\r
- GBPL2BridgeDomainServices.load(GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id), function(data){\r
- $scope.l2bridge.options = data;\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedL2Flood = null;\r
- $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
- $scope.view = {\r
- l2flood: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPL2FloodDomainServices.load(path, function(data){\r
- $scope.list = data;\r
- // clear objects\r
- $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
- $scope.selectedL2Flood = null;\r
- }, function(){\r
-\r
- });\r
-\r
- loadL2BridgeList();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.l2FloodForm)){\r
- path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id, $scope.newL2FloodObj.id);\r
- GBPL2FloodDomainServices.send(path, $scope.newL2FloodObj, function(data){\r
- $scope.init();\r
- $scope.view.l2flood = false;\r
- $scope.view.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedL2Flood) {\r
- path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id, $scope.selectedL2Flood.id);\r
- GBPL2FloodDomainServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.view.l2flood = false;\r
- $scope.view.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedL2Flood = selectedObj;\r
-\r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.l2flood = true;\r
- }\r
- else {\r
- $scope.view.l2flood = false;\r
- $scope.view.edit = "view";\r
- }\r
-\r
- if ($scope.view.l2flood) {\r
- angular.copy(selectedObj, $scope.newL2FloodObj);\r
- }\r
-\r
- $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();\r
- $scope.selectedL2Flood = null;\r
- $scope.view.l2flood = true;\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.l2flood = false;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedL2Flood ) {\r
- $scope.view.l2flood = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedL2Flood, $scope.newL2FloodObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
- loadL2BridgeList();\r
- });\r
-\r
- $scope.$on('GBP_L2FLOOD_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('l2BridgeCtrl', ['$scope', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', '$filter', function($scope, GBPL2BridgeDomainServices, GBPL3ContextServices, $filter){ \r
- $scope.list = [];\r
- $scope.selectedL2Bridge = null;\r
- $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
- $scope.displayLabel = ['name', 'id'];\r
- $scope.crudLabel = 'L2 Bridge Domain list';\r
-\r
- $scope.l3context = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);\r
-\r
- $scope.view = {\r
- l2bridge: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
-\r
- loadL3ContextList = function() {\r
- GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){\r
- $scope.l3context.options = data;\r
- //$scope.$broadcast('GBP_L2BRIDGE_RELOAD');\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedL2Bridge = null;\r
- $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
- $scope.view = {\r
- l2bridge: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPL2BridgeDomainServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
- $scope.selectedL2Bridge = null;\r
- // $scope.$broadcast('GBP_L2BRIDGE_RELOAD');\r
- }, function(){\r
-\r
- });\r
-\r
- loadL3ContextList();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
-\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.l2BridgeForm)){\r
- path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id, $scope.newL2BridgeObj.id);\r
- GBPL2BridgeDomainServices.send(path, $scope.newL2BridgeObj, function(data){\r
- $scope.init();\r
- $scope.view.l2bridge = false;\r
- $scope.view.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedL2Bridge) {\r
- path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id, $scope.selectedL2Bridge.id);\r
- GBPL2BridgeDomainServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.view.l2bridge = false;\r
- $scope.view.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedL2Bridge = selectedObj;\r
-\r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.l2bridge = true;\r
- }\r
- else {\r
- $scope.view.l2bridge = false;\r
- $scope.view.edit = "view";\r
- }\r
-\r
- if ($scope.view.l2bridge) {\r
- angular.copy(selectedObj, $scope.newL2BridgeObj);\r
- }\r
-\r
- $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();\r
- $scope.selectedL2Bridge = null;\r
- $scope.view.l2bridge = true;\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.l2bridge = false;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedL2Bridge ) {\r
- $scope.view.l2bridge = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedL2Bridge, $scope.newL2BridgeObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
- loadL3ContextList();\r
- });\r
-\r
- $scope.$on('GBP_L2BRIDGE_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('l3ContextCtrl', ['$scope', 'GBPL3ContextServices', '$filter', function($scope, GBPL3ContextServices, $filter){ //GBPContractServices\r
- $scope.list = [];\r
- $scope.selectedL3Context = null;\r
- $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
- $scope.displayLabel = ['name', 'id'];\r
- $scope.crudLabel = 'L3 Context list';\r
-\r
- $scope.view = {\r
- l3context: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.view = {\r
- l3context: false,\r
- edit: "view"\r
- };\r
- $scope.selectedL3Context = null;\r
- $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPL3ContextServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
- $scope.selectedL3Context = null;\r
- }, function(){\r
-\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.l3ContextForm)){\r
- path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id, $scope.newL3ContextObj.id);\r
- GBPL3ContextServices.send(path, $scope.newL3ContextObj, function(data){\r
- $scope.init();\r
- $scope.view.l3context = false;\r
- $scope.view.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedL3Context) {\r
- path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id, $scope.selectedL3Context.id);\r
- GBPL3ContextServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.view.l3context = false;\r
- $scope.view.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedL3Context = selectedObj;\r
- \r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.l3context = true;\r
- }\r
- else {\r
- $scope.view.l3context = false;\r
- $scope.view.edit = "view";\r
- }\r
-\r
- if($scope.view.l3context) {\r
- angular.copy(selectedObj, $scope.newL3ContextObj);\r
- }\r
-\r
- $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newL3ContextObj = GBPL3ContextServices.createObj();\r
- $scope.selectedL3Context = null;\r
- $scope.view.l3context = true;\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.l3context = false;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedL3Context ) {\r
- $scope.view.l3context = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedL3Context, $scope.newL3ContextObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_L3CONTEXT_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('subnetCtrl', ['$scope', 'GBPSubnetServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', '$filter', function($scope, GBPSubnetServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, GBPL3ContextServices, $filter){ \r
- $scope.list = [];\r
- $scope.selectedSubnet = null;\r
- $scope.newSubnetObj = GBPSubnetServices.createObj();\r
- $scope.displayLabel = ['name', 'id'];\r
- $scope.crudLabel = 'Subnet list';\r
-\r
- $scope.l2L3List = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2L3List);\r
-\r
- $scope.view = {\r
- subnet: false,\r
- edit: "view"\r
- };\r
-\r
-\r
- var path = null,\r
-\r
- loadL2L3List = function() {\r
- $scope.l2L3List.options = [];\r
-\r
- GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(l3ContextData){\r
- $scope.l2L3List.options = $scope.l2L3List.options.concat(l3ContextData);\r
- }, function(){\r
-\r
- });\r
-\r
- GBPL2FloodDomainServices.load(GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id), function(l2FloodData){\r
- $scope.l2L3List.options = $scope.l2L3List.options.concat(l2FloodData);\r
- }, function(){\r
-\r
- });\r
-\r
- GBPL2BridgeDomainServices.load(GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id), function(l2BridgeData){\r
- $scope.l2L3List.options = $scope.l2L3List.options.concat(l2BridgeData);\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.view = {\r
- subnet: false,\r
- edit: "view"\r
- };\r
- $scope.selectedSubnet = null;\r
- $scope.newSubnetObj = GBPSubnetServices.createObj();\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- path = GBPSubnetServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPSubnetServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.newSubnetObj = GBPSubnetServices.createObj();\r
- $scope.selectedSubnet = null;\r
-\r
- $scope.view.subnet = false;\r
- $scope.view.edit = "view";\r
- //$scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');\r
- }, function(){\r
-\r
- });\r
-\r
- loadL2L3List();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.subnetForm)){\r
- path = GBPSubnetServices.createPathObj($scope.selectedTenant.id, $scope.newSubnetObj.id);\r
- GBPSubnetServices.send(path, $scope.newSubnetObj, function(data){\r
- $scope.init();\r
- $scope.view.subnet = false;\r
- $scope.view.edit = "view";\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedSubnet) {\r
- path = GBPSubnetServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id);\r
- GBPSubnetServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.view.subnet = false;\r
- $scope.view.edit = "view";\r
-\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedSubnet = selectedObj;\r
- \r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.subnet = true;\r
- }\r
- else {\r
- $scope.view.subnet = false;\r
- $scope.view.edit = "view";\r
- }\r
-\r
- if($scope.view.subnet) {\r
- angular.copy(selectedObj, $scope.newSubnetObj);\r
- }\r
-\r
- $scope.sendReloadEventFromRoot('GBP_SUBNET_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newSubnetObj = GBPSubnetServices.createObj();\r
- $scope.selectedSubnet = null;\r
- $scope.view.subnet = true;\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.subnet = false;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedSubnet ) {\r
- $scope.view.subnet = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedSubnet, $scope.newSubnetObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_GATEWAY_RELOAD',function(){\r
- $scope.init();\r
- });\r
- \r
- $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
- loadL2L3List();\r
- });\r
-\r
- $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
- loadL2L3List();\r
- });\r
-\r
- $scope.$on('GBP_L2FLOOD_RELOAD',function(){\r
- loadL2L3List();\r
- });\r
-\r
- $scope.$on('GBP_PREFIX_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('gatewayCtrl', ['$scope', 'GBPGatewayServices', function($scope, GBPGatewayServices){ \r
- $scope.list = [];\r
- $scope.gatewayView = false;\r
- $scope.selectedGateway = null;\r
- $scope.newGatewayObj = GBPGatewayServices.createObj();\r
- $scope.displayLabel = 'gateway';\r
- $scope.crudLabel = 'Gateway list';\r
- $scope.internalView = {\r
- gateway: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.gatewayView = false;\r
- $scope.selectedGateway = null;\r
- $scope.newGatewayObj = GBPGatewayServices.createObj();\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant && $scope.selectedSubnet ) {\r
- path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id);\r
- \r
- GBPGatewayServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.newGatewayObj = GBPGatewayServices.createObj();\r
- $scope.internalView.gateway = false;\r
- $scope.selectedGateway = null;\r
- }, function(){\r
-\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.gatewayForm)){\r
- path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.newGatewayObj.gateway);\r
- GBPGatewayServices.send(path, $scope.newGatewayObj, function(data){\r
- $scope.init();\r
- $scope.internalView.gateway = false;\r
- $scope.internalView.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_GATEWAY_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedSubnet && $scope.selectedGateway) {\r
- path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway);\r
- GBPGatewayServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.internalView.gateway = false;\r
- $scope.sendReloadEventFromRoot('GBP_GATEWAY_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedGateway = selectedObj;\r
- angular.copy(selectedObj, $scope.newGatewayObj);\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.gateway = true;\r
- }else {\r
- $scope.internalView.gateway = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- $scope.sendReloadEventFromRoot('GBP_GATEWAY_SET');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newGatewayObj = GBPGatewayServices.createObj();\r
- $scope.internalView.gateway = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedGateway = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.gateway = false;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedGateway ) {\r
- $scope.internalView.gateway = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedGateway, $scope.newGatewayObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_SUBNET_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_PREFIX_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('prefixCtrl', ['$scope', 'GBPPrefixServices', function($scope, GBPPrefixServices){ \r
- $scope.list = [];\r
- $scope.selectedPrefix = null;\r
- $scope.newPrefixObj = GBPPrefixServices.createObj();\r
- $scope.displayLabel = 'prefix';\r
- $scope.crudLabel = 'Prefix list';\r
- $scope.internalView = {\r
- prefix: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedPrefix = null;\r
- $scope.newPrefixObj = GBPPrefixServices.createObj();\r
- $scope.internalView = {\r
- prefix: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant && $scope.selectedSubnet && $scope.selectedGateway) {\r
- path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway);\r
- \r
- GBPPrefixServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.newPrefixObj = GBPPrefixServices.createObj();\r
- $scope.internalView.prefix = false;\r
- $scope.selectedPrefix = null;\r
- }, function(){\r
-\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.prefixForm)){\r
- path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway, $scope.newPrefixObj.prefix);\r
- GBPPrefixServices.send(path, $scope.newPrefixObj, function(data){\r
- $scope.init();\r
- $scope.internalView.prefix = false;\r
- $scope.internalView.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_PREFIX_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway, $scope.selectedPrefix.prefix);\r
- GBPPrefixServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.internalView.prefix = false;\r
- $scope.sendReloadEventFromRoot('GBP_PREFIX_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedPrefix = selectedObj;\r
- $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";\r
- if(selectedObj){\r
- $scope.internalView.prefix = true;\r
- }else {\r
- $scope.internalView.prefix = false;\r
- $scope.internalView.edit = "view";\r
- }\r
-\r
- angular.copy(selectedObj, $scope.newPrefixObj);\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newPrefixObj = GBPPrefixServices.createObj();\r
- $scope.internalView.prefix = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedPrefix = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.prefix = false;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedPrefix ) {\r
- $scope.internalView.prefix = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedPrefix, $scope.newPrefixObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_GATEWAY_SET',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('renderersCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){ //GBPContractServices\r
- $scope.classifierDefinitions = {'options' : [], 'labels' : null};\r
- $scope.actionDefinitions = {'options' : [], 'labels' : null};\r
-\r
- //reload on event?\r
-\r
- var loadDefinitions = function() {\r
- GPBServices.getDefinitions(function(classifierDefs, actionDefs) {\r
- $scope.classifierDefinitions.options = classifierDefs;\r
- $scope.getDisplayLabelsFromCtrl('GBP_CLASSIFIERS_LABEL', $scope.classifierDefinitions);\r
-\r
- $scope.actionDefinitions.options = actionDefs;\r
- $scope.getDisplayLabelsFromCtrl('GBP_ACTIONS_LABEL', $scope.actionDefinitions);\r
- });\r
- };\r
-\r
- loadDefinitions();\r
- }]);\r
-\r
- gbp.register.controller('paramCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){\r
- $scope.value = null;\r
-\r
- $scope.init = function(param, paramValues) {\r
- $scope.parameter = param;\r
-\r
- if(paramValues) {\r
- paramValues.forEach(function(p) {\r
- if($scope.parameter.name === p.name) {\r
- $scope.value = GPBServices.getInstanceParamValue(p);\r
- }\r
- });\r
- }\r
- };\r
-\r
- $scope.$on('GBP_SAVE_PARAM', function(event){\r
- if($scope.value !== '' && $scope.value !== null) {\r
- $scope.addParam($scope.parameter.name, $scope.parameter.type, $scope.value);\r
- }\r
- });\r
-\r
- $scope.$on('GBP_SET_PARAM_VALUE', function(event, name, intVal, strVal) {\r
- //console.info($scope.parameter, ' got GBP_SET_PARAM_VALUE', name, intVal, strVal, event);\r
- \r
- });\r
-\r
- $scope.$on('GBP_RESET_PARAM', function(event){\r
- $scope.value = null;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('classifiersCtrl', ['$scope', 'GBPClassifierInstanceServices', 'GPBServices', '$filter',\r
- function($scope, GBPClassifierInstanceServices, GPBServices, $filter){\r
- $scope.list = [];\r
- $scope.classifiersView = false;\r
- $scope.displayLabel = 'name';\r
- $scope.selectedClassifier = null;\r
- $scope.crudLabel = 'Classifiers';\r
- $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();\r
- $scope.edit = "view";\r
-\r
- var mandatoryProperties = ['name'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.classifiersView = false;\r
- $scope.selectedClassifier = null;\r
- $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();\r
- $scope.edit = "view";\r
- };\r
-\r
- $scope.getDefinitionObjParams = function(id){\r
- return GPBServices.getDefinitionObjParams($scope.classifierDefinitions.options, id);\r
- };\r
-\r
- $scope.reloadDefs = function(){\r
- $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newClassifierObj['classifier-definition-id']));\r
- };\r
-\r
- $scope.addParam = function(name, type, value) {\r
- $scope.newClassifierObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));\r
- };\r
-\r
- var saveParams = function() {\r
- $scope.newClassifierObj['parameter-value'] = [];\r
- $scope.$broadcast('GBP_SAVE_PARAM');\r
- };\r
-\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id);\r
- GBPClassifierInstanceServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.reloadDefs();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.classifierForm)){\r
- path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id, $scope.newClassifierObj.name);\r
- saveParams();\r
- GBPClassifierInstanceServices.send(path, $scope.newClassifierObj, function(data){\r
- $scope.init();\r
- $scope.classifiersView = false;\r
- $scope.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();\r
- $scope.selectedClassifier = null;\r
- $scope.classifiersView = true;\r
- $scope.edit = "add";\r
- $scope.reloadDefs();\r
- };\r
-\r
- $scope.reload = function(selectedObj){\r
- $scope.selectedClassifier = selectedObj;\r
- $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');\r
-\r
- $scope.edit = $scope.edit == "edit" ? $scope.edit : "view";\r
- if(selectedObj){\r
- $scope.classifiersView = true;\r
- }\r
- else {\r
- $scope.classifiersView = false;\r
- $scope.edit = "view";\r
- }\r
-\r
- if($scope.classifiersView) {\r
- angular.copy(selectedObj, $scope.newClassifierObj);\r
- }\r
-\r
- $scope.reloadDefs();\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.classifiersView = false;\r
- $scope.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedClassifier ) {\r
- $scope.classifiersView = true;\r
- angular.copy($scope.selectedClassifier, $scope.newClassifierObj);\r
- $scope.edit = "edit";\r
- $scope.reloadDefs();\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.delete = function(){\r
- path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id, $scope.selectedClassifier.name);\r
- GBPClassifierInstanceServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.classifiersView = false;\r
- $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- };\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_CLASSIFIERS_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('actionsCtrl', ['$scope', 'GBPActionInstanceServices', 'GPBServices', '$filter',\r
- function($scope, GBPActionInstanceServices, GPBServices, $filter){\r
- $scope.list = [];\r
- $scope.actionsView = false;\r
- $scope.displayLabel = 'name';\r
- $scope.selectedAction = null;\r
- $scope.crudLabel = 'Actions';\r
- $scope.newActionObj = GBPActionInstanceServices.createObj();\r
- $scope.edit = "view";\r
-\r
- var mandatoryProperties = ['name'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.actionsView = false;\r
- $scope.selectedAction = null;\r
- $scope.newActionObj = GBPActionInstanceServices.createObj();\r
- $scope.edit = "view";\r
- };\r
-\r
- $scope.getDefinitionObjParams = function(id){\r
- return GPBServices.getDefinitionObjParams($scope.actionDefinitions.options, id);\r
- };\r
-\r
- $scope.reloadDefs = function(){\r
- $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newActionObj['action-definition-id']));\r
- };\r
-\r
- $scope.addParam = function(name, type, value) {\r
- $scope.newActionObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));\r
- };\r
-\r
- var saveParams = function() {\r
- $scope.newActionObj['parameter-value'] = [];\r
- $scope.$broadcast('GBP_SAVE_PARAM');\r
- };\r
-\r
-\r
- $scope.init = function() {\r
- if ( $scope.selectedTenant ) {\r
- path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);\r
- GBPActionInstanceServices.load(path, function(data){\r
- $scope.list = data;\r
- $scope.reloadDefs();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.actionsForm)){\r
- path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id, $scope.newActionObj.name);\r
- saveParams();\r
-\r
- GBPActionInstanceServices.send(path, $scope.newActionObj, function(data){\r
- $scope.init();\r
- $scope.actionsView = false;\r
- $scope.edit = "view";\r
- $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.newActionObj = GBPActionInstanceServices.createObj();\r
- $scope.selectedAction = null;\r
- $scope.actionsView = true;\r
- $scope.edit = "add";\r
- $scope.reloadDefs();\r
- };\r
-\r
- $scope.reload = function(selectedObj){\r
- $scope.selectedAction = selectedObj;\r
- $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
-\r
- $scope.edit = $scope.edit == "edit" ? $scope.edit : "view";\r
- if(selectedObj){\r
- $scope.actionsView = true;\r
- }\r
- else {\r
- $scope.actionsView = false;\r
- $scope.edit = "view";\r
- }\r
-\r
- if($scope.actionsView) {\r
- angular.copy(selectedObj, $scope.newActionObj);\r
- }\r
-\r
- $scope.reloadDefs();\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.actionsView = false;\r
- $scope.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedAction ) {\r
- $scope.actionsView = true;\r
- angular.copy($scope.selectedAction, $scope.newActionObj);\r
- $scope.edit = "edit";\r
- $scope.reloadDefs();\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.delete = function(){\r
- path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id, $scope.selectedAction.name);\r
- GBPActionInstanceServices.delete(path, function(data){\r
- $scope.init();\r
- $scope.actionsView = false;\r
- $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- };\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_ACTIONS_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
- }]);\r
-\r
- gbp.register.controller('endpointCtrl', ['$scope', 'GBPEndpointServices', 'GPBServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', 'GBPEpgServices', '$filter', 'GBPSubnetServices',\r
- function($scope, GBPEndpointServices, GPBServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, GBPL3ContextServices, GBPEpgServices, $filter, GBPSubnetServices){\r
- $scope.list = [];\r
- $scope.selectedEndpoint = null;\r
- $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
- $scope.displayLabel = function(obj) {\r
- return obj['mac-address'] + ':' + obj['l2-context'];\r
- };\r
- $scope.crudLabel = 'Endpoint list';\r
-\r
- $scope.l2context = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2context);\r
-\r
- $scope.l3context = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);\r
-\r
- $scope.subnet = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_SUBNET_LABEL', $scope.subnet);\r
-\r
- $scope.epg = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_EPG_LABEL', $scope.epg);\r
-\r
- $scope.networkContainment = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.networkContainment);\r
-\r
- $scope.view = {\r
- endpoint: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
- mandatoryProperties = [],\r
-\r
- loadEpgOptions = function() {\r
- $scope.epg.options = [];\r
-\r
- path = GBPEpgServices.createPathObj($scope.selectedTenant.id);\r
- GBPEpgServices.load(path, function(data){\r
- $scope.epg.options = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- },\r
-\r
- loadL2ContextOptions = function() {\r
- removeL2ContextOptions($scope.networkContainment.options, $scope.l2context.options);\r
- $scope.l2context.options = [];\r
-\r
- path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPL2FloodDomainServices.load(path, function(data){\r
- $scope.l2context.options = $scope.l2context.options.concat(data);\r
- $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
- }, function(){\r
-\r
- });\r
-\r
- path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);\r
- GBPL2BridgeDomainServices.load(path, function(data){\r
- $scope.l2context.options = $scope.l2context.options.concat(data);\r
- $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- loadL3ContextOptions = function(){\r
- removeL2ContextOptions($scope.networkContainment.options, $scope.l3context.options);\r
- $scope.l3context.options = [];\r
-\r
- GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){\r
- $scope.l3context.options = data;\r
- $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- loadSubnetOptions = function(){\r
- $scope.subnet.options = [];\r
-\r
- GBPSubnetServices.load(GBPSubnetServices.createPathObj($scope.selectedTenant.id), function(data){\r
- $scope.subnet.options = data;\r
- $scope.networkContainment.options = $scope.networkContainment.options.concat(data);\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- loadNetworkCotnaninemnt = function(){\r
- $scope.networkContainment.options = [];\r
-\r
- loadL2ContextOptions();\r
- loadL3ContextOptions();\r
- loadSubnetOptions();\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedEndpoint = null;\r
- $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
- $scope.view = {\r
- endpoint: false,\r
- edit: "view"\r
- };\r
- },\r
- removeL2ContextOptions = function(arr1, arr2) {\r
- arr1 = arr1.filter( function( el ) {\r
- return arr2.indexOf( el ) < 0;\r
- });\r
- };\r
- \r
- $scope.init = function() {\r
- if ($scope.selectedTenant) {\r
-\r
- GBPEndpointServices.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
-\r
- loadEpgOptions();\r
- /*loadL2ContextOptions();\r
- loadL3ContextOptions();\r
- loadSubnetOptions();*/\r
- loadNetworkCotnaninemnt();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.addNewL3address = function() {\r
- if($scope.newEndpointObj) {\r
- if(!$scope.newEndpointObj['l3-address']){\r
- $scope.newEndpointObj['l3-address'] = [];\r
- }\r
- var objToPush = {'l3-context' : '', 'ip-address' : ''};\r
- $scope.newEndpointObj['l3-address'].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteNewL3address = function(index){\r
- if($scope.newEndpointObj) {\r
- $scope.newEndpointObj['l3-address'].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.addNewLeafListEl = function(prop) {\r
- if($scope.newEndpointObj) {\r
- if(!$scope.newEndpointObj[prop]){\r
- $scope.newEndpointObj[prop] = [];\r
- }\r
- var objToPush = "";\r
- $scope.newEndpointObj[prop].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.updateLeafListEl = function(index, value, prop) {\r
- if($scope.newEndpointObj && $scope.newEndpointObj[prop] && $scope.newEndpointObj[prop].length >= index) {\r
- $scope.newEndpointObj[prop][index] = value;\r
- }\r
- };\r
-\r
- $scope.deleteNewLeafListEl = function(index, prop){\r
- if($scope.newEndpointObj) {\r
- $scope.newEndpointObj[prop].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.endpointForm)){\r
- GBPEndpointServices.send(path, $scope.newEndpointObj, function(data){\r
- $scope.init();\r
- $scope.view.endpoint = false;\r
- $scope.reloadNewObj();\r
- $scope.view.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedEndpoint) {\r
- GBPEndpointServices.delete(path, $scope.selectedEndpoint, function(data){\r
- $scope.init();\r
- $scope.view.endpoint = false;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.view.endpoint = true;\r
- $scope.reloadNewObj();\r
- $scope.selectedEndpoint = null;\r
-\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedEndpoint = selectedObj;\r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.endpoint = true;\r
- }\r
- else {\r
- $scope.view.endpoint = false;\r
- $scope.view.edit = "view";\r
- }\r
-\r
- if($scope.view.endpoint) {\r
- angular.copy(selectedObj, $scope.newEndpointObj);\r
- }\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.endpoint = false;\r
- $scope.view.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEndpoint ) {\r
- $scope.view.endpoint = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedEndpoint, $scope.newEndpointObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_EPG_RELOAD',function(){\r
- loadEpgOptions();\r
- });\r
-\r
- $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
- //loadL2ContextOptions();\r
- loadNetworkCotnaninemnt();\r
- });\r
-\r
- $scope.$on('GBP_L2FLOOD_RELOAD',function(){\r
- //loadL2ContextOptions();\r
- loadNetworkCotnaninemnt();\r
- });\r
-\r
- $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
- //loadL3ContextOptions();\r
- loadNetworkCotnaninemnt();\r
- });\r
-\r
- $scope.$on('GBP_SUBNET_RELOAD',function(){\r
- //loadSubnetOptions();\r
- loadNetworkCotnaninemnt();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('l3EndpointCtrl', ['$scope', 'GBPEndpointL3Services', 'GPBServices', 'GBPEpgServices', 'GBPL3ContextServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', '$filter',\r
- function($scope, GBPEndpointL3Services, GPBServices, GBPEpgServices, GBPL3ContextServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedEndpoint = null;\r
- $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
- $scope.displayLabel = function(obj) {\r
- return obj['ip-prefix'] + ':' + obj['l3-context'];\r
- };\r
- $scope.crudLabel = 'L3 Prefix endpoint list';\r
-\r
- $scope.l2context = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2context);\r
-\r
- $scope.l3context = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);\r
-\r
- $scope.epg = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_EPG_LABEL', $scope.epg);\r
-\r
- $scope.view = {\r
- endpoint: false,\r
- edit: "view"\r
- };\r
-\r
- var path = null,\r
- mandatoryProperties = [],\r
-\r
- loadEpgOptions = function() {\r
- $scope.epg.options = [];\r
-\r
- path = GBPEpgServices.createPathObj($scope.selectedTenant.id);\r
- GBPEpgServices.load(path, function(data){\r
- $scope.epg.options = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- },\r
-\r
- loadL2ContextOptions = function() {\r
- $scope.l2context.options = [];\r
-\r
- path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);\r
- \r
- GBPL2FloodDomainServices.load(path, function(data){\r
- $scope.l2context.options = $scope.l2context.options.concat(data);\r
- }, function(){\r
-\r
- });\r
-\r
- path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);\r
- GBPL2BridgeDomainServices.load(path, function(data){\r
- $scope.l2context.options = $scope.l2context.options.concat(data);\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- loadL3ContextOptions = function(){\r
- $scope.l3context.options = [];\r
-\r
- GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){\r
- $scope.l3context.options = data;\r
- }, function(){\r
-\r
- });\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedEndpoint = null;\r
- $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
- $scope.view = {\r
- endpoint: false,\r
- edit: "view"\r
- };\r
- };\r
- \r
- $scope.init = function() {\r
- if ($scope.selectedTenant) {\r
-\r
- GBPEndpointL3Services.load(path, function(data){\r
- $scope.list = data;\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
-\r
- loadEpgOptions();\r
- loadL2ContextOptions();\r
- loadL3ContextOptions();\r
- }else{\r
- clear();\r
- }\r
- };\r
-\r
- $scope.addNewL2gateways = function() {\r
- if($scope.newEndpointObj) {\r
- if(!$scope.newEndpointObj['endpoint-l2-gateways']){\r
- $scope.newEndpointObj['endpoint-l2-gateways'] = [];\r
- }\r
- var objToPush = {'l2-context' : '', 'mac-address' : ''};\r
- $scope.newEndpointObj['endpoint-l2-gateways'].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteNewL2gateways = function(index){\r
- if($scope.newEndpointObj) {\r
- $scope.newEndpointObj['endpoint-l2-gateways'].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.addNewL3gateways = function() {\r
- if($scope.newEndpointObj) {\r
- if(!$scope.newEndpointObj['endpoint-l3-gateways']){\r
- $scope.newEndpointObj['endpoint-l3-gateways'] = [];\r
- }\r
- var objToPush = {'l3-context' : '', 'ip-address' : ''};\r
- $scope.newEndpointObj['endpoint-l3-gateways'].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteNewL3gateways = function(index){\r
- if($scope.newEndpointObj) {\r
- $scope.newEndpointObj['endpoint-l3-gateways'].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.addNewLeafListEl = function(prop) {\r
- if($scope.newEndpointObj) {\r
- if(!$scope.newEndpointObj[prop]){\r
- $scope.newEndpointObj[prop] = [];\r
- }\r
- var objToPush = "";\r
- $scope.newEndpointObj[prop].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.updateLeafListEl = function(index, value, prop) {\r
- if($scope.newEndpointObj && $scope.newEndpointObj[prop] && $scope.newEndpointObj[prop].length >= index) {\r
- $scope.newEndpointObj[prop][index] = value;\r
- }\r
- };\r
-\r
- $scope.deleteNewLeafListEl = function(index, prop){\r
- if($scope.newEndpointObj) {\r
- $scope.newEndpointObj[prop].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- if($scope.validateForm($scope.l3EndpointForm)){\r
- GBPEndpointL3Services.send(path, $scope.newEndpointObj, function(data){\r
- $scope.init();\r
- $scope.view.endpoint = false;\r
- $scope.reloadNewObj();\r
- $scope.view.edit = "view";\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedTenant && $scope.selectedEndpoint) {\r
- GBPEndpointL3Services.delete(path, $scope.selectedEndpoint, function(data){\r
- $scope.init();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.view.endpoint = true;\r
- $scope.reloadNewObj();\r
- $scope.selectedEndpoint = null;\r
- $scope.view.edit = "add";\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedEndpoint = selectedObj;\r
- angular.copy(selectedObj, $scope.newEndpointObj);\r
- $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";\r
- if(selectedObj){\r
- $scope.view.endpoint = true;\r
- }\r
- else {\r
- $scope.view.endpoint = false;\r
- $scope.view.edit = "view";\r
- }\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.view.endpoint = false;\r
- $scope.view.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEndpoint ) {\r
- $scope.view.endpoint = true;\r
- $scope.view.edit = "edit";\r
- angular.copy($scope.selectedEndpoint, $scope.newEndpointObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_EPG_RELOAD',function(){\r
- loadEpgOptions();\r
- });\r
-\r
- $scope.$on('GBP_L2BRIDGE_RELOAD',function(){\r
- loadL2ContextOptions();\r
- });\r
-\r
- $scope.$on('GBP_L2FLOOD_RELOAD',function(){\r
- loadL2ContextOptions();\r
- });\r
-\r
- $scope.$on('GBP_L3CONTEXT_RELOAD',function(){\r
- loadL3ContextOptions();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('accessModelWizardCtrl', ['$scope', '$filter', 'GBPTenantServices', 'GBPEpgServices', 'GBPContractServices', 'GPBServices', function($scope, $filter, GBPTenantServices, GBPEpgServices, GBPContractServices, GPBServices){ \r
- $scope.wizardPage = null;\r
-\r
- $scope.selectedTenant = null;\r
- $scope.tenant = null;\r
- //$scope.epgList = [];\r
- $scope.newContractObj = null;\r
-\r
- $scope.init = function() {\r
- $scope.setPage('tenants');\r
- };\r
-\r
- $scope.setPage = function(pageName, object) {\r
- $scope.wizardPage = pageName;\r
-\r
- switch(pageName) {\r
- case 'contracts':\r
- if(object) {\r
- $scope.tenant = object;\r
- }\r
-\r
- break;\r
-\r
- case 'summary':\r
- $scope.tenant['endpoint-group'] = $scope.tenant['endpoint-group'] ? $scope.tenant['endpoint-group'] : [];\r
-\r
- if(object) {\r
- object.forEach(function(o) {\r
- $scope.tenant['endpoint-group'].push(GPBServices.stripNullValues(o));\r
- });\r
- }\r
-\r
- break;\r
-\r
- case 'epgs':\r
- $scope.tenant['contract'] = $scope.tenant['contract'] ? $scope.tenant['contract'] : [];\r
-\r
- if(object) {\r
- object.forEach(function(o) {\r
- $scope.tenant['contract'].push(GPBServices.stripNullValues(o));\r
- });\r
- }\r
-\r
- break;\r
- }\r
- };\r
-\r
- $scope.submit = function(object) {\r
- $scope.tenant['endpoint-group'] = $scope.tenant['endpoint-group'] ? $scope.tenant['endpoint-group'] : [];\r
-\r
- if(object) {\r
- object.forEach(function(o) {\r
- $scope.tenant['endpoint-group'].push(GPBServices.stripNullValues(o));\r
- });\r
- }\r
-\r
- \r
- path = GBPTenantServices.createPathObj($scope.tenant.id);\r
- GBPTenantServices.send(path, $scope.tenant, function(data){\r
- $scope.wizards.accessModelWizard = false;\r
- $scope.sendReloadEventFromRoot('GBP_GLOBAL_TENANT_RELOAD');\r
- $scope.reloadTopo();\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- };\r
-\r
- // $scope.updateList = function(list, object, key) {\r
- // var elementPos = list.map(function(x) {return x[key]; }).indexOf(object[key]);\r
-\r
- // if(elementPos < 0) {\r
- // list.push(object);\r
- // }\r
- // else {\r
- // list[elementPos] = object;\r
- // }\r
- // };\r
- }]);\r
-\r
- gbp.register.controller('wizardTenantCtrl', ['$scope', '$filter', 'GBPTenantServices', function($scope, $filter, GBPTenantServices){ \r
- // $scope.tenantList = [];\r
- $scope.newTenantObj = GBPTenantServices.createObj();\r
- $scope.displayLabel = ['name' , 'id'];\r
-\r
- $scope.view = {\r
- tenantEdit: false\r
- };\r
-\r
- // $scope.init = function() {\r
- // $scope.getTenants();\r
- // };\r
-\r
- // $scope.getTenants = function() {\r
- // GBPTenantServices.load(\r
- // function(data) {\r
- // $scope.tenantList = data;\r
- // $scope.newTenantObj = GBPTenantServices.createObj();\r
- // },\r
- // function(){\r
- // //TODO error\r
- // }\r
- // );\r
- // };\r
-\r
- $scope.reloadTenants = function(selectedObject) {\r
- if(!selectedObject) {\r
- selectedObject = GBPTenantServices.createObj();\r
- $scope.view.tenantEdit = false;\r
- }\r
- else {\r
- $scope.view.tenantEdit = true;\r
- }\r
-\r
- $scope.selectedTenant = selectedObject;\r
- $scope.newTenantObj = selectedObject;\r
- };\r
-\r
- $scope.getNewTenantObject = function() {\r
- return GBPTenantServices.createObj();\r
- };\r
- }]); \r
-\r
- gbp.register.controller('wizardEpgCtrl', ['$scope', '$filter', 'GBPEpgServices', function($scope, $filter, GBPEpgServices){ \r
- $scope.list = [];\r
- $scope.newEpgObj = GBPEpgServices.createObj();\r
- $scope.selectedEpg = null;\r
- $scope.epgFormView = true;\r
-\r
- $scope.displayLabel = ['name', 'id'];\r
- $scope.crudLabel = 'Group list';\r
-\r
- $scope.igpOpts = ['allow', 'require-contract'];\r
-\r
- $scope.init = function() {\r
- \r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.epgFormView = true;\r
- $scope.newEpgObj = GBPEpgServices.createObj();\r
- };\r
-\r
- $scope.save = function() {\r
- $scope.updateList($scope.list, $scope.newEpgObj, "id");\r
- $scope.reload($scope.newEpgObj);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newEpgObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedEpg) {\r
- var index = $scope.list.indexOf($scope.selectedEpg);\r
- $scope.list.splice(index, 1);\r
- $scope.epgFormView = false;\r
- }\r
- //$scope.newEpgObj = GBPEpgServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedEpg = selectedObj;\r
- $scope.newEpgObj = selectedObj;\r
- $scope.epgFormView = true;\r
- $scope.$broadcast('WIZARD_EPG_RELOAD');\r
- };\r
-\r
- $scope.close = function() {\r
- $scope.epgFormView = false;\r
- $scope.newEpgObj = GBPEpgServices.createObj();\r
- $scope.selectedEpg = null;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEpg ) {\r
- $scope.epgFormView = true;\r
- angular.copy($scope.selectedEpg, $scope.newEpgObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on("WIZARD_CNS_RELOAD", function(event, args){\r
- //$scope.selectedEpg['consumer-named-selector'] = args;\r
- $scope.newEpgObj['consumer-named-selector'] = args;\r
- $scope.updateList($scope.list, $scope.newEpgObj, "id");\r
- });\r
-\r
- $scope.$on("WIZARD_PNS_RELOAD", function(event, args){\r
- //$scope.selectedEpg['provider-named-selector'] = args;\r
- $scope.newEpgObj['provider-named-selector'] = args;\r
- $scope.updateList($scope.list, $scope.newEpgObj, "id");\r
- });\r
- }]); \r
-\r
- gbp.register.controller('wizardContractCtrl', ['$scope', '$filter', 'GBPContractServices', function($scope, $filter, GBPContractServices){ \r
- $scope.list = [];\r
- $scope.newContractObj = GBPContractServices.createObj();\r
- $scope.selectedContract = null;\r
-\r
- $scope.displayLabel = ['description', 'id'];\r
- $scope.crudLabel = 'Contract list';\r
-\r
- $scope.contractFormView = true;\r
-\r
- $scope.init = function() {\r
- \r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.contractFormView = true;\r
- $scope.newContractObj = GBPContractServices.createObj();\r
- };\r
-\r
- $scope.save = function() {\r
- $scope.updateList($scope.list, $scope.newContractObj, "id");\r
- $scope.reload($scope.newContractObj);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newContractObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedContract) {\r
- var index = $scope.list.indexOf($scope.selectedContract);\r
- $scope.list.splice(index, 1);\r
- $scope.contractFormView = false;\r
- $scope.newContractObj = GBPContractServices.createObj();\r
- $scope.selectedContract = null;\r
- }\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedContract = selectedObj;\r
- $scope.newContractObj = selectedObj;\r
- $scope.contractFormView = true;\r
- };\r
-\r
- $scope.close = function() {\r
- $scope.contractFormView = false;\r
- //$scope.newContractObj = GBPContractServices.createObj();\r
- //$scope.selectedContract = null;\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedContract ) {\r
- $scope.contractFormView = true;\r
- angular.copy($scope.selectedContract, $scope.newContractObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on("WIZARD_SUBJECT_RELOAD", function(event, args){\r
- //$scope.selectedEpg['consumer-named-selector'] = args;\r
- $scope.newContractObj['subject'] = args;\r
- $scope.updateList($scope.list, $scope.newContractObj, "id");\r
- });\r
-\r
- $scope.$on("WIZARD_CLAUSE_RELOAD", function(event, args){\r
- //$scope.selectedEpg['consumer-named-selector'] = args;\r
- $scope.newContractObj['clause'] = args;\r
- $scope.updateList($scope.list, $scope.newContractObj, "id");\r
- });\r
- }]); \r
-\r
- gbp.register.controller('wizardCnsCtrl',['$scope', 'GBPConNamedSelServices', function($scope, GBPConNamedSelServices){\r
- $scope.list = [];\r
- $scope.selectedCNS = null;\r
- $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
- $scope.internalView = {\r
- cns: false,\r
- edit: "view"\r
- };\r
- $scope.displayLabel = 'name';\r
- $scope.crudLabel = 'Consumer named selectors list';\r
-\r
- $scope.contractList = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contractList);\r
-\r
- var clear = function(){\r
- $scope.list = [];\r
- $scope.selectedCNS = null;\r
- $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
- $scope.internalView = {\r
- cns: false,\r
- edit: "add"\r
- };\r
- };\r
-\r
- //move to separate ctrl \/\r
- $scope.addNewElem = function(templateObj) {\r
- if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
- var objToPush = templateObj || "";\r
- $scope.newCNSObj.contract.push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- if($scope.newCNSObj && $scope.newCNSObj.contract) {\r
- $scope.newCNSObj.contract.splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.updateAt = function(index, value) {\r
- if($scope.newCNSObj && $scope.newCNSObj.contract && $scope.newCNSObj.contract.length >= index) {\r
- $scope.newCNSObj.contract[index] = value;\r
- }\r
- };\r
- //move to separate ctrl /\\r
-\r
- $scope.init = function() {\r
- clear();\r
-\r
- if($scope.tenant && $scope.tenant['contract'].length>0) {\r
- $scope.contractList.options = $scope.tenant['contract'];\r
- }\r
-\r
- if($scope.selectedEpg && $scope.selectedEpg['consumer-named-selector']) {\r
- $scope.list = $scope.selectedEpg['consumer-named-selector'];\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newCNSObj, "name");\r
- $scope.reload($scope.newCNSObj);\r
- $scope.$emit('WIZARD_CNS_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newCNSObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedCNS) {\r
- var index = $scope.list.indexOf($scope.selectedCNS);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- cns: false,\r
- edit: "add"\r
- };\r
- $scope.$emit('WIZARD_CNS_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.selectedCNS = null;\r
- $scope.internalView.cns = true;\r
- $scope.internalView.edit = "add";\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newCNSObj = GBPConNamedSelServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedCNS = selectedObj;\r
- $scope.newCNSObj = selectedObj;\r
- $scope.internalView.cns = true;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.cns = false;\r
- //$scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEpg ) {\r
- $scope.internalView.cns = true;\r
- $scope.internalView.edit = "add";\r
- angular.copy($scope.selectedCNS, $scope.newCNSObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('WIZARD_EPG_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('wizardPnsCtrl',['$scope', 'GBPProNamedSelServices', function($scope, GBPProNamedSelServices){\r
- $scope.list = [];\r
- $scope.selectedPNS = null;\r
- $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.crudLabel = 'Provider named selectors list';\r
- $scope.internalView = {\r
- pns: false,\r
- edit: "view"\r
- };\r
-\r
- $scope.contractList = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contractList);\r
-\r
- var clear = function(){\r
- $scope.list = [];\r
- $scope.selectedPNS = null;\r
- $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
- $scope.internalView = {\r
- pns: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- //move to separate ctrl \/\r
- $scope.addNewElem = function(templateObj) {\r
- if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
- var objToPush = templateObj || "";\r
- $scope.newPNSObj.contract.push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- if($scope.newPNSObj && $scope.newPNSObj.contract) {\r
- $scope.newPNSObj.contract.splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.updateAt = function(index, value) {\r
- if($scope.newPNSObj && $scope.newPNSObj.contract && $scope.newPNSObj.contract.length >= index) {\r
- $scope.newPNSObj.contract[index] = value;\r
- }\r
- };\r
- //move to separate ctrl /\\r
-\r
- $scope.init = function() {\r
- clear();\r
-\r
- if($scope.tenant && $scope.tenant['contract'].length>0) {\r
- $scope.contractList.options = $scope.tenant['contract'];\r
- }\r
-\r
- if($scope.selectedEpg && $scope.selectedEpg['provider-named-selector']) {\r
- $scope.list = $scope.selectedEpg['provider-named-selector'];\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newPNSObj, "name");\r
- $scope.reload($scope.newPNSObj);\r
- $scope.$emit('WIZARD_PNS_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newPNSObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedPNS) {\r
- var index = $scope.list.indexOf($scope.selectedPNS);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- pns: false,\r
- edit: "add"\r
- };\r
- $scope.$emit('WIZARD_PNS_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.selectedPNS = null;\r
- $scope.internalView.pns = true;\r
- $scope.internalView.edit = "add";\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newPNSObj = GBPProNamedSelServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedPNS = selectedObj;\r
- $scope.newPNSObj = selectedObj;\r
- $scope.internalView.pns = true;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.pns = false;\r
- $scope.internalView.edit = "view";\r
- };\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedEpg ) {\r
- $scope.internalView.pns = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedPNS, $scope.newPNSObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('WIZARD_EPG_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('wizardSubjectCtrl', ['$scope','GBPSubjectServices', '$filter', function($scope, GBPSubjectServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedSubject = null;\r
- $scope.newSubjectObj = GBPSubjectServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- subject : false,\r
- edit : "view"\r
- };\r
- $scope.crudLabel = 'Subject list';\r
- $scope.errors = {};\r
-\r
-\r
- var path = null,\r
- mandatoryProperties = ['order'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedSubject = null;\r
- $scope.newSubjectObj = GBPSubjectServices.createObj();\r
- $scope.internalView = {\r
- subject : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- \r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newSubjectObj, "name");\r
- $scope.reload($scope.newSubjectObj);\r
- $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newSubjectObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedSubject) {\r
- var index = $scope.list.indexOf($scope.selectedSubject);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- subject: false,\r
- edit: "add"\r
- };\r
- $scope.reloadNewObj();\r
- $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newSubjectObj = GBPSubjectServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedSubject = selectedObj;\r
- $scope.newSubjectObj = selectedObj;\r
- $scope.internalView.subject = true;\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.subject = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedSubject = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.subject = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedSubject ) {\r
- $scope.internalView.subject = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedSubject, $scope.newSubjectObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_CONTRACT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on('GBP_SUBJECTS_LABEL', function(event, obj){\r
- obj.labels = $scope.displayLabel;\r
- });\r
-\r
- $scope.$on("WIZARD_RULE_RELOAD", function(event, args){\r
- //$scope.selectedEpg['consumer-named-selector'] = args;\r
- $scope.newSubjectObj['rule'] = args;\r
- $scope.updateList($scope.list, $scope.newSubjectObj, "id");\r
- $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);\r
- });\r
- }]);\r
-\r
- gbp.register.controller('wizardRuleCtrl', ['$scope','GBPRuleServices', '$filter', function($scope, GBPRuleServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedRule = null;\r
- $scope.newRuleObj = GBPRuleServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- rule : false,\r
- edit : "view"\r
- };\r
- $scope.crudLabel = 'Rule list';\r
- $scope.errors = {};\r
-\r
- var path = null,\r
- mandatoryProperties = ['order'],\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedRule = null;\r
- $scope.newRuleObj = GBPRuleServices.createObj();\r
- $scope.internalView = {\r
- rule : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- \r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newRuleObj, "name");\r
- $scope.reload($scope.newRuleObj);\r
- $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newRuleObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedRule) {\r
- var index = $scope.list.indexOf($scope.selectedRule);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- rule: false,\r
- edit: "add"\r
- };\r
- $scope.reloadNewObj();\r
- $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newRuleObj = GBPRuleServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedRule = selectedObj;\r
- $scope.newRuleObj = selectedObj;\r
- $scope.internalView.rule = true;\r
- $scope.$broadcast('WIZARD_RULE_RELOAD');\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.rule = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedRule = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.rule = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedRule ) {\r
- $scope.internalView.rule = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedRule, $scope.newRuleObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('GBP_SUBJECT_RELOAD',function(){\r
- $scope.init();\r
- });\r
-\r
- $scope.$on("WIZARD_CLASREF_RELOAD", function(event, args){\r
- $scope.newRuleObj['classifier-ref'] = args;\r
- $scope.updateList($scope.list, $scope.newRuleObj, "name");\r
- $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
- });\r
-\r
- $scope.$on("WIZARD_ACTIONREF_RELOAD", function(event, args){\r
- $scope.newRuleObj['action-ref'] = args;\r
- $scope.updateList($scope.list, $scope.newRuleObj, "name");\r
- $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);\r
- });\r
- }]);\r
-\r
- gbp.register.controller('wizardClauseCtrl', ['$scope','GBPClauseServices', 'GBPSubjectServices', \r
- function($scope, GBPClauseServices, GBPSubjectServices){\r
- $scope.list = [];\r
- $scope.selectedClause = null;\r
- $scope.newClauseObj = GBPClauseServices.createObj();\r
- $scope.internalView = {\r
- clause: false,\r
- edit: "view"\r
- };\r
- $scope.displayLabel = 'name';\r
- $scope.crudLabel = 'Clause list';\r
-\r
- $scope.subjects = {'options' : [], 'labels' : null};\r
- $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);\r
-\r
- var path = null,\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedClause = null;\r
- $scope.newClauseObj = GBPClauseServices.createObj();\r
- $scope.internalView = {\r
- clause: false,\r
- edit: "view"\r
- };\r
- };\r
-\r
- //move to separate ctrl \/\r
- $scope.addNewElem = function(templateObj) {\r
- if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
- $scope.init();\r
- var objToPush = templateObj || "";\r
- $scope.newClauseObj['subject-refs'].push(objToPush);\r
- }\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {\r
- $scope.newClauseObj['subject-refs'].splice(index, 1);\r
- }\r
- };\r
-\r
- $scope.updateAt = function(index, value) {\r
- if($scope.newClauseObj && $scope.newClauseObj['subject-refs'] && $scope.newClauseObj['subject-refs'].length >= index) {\r
- $scope.newClauseObj['subject-refs'][index] = value;\r
- }\r
- };\r
- //move to separate ctrl /\\r
-\r
- $scope.init = function() {\r
- if($scope.selectedContract && $scope.selectedContract['subject'].length>0) {\r
- $scope.subjects.options = $scope.selectedContract['subject'];\r
- }\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newClauseObj, "name");\r
- $scope.reload($scope.newClauseObj);\r
- $scope.$emit('WIZARD_CLAUSE_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newClauseObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedClause) {\r
- var index = $scope.list.indexOf($scope.selectedClause);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- clause: false,\r
- edit: "add"\r
- };\r
- $scope.$emit('WIZARD_CLAUSE_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newClauseObj = GBPClauseServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedClause = selectedObj;\r
- $scope.newClauseObj = selectedObj;\r
- $scope.internalView.clause = true;\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.clause = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedClause = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.clause = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedClause ) {\r
- $scope.internalView.clause = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedClause, $scope.newClauseObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('WIZARD_SUBJECT_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('wizardActionRefCtrl', ['$scope','GBPActionRefsServices', 'GBPActionInstanceServices', '$filter', function($scope, GBPActionRefsServices, GBPActionInstanceServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedActionRef = null;\r
- $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- actionRef : false,\r
- edit : "view"\r
- };\r
- $scope.crudLabel = 'Action ref list';\r
-\r
- $scope.actionInstanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
-\r
- var path = null,\r
- mandatoryProperties = ['order'],\r
-\r
- actionInstanceNamesLoad = function() {\r
- if($scope.tenant) {\r
- var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.tenant.id);\r
- GBPActionInstanceServices.load(actionInstancePath, function(data){\r
- $scope.actionInstanceNames.options = data;\r
- },function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedActionRef = null;\r
- $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
- $scope.internalView = {\r
- actionRef : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- actionInstanceNamesLoad();\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newActionRefObj, "name");\r
- $scope.reload($scope.newActionRefObj);\r
- $scope.$emit('WIZARD_ACTIONREF_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newActionRefObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedActionRef) {\r
- var index = $scope.list.indexOf($scope.selectedActionRef);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- actionRef: false,\r
- edit: "add"\r
- };\r
- $scope.$emit('WIZARD_ACTIONREF_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newActionRefObj = GBPActionRefsServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedActionRef = selectedObj;\r
- $scope.newActionRefObj = selectedObj;\r
- $scope.internalView.actionRef = true;\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.actionRef = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedActionRef = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.actionRef = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedActionRef ) {\r
- $scope.internalView.actionRef = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedActionRef, $scope.newActionRefObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('WIZARD_RULE_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('wizardClassifierRefCtrl', ['$scope','GBPClassifierRefsServices', 'GBPClassifierInstanceServices', '$filter', function($scope, GBPClassifierRefsServices, GBPClassifierInstanceServices, $filter){\r
- $scope.list = [];\r
- $scope.selectedClassifierRef = null;\r
- $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
- $scope.displayLabel = 'name';\r
- $scope.internalView = {\r
- classifierRef : false,\r
- edit : "view"\r
- };\r
-\r
- $scope.instanceNames = {'options' : [], 'labels' : $scope.displayLabel};\r
-\r
- $scope.formDirections = ['in', 'out', 'bidirectional'];\r
- $scope.formConnectionTracking = ['normal', 'reflexive'];\r
-\r
- $scope.crudLabel = 'Classifier ref list';\r
-\r
- var path = null,\r
-\r
- instanceNamesLoad = function() {\r
- if($scope.tenant) {\r
- var classifierInstancePath = GBPClassifierInstanceServices.createPathObj($scope.tenant.id);\r
- GBPClassifierInstanceServices.load(classifierInstancePath, function(data){\r
- $scope.instanceNames.options = data;\r
- },function(){\r
- //TODO: error cbk\r
- });\r
- }\r
- },\r
-\r
- clear = function(){\r
- $scope.list = [];\r
- $scope.selectedClassifierRef = null;\r
- $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
- $scope.internalView = {\r
- classifierRef : false,\r
- edit : "view"\r
- };\r
- };\r
-\r
- $scope.init = function() {\r
- instanceNamesLoad();\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.updateList($scope.list, $scope.newClassifierRefObj, "name");\r
- $scope.reload($scope.newClassifierRefObj);\r
- $scope.$emit('WIZARD_CLASREF_RELOAD', $scope.list);\r
- $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newClassifierRefObj);\r
- };\r
-\r
- $scope.delete = function() {\r
- if($scope.selectedClassifierRef) {\r
- var index = $scope.list.indexOf($scope.selectedClassifierRef);\r
- $scope.list.splice(index, 1);\r
- $scope.internalView = {\r
- classifierRef: false,\r
- edit: "add"\r
- };\r
- $scope.$emit('WIZARD_CLASREF_RELOAD', $scope.list);\r
- }\r
- };\r
-\r
- $scope.reloadNewObj = function() {\r
- $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();\r
- };\r
-\r
- $scope.reload = function(selectedObj) {\r
- $scope.selectedClassifierRef = selectedObj;\r
- $scope.newClassifierRefObj = selectedObj;\r
- $scope.internalView.classifierRef = true;\r
- };\r
-\r
- $scope.showForm = function() {\r
- $scope.reloadNewObj();\r
- $scope.internalView.classifierRef = true;\r
- $scope.internalView.edit = "add";\r
- $scope.selectedClassifierRef = null;\r
- };\r
-\r
- $scope.close = function(){\r
- $scope.internalView.classifierRef = false;\r
- $scope.internalView.edit = "view";\r
- };\r
-\r
- $scope.$on('PGN_EDIT_ELEM', function(event){\r
- if (!event.defaultPrevented) {\r
- if ( $scope.selectedClassifierRef ) {\r
- $scope.internalView.classifierRef = true;\r
- $scope.internalView.edit = "edit";\r
- angular.copy($scope.selectedClassifierRef, $scope.newClassifierRefObj);\r
- }\r
- event.defaultPrevented = true;\r
- }\r
- });\r
-\r
- $scope.$on('WIZARD_RULE_RELOAD',function(){\r
- $scope.init();\r
- });\r
- }]);\r
-\r
- gbp.register.controller('rendererStateCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){\r
- $scope.data = {'subject-feature-definitions' : {}};\r
- $scope.view_path = 'src/app/gbp/views/governance';\r
-\r
- var init = function(){\r
- GPBServices.getDefinitions(function(classifiersDefs, actionsDefs){\r
- $scope.data['subject-feature-definitions']['classifier-definition'] = classifiersDefs;\r
- $scope.data['subject-feature-definitions']['action-definition'] = actionsDefs;\r
- }, function(){\r
- //error\r
- });\r
- };\r
- \r
- init();\r
- }]);\r
-\r
- gbp.register.controller('layerCtrl', ['$scope', function($scope){\r
-\r
- var moveOffset = 1;\r
- $scope.currentDisplayIndex = 1;\r
- $scope.displayOffsets = [-1, 0, 1];\r
- $scope.expanded = true;\r
-\r
- $scope.init = function(key, value){\r
- $scope.data = value;\r
- if($scope.checkData(value, 'Array')){\r
- $scope.setActData($scope.data[$scope.data.length - 1]);\r
- }\r
- }; \r
-\r
- $scope.toggleExpanded = function(){\r
- $scope.expanded = !$scope.expanded;\r
- };\r
-\r
- $scope.shiftDisplayNext = function() {\r
- $scope.currentDisplayIndex = Math.min($scope.currentDisplayIndex + moveOffset, $scope.data.length - 2);\r
- };\r
-\r
- $scope.shiftDisplayPrev = function() {\r
- $scope.currentDisplayIndex = Math.max($scope.currentDisplayIndex - moveOffset, 1);\r
- };\r
-\r
- $scope.showPrevButton = function() {\r
- return $scope.currentDisplayIndex > 1;\r
- };\r
-\r
- $scope.showNextButton = function() {\r
- return $scope.data && $scope.currentDisplayIndex < $scope.data.length - 2;\r
- };\r
-\r
- $scope.setActData = function(data) {\r
- $scope.actSelected = data;\r
- };\r
-\r
- $scope.checkData = function(data, type){\r
- var result = {'Array' : data instanceof Array,\r
- 'Object' : data instanceof Object};\r
-\r
- return result[type];\r
- };\r
- }]);\r
-\r
- gbp.register.controller('actionReferenceWizardCtrl', ['$scope', '$filter', 'GBPRuleServices', 'GBPActionInstanceServices', function($scope, $filter, GBPRuleServices, GBPActionInstanceServices){ \r
- $scope.wizardPage = null;\r
- $scope.path = {};\r
- $scope.rule = {};\r
-\r
- $scope.actionInstanceNames = {'options' : [], 'labels' : "name"};\r
-\r
- var actionInstanceNamesLoad = function() {\r
- var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);\r
- GBPActionInstanceServices.load(actionInstancePath, function(data){\r
- $scope.actionInstanceNames.options = data;\r
- },function(){\r
- //TODO: error cbk\r
- });\r
- };\r
-\r
- $scope.init = function() {\r
- $scope.setPage('reference');\r
- };\r
-\r
- $scope.setPage = function(pageName, object) {\r
- $scope.wizardPage = pageName;\r
- };\r
-\r
- $scope.submit = function() {\r
- //if($scope.validateForm($scope.actionsForm)){\r
- $scope.actionInstanceNames.options.forEach(function(i) {\r
- path = GBPActionInstanceServices.createPathObj($scope.path.tenantId, i.name);\r
- //saveParams();\r
-\r
- GBPActionInstanceServices.send(path, i, function(data){\r
- $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- });\r
- \r
- //}\r
-\r
- //if($scope.validateForm($scope.rulesForm)){\r
- path = GBPRuleServices.createPathObj($scope.path.tenantId, $scope.path.contractId, $scope.path.subjectId, $scope.path.ruleId);\r
- GBPRuleServices.send(path, $scope.rule, function(data){\r
-\r
- $scope.wizards.actionReferenceWizard = false;\r
- \r
- //$scope.sendReloadEventFromRoot('GBP_TENANT_RELOAD');\r
- }, function(){\r
- //TODO: error cbk\r
- });\r
- //}\r
- //$scope.\r
- };\r
-\r
- $scope.$on('ACTION_RULE_WIZARD_LOAD', function(event, data){\r
- $scope.rule = angular.copy(data.data);\r
- $scope.path = data.path;\r
- });\r
-\r
- $scope.$on('WIZARD_ACTIONREF_ADD', function(event, data){\r
- if(!$scope.rule['action-ref']) {\r
- $scope.rule['action-ref'] = [];\r
- }\r
- $scope.updateList($scope.rule['action-ref'], data, "name");\r
- });\r
-\r
- $scope.$on('WIZARD_ACTIONREF_DELETE', function(event, data){\r
- $scope.rule['action-ref'].splice(data, 1);\r
- });\r
-\r
- $scope.$on('WIZARD_ACTIONINSTANCE_ADD', function(event, data){\r
- $scope.updateList($scope.actionInstanceNames.options, data, "name");\r
-\r
- $scope.setPage('reference');\r
- });\r
-\r
- $scope.$on('GBP_TENANT_RELOAD',function(){\r
- actionInstanceNamesLoad();\r
- });\r
-\r
- }]);\r
-\r
- gbp.register.controller('actionsRefListCtrl', ['$scope', '$filter', function($scope, $filter){ \r
- \r
- $scope.actionReferenceForm = false;\r
-\r
- $scope.showForm = function(object) {\r
- $scope.actionReferenceForm = true;\r
- $scope.newActionRefObj = object || null;\r
- };\r
-\r
- $scope.closeForm = function() {\r
- $scope.actionReferenceForm = false;\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.$emit('WIZARD_ACTIONREF_ADD', $scope.newActionRefObj);\r
- $scope.resetObject();\r
- };\r
-\r
- $scope.deleteElemAt = function(index) {\r
- $scope.$emit('WIZARD_ACTIONREF_DELETE', index);\r
- $scope.resetObject();\r
- };\r
-\r
- $scope.resetObject = function() {\r
- $scope.newActionRefObj = null;\r
- };\r
-\r
- \r
-\r
- }]);\r
-\r
- gbp.register.controller('actionInstanceWizardCtrl', ['$scope', '$filter', 'GPBServices', 'GBPActionInstanceServices', function($scope, $filter, GPBServices, GBPActionInstanceServices){ \r
- $scope.actionDefinitions = {'options' : [], 'labels' : "name"};\r
- $scope.newActionObj = GBPActionInstanceServices.createObj();\r
-\r
- var loadDefinitions = function() {\r
- GPBServices.getDefinitions(function(classifierDefs, actionDefs) {\r
- $scope.actionDefinitions.options = actionDefs;\r
- //$scope.getDisplayLabelsFromCtrl('GBP_ACTIONS_LABEL', $scope.actionDefinitions);\r
- });\r
- };\r
-\r
- $scope.reloadDefs = function(){\r
- $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newActionObj['action-definition-id']));\r
-\r
- //TODO: rework\r
- if($scope.defs.length && $scope.defs[0].name === 'sfc-chain-name') {\r
- GPBServices.getServiceFunctionChains(function(data) {\r
- $scope.serviceFunctionChains = data;\r
- });\r
- }\r
- };\r
-\r
- $scope.getDefinitionObjParams = function(id){\r
- return GPBServices.getDefinitionObjParams($scope.actionDefinitions.options, id);\r
- };\r
-\r
- $scope.save = function(){\r
- $scope.newActionObj['parameter-value'] = [];\r
- $scope.$broadcast('GBP_SAVE_PARAM');\r
- $scope.$emit('WIZARD_ACTIONINSTANCE_ADD', $scope.newActionObj);\r
- $scope.resetObject();\r
- };\r
-\r
- $scope.resetObject = function() {\r
- $scope.newActionObj = GBPActionInstanceServices.createObj();\r
- };\r
-\r
- $scope.saveParam = function() {\r
- \r
- };\r
-\r
- $scope.addParam = function(name, type, value) {\r
- $scope.newActionObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));\r
- };\r
-\r
- loadDefinitions();\r
-\r
- }]);\r
-\r
-});\r
-\r
-\r
+var modules = ['app/gbp/gbp.module',
+ 'app/gbp/gbp.services'
+ ];
+
+
+define(modules, function(gbp) {
+
+ gbp.register.controller('gbpCtrl', ['$scope', '$rootScope', 'GBPTenantServices','DesignGbpFactory', 'GBPConstants',
+ function ($scope, $rootScope, GBPTenantServices, DesignGbpFactory, GBPConstants) {
+ $rootScope['section_logo'] = 'logo_gbp';
+ $scope.view_path = 'src/app/gbp/views/';
+
+ $scope.mainView = {
+ main: true,
+ 'policy-renderer': false,
+ governance: false
+ };
+
+ $scope.policyRendererView = {
+ slider : true,
+ basic : true,
+ policy: false,
+ tenants : false,
+ l2l3 : false,
+ epg : false,
+ contracts : false,
+ docs : false,
+ groupMenu: false,
+ classifiers: false,
+ actions: false,
+ registerEndpoint : false,
+ registerL3PrefixEndpoint : false
+ };
+
+ $scope.subMenuView = {
+ governance : false,
+ policy : false,
+ policySub : false,
+ renderers : false,
+ endpoints : false
+ };
+
+ $scope.breadcrumbs = {'l1' : null,
+ 'l2' : null,
+ 'l3' : null};
+
+ $scope.wizards = {
+ accessModelWizard: false,
+ actionReferenceWizard: false
+ };
+
+ $scope.setBreadcrumb = function(level, label, visible){
+ $scope.breadcrumbs[level] = visible ? label : null;
+ if(level === 'l1'){
+ $scope.breadcrumbs.l2 = null;
+ $scope.breadcrumbs.l3 = null;
+ }
+ if(level === 'l2'){
+ $scope.breadcrumbs.l3 = null;
+ }
+ };
+
+ $scope.setViewExpand = function(menu, expand, show){
+ $scope[menu][expand] = show ? true : !$scope[menu][expand];
+ for ( var property in $scope[menu] ) {
+ $scope[menu][property] = expand !== property ? false : $scope[menu][expand];
+ }
+
+ };
+
+ $scope.toggleExpandedMM = function(expand, show, broadcast){
+ $scope.setViewExpand('mainView',expand, show);
+
+ if ( broadcast ) {
+ $scope.$broadcast(broadcast);
+ }
+ };
+
+ $scope.sliceLabel = function(label){
+ return label.length > GBPConstants.numbers.displayLabelLength ? label.slice(0,GBPConstants.numbers.displayLabelLength)+'...' : label;
+ };
+
+ $scope.getDisplayLabel = function(obj, labelArray, dontSlice){
+ var ret = '';
+
+ if((typeof labelArray) === 'string'){
+ ret = obj[labelArray];
+ } else if (angular.isFunction(labelArray)) {
+ ret = labelArray(obj);
+ } else {
+ labelArray.some(function(labelParam) {
+ if(angular.isFunction(labelParam)) {
+ ret = labelParam(obj);
+ } else if(obj.hasOwnProperty(labelParam)) {
+ ret = obj[labelParam];
+ }
+ return ret;
+ });
+ }
+
+ return dontSlice ? ret : $scope.sliceLabel(ret);
+ };
+
+ // TENANTS
+ $scope.tenantList = [];
+ $scope.selectedTenant = null;
+ $scope.tenantDisplayLabel = ['name' , 'id'];
+
+ $scope.loadTenants = function() {
+ GBPTenantServices.load(
+ function(tenants) {
+ $scope.tenantList = tenants;
+ console.log('$scope.tenantList', $scope.tenantList);
+ },
+ function(){
+ //TODO error
+ });
+
+ DesignGbpFactory.setMainClass();
+ };
+
+ $scope.setTenant = function(selectedTenant) {
+ $scope.selectedTenant = selectedTenant;
+ $scope.$broadcast('GBP_TENANT_RELOAD', $scope.selectedTenant);
+ };
+
+ $scope.loadTenants();
+
+ $scope.$on('GBP_GLOBAL_TENANT_RELOAD',function(){
+ $scope.loadTenants();
+ });
+
+ $scope.sendReloadEventFromRoot = function(eventName, val) {
+ $scope.$broadcast(eventName, val);
+ };
+
+
+ // TODO: rework, use $scope.setViewContent or something
+ $scope.showWizard = function(wizardName, broadcast, broadcastedData, path) {
+ $scope.wizards[wizardName] = true;
+
+ if ( broadcast ) {
+ $scope.sendReloadEventFromRoot(broadcast, {data: broadcastedData, path: path});
+ }
+ };
+
+ $scope.closeWizard = function(wizardName) {
+ $scope.wizards[wizardName] = false;
+ };
+
+ $scope.updateList = function(list, object, key) {
+ var elementPos = list.map(function(x) {return x[key]; }).indexOf(object[key]);
+
+ if(elementPos < 0) {
+ list.push(object);
+ }
+ else {
+ list[elementPos] = object;
+ }
+ };
+
+ }]);
+
+ gbp.register.controller('governanceCtrl', ['$rootScope','$scope',
+ function ($rootScope, $scope) {
+ $scope.menuTpl = 'main-menu';
+ $scope.menuBox = null;
+ $scope.contentTpl = 'main';
+ // $scope.selectedTenant = null;
+ $scope.rendererList = [];
+ var broadcastObj = {};
+
+ $scope.rendererList.push({'name' : 'of_overlay', 'id' : 0});
+
+ $scope.toggleExpanded = function(expand, menu, tplType){
+ var type = tplType ? tplType : 'contentTpl';
+ $scope.menuBox = null;
+
+ $scope[type] = expand;
+
+ if ( menu && menu === false ) {
+ $scope.menuTpl = !menu ? null : menu;
+ }
+ };
+
+
+
+ $scope.setViewContent = function(tplName, data, broadcast, tplType) {
+
+ if ( $scope[tplType] === tplName ) {
+ $scope.$broadcast(broadcast, data, true);
+ } else {
+
+ broadcastObj[tplType] = {};
+ broadcastObj[tplType].name = broadcast;
+ broadcastObj[tplType].data = data;
+
+ $scope.toggleExpanded(tplName, null, tplType);
+ $scope.$apply();
+
+ }
+ };
+
+ $scope.broadcastCalling = function(tplType){
+ $scope.$broadcast(broadcastObj[tplType].name, broadcastObj[tplType].data);
+ };
+
+ $scope.checkBroadcastCalling = function(tplName){
+ var objClickAction = {
+ 'epg-detail': function(){
+ $scope.broadcastCalling('contentTpl');
+ },
+ 'subject-detail': function(){
+ $scope.broadcastCalling('contentTpl');
+ }
+ };
+
+ if ( angular.isFunction(objClickAction[tplName]) ) {
+ objClickAction[tplName]();
+ }
+
+ };
+
+
+ $scope.$on('GOV_INIT', function(){
+ $scope.menuTpl = 'main-menu';
+ $scope.contentTpl = 'main';
+ // $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');
+ $scope.menuBox = null;
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD', function(e, obj){
+ $scope.selectedTenant = obj;
+ });
+
+
+ }]);
+
+ gbp.register.controller('boxStaticCtrl',['$scope',
+ function($scope){
+
+ $scope.selectedObj = null;
+
+ $scope.getLabel = function(id, type){
+ var objAction = {
+ providerItems: function(){
+ var name = $scope.selectedObj[type][id].attributes.objData['name'];
+ return name ? name + ' : ' + id : id;
+ },
+ consumerItems: function(){
+ var name = $scope.selectedObj[type][id].attributes.objData['name'];
+ return name ? name + ' : ' + id : id;
+ }
+ };
+
+ if ( angular.isFunction(objAction[type]) ) {
+ return objAction[type]();
+ }
+ };
+
+ $scope.$on('SET_SEL_STA_OBJ', function(obj, data, apply){
+ $scope.selectedObj = data;
+
+ if ( apply ) {
+ $scope.$apply();
+ }
+
+ });
+
+ }]);
+
+ gbp.register.controller('graphCtrl', ['$scope', function($scope){
+ var paper = null,
+ paperScale = 1;
+
+ $scope.init = function(paperInstance){
+ paper = paperInstance;
+ $scope.loadMouseScrollEvent();
+ };
+
+
+ $scope.zoom = function(out){
+ paperScale = out ? paperScale - 0.1 : paperScale >= 1 ? 1 : paperScale + 0.1;
+ paper.scale(paperScale, paperScale);
+ };
+
+
+
+ $scope.loadMouseScrollEvent = function(){
+ /*mouse wheel event for zooming*/
+ var graph = document.getElementById('graph'),
+ MouseWheelHandler = function(e){
+ var mouseEvent = window.event || e; // old IE support
+ var delta = Math.max(-1, Math.min(1, (mouseEvent.wheelDelta || -mouseEvent.detail)));
+ $scope.zoom(delta === 1 ? false : true);
+ };
+
+ if (graph.addEventListener) {
+ // IE9, Chrome, Safari, Opera
+ graph.addEventListener("mousewheel", MouseWheelHandler, false);
+ // Firefox
+ graph.addEventListener("DOMMouseScroll", MouseWheelHandler, false);
+ }
+ // IE 6/7/8
+ else {graph.attachEvent("onmousewheel", MouseWheelHandler);}
+ /*mouse wheel event for zooming - end*/
+ };
+
+ }]);
+
+ gbp.register.controller('expressedPolicyCtrl', ['$scope', 'JointGraphFactory', 'JointGraphOffsetFactory', 'GBPConstants',
+ function ($scope, JointGraphFactory, JointGraphOffsetFactory, GBPConstants) {
+ var paper = JointGraphFactory.createGraph(),
+ epgItems = [],
+ contractItems = [],
+ linkItems = [];
+
+ var objClickAction = {
+ epg: function(data){
+ $scope.setViewContent('epg-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ },
+ contract: function(data){
+ $scope.setViewContent('contract-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ }
+ };
+
+ paper.on('cell:pointerdown', function(cell) {
+ if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {
+ objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);
+ }
+ });
+
+ var createEpgLinks = function(epg, epgItem, contracts) {
+ var providers = epg['provider-named-selector'] && epg['provider-named-selector'].length>0 ? epg['provider-named-selector'] : [];
+ var consumers = epg['consumer-named-selector'] && epg['consumer-named-selector'].length>0 ? epg['consumer-named-selector'] : [];
+ var consumerLinkItems = [];
+ var providerLinkItems = [];
+
+ consumers.forEach(function(c) {
+ c.contract.forEach(function(con) {
+ consumerLinkItems.push(JointGraphFactory.createLink(contracts[con].id, epgItem.id, 'green'));
+ });
+ });
+
+ providers.forEach(function(p) {
+ p.contract.forEach(function(con) {
+ providerLinkItems.push(JointGraphFactory.createLink(epgItem.id, contracts[con].id, 'blue'));
+ });
+ });
+
+ JointGraphFactory.addItemList(paper.model, providerLinkItems);
+ JointGraphFactory.addItemList(paper.model, consumerLinkItems);
+
+ };
+
+ var loadData = function() {
+ if($scope.selectedTenant) {
+ var offsetObj = {
+ ow: 100,
+ oh: 100,
+ w: 100,
+ h: 100
+ },
+ marginObj = {
+ w: 50,
+ h: 80
+ },
+ offsetHobj = {
+ contract: 0,
+ epg: 0
+ },
+ itemsArray = {
+ contract: [],
+ epg: []
+ };
+
+ JointGraphFactory.reloadGraph(paper.model);
+
+ if ( $scope.selectedTenant && $scope.selectedTenant.contract ) {
+
+ $scope.selectedTenant.contract.forEach(function(c, i) {
+ var label = c.description ? $scope.sliceLabel(c.description) : c.id,
+ width = JointGraphFactory.getLabelLength(label.length);
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.contract, c, 'Click to see contract info', GBPConstants.colors.graph['subject'], 'Contract');
+
+ itemsArray.contract.push(item);
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ contractItems[c.id] = item;
+ });
+
+ offsetHobj.contract = offsetObj.h;
+
+ }
+
+ if ( $scope.selectedTenant && $scope.selectedTenant['endpoint-group'] ) {
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h > 400 ? offsetObj.h : 400);
+ $scope.selectedTenant['endpoint-group'].forEach(function(e, i) {
+ var label = e.name || e.id,
+ width = JointGraphFactory.getLabelLength(label.length);
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.epg, e, 'Click to see epg info', GBPConstants.colors.graph['pns'], 'EP group');
+
+ itemsArray.epg.push(item);
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ epgItems[e.id] = item;
+
+ createEpgLinks(e, item, contractItems);
+ });
+
+ }
+
+ offsetHobj.epg = JointGraphOffsetFactory.getCurrentOffset(itemsArray.contract, 'y');
+ JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.epg ,offsetHobj.epg, paper);
+ }
+
+ };
+
+ $scope.getPaperObj = function(){
+ return paper;
+ };
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ if ($scope.selectedTenant) {
+ loadData();
+ }
+ else {
+ JointGraphFactory.reloadGraph(paper.model);
+ }
+ });
+
+ loadData();
+ }]);
+
+ gbp.register.controller('deliveredPolicyCtrl', ['$scope', 'GPBServices', 'JointGraphFactory', 'GBPGovernanceServices', 'JointGraphOffsetFactory', 'GBPConstants',
+ function ($scope, GPBServices, JointGraphFactory, GBPGovernanceServices, JointGraphOffsetFactory, GBPConstants) {
+ var paper = JointGraphFactory.createGraph(),
+ providerItems = {},
+ consumerItems = {},
+ subjectItems = {};
+
+ var getEpList = function() {
+ var providerEpKeys = Object.keys(providerItems),
+ consumerEpKeys = Object.keys(consumerItems),
+ epList = providerEpKeys.map(function (k) {
+ return providerItems[k].attributes.objData;
+ });
+
+ consumerEpKeys.forEach(function(k) {
+ if(providerEpKeys.indexOf(k) === -1) {
+ epList.push(consumerItems[k].attributes.objData);
+ }
+ });
+
+ return epList;
+ };
+
+ var getSubjList = function() {
+ return Object.keys(subjectItems).map(function (k) {
+ return subjectItems[k].attributes.objData;
+ });
+ };
+
+ var objClickAction = {
+ subject: function(data){
+ data.providerItems = providerItems;
+ data.consumerItems = consumerItems;
+ $scope.setViewContent('subject-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ },
+ consumer: function(data) {
+ $scope.setViewContent('epg-content-static', data, 'SET_SEL_STA_OBJ', 'menuBox');
+ },
+ provider: function(data) {
+ $scope.setViewContent('epg-content-static', data, 'SET_SEL_STA_OBJ', 'menuBox');
+ }
+ };
+
+ var objDblClickAction = {
+ consumer: function(data){
+ $scope.setBreadcrumb('l3', 'Endpoint group detail', true);
+ $scope.setViewContent('epg-detail', { ep: data, epList: getEpList() }, 'SET_SELECTED_EPG','contentTpl');
+ },
+ provider: function(data){
+ $scope.setBreadcrumb('l3', 'Endpoint group detail', true);
+ $scope.setViewContent('epg-detail', { ep: data, epList: getEpList() }, 'SET_SELECTED_EPG','contentTpl');
+ },
+ subject: function(data) {
+ var obj = { subject: data,
+ subjList: Object.keys(subjectItems).map(function (k) {
+ return subjectItems[k].attributes.objData;
+ }),
+ providerItems: providerItems,
+ consumerItems: consumerItems
+ };
+ $scope.setBreadcrumb('l3', 'Subject detail', true);
+ $scope.setViewContent('subject-detail', obj, 'SET_SELECTED_SUBJECT','contentTpl');
+ }
+ };
+
+ paper.on('cell:pointerdown', function(cell) {
+ if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {
+ objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);
+ }
+ });
+
+ paper.on('cell:pointerdblclick', function(cell) {
+ objDblClickAction[cell.model.attributes.objType](cell.model.attributes.objData);
+ });
+
+ var createSubjectLinks = function(subject, subjectItem, providerItems, consumerItems) {
+ var providerLinkItems = subject.providers.map(function(p) {
+ return JointGraphFactory.createLink(providerItems[p].id, subjectItem.id, 'green');
+ });
+ consumerLinkItems = subject.consumers.map(function(c) {
+ return JointGraphFactory.createLink(subjectItem.id, consumerItems[c].id, 'blue');
+ });
+
+ JointGraphFactory.addItemList(paper.model, providerLinkItems);
+ JointGraphFactory.addItemList(paper.model, consumerLinkItems);
+ };
+
+ var loadData = function() {
+ if($scope.selectedTenant) {
+ providerItems = {};
+ consumerItems = {};
+ subjectItems = {};
+
+ var classifierInstances = $scope.selectedTenant['subject-feature-instances'] &&
+ $scope.selectedTenant['subject-feature-instances']['classifier-instance'] &&
+ $scope.selectedTenant['subject-feature-instances']['classifier-instance'].length > 0 ? $scope.selectedTenant['subject-feature-instances']['classifier-instance'] : [];
+
+ var offsetObj = {
+ ow: 100,
+ oh: 100,
+ w: 100,
+ h: 100
+ },
+ marginObj = {
+ w: 50,
+ h: 80
+ },
+ offsetHobj = {
+ pEpg: 0,
+ cEpg: 0,
+ subject: 0
+ },
+ itemsArray = {
+ pEpg: [],
+ cEpg: [],
+ subject: []
+ };
+
+ JointGraphFactory.reloadGraph(paper.model);
+
+ GBPGovernanceServices.getEPGsAndSubjects($scope.selectedTenant.id, classifierInstances, function(data){
+ data.providers.forEach(function(p, i) {
+ var relatedObj = GPBServices.getPropFromListByProp($scope.selectedTenant['endpoint-group'], 'id', p.id),
+ label = relatedObj.name || p.id,
+ width = JointGraphFactory.getLabelLength(label.length);
+
+ relatedObj.rules = p.rules;
+ var item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.provider, relatedObj, 'Click to see epg info, doubleclick to see Endpoint group detail', GBPConstants.colors.graph['pns'], 'Provider EPG');
+
+ itemsArray.pEpg.push(item);
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ providerItems[p.id] = item;
+ });
+
+ offsetHobj.pEpg = offsetObj.h;
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 500);
+ data.consumers.forEach(function(c, i) {
+ var relatedObj = GPBServices.getPropFromListByProp($scope.selectedTenant['endpoint-group'], 'id', c.id),
+ label = relatedObj.name || c.id,
+ width = JointGraphFactory.getLabelLength(label.length);
+
+ relatedObj.rules = c.rules;
+ var item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.consumer, relatedObj, 'Click to see epg info, doubleclick to see Endpoint group detail', GBPConstants.colors.graph['cns'], 'Consumer EPG');
+
+ itemsArray.cEpg.push(item);
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ consumerItems[c.id] = item;
+ });
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetHobj.pEpg > 300 ? offsetHobj.pEpg : 300);
+ data.subjects.forEach(function(s, i) {
+ var label = s.name,
+ width = JointGraphFactory.getLabelLength(label.length),
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.subject, s, 'Click to see subject info, doubleclick to see Subject detail', GBPConstants.colors.graph['subject'], 'Subject');
+
+ itemsArray.subject.push(item);
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ subjectItems[s.name] = item;
+ createSubjectLinks(s, item, providerItems, consumerItems);
+ });
+
+ offsetHobj.pEpg = JointGraphOffsetFactory.getCurrentOffset(itemsArray.pEpg, 'y');
+ JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.subject ,offsetHobj.pEpg, paper);
+ offsetHobj.subject = JointGraphOffsetFactory.getCurrentOffset(itemsArray.subject, 'y');
+ JointGraphOffsetFactory.checkObjsHoffsets(itemsArray.cEpg ,offsetHobj.subject, paper);
+
+ }, function(){});
+
+ }
+
+
+ // paper.scaleContentToFit();
+ // paper.fitToContent();
+ };
+
+ $scope.getPaperObj = function(){
+ return paper;
+ };
+
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ if ($scope.selectedTenant) {
+ loadData();
+ }
+ else {
+ JointGraphFactory.reloadGraph(paper.model);
+ }
+ });
+
+ loadData();
+ }]);
+
+ gbp.register.controller('subjectDetailCtrl', ['$scope', 'GPBServices', 'JointGraphFactory', 'GBPGovernanceServices', 'JointGraphOffsetFactory', 'GBPConstants',
+ function ($scope, GPBServices, JointGraphFactory, GBPGovernanceServices, JointGraphOffsetFactory, GBPConstants) {
+ $scope.selectedSubject = null;
+ $scope.subjectList = [];
+
+ var paper = JointGraphFactory.createGraph(),
+ subjectItem = null,
+ ruleItems = {},
+ subjectItems = {};
+
+ var createSubjectLinks = function(subjectItem, ruleItem) {
+ var linkItem = JointGraphFactory.createLink(subjectItem.id, ruleItem.id, 'blue');
+ JointGraphFactory.addItem(paper.model, linkItem);
+ };
+
+ paper.on('cell:pointerdown', function(cell) {
+ var objClickAction = {
+ subject: function(data){
+ $scope.setViewContent('subject-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ },
+ rule: function(data){
+ $scope.setViewContent('rule-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ }
+ };
+
+ // console.log('cell.model.attributes.objType', cell.model.attributes.objType, cell.model.attributes.objData);
+ if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {
+ objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);
+ }
+ });
+
+ var loadData = function() {
+ if($scope.selectedSubject) {
+ subjectItem = null;
+ ruleItems = {};
+
+ var offsetObj = {
+ ow: 100,
+ oh: 100,
+ w: 100,
+ h: 100
+ },
+ marginObj = {
+ w: 50,
+ h: 80
+ };
+
+ JointGraphFactory.reloadGraph(paper.model);
+
+ var label = $scope.selectedSubject.name || $scope.selectedSubject.id,
+ width = JointGraphFactory.getLabelLength(label.length);
+ subjectItem = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.subject, $scope.selectedSubject, 'Click to see subject info', GBPConstants.colors.graph['subject'], 'Subject');
+
+ JointGraphFactory.addItem(paper.model, subjectItem);
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 300);
+ $scope.selectedSubject.rules.forEach(function(r, i) {
+ var label = r.name,
+ width = JointGraphFactory.getLabelLength(label.length);
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.objType.rule, r, 'Click to see rule info', GBPConstants.colors.graph['cns'], 'Rule');
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ ruleItems[r.name] = item;
+
+ createSubjectLinks(subjectItem, item);
+ });
+ }
+ };
+
+ $scope.getPaperObj = function(){
+ return paper;
+ };
+
+ $scope.$on('SET_SELECTED_SUBJECT', function(event, data){
+ $scope.selectedSubject = data.subject;
+ $scope.subjectList = data.subjList;
+ loadData();
+ });
+
+ $scope.setSubject = function(subject) {
+ $scope.selectedSubject = subject;
+ loadData();
+ };
+
+ loadData();
+ }]);
+
+ gbp.register.controller('epgDetailCtrl', ['$scope', 'JointGraphFactory', 'TopologyDataLoaders', 'GBPEpgServices', 'JointGraphOffsetFactory', 'GBPConstants',
+ function ($scope, JointGraphFactory, TopologyDataLoaders, GBPEpgServices, JointGraphOffsetFactory, GBPConstants) {
+ var paper = JointGraphFactory.createGraph(),
+ epgItem = {},
+ epItems = {};
+
+ $scope.epgDisplayLabel = ['name', 'id'];
+ $scope.epgList = [];
+ $scope.selectedEpg = null;
+
+ $scope.$on('SET_SELECTED_EPG', function(event, epg){
+ $scope.selectedEpg = epg.ep;
+ $scope.epgList = epg.epList;
+ loadData();
+ });
+
+ $scope.setEpg = function(epg){
+ selectedEpg = epg;
+ loadData();
+ };
+
+ paper.on('cell:pointerdown', function(cell) {
+ var objClickAction = {
+ ep: function(data){
+ $scope.setViewContent('ep-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ },
+ epg: function(data){
+ $scope.setViewContent('epg-content-static',data, 'SET_SEL_STA_OBJ', 'menuBox');
+ },
+ };
+
+ if ( angular.isFunction(objClickAction[cell.model.attributes.objType]) ) {
+ objClickAction[cell.model.attributes.objType](cell.model.attributes.objData);
+ }
+ });
+
+ var loadData = function() {
+ if($scope.selectedTenant && $scope.selectedEpg) {
+ epgItem = {};
+ epItems = {};
+ links = [];
+
+ JointGraphFactory.reloadGraph(paper.model);
+
+ TopologyDataLoaders.getEndpointsFromEndpointGroup($scope.selectedTenant.id, $scope.selectedEpg.id, function(data){
+ var offsetObj = {
+ ow: 100,
+ oh: 100,
+ w: 100,
+ h: 100
+ },
+ marginObj = {
+ w: 50,
+ h: 80
+ };
+
+ var label = $scope.selectedEpg.name || $scope.selectedEpg.id,
+ width = JointGraphFactory.getLabelLength(label.length);
+ epgItem = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, 'epg', $scope.selectedEpg, 'Click to see epg info', GBPConstants.colors.graph['subject'], 'EPG');
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);
+ JointGraphFactory.addItem(paper.model, epgItem);
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, 500);
+ if(data && data.output && data.output['ui-endpoint'] && data.output['ui-endpoint'].length){
+ data.output['ui-endpoint'].forEach(function(ep, i){
+ var label = ep['mac-address'] + ':' + ep['l2-context'],
+ width = JointGraphFactory.getLabelLength(label.length);
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, 'ep', ep, 'Click to see ep info', GBPConstants.colors.graph['pns'], 'Endpoint');
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ epItems[label] = item;
+ links.push(JointGraphFactory.createLink(item.id, epgItem.id, 'green'));
+ });
+
+ JointGraphFactory.addItemList(paper.model, links);
+ }
+ }, function(){});
+ }
+ };
+
+ $scope.getPaperObj = function(){
+ return paper;
+ };
+
+ // init();
+ }]);
+
+ gbp.register.controller('policyRendererCtrl', ['$scope', '$http', '$timeout', 'PGNServices', 'TopoServices', 'GBPTenantServices', 'GBPConstants', 'JointGraphFactory','GBPJointGraphBuilder',
+ function ($scope, $http, $timeout, PGNServices, TopoServices, GBPTenantServices, GBPConstants, JointGraphFactory, GBPJointGraphBuilder) {
+
+ $scope.topologyData = { nodes: [], links: [] };
+ $scope.topologyType = null;
+ $scope.topologyArgs = {};
+ $scope.legend = {};
+ $scope.showLegend = false;
+
+ var paper = JointGraphFactory.createGraph();
+
+ var reloadShowLegend = function() {
+ $scope.showLegend = !$.isEmptyObject($scope.legend);
+ };
+
+ $scope.settingsSigma = {
+ defaultLabelColor: '#fff',
+ doubleClickEnabled: false,
+ labelThreshold: 8
+ };
+
+ $scope.settingsAtlas = {
+ adjustSizes: true,
+ gravity: 0.2
+ };
+
+ $scope.viewTopo = {
+ box: false,
+ button: false
+ };
+
+ paper.on('cell:pointerdown', function(cellView, evt) {
+ if (cellView.model.isLink() && cellView.model.attributes.objData) {
+ $scope.$broadcast('SET_LINK_DATA', cellView.model.attributes.objData);
+ }
+ });
+
+ $scope.mandatoryProperties = [];
+ $scope.loadTopology = function(type, args) {
+ if ($scope.selectedTenant) {
+ $scope.topologyType = type;
+ $scope.topologyArgs = args;
+ GBPJointGraphBuilder.loadTopology(args, paper, type);
+ }
+ };
+ $scope.toggleExpanded = function(expand, show) {
+ $scope.setViewExpand('policyRendererView',expand, show, 'l2');
+
+ if($scope.policyRendererView[expand] && $scope.selectedTenant) {
+ $scope.topologyArgs.tenantId = $scope.selectedTenant.id;
+
+ if((expand === 'epg' || expand === 'contracts' || expand === 'classifiers' || expand === 'actions' || expand === 'renderers') && ($scope.topologyType !== GBPConstants.strings.config)) {
+ $scope.loadTopology(GBPConstants.strings.config, $scope.topologyArgs);
+ } else if((expand === 'l2l3' || expand === 'registerEndpoint' || expand === 'registerL3PrefixEndpoint') && ($scope.topologyType !== GBPConstants.strings.l2l3)) {
+ $scope.loadTopology(GBPConstants.strings.l2l3, $scope.topologyArgs);
+ }
+ }
+ };
+
+ $scope.reloadTopo = function() {
+ if($scope.selectedTenant) {
+ $scope.topologyArgs.tenantId = $scope.selectedTenant.id;
+ GBPJointGraphBuilder.loadTopology($scope.topologyArgs, paper, $scope.topologyType);
+ }
+ };
+
+ $scope.getDisplayLabelsFromCtrl = function(eventName, val) {
+ $scope.$broadcast(eventName, val);
+ };
+
+ $scope.validateMandatory = function(newObj, mandatoryProps){
+ var ret = true,
+ notFilledProps = [];
+
+ mandatoryProps.forEach(function(el){
+ if(newObj[el] === '' || newObj[el] === null || newObj[el] === undefined){
+ notFilledProps.push(el);
+ ret = false;
+ }
+ });
+
+ return {'status' : ret, 'notFilledProps' : notFilledProps};
+ };
+
+ $scope.validate = function(value, errors){
+ errors.int32 = !(parseInt(value) >= -2147483648 && parseInt(value) <= 2147483647);
+ };
+
+
+
+ $scope.validateForm = function(form) {
+ return form.$valid;
+ };
+
+ $scope.$on('GBP_TENANT_RELOAD', function(e, obj){
+ $scope.selectedTenant = obj;
+ });
+
+ }]);
+
+ gbp.register.controller('linkDataCtrl',['$scope', function($scope){
+ $scope.showTable = false;
+
+ $scope.show = function(){
+ $scope.showTable = true;
+ };
+
+ $scope.close = function(){
+ $scope.showTable = false;
+ };
+
+ $scope.$on('SET_LINK_DATA', function(e, obj){
+ $scope.linkData = obj;
+ $scope.show();
+ $scope.$apply();
+ });
+ }]);
+
+ gbp.register.controller('crudCtrl',['$scope', function($scope){
+ $scope.selectedObj = null;
+ $scope.label = '';
+ $scope.q = {};
+
+ $scope.add = function() {
+ $scope.selectedObj = null;
+ $scope.showForm();
+ };
+
+ $scope.modify = function() {
+ $scope.$emit('PGN_EDIT_ELEM');
+ };
+
+ $scope.init = function(label) {
+ $scope.label = label;
+ };
+
+
+ $scope.$on('EV_SET_SEL_CLASS', function(event, selObj){
+ $scope.selectedObj = selObj;
+ });
+ }]);
+
+ gbp.register.controller('contractCtrl', ['$scope','GBPContractServices', '$filter', function($scope, GBPContractServices, $filter){
+ $scope.list = [];
+ $scope.selectedContract = null;
+ $scope.newContractObj = GBPContractServices.createObj();
+ $scope.displayLabel = ['description','id'];
+ $scope.crudLabel = 'Contract list';
+
+ $scope.internalView = {
+ contract: false,
+ edit: "view"
+ };
+
+ var path = null,
+ mandatoryProperties = [],
+ clear = function(){
+ $scope.list = [];
+ $scope.internalView = {
+ contract: false,
+ edit: "view"
+ };
+ $scope.selectedContract = null;
+ $scope.newContractObj = GBPContractServices.createObj();
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ $scope.selectedContract = null;
+ path = GBPContractServices.createPathObj($scope.selectedTenant.id);
+
+ GBPContractServices.load(path, function(data){
+ $scope.list = data;
+ // $scope.$broadcast('GBP_CONTRACT_RELOAD');
+ $scope.sendReloadEventFromRoot('GBP_CONTRACT_RELOAD');
+ }, function(){
+
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ var resp = $scope.validateMandatory($scope.newContractObj, mandatoryProperties);
+ if(resp.status){
+ path = GBPContractServices.createPathObj($scope.selectedTenant.id, $scope.newContractObj.id);
+ GBPContractServices.send(path, $scope.newContractObj, function(data){
+ $scope.init();
+ $scope.internalView.contract = false;
+ $scope.reloadNewObj();
+ $scope.internalView.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ alert($filter('translate')('GBP_MANDATORY_NOT_FILLED')+': '+resp.notFilledProps.join(', '));
+ }
+ };
+
+ $scope.delete = function() {
+ if ( $scope.selectedContract ) {
+ path = GBPContractServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);
+ GBPContractServices.delete(path, function(data){
+ $scope.init();
+ $scope.selectedContract = null;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newContractObj = GBPContractServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedContract = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.contract = true;
+ }else {
+ $scope.internalView.contract = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.contract) {
+ angular.copy(selectedObj, $scope.newContractObj);
+ }
+ $scope.sendReloadEventFromRoot('GBP_CONTRACT_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.contract = true;
+ $scope.selectedContract = null;
+ $scope.internalView.edit = "add";
+ };
+
+ $scope.close = function(){
+ $scope.internalView.contract = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if(!event.defaultPrevented) {
+ if ( $scope.selectedContract ) {
+ $scope.internalView.contract = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedContract, $scope.newContractObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(event){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_CONTRACTS_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('clauseCtrl', ['$scope','GBPClauseServices', 'GBPSubjectServices',
+ function($scope, GBPClauseServices, GBPSubjectServices){
+ $scope.list = [];
+ $scope.selectedClause = null;
+ $scope.newClauseObj = GBPClauseServices.createObj();
+ $scope.internalView = {
+ clause: false,
+ edit: "view"
+ };
+ $scope.displayLabel = 'name';
+ $scope.crudLabel = 'Clause list';
+
+ $scope.subjects = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);
+
+ var path = null,
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedClause = null;
+ $scope.newClauseObj = GBPClauseServices.createObj();
+ $scope.internalView = {
+ clause: false,
+ edit: "view"
+ };
+ };
+
+ //move to separate ctrl \/
+ $scope.addNewElem = function(templateObj) {
+ if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {
+ var objToPush = templateObj || "";
+ $scope.newClauseObj['subject-refs'].push(objToPush);
+ }
+ };
+
+ $scope.deleteElemAt = function(index) {
+ if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {
+ $scope.newClauseObj['subject-refs'].splice(index, 1);
+ }
+ };
+
+ $scope.updateAt = function(index, value) {
+ if($scope.newClauseObj && $scope.newClauseObj['subject-refs'] && $scope.newClauseObj['subject-refs'].length >= index) {
+ $scope.newClauseObj['subject-refs'][index] = value;
+ }
+ };
+ //move to separate ctrl /\
+
+ var loadSubjects = function() {
+ $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);
+
+ GBPSubjectServices.load(path, function(data){
+ $scope.subjects.options = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedContract ) {
+ path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);
+
+ GBPClauseServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.clauseForm)){
+ path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.newClauseObj.name);
+ GBPClauseServices.send(path, $scope.newClauseObj, function(data){
+ $scope.init();
+ $scope.internalView.clause = false;
+ $scope.reloadNewObj();
+ $scope.internalView.clause = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if ( $scope.selectedClause ) {
+ path = GBPClauseServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedClause.name);
+ GBPClauseServices.delete(path, function(data){
+ $scope.init();
+ $scope.selectedClause = null;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newClauseObj = GBPClauseServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedClause = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.clause = true;
+ }else {
+ $scope.internalView.clause = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.clause) {
+ angular.copy(selectedObj, $scope.newClauseObj);
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.clause = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedClause = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.clause = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedClause ) {
+ $scope.internalView.clause = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedClause, $scope.newClauseObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_CONTRACT_RELOAD',function(){
+ $scope.internalView.clause = false;
+ $scope.init();
+ });
+
+ $scope.$on('GBP_SUBJECT_RELOAD',function(){
+ loadSubjects();
+ });
+ }]);
+
+ gbp.register.controller('subjectCtrl', ['$scope','GBPSubjectServices', '$filter', function($scope, GBPSubjectServices, $filter){
+ $scope.list = [];
+ $scope.selectedSubject = null;
+ $scope.newSubjectObj = GBPSubjectServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ subject : false,
+ edit : "view"
+ };
+ $scope.crudLabel = 'Subject list';
+ $scope.errors = {};
+
+ var path = null,
+ mandatoryProperties = ['order'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedSubject = null;
+ $scope.newSubjectObj = GBPSubjectServices.createObj();
+ $scope.internalView = {
+ subject : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedContract ) {
+ $scope.selectedSubject = null;
+ path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id);
+
+ GBPSubjectServices.load(path, function(data){
+ $scope.list = data;
+ $scope.sendReloadEventFromRoot('GBP_SUBJECT_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.subjectForm)){
+ path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.newSubjectObj.name);
+ GBPSubjectServices.send(path, $scope.newSubjectObj, function(data){
+ $scope.init();
+ $scope.internalView.subject = false;
+ $scope.reloadNewObj();
+ $scope.internalView.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if ( $scope.selectedSubject ) {
+ path = GBPSubjectServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name);
+ GBPSubjectServices.delete(path, function(data){
+ $scope.init();
+ $scope.selectedSubject = null;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newSubjectObj = GBPSubjectServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedSubject = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.subject = true;
+ }else {
+ $scope.internalView.subject = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.subject) {
+ angular.copy(selectedObj, $scope.newSubjectObj);
+ }
+ $scope.sendReloadEventFromRoot('GBP_SUBJECT_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.subject = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedSubject = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.subject = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedSubject ) {
+ $scope.internalView.subject = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedSubject, $scope.newSubjectObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_CONTRACT_RELOAD',function(){
+ $scope.internalView.subject = false;
+ $scope.init();
+ });
+
+ $scope.$on('GBP_SUBJECTS_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('ruleCtrl', ['$scope','GBPRuleServices', '$filter', function($scope, GBPRuleServices, $filter){
+ $scope.list = [];
+ $scope.selectedRule = null;
+ $scope.newRuleObj = GBPRuleServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ rule : false,
+ edit : "view"
+ };
+ $scope.crudLabel = 'Rule list';
+ $scope.errors = {};
+
+ var path = null,
+ mandatoryProperties = ['order'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedRule = null;
+ $scope.newRuleObj = GBPRuleServices.createObj();
+ $scope.internalView = {
+ rule : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedSubject ) {
+ $scope.selectedRule = null;
+ path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name);
+
+ GBPRuleServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.rulesForm)){
+ path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.newRuleObj.name);
+ GBPRuleServices.send(path, $scope.newRuleObj, function(data){
+ $scope.init();
+ $scope.internalView.rule = false;
+ $scope.reloadNewObj();
+ $scope.internalView.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if ( $scope.selectedRule ) {
+ path = GBPRuleServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);
+ GBPRuleServices.delete(path, function(data){
+ $scope.init();
+ $scope.selectedRule = null;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newRuleObj = GBPRuleServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedRule = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.rule = true;
+ }else {
+ $scope.internalView.rule = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.rule) {
+ angular.copy(selectedObj, $scope.newRuleObj);
+ }
+ $scope.$broadcast('GBP_RULE_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.rule = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedRule = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.rule = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedRule ) {
+ $scope.internalView.rule = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedRule, $scope.newRuleObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_SUBJECT_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('actionRefCtrl', ['$scope','GBPActionRefsServices', 'GBPActionInstanceServices', '$filter', function($scope, GBPActionRefsServices, GBPActionInstanceServices, $filter){
+ $scope.list = [];
+ $scope.selectedActionRef = null;
+ $scope.newActionRefObj = GBPActionRefsServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ actionRef : false,
+ edit : "view"
+ };
+ $scope.crudLabel = 'Action ref list';
+ $scope.errors = {};
+
+ $scope.actionInstanceNames = {'options' : [], 'labels' : $scope.displayLabel};
+
+ var path = null,
+ mandatoryProperties = ['order'],
+
+ actionInstanceNamesLoad = function() {
+ var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);
+ GBPActionInstanceServices.load(actionInstancePath, function(data){
+ $scope.actionInstanceNames.options = data;
+ },function(){
+ //TODO: error cbk
+ });
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedActionRef = null;
+ $scope.newActionRefObj = GBPActionRefsServices.createObj();
+ $scope.internalView = {
+ actionRef : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedRule ) {
+ $scope.selectedActionRef = null;
+ path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);
+
+ GBPActionRefsServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+
+ actionInstanceNamesLoad();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.actionRefForm)){
+ path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.newActionRefObj.name);
+ GBPActionRefsServices.send(path, $scope.newActionRefObj, function(data){
+ $scope.init();
+ $scope.internalView.actionRef = false;
+ $scope.reloadNewObj();
+ $scope.internalView.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if ( $scope.selectedActionRef ) {
+ path = GBPActionRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.selectedActionRef.name);
+ GBPActionRefsServices.delete(path, function(data){
+ $scope.init();
+ $scope.selectedActionRef = null;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newActionRefObj = GBPActionRefsServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedActionRef = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.actionRef = true;
+ }else {
+ $scope.internalView.actionRef = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.actionRef) {
+ angular.copy(selectedObj, $scope.newActionRefObj);
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.actionRef = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedActionRef = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.actionRef = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedActionRef ) {
+ $scope.internalView.actionRef = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedActionRef, $scope.newActionRefObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_RULE_RELOAD',function(){
+ $scope.internalView.actionRef = false;
+ $scope.init();
+ });
+
+ $scope.$on('GBP_ACTION_INSTANCE_RELOAD',function(){
+ actionInstanceNamesLoad();
+ });
+ }]);
+
+ gbp.register.controller('classifierRefCtrl', ['$scope','GBPClassifierRefsServices', 'GBPClassifierInstanceServices', '$filter', function($scope, GBPClassifierRefsServices, GBPClassifierInstanceServices, $filter){
+ $scope.list = [];
+ $scope.selectedClassifierRef = null;
+ $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ classifierRef : false,
+ edit : "view"
+ };
+
+ $scope.instanceNames = {'options' : [], 'labels' : $scope.displayLabel};
+
+ $scope.formDirections = ['in', 'out', 'bidirectional'];
+ $scope.formConnectionTracking = ['normal', 'reflexive'];
+
+ $scope.crudLabel = 'Classifier ref list';
+
+ var path = null,
+
+ instanceNamesLoad = function() {
+ var classifierInstancePath = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id);
+ GBPClassifierInstanceServices.load(classifierInstancePath, function(data){
+ $scope.instanceNames.options = data;
+ },function(){
+ //TODO: error cbk
+ });
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedClassifierRef = null;
+ $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();
+ $scope.internalView = {
+ classifierRef : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedRule ) {
+ $scope.selectedClassifierRef = null;
+ path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name);
+
+
+
+ GBPClassifierRefsServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+
+ instanceNamesLoad();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.classifierRefForm)){
+ path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.newClassifierRefObj.name);
+ GBPClassifierRefsServices.send(path, $scope.newClassifierRefObj, function(data){
+ $scope.init();
+ $scope.internalView.classifierRef = false;
+ $scope.reloadNewObj();
+ $scope.internalView.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if ( $scope.selectedClassifierRef ) {
+ path = GBPClassifierRefsServices.createPathObj($scope.selectedTenant.id, $scope.selectedContract.id, $scope.selectedSubject.name, $scope.selectedRule.name, $scope.selectedClassifierRef.name);
+ GBPClassifierRefsServices.delete(path, function(data){
+ $scope.init();
+ $scope.selectedClassifierRef = null;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedClassifierRef = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.classifierRef = true;
+ }else {
+ $scope.internalView.classifierRef = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.classifierRef) {
+ angular.copy(selectedObj, $scope.newClassifierRefObj);
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.classifierRef = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedClassifierRef = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.classifierRef = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedClassifierRef ) {
+ $scope.internalView.classifierRef = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedClassifierRef, $scope.newClassifierRefObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_RULE_RELOAD',function(){
+ $scope.internalView.classifierRef = false;
+ $scope.init();
+ });
+
+ $scope.$on('GBP_CLASSIFIER_INSTANCE_RELOAD',function(){
+ instanceNamesLoad();
+ });
+ }]);
+
+ gbp.register.controller('tenantCtrl', ['$scope', 'GBPTenantServices', '$filter', function($scope, GBPTenantServices, $filter){
+ $scope.list = [];
+ $scope.selectedTenantObj = null;
+ $scope.newTenantObj = GBPTenantServices.createObj();
+ $scope.displayLabel = ['name' , 'id'];
+ $scope.crudLabel = 'Tenants list';
+
+ $scope.view = {
+ tenant: false,
+ edit: "view"
+ };
+
+ $scope.init = function() {
+ GBPTenantServices.load(
+ function(data) {
+ $scope.list = data;
+ $scope.newTenantObj = GBPTenantServices.createObj();
+ $scope.selectedTenantObj = null;
+ },
+ function(){
+ //TODO error
+ });
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.tenantForm)){
+ path = GBPTenantServices.createPathObj($scope.newTenantObj.id);
+ GBPTenantServices.send(path, $scope.newTenantObj, function(data){
+ $scope.init();
+ $scope.view.tenant = false;
+ $scope.view.edit = "view";
+ $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenantObj) {
+ path = GBPTenantServices.createPathObj($scope.selectedTenantObj.id);
+
+ GBPTenantServices.delete(path, function(data){
+ $scope.init();
+ $scope.view.tenant = false;
+ $scope.$emit('GBP_GLOBAL_TENANT_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedTenantObj = selectedObj;
+
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.tenant = true;
+ }
+ else {
+ $scope.view.tenant = false;
+ $scope.view.edit = "view";
+ }
+
+ if ($scope.view.tenant) {
+ angular.copy(selectedObj, $scope.newTenantObj);
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.newTenantObj = GBPTenantServices.createObj();
+ $scope.selectedTenantObj = null;
+ $scope.view.tenant = true;
+ $scope.view.edit = "add";
+ };
+
+ $scope.close = function(){
+ $scope.view.tenant = false;
+ $scope.view.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedTenantObj ) {
+ $scope.view.tenant = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedTenantObj, $scope.newTenantObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_GLOBAL_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('epgCtrl',['$scope', 'GBPEpgServices', 'GBPContractServices', '$filter',
+ function($scope, GBPEpgServices, GBPContractServices, $filter){
+ $scope.selectedEpg = null;
+ $scope.newEpgObj = GBPEpgServices.createObj();
+ $scope.displayLabel = ['name', 'id'];
+ $scope.crudLabel = 'Group list';
+
+ $scope.igpOpts = ['allow', 'require-contract'];
+
+ $scope.contracts = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contracts);
+
+ $scope.list = [];
+
+ $scope.internalView = {
+ epg: false,
+ edit: "view"
+ };
+
+ var loadContracts = function() {
+ GBPContractServices.load(path, function(data){
+ $scope.contracts.options = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ },
+
+ mandatoryProperties = ['name'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedEpg = null;
+ $scope.newEpgObj = GBPEpgServices.createObj();
+ $scope.internalView = {
+ epg: false,
+ edit: "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ($scope.selectedTenant) {
+ path = GBPEpgServices.createPathObj($scope.selectedTenant.id);
+
+ GBPEpgServices.load(path, function(data){
+ $scope.list = data;
+ // $scope.$broadcast('GBP_EPG_RELOAD');
+ $scope.sendReloadEventFromRoot('GBP_EPG_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+
+ loadContracts();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.epgForm)){
+ path = GBPEpgServices.createPathObj($scope.selectedTenant.id, $scope.newEpgObj.id);
+ GBPEpgServices.send(path, $scope.newEpgObj, function(data){
+ $scope.init();
+ $scope.internalView.epg = false;
+ $scope.reloadNewObj();
+ $scope.internalView.edit = "view";
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedEpg) {
+ path = GBPEpgServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);
+ GBPEpgServices.delete(path, function(data){
+ $scope.init();
+ $scope.internalView.epg = false;
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.internalView.epg = true;
+ $scope.reloadNewObj();
+ $scope.selectedEpg = null;
+ $scope.internalView.edit = "add";
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newEpgObj = GBPEpgServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedEpg = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.epg = true;
+ }else {
+ $scope.internalView.epg = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.epg) {
+ angular.copy(selectedObj, $scope.newEpgObj);
+ }
+ $scope.sendReloadEventFromRoot('GBP_EPG_RELOAD');
+ };
+
+ $scope.close = function(){
+ $scope.internalView.epg = false;
+ $scope.internalView.edit = "view";
+ };
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEpg ) {
+ $scope.internalView.epg = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedEpg, $scope.newEpgObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_CONTRACT_RELOAD',function(){
+ loadContracts();
+ });
+
+ $scope.$on('GBP_EPG_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('cnsCtrl',['$scope', 'GBPConNamedSelServices', function($scope, GBPConNamedSelServices){
+ $scope.list = [];
+ $scope.selectedCNS = null;
+ $scope.newCNSObj = GBPConNamedSelServices.createObj();
+ $scope.internalView = {
+ cns: false,
+ edit: "view"
+ };
+ $scope.displayLabel = 'name';
+ $scope.crudLabel = 'Consumer named selectors list';
+
+ var clear = function(){
+ $scope.list = [];
+ $scope.selectedCNS = null;
+ $scope.newCNSObj = GBPConNamedSelServices.createObj();
+ $scope.internalView = {
+ cns: false,
+ edit: "view"
+ };
+ };
+
+ //move to separate ctrl \/
+ $scope.addNewElem = function(templateObj) {
+ if($scope.newCNSObj && $scope.newCNSObj.contract) {
+ var objToPush = templateObj || "";
+ $scope.newCNSObj.contract.push(objToPush);
+ }
+ };
+
+ $scope.deleteElemAt = function(index) {
+ if($scope.newCNSObj && $scope.newCNSObj.contract) {
+ $scope.newCNSObj.contract.splice(index, 1);
+ }
+ };
+
+ $scope.updateAt = function(index, value) {
+ if($scope.newCNSObj && $scope.newCNSObj.contract && $scope.newCNSObj.contract.length >= index) {
+ $scope.newCNSObj.contract[index] = value;
+ }
+ };
+ //move to separate ctrl /\
+
+ $scope.init = function() {
+ if ($scope.selectedTenant && $scope.selectedEpg) {
+ path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);
+
+ GBPConNamedSelServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.cnsForm)){
+ path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.newCNSObj.name);
+ GBPConNamedSelServices.send(path, $scope.newCNSObj, function(data){
+ $scope.init();
+ $scope.internalView.cns = false;
+ $scope.internalView.cns = "view";
+ $scope.reloadNewObj();
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedEpg && $scope.selectedCNS) {
+ path = GBPConNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.selectedCNS.name);
+ GBPConNamedSelServices.delete(path, function(data){
+ $scope.init();
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.selectedCNS = null;
+ $scope.internalView.cns = true;
+ $scope.internalView.edit = "add";
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newCNSObj = GBPConNamedSelServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedCNS = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.cns = true;
+ }else {
+ $scope.internalView.cns = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.cns) {
+ angular.copy(selectedObj, $scope.newCNSObj);
+ }
+ };
+
+ $scope.close = function(){
+ $scope.internalView.cns = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEpg ) {
+ $scope.internalView.cns = true;
+ $scope.internalView.edit = "add";
+ angular.copy($scope.selectedCNS, $scope.newCNSObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_EPG_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('pnsCtrl',['$scope', 'GBPProNamedSelServices', function($scope, GBPProNamedSelServices){
+ $scope.list = [];
+ $scope.selectedPNS = null;
+ $scope.newPNSObj = GBPProNamedSelServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.crudLabel = 'Provider named selectors list';
+ $scope.internalView = {
+ pns: false,
+ edit: "view"
+ };
+
+ var clear = function(){
+ $scope.list = [];
+ $scope.selectedPNS = null;
+ $scope.newPNSObj = GBPProNamedSelServices.createObj();
+ $scope.internalView = {
+ pns: false,
+ edit: "view"
+ };
+ };
+
+ //move to separate ctrl \/
+ $scope.addNewElem = function(templateObj) {
+ if($scope.newPNSObj && $scope.newPNSObj.contract) {
+ var objToPush = templateObj || "";
+ $scope.newPNSObj.contract.push(objToPush);
+ }
+ };
+
+ $scope.deleteElemAt = function(index) {
+ if($scope.newPNSObj && $scope.newPNSObj.contract) {
+ $scope.newPNSObj.contract.splice(index, 1);
+ }
+ };
+
+ $scope.updateAt = function(index, value) {
+ if($scope.newPNSObj && $scope.newPNSObj.contract && $scope.newPNSObj.contract.length >= index) {
+ $scope.newPNSObj.contract[index] = value;
+ }
+ };
+ //move to separate ctrl /\
+
+ $scope.init = function() {
+ if ($scope.selectedTenant && $scope.selectedEpg) {
+ path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id);
+
+ GBPProNamedSelServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.pnsForm)){
+ path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.newPNSObj.name);
+ GBPProNamedSelServices.send(path, $scope.newPNSObj, function(data){
+ $scope.init();
+ $scope.internalView.pns = false;
+ $scope.reloadNewObj();
+ $scope.internalView.cns = "view";
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedEpg && $scope.selectedPNS) {
+ path = GBPProNamedSelServices.createPathObj($scope.selectedTenant.id, $scope.selectedEpg.id, $scope.selectedPNS.name);
+ GBPProNamedSelServices.delete(path, function(data){
+ $scope.init();
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.pns = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedPNS = null;
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newPNSObj = GBPProNamedSelServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedPNS = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.pns = true;
+ }else {
+ $scope.internalView.pns = false;
+ $scope.internalView.edit = "view";
+ }
+
+ if($scope.internalView.pns) {
+ angular.copy(selectedObj, $scope.newPNSObj);
+ }
+ };
+
+ $scope.close = function(){
+ $scope.internalView.pns = false;
+ $scope.internalView.edit = "view";
+ };
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEpg ) {
+ $scope.internalView.pns = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedPNS, $scope.newPNSObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_EPG_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('l2FloodCtrl', ['$scope', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', '$filter', function($scope, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, $filter){
+ $scope.list = [];
+ $scope.selectedL2Flood = null;
+ $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();
+ $scope.displayLabel = ['name', 'id'];
+ $scope.crudLabel = 'L2 Flood Domain list';
+
+ $scope.l2bridge = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L2BRIDGE_LABEL', $scope.l2bridge);
+
+ $scope.view = {
+ l2flood: false,
+ edit: "view"
+ };
+
+ var path = null,
+
+ loadL2BridgeList = function() {
+ GBPL2BridgeDomainServices.load(GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id), function(data){
+ $scope.l2bridge.options = data;
+ }, function(){
+
+ });
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedL2Flood = null;
+ $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();
+ $scope.view = {
+ l2flood: false,
+ edit: "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);
+
+ GBPL2FloodDomainServices.load(path, function(data){
+ $scope.list = data;
+ // clear objects
+ $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();
+ $scope.selectedL2Flood = null;
+ }, function(){
+
+ });
+
+ loadL2BridgeList();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.l2FloodForm)){
+ path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id, $scope.newL2FloodObj.id);
+ GBPL2FloodDomainServices.send(path, $scope.newL2FloodObj, function(data){
+ $scope.init();
+ $scope.view.l2flood = false;
+ $scope.view.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedL2Flood) {
+ path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id, $scope.selectedL2Flood.id);
+ GBPL2FloodDomainServices.delete(path, function(data){
+ $scope.init();
+ $scope.view.l2flood = false;
+ $scope.view.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedL2Flood = selectedObj;
+
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.l2flood = true;
+ }
+ else {
+ $scope.view.l2flood = false;
+ $scope.view.edit = "view";
+ }
+
+ if ($scope.view.l2flood) {
+ angular.copy(selectedObj, $scope.newL2FloodObj);
+ }
+
+ $scope.sendReloadEventFromRoot('GBP_L2FLOOD_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.newL2FloodObj = GBPL2FloodDomainServices.createObj();
+ $scope.selectedL2Flood = null;
+ $scope.view.l2flood = true;
+ $scope.view.edit = "add";
+ };
+
+ $scope.close = function(){
+ $scope.view.l2flood = false;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedL2Flood ) {
+ $scope.view.l2flood = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedL2Flood, $scope.newL2FloodObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_L2BRIDGE_RELOAD',function(){
+ loadL2BridgeList();
+ });
+
+ $scope.$on('GBP_L2FLOOD_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('l2BridgeCtrl', ['$scope', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', '$filter', function($scope, GBPL2BridgeDomainServices, GBPL3ContextServices, $filter){
+ $scope.list = [];
+ $scope.selectedL2Bridge = null;
+ $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();
+ $scope.displayLabel = ['name', 'id'];
+ $scope.crudLabel = 'L2 Bridge Domain list';
+
+ $scope.l3context = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);
+
+ $scope.view = {
+ l2bridge: false,
+ edit: "view"
+ };
+
+ var path = null,
+
+ loadL3ContextList = function() {
+ GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){
+ $scope.l3context.options = data;
+ //$scope.$broadcast('GBP_L2BRIDGE_RELOAD');
+ }, function(){
+
+ });
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedL2Bridge = null;
+ $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();
+ $scope.view = {
+ l2bridge: false,
+ edit: "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);
+
+ GBPL2BridgeDomainServices.load(path, function(data){
+ $scope.list = data;
+ $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();
+ $scope.selectedL2Bridge = null;
+ // $scope.$broadcast('GBP_L2BRIDGE_RELOAD');
+ }, function(){
+
+ });
+
+ loadL3ContextList();
+ }else{
+ clear();
+ }
+ };
+
+
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.l2BridgeForm)){
+ path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id, $scope.newL2BridgeObj.id);
+ GBPL2BridgeDomainServices.send(path, $scope.newL2BridgeObj, function(data){
+ $scope.init();
+ $scope.view.l2bridge = false;
+ $scope.view.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedL2Bridge) {
+ path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id, $scope.selectedL2Bridge.id);
+ GBPL2BridgeDomainServices.delete(path, function(data){
+ $scope.init();
+ $scope.view.l2bridge = false;
+ $scope.view.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedL2Bridge = selectedObj;
+
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.l2bridge = true;
+ }
+ else {
+ $scope.view.l2bridge = false;
+ $scope.view.edit = "view";
+ }
+
+ if ($scope.view.l2bridge) {
+ angular.copy(selectedObj, $scope.newL2BridgeObj);
+ }
+
+ $scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.newL2BridgeObj = GBPL2BridgeDomainServices.createObj();
+ $scope.selectedL2Bridge = null;
+ $scope.view.l2bridge = true;
+ $scope.view.edit = "add";
+ };
+
+ $scope.close = function(){
+ $scope.view.l2bridge = false;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedL2Bridge ) {
+ $scope.view.l2bridge = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedL2Bridge, $scope.newL2BridgeObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_L3CONTEXT_RELOAD',function(){
+ loadL3ContextList();
+ });
+
+ $scope.$on('GBP_L2BRIDGE_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('l3ContextCtrl', ['$scope', 'GBPL3ContextServices', '$filter', function($scope, GBPL3ContextServices, $filter){ //GBPContractServices
+ $scope.list = [];
+ $scope.selectedL3Context = null;
+ $scope.newL3ContextObj = GBPL3ContextServices.createObj();
+ $scope.displayLabel = ['name', 'id'];
+ $scope.crudLabel = 'L3 Context list';
+
+ $scope.view = {
+ l3context: false,
+ edit: "view"
+ };
+
+ var path = null,
+
+ clear = function(){
+ $scope.list = [];
+ $scope.view = {
+ l3context: false,
+ edit: "view"
+ };
+ $scope.selectedL3Context = null;
+ $scope.newL3ContextObj = GBPL3ContextServices.createObj();
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id);
+
+ GBPL3ContextServices.load(path, function(data){
+ $scope.list = data;
+ $scope.newL3ContextObj = GBPL3ContextServices.createObj();
+ $scope.selectedL3Context = null;
+ }, function(){
+
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.l3ContextForm)){
+ path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id, $scope.newL3ContextObj.id);
+ GBPL3ContextServices.send(path, $scope.newL3ContextObj, function(data){
+ $scope.init();
+ $scope.view.l3context = false;
+ $scope.view.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedL3Context) {
+ path = GBPL3ContextServices.createPathObj($scope.selectedTenant.id, $scope.selectedL3Context.id);
+ GBPL3ContextServices.delete(path, function(data){
+ $scope.init();
+ $scope.view.l3context = false;
+ $scope.view.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedL3Context = selectedObj;
+
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.l3context = true;
+ }
+ else {
+ $scope.view.l3context = false;
+ $scope.view.edit = "view";
+ }
+
+ if($scope.view.l3context) {
+ angular.copy(selectedObj, $scope.newL3ContextObj);
+ }
+
+ $scope.sendReloadEventFromRoot('GBP_L3CONTEXT_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.newL3ContextObj = GBPL3ContextServices.createObj();
+ $scope.selectedL3Context = null;
+ $scope.view.l3context = true;
+ $scope.view.edit = "add";
+ };
+
+ $scope.close = function(){
+ $scope.view.l3context = false;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedL3Context ) {
+ $scope.view.l3context = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedL3Context, $scope.newL3ContextObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_L3CONTEXT_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('subnetCtrl', ['$scope', 'GBPSubnetServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', '$filter', function($scope, GBPSubnetServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, GBPL3ContextServices, $filter){
+ $scope.list = [];
+ $scope.selectedSubnet = null;
+ $scope.newSubnetObj = GBPSubnetServices.createObj();
+ $scope.displayLabel = ['name', 'id'];
+ $scope.crudLabel = 'Subnet list';
+
+ $scope.l2L3List = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2L3List);
+
+ $scope.view = {
+ subnet: false,
+ edit: "view"
+ };
+
+
+ var path = null,
+
+ loadL2L3List = function() {
+ $scope.l2L3List.options = [];
+
+ GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(l3ContextData){
+ $scope.l2L3List.options = $scope.l2L3List.options.concat(l3ContextData);
+ }, function(){
+
+ });
+
+ GBPL2FloodDomainServices.load(GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id), function(l2FloodData){
+ $scope.l2L3List.options = $scope.l2L3List.options.concat(l2FloodData);
+ }, function(){
+
+ });
+
+ GBPL2BridgeDomainServices.load(GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id), function(l2BridgeData){
+ $scope.l2L3List.options = $scope.l2L3List.options.concat(l2BridgeData);
+ }, function(){
+
+ });
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.view = {
+ subnet: false,
+ edit: "view"
+ };
+ $scope.selectedSubnet = null;
+ $scope.newSubnetObj = GBPSubnetServices.createObj();
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ path = GBPSubnetServices.createPathObj($scope.selectedTenant.id);
+
+ GBPSubnetServices.load(path, function(data){
+ $scope.list = data;
+ $scope.newSubnetObj = GBPSubnetServices.createObj();
+ $scope.selectedSubnet = null;
+
+ $scope.view.subnet = false;
+ $scope.view.edit = "view";
+ //$scope.sendReloadEventFromRoot('GBP_L2BRIDGE_RELOAD');
+ }, function(){
+
+ });
+
+ loadL2L3List();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.subnetForm)){
+ path = GBPSubnetServices.createPathObj($scope.selectedTenant.id, $scope.newSubnetObj.id);
+ GBPSubnetServices.send(path, $scope.newSubnetObj, function(data){
+ $scope.init();
+ $scope.view.subnet = false;
+ $scope.view.edit = "view";
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedSubnet) {
+ path = GBPSubnetServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id);
+ GBPSubnetServices.delete(path, function(data){
+ $scope.init();
+ $scope.view.subnet = false;
+ $scope.view.edit = "view";
+
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedSubnet = selectedObj;
+
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.subnet = true;
+ }
+ else {
+ $scope.view.subnet = false;
+ $scope.view.edit = "view";
+ }
+
+ if($scope.view.subnet) {
+ angular.copy(selectedObj, $scope.newSubnetObj);
+ }
+
+ $scope.sendReloadEventFromRoot('GBP_SUBNET_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.newSubnetObj = GBPSubnetServices.createObj();
+ $scope.selectedSubnet = null;
+ $scope.view.subnet = true;
+ $scope.view.edit = "add";
+ };
+
+ $scope.close = function(){
+ $scope.view.subnet = false;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedSubnet ) {
+ $scope.view.subnet = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedSubnet, $scope.newSubnetObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_GATEWAY_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_L3CONTEXT_RELOAD',function(){
+ loadL2L3List();
+ });
+
+ $scope.$on('GBP_L2BRIDGE_RELOAD',function(){
+ loadL2L3List();
+ });
+
+ $scope.$on('GBP_L2FLOOD_RELOAD',function(){
+ loadL2L3List();
+ });
+
+ $scope.$on('GBP_PREFIX_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('gatewayCtrl', ['$scope', 'GBPGatewayServices', function($scope, GBPGatewayServices){
+ $scope.list = [];
+ $scope.gatewayView = false;
+ $scope.selectedGateway = null;
+ $scope.newGatewayObj = GBPGatewayServices.createObj();
+ $scope.displayLabel = 'gateway';
+ $scope.crudLabel = 'Gateway list';
+ $scope.internalView = {
+ gateway: false,
+ edit: "view"
+ };
+
+ var path = null,
+
+ clear = function(){
+ $scope.list = [];
+ $scope.gatewayView = false;
+ $scope.selectedGateway = null;
+ $scope.newGatewayObj = GBPGatewayServices.createObj();
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant && $scope.selectedSubnet ) {
+ path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id);
+
+ GBPGatewayServices.load(path, function(data){
+ $scope.list = data;
+ $scope.newGatewayObj = GBPGatewayServices.createObj();
+ $scope.internalView.gateway = false;
+ $scope.selectedGateway = null;
+ }, function(){
+
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.gatewayForm)){
+ path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.newGatewayObj.gateway);
+ GBPGatewayServices.send(path, $scope.newGatewayObj, function(data){
+ $scope.init();
+ $scope.internalView.gateway = false;
+ $scope.internalView.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_GATEWAY_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedSubnet && $scope.selectedGateway) {
+ path = GBPGatewayServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway);
+ GBPGatewayServices.delete(path, function(data){
+ $scope.init();
+ $scope.internalView.gateway = false;
+ $scope.sendReloadEventFromRoot('GBP_GATEWAY_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedGateway = selectedObj;
+ angular.copy(selectedObj, $scope.newGatewayObj);
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.gateway = true;
+ }else {
+ $scope.internalView.gateway = false;
+ $scope.internalView.edit = "view";
+ }
+
+ $scope.sendReloadEventFromRoot('GBP_GATEWAY_SET');
+ };
+
+ $scope.showForm = function() {
+ $scope.newGatewayObj = GBPGatewayServices.createObj();
+ $scope.internalView.gateway = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedGateway = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.gateway = false;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedGateway ) {
+ $scope.internalView.gateway = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedGateway, $scope.newGatewayObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_SUBNET_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_PREFIX_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('prefixCtrl', ['$scope', 'GBPPrefixServices', function($scope, GBPPrefixServices){
+ $scope.list = [];
+ $scope.selectedPrefix = null;
+ $scope.newPrefixObj = GBPPrefixServices.createObj();
+ $scope.displayLabel = 'prefix';
+ $scope.crudLabel = 'Prefix list';
+ $scope.internalView = {
+ prefix: false,
+ edit: "view"
+ };
+
+ var path = null,
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedPrefix = null;
+ $scope.newPrefixObj = GBPPrefixServices.createObj();
+ $scope.internalView = {
+ prefix: false,
+ edit: "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant && $scope.selectedSubnet && $scope.selectedGateway) {
+ path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway);
+
+ GBPPrefixServices.load(path, function(data){
+ $scope.list = data;
+ $scope.newPrefixObj = GBPPrefixServices.createObj();
+ $scope.internalView.prefix = false;
+ $scope.selectedPrefix = null;
+ }, function(){
+
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.prefixForm)){
+ path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway, $scope.newPrefixObj.prefix);
+ GBPPrefixServices.send(path, $scope.newPrefixObj, function(data){
+ $scope.init();
+ $scope.internalView.prefix = false;
+ $scope.internalView.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_PREFIX_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ path = GBPPrefixServices.createPathObj($scope.selectedTenant.id, $scope.selectedSubnet.id, $scope.selectedGateway.gateway, $scope.selectedPrefix.prefix);
+ GBPPrefixServices.delete(path, function(data){
+ $scope.init();
+ $scope.internalView.prefix = false;
+ $scope.sendReloadEventFromRoot('GBP_PREFIX_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedPrefix = selectedObj;
+ $scope.internalView.edit = $scope.internalView.edit == "edit" ? $scope.internalView.edit : "view";
+ if(selectedObj){
+ $scope.internalView.prefix = true;
+ }else {
+ $scope.internalView.prefix = false;
+ $scope.internalView.edit = "view";
+ }
+
+ angular.copy(selectedObj, $scope.newPrefixObj);
+ };
+
+ $scope.showForm = function() {
+ $scope.newPrefixObj = GBPPrefixServices.createObj();
+ $scope.internalView.prefix = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedPrefix = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.prefix = false;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedPrefix ) {
+ $scope.internalView.prefix = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedPrefix, $scope.newPrefixObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_GATEWAY_SET',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('renderersCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){ //GBPContractServices
+ $scope.classifierDefinitions = {'options' : [], 'labels' : null};
+ $scope.actionDefinitions = {'options' : [], 'labels' : null};
+
+ //reload on event?
+
+ var loadDefinitions = function() {
+ GPBServices.getDefinitions(function(classifierDefs, actionDefs) {
+ $scope.classifierDefinitions.options = classifierDefs;
+ $scope.getDisplayLabelsFromCtrl('GBP_CLASSIFIERS_LABEL', $scope.classifierDefinitions);
+
+ $scope.actionDefinitions.options = actionDefs;
+ $scope.getDisplayLabelsFromCtrl('GBP_ACTIONS_LABEL', $scope.actionDefinitions);
+ });
+ };
+
+ loadDefinitions();
+ }]);
+
+ gbp.register.controller('paramCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){
+ $scope.value = null;
+
+ $scope.init = function(param, paramValues) {
+ $scope.parameter = param;
+
+ if(paramValues) {
+ paramValues.forEach(function(p) {
+ if($scope.parameter.name === p.name) {
+ $scope.value = GPBServices.getInstanceParamValue(p);
+ }
+ });
+ }
+ };
+
+ $scope.$on('GBP_SAVE_PARAM', function(event){
+ if($scope.value !== '' && $scope.value !== null) {
+ $scope.addParam($scope.parameter.name, $scope.parameter.type, $scope.value);
+ }
+ });
+
+ $scope.$on('GBP_SET_PARAM_VALUE', function(event, name, intVal, strVal) {
+ //console.info($scope.parameter, ' got GBP_SET_PARAM_VALUE', name, intVal, strVal, event);
+
+ });
+
+ $scope.$on('GBP_RESET_PARAM', function(event){
+ $scope.value = null;
+ });
+ }]);
+
+ gbp.register.controller('classifiersCtrl', ['$scope', 'GBPClassifierInstanceServices', 'GPBServices', '$filter',
+ function($scope, GBPClassifierInstanceServices, GPBServices, $filter){
+ $scope.list = [];
+ $scope.classifiersView = false;
+ $scope.displayLabel = 'name';
+ $scope.selectedClassifier = null;
+ $scope.crudLabel = 'Classifiers';
+ $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();
+ $scope.edit = "view";
+
+ var mandatoryProperties = ['name'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.classifiersView = false;
+ $scope.selectedClassifier = null;
+ $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();
+ $scope.edit = "view";
+ };
+
+ $scope.getDefinitionObjParams = function(id){
+ return GPBServices.getDefinitionObjParams($scope.classifierDefinitions.options, id);
+ };
+
+ $scope.reloadDefs = function(){
+ $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newClassifierObj['classifier-definition-id']));
+ };
+
+ $scope.addParam = function(name, type, value) {
+ $scope.newClassifierObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));
+ };
+
+ var saveParams = function() {
+ $scope.newClassifierObj['parameter-value'] = [];
+ $scope.$broadcast('GBP_SAVE_PARAM');
+ };
+
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id);
+ GBPClassifierInstanceServices.load(path, function(data){
+ $scope.list = data;
+ $scope.reloadDefs();
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.classifierForm)){
+ path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id, $scope.newClassifierObj.name);
+ saveParams();
+ GBPClassifierInstanceServices.send(path, $scope.newClassifierObj, function(data){
+ $scope.init();
+ $scope.classifiersView = false;
+ $scope.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.newClassifierObj = GBPClassifierInstanceServices.createObj();
+ $scope.selectedClassifier = null;
+ $scope.classifiersView = true;
+ $scope.edit = "add";
+ $scope.reloadDefs();
+ };
+
+ $scope.reload = function(selectedObj){
+ $scope.selectedClassifier = selectedObj;
+ $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');
+
+ $scope.edit = $scope.edit == "edit" ? $scope.edit : "view";
+ if(selectedObj){
+ $scope.classifiersView = true;
+ }
+ else {
+ $scope.classifiersView = false;
+ $scope.edit = "view";
+ }
+
+ if($scope.classifiersView) {
+ angular.copy(selectedObj, $scope.newClassifierObj);
+ }
+
+ $scope.reloadDefs();
+ };
+
+ $scope.close = function(){
+ $scope.classifiersView = false;
+ $scope.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedClassifier ) {
+ $scope.classifiersView = true;
+ angular.copy($scope.selectedClassifier, $scope.newClassifierObj);
+ $scope.edit = "edit";
+ $scope.reloadDefs();
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.delete = function(){
+ path = GBPClassifierInstanceServices.createPathObj($scope.selectedTenant.id, $scope.selectedClassifier.name);
+ GBPClassifierInstanceServices.delete(path, function(data){
+ $scope.init();
+ $scope.classifiersView = false;
+ $scope.sendReloadEventFromRoot('GBP_CLASSIFIER_INSTANCE_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ };
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_CLASSIFIERS_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('actionsCtrl', ['$scope', 'GBPActionInstanceServices', 'GPBServices', '$filter',
+ function($scope, GBPActionInstanceServices, GPBServices, $filter){
+ $scope.list = [];
+ $scope.actionsView = false;
+ $scope.displayLabel = 'name';
+ $scope.selectedAction = null;
+ $scope.crudLabel = 'Actions';
+ $scope.newActionObj = GBPActionInstanceServices.createObj();
+ $scope.edit = "view";
+
+ var mandatoryProperties = ['name'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.actionsView = false;
+ $scope.selectedAction = null;
+ $scope.newActionObj = GBPActionInstanceServices.createObj();
+ $scope.edit = "view";
+ };
+
+ $scope.getDefinitionObjParams = function(id){
+ return GPBServices.getDefinitionObjParams($scope.actionDefinitions.options, id);
+ };
+
+ $scope.reloadDefs = function(){
+ $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newActionObj['action-definition-id']));
+ };
+
+ $scope.addParam = function(name, type, value) {
+ $scope.newActionObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));
+ };
+
+ var saveParams = function() {
+ $scope.newActionObj['parameter-value'] = [];
+ $scope.$broadcast('GBP_SAVE_PARAM');
+ };
+
+
+ $scope.init = function() {
+ if ( $scope.selectedTenant ) {
+ path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);
+ GBPActionInstanceServices.load(path, function(data){
+ $scope.list = data;
+ $scope.reloadDefs();
+ }, function(){
+ //TODO: error cbk
+ });
+ }else{
+ clear();
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.actionsForm)){
+ path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id, $scope.newActionObj.name);
+ saveParams();
+
+ GBPActionInstanceServices.send(path, $scope.newActionObj, function(data){
+ $scope.init();
+ $scope.actionsView = false;
+ $scope.edit = "view";
+ $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.newActionObj = GBPActionInstanceServices.createObj();
+ $scope.selectedAction = null;
+ $scope.actionsView = true;
+ $scope.edit = "add";
+ $scope.reloadDefs();
+ };
+
+ $scope.reload = function(selectedObj){
+ $scope.selectedAction = selectedObj;
+ $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');
+
+ $scope.edit = $scope.edit == "edit" ? $scope.edit : "view";
+ if(selectedObj){
+ $scope.actionsView = true;
+ }
+ else {
+ $scope.actionsView = false;
+ $scope.edit = "view";
+ }
+
+ if($scope.actionsView) {
+ angular.copy(selectedObj, $scope.newActionObj);
+ }
+
+ $scope.reloadDefs();
+ };
+
+ $scope.close = function(){
+ $scope.actionsView = false;
+ $scope.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedAction ) {
+ $scope.actionsView = true;
+ angular.copy($scope.selectedAction, $scope.newActionObj);
+ $scope.edit = "edit";
+ $scope.reloadDefs();
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.delete = function(){
+ path = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id, $scope.selectedAction.name);
+ GBPActionInstanceServices.delete(path, function(data){
+ $scope.init();
+ $scope.actionsView = false;
+ $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ };
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_ACTIONS_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+ }]);
+
+ gbp.register.controller('endpointCtrl', ['$scope', 'GBPEndpointServices', 'GPBServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', 'GBPL3ContextServices', 'GBPEpgServices', '$filter', 'GBPSubnetServices',
+ function($scope, GBPEndpointServices, GPBServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, GBPL3ContextServices, GBPEpgServices, $filter, GBPSubnetServices){
+ $scope.list = [];
+ $scope.selectedEndpoint = null;
+ $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);
+ $scope.displayLabel = function(obj) {
+ return obj['mac-address'] + ':' + obj['l2-context'];
+ };
+ $scope.crudLabel = 'Endpoint list';
+
+ $scope.l2context = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2context);
+
+ $scope.l3context = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);
+
+ $scope.subnet = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_SUBNET_LABEL', $scope.subnet);
+
+ $scope.epg = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_EPG_LABEL', $scope.epg);
+
+ $scope.networkContainment = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.networkContainment);
+
+ $scope.view = {
+ endpoint: false,
+ edit: "view"
+ };
+
+ var path = null,
+ mandatoryProperties = [],
+
+ loadEpgOptions = function() {
+ $scope.epg.options = [];
+
+ path = GBPEpgServices.createPathObj($scope.selectedTenant.id);
+ GBPEpgServices.load(path, function(data){
+ $scope.epg.options = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ },
+
+ loadL2ContextOptions = function() {
+ removeL2ContextOptions($scope.networkContainment.options, $scope.l2context.options);
+ $scope.l2context.options = [];
+
+ path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);
+
+ GBPL2FloodDomainServices.load(path, function(data){
+ $scope.l2context.options = $scope.l2context.options.concat(data);
+ $scope.networkContainment.options = $scope.networkContainment.options.concat(data);
+ }, function(){
+
+ });
+
+ path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);
+ GBPL2BridgeDomainServices.load(path, function(data){
+ $scope.l2context.options = $scope.l2context.options.concat(data);
+ $scope.networkContainment.options = $scope.networkContainment.options.concat(data);
+ }, function(){
+
+ });
+ },
+
+ loadL3ContextOptions = function(){
+ removeL2ContextOptions($scope.networkContainment.options, $scope.l3context.options);
+ $scope.l3context.options = [];
+
+ GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){
+ $scope.l3context.options = data;
+ $scope.networkContainment.options = $scope.networkContainment.options.concat(data);
+ }, function(){
+
+ });
+ },
+
+ loadSubnetOptions = function(){
+ $scope.subnet.options = [];
+
+ GBPSubnetServices.load(GBPSubnetServices.createPathObj($scope.selectedTenant.id), function(data){
+ $scope.subnet.options = data;
+ $scope.networkContainment.options = $scope.networkContainment.options.concat(data);
+ }, function(){
+
+ });
+ },
+
+ loadNetworkCotnaninemnt = function(){
+ $scope.networkContainment.options = [];
+
+ loadL2ContextOptions();
+ loadL3ContextOptions();
+ loadSubnetOptions();
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedEndpoint = null;
+ $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);
+ $scope.view = {
+ endpoint: false,
+ edit: "view"
+ };
+ },
+ removeL2ContextOptions = function(arr1, arr2) {
+ arr1 = arr1.filter( function( el ) {
+ return arr2.indexOf( el ) < 0;
+ });
+ };
+
+ $scope.init = function() {
+ if ($scope.selectedTenant) {
+
+ GBPEndpointServices.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+
+ loadEpgOptions();
+ /*loadL2ContextOptions();
+ loadL3ContextOptions();
+ loadSubnetOptions();*/
+ loadNetworkCotnaninemnt();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.addNewL3address = function() {
+ if($scope.newEndpointObj) {
+ if(!$scope.newEndpointObj['l3-address']){
+ $scope.newEndpointObj['l3-address'] = [];
+ }
+ var objToPush = {'l3-context' : '', 'ip-address' : ''};
+ $scope.newEndpointObj['l3-address'].push(objToPush);
+ }
+ };
+
+ $scope.deleteNewL3address = function(index){
+ if($scope.newEndpointObj) {
+ $scope.newEndpointObj['l3-address'].splice(index, 1);
+ }
+ };
+
+ $scope.addNewLeafListEl = function(prop) {
+ if($scope.newEndpointObj) {
+ if(!$scope.newEndpointObj[prop]){
+ $scope.newEndpointObj[prop] = [];
+ }
+ var objToPush = "";
+ $scope.newEndpointObj[prop].push(objToPush);
+ }
+ };
+
+ $scope.updateLeafListEl = function(index, value, prop) {
+ if($scope.newEndpointObj && $scope.newEndpointObj[prop] && $scope.newEndpointObj[prop].length >= index) {
+ $scope.newEndpointObj[prop][index] = value;
+ }
+ };
+
+ $scope.deleteNewLeafListEl = function(index, prop){
+ if($scope.newEndpointObj) {
+ $scope.newEndpointObj[prop].splice(index, 1);
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.endpointForm)){
+ GBPEndpointServices.send(path, $scope.newEndpointObj, function(data){
+ $scope.init();
+ $scope.view.endpoint = false;
+ $scope.reloadNewObj();
+ $scope.view.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedEndpoint) {
+ GBPEndpointServices.delete(path, $scope.selectedEndpoint, function(data){
+ $scope.init();
+ $scope.view.endpoint = false;
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.view.endpoint = true;
+ $scope.reloadNewObj();
+ $scope.selectedEndpoint = null;
+
+ $scope.view.edit = "add";
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newEndpointObj = GBPEndpointServices.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedEndpoint = selectedObj;
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.endpoint = true;
+ }
+ else {
+ $scope.view.endpoint = false;
+ $scope.view.edit = "view";
+ }
+
+ if($scope.view.endpoint) {
+ angular.copy(selectedObj, $scope.newEndpointObj);
+ }
+ };
+
+ $scope.close = function(){
+ $scope.view.endpoint = false;
+ $scope.view.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEndpoint ) {
+ $scope.view.endpoint = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedEndpoint, $scope.newEndpointObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_EPG_RELOAD',function(){
+ loadEpgOptions();
+ });
+
+ $scope.$on('GBP_L2BRIDGE_RELOAD',function(){
+ //loadL2ContextOptions();
+ loadNetworkCotnaninemnt();
+ });
+
+ $scope.$on('GBP_L2FLOOD_RELOAD',function(){
+ //loadL2ContextOptions();
+ loadNetworkCotnaninemnt();
+ });
+
+ $scope.$on('GBP_L3CONTEXT_RELOAD',function(){
+ //loadL3ContextOptions();
+ loadNetworkCotnaninemnt();
+ });
+
+ $scope.$on('GBP_SUBNET_RELOAD',function(){
+ //loadSubnetOptions();
+ loadNetworkCotnaninemnt();
+ });
+ }]);
+
+ gbp.register.controller('l3EndpointCtrl', ['$scope', 'GBPEndpointL3Services', 'GPBServices', 'GBPEpgServices', 'GBPL3ContextServices', 'GBPL2FloodDomainServices', 'GBPL2BridgeDomainServices', '$filter',
+ function($scope, GBPEndpointL3Services, GPBServices, GBPEpgServices, GBPL3ContextServices, GBPL2FloodDomainServices, GBPL2BridgeDomainServices, $filter){
+ $scope.list = [];
+ $scope.selectedEndpoint = null;
+ $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);
+ $scope.displayLabel = function(obj) {
+ return obj['ip-prefix'] + ':' + obj['l3-context'];
+ };
+ $scope.crudLabel = 'L3 Prefix endpoint list';
+
+ $scope.l2context = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L2FLOOD_LABEL', $scope.l2context);
+
+ $scope.l3context = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_L3CONTEXT_LABEL', $scope.l3context);
+
+ $scope.epg = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_EPG_LABEL', $scope.epg);
+
+ $scope.view = {
+ endpoint: false,
+ edit: "view"
+ };
+
+ var path = null,
+ mandatoryProperties = [],
+
+ loadEpgOptions = function() {
+ $scope.epg.options = [];
+
+ path = GBPEpgServices.createPathObj($scope.selectedTenant.id);
+ GBPEpgServices.load(path, function(data){
+ $scope.epg.options = data;
+ }, function(){
+ //TODO: error cbk
+ });
+ },
+
+ loadL2ContextOptions = function() {
+ $scope.l2context.options = [];
+
+ path = GBPL2FloodDomainServices.createPathObj($scope.selectedTenant.id);
+
+ GBPL2FloodDomainServices.load(path, function(data){
+ $scope.l2context.options = $scope.l2context.options.concat(data);
+ }, function(){
+
+ });
+
+ path = GBPL2BridgeDomainServices.createPathObj($scope.selectedTenant.id);
+ GBPL2BridgeDomainServices.load(path, function(data){
+ $scope.l2context.options = $scope.l2context.options.concat(data);
+ }, function(){
+
+ });
+ },
+
+ loadL3ContextOptions = function(){
+ $scope.l3context.options = [];
+
+ GBPL3ContextServices.load(GBPL3ContextServices.createPathObj($scope.selectedTenant.id), function(data){
+ $scope.l3context.options = data;
+ }, function(){
+
+ });
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedEndpoint = null;
+ $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);
+ $scope.view = {
+ endpoint: false,
+ edit: "view"
+ };
+ };
+
+ $scope.init = function() {
+ if ($scope.selectedTenant) {
+
+ GBPEndpointL3Services.load(path, function(data){
+ $scope.list = data;
+ }, function(){
+ //TODO: error cbk
+ });
+
+ loadEpgOptions();
+ loadL2ContextOptions();
+ loadL3ContextOptions();
+ }else{
+ clear();
+ }
+ };
+
+ $scope.addNewL2gateways = function() {
+ if($scope.newEndpointObj) {
+ if(!$scope.newEndpointObj['endpoint-l2-gateways']){
+ $scope.newEndpointObj['endpoint-l2-gateways'] = [];
+ }
+ var objToPush = {'l2-context' : '', 'mac-address' : ''};
+ $scope.newEndpointObj['endpoint-l2-gateways'].push(objToPush);
+ }
+ };
+
+ $scope.deleteNewL2gateways = function(index){
+ if($scope.newEndpointObj) {
+ $scope.newEndpointObj['endpoint-l2-gateways'].splice(index, 1);
+ }
+ };
+
+ $scope.addNewL3gateways = function() {
+ if($scope.newEndpointObj) {
+ if(!$scope.newEndpointObj['endpoint-l3-gateways']){
+ $scope.newEndpointObj['endpoint-l3-gateways'] = [];
+ }
+ var objToPush = {'l3-context' : '', 'ip-address' : ''};
+ $scope.newEndpointObj['endpoint-l3-gateways'].push(objToPush);
+ }
+ };
+
+ $scope.deleteNewL3gateways = function(index){
+ if($scope.newEndpointObj) {
+ $scope.newEndpointObj['endpoint-l3-gateways'].splice(index, 1);
+ }
+ };
+
+ $scope.addNewLeafListEl = function(prop) {
+ if($scope.newEndpointObj) {
+ if(!$scope.newEndpointObj[prop]){
+ $scope.newEndpointObj[prop] = [];
+ }
+ var objToPush = "";
+ $scope.newEndpointObj[prop].push(objToPush);
+ }
+ };
+
+ $scope.updateLeafListEl = function(index, value, prop) {
+ if($scope.newEndpointObj && $scope.newEndpointObj[prop] && $scope.newEndpointObj[prop].length >= index) {
+ $scope.newEndpointObj[prop][index] = value;
+ }
+ };
+
+ $scope.deleteNewLeafListEl = function(index, prop){
+ if($scope.newEndpointObj) {
+ $scope.newEndpointObj[prop].splice(index, 1);
+ }
+ };
+
+ $scope.save = function(){
+ if($scope.validateForm($scope.l3EndpointForm)){
+ GBPEndpointL3Services.send(path, $scope.newEndpointObj, function(data){
+ $scope.init();
+ $scope.view.endpoint = false;
+ $scope.reloadNewObj();
+ $scope.view.edit = "view";
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedTenant && $scope.selectedEndpoint) {
+ GBPEndpointL3Services.delete(path, $scope.selectedEndpoint, function(data){
+ $scope.init();
+ }, function(){
+ //TODO: error cbk
+ });
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.view.endpoint = true;
+ $scope.reloadNewObj();
+ $scope.selectedEndpoint = null;
+ $scope.view.edit = "add";
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newEndpointObj = GBPEndpointL3Services.createObj($scope.selectedTenant ? $scope.selectedTenant.id : null);
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedEndpoint = selectedObj;
+ angular.copy(selectedObj, $scope.newEndpointObj);
+ $scope.view.edit = $scope.view.edit == "edit" ? $scope.view.edit : "view";
+ if(selectedObj){
+ $scope.view.endpoint = true;
+ }
+ else {
+ $scope.view.endpoint = false;
+ $scope.view.edit = "view";
+ }
+ };
+
+ $scope.close = function(){
+ $scope.view.endpoint = false;
+ $scope.view.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEndpoint ) {
+ $scope.view.endpoint = true;
+ $scope.view.edit = "edit";
+ angular.copy($scope.selectedEndpoint, $scope.newEndpointObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_EPG_RELOAD',function(){
+ loadEpgOptions();
+ });
+
+ $scope.$on('GBP_L2BRIDGE_RELOAD',function(){
+ loadL2ContextOptions();
+ });
+
+ $scope.$on('GBP_L2FLOOD_RELOAD',function(){
+ loadL2ContextOptions();
+ });
+
+ $scope.$on('GBP_L3CONTEXT_RELOAD',function(){
+ loadL3ContextOptions();
+ });
+ }]);
+
+ gbp.register.controller('accessModelWizardCtrl', ['$scope', '$filter', 'GBPTenantServices', 'GBPEpgServices', 'GBPContractServices', 'GPBServices', function($scope, $filter, GBPTenantServices, GBPEpgServices, GBPContractServices, GPBServices){
+ $scope.wizardPage = null;
+
+ $scope.selectedTenant = null;
+ $scope.tenant = null;
+ //$scope.epgList = [];
+ $scope.newContractObj = null;
+
+ $scope.init = function() {
+ $scope.setPage('tenants');
+ };
+
+ $scope.setPage = function(pageName, object) {
+ $scope.wizardPage = pageName;
+
+ switch(pageName) {
+ case 'contracts':
+ if(object) {
+ $scope.tenant = object;
+ }
+
+ break;
+
+ case 'summary':
+ $scope.tenant['endpoint-group'] = $scope.tenant['endpoint-group'] ? $scope.tenant['endpoint-group'] : [];
+
+ if(object) {
+ object.forEach(function(o) {
+ $scope.tenant['endpoint-group'].push(GPBServices.stripNullValues(o));
+ });
+ }
+
+ break;
+
+ case 'epgs':
+ $scope.tenant['contract'] = $scope.tenant['contract'] ? $scope.tenant['contract'] : [];
+
+ if(object) {
+ object.forEach(function(o) {
+ $scope.tenant['contract'].push(GPBServices.stripNullValues(o));
+ });
+ }
+
+ break;
+ }
+ };
+
+ $scope.submit = function(object) {
+ $scope.tenant['endpoint-group'] = $scope.tenant['endpoint-group'] ? $scope.tenant['endpoint-group'] : [];
+
+ if(object) {
+ object.forEach(function(o) {
+ $scope.tenant['endpoint-group'].push(GPBServices.stripNullValues(o));
+ });
+ }
+
+
+ path = GBPTenantServices.createPathObj($scope.tenant.id);
+ GBPTenantServices.send(path, $scope.tenant, function(data){
+ $scope.wizards.accessModelWizard = false;
+ $scope.sendReloadEventFromRoot('GBP_GLOBAL_TENANT_RELOAD');
+ $scope.reloadTopo();
+ }, function(){
+ //TODO: error cbk
+ });
+ };
+
+ // $scope.updateList = function(list, object, key) {
+ // var elementPos = list.map(function(x) {return x[key]; }).indexOf(object[key]);
+
+ // if(elementPos < 0) {
+ // list.push(object);
+ // }
+ // else {
+ // list[elementPos] = object;
+ // }
+ // };
+ }]);
+
+ gbp.register.controller('wizardTenantCtrl', ['$scope', '$filter', 'GBPTenantServices', function($scope, $filter, GBPTenantServices){
+ // $scope.tenantList = [];
+ $scope.newTenantObj = GBPTenantServices.createObj();
+ $scope.displayLabel = ['name' , 'id'];
+
+ $scope.view = {
+ tenantEdit: false
+ };
+
+ // $scope.init = function() {
+ // $scope.getTenants();
+ // };
+
+ // $scope.getTenants = function() {
+ // GBPTenantServices.load(
+ // function(data) {
+ // $scope.tenantList = data;
+ // $scope.newTenantObj = GBPTenantServices.createObj();
+ // },
+ // function(){
+ // //TODO error
+ // }
+ // );
+ // };
+
+ $scope.reloadTenants = function(selectedObject) {
+ if(!selectedObject) {
+ selectedObject = GBPTenantServices.createObj();
+ $scope.view.tenantEdit = false;
+ }
+ else {
+ $scope.view.tenantEdit = true;
+ }
+
+ $scope.selectedTenant = selectedObject;
+ $scope.newTenantObj = selectedObject;
+ };
+
+ $scope.getNewTenantObject = function() {
+ return GBPTenantServices.createObj();
+ };
+ }]);
+
+ gbp.register.controller('wizardEpgCtrl', ['$scope', '$filter', 'GBPEpgServices', function($scope, $filter, GBPEpgServices){
+ $scope.list = [];
+ $scope.newEpgObj = GBPEpgServices.createObj();
+ $scope.selectedEpg = null;
+ $scope.epgFormView = true;
+
+ $scope.displayLabel = ['name', 'id'];
+ $scope.crudLabel = 'Group list';
+
+ $scope.igpOpts = ['allow', 'require-contract'];
+
+ $scope.init = function() {
+
+ };
+
+ $scope.showForm = function() {
+ $scope.epgFormView = true;
+ $scope.newEpgObj = GBPEpgServices.createObj();
+ };
+
+ $scope.save = function() {
+ $scope.updateList($scope.list, $scope.newEpgObj, "id");
+ $scope.reload($scope.newEpgObj);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newEpgObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedEpg) {
+ var index = $scope.list.indexOf($scope.selectedEpg);
+ $scope.list.splice(index, 1);
+ $scope.epgFormView = false;
+ }
+ //$scope.newEpgObj = GBPEpgServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedEpg = selectedObj;
+ $scope.newEpgObj = selectedObj;
+ $scope.epgFormView = true;
+ $scope.$broadcast('WIZARD_EPG_RELOAD');
+ };
+
+ $scope.close = function() {
+ $scope.epgFormView = false;
+ $scope.newEpgObj = GBPEpgServices.createObj();
+ $scope.selectedEpg = null;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEpg ) {
+ $scope.epgFormView = true;
+ angular.copy($scope.selectedEpg, $scope.newEpgObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on("WIZARD_CNS_RELOAD", function(event, args){
+ //$scope.selectedEpg['consumer-named-selector'] = args;
+ $scope.newEpgObj['consumer-named-selector'] = args;
+ $scope.updateList($scope.list, $scope.newEpgObj, "id");
+ });
+
+ $scope.$on("WIZARD_PNS_RELOAD", function(event, args){
+ //$scope.selectedEpg['provider-named-selector'] = args;
+ $scope.newEpgObj['provider-named-selector'] = args;
+ $scope.updateList($scope.list, $scope.newEpgObj, "id");
+ });
+ }]);
+
+ gbp.register.controller('wizardContractCtrl', ['$scope', '$filter', 'GBPContractServices', function($scope, $filter, GBPContractServices){
+ $scope.list = [];
+ $scope.newContractObj = GBPContractServices.createObj();
+ $scope.selectedContract = null;
+
+ $scope.displayLabel = ['description', 'id'];
+ $scope.crudLabel = 'Contract list';
+
+ $scope.contractFormView = true;
+
+ $scope.init = function() {
+
+ };
+
+ $scope.showForm = function() {
+ $scope.contractFormView = true;
+ $scope.newContractObj = GBPContractServices.createObj();
+ };
+
+ $scope.save = function() {
+ $scope.updateList($scope.list, $scope.newContractObj, "id");
+ $scope.reload($scope.newContractObj);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newContractObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedContract) {
+ var index = $scope.list.indexOf($scope.selectedContract);
+ $scope.list.splice(index, 1);
+ $scope.contractFormView = false;
+ $scope.newContractObj = GBPContractServices.createObj();
+ $scope.selectedContract = null;
+ }
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedContract = selectedObj;
+ $scope.newContractObj = selectedObj;
+ $scope.contractFormView = true;
+ };
+
+ $scope.close = function() {
+ $scope.contractFormView = false;
+ //$scope.newContractObj = GBPContractServices.createObj();
+ //$scope.selectedContract = null;
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedContract ) {
+ $scope.contractFormView = true;
+ angular.copy($scope.selectedContract, $scope.newContractObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on("WIZARD_SUBJECT_RELOAD", function(event, args){
+ //$scope.selectedEpg['consumer-named-selector'] = args;
+ $scope.newContractObj['subject'] = args;
+ $scope.updateList($scope.list, $scope.newContractObj, "id");
+ });
+
+ $scope.$on("WIZARD_CLAUSE_RELOAD", function(event, args){
+ //$scope.selectedEpg['consumer-named-selector'] = args;
+ $scope.newContractObj['clause'] = args;
+ $scope.updateList($scope.list, $scope.newContractObj, "id");
+ });
+ }]);
+
+ gbp.register.controller('wizardCnsCtrl',['$scope', 'GBPConNamedSelServices', function($scope, GBPConNamedSelServices){
+ $scope.list = [];
+ $scope.selectedCNS = null;
+ $scope.newCNSObj = GBPConNamedSelServices.createObj();
+ $scope.internalView = {
+ cns: false,
+ edit: "view"
+ };
+ $scope.displayLabel = 'name';
+ $scope.crudLabel = 'Consumer named selectors list';
+
+ $scope.contractList = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contractList);
+
+ var clear = function(){
+ $scope.list = [];
+ $scope.selectedCNS = null;
+ $scope.newCNSObj = GBPConNamedSelServices.createObj();
+ $scope.internalView = {
+ cns: false,
+ edit: "add"
+ };
+ };
+
+ //move to separate ctrl \/
+ $scope.addNewElem = function(templateObj) {
+ if($scope.newCNSObj && $scope.newCNSObj.contract) {
+ var objToPush = templateObj || "";
+ $scope.newCNSObj.contract.push(objToPush);
+ }
+ };
+
+ $scope.deleteElemAt = function(index) {
+ if($scope.newCNSObj && $scope.newCNSObj.contract) {
+ $scope.newCNSObj.contract.splice(index, 1);
+ }
+ };
+
+ $scope.updateAt = function(index, value) {
+ if($scope.newCNSObj && $scope.newCNSObj.contract && $scope.newCNSObj.contract.length >= index) {
+ $scope.newCNSObj.contract[index] = value;
+ }
+ };
+ //move to separate ctrl /\
+
+ $scope.init = function() {
+ clear();
+
+ if($scope.tenant && $scope.tenant['contract'].length>0) {
+ $scope.contractList.options = $scope.tenant['contract'];
+ }
+
+ if($scope.selectedEpg && $scope.selectedEpg['consumer-named-selector']) {
+ $scope.list = $scope.selectedEpg['consumer-named-selector'];
+ }
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newCNSObj, "name");
+ $scope.reload($scope.newCNSObj);
+ $scope.$emit('WIZARD_CNS_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newCNSObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedCNS) {
+ var index = $scope.list.indexOf($scope.selectedCNS);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ cns: false,
+ edit: "add"
+ };
+ $scope.$emit('WIZARD_CNS_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.selectedCNS = null;
+ $scope.internalView.cns = true;
+ $scope.internalView.edit = "add";
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newCNSObj = GBPConNamedSelServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedCNS = selectedObj;
+ $scope.newCNSObj = selectedObj;
+ $scope.internalView.cns = true;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.cns = false;
+ //$scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEpg ) {
+ $scope.internalView.cns = true;
+ $scope.internalView.edit = "add";
+ angular.copy($scope.selectedCNS, $scope.newCNSObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('WIZARD_EPG_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('wizardPnsCtrl',['$scope', 'GBPProNamedSelServices', function($scope, GBPProNamedSelServices){
+ $scope.list = [];
+ $scope.selectedPNS = null;
+ $scope.newPNSObj = GBPProNamedSelServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.crudLabel = 'Provider named selectors list';
+ $scope.internalView = {
+ pns: false,
+ edit: "view"
+ };
+
+ $scope.contractList = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_CONTRACTS_LABEL', $scope.contractList);
+
+ var clear = function(){
+ $scope.list = [];
+ $scope.selectedPNS = null;
+ $scope.newPNSObj = GBPProNamedSelServices.createObj();
+ $scope.internalView = {
+ pns: false,
+ edit: "view"
+ };
+ };
+
+ //move to separate ctrl \/
+ $scope.addNewElem = function(templateObj) {
+ if($scope.newPNSObj && $scope.newPNSObj.contract) {
+ var objToPush = templateObj || "";
+ $scope.newPNSObj.contract.push(objToPush);
+ }
+ };
+
+ $scope.deleteElemAt = function(index) {
+ if($scope.newPNSObj && $scope.newPNSObj.contract) {
+ $scope.newPNSObj.contract.splice(index, 1);
+ }
+ };
+
+ $scope.updateAt = function(index, value) {
+ if($scope.newPNSObj && $scope.newPNSObj.contract && $scope.newPNSObj.contract.length >= index) {
+ $scope.newPNSObj.contract[index] = value;
+ }
+ };
+ //move to separate ctrl /\
+
+ $scope.init = function() {
+ clear();
+
+ if($scope.tenant && $scope.tenant['contract'].length>0) {
+ $scope.contractList.options = $scope.tenant['contract'];
+ }
+
+ if($scope.selectedEpg && $scope.selectedEpg['provider-named-selector']) {
+ $scope.list = $scope.selectedEpg['provider-named-selector'];
+ }
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newPNSObj, "name");
+ $scope.reload($scope.newPNSObj);
+ $scope.$emit('WIZARD_PNS_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newPNSObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedPNS) {
+ var index = $scope.list.indexOf($scope.selectedPNS);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ pns: false,
+ edit: "add"
+ };
+ $scope.$emit('WIZARD_PNS_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.selectedPNS = null;
+ $scope.internalView.pns = true;
+ $scope.internalView.edit = "add";
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newPNSObj = GBPProNamedSelServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedPNS = selectedObj;
+ $scope.newPNSObj = selectedObj;
+ $scope.internalView.pns = true;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.pns = false;
+ $scope.internalView.edit = "view";
+ };
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedEpg ) {
+ $scope.internalView.pns = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedPNS, $scope.newPNSObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('WIZARD_EPG_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('wizardSubjectCtrl', ['$scope','GBPSubjectServices', '$filter', function($scope, GBPSubjectServices, $filter){
+ $scope.list = [];
+ $scope.selectedSubject = null;
+ $scope.newSubjectObj = GBPSubjectServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ subject : false,
+ edit : "view"
+ };
+ $scope.crudLabel = 'Subject list';
+ $scope.errors = {};
+
+
+ var path = null,
+ mandatoryProperties = ['order'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedSubject = null;
+ $scope.newSubjectObj = GBPSubjectServices.createObj();
+ $scope.internalView = {
+ subject : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newSubjectObj, "name");
+ $scope.reload($scope.newSubjectObj);
+ $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newSubjectObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedSubject) {
+ var index = $scope.list.indexOf($scope.selectedSubject);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ subject: false,
+ edit: "add"
+ };
+ $scope.reloadNewObj();
+ $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newSubjectObj = GBPSubjectServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedSubject = selectedObj;
+ $scope.newSubjectObj = selectedObj;
+ $scope.internalView.subject = true;
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.subject = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedSubject = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.subject = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedSubject ) {
+ $scope.internalView.subject = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedSubject, $scope.newSubjectObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_CONTRACT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on('GBP_SUBJECTS_LABEL', function(event, obj){
+ obj.labels = $scope.displayLabel;
+ });
+
+ $scope.$on("WIZARD_RULE_RELOAD", function(event, args){
+ //$scope.selectedEpg['consumer-named-selector'] = args;
+ $scope.newSubjectObj['rule'] = args;
+ $scope.updateList($scope.list, $scope.newSubjectObj, "id");
+ $scope.$emit('WIZARD_SUBJECT_RELOAD', $scope.list);
+ });
+ }]);
+
+ gbp.register.controller('wizardRuleCtrl', ['$scope','GBPRuleServices', '$filter', function($scope, GBPRuleServices, $filter){
+ $scope.list = [];
+ $scope.selectedRule = null;
+ $scope.newRuleObj = GBPRuleServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ rule : false,
+ edit : "view"
+ };
+ $scope.crudLabel = 'Rule list';
+ $scope.errors = {};
+
+ var path = null,
+ mandatoryProperties = ['order'],
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedRule = null;
+ $scope.newRuleObj = GBPRuleServices.createObj();
+ $scope.internalView = {
+ rule : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newRuleObj, "name");
+ $scope.reload($scope.newRuleObj);
+ $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newRuleObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedRule) {
+ var index = $scope.list.indexOf($scope.selectedRule);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ rule: false,
+ edit: "add"
+ };
+ $scope.reloadNewObj();
+ $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newRuleObj = GBPRuleServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedRule = selectedObj;
+ $scope.newRuleObj = selectedObj;
+ $scope.internalView.rule = true;
+ $scope.$broadcast('WIZARD_RULE_RELOAD');
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.rule = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedRule = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.rule = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedRule ) {
+ $scope.internalView.rule = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedRule, $scope.newRuleObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('GBP_SUBJECT_RELOAD',function(){
+ $scope.init();
+ });
+
+ $scope.$on("WIZARD_CLASREF_RELOAD", function(event, args){
+ $scope.newRuleObj['classifier-ref'] = args;
+ $scope.updateList($scope.list, $scope.newRuleObj, "name");
+ $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);
+ });
+
+ $scope.$on("WIZARD_ACTIONREF_RELOAD", function(event, args){
+ $scope.newRuleObj['action-ref'] = args;
+ $scope.updateList($scope.list, $scope.newRuleObj, "name");
+ $scope.$emit('WIZARD_RULE_RELOAD', $scope.list);
+ });
+ }]);
+
+ gbp.register.controller('wizardClauseCtrl', ['$scope','GBPClauseServices', 'GBPSubjectServices',
+ function($scope, GBPClauseServices, GBPSubjectServices){
+ $scope.list = [];
+ $scope.selectedClause = null;
+ $scope.newClauseObj = GBPClauseServices.createObj();
+ $scope.internalView = {
+ clause: false,
+ edit: "view"
+ };
+ $scope.displayLabel = 'name';
+ $scope.crudLabel = 'Clause list';
+
+ $scope.subjects = {'options' : [], 'labels' : null};
+ $scope.getDisplayLabelsFromCtrl('GBP_SUBJECTS_LABEL', $scope.subjects);
+
+ var path = null,
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedClause = null;
+ $scope.newClauseObj = GBPClauseServices.createObj();
+ $scope.internalView = {
+ clause: false,
+ edit: "view"
+ };
+ };
+
+ //move to separate ctrl \/
+ $scope.addNewElem = function(templateObj) {
+ if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {
+ $scope.init();
+ var objToPush = templateObj || "";
+ $scope.newClauseObj['subject-refs'].push(objToPush);
+ }
+ };
+
+ $scope.deleteElemAt = function(index) {
+ if($scope.newClauseObj && $scope.newClauseObj['subject-refs']) {
+ $scope.newClauseObj['subject-refs'].splice(index, 1);
+ }
+ };
+
+ $scope.updateAt = function(index, value) {
+ if($scope.newClauseObj && $scope.newClauseObj['subject-refs'] && $scope.newClauseObj['subject-refs'].length >= index) {
+ $scope.newClauseObj['subject-refs'][index] = value;
+ }
+ };
+ //move to separate ctrl /\
+
+ $scope.init = function() {
+ if($scope.selectedContract && $scope.selectedContract['subject'].length>0) {
+ $scope.subjects.options = $scope.selectedContract['subject'];
+ }
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newClauseObj, "name");
+ $scope.reload($scope.newClauseObj);
+ $scope.$emit('WIZARD_CLAUSE_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newClauseObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedClause) {
+ var index = $scope.list.indexOf($scope.selectedClause);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ clause: false,
+ edit: "add"
+ };
+ $scope.$emit('WIZARD_CLAUSE_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newClauseObj = GBPClauseServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedClause = selectedObj;
+ $scope.newClauseObj = selectedObj;
+ $scope.internalView.clause = true;
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.clause = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedClause = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.clause = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedClause ) {
+ $scope.internalView.clause = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedClause, $scope.newClauseObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('WIZARD_SUBJECT_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('wizardActionRefCtrl', ['$scope','GBPActionRefsServices', 'GBPActionInstanceServices', '$filter', function($scope, GBPActionRefsServices, GBPActionInstanceServices, $filter){
+ $scope.list = [];
+ $scope.selectedActionRef = null;
+ $scope.newActionRefObj = GBPActionRefsServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ actionRef : false,
+ edit : "view"
+ };
+ $scope.crudLabel = 'Action ref list';
+
+ $scope.actionInstanceNames = {'options' : [], 'labels' : $scope.displayLabel};
+
+ var path = null,
+ mandatoryProperties = ['order'],
+
+ actionInstanceNamesLoad = function() {
+ if($scope.tenant) {
+ var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.tenant.id);
+ GBPActionInstanceServices.load(actionInstancePath, function(data){
+ $scope.actionInstanceNames.options = data;
+ },function(){
+ //TODO: error cbk
+ });
+ }
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedActionRef = null;
+ $scope.newActionRefObj = GBPActionRefsServices.createObj();
+ $scope.internalView = {
+ actionRef : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+ actionInstanceNamesLoad();
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newActionRefObj, "name");
+ $scope.reload($scope.newActionRefObj);
+ $scope.$emit('WIZARD_ACTIONREF_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newActionRefObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedActionRef) {
+ var index = $scope.list.indexOf($scope.selectedActionRef);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ actionRef: false,
+ edit: "add"
+ };
+ $scope.$emit('WIZARD_ACTIONREF_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newActionRefObj = GBPActionRefsServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedActionRef = selectedObj;
+ $scope.newActionRefObj = selectedObj;
+ $scope.internalView.actionRef = true;
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.actionRef = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedActionRef = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.actionRef = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedActionRef ) {
+ $scope.internalView.actionRef = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedActionRef, $scope.newActionRefObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('WIZARD_RULE_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('wizardClassifierRefCtrl', ['$scope','GBPClassifierRefsServices', 'GBPClassifierInstanceServices', '$filter', function($scope, GBPClassifierRefsServices, GBPClassifierInstanceServices, $filter){
+ $scope.list = [];
+ $scope.selectedClassifierRef = null;
+ $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();
+ $scope.displayLabel = 'name';
+ $scope.internalView = {
+ classifierRef : false,
+ edit : "view"
+ };
+
+ $scope.instanceNames = {'options' : [], 'labels' : $scope.displayLabel};
+
+ $scope.formDirections = ['in', 'out', 'bidirectional'];
+ $scope.formConnectionTracking = ['normal', 'reflexive'];
+
+ $scope.crudLabel = 'Classifier ref list';
+
+ var path = null,
+
+ instanceNamesLoad = function() {
+ if($scope.tenant) {
+ var classifierInstancePath = GBPClassifierInstanceServices.createPathObj($scope.tenant.id);
+ GBPClassifierInstanceServices.load(classifierInstancePath, function(data){
+ $scope.instanceNames.options = data;
+ },function(){
+ //TODO: error cbk
+ });
+ }
+ },
+
+ clear = function(){
+ $scope.list = [];
+ $scope.selectedClassifierRef = null;
+ $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();
+ $scope.internalView = {
+ classifierRef : false,
+ edit : "view"
+ };
+ };
+
+ $scope.init = function() {
+ instanceNamesLoad();
+ };
+
+ $scope.save = function(){
+ $scope.updateList($scope.list, $scope.newClassifierRefObj, "name");
+ $scope.reload($scope.newClassifierRefObj);
+ $scope.$emit('WIZARD_CLASREF_RELOAD', $scope.list);
+ $scope.$broadcast('EV_SET_SEL_CLASS', $scope.newClassifierRefObj);
+ };
+
+ $scope.delete = function() {
+ if($scope.selectedClassifierRef) {
+ var index = $scope.list.indexOf($scope.selectedClassifierRef);
+ $scope.list.splice(index, 1);
+ $scope.internalView = {
+ classifierRef: false,
+ edit: "add"
+ };
+ $scope.$emit('WIZARD_CLASREF_RELOAD', $scope.list);
+ }
+ };
+
+ $scope.reloadNewObj = function() {
+ $scope.newClassifierRefObj = GBPClassifierRefsServices.createObj();
+ };
+
+ $scope.reload = function(selectedObj) {
+ $scope.selectedClassifierRef = selectedObj;
+ $scope.newClassifierRefObj = selectedObj;
+ $scope.internalView.classifierRef = true;
+ };
+
+ $scope.showForm = function() {
+ $scope.reloadNewObj();
+ $scope.internalView.classifierRef = true;
+ $scope.internalView.edit = "add";
+ $scope.selectedClassifierRef = null;
+ };
+
+ $scope.close = function(){
+ $scope.internalView.classifierRef = false;
+ $scope.internalView.edit = "view";
+ };
+
+ $scope.$on('PGN_EDIT_ELEM', function(event){
+ if (!event.defaultPrevented) {
+ if ( $scope.selectedClassifierRef ) {
+ $scope.internalView.classifierRef = true;
+ $scope.internalView.edit = "edit";
+ angular.copy($scope.selectedClassifierRef, $scope.newClassifierRefObj);
+ }
+ event.defaultPrevented = true;
+ }
+ });
+
+ $scope.$on('WIZARD_RULE_RELOAD',function(){
+ $scope.init();
+ });
+ }]);
+
+ gbp.register.controller('rendererStateCtrl', ['$scope', 'GPBServices', function($scope, GPBServices){
+ $scope.data = {'subject-feature-definitions' : {}};
+ $scope.view_path = 'src/app/gbp/views/governance';
+
+ var init = function(){
+ GPBServices.getDefinitions(function(classifiersDefs, actionsDefs){
+ $scope.data['subject-feature-definitions']['classifier-definition'] = classifiersDefs;
+ $scope.data['subject-feature-definitions']['action-definition'] = actionsDefs;
+ }, function(){
+ //error
+ });
+ };
+
+ init();
+ }]);
+
+ gbp.register.controller('layerCtrl', ['$scope', function($scope){
+
+ var moveOffset = 1;
+ $scope.currentDisplayIndex = 1;
+ $scope.displayOffsets = [-1, 0, 1];
+ $scope.expanded = true;
+
+ $scope.init = function(key, value){
+ $scope.data = value;
+ if($scope.checkData(value, 'Array')){
+ $scope.setActData($scope.data[$scope.data.length - 1]);
+ }
+ };
+
+ $scope.toggleExpanded = function(){
+ $scope.expanded = !$scope.expanded;
+ };
+
+ $scope.shiftDisplayNext = function() {
+ $scope.currentDisplayIndex = Math.min($scope.currentDisplayIndex + moveOffset, $scope.data.length - 2);
+ };
+
+ $scope.shiftDisplayPrev = function() {
+ $scope.currentDisplayIndex = Math.max($scope.currentDisplayIndex - moveOffset, 1);
+ };
+
+ $scope.showPrevButton = function() {
+ return $scope.currentDisplayIndex > 1;
+ };
+
+ $scope.showNextButton = function() {
+ return $scope.data && $scope.currentDisplayIndex < $scope.data.length - 2;
+ };
+
+ $scope.setActData = function(data) {
+ $scope.actSelected = data;
+ };
+
+ $scope.checkData = function(data, type){
+ var result = {'Array' : data instanceof Array,
+ 'Object' : data instanceof Object};
+
+ return result[type];
+ };
+ }]);
+
+ gbp.register.controller('actionReferenceWizardCtrl', ['$scope', '$filter', 'GBPRuleServices', 'GBPActionInstanceServices', function($scope, $filter, GBPRuleServices, GBPActionInstanceServices){
+ $scope.wizardPage = null;
+ $scope.path = {};
+ $scope.rule = {};
+
+ $scope.actionInstanceNames = {'options' : [], 'labels' : "name"};
+
+ var actionInstanceNamesLoad = function() {
+ var actionInstancePath = GBPActionInstanceServices.createPathObj($scope.selectedTenant.id);
+ GBPActionInstanceServices.load(actionInstancePath, function(data){
+ $scope.actionInstanceNames.options = data;
+ },function(){
+ //TODO: error cbk
+ });
+ };
+
+ $scope.init = function() {
+ $scope.setPage('reference');
+ };
+
+ $scope.setPage = function(pageName, object) {
+ $scope.wizardPage = pageName;
+ };
+
+ $scope.submit = function() {
+ //if($scope.validateForm($scope.actionsForm)){
+ $scope.actionInstanceNames.options.forEach(function(i) {
+ path = GBPActionInstanceServices.createPathObj($scope.path.tenantId, i.name);
+ //saveParams();
+
+ GBPActionInstanceServices.send(path, i, function(data){
+ $scope.sendReloadEventFromRoot('GBP_ACTION_INSTANCE_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ });
+
+ //}
+
+ //if($scope.validateForm($scope.rulesForm)){
+ path = GBPRuleServices.createPathObj($scope.path.tenantId, $scope.path.contractId, $scope.path.subjectId, $scope.path.ruleId);
+ GBPRuleServices.send(path, $scope.rule, function(data){
+
+ $scope.wizards.actionReferenceWizard = false;
+
+ //$scope.sendReloadEventFromRoot('GBP_TENANT_RELOAD');
+ }, function(){
+ //TODO: error cbk
+ });
+ //}
+ //$scope.
+ };
+
+ $scope.$on('ACTION_RULE_WIZARD_LOAD', function(event, data){
+ $scope.rule = angular.copy(data.data);
+ $scope.path = data.path;
+ });
+
+ $scope.$on('WIZARD_ACTIONREF_ADD', function(event, data){
+ if(!$scope.rule['action-ref']) {
+ $scope.rule['action-ref'] = [];
+ }
+ $scope.updateList($scope.rule['action-ref'], data, "name");
+ });
+
+ $scope.$on('WIZARD_ACTIONREF_DELETE', function(event, data){
+ $scope.rule['action-ref'].splice(data, 1);
+ });
+
+ $scope.$on('WIZARD_ACTIONINSTANCE_ADD', function(event, data){
+ $scope.updateList($scope.actionInstanceNames.options, data, "name");
+
+ $scope.setPage('reference');
+ });
+
+ $scope.$on('GBP_TENANT_RELOAD',function(){
+ actionInstanceNamesLoad();
+ });
+
+ }]);
+
+ gbp.register.controller('actionsRefListCtrl', ['$scope', '$filter', function($scope, $filter){
+
+ $scope.actionReferenceForm = false;
+
+ $scope.showForm = function(object) {
+ $scope.actionReferenceForm = true;
+ $scope.newActionRefObj = object || null;
+ };
+
+ $scope.closeForm = function() {
+ $scope.actionReferenceForm = false;
+ };
+
+ $scope.save = function(){
+ $scope.$emit('WIZARD_ACTIONREF_ADD', $scope.newActionRefObj);
+ $scope.resetObject();
+ };
+
+ $scope.deleteElemAt = function(index) {
+ $scope.$emit('WIZARD_ACTIONREF_DELETE', index);
+ $scope.resetObject();
+ };
+
+ $scope.resetObject = function() {
+ $scope.newActionRefObj = null;
+ };
+
+
+
+ }]);
+
+ gbp.register.controller('actionInstanceWizardCtrl', ['$scope', '$filter', 'GPBServices', 'GBPActionInstanceServices', function($scope, $filter, GPBServices, GBPActionInstanceServices){
+ $scope.actionDefinitions = {'options' : [], 'labels' : "name"};
+ $scope.newActionObj = GBPActionInstanceServices.createObj();
+
+ var loadDefinitions = function() {
+ GPBServices.getDefinitions(function(classifierDefs, actionDefs) {
+ $scope.actionDefinitions.options = actionDefs;
+ //$scope.getDisplayLabelsFromCtrl('GBP_ACTIONS_LABEL', $scope.actionDefinitions);
+ });
+ };
+
+ $scope.reloadDefs = function(){
+ $scope.defs = angular.copy($scope.getDefinitionObjParams($scope.newActionObj['action-definition-id']));
+
+ //TODO: rework
+ if($scope.defs.length && $scope.defs[0].name === 'sfc-chain-name') {
+ GPBServices.getServiceFunctionChains(function(data) {
+ $scope.serviceFunctionChains = data;
+ });
+ }
+ };
+
+ $scope.getDefinitionObjParams = function(id){
+ return GPBServices.getDefinitionObjParams($scope.actionDefinitions.options, id);
+ };
+
+ $scope.save = function(){
+ $scope.newActionObj['parameter-value'] = [];
+ $scope.$broadcast('GBP_SAVE_PARAM');
+ $scope.$emit('WIZARD_ACTIONINSTANCE_ADD', $scope.newActionObj);
+ $scope.resetObject();
+ };
+
+ $scope.resetObject = function() {
+ $scope.newActionObj = GBPActionInstanceServices.createObj();
+ };
+
+ $scope.saveParam = function() {
+
+ };
+
+ $scope.addParam = function(name, type, value) {
+ $scope.newActionObj['parameter-value'].push(GPBServices.createParamObj(name, type, value));
+ };
+
+ loadDefinitions();
+
+ }]);
+
+});
+
+
-.pl0 {\r
- padding-left: 0 !important;\r
-}\r
-.pr0 {\r
- padding-right: 0 !important;\r
-}\r
-.mt10 {\r
- margin-top: 10px;\r
-}\r
-.mt20 {\r
- margin-top: 20px;\r
-}\r
-.mt30 {\r
- margin-top: 30px;\r
-}\r
-.mt40 {\r
- margin-top: 40px;\r
-}\r
-.mb50 {\r
- margin-bottom: 50px;\r
-}\r
-.mb0 {\r
- margin-bottom: 0px !important;\r
-}\r
-.ml10 {\r
- margin-left: 10px !important;\r
-}\r
-.ml20 {\r
- margin-left: 20px !important;\r
-}\r
-.ml30 {\r
- margin-left: 30px !important;\r
-}\r
-.maxHeight500 {\r
- max-height: 500px;\r
- overflow-y: scroll;\r
-}\r
-.gbpGlobalWrapper {\r
- background: #f5f5f5;\r
- margin-bottom: 0!important;\r
- min-height: 100%;\r
- padding-bottom: 60px;\r
-}\r
-.gbpGlobalWrapper span,\r
-.gbpGlobalWrapper label {\r
- color: #393939;\r
-}\r
-.gbpGlobalWrapper h2 {\r
- color: #666;\r
-}\r
-.gbpGlobalWrapper .form-control,\r
-.gbpGlobalWrapper .main input[type="text"] {\r
- background: #fff;\r
- color: #858585;\r
-}\r
-.gbpGlobalWrapper .form-control[disabled],\r
-.gbpGlobalWrapper .main input[type="text"][disabled] {\r
- background: #eeeeee;\r
-}\r
-.gbpGlobalWrapper .form-control.narrow-input-left {\r
- width: 45%;\r
- float: left;\r
-}\r
-.gbpGlobalWrapper .form-control.narrow-input-right {\r
- width: 45%;\r
- float: right;\r
-}\r
-.gbpGlobalWrapper .row-param {\r
- margin-bottom: 15px;\r
- float: left;\r
-}\r
-.gbpGlobalWrapper .param-label {\r
- width: 100%;\r
- float: left;\r
-}\r
-.gbpGlobalWrapper .ep-filter {\r
- margin-bottom: 20px;\r
-}\r
-.gbpGlobalWrapper .ep-filter DIV {\r
- width: 48%;\r
-}\r
-.gbpGlobalWrapper .float-left {\r
- float: left;\r
-}\r
-.gbpGlobalWrapper .float-right {\r
- float: right;\r
-}\r
-.gbpGlobalWrapper .full-width {\r
- width: 100%;\r
-}\r
-.gbpGlobalWrapper .full-width .btn {\r
- width: 50px;\r
-}\r
-.gbpGlobalWrapper .full-width label {\r
- margin-top: 10px;\r
-}\r
-.gbpWrapper .btn-primary {\r
- color: #ffffff;\r
- background-color: #428bca;\r
- border-color: #357ebd;\r
- font-weight: normal;\r
-}\r
-.gbpWrapper .btn-primary:hover {\r
- background-color: #1BAAFD;\r
- border-color: #1BAAFD;\r
-}\r
-.gbpWrapper .btn-primary.bottom-buttons {\r
- bottom: 0;\r
- position: absolute;\r
- margin-bottom: 0 !important;\r
- background-color: #FF7300;\r
- border-color: #FF7300;\r
- width: 45%;\r
-}\r
-.gbpWrapper .btn-primary.bottom-buttons.back {\r
- right: 0;\r
- margin-right: 15px;\r
-}\r
-.gbpWrapper .btn-primary.bottom-buttons.home {\r
- left: 0;\r
- margin-left: 15px;\r
-}\r
-.gbpWrapper .btn-primary.bottom-buttons:hover {\r
- background-color: #FF8f33;\r
- border-color: #FF8f33;\r
-}\r
-.gbpWrapper .btn-primary.bottom-buttons.full-width {\r
- width: calc(100% - 30px);\r
- left: 0;\r
- margin-left: 15px;\r
-}\r
-.gbpWrapper .btn-primary.bottom-buttons.wizard-button {\r
- bottom: 40px;\r
-}\r
-.gbpWrapper .btn-primary.btn-big {\r
- padding: 20px;\r
- font-size: 1.5em;\r
- white-space: normal;\r
-}\r
-.gbpWrapper .noPadding {\r
- padding: 0!important;\r
-}\r
-.gbpWrapper .basicLabel {\r
- padding: 0;\r
- font-weight: normal;\r
-}\r
-.gbpWrapper .rowWrapper {\r
- margin-bottom: 5px;\r
-}\r
-.gbpWrapper .inline-block {\r
- display: inline-block;\r
-}\r
-.gbpWrapper #graph {\r
- overflow: auto;\r
- width: 100%;\r
- height: 100%;\r
-}\r
-.gbpWrapper .graphWrapper {\r
- position: relative;\r
-}\r
-.gbpWrapper .graphWrapper .controlPanelButtons {\r
- position: absolute;\r
- top: 50px;\r
- right: 0px;\r
-}\r
-.gbpWrapper .graphWrapper .controlPanelButtons .line {\r
- margin: 5px 0;\r
-}\r
-.gbpWrapper .graphWrapper .btn {\r
- min-width: 22px;\r
- line-height: 22px;\r
- text-align: center;\r
- padding: 0!important;\r
-}\r
-.gbpWrapper .simpleBox {\r
- -webkit-border-radius: 5px;\r
- -moz-border-radius: 5px;\r
- -ms-border-radius: 5px;\r
- -o-border-radius: 5px;\r
- border-radius: 5px;\r
- border: 1px solid #e5e5e5;\r
- background: #fff;\r
- padding: 20px;\r
-}\r
-.gbpWrapper .simpleBox h2 {\r
- margin-top: 0;\r
-}\r
-.gbpWrapper .sectionTitle {\r
- padding: 20px;\r
-}\r
-.gbpWrapper .sectionTitle label {\r
- font-size: 25px;\r
-}\r
-.gbpWrapper .legendBox {\r
- position: absolute;\r
- top: 50px;\r
- right: 50px;\r
- z-index: 10;\r
-}\r
-.gbpWrapper .legendBox ul {\r
- padding: 0;\r
- list-style: none;\r
-}\r
-.gbpWrapper .legendBox ul .item {\r
- padding-top: 5px;\r
- margin-bottom: 10px;\r
-}\r
-.gbpWrapper .legendBox ul .line {\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
- margin: 9px 5px 0 0;\r
- width: 50px;\r
-}\r
-.gbpWrapper .legendBox ul .line.blue {\r
- border-top: 2px solid blue;\r
-}\r
-.gbpWrapper .legendBox ul .line.green {\r
- border-top: 2px solid green;\r
-}\r
-.gbpWrapper .mainNavigationWrapper {\r
- padding-bottom: 50px;\r
- overflow-x: scroll;\r
-}\r
-.gbpWrapper .mainNavigation {\r
- padding-top: 5%;\r
- min-width: 1450px;\r
-}\r
-.gbpWrapper .mainNavigation .topButtonsWrapper,\r
-.gbpWrapper .mainNavigation .bottomButtonsWrapper {\r
- text-align: center;\r
- width: 400px;\r
- margin: 0 auto 15px;\r
- padding: 0 0 20px;\r
- border-bottom: 5px solid #393939;\r
-}\r
-.gbpWrapper .mainNavigation .bottomButtonsWrapper {\r
- border-bottom: 0;\r
- border-top: 5px solid #393939;\r
- padding: 20px 0 0;\r
- margin: 15px auto 0;\r
-}\r
-.gbpWrapper .mainNavigation .middleButtonsWrapper {\r
- text-align: center;\r
-}\r
-.gbpWrapper .mainNavigation .middleButtonsWrapper .buttonWrapper {\r
- margin-top: 25px;\r
-}\r
-.gbpWrapper .mainNavigation .middleButtonsWrapper .iconWrapper {\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
- padding-top: 10px;\r
-}\r
-.gbpWrapper .mainNavigation .middleBox {\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
- width: 500px;\r
- height: 150px;\r
- border-left: 5px solid #393939;\r
- border-right: 5px solid #393939;\r
-}\r
-.gbpWrapper .mainNavigation .middleBox .infinityIcon {\r
- background: transparent url('../../src/app/gbp/images/infinity-loop.tpl.html') no-repeat center center;\r
- width: 128px;\r
- height: 128px;\r
- margin: 11px auto 0;\r
- cursor: pointer;\r
-}\r
-.gbpWrapper .mainNavigation .buttonWrapper {\r
- text-align: center;\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
-}\r
-.gbpWrapper .mainNavigation .buttonWrapper .btn-primary {\r
- font-size: 2em;\r
- padding: 25px 0;\r
- width: 350px;\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
-}\r
-.gbpWrapper .mainNavigation .buttonWrapper .icon-large:before {\r
- font-size: 5em;\r
-}\r
-.gbpWrapper aside.col-md-3 {\r
- min-height: 800px;\r
-}\r
-.gbpWrapper aside.col-md-3 .inWrapper {\r
- height: 100%;\r
-}\r
-.gbpWrapper .panelWrapper {\r
- padding: 20px 0 50px;\r
- height: calc(100% - 109px);\r
-}\r
-.gbpWrapper .panelWrapper.no-padd-top {\r
- padding-top: 0px;\r
-}\r
-.gbpWrapper .panelWrapper button.btn {\r
- margin-bottom: 5px;\r
-}\r
-.gbpWrapper .panelWrapper button.btn-list {\r
- margin-top: 25px;\r
-}\r
-.gbpWrapper .panelWrapper button.btn-default:hover {\r
- background-color: #e6e6e6 !important;\r
-}\r
-.gbpWrapper .panelWrapper button.btn-default:focus {\r
- background-color: #fff;\r
-}\r
-.gbpWrapper .panelWrapper button.activated,\r
-.gbpWrapper .panelWrapper button.activated:focus {\r
- background-color: #e6e6e6 !important;\r
-}\r
-.gbpWrapper .breadcrumbs {\r
- padding: 10px 0px;\r
- font-weight: bold;\r
- border: 0;\r
- line-height: initial;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend {\r
- margin-bottom: 25px;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend span,\r
-.gbpWrapper section.sigmaWrapper div.legend .text {\r
- color: #fff;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend ul {\r
- padding: 0;\r
- margin: 0;\r
- list-style: none;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend li {\r
- margin-bottom: 5px;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend li .textHidden {\r
- display: none;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend li .text {\r
- margin-left: 10px;\r
- line-height: 18px;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend li .showChckbx {\r
- position: relative;\r
- top: 2px;\r
- left: 5px;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend li .itemWrapper:hover .text {\r
- display: block !important;\r
-}\r
-.gbpWrapper section.sigmaWrapper div.legend div.color {\r
- /*margin-right: 15px;*/\r
- width: 18px;\r
- height: 18px;\r
- -webkit-border-radius: 9px;\r
- border-radius: 9px;\r
- cursor: pointer;\r
-}\r
-.gbpWrapper #graph-container {\r
- padding: 0;\r
- height: 800px;\r
-}\r
-.gbpWrapper .selectWrapper {\r
- padding-left: 0;\r
-}\r
-.gbpWrapper .selectWrapper.col-md-12 {\r
- padding: 0;\r
- margin-bottom: 5px;\r
-}\r
-.gbpWrapper .inputWrapper.leftInput {\r
- padding-left: 0;\r
-}\r
-.gbpWrapper .inputWrapper.rightInput {\r
- padding-right: 0;\r
-}\r
-.gbpWrapper .separator {\r
- padding-bottom: 10px;\r
- margin-top: 15px;\r
- height: 1px;\r
- padding-left: 0px;\r
- padding-right: 15px;\r
-}\r
-.gbpWrapper .inner-separator {\r
- border-bottom: 1px solid #858585;\r
- width: 100%;\r
- float: left;\r
-}\r
-.gbpWrapper .btn-group {\r
- padding: 0;\r
-}\r
-.gbpWrapper .formWrapper {\r
- margin: 20px 0;\r
-}\r
-.gbpWrapper .icon-remove.align-right {\r
- float: right;\r
-}\r
-.gbpWrapper .icon-remove.align-right.padding {\r
- margin: 5px 5px 0 0;\r
-}\r
-.gbpWrapper .icon-exclamation-sign.red {\r
- color: red;\r
-}\r
-.gbpWrapper .sigmaWrapper {\r
- position: relative;\r
-}\r
-.gbpWrapper .sigmaWrapper .sigmaModalWrapper {\r
- position: absolute;\r
- top: 30px;\r
- left: 45px;\r
- z-index: 1;\r
-}\r
-.gbpWrapper .sigmaWrapper .sigmaModalWrapper .icon-remove {\r
- position: absolute;\r
- top: 5px;\r
- right: 5px;\r
-}\r
-.gbpWrapper .sigmaWrapper .sigmaModalWrapper .tableWrapper {\r
- position: relative;\r
- background: #f5f5f5;\r
- -webkit-border-radius: 5px;\r
- -moz-border-radius: 5px;\r
- -ms-border-radius: 5px;\r
- -o-border-radius: 5px;\r
- border-radius: 5px;\r
- min-width: 400px;\r
- min-height: 100px;\r
- margin-top: 20px;\r
- padding: 20px;\r
-}\r
-.gbpWrapper .sigmaWrapper .sigmaModalWrapper .tableWrapper .dataWrapper {\r
- overflow-y: scroll;\r
- max-height: 350px;\r
-}\r
-.gbpWrapper .sigmaWrapper .sigmaModalWrapper .tableWrapper .rowWrapper {\r
- padding: 10px;\r
- margin-bottom: 10px;\r
- -webkit-border-radius: 5px;\r
- -moz-border-radius: 5px;\r
- -ms-border-radius: 5px;\r
- -o-border-radius: 5px;\r
- border-radius: 5px;\r
- border: 1px solid #d5d5d5;\r
-}\r
-.modal-dialog {\r
- z-index: 100;\r
- height: 700px;\r
- width: 700px;\r
- background-color: white;\r
- position: fixed;\r
- opacity: 1;\r
- top: 50%;\r
- left: 50%;\r
- margin: -350px 0 0 -400px;\r
-}\r
-.modal-dialog .modal-header {\r
- height: 70px;\r
- padding: 10px 15px;\r
-}\r
-.modal-dialog .modal-navigation {\r
- float: left;\r
- width: 150px;\r
- height: 630px;\r
- border-right: 1px solid #e5e5e5;\r
- background-color: #eeeeee;\r
-}\r
-.modal-dialog .modal-navigation ul {\r
- -webkit-padding-start: 0;\r
- list-style-type: none;\r
-}\r
-.modal-dialog .modal-navigation ul li.navigation-item {\r
- height: 54px;\r
- width: 100%;\r
- background-color: #eeeeee;\r
- color: #666;\r
- font-weight: bold;\r
- padding: 20px;\r
-}\r
-.modal-dialog .modal-navigation ul li.navigation-item.selected {\r
- background-color: #428bca;\r
- border-color: #357ebd;\r
- color: #ffffff;\r
-}\r
-.modal-dialog .modal-content-container {\r
- float: right;\r
- width: 550px;\r
- height: 630px;\r
-}\r
-.modal-dialog .modal-content-container .content {\r
- overflow-y: scroll;\r
- padding: 0 50px 0 20px;\r
- height: 580px;\r
-}\r
-.modal-dialog .modal-content-container .bottom-navigation {\r
- height: 50px;\r
- bottom: 0;\r
- float: right;\r
- margin: 8px 30px;\r
-}\r
-.modal-canvas {\r
- position: fixed;\r
- top: 0;\r
- right: 0;\r
- bottom: 0;\r
- left: 0;\r
- z-index: 10;\r
- background-color: #000;\r
- opacity: .15;\r
-}\r
-.link-tools .tool-remove {\r
- display: none;\r
-}\r
-.link-tools .tool-options {\r
- display: none;\r
-}\r
-.connection-wrap,\r
-.marker-arrowheads {\r
- display: none;\r
-}/*-------------------YangUI import START-------------------*/\r
-.gbpWrapper .customContainer {\r
- border-left: 1px solid #7a7a7a;\r
- margin: 35px 5px 5px 15px;\r
- padding: 5px;\r
- /*z-index: 10;*/\r
- width: auto;\r
- position: relative;\r
-}\r
-.gbpWrapper .customContainer.withoutBorder {\r
- border-left: 0;\r
- padding-bottom: 0;\r
-}\r
-.gbpWrapper .customContainer.withoutBorder .treeBullet.containerBullet {\r
- left: -25px;\r
- top: -25px;\r
-}\r
-.gbpWrapper .topContainerPart {\r
- margin-left: -19px;\r
- margin-top: -28px;\r
- margin-bottom: 10px;\r
-}\r
-.gbpWrapper .treeBullet {\r
- font-size: 25px;\r
- color: #7a7a7a;\r
- position: absolute;\r
- left: -15px;\r
- top: 0;\r
-}\r
-.gbpWrapper .treeBullet.containerBullet {\r
- top: -25px;\r
- left: -25px;\r
-}\r
-.gbpWrapper .btn-name {\r
- -webkit-border-radius: 5px;\r
- border-radius: 5px;\r
- background: transparent;\r
- font-weight: bold;\r
- color: #393939;\r
- border: 2px solid #393939;\r
- cursor: auto;\r
-}\r
-.gbpWrapper button.yangButton,\r
-.gbpWrapper div.yangButton {\r
- cursor: pointer;\r
- position: relative;\r
- width: 24px;\r
- height: 24px;\r
- border: 0;\r
- margin: 2px;\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
-}\r
-.gbpWrapper button.yangButton.iconArrowDown,\r
-.gbpWrapper div.yangButton.iconArrowDown {\r
- background: transparent url('images/yang-ui-icons/icon-arrow-down.tpl.html') no-repeat center top;\r
-}\r
-.gbpWrapper button.yangButton.iconArrowRight,\r
-.gbpWrapper div.yangButton.iconArrowRight {\r
- background: transparent url('images/yang-ui-icons/icon-arrow-right.tpl.html') no-repeat center top;\r
-}\r
-.gbpWrapper button.yangButton.iconNext,\r
-.gbpWrapper div.yangButton.iconNext {\r
- background: transparent url('images/yang-ui-icons/icon-next.tpl.html') no-repeat center top;\r
-}\r
-.gbpWrapper button.yangButton.iconPrev,\r
-.gbpWrapper div.yangButton.iconPrev {\r
- background: transparent url('images/yang-ui-icons/icon-prev.tpl.html') no-repeat center top;\r
-}\r
-.gbpWrapper button.yangButton:hover,\r
-.gbpWrapper div.yangButton:hover {\r
- background-position: center -24px;\r
-}\r
-.gbpWrapper button.yangButton.disabled,\r
-.gbpWrapper div.yangButton.disabled {\r
- -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity= 40 )' !important;\r
- filter: alpha(opacity= 40 ) !important;\r
- -moz-opacity: 0.4 !important;\r
- -khtml-opacity: 0.4 !important;\r
- opacity: 0.4 !important;\r
-}\r
-.gbpWrapper button.yangButton.disabled:hover,\r
-.gbpWrapper div.yangButton.disabled:hover {\r
- background-position: center top;\r
-}\r
-.gbpWrapper .btn-slim {\r
- padding-top: 2px;\r
- padding-bottom: 2px;\r
-}\r
-.gbpWrapper .inlineBlock {\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
-}\r
-.gbpWrapper .leaf {\r
- margin: 5px;\r
- padding-left: 5px;\r
- position: relative;\r
-}\r
-.gbpWrapper .leaf-label {\r
- margin-right: 10px;\r
- font-weight: bold;\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
- /*width: 170px;*/\r
- padding-top: 6px;\r
-}\r
-.gbpWrapper .leaf-label button.iconQuestion {\r
- margin-top: -2px;\r
-}\r
-.gbpWrapper .leaf-label i.icon-key {\r
- font-size: 1.3em;\r
- padding-left: 5px;\r
-}\r
-.gbpWrapper .clear {\r
- clear: both;\r
-}\r
-.gbpWrapper .borderArrow {\r
- color: #393939;\r
- position: absolute;\r
- bottom: -6px;\r
- left: -6px;\r
- font-size: 1.3em;\r
-}\r
-.gbpWrapper .tooltip-inner {\r
- color: #fff;\r
- white-space: pre-wrap;\r
- /* CSS3 */\r
- white-space: -moz-pre-wrap;\r
- /* Firefox */\r
- white-space: -pre-wrap;\r
- /* Opera <7 */\r
- white-space: -o-pre-wrap;\r
- /* Opera 7 */\r
- word-wrap: break-word;\r
- /* IE */\r
-}\r
-/*-------------------YangUI import END-------------------*/\r
-/*\r
--------------------JointJS Graph START-------------------\r
-.html-element {\r
- position: absolute;\r
- background: #3498DB;\r
- pointer-events: none;\r
- -webkit-user-select: none;\r
- border-radius: 4px;\r
- border: 2px solid #2980B9;\r
- box-shadow: inset 0 0 5px black, 2px 2px 1px gray;\r
- padding: 5px;\r
- box-sizing: border-box;\r
- z-index: 2;\r
- pointer-events: auto;\r
- bottom: 0;\r
- left: 0;\r
- right: 0;\r
- color: #333;\r
- height: 16px;\r
- margin-top: 107px;\r
- margin-left: 16px;\r
- width: 50px !important;\r
- height: 20px !important;\r
-}\r
--------------------JointJS Graph END-------------------\r
-*/\r
-/*GBP END*/\r
-\r
-.gbpWrapper .btn-like-tab {\r
- text-decoration: none;\r
- color: #464646;\r
- border: 0;\r
- line-height: 32px;\r
- padding: 0 15px;\r
- background: transparent !important;\r
- border-bottom: 3px solid transparent;\r
- margin: 0 10px;\r
- -webkit-border-radius: 0;\r
- -moz-border-radius: 0;\r
- -ms-border-radius: 0;\r
- -o-border-radius: 0;\r
- border-radius: 0;\r
- -webkit-transition: 150ms;\r
- transition: 150ms;\r
- -webkit-transition: all 150ms linear;\r
- -moz-transition: all 150ms linear;\r
- -ms-transition: all 150ms linear;\r
- -o-transition: all 150ms linear;\r
- transition: all 150ms linear;\r
-}\r
-.gbpWrapper .btn-like-tab.btn-selected,\r
-.gbpWrapper .btn-like-tab:hover {\r
- border-bottom: 3px solid #1baafd;\r
- background: transparent !important;\r
-}\r
-\r
-.gbpWrapper h1, .gbpWrapper h2, .gbpWrapper h3 {\r
- color: #393939;\r
-}\r
-\r
-#page_logo {\r
- display:none;\r
-}\r
-\r
-\r
+.pl0 {
+ padding-left: 0 !important;
+}
+.pr0 {
+ padding-right: 0 !important;
+}
+.mt10 {
+ margin-top: 10px;
+}
+.mt20 {
+ margin-top: 20px;
+}
+.mt30 {
+ margin-top: 30px;
+}
+.mt40 {
+ margin-top: 40px;
+}
+.mb50 {
+ margin-bottom: 50px;
+}
+.mb0 {
+ margin-bottom: 0px !important;
+}
+.ml10 {
+ margin-left: 10px !important;
+}
+.ml20 {
+ margin-left: 20px !important;
+}
+.ml30 {
+ margin-left: 30px !important;
+}
+.maxHeight500 {
+ max-height: 500px;
+ overflow-y: scroll;
+}
+.gbpGlobalWrapper {
+ background: #f5f5f5;
+ margin-bottom: 0!important;
+ min-height: 100%;
+ padding-bottom: 60px;
+}
+.gbpGlobalWrapper span,
+.gbpGlobalWrapper label {
+ color: #393939;
+}
+.gbpGlobalWrapper h2 {
+ color: #666;
+}
+.gbpGlobalWrapper .form-control,
+.gbpGlobalWrapper .main input[type="text"] {
+ background: #fff;
+ color: #858585;
+}
+.gbpGlobalWrapper .form-control[disabled],
+.gbpGlobalWrapper .main input[type="text"][disabled] {
+ background: #eeeeee;
+}
+.gbpGlobalWrapper .form-control.narrow-input-left {
+ width: 45%;
+ float: left;
+}
+.gbpGlobalWrapper .form-control.narrow-input-right {
+ width: 45%;
+ float: right;
+}
+.gbpGlobalWrapper .row-param {
+ margin-bottom: 15px;
+ float: left;
+}
+.gbpGlobalWrapper .param-label {
+ width: 100%;
+ float: left;
+}
+.gbpGlobalWrapper .ep-filter {
+ margin-bottom: 20px;
+}
+.gbpGlobalWrapper .ep-filter DIV {
+ width: 48%;
+}
+.gbpGlobalWrapper .float-left {
+ float: left;
+}
+.gbpGlobalWrapper .float-right {
+ float: right;
+}
+.gbpGlobalWrapper .full-width {
+ width: 100%;
+}
+.gbpGlobalWrapper .full-width .btn {
+ width: 50px;
+}
+.gbpGlobalWrapper .full-width label {
+ margin-top: 10px;
+}
+.gbpWrapper .btn-primary {
+ color: #ffffff;
+ background-color: #428bca;
+ border-color: #357ebd;
+ font-weight: normal;
+}
+.gbpWrapper .btn-primary:hover {
+ background-color: #1BAAFD;
+ border-color: #1BAAFD;
+}
+.gbpWrapper .btn-primary.bottom-buttons {
+ bottom: 0;
+ position: absolute;
+ margin-bottom: 0 !important;
+ background-color: #FF7300;
+ border-color: #FF7300;
+ width: 45%;
+}
+.gbpWrapper .btn-primary.bottom-buttons.back {
+ right: 0;
+ margin-right: 15px;
+}
+.gbpWrapper .btn-primary.bottom-buttons.home {
+ left: 0;
+ margin-left: 15px;
+}
+.gbpWrapper .btn-primary.bottom-buttons:hover {
+ background-color: #FF8f33;
+ border-color: #FF8f33;
+}
+.gbpWrapper .btn-primary.bottom-buttons.full-width {
+ width: calc(100% - 30px);
+ left: 0;
+ margin-left: 15px;
+}
+.gbpWrapper .btn-primary.bottom-buttons.wizard-button {
+ bottom: 40px;
+}
+.gbpWrapper .btn-primary.btn-big {
+ padding: 20px;
+ font-size: 1.5em;
+ white-space: normal;
+}
+.gbpWrapper .noPadding {
+ padding: 0!important;
+}
+.gbpWrapper .basicLabel {
+ padding: 0;
+ font-weight: normal;
+}
+.gbpWrapper .rowWrapper {
+ margin-bottom: 5px;
+}
+.gbpWrapper .inline-block {
+ display: inline-block;
+}
+.gbpWrapper #graph {
+ overflow: auto;
+ width: 100%;
+ height: 100%;
+}
+.gbpWrapper .graphWrapper {
+ position: relative;
+}
+.gbpWrapper .graphWrapper .controlPanelButtons {
+ position: absolute;
+ top: 50px;
+ right: 0px;
+}
+.gbpWrapper .graphWrapper .controlPanelButtons .line {
+ margin: 5px 0;
+}
+.gbpWrapper .graphWrapper .btn {
+ min-width: 22px;
+ line-height: 22px;
+ text-align: center;
+ padding: 0!important;
+}
+.gbpWrapper .simpleBox {
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #e5e5e5;
+ background: #fff;
+ padding: 20px;
+}
+.gbpWrapper .simpleBox h2 {
+ margin-top: 0;
+}
+.gbpWrapper .sectionTitle {
+ padding: 20px;
+}
+.gbpWrapper .sectionTitle label {
+ font-size: 25px;
+}
+.gbpWrapper .legendBox {
+ position: absolute;
+ top: 50px;
+ right: 50px;
+ z-index: 10;
+}
+.gbpWrapper .legendBox ul {
+ padding: 0;
+ list-style: none;
+}
+.gbpWrapper .legendBox ul .item {
+ padding-top: 5px;
+ margin-bottom: 10px;
+}
+.gbpWrapper .legendBox ul .line {
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+ margin: 9px 5px 0 0;
+ width: 50px;
+}
+.gbpWrapper .legendBox ul .line.blue {
+ border-top: 2px solid blue;
+}
+.gbpWrapper .legendBox ul .line.green {
+ border-top: 2px solid green;
+}
+.gbpWrapper .mainNavigationWrapper {
+ padding-bottom: 50px;
+ overflow-x: scroll;
+}
+.gbpWrapper .mainNavigation {
+ padding-top: 5%;
+ min-width: 1450px;
+}
+.gbpWrapper .mainNavigation .topButtonsWrapper,
+.gbpWrapper .mainNavigation .bottomButtonsWrapper {
+ text-align: center;
+ width: 400px;
+ margin: 0 auto 15px;
+ padding: 0 0 20px;
+ border-bottom: 5px solid #393939;
+}
+.gbpWrapper .mainNavigation .bottomButtonsWrapper {
+ border-bottom: 0;
+ border-top: 5px solid #393939;
+ padding: 20px 0 0;
+ margin: 15px auto 0;
+}
+.gbpWrapper .mainNavigation .middleButtonsWrapper {
+ text-align: center;
+}
+.gbpWrapper .mainNavigation .middleButtonsWrapper .buttonWrapper {
+ margin-top: 25px;
+}
+.gbpWrapper .mainNavigation .middleButtonsWrapper .iconWrapper {
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+ padding-top: 10px;
+}
+.gbpWrapper .mainNavigation .middleBox {
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+ width: 500px;
+ height: 150px;
+ border-left: 5px solid #393939;
+ border-right: 5px solid #393939;
+}
+.gbpWrapper .mainNavigation .middleBox .infinityIcon {
+ background: transparent url('../../src/app/gbp/images/infinity-loop.tpl.html') no-repeat center center;
+ width: 128px;
+ height: 128px;
+ margin: 11px auto 0;
+ cursor: pointer;
+}
+.gbpWrapper .mainNavigation .buttonWrapper {
+ text-align: center;
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+}
+.gbpWrapper .mainNavigation .buttonWrapper .btn-primary {
+ font-size: 2em;
+ padding: 25px 0;
+ width: 350px;
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+}
+.gbpWrapper .mainNavigation .buttonWrapper .icon-large:before {
+ font-size: 5em;
+}
+.gbpWrapper aside.col-md-3 {
+ min-height: 800px;
+}
+.gbpWrapper aside.col-md-3 .inWrapper {
+ height: 100%;
+}
+.gbpWrapper .panelWrapper {
+ padding: 20px 0 50px;
+ height: calc(100% - 109px);
+}
+.gbpWrapper .panelWrapper.no-padd-top {
+ padding-top: 0px;
+}
+.gbpWrapper .panelWrapper button.btn {
+ margin-bottom: 5px;
+}
+.gbpWrapper .panelWrapper button.btn-list {
+ margin-top: 25px;
+}
+.gbpWrapper .panelWrapper button.btn-default:hover {
+ background-color: #e6e6e6 !important;
+}
+.gbpWrapper .panelWrapper button.btn-default:focus {
+ background-color: #fff;
+}
+.gbpWrapper .panelWrapper button.activated,
+.gbpWrapper .panelWrapper button.activated:focus {
+ background-color: #e6e6e6 !important;
+}
+.gbpWrapper .breadcrumbs {
+ padding: 10px 0px;
+ font-weight: bold;
+ border: 0;
+ line-height: initial;
+}
+.gbpWrapper section.sigmaWrapper div.legend {
+ margin-bottom: 25px;
+}
+.gbpWrapper section.sigmaWrapper div.legend span,
+.gbpWrapper section.sigmaWrapper div.legend .text {
+ color: #fff;
+}
+.gbpWrapper section.sigmaWrapper div.legend ul {
+ padding: 0;
+ margin: 0;
+ list-style: none;
+}
+.gbpWrapper section.sigmaWrapper div.legend li {
+ margin-bottom: 5px;
+}
+.gbpWrapper section.sigmaWrapper div.legend li .textHidden {
+ display: none;
+}
+.gbpWrapper section.sigmaWrapper div.legend li .text {
+ margin-left: 10px;
+ line-height: 18px;
+}
+.gbpWrapper section.sigmaWrapper div.legend li .showChckbx {
+ position: relative;
+ top: 2px;
+ left: 5px;
+}
+.gbpWrapper section.sigmaWrapper div.legend li .itemWrapper:hover .text {
+ display: block !important;
+}
+.gbpWrapper section.sigmaWrapper div.legend div.color {
+ /*margin-right: 15px;*/
+ width: 18px;
+ height: 18px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+ cursor: pointer;
+}
+.gbpWrapper #graph-container {
+ padding: 0;
+ height: 800px;
+}
+.gbpWrapper .selectWrapper {
+ padding-left: 0;
+}
+.gbpWrapper .selectWrapper.col-md-12 {
+ padding: 0;
+ margin-bottom: 5px;
+}
+.gbpWrapper .inputWrapper.leftInput {
+ padding-left: 0;
+}
+.gbpWrapper .inputWrapper.rightInput {
+ padding-right: 0;
+}
+.gbpWrapper .separator {
+ padding-bottom: 10px;
+ margin-top: 15px;
+ height: 1px;
+ padding-left: 0px;
+ padding-right: 15px;
+}
+.gbpWrapper .inner-separator {
+ border-bottom: 1px solid #858585;
+ width: 100%;
+ float: left;
+}
+.gbpWrapper .btn-group {
+ padding: 0;
+}
+.gbpWrapper .formWrapper {
+ margin: 20px 0;
+}
+.gbpWrapper .icon-remove.align-right {
+ float: right;
+}
+.gbpWrapper .icon-remove.align-right.padding {
+ margin: 5px 5px 0 0;
+}
+.gbpWrapper .icon-exclamation-sign.red {
+ color: red;
+}
+.gbpWrapper .sigmaWrapper {
+ position: relative;
+}
+.gbpWrapper .sigmaWrapper .sigmaModalWrapper {
+ position: absolute;
+ top: 30px;
+ left: 45px;
+ z-index: 1;
+}
+.gbpWrapper .sigmaWrapper .sigmaModalWrapper .icon-remove {
+ position: absolute;
+ top: 5px;
+ right: 5px;
+}
+.gbpWrapper .sigmaWrapper .sigmaModalWrapper .tableWrapper {
+ position: relative;
+ background: #f5f5f5;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+ min-width: 400px;
+ min-height: 100px;
+ margin-top: 20px;
+ padding: 20px;
+}
+.gbpWrapper .sigmaWrapper .sigmaModalWrapper .tableWrapper .dataWrapper {
+ overflow-y: scroll;
+ max-height: 350px;
+}
+.gbpWrapper .sigmaWrapper .sigmaModalWrapper .tableWrapper .rowWrapper {
+ padding: 10px;
+ margin-bottom: 10px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -ms-border-radius: 5px;
+ -o-border-radius: 5px;
+ border-radius: 5px;
+ border: 1px solid #d5d5d5;
+}
+.modal-dialog {
+ z-index: 100;
+ height: 700px;
+ width: 700px;
+ background-color: white;
+ position: fixed;
+ opacity: 1;
+ top: 50%;
+ left: 50%;
+ margin: -350px 0 0 -400px;
+}
+.modal-dialog .modal-header {
+ height: 70px;
+ padding: 10px 15px;
+}
+.modal-dialog .modal-navigation {
+ float: left;
+ width: 150px;
+ height: 630px;
+ border-right: 1px solid #e5e5e5;
+ background-color: #eeeeee;
+}
+.modal-dialog .modal-navigation ul {
+ -webkit-padding-start: 0;
+ list-style-type: none;
+}
+.modal-dialog .modal-navigation ul li.navigation-item {
+ height: 54px;
+ width: 100%;
+ background-color: #eeeeee;
+ color: #666;
+ font-weight: bold;
+ padding: 20px;
+}
+.modal-dialog .modal-navigation ul li.navigation-item.selected {
+ background-color: #428bca;
+ border-color: #357ebd;
+ color: #ffffff;
+}
+.modal-dialog .modal-content-container {
+ float: right;
+ width: 550px;
+ height: 630px;
+}
+.modal-dialog .modal-content-container .content {
+ overflow-y: scroll;
+ padding: 0 50px 0 20px;
+ height: 580px;
+}
+.modal-dialog .modal-content-container .bottom-navigation {
+ height: 50px;
+ bottom: 0;
+ float: right;
+ margin: 8px 30px;
+}
+.modal-canvas {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 10;
+ background-color: #000;
+ opacity: .15;
+}
+.link-tools .tool-remove {
+ display: none;
+}
+.link-tools .tool-options {
+ display: none;
+}
+.connection-wrap,
+.marker-arrowheads {
+ display: none;
+}/*-------------------YangUI import START-------------------*/
+.gbpWrapper .customContainer {
+ border-left: 1px solid #7a7a7a;
+ margin: 35px 5px 5px 15px;
+ padding: 5px;
+ /*z-index: 10;*/
+ width: auto;
+ position: relative;
+}
+.gbpWrapper .customContainer.withoutBorder {
+ border-left: 0;
+ padding-bottom: 0;
+}
+.gbpWrapper .customContainer.withoutBorder .treeBullet.containerBullet {
+ left: -25px;
+ top: -25px;
+}
+.gbpWrapper .topContainerPart {
+ margin-left: -19px;
+ margin-top: -28px;
+ margin-bottom: 10px;
+}
+.gbpWrapper .treeBullet {
+ font-size: 25px;
+ color: #7a7a7a;
+ position: absolute;
+ left: -15px;
+ top: 0;
+}
+.gbpWrapper .treeBullet.containerBullet {
+ top: -25px;
+ left: -25px;
+}
+.gbpWrapper .btn-name {
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ background: transparent;
+ font-weight: bold;
+ color: #393939;
+ border: 2px solid #393939;
+ cursor: auto;
+}
+.gbpWrapper button.yangButton,
+.gbpWrapper div.yangButton {
+ cursor: pointer;
+ position: relative;
+ width: 24px;
+ height: 24px;
+ border: 0;
+ margin: 2px;
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+}
+.gbpWrapper button.yangButton.iconArrowDown,
+.gbpWrapper div.yangButton.iconArrowDown {
+ background: transparent url('images/yang-ui-icons/icon-arrow-down.tpl.html') no-repeat center top;
+}
+.gbpWrapper button.yangButton.iconArrowRight,
+.gbpWrapper div.yangButton.iconArrowRight {
+ background: transparent url('images/yang-ui-icons/icon-arrow-right.tpl.html') no-repeat center top;
+}
+.gbpWrapper button.yangButton.iconNext,
+.gbpWrapper div.yangButton.iconNext {
+ background: transparent url('images/yang-ui-icons/icon-next.tpl.html') no-repeat center top;
+}
+.gbpWrapper button.yangButton.iconPrev,
+.gbpWrapper div.yangButton.iconPrev {
+ background: transparent url('images/yang-ui-icons/icon-prev.tpl.html') no-repeat center top;
+}
+.gbpWrapper button.yangButton:hover,
+.gbpWrapper div.yangButton:hover {
+ background-position: center -24px;
+}
+.gbpWrapper button.yangButton.disabled,
+.gbpWrapper div.yangButton.disabled {
+ -ms-filter: 'progid:DXImageTransform.Microsoft.Alpha(Opacity= 40 )' !important;
+ filter: alpha(opacity= 40 ) !important;
+ -moz-opacity: 0.4 !important;
+ -khtml-opacity: 0.4 !important;
+ opacity: 0.4 !important;
+}
+.gbpWrapper button.yangButton.disabled:hover,
+.gbpWrapper div.yangButton.disabled:hover {
+ background-position: center top;
+}
+.gbpWrapper .btn-slim {
+ padding-top: 2px;
+ padding-bottom: 2px;
+}
+.gbpWrapper .inlineBlock {
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+}
+.gbpWrapper .leaf {
+ margin: 5px;
+ padding-left: 5px;
+ position: relative;
+}
+.gbpWrapper .leaf-label {
+ margin-right: 10px;
+ font-weight: bold;
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+ /*width: 170px;*/
+ padding-top: 6px;
+}
+.gbpWrapper .leaf-label button.iconQuestion {
+ margin-top: -2px;
+}
+.gbpWrapper .leaf-label i.icon-key {
+ font-size: 1.3em;
+ padding-left: 5px;
+}
+.gbpWrapper .clear {
+ clear: both;
+}
+.gbpWrapper .borderArrow {
+ color: #393939;
+ position: absolute;
+ bottom: -6px;
+ left: -6px;
+ font-size: 1.3em;
+}
+.gbpWrapper .tooltip-inner {
+ color: #fff;
+ white-space: pre-wrap;
+ /* CSS3 */
+ white-space: -moz-pre-wrap;
+ /* Firefox */
+ white-space: -pre-wrap;
+ /* Opera <7 */
+ white-space: -o-pre-wrap;
+ /* Opera 7 */
+ word-wrap: break-word;
+ /* IE */
+}
+/*-------------------YangUI import END-------------------*/
+/*
+-------------------JointJS Graph START-------------------
+.html-element {
+ position: absolute;
+ background: #3498DB;
+ pointer-events: none;
+ -webkit-user-select: none;
+ border-radius: 4px;
+ border: 2px solid #2980B9;
+ box-shadow: inset 0 0 5px black, 2px 2px 1px gray;
+ padding: 5px;
+ box-sizing: border-box;
+ z-index: 2;
+ pointer-events: auto;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ color: #333;
+ height: 16px;
+ margin-top: 107px;
+ margin-left: 16px;
+ width: 50px !important;
+ height: 20px !important;
+}
+-------------------JointJS Graph END-------------------
+*/
+/*GBP END*/
+
+.gbpWrapper .btn-like-tab {
+ text-decoration: none;
+ color: #464646;
+ border: 0;
+ line-height: 32px;
+ padding: 0 15px;
+ background: transparent !important;
+ border-bottom: 3px solid transparent;
+ margin: 0 10px;
+ -webkit-border-radius: 0;
+ -moz-border-radius: 0;
+ -ms-border-radius: 0;
+ -o-border-radius: 0;
+ border-radius: 0;
+ -webkit-transition: 150ms;
+ transition: 150ms;
+ -webkit-transition: all 150ms linear;
+ -moz-transition: all 150ms linear;
+ -ms-transition: all 150ms linear;
+ -o-transition: all 150ms linear;
+ transition: all 150ms linear;
+}
+.gbpWrapper .btn-like-tab.btn-selected,
+.gbpWrapper .btn-like-tab:hover {
+ border-bottom: 3px solid #1baafd;
+ background: transparent !important;
+}
+
+.gbpWrapper h1, .gbpWrapper h2, .gbpWrapper h3 {
+ color: #393939;
+}
+
+#page_logo {
+ display:none;
+}
+
+
-/*GBP*/\r
-.pl0{padding-left: 0!important};\r
-.pr0{padding-right: 0!important};\r
-\r
-.mt10{margin-top: 10px};\r
-.mt20{margin-top: 20px};\r
-.mt30{margin-top: 30px};\r
-.mt40{margin-top: 40px};\r
-\r
-.mb50{margin-bottom: 50px};\r
-.mb0{margin-bottom: 0px!important};\r
-\r
-.ml10{margin-left: 10px!important};\r
-.ml20{margin-left: 20px!important};\r
-.ml30{margin-left: 30px!important};\r
-\r
-.maxHeight500{\r
- max-height: 500px;\r
- overflow-y: scroll;\r
-}\r
-\r
-.gbpGlobalWrapper{\r
- background: #f5f5f5;\r
- margin-bottom: 0!important;\r
- min-height: 100%;\r
- padding-bottom: 60px;\r
- \r
- span, label {\r
- color: #393939;\r
- }\r
-\r
- h2{\r
- color: #666;\r
- }\r
-\r
- .form-control, .main input[type="text"]{\r
- background: #fff;\r
- color: #858585;\r
-\r
- &[disabled]{\r
- background: #eeeeee;\r
- }\r
- }\r
- \r
-\r
- .form-control{\r
- &.narrow-input-left{\r
- width: 45%;\r
- float: left;\r
- }\r
- &.narrow-input-right{\r
- width: 45%;\r
- float: right;\r
- }\r
- }\r
-\r
- .row-param{\r
- margin-bottom: 15px;\r
- float: left;\r
- }\r
-\r
- .param-label{\r
- width:100%;\r
- float: left;\r
- }\r
-\r
- .ep-filter{\r
- margin-bottom: 20px;\r
- DIV{\r
- width: 48%;\r
- }\r
- }\r
-\r
- .float-left{\r
- float: left;\r
- }\r
-\r
- .float-right{\r
- float: right;\r
- }\r
-\r
- .full-width{\r
- width: 100%;\r
-\r
- .btn{\r
- width: 50px;\r
- }\r
-\r
- label{\r
- margin-top: 10px;\r
- }\r
- }\r
-}\r
-\r
-.gbpWrapper{\r
-\r
- .btn-primary{\r
- color: #ffffff;\r
- background-color: #428bca;\r
- border-color: #357ebd;\r
- font-weight: normal;\r
-\r
- &:hover {\r
- background-color: #1BAAFD;\r
- border-color: #1BAAFD;\r
- }\r
-\r
- &.bottom-buttons {\r
- bottom: 0;\r
- position: absolute;\r
- margin-bottom: 0 !important;\r
- background-color: #FF7300;\r
- border-color: #FF7300;\r
- width: 45%;\r
-\r
- &.back {\r
- right:0;\r
- margin-right: 15px;\r
- }\r
-\r
- &.home {\r
- left:0;\r
- margin-left: 15px;\r
- }\r
-\r
- &:hover {\r
- background-color: #FF8f33;\r
- border-color: #FF8f33;\r
- } \r
-\r
- &.full-width{\r
- width: calc(~'100% - 30px');\r
- left: 0;\r
- margin-left: 15px;\r
- }\r
-\r
- &.wizard-button{\r
- bottom: 40px;\r
- }\r
- }\r
-\r
- &.btn-big{\r
- padding: 20px;\r
- font-size: 1.5em;\r
- white-space: normal;\r
- }\r
- }\r
-\r
- .noPadding{\r
- padding: 0!important;\r
- }\r
-\r
- .basicLabel{\r
- padding: 0;\r
- font-weight: normal;\r
- }\r
-\r
- .rowWrapper{\r
- margin-bottom: 5px;\r
- }\r
-\r
- .inline-block{\r
- display: inline-block;\r
- }\r
-\r
- #graph{\r
- overflow: auto;\r
- width: 100%;\r
- height: 100%;\r
- }\r
-\r
- .graphWrapper{\r
- position: relative;\r
-\r
- .controlPanelButtons{\r
- position: absolute;\r
- top: 50px;\r
- right: 0px;\r
-\r
- .line{\r
- margin: 5px 0;\r
- }\r
- }\r
-\r
- .btn{\r
- min-width: 22px;\r
- line-height: 22px;\r
- text-align: center;\r
- padding: 0!important;\r
- }\r
- }\r
-\r
- //SIMPLE BOX\r
- .simpleBox{\r
- .roundedCorners(5px);\r
- border: 1px solid #e5e5e5;\r
- background: #fff;\r
- padding: 20px;\r
-\r
- h2{\r
- margin-top: 0;\r
- }\r
- }\r
-\r
- .sectionTitle{\r
- padding: 20px;\r
- label{\r
- font-size: 25px;\r
- }\r
- }\r
-\r
- //LEGEND BOX\r
- .legendBox{\r
- position: absolute;\r
- top: 50px;\r
- right: 50px;\r
- z-index: 10;\r
- ul{\r
- padding: 0;\r
- list-style: none;\r
-\r
- .item{\r
- padding-top: 5px;\r
- margin-bottom: 10px;\r
- }\r
-\r
- .line{\r
- .inlineBlock;\r
- margin: 9px 5px 0 0;\r
- width: 50px;\r
-\r
- &.blue{\r
- border-top: 2px solid blue;\r
- }\r
-\r
- &.green{\r
- border-top: 2px solid green;\r
- }\r
- }\r
- }\r
- }\r
-\r
- //MAIN NAVIGATION\r
- .mainNavigationWrapper{\r
- padding-bottom: 50px;\r
- overflow-x: scroll;\r
- }\r
- .mainNavigation{\r
- padding-top: 5%;\r
- min-width: 1450px;\r
- .topButtonsWrapper, .bottomButtonsWrapper{\r
- text-align: center;\r
- width: 400px;\r
- margin: 0 auto 15px;\r
- padding: 0 0 20px;\r
- border-bottom: 5px solid #393939;\r
- }\r
-\r
- .bottomButtonsWrapper{\r
- border-bottom: 0;\r
- border-top: 5px solid #393939;\r
- padding: 20px 0 0;\r
- margin: 15px auto 0;\r
- }\r
-\r
- .middleButtonsWrapper{\r
- text-align: center;\r
-\r
- .buttonWrapper{\r
- margin-top: 25px;\r
- \r
- }\r
-\r
- .iconWrapper{\r
- .inlineBlock;\r
- padding-top: 10px;\r
- }\r
- }\r
-\r
- .middleBox{\r
- .inlineBlock;\r
- width: 500px;\r
- height: 150px;\r
- border-left: 5px solid #393939;\r
- border-right: 5px solid #393939;\r
-\r
- .infinityIcon{\r
- background: transparent url('../../src/app/gbp/images/infinity-loop.tpl.html') no-repeat center center;\r
- width: 128px;\r
- height: 128px;\r
- margin: 11px auto 0;\r
- cursor: pointer;\r
- }\r
- }\r
-\r
- .buttonWrapper{\r
- text-align: center;\r
- // width: 300px;\r
- // margin: 0 auto;\r
- .inlineBlock;\r
-\r
- .btn-primary{\r
- font-size: 2em;\r
- padding: 25px 0;\r
- width: 350px;\r
- .inlineBlock;\r
- }\r
-\r
- .icon-large{\r
- &:before{\r
- font-size: 5em;\r
- }\r
- }\r
- }\r
- }\r
-\r
- //RIGHT PANEL\r
- aside{\r
- &.col-md-3{\r
- min-height: 800px;\r
-\r
- .inWrapper{\r
- height: 100%;\r
- }\r
- }\r
- }\r
-\r
- .panelWrapper{\r
- padding: 20px 0 50px; \r
- height: calc(~'100% - 109px');\r
- &.no-padd-top{\r
- padding-top: 0px;\r
- }\r
- button{\r
- &.btn{\r
- margin-bottom: 5px;\r
- }\r
- &.btn-list{\r
- margin-top: 25px;\r
- }\r
- &.btn-default:hover {\r
- background-color: #e6e6e6 !important;\r
- }\r
- &.btn-default:focus {\r
- background-color: #fff;\r
- }\r
- &.activated, &.activated:focus {\r
- background-color: #e6e6e6 !important;\r
- }\r
- }\r
- }\r
-\r
- .breadcrumbs{\r
- padding: 10px 0px; \r
- font-weight: bold;\r
- border: 0;\r
- line-height: initial;\r
- }\r
-\r
- section.sigmaWrapper {\r
- div.legend{\r
- margin-bottom: 25px;\r
- \r
- span, .text{\r
- color: #fff;\r
- }\r
-\r
- ul{\r
- padding: 0;\r
- margin: 0;\r
- list-style: none;\r
- }\r
- li{\r
- margin-bottom: 5px;\r
- .textHidden{\r
- display: none;\r
- }\r
- .text{\r
- margin-left: 10px;\r
- line-height: 18px;\r
- }\r
- .showChckbx{\r
- position: relative;\r
- top: 2px;\r
- left: 5px;\r
- }\r
- .itemWrapper{\r
- &:hover{\r
- .text{\r
- display: block !important;\r
- }\r
- }\r
- }\r
- \r
- }\r
- div.color{\r
- /*margin-right: 15px;*/\r
- width: 18px;\r
- height: 18px;\r
- -webkit-border-radius: 9px;\r
- border-radius: 9px;\r
- cursor: pointer;\r
- }\r
- }\r
- }\r
-\r
- #graph-container{\r
- // background: transparent;\r
- padding: 0;\r
- height: 800px;\r
- }\r
-\r
- .selectWrapper{\r
- padding-left: 0;\r
- &.col-md-12{\r
- padding: 0;\r
- margin-bottom: 5px;\r
- }\r
- }\r
-\r
- .inputWrapper{\r
- &.leftInput{\r
- padding-left: 0;\r
- }\r
-\r
- &.rightInput{\r
- padding-right: 0;\r
- }\r
- }\r
-\r
- .separator{\r
- padding-bottom: 10px;\r
- margin-top: 15px;\r
- height: 1px;\r
- padding-left: 0px;\r
- padding-right: 15px;\r
- }\r
-\r
- .inner-separator{\r
- border-bottom: 1px solid #858585;\r
- width: 100%;\r
- float: left;\r
- }\r
-\r
- .btn-group{\r
- padding: 0;\r
- }\r
-\r
- .formWrapper{\r
- margin: 20px 0;\r
- }\r
-\r
- .icon-remove {\r
- &.align-right {\r
- float: right;\r
-\r
- &.padding {\r
- margin: 5px 5px 0 0;\r
- }\r
- }\r
- }\r
-\r
- .icon-exclamation-sign{\r
- &.red {\r
- color: red;\r
- }\r
- }\r
-\r
- .sigmaWrapper{\r
- position: relative;\r
-\r
- .sigmaModalWrapper{\r
- position: absolute;\r
- top: 30px;\r
- left: 45px;\r
- z-index: 1;\r
-\r
- .icon-remove{\r
- position: absolute;\r
- top: 5px;\r
- right: 5px;\r
- }\r
-\r
- .tableWrapper{\r
- position: relative;\r
- background: #f5f5f5;\r
- .roundedCorners(5px);\r
- min-width: 400px;\r
- min-height: 100px;\r
- margin-top: 20px;\r
- padding: 20px;\r
-\r
- .dataWrapper{\r
- overflow-y: scroll;\r
- max-height: 350px;\r
- }\r
-\r
- .rowWrapper{\r
- padding: 10px;\r
- margin-bottom: 10px;\r
- .roundedCorners(5px);\r
- border: 1px solid #d5d5d5;\r
- }\r
- }\r
- }\r
- }\r
-}\r
-\r
-.modal-dialog {\r
- z-index: 100;\r
- height: 700px;\r
- width: 700px;\r
- background-color: white;\r
- position: fixed;\r
- opacity: 1;\r
- top:50%;\r
- left:50%;\r
- margin:-350px 0 0 -400px;\r
-\r
- .modal-header {\r
- height: 70px;\r
- padding: 10px 15px;\r
- }\r
-\r
- .modal-navigation {\r
- float:left;\r
- width: 150px;\r
- height: 630px;\r
- border-right: 1px solid #e5e5e5;\r
- background-color: #eeeeee;\r
-\r
- ul {\r
- -webkit-padding-start: 0;\r
- list-style-type: none;\r
-\r
- li.navigation-item {\r
- height: 54px;\r
- width: 100%;\r
- background-color: #eeeeee;\r
- color: #666;\r
- font-weight: bold;\r
- padding: 20px;\r
-\r
- &.selected {\r
- background-color: #428bca;\r
- border-color: #357ebd;\r
- color: #ffffff;\r
- }\r
- }\r
- }\r
- }\r
-\r
- .modal-content-container {\r
- float: right;\r
- width: 550px;\r
- height: 630px;\r
-\r
- .content {\r
- overflow-y: scroll;\r
- padding: 0 50px 0 20px;\r
- height: 580px;\r
- }\r
-\r
- .bottom-navigation {\r
- height: 50px;\r
- bottom: 0;\r
- float: right;\r
- margin: 8px 30px\r
- } \r
- }\r
-\r
-\r
-\r
- \r
-}\r
-\r
-.modal-canvas {\r
- position: fixed;\r
- top: 0;\r
- right: 0;\r
- bottom: 0;\r
- left: 0;\r
- z-index: 10;\r
- background-color: #000;\r
- opacity: .15;\r
-}\r
-\r
-.link-tools .tool-remove { display: none }\r
-.link-tools .tool-options { display: none }\r
-.connection-wrap, .marker-arrowheads { display: none }\r
-\r
-/*-------------------YangUI import START-------------------*/\r
-\r
-@iconsRootPath : 'images/yang-ui-icons/';\r
-.gbpWrapper{\r
- .customContainer{\r
- border-left: 1px solid #7a7a7a;\r
- margin: 35px 5px 5px 15px;\r
- padding: 5px;\r
- /*z-index: 10;*/\r
- width:auto;\r
- position: relative;\r
- &.withoutBorder{\r
- border-left: 0;\r
- padding-bottom: 0;\r
- .treeBullet.containerBullet{\r
- left: -25px;\r
- top: -25px;\r
- }\r
- }\r
- }\r
-\r
- .topContainerPart{\r
- margin-left: -19px;\r
- margin-top: -28px;\r
- margin-bottom: 10px;\r
- }\r
-\r
- .treeBullet{\r
- font-size: 25px;\r
- color: #7a7a7a;\r
- position: absolute;\r
- left: -15px;\r
- top: 0;\r
- &.containerBullet{\r
- top: -25px; \r
- left: -25px;\r
- }\r
- }\r
-\r
- .btn-name{\r
- -webkit-border-radius: 5px;\r
- border-radius: 5px;\r
- background: transparent;\r
- font-weight: bold;\r
- color: @text-color;\r
- border: 2px solid @text-color;\r
- cursor: auto;\r
- }\r
-\r
- button, div{\r
- &.yangButton{\r
- cursor: pointer;\r
- position: relative;\r
- width: 24px;\r
- height: 24px;\r
- border: 0;\r
- margin: 2px;\r
- .inlineBlock;\r
- &.iconArrowDown{\r
- background: transparent url('@{iconsRootPath}icon-arrow-down.png') no-repeat center top;\r
- }\r
- &.iconArrowRight{\r
- background: transparent url('@{iconsRootPath}icon-arrow-right.png') no-repeat center top;\r
- }\r
- &.iconNext{\r
- background: transparent url('@{iconsRootPath}icon-next.png') no-repeat center top;\r
- }\r
- &.iconPrev{\r
- background: transparent url('@{iconsRootPath}icon-prev.png') no-repeat center top;\r
- }\r
- &:hover{\r
- background-position: center -24px;\r
- }\r
- &.disabled{\r
- .opacityDeph(0.4)!important;\r
- &:hover{\r
- background-position: center top;\r
- }\r
- }\r
- }\r
- }\r
-\r
- .btn-slim {\r
- padding-top: 2px;\r
- padding-bottom: 2px;\r
- }\r
-\r
- .inlineBlock {\r
- display: -moz-inline-stack;\r
- display: inline-block;\r
- vertical-align: top;\r
- zoom: 1;\r
- *display: inline;\r
- }\r
-\r
- .leaf {\r
- margin: 5px;\r
- padding-left: 5px;\r
- position: relative;\r
- }\r
-\r
- .leaf-label {\r
- margin-right: 10px;\r
- font-weight: bold;\r
- .inlineBlock;\r
- /*width: 170px;*/\r
- padding-top: 6px;\r
- button.iconQuestion{\r
- margin-top: -2px;\r
- }\r
-\r
- i.icon-key {\r
- font-size: 1.3em;\r
- padding-left: 5px;\r
- }\r
- }\r
-\r
- .clear{\r
- clear: both;\r
- }\r
-\r
- .borderArrow{\r
- color: @text-color;\r
- position: absolute;\r
- bottom: -6px;\r
- left: -6px;\r
- font-size: 1.3em;\r
- }\r
-\r
- .tooltip-inner{\r
- color: #fff;\r
- white-space: pre-wrap; /* CSS3 */ \r
- white-space: -moz-pre-wrap; /* Firefox */ \r
- white-space: -pre-wrap; /* Opera <7 */ \r
- white-space: -o-pre-wrap; /* Opera 7 */ \r
- word-wrap: break-word; /* IE */\r
- }\r
-}\r
-/*-------------------YangUI import END-------------------*/\r
-\r
-/*\r
--------------------JointJS Graph START-------------------\r
-.html-element {\r
- position: absolute;\r
- background: #3498DB;\r
- pointer-events: none;\r
- -webkit-user-select: none;\r
- border-radius: 4px;\r
- border: 2px solid #2980B9;\r
- box-shadow: inset 0 0 5px black, 2px 2px 1px gray;\r
- padding: 5px;\r
- box-sizing: border-box;\r
- z-index: 2;\r
- pointer-events: auto;\r
- bottom: 0;\r
- left: 0;\r
- right: 0;\r
- color: #333;\r
- height: 16px;\r
- margin-top: 107px;\r
- margin-left: 16px;\r
- width: 50px !important;\r
- height: 20px !important;\r
-}\r
--------------------JointJS Graph END-------------------\r
-*/\r
-\r
+/*GBP*/
+.pl0{padding-left: 0!important};
+.pr0{padding-right: 0!important};
+
+.mt10{margin-top: 10px};
+.mt20{margin-top: 20px};
+.mt30{margin-top: 30px};
+.mt40{margin-top: 40px};
+
+.mb50{margin-bottom: 50px};
+.mb0{margin-bottom: 0px!important};
+
+.ml10{margin-left: 10px!important};
+.ml20{margin-left: 20px!important};
+.ml30{margin-left: 30px!important};
+
+.maxHeight500{
+ max-height: 500px;
+ overflow-y: scroll;
+}
+
+.gbpGlobalWrapper{
+ background: #f5f5f5;
+ margin-bottom: 0!important;
+ min-height: 100%;
+ padding-bottom: 60px;
+
+ span, label {
+ color: #393939;
+ }
+
+ h2{
+ color: #666;
+ }
+
+ .form-control, .main input[type="text"]{
+ background: #fff;
+ color: #858585;
+
+ &[disabled]{
+ background: #eeeeee;
+ }
+ }
+
+
+ .form-control{
+ &.narrow-input-left{
+ width: 45%;
+ float: left;
+ }
+ &.narrow-input-right{
+ width: 45%;
+ float: right;
+ }
+ }
+
+ .row-param{
+ margin-bottom: 15px;
+ float: left;
+ }
+
+ .param-label{
+ width:100%;
+ float: left;
+ }
+
+ .ep-filter{
+ margin-bottom: 20px;
+ DIV{
+ width: 48%;
+ }
+ }
+
+ .float-left{
+ float: left;
+ }
+
+ .float-right{
+ float: right;
+ }
+
+ .full-width{
+ width: 100%;
+
+ .btn{
+ width: 50px;
+ }
+
+ label{
+ margin-top: 10px;
+ }
+ }
+}
+
+.gbpWrapper{
+
+ .btn-primary{
+ color: #ffffff;
+ background-color: #428bca;
+ border-color: #357ebd;
+ font-weight: normal;
+
+ &:hover {
+ background-color: #1BAAFD;
+ border-color: #1BAAFD;
+ }
+
+ &.bottom-buttons {
+ bottom: 0;
+ position: absolute;
+ margin-bottom: 0 !important;
+ background-color: #FF7300;
+ border-color: #FF7300;
+ width: 45%;
+
+ &.back {
+ right:0;
+ margin-right: 15px;
+ }
+
+ &.home {
+ left:0;
+ margin-left: 15px;
+ }
+
+ &:hover {
+ background-color: #FF8f33;
+ border-color: #FF8f33;
+ }
+
+ &.full-width{
+ width: calc(~'100% - 30px');
+ left: 0;
+ margin-left: 15px;
+ }
+
+ &.wizard-button{
+ bottom: 40px;
+ }
+ }
+
+ &.btn-big{
+ padding: 20px;
+ font-size: 1.5em;
+ white-space: normal;
+ }
+ }
+
+ .noPadding{
+ padding: 0!important;
+ }
+
+ .basicLabel{
+ padding: 0;
+ font-weight: normal;
+ }
+
+ .rowWrapper{
+ margin-bottom: 5px;
+ }
+
+ .inline-block{
+ display: inline-block;
+ }
+
+ #graph{
+ overflow: auto;
+ width: 100%;
+ height: 100%;
+ }
+
+ .graphWrapper{
+ position: relative;
+
+ .controlPanelButtons{
+ position: absolute;
+ top: 50px;
+ right: 0px;
+
+ .line{
+ margin: 5px 0;
+ }
+ }
+
+ .btn{
+ min-width: 22px;
+ line-height: 22px;
+ text-align: center;
+ padding: 0!important;
+ }
+ }
+
+ //SIMPLE BOX
+ .simpleBox{
+ .roundedCorners(5px);
+ border: 1px solid #e5e5e5;
+ background: #fff;
+ padding: 20px;
+
+ h2{
+ margin-top: 0;
+ }
+ }
+
+ .sectionTitle{
+ padding: 20px;
+ label{
+ font-size: 25px;
+ }
+ }
+
+ //LEGEND BOX
+ .legendBox{
+ position: absolute;
+ top: 50px;
+ right: 50px;
+ z-index: 10;
+ ul{
+ padding: 0;
+ list-style: none;
+
+ .item{
+ padding-top: 5px;
+ margin-bottom: 10px;
+ }
+
+ .line{
+ .inlineBlock;
+ margin: 9px 5px 0 0;
+ width: 50px;
+
+ &.blue{
+ border-top: 2px solid blue;
+ }
+
+ &.green{
+ border-top: 2px solid green;
+ }
+ }
+ }
+ }
+
+ //MAIN NAVIGATION
+ .mainNavigationWrapper{
+ padding-bottom: 50px;
+ overflow-x: scroll;
+ }
+ .mainNavigation{
+ padding-top: 5%;
+ min-width: 1450px;
+ .topButtonsWrapper, .bottomButtonsWrapper{
+ text-align: center;
+ width: 400px;
+ margin: 0 auto 15px;
+ padding: 0 0 20px;
+ border-bottom: 5px solid #393939;
+ }
+
+ .bottomButtonsWrapper{
+ border-bottom: 0;
+ border-top: 5px solid #393939;
+ padding: 20px 0 0;
+ margin: 15px auto 0;
+ }
+
+ .middleButtonsWrapper{
+ text-align: center;
+
+ .buttonWrapper{
+ margin-top: 25px;
+
+ }
+
+ .iconWrapper{
+ .inlineBlock;
+ padding-top: 10px;
+ }
+ }
+
+ .middleBox{
+ .inlineBlock;
+ width: 500px;
+ height: 150px;
+ border-left: 5px solid #393939;
+ border-right: 5px solid #393939;
+
+ .infinityIcon{
+ background: transparent url('../../src/app/gbp/images/infinity-loop.tpl.html') no-repeat center center;
+ width: 128px;
+ height: 128px;
+ margin: 11px auto 0;
+ cursor: pointer;
+ }
+ }
+
+ .buttonWrapper{
+ text-align: center;
+ // width: 300px;
+ // margin: 0 auto;
+ .inlineBlock;
+
+ .btn-primary{
+ font-size: 2em;
+ padding: 25px 0;
+ width: 350px;
+ .inlineBlock;
+ }
+
+ .icon-large{
+ &:before{
+ font-size: 5em;
+ }
+ }
+ }
+ }
+
+ //RIGHT PANEL
+ aside{
+ &.col-md-3{
+ min-height: 800px;
+
+ .inWrapper{
+ height: 100%;
+ }
+ }
+ }
+
+ .panelWrapper{
+ padding: 20px 0 50px;
+ height: calc(~'100% - 109px');
+ &.no-padd-top{
+ padding-top: 0px;
+ }
+ button{
+ &.btn{
+ margin-bottom: 5px;
+ }
+ &.btn-list{
+ margin-top: 25px;
+ }
+ &.btn-default:hover {
+ background-color: #e6e6e6 !important;
+ }
+ &.btn-default:focus {
+ background-color: #fff;
+ }
+ &.activated, &.activated:focus {
+ background-color: #e6e6e6 !important;
+ }
+ }
+ }
+
+ .breadcrumbs{
+ padding: 10px 0px;
+ font-weight: bold;
+ border: 0;
+ line-height: initial;
+ }
+
+ section.sigmaWrapper {
+ div.legend{
+ margin-bottom: 25px;
+
+ span, .text{
+ color: #fff;
+ }
+
+ ul{
+ padding: 0;
+ margin: 0;
+ list-style: none;
+ }
+ li{
+ margin-bottom: 5px;
+ .textHidden{
+ display: none;
+ }
+ .text{
+ margin-left: 10px;
+ line-height: 18px;
+ }
+ .showChckbx{
+ position: relative;
+ top: 2px;
+ left: 5px;
+ }
+ .itemWrapper{
+ &:hover{
+ .text{
+ display: block !important;
+ }
+ }
+ }
+
+ }
+ div.color{
+ /*margin-right: 15px;*/
+ width: 18px;
+ height: 18px;
+ -webkit-border-radius: 9px;
+ border-radius: 9px;
+ cursor: pointer;
+ }
+ }
+ }
+
+ #graph-container{
+ // background: transparent;
+ padding: 0;
+ height: 800px;
+ }
+
+ .selectWrapper{
+ padding-left: 0;
+ &.col-md-12{
+ padding: 0;
+ margin-bottom: 5px;
+ }
+ }
+
+ .inputWrapper{
+ &.leftInput{
+ padding-left: 0;
+ }
+
+ &.rightInput{
+ padding-right: 0;
+ }
+ }
+
+ .separator{
+ padding-bottom: 10px;
+ margin-top: 15px;
+ height: 1px;
+ padding-left: 0px;
+ padding-right: 15px;
+ }
+
+ .inner-separator{
+ border-bottom: 1px solid #858585;
+ width: 100%;
+ float: left;
+ }
+
+ .btn-group{
+ padding: 0;
+ }
+
+ .formWrapper{
+ margin: 20px 0;
+ }
+
+ .icon-remove {
+ &.align-right {
+ float: right;
+
+ &.padding {
+ margin: 5px 5px 0 0;
+ }
+ }
+ }
+
+ .icon-exclamation-sign{
+ &.red {
+ color: red;
+ }
+ }
+
+ .sigmaWrapper{
+ position: relative;
+
+ .sigmaModalWrapper{
+ position: absolute;
+ top: 30px;
+ left: 45px;
+ z-index: 1;
+
+ .icon-remove{
+ position: absolute;
+ top: 5px;
+ right: 5px;
+ }
+
+ .tableWrapper{
+ position: relative;
+ background: #f5f5f5;
+ .roundedCorners(5px);
+ min-width: 400px;
+ min-height: 100px;
+ margin-top: 20px;
+ padding: 20px;
+
+ .dataWrapper{
+ overflow-y: scroll;
+ max-height: 350px;
+ }
+
+ .rowWrapper{
+ padding: 10px;
+ margin-bottom: 10px;
+ .roundedCorners(5px);
+ border: 1px solid #d5d5d5;
+ }
+ }
+ }
+ }
+}
+
+.modal-dialog {
+ z-index: 100;
+ height: 700px;
+ width: 700px;
+ background-color: white;
+ position: fixed;
+ opacity: 1;
+ top:50%;
+ left:50%;
+ margin:-350px 0 0 -400px;
+
+ .modal-header {
+ height: 70px;
+ padding: 10px 15px;
+ }
+
+ .modal-navigation {
+ float:left;
+ width: 150px;
+ height: 630px;
+ border-right: 1px solid #e5e5e5;
+ background-color: #eeeeee;
+
+ ul {
+ -webkit-padding-start: 0;
+ list-style-type: none;
+
+ li.navigation-item {
+ height: 54px;
+ width: 100%;
+ background-color: #eeeeee;
+ color: #666;
+ font-weight: bold;
+ padding: 20px;
+
+ &.selected {
+ background-color: #428bca;
+ border-color: #357ebd;
+ color: #ffffff;
+ }
+ }
+ }
+ }
+
+ .modal-content-container {
+ float: right;
+ width: 550px;
+ height: 630px;
+
+ .content {
+ overflow-y: scroll;
+ padding: 0 50px 0 20px;
+ height: 580px;
+ }
+
+ .bottom-navigation {
+ height: 50px;
+ bottom: 0;
+ float: right;
+ margin: 8px 30px
+ }
+ }
+
+
+
+
+}
+
+.modal-canvas {
+ position: fixed;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ z-index: 10;
+ background-color: #000;
+ opacity: .15;
+}
+
+.link-tools .tool-remove { display: none }
+.link-tools .tool-options { display: none }
+.connection-wrap, .marker-arrowheads { display: none }
+
+/*-------------------YangUI import START-------------------*/
+
+@iconsRootPath : 'images/yang-ui-icons/';
+.gbpWrapper{
+ .customContainer{
+ border-left: 1px solid #7a7a7a;
+ margin: 35px 5px 5px 15px;
+ padding: 5px;
+ /*z-index: 10;*/
+ width:auto;
+ position: relative;
+ &.withoutBorder{
+ border-left: 0;
+ padding-bottom: 0;
+ .treeBullet.containerBullet{
+ left: -25px;
+ top: -25px;
+ }
+ }
+ }
+
+ .topContainerPart{
+ margin-left: -19px;
+ margin-top: -28px;
+ margin-bottom: 10px;
+ }
+
+ .treeBullet{
+ font-size: 25px;
+ color: #7a7a7a;
+ position: absolute;
+ left: -15px;
+ top: 0;
+ &.containerBullet{
+ top: -25px;
+ left: -25px;
+ }
+ }
+
+ .btn-name{
+ -webkit-border-radius: 5px;
+ border-radius: 5px;
+ background: transparent;
+ font-weight: bold;
+ color: @text-color;
+ border: 2px solid @text-color;
+ cursor: auto;
+ }
+
+ button, div{
+ &.yangButton{
+ cursor: pointer;
+ position: relative;
+ width: 24px;
+ height: 24px;
+ border: 0;
+ margin: 2px;
+ .inlineBlock;
+ &.iconArrowDown{
+ background: transparent url('@{iconsRootPath}icon-arrow-down.png') no-repeat center top;
+ }
+ &.iconArrowRight{
+ background: transparent url('@{iconsRootPath}icon-arrow-right.png') no-repeat center top;
+ }
+ &.iconNext{
+ background: transparent url('@{iconsRootPath}icon-next.png') no-repeat center top;
+ }
+ &.iconPrev{
+ background: transparent url('@{iconsRootPath}icon-prev.png') no-repeat center top;
+ }
+ &:hover{
+ background-position: center -24px;
+ }
+ &.disabled{
+ .opacityDeph(0.4)!important;
+ &:hover{
+ background-position: center top;
+ }
+ }
+ }
+ }
+
+ .btn-slim {
+ padding-top: 2px;
+ padding-bottom: 2px;
+ }
+
+ .inlineBlock {
+ display: -moz-inline-stack;
+ display: inline-block;
+ vertical-align: top;
+ zoom: 1;
+ *display: inline;
+ }
+
+ .leaf {
+ margin: 5px;
+ padding-left: 5px;
+ position: relative;
+ }
+
+ .leaf-label {
+ margin-right: 10px;
+ font-weight: bold;
+ .inlineBlock;
+ /*width: 170px;*/
+ padding-top: 6px;
+ button.iconQuestion{
+ margin-top: -2px;
+ }
+
+ i.icon-key {
+ font-size: 1.3em;
+ padding-left: 5px;
+ }
+ }
+
+ .clear{
+ clear: both;
+ }
+
+ .borderArrow{
+ color: @text-color;
+ position: absolute;
+ bottom: -6px;
+ left: -6px;
+ font-size: 1.3em;
+ }
+
+ .tooltip-inner{
+ color: #fff;
+ white-space: pre-wrap; /* CSS3 */
+ white-space: -moz-pre-wrap; /* Firefox */
+ white-space: -pre-wrap; /* Opera <7 */
+ white-space: -o-pre-wrap; /* Opera 7 */
+ word-wrap: break-word; /* IE */
+ }
+}
+/*-------------------YangUI import END-------------------*/
+
+/*
+-------------------JointJS Graph START-------------------
+.html-element {
+ position: absolute;
+ background: #3498DB;
+ pointer-events: none;
+ -webkit-user-select: none;
+ border-radius: 4px;
+ border: 2px solid #2980B9;
+ box-shadow: inset 0 0 5px black, 2px 2px 1px gray;
+ padding: 5px;
+ box-sizing: border-box;
+ z-index: 2;
+ pointer-events: auto;
+ bottom: 0;
+ left: 0;
+ right: 0;
+ color: #333;
+ height: 16px;
+ margin-top: 107px;
+ margin-left: 16px;
+ width: 50px !important;
+ height: 20px !important;
+}
+-------------------JointJS Graph END-------------------
+*/
+
/*GBP END*/
\ No newline at end of file
-define(['angularAMD', 'app/routingConfig', 'ui-bootstrap', 'Restangular', 'angular-translate'], function() {\r
-\r
- var gbp = angular.module('app.gbp', ['ui.router.state','app.core', 'ui.bootstrap', 'restangular', 'pascalprecht.translate']);\r
-\r
- gbp.register = gbp;\r
-\r
- gbp.config(function ($stateProvider, $compileProvider, $controllerProvider, $provide, $translateProvider, NavHelperProvider, $filterProvider) {\r
-\r
- $translateProvider.useStaticFilesLoader({\r
- prefix: 'assets/data/locale-',\r
- suffix: '.json'\r
- });\r
-\r
- gbp.register = {\r
- directive : $compileProvider.directive,\r
- controller : $controllerProvider.register,\r
- filter: $filterProvider.register,\r
- factory : $provide.factory,\r
- service : $provide.service\r
- };\r
-\r
- NavHelperProvider.addControllerUrl('app/gbp/gbp.controller');\r
- NavHelperProvider.addToMenu('gbp', {\r
- "link": "#/gbp/index",\r
- "active": "main.gbp",\r
- "title": "GBP",\r
- "icon": "icon-level-down",\r
- "page": {\r
- "title": "GBP",\r
- "description": "GBP"\r
- }\r
- });\r
-\r
- var access = routingConfig.accessLevels;\r
- $stateProvider.state('main.gbp', {\r
- url: 'gbp',\r
- abstract: true,\r
- views : {\r
- 'content' : {\r
- templateUrl: 'src/app/gbp/views/root.tpl.html'\r
- }\r
- }\r
- });\r
-\r
- $stateProvider.state('main.gbp.index', {\r
- url: '/index',\r
- access: access.admin,\r
- views: {\r
- '': {\r
- controller: 'gbpCtrl',\r
- templateUrl: 'src/app/gbp/views/index.tpl.html'\r
- }\r
- }\r
- });\r
- });\r
-\r
- return gbp;\r
-});\r
+define(['angularAMD', 'app/routingConfig', 'ui-bootstrap', 'Restangular', 'angular-translate'], function() {
+
+ var gbp = angular.module('app.gbp', ['ui.router.state','app.core', 'ui.bootstrap', 'restangular', 'pascalprecht.translate']);
+
+ gbp.register = gbp;
+
+ gbp.config(function ($stateProvider, $compileProvider, $controllerProvider, $provide, $translateProvider, NavHelperProvider, $filterProvider) {
+
+ $translateProvider.useStaticFilesLoader({
+ prefix: 'assets/data/locale-',
+ suffix: '.json'
+ });
+
+ gbp.register = {
+ directive : $compileProvider.directive,
+ controller : $controllerProvider.register,
+ filter: $filterProvider.register,
+ factory : $provide.factory,
+ service : $provide.service
+ };
+
+ NavHelperProvider.addControllerUrl('app/gbp/gbp.controller');
+ NavHelperProvider.addToMenu('gbp', {
+ "link": "#/gbp/index",
+ "active": "main.gbp",
+ "title": "GBP",
+ "icon": "icon-level-down",
+ "page": {
+ "title": "GBP",
+ "description": "GBP"
+ }
+ });
+
+ var access = routingConfig.accessLevels;
+ $stateProvider.state('main.gbp', {
+ url: 'gbp',
+ abstract: true,
+ views : {
+ 'content' : {
+ templateUrl: 'src/app/gbp/views/root.tpl.html'
+ }
+ }
+ });
+
+ $stateProvider.state('main.gbp.index', {
+ url: '/index',
+ access: access.admin,
+ views: {
+ '': {
+ controller: 'gbpCtrl',
+ templateUrl: 'src/app/gbp/views/index.tpl.html'
+ }
+ }
+ });
+ });
+
+ return gbp;
+});
-define(['app/gbp/gbp.module', 'app/gbp/js/joint.clean.build'], function(gbp, joint) {\r
-\r
- gbp.register.factory('GBPRestangular', function(Restangular, ENV) {\r
- return Restangular.withConfig(function(RestangularConfig) {\r
- RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));\r
- });\r
- });\r
-\r
- gbp.register.factory('GBPConstants', function() {\r
- var c = { colors: {'graph' : {}}, strings: {}, jointElements: {}, objType: {}, numbers: {}};\r
-\r
- c.strings.flood = 'flood';\r
- c.strings.bridge = 'bridge';\r
- c.strings.l3ctx = 'l3ctx';\r
- c.strings.subnet = 'subnet';\r
- c.strings.linklabel = 'linklabel';\r
- c.strings.in = 'in';\r
- c.strings.out = 'out';\r
- c.strings.bi = 'bidirectional';\r
-\r
- c.strings.config = 'CONFIG';\r
- c.strings.oper = 'OPERATIONAL';\r
- c.strings.l2l3 = 'L2L3';\r
- c.strings.mock = 'MOCK';\r
- c.strings.sigmaTopoDefaultText = 'SIGMATOPODEFAULTTEXT';\r
- c.strings.sigmaTopoDefault = 'SIGMATOPODEFAULTTEXT';\r
-\r
- c.colors[c.strings.flood] = '#DF0101';\r
- c.colors[c.strings.bridge] = '#0080FF';\r
- c.colors[c.strings.l3ctx] = '#3ADF00';\r
- c.colors[c.strings.subnet] = '#FF9933';\r
- c.colors[c.strings.sigmaTopoDefaultText] = '#fff';\r
- c.colors[c.strings.epg] = '#8fde70';\r
- c.colors[c.strings.linklabel] = '#3366CC';\r
-\r
- c.colors[c.strings.flood+'-'+c.strings.bridge] = '#6666FF';\r
- c.colors[c.strings.bridge+'-'+c.strings.l3ctx] = '#6666FF';\r
-\r
- c.colors[c.strings.subnet+'-'] = '#6666FF';\r
-\r
- c.colors['graph']['subject'] = '#FFFFD4';\r
- c.colors['graph']['cns'] = '#8EEDFF';\r
- c.colors['graph']['pns'] = '#FF9C9C';\r
-\r
- c.jointElements.minWidth = 100;\r
- c.jointElements.maxWidth = 300;\r
- c.jointElements.minHeight = 50;\r
- c.jointElements.maxHeight = 300;\r
-\r
- c.objType.contract = 'contract';\r
- c.objType.epg = 'epg';\r
- c.objType.consumer = 'consumer';\r
- c.objType.provider = 'provider';\r
- c.objType.subject = 'subject';\r
- c.objType.rule = 'rule';\r
-\r
- c.numbers.displayLabelLength = 40;\r
-\r
- return c;\r
- });\r
-\r
- gbp.register.factory('MockServices', function() {\r
-\r
- var ms = {};\r
-\r
- ms.mockTopoData = function() {\r
- var lid = 0,\r
- nodeRaw = [0, 1, 2, 3],\r
- linkRaw = [[0, 1], [2, 3], [3, 0], [0, 3]],\r
- nodes = nodeRaw.map(function(data) {\r
- return {\r
- 'id': 'n' + data,\r
- 'label': 'LABEL'+data,\r
- 'size': 3,\r
- 'x': Math.random(),\r
- 'y': Math.random(),\r
- 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
- };\r
- }),\r
- links = linkRaw.map(function(data) {\r
- var obj = {\r
- id: 'e' + lid,\r
- source: 'n' + data[0],\r
- target: 'n' + data[1],\r
- color: GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
- };\r
- lid = lid + 1;\r
- return obj;\r
- });\r
-\r
- return {nodes: nodes, links: links};\r
- };\r
-\r
- return ms;\r
- });\r
-\r
- gbp.register.factory('TopologyDataLoaders', function(GBPRestangular, GBPConstants) {\r
- var tdl = {};\r
-\r
- tdl.getSubjectsBetweenEndpointGroups = function(storage, tenantId, successCbk, errorCbk) {\r
- var restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'ui-backend:get-subjects-between-endpoint-groups',\r
- reqData = { "input": { "tenant-id": tenantId }};\r
-\r
- if(storage) {\r
- reqData.input['from-oper-data'] = {};\r
- }\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- // console.info('got data', data.output);\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- //Policies are representing links in PGN topology\r
- tdl.getGroupRulesBetweenEndpointGroups = function(successCbk, errorCbk) {\r
- var restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'pgn-application:get-group-rules-between-endpoint-groups',\r
- reqData = { "input": { "endpoint-group-pair":[] }};\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data); //set topology links\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- //Groups are representing nodes in PGN topology\r
- tdl.getEndpointGroups = function(successCbk, errorCbk) {\r
- var tenantId = getId(idTypes.tenant),\r
- restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'pgn-application:get-endpoint-groups',\r
- reqData = {\r
- "input": {\r
- "endpoint-group-id":[\r
- {\r
- "pgn-application:tenant-id": tenantId\r
- }\r
- ]\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data); //set topology nodes\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
-\r
- };\r
-\r
- tdl.getEndpointsFromEndpointGroup = function(tenantId, epgId, successCbk, errorCbk) {\r
- var restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'ui-backend:get-endpoints-from-endpoint-group',\r
- reqData = {\r
- "input": {\r
- "tenant-id": tenantId,\r
- "endpoint-group-id":epgId\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data); //set topology nodes\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
-\r
- };\r
-\r
- tdl.getEpgTopo = function(data){\r
- var epgData = data.output['endpoint-group-pair-with-subject'],\r
- nodes = [],\r
- edges = [],\r
- setNode = function(obj){\r
- var nodeObj = {\r
- 'id': 'n' + nodes.length,\r
- 'label': obj.name || obj.id,\r
- 'name': obj.name,\r
- 'size': 1,\r
- 'x': Math.random(),\r
- 'y': Math.random(),\r
- 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],\r
- 'type': obj.type\r
- };\r
-\r
- nodes.push(nodeObj);\r
- return nodeObj.id;\r
- },\r
- setEdge = function(sourceId, destId, data, direction) {\r
- var obj = {\r
- 'id': 'e' + edges.length,\r
- 'source': sourceId,\r
- 'target': destId,\r
- 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],\r
- 'data': data,\r
- 'direction' : direction\r
- // 'type': 'curve',\r
- // 'size' : 100\r
- };\r
-\r
- edges.push(obj);\r
- },\r
- getObjByProp = function(val, prop, list) {\r
- return list.filter(function(i){\r
- return i[prop] === val;\r
- });\r
- },\r
- getDirection = function(subjects){\r
- var directions = [];\r
- if ( subjects ) {\r
- subjects.forEach(function(s){\r
- if ( s['ui-rule'] ) {\r
- s['ui-rule'].forEach(function(rule){\r
- if ( rule['classifier-ref'] ) {\r
- rule['classifier-ref'].forEach(function(classifier){\r
- if ( classifier.direction && directions.indexOf(classifier.direction) === -1 ){\r
- directions.push(classifier.direction);\r
- }\r
- });\r
- }\r
- });\r
- }\r
- });\r
- }\r
- return directions.length === 1 ? directions[0] : directions.length > 1 ? 'bidirectional' : null;\r
-\r
- };\r
-\r
- if(epgData) {\r
- epgData.forEach(function(e){\r
- var cepgnId = null,\r
- pepgnId = null;\r
-\r
- if ( !getObjByProp(e['consumer-endpoint-group-id'],'name', nodes).length ) {\r
- var objCepg = {\r
- type: 'epg',\r
- name: e['consumer-endpoint-group-id']\r
- };\r
- cepgnId = setNode(objCepg);\r
- } else {\r
- cepgnId = getObjByProp(e['consumer-endpoint-group-id'],'name', nodes)[0].id;\r
- }\r
- if ( !getObjByProp(e['provider-endpoint-group-id'],'name', nodes).length ) {\r
- var objPepg = {\r
- type: 'epg',\r
- name: e['provider-endpoint-group-id']\r
- };\r
- pepgnId = setNode(objPepg);\r
- } else {\r
- pepgnId = getObjByProp(e['provider-endpoint-group-id'],'name', nodes)[0].id;\r
- }\r
-\r
- var direction = getDirection(e['ui-subject']);\r
-\r
- if ( cepgnId && pepgnId ) {\r
- setEdge(cepgnId, pepgnId, e['ui-subject'], direction);\r
- }\r
- });\r
- }\r
-\r
- return {\r
- nodes: nodes,\r
- links: edges\r
- };\r
- };\r
-\r
- \r
- tdl.getL2L3 = function(storage, tenantId, successCbk, errorCbk) {\r
- //l2-bridge-domain\r
- var lid = 0,\r
- nid = 0,\r
- getL2L3Label = function(node) {\r
- return node.name || node.id;\r
- },\r
- getSubnetLabel = function(node) {\r
- return node['ip-prefix'] || node.id;\r
- },\r
- getNodeColor = function(src) {\r
- return GBPConstants.colors[src] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];\r
- },\r
- getLinkColor = function(from, to) {\r
- return GBPConstants.colors[from+'-'+to] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];\r
- },\r
- getNodes = function(data, srcDesc, getLabelCbk) {\r
- var nodes = data.map(function(elem) {\r
- var obj = {\r
- 'id': 'n' + nid,\r
- 'label': getLabelCbk(elem),\r
- 'uuid': elem.id,\r
- 'size': 3,\r
- 'x': Math.random(),\r
- 'y': Math.random(),\r
- 'color': getNodeColor(srcDesc),\r
- 'elemType': srcDesc\r
- };\r
-\r
- nid += 1;\r
- return obj;\r
- });\r
-\r
- return nodes;\r
- },\r
- getLinks = function(data, srcNodes, targetNodes, fromDesc, toDesc) {\r
- var findByUUID = function(array, uuid) {\r
- return array.filter(function(elem) {\r
- return elem.uuid === uuid;\r
- })[0];\r
- };\r
-\r
- var links = data.map(function(elem) {\r
- var obj = null,\r
- src = findByUUID(srcNodes, elem.id),\r
- trg = findByUUID(targetNodes, elem.parent);\r
-\r
- if(src && trg) {\r
- obj = {\r
- 'id': 'e' + lid,\r
- 'source': src.id,\r
- 'target': trg.id,\r
- 'color': getLinkColor(fromDesc, toDesc)\r
- };\r
- lid += 1;\r
- }\r
-\r
- return obj;\r
- }).filter(function(elem) {\r
- return elem !== null;\r
- });\r
-\r
- return links;\r
- };\r
-\r
- restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);\r
-\r
- restObj.get().then(function(data) {\r
- var l2FloodNodes = getNodes(data.tenant[0]['l2-flood-domain'] || [], GBPConstants.strings.flood, getL2L3Label),\r
- l2BridgeNodes = getNodes(data.tenant[0]['l2-bridge-domain'] || [], GBPConstants.strings.bridge, getL2L3Label),\r
- l3ContextNodes = getNodes(data.tenant[0]['l3-context'] || [], GBPConstants.strings.l3ctx, getL2L3Label),\r
- subnetNodes = getNodes(data.tenant[0]['subnet'] || [], GBPConstants.strings.subnet, getSubnetLabel),\r
- l2FloodLinks = getLinks(data.tenant[0]['l2-flood-domain'] || [], l2FloodNodes, l2BridgeNodes, GBPConstants.strings.flood, GBPConstants.strings.bridge),\r
- l2BridgeLinks = getLinks(data.tenant[0]['l2-bridge-domain'] || [], l2BridgeNodes, l3ContextNodes, GBPConstants.strings.bridge, GBPConstants.strings.l3ctx),\r
- subnetLinks = getLinks(data.tenant[0]['subnet'] || [], subnetNodes, l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes), GBPConstants.strings.subnet, ''),\r
- allNodes = l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes).concat(subnetNodes),\r
- allLinks = l2BridgeLinks.concat(l2FloodLinks).concat(subnetLinks);\r
-\r
- successCbk(allNodes, allLinks);\r
- }, function(res) {\r
- errorCbk(res.data, res.status);\r
- });\r
- };\r
-\r
- tdl.getClassifierInstances = function() {\r
-\r
- };\r
-\r
- return tdl;\r
- });\r
-\r
- gbp.register.factory('TopoServices', function(TopologyDataLoaders, MockServices, GBPConstants) {\r
-\r
- var ts = {};\r
-\r
- var loaders = {};\r
-\r
- var legends = {};\r
-\r
- var transformPGNTopoNodes = function(data) {\r
- return data.output['endpoint-group'].map(function(d) {\r
- return {\r
- id: d.id,\r
- group: d.name,\r
- sgt: d['security-group-tag']\r
- };\r
- });\r
- };\r
-\r
- var transformPGNTopoLinks = function(data) {\r
- return data.output['endpoint-group-pair-with-rules'].map(function(d) {\r
- return {\r
- source: d['provider-group-id'],\r
- target: d['consumer-group-id'],\r
- policy: d['group-rule'][0]['action-ref'].map(function(r) {\r
- return r.name;\r
- })\r
- };\r
- });\r
- };\r
-\r
- var gbpLegend = {\r
- 'epg' : GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]\r
- };\r
-\r
- legends[GBPConstants.strings.empty] = {};\r
- legends[GBPConstants.strings.config] = gbpLegend;\r
- legends[GBPConstants.strings.oper] = gbpLegend;\r
- legends[GBPConstants.strings.mock] = gbpLegend;\r
- legends[GBPConstants.strings.l2l3] = {\r
- 'l2-flood': GBPConstants.colors[GBPConstants.strings.flood],\r
- 'l2-bridge': GBPConstants.colors[GBPConstants.strings.bridge],\r
- 'l3-context': GBPConstants.colors[GBPConstants.strings.l3ctx],\r
- 'subnet': GBPConstants.colors[GBPConstants.strings.subnet],\r
- 'link': GBPConstants.colors[GBPConstants.strings.subnet+'-']\r
- };\r
-\r
- loaders[GBPConstants.strings.empty] = function(successCbk, errorCbk) {\r
- successCbk([], []);\r
- };\r
-\r
- loaders[GBPConstants.strings.config] = function(successCbk, errorCbk, args) {\r
- var storage = args.storage || 'config',\r
- tenantId = args.tenantId;\r
- \r
- \r
- TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){\r
- var topo = TopologyDataLoaders.getEpgTopo(data);\r
- successCbk(topo.nodes, topo.links);\r
- //successCbk\r
- }, errorCbk);\r
- };\r
-\r
- loaders[GBPConstants.strings.oper] = function(successCbk, errorCbk, args) {\r
- var storage = args.storage || 'config',\r
- tenantId = args.tenantId;\r
-\r
- TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){\r
- var topo = TopologyDataLoaders.getEpgTopo(data);\r
- successCbk(topo.nodes, topo.links);\r
- //successCbk\r
- }, errorCbk);\r
- };\r
-\r
- loaders[GBPConstants.strings.l2l3] = function(successCbk, errorCbk, args) {\r
- var storage = args.storage || 'config',\r
- tenantId = args.tenantId;\r
-\r
- if(storage && tenantId) {\r
- TopologyDataLoaders.getL2L3(storage, tenantId, successCbk, errorCbk);\r
- } else {\r
- //different kind of error\r
- errorCbk();\r
- }\r
- };\r
-\r
- loaders[GBPConstants.strings.mock] = function(successCbk, errorCbk) {\r
- var data = MockServices.mockTopoData();\r
- successCbk(data.nodes, data.links);\r
- };\r
-\r
- ts.getConsProvLabel = function(edge, topo){\r
- var provName = '',\r
- conName = '';\r
-\r
- topo.nodes.forEach(function(n){\r
-\r
- if ( edge.source === n.id ) {\r
- provName = n.name;\r
- }\r
-\r
- if ( edge.target === n.id ) {\r
- conName = n.name;\r
- }\r
- });\r
-\r
- return provName + ':' + conName;\r
- };\r
-\r
- ts.getLegend = function(type) {\r
- if(type === null || legends.hasOwnProperty(type) === false) {\r
- type = GBPConstants.strings.empty;\r
- }\r
-\r
- return legends[type];\r
- };\r
-\r
- ts.loadTopology = function(type, successCbk, errorCbk, args) {\r
- if(type === null || loaders.hasOwnProperty(type) === false) {\r
- type = GBPConstants.strings.empty;\r
- }\r
-\r
- loaders[type](successCbk, errorCbk, args);\r
- };\r
-\r
- return ts;\r
- });\r
-\r
- gbp.register.factory('GPBServices', function(GBPRestangular) {\r
-\r
- var s = {};\r
-\r
- s.getDefinitions = function(successCbk, errorCbk) {\r
- var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');\r
-\r
- restObj.get().then(function(data) {\r
- if(data['subject-feature-definitions']) {\r
- var classifiersDefs = data['subject-feature-definitions']['classifier-definition'] || [],\r
- actionsDefs = data['subject-feature-definitions']['action-definition'] || [];\r
- successCbk(classifiersDefs, actionsDefs);\r
- } else {\r
- //TODO log error\r
- }\r
- }, function(res) {\r
- // errorCbk(res);\r
- });\r
- };\r
-\r
- s.getServiceFunctionChains = function(successCbk, errorCbk) {\r
- var restObj = GBPRestangular.one('restconf').one('config').one('service-function-chain:service-function-chains');\r
-\r
- restObj.get().then(function(data) {\r
- if(data['service-function-chains']) {\r
- successCbk(data['service-function-chains']['service-function-chain']);\r
- } else {\r
- //TODO log error\r
- }\r
- }, function(res) {\r
- // errorCbk(res);\r
- });\r
- };\r
-\r
- s.getUUIDnumber = function() {\r
- var d = new Date().getTime();\r
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r
- var r = (d + Math.random()*16)%16 | 0;\r
- d = Math.floor(d/16);\r
- return (c=='x' ? r : (r&0x3|0x8)).toString(16);\r
- });\r
- };\r
-\r
- s.createRestObj = function(storage) {\r
- storage = storage || 'config';\r
- restObj = GBPRestangular.one('restconf').one(storage);\r
-\r
- return restObj;\r
- };\r
-\r
- s.send = function(restObj, reqData, successCbk, errorCbk) {\r
- restObj.customPUT(reqData).then(function(data) {\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res.data, res.status);\r
- });\r
- };\r
-\r
- s.post = function(restObj, reqData, successCbk, errorCbk) {\r
- restObj.customPOST(reqData).then(function(data) {\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res.data, res.status);\r
- });\r
- };\r
-\r
- s.delete = function(restObj, successCbk, errorCbk) {\r
- restObj.remove().then(function(data) {\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res.data, res.status);\r
- });\r
- };\r
-\r
- s.load = function(restObj, transformCallback, successCbk, errorCbk) {\r
- restObj.get().then(function(data) {\r
- var objs = transformCallback(data) || [];\r
- successCbk(objs);\r
- }, function(res) {\r
- errorCbk(res.data, res.status);\r
- });\r
- };\r
-\r
- s.stripNullValues = function(obj) {\r
- Object.keys(obj).forEach(function(k) {\r
- if(obj[k] === null) {\r
- delete obj[k];\r
- }\r
- });\r
-\r
- return obj;\r
- };\r
-\r
- s.removeEmptyElementsFromList = function(list) {\r
- return list.filter(function(e) {\r
- return e !== "";\r
- });\r
- };\r
-\r
- s.createParamObj = function(name, type, value) {\r
- var obj = { name: name };\r
-\r
- obj[type+'-value'] = value;\r
-\r
- return obj;\r
- };\r
-\r
- s.getInstanceParamValue = function(param) {\r
- return param['int-value'] || param['string-value'] || param['range-value'];\r
- };\r
-\r
- s.getDefinitionObjParams = function(defObj, id) {\r
- var obj = defObj.filter(function(def) {\r
- return def.id === id;\r
- })[0],\r
- params = (obj && obj.parameter) ? obj.parameter : [];\r
-\r
- return params;\r
-\r
- };\r
-\r
- s.getPropFromListByProp = function(list, propSrc, targetValue, propDst) {\r
- var output = null,\r
- selectedObj = list.filter(function(e) {\r
- return e[propSrc] === targetValue;\r
- })[0];\r
-\r
- if(selectedObj) {\r
- if(propDst) {\r
- output = selectedObj[propDst];\r
- } else {\r
- output = selectedObj;\r
- }\r
- }\r
-\r
- return output;\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPGovernanceServices', function(TopologyDataLoaders) {\r
- var s = {};\r
-\r
- var subjectInList = function(subjectName, subjectList) {\r
- return subjectList.some(function(s) {\r
- return s.name === subjectName;\r
- });\r
- };\r
-\r
- var EPG = function(epgId, tenantId) {\r
- this.id = epgId;\r
- this.tenantId = tenantId;\r
- };\r
-\r
- var Subject = function(name) {\r
- this.name = name;\r
- this.rules = [];\r
- this.providers = [];\r
- this.consumers = [];\r
-\r
- this.addProvider = function(providingEpg) {\r
- if(this.providers.indexOf(providingEpg) === -1) {\r
- this.providers.push(providingEpg);\r
- }\r
- };\r
-\r
- this.addConsumer = function(consumingEpg) {\r
- if(this.consumers.indexOf(consumingEpg) === -1) {\r
- this.consumers.push(consumingEpg);\r
- }\r
- };\r
-\r
- this.addRule = function(rule, classifierInstances) {\r
- if(rule['classifier-ref'] && rule['classifier-ref'].length > 0) {\r
- \r
- rule['classifier-ref'].forEach(function(cr) {\r
- //cr['parameters'] = [];\r
- classifierInstances.forEach(function(ci) {\r
- if(ci['name'] === cr['instance-name']) {\r
- cr['parameters'] = ci['parameter-value'];\r
- }\r
- });\r
- });\r
- }\r
-\r
- this.rules.push(rule);\r
- };\r
- };\r
-\r
- var addEpg = function(epgList, epgId, tenantId) {\r
- var addedEpg = null;\r
-\r
- if(epgList.some(function(epg) {\r
- return epg.id === epgId && epg.tenantId === tenantId;\r
- }) === false) {\r
- addedEpg = new EPG(epgId, tenantId);\r
- }\r
-\r
- if(addedEpg !== null) {\r
- epgList.push(addedEpg);\r
- }\r
-\r
- return addedEpg;\r
- },\r
- addSubject = function(subject, subjects, providerEpg, consumerEpg, classifierInstances) {\r
- //console.log('classifierInstances:', classifierInstances);\r
- var existingSubject = subjects.filter(function(s) {\r
- return s.name === subject.name;\r
- })[0],\r
- newSubject = (existingSubject === undefined);\r
-\r
- if(newSubject) {\r
- existingSubject = new Subject(subject.name);\r
- }\r
-\r
- existingSubject.addProvider(providerEpg);\r
- existingSubject.addConsumer(consumerEpg);\r
- \r
- if(subject['ui-rule'] && subject['ui-rule'].length > 0) {\r
- subject['ui-rule'].forEach(function(r) {\r
- existingSubject.addRule(r, classifierInstances);\r
- });\r
- }\r
- \r
- if(newSubject) {\r
- subjects.push(existingSubject);\r
- }\r
- },\r
- processPairData = function(providers, consumers, subjects, pairData, classifierInstances) {\r
- addEpg(providers, pairData['provider-endpoint-group-id'], pairData['provider-tenant-id']);\r
- addEpg(consumers, pairData['consumer-endpoint-group-id'], pairData['consumer-tenant-id']);\r
-\r
- pairData['ui-subject'].forEach(function(s) {\r
- addSubject(s, subjects, pairData['provider-endpoint-group-id'], pairData['consumer-endpoint-group-id'], classifierInstances);\r
- });\r
- };\r
-\r
- s.getEPGsAndSubjects = function(tenantId, classifierInstances, successCbk, errorCbk) {\r
- TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, \r
- function(data) {\r
- var epgPairs = data.output['endpoint-group-pair-with-subject'],\r
- consumers = [],\r
- providers = [],\r
- subjects = [];\r
-\r
- if(epgPairs) {\r
- epgPairs.forEach(function(p) {\r
- processPairData(providers, consumers, subjects, p, classifierInstances);\r
- });\r
- }\r
-\r
- successCbk({providers: providers, consumers: consumers, subjects: subjects});\r
- },\r
- function() {\r
- //TODO log error\r
- });\r
- };\r
-\r
- return s;\r
- });\r
-\r
- gbp.register.factory('GBPTenantServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Tenant = function(id, name, description) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.name = name || null;\r
- this.description = description || null;\r
- };\r
-\r
- var createBaseRestObj = function() {\r
- return GPBServices\r
- .createRestObj().one('policy:tenants');\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj().one('tenant').one(pathObj.tenantId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new Tenant(rawObj.id, rawObj.name, rawObj.description);\r
- // });\r
- return rawData.tenants.tenant;\r
- };\r
-\r
- var createData = function(obj) {\r
- return { tenant : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId) {\r
- return {\r
- tenantId: tenantId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Tenant();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.modify = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(successCbk, errorCbk) {\r
- var restObj = createBaseRestObj();\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPContractServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Contract = function(id, description, parent) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.description = description || null;\r
- this.parent = parent || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj().one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('contract').one(pathObj.contractId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new Contract(rawObj.id, rawObj.description);\r
- // });\r
- return rawData.tenant[0].contract;\r
- };\r
-\r
- var createData = function(obj) {\r
- return { contract : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, contractId) {\r
- return {\r
- tenantId: tenantId,\r
- contractId: contractId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Contract();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPClauseServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Clause = function(name, subjectRefs) {\r
- this.name = name || null;\r
- this['subject-refs'] = subjectRefs || [];\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId)\r
- .one('contract').one(pathObj.contractId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('clause').one(pathObj.clauseId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- var data = null,\r
- clauseData = rawData.contract[0].clause;\r
-\r
- if(clauseData) {\r
- data = clauseData.map(function(elem) {\r
- if(elem.hasOwnProperty('subject-refs') === false) {\r
- elem['subject-refs'] = [];\r
- }\r
- return elem;\r
- });\r
- }\r
-\r
- return data;\r
- };\r
-\r
- var createData = function(obj) {\r
- var o = GPBServices.stripNullValues(obj);\r
-\r
- if(o['subject-refs']) {\r
- o['subject-refs'] = GPBServices.removeEmptyElementsFromList(o['subject-refs']);\r
- }\r
-\r
- return { clause : [ o ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, contractId, clauseId) {\r
- return {\r
- tenantId: tenantId,\r
- contractId: contractId,\r
- clauseId: clauseId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Clause();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPSubjectServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Subject = function(name, order) {\r
- this.name = name || null;\r
- this.order = order || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId)\r
- .one('contract').one(pathObj.contractId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('subject').one(pathObj.subjectId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new Subject(rawObj.name, rawObj.order);\r
- // });\r
- return rawData.contract[0].subject;\r
- };\r
-\r
- var createData = function(obj) {\r
- return { subject : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, contractId, subjectId) {\r
- return {\r
- tenantId: tenantId,\r
- contractId: contractId,\r
- subjectId: subjectId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Subject();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPRuleServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Rule = function(name, order) {\r
- this.name = name || null;\r
- this.order = order || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant')\r
- .one(pathObj.tenantId).one('contract').one(pathObj.contractId)\r
- .one('subject').one(pathObj.subjectId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('rule').one(pathObj.ruleId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new Rule(rawObj.name, rawObj.order);\r
- // });\r
- return rawData.subject[0].rule;\r
- };\r
-\r
- var createData = function(obj) {\r
- return { rule : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, contractId, subjectId, ruleId) {\r
- return {\r
- tenantId: tenantId,\r
- contractId: contractId,\r
- subjectId: subjectId,\r
- ruleId: ruleId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Rule();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPClassifierRefsServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var ClassifierRef = function(name, direction, instanceName, connectionTracking) {\r
- this.name = name || null;\r
- this.direction = direction || null;\r
- this['instance-name'] = instanceName || null;\r
- this['connection-tracking'] = connectionTracking || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant')\r
- .one(pathObj.tenantId).one('contract').one(pathObj.contractId)\r
- .one('subject').one(pathObj.subjectId)\r
- .one('rule').one(pathObj.ruleId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('classifier-ref').one(pathObj.classifierRefId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new ClassifierRef(rawObj.name, rawObj.direction, rawObj['instance-name']);\r
- // });\r
- return rawData.rule[0]['classifier-ref'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'classifier-ref' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, contractId, subjectId, ruleId, classifierRefId) {\r
- return {\r
- tenantId: tenantId,\r
- contractId: contractId,\r
- subjectId: subjectId,\r
- ruleId: ruleId,\r
- classifierRefId: classifierRefId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new ClassifierRef();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPActionRefsServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var ActionRef = function(name, order, instanceName) {\r
- this.name = name || null;\r
- this.order = order || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant')\r
- .one(pathObj.tenantId).one('contract').one(pathObj.contractId)\r
- .one('subject').one(pathObj.subjectId)\r
- .one('rule').one(pathObj.ruleId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('action-ref').one(pathObj.actionRefId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new ActionRef(rawObj.name, rawObj.order);\r
- // });\r
- return rawData.rule[0]['action-ref'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'action-ref' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, contractId, subjectId, ruleId, actionRefId) {\r
- return {\r
- tenantId: tenantId,\r
- contractId: contractId,\r
- subjectId: subjectId,\r
- ruleId: ruleId,\r
- actionRefId: actionRefId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new ActionRef();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPL2FloodDomainServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var L2FloodDomain = function(id, name, description, parent) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.name = name || null;\r
- this.description = description || null;\r
- this.parent = parent || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('l2-flood-domain').one(pathObj.l2FloodDomain);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new L2FloodDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);\r
- // });\r
- return rawData.tenant[0]['l2-flood-domain'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'l2-flood-domain' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, l2FloodDomain) {\r
- return {\r
- tenantId: tenantId,\r
- l2FloodDomain: l2FloodDomain\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new L2FloodDomain();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPL2BridgeDomainServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var L2BridgeDomain = function(id, name, description, parent) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.name = name || null;\r
- this.description = description || null;\r
- this.parent = parent || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant')\r
- .one(pathObj.tenantId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('l2-bridge-domain').one(pathObj.l2BridgeDomain);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new L2BridgeDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);\r
- // });\r
- return rawData.tenant[0]['l2-bridge-domain'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'l2-bridge-domain' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, l2BridgeDomain) {\r
- return {\r
- tenantId: tenantId,\r
- l2BridgeDomain: l2BridgeDomain\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new L2BridgeDomain();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPL3ContextServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var L3Context = function(id, name, description) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.name = name || null;\r
- this.description = description || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('l3-context').one(pathObj.l3Context);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
- // });\r
- return rawData.tenant[0]['l3-context'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'l3-context' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, l3Context) {\r
- return {\r
- tenantId: tenantId,\r
- l3Context: l3Context\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new L3Context();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPSubnetServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Subnet = function(id, name, description, parent, ipPrefix, virtualRouterIp) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.name = name || null;\r
- this.description = description || null;\r
- this.parent = parent || null;\r
- this['ip-prefix'] = ipPrefix || null;\r
- this['virtual-router-ip'] = virtualRouterIp || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('subnet').one(pathObj.subnet);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
- // });\r
- return rawData.tenant[0]['subnet'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'subnet' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, subnet) {\r
- return {\r
- tenantId: tenantId,\r
- subnet: subnet\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Subnet();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPGatewayServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Gateway = function(gateway) {\r
- this.gateway = gateway || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('gateways').one(pathObj.gateway);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
- // });\r
- return rawData.subnet[0]['gateways'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'gateways' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, subnetId, gateway) {\r
- return {\r
- tenantId: tenantId,\r
- subnetId: subnetId,\r
- gateway: gateway\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Gateway();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPPrefixServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Prefix = function(prefix) {\r
- this.prefix = prefix || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId).one('gateways').one(pathObj.gatewayId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('prefixes').one(pathObj.prefixId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- // return rawData.map(function(rawObj){\r
- // return new L3Context(rawObj.id, rawObj.name, rawObj.description);\r
- // });\r
- return rawData.gateways[0].prefixes;\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'prefixes' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, subnetId, gatewayId, prefixId) {\r
- return {\r
- tenantId: tenantId,\r
- subnetId: subnetId,\r
- gatewayId: gatewayId,\r
- prefixId: prefixId ? prefixId.replace("/", "%2F") : prefixId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new Prefix();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPClassifierInstanceServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var ClassifierService = function(name, classifierDefId) {\r
- this.name = name || null;\r
- this['classifier-definition-id'] = classifierDefId || null;\r
- this['parameter-value'] = [];\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('classifier-instance').one(pathObj.classfierInstanceId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- return rawData['subject-feature-instances']['classifier-instance'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'classifier-instance' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, classfierInstanceId) {\r
- return {\r
- tenantId: tenantId,\r
- classfierInstanceId: classfierInstanceId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new ClassifierService();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPActionInstanceServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var ActionService = function(name, actionDefId) {\r
- this.name = name || null;\r
- this['action-definition-id'] = actionDefId || null;\r
- this['parameter-value'] = [];\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('action-instance').one(pathObj.actionInstanceId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- return rawData['subject-feature-instances']['action-instance'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'action-instance' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, actionInstanceId) {\r
- return {\r
- tenantId: tenantId,\r
- actionInstanceId: actionInstanceId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new ActionService();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- s.getDefinitions = function(successCbk, errorCbk) {\r
- var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');\r
- \r
- restObj.get().then(function(data) {\r
- successCbk(data['subject-feature-definitions']['action-definition']);\r
- }, function(res) {\r
- // errorCbk(res);\r
- });\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPEpgServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var EPG = function(name, description, intraGroupPolicy, networkDomain, id, parent) {\r
- this.id = id || GPBServices.getUUIDnumber();\r
- this.name = name || null;\r
- this.description = description || null;\r
- this['intra-group-policy'] = intraGroupPolicy || null;\r
- this['network-domain'] = networkDomain || null;\r
- this.parent = parent || null;\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('endpoint-group').one(pathObj.epgId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- return rawData.tenant[0]['endpoint-group'];\r
- };\r
-\r
- var createData = function(obj) {\r
- return { 'endpoint-group' : [ GPBServices.stripNullValues(obj) ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, epgId) {\r
- return {\r
- tenantId: tenantId,\r
- epgId: epgId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new EPG();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPConNamedSelServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var ConsumerNamedSelector = function(name, contract) {\r
- this.name = name || null;\r
- this.contract = contract || [];\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('consumer-named-selector').one(pathObj.cnsId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- var data = null,\r
- consumerData = rawData['endpoint-group'][0]['consumer-named-selector'];\r
-\r
- if(consumerData) {\r
- data = consumerData.map(function(elem) {\r
- if(elem.hasOwnProperty('contract') === false) {\r
- elem.contract = [];\r
- }\r
- return elem;\r
- });\r
- }\r
-\r
- return data;\r
- };\r
-\r
- var createData = function(obj) {\r
- var o = GPBServices.stripNullValues(obj);\r
-\r
- if(o.contract) {\r
- o.contract = GPBServices.removeEmptyElementsFromList(o.contract);\r
- }\r
-\r
- return { 'consumer-named-selector' : [ o ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, epgId, cnsId) {\r
- return {\r
- tenantId: tenantId,\r
- epgId: epgId,\r
- cnsId: cnsId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new ConsumerNamedSelector();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
-\r
- gbp.register.factory('GBPProNamedSelServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var ProviderNamedSelector = function(name, contract) {\r
- this.name = name || null;\r
- this.contract = contract || [];\r
- };\r
-\r
- var createBaseRestObj = function(pathObj) {\r
- return GPBServices.createRestObj()\r
- .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);\r
- };\r
-\r
- var createRestObj = function(pathObj) {\r
- return createBaseRestObj(pathObj).one('provider-named-selector').one(pathObj.cnsId);\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- var data = null,\r
- provderData = rawData['endpoint-group'][0]['provider-named-selector'];\r
-\r
- if(provderData) {\r
- data = provderData.map(function(elem) {\r
- if(elem.hasOwnProperty('contract') === false) {\r
- elem.contract = [];\r
- }\r
- return elem;\r
- });\r
- }\r
-\r
- return data;\r
- };\r
-\r
- var createData = function(obj) {\r
- var o = GPBServices.stripNullValues(obj);\r
-\r
- if(o.contract) {\r
- o.contract = GPBServices.removeEmptyElementsFromList(o.contract);\r
- }\r
-\r
- return { 'provider-named-selector' : [ o ] };\r
- };\r
-\r
- s.createPathObj = function(tenantId, epgId, cnsId) {\r
- return {\r
- tenantId: tenantId,\r
- epgId: epgId,\r
- cnsId: cnsId\r
- };\r
- };\r
-\r
- s.createObj = function() {\r
- return new ProviderNamedSelector();\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path),\r
- reqData = createData(obj);\r
-\r
- GPBServices.send(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, successCbk, errorCbk) {\r
- var restObj = createRestObj(path);\r
-\r
- GPBServices.delete(restObj, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = createBaseRestObj(path);\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPEndpointServices', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var Endpoint = function(tenantId) {\r
- this.tenant = tenantId || null;\r
- this['network-containment'] = null;\r
- this['endpoint-group'] = null;\r
- this['endpoint-groups'] = [];\r
- this.condition = [];\r
- this['l2-context'] = null;\r
- this['mac-address'] = null;\r
- this['l3-address'] = [];\r
- };\r
-\r
- var createRestObj = function() {\r
- return GPBServices.createRestObj('operations');\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- return rawData.endpoints.endpoint;\r
- };\r
-\r
- var createBaseData = function(obj) {\r
- var o = GPBServices.stripNullValues(obj);\r
-\r
- if(o.condition) {\r
- o.condition = GPBServices.removeEmptyElementsFromList(o.condition);\r
- }\r
-\r
- if(o['endpoint-groups']) {\r
- o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);\r
- }\r
-\r
- if(o['l3-address']) {\r
- o['l3-address'] = GPBServices.removeEmptyElementsFromList(o['l3-address']);\r
- }\r
-\r
- return o;\r
- };\r
-\r
- var createSendData = function(obj) {\r
- var o = createBaseData(obj);\r
- return { 'input': o };\r
- };\r
-\r
- var createDeleteData = function(obj) {\r
- var o = { \r
- 'input': { \r
- 'l3': obj['l3-address'],\r
- 'l2': [\r
- { \r
- 'l2-context': obj['l2-context'],\r
- 'mac-address': obj['mac-address']\r
- }\r
- ] \r
- } \r
- };\r
-\r
- return o;\r
- };\r
-\r
- s.createObj = function(tenantId) {\r
- return new Endpoint(tenantId);\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj().one('endpoint:register-endpoint'),\r
- reqData = createSendData(obj);\r
-\r
- GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),\r
- reqData = createDeleteData(obj);\r
- GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('GBPEndpointL3Services', function(GPBServices) {\r
-\r
- var s = {};\r
-\r
- var EndpointL3 = function(tenantId) {\r
- this.tenant = tenantId || null;\r
- this['endpoint-group'] = null;\r
- this['endpoint-groups'] = [];\r
- this.condition = [];\r
- this['l3-context'] = null;\r
- this['ip-prefix'] = null;\r
- this['endpoint-l2-gateways'] = [];\r
- this['endpoint-l3-gateways'] = [];\r
- };\r
-\r
- var createRestObj = function() {\r
- return GPBServices.createRestObj('operations');\r
- };\r
-\r
- var transformCallback = function(rawData) {\r
- return rawData.endpoints['endpoint-l3-prefix'];\r
- };\r
-\r
- var createBaseData = function(obj) {\r
- var o = GPBServices.stripNullValues(obj);\r
-\r
- if(o.condition) {\r
- o.condition = GPBServices.removeEmptyElementsFromList(o.condition);\r
- }\r
-\r
- if(o['endpoint-groups']) {\r
- o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);\r
- }\r
-\r
- if(o['endpoint-l2-gateways']) {\r
- o['endpoint-l2-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l2-gateways']);\r
- }\r
-\r
- if(o['endpoint-l3-gateways']) {\r
- o['endpoint-l3-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l3-gateways']);\r
- }\r
-\r
- return o;\r
- };\r
-\r
- var createSendData = function(obj) {\r
- var o = createBaseData(obj);\r
- return { 'input': o };\r
- };\r
-\r
- var createDeleteData = function(obj) {\r
- var o = { \r
- 'input': { \r
- 'l3-prefix': [\r
- {\r
- 'l3-context': obj['l3-context'],\r
- 'ip-prefix': obj['ip-prefix']\r
- }\r
- ],\r
- 'l2': obj['endpoint-l2-gateways'],\r
- 'l3': obj['endpoint-l3-gateways']\r
- } \r
- };\r
-\r
- return o;\r
- };\r
-\r
- s.createObj = function(tenantId) {\r
- return new EndpointL3(tenantId);\r
- };\r
-\r
- s.send = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj().one('endpoint:register-l3-prefix-endpoint'),\r
- reqData = createSendData(obj);\r
-\r
- GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.delete = function(path, obj, successCbk, errorCbk) {\r
- var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),\r
- reqData = createDeleteData(obj);\r
-\r
- GPBServices.post(restObj, reqData, successCbk, errorCbk);\r
- };\r
-\r
- s.load = function(path, successCbk, errorCbk) {\r
- var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');\r
-\r
- GPBServices.load(restObj, transformCallback, successCbk, errorCbk);\r
- };\r
-\r
- return s;\r
-\r
- });\r
-\r
- gbp.register.factory('PGNServices', function(GBPRestangular) {\r
-\r
- var s = {};\r
-\r
- var idGetter = {};\r
-\r
- var idTypes = {\r
- tenant: 'TENANT',\r
- uuid: 'UUID',\r
- l3ctx: 'L3CTX',\r
- pathAction: 'PATHACTION',\r
- accessAction: 'ACCESSACTION'\r
- };\r
-\r
- idGetter[idTypes.tenant] = function() {\r
- return 1;\r
- };\r
-\r
- idGetter[idTypes.uuid] = function() {\r
- return 2;\r
- };\r
-\r
- idGetter[idTypes.l3ctx] = function() {\r
- return 3;\r
- };\r
-\r
- idGetter[idTypes.pathAction] = function() {\r
- return 4;\r
- };\r
-\r
- idGetter[idTypes.accessAction] = function() {\r
- return 5;\r
- };\r
-\r
- var getId = function(type) {\r
- if(idGetter.hasOwnProperty(type)) {\r
- return id = idGetter[type]();\r
- } else {\r
- throw "Cannot get idGetter for type " + type;\r
- }\r
- };\r
-\r
- s.addReplaceEndpointGroup = function(successCbk, errorCbk, groupName, sgt, description) {\r
- var tenantId = getId(idTypes.tenant),\r
- uuid = getId(idTypes.uuid),\r
- restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'pgn-application:create-or-replace-endpoint-groups',\r
- reqData = {\r
- "input": \r
- {\r
- "endpoint-group":[\r
- {\r
- "pgn-application:tenant-id": tenantID, \r
- "pgn-application:id":uuid,\r
- "pgn-application:security-group-tag":sgt,\r
- "pgn-application:name":groupName,\r
- "pgn-application:description":description\r
- }\r
- ]\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- s.deleteEndpointGroup = function(successCbk, errorCbk, uuid) {\r
- var tenantId = getId(idTypes.tenant),\r
- restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'pgn-application:delete-endpoint-groups',\r
- reqData = {\r
- "input": {\r
- "endpoint-group":[\r
- {\r
- "pgn-application:tenant-id": tenantId, \r
- "pgn-application:id":uuid\r
- }\r
- ]\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- s.getActions = function(successCbk, errorCbk) {\r
- var tenantId = getId(idTypes.tenant),\r
- pathActionId = getId(idTypes.pathAction),\r
- accessActionId = getId(idTypes.accessAction),\r
- restObj = GBPRestangular.one('restconf').one('config').one('policy:tenants', tenantId).one('subject-feature-instances');\r
-\r
- restObj.get().then(function(data) {\r
- successCbk(data); //TODO fill actions\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- s.applyPolicy = function(successCbk, errorCbk, providerId, consumerId, pathSelRule, accessCtrlRule) {\r
- var restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'pgn-application:wire-endpoint-groups',\r
- actionRefName = (pathSelRule ? pathSelRule : '') + (accessCtrlRule ? accessCtrlRule : ''),\r
- reqData = {\r
- "input": {\r
- "endpoint-group-pair-with-rules": {\r
- "pgn-application:provider-tenant-id": tenantID, \r
- "pgn-application:consumer-tenant-id": tenantID, \r
- "pgn-application:provider-group-id":providerId,\r
- "pgn-application:consumer-group-id":consumerId,\r
- "pgn-application:group-rule": [\r
- {\r
- "action-ref": [pathSelRule, accessCtrlRule].map(function(r) {\r
- return { "name":r };\r
- }),\r
- "name":actionRefName\r
- }\r
- ]\r
- }\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data); //TODO reload policies\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- s.deletePolicy = function(successCbk, errorCbk, providerId, consumerId) {\r
- var tenantId = getId(idTypes.tenant),\r
- restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'pgn-application:unwire-endpoint-groups',\r
- reqData = {\r
- "input": \r
- {\r
- "endpoint-group-pair":[\r
- {\r
- "pgn-application:provider-tenant-id": tenantId, \r
- "pgn-application:consumer-tenant-id": tenantId, \r
- "pgn-application:provider-group-id":providerId,\r
- "pgn-application:consumer-group-id":consumerId\r
- }\r
- ]\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data); //TODO reload policies\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- s.addEndPoint = function(successCbk, errorCbk, ipAddress, groupId) {\r
- var l3ctxId = getId(idTypes.l3ctx),\r
- tenantId = getId(idTypes.tenant),\r
- restObj = GBPRestangular.one('restconf').one('operations'),\r
- rpcRes = 'endpoint:register-endpoint',\r
- reqData = {\r
- "input": {\r
- "endpoint-group": groupId,\r
- "l3-address": [\r
- {\r
- "ip-address": ipAddress,\r
- "l3-context": l3ctxId\r
- }\r
- ],\r
- "tenant": tenantId\r
- }\r
- };\r
-\r
- restObj.post(rpcRes, reqData).then(function(data) {\r
- successCbk(data);\r
- }, function(res) {\r
- errorCbk(res);\r
- });\r
- };\r
-\r
- s.getUUIDnumber = function() {\r
- var d = new Date().getTime();\r
- return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\r
- var r = (d + Math.random()*16)%16 | 0;\r
- d = Math.floor(d/16);\r
- return (c=='x' ? r : (r&0x3|0x8)).toString(16);\r
- });\r
- };\r
-\r
- return s;\r
- });\r
-\r
- gbp.register.factory('DesignGbpFactory', function(){\r
-\r
- var dvf = {};\r
-\r
- dvf.setMainClass = function(){\r
- if ( $('.gbpWrapper').length ) {\r
- $('.gbpWrapper').closest('.col-xs-12').addClass('gbpGlobalWrapper');\r
- }\r
- };\r
-\r
- return dvf;\r
-\r
- });\r
-\r
- gbp.register.factory('JointGraphOffsetFactory', function(GBPConstants){\r
- var jgof = {};\r
-\r
- jgof.createWHObj = function(w, h) {\r
- return {w: w || 0, h: h || 0};\r
- };\r
-\r
- jgof.updateOffsets = function(delta, offset, margin, maximums, paper) {\r
- offset.w = offset.w + delta.w + margin.w;\r
-\r
- if(offset.w >= maximums.w) {\r
- paper.setDimensions(offset.w + 30, paper.options.height);\r
- offset.w = offset.ow;\r
- offset.h = offset.h + margin.h;\r
- }\r
-\r
- };\r
-\r
- jgof.resetOffsets = function(offset, w, h) {\r
- offset.w = w;\r
- offset.h = h;\r
- };\r
-\r
- jgof.getCurrentOffset = function(array, type) {\r
- var max = 0;\r
- array.forEach(function(item){\r
- max = item.attributes.position[type] > max ? item.attributes.position[type] : max;\r
- });\r
-\r
- return max;\r
- };\r
-\r
- jgof.checkObjsHoffsets = function(array, size, paper) {\r
- var lastPosY = 0,\r
- addOffset = false,\r
- cellBottomOffset = 80,\r
- setItemPosition = function(item, type) {\r
- while (item.attributes.position[type] < size + cellBottomOffset) {\r
- item.translate(null, cellBottomOffset);\r
- }\r
- };\r
-\r
- array.forEach(function(item){\r
- addOffset = (size + cellBottomOffset) >= item.attributes.position.y;\r
-\r
- if ( addOffset ) {\r
- setItemPosition(item, 'y');\r
- }\r
-\r
- if ( item.attributes.position.y + cellBottomOffset > paper.options.height ) {\r
- paper.setDimensions(paper.options.width, paper.options.height + cellBottomOffset);\r
- }\r
- });\r
- };\r
-\r
- return jgof;\r
- });\r
-\r
- gbp.register.factory('JointGraphFactory', function(GBPConstants){\r
- var defaulColor = 'blue';\r
-\r
- var jgf = {};\r
-\r
- jgf.getLabelLength = function(length) {\r
- return length * 10 > 200 ? 200 : length * 10;\r
- };\r
-\r
- jgf.createGraph = function() {\r
- var graph = new joint.dia.Graph();\r
-\r
- var paper = new joint.dia.Paper({\r
- el: $('#graph'),\r
- width: 1300,\r
- height: 650,\r
- model: graph,\r
- gridSize: 1,\r
- interactive: { vertexAdd: false }\r
- });\r
-\r
- return paper;\r
- };\r
-\r
- jgf.resetGraphDimension = function(paper, element, paddingT, paddingL){\r
- paddingT = paddingT ? paddingT : 0;\r
- paddingL = paddingL ? paddingL : paddingT;\r
-\r
- var paperWidth = element.width() - paddingL,\r
- paperHeight = element.height() - paddingT - 5;\r
-\r
- paper.setDimensions(paperWidth, paperHeight);\r
- };\r
-\r
- jgf.reloadGraph = function(graph) {\r
- graph.clear();\r
- };\r
-\r
- jgf.createElement = function(elementName, posx, posy, width, height, objectType, object, tooltip, bgcolor, titleName) {\r
- var setWidth = function(width) {\r
- return width < GBPConstants.jointElements.minWidth ? GBPConstants.jointElements.minWidth : \r
- width > GBPConstants.jointElements.maxWidth ? GBPConstants.jointElements.maxWidth : width;\r
- };\r
-\r
- var setHeight = function(height) {\r
- return height < GBPConstants.jointElements.minHeight ? GBPConstants.jointElements.minHeight : \r
- height > GBPConstants.jointElements.maxHeight ? GBPConstants.jointElements.maxHeight : height;\r
- };\r
-\r
- // joint.shapes.basic.Rect = joint.shapes.basic.Generic.extend({\r
- joint.shapes.html = {};\r
- joint.shapes.html.Element = joint.shapes.basic.Generic.extend({\r
-\r
- markup: '<g class="rotatable"><g class="scalable"><rect/><title /></g><text class="text1"></text><text class="text2"></text><title /></g>',\r
- \r
- defaults: joint.util.deepSupplement({\r
- type: 'html.Element',\r
- attrs: {\r
- 'rect': { fill: bgcolor, stroke: 'black', 'follow-scale': true, width: 80, height: 40, cursor: 'pointer' },\r
- '.text1': { ref: 'rect', 'ref-x': 0.5, 'ref-y': 0.3, 'y-alignment': 'middle', 'x-alignment': 'middle', cursor: 'pointer', 'font-weight' : 'bold'},\r
- '.text2': { ref: 'rect', 'ref-x': 0.5, 'ref-y': 0.7, 'y-alignment': 'middle', 'x-alignment': 'middle', cursor: 'pointer'},\r
- 'title': {text: tooltip},\r
- }\r
- \r
- }, joint.shapes.basic.Generic.prototype.defaults)\r
- });\r
-\r
- // joint.shapes.html.ElementView = joint.dia.ElementView.extend({\r
-\r
- // template: [\r
- // '<input class="html-element" type="text" value="'+elementName+'"/>',\r
- // ''\r
- // ].join(''),\r
-\r
- // initialize: function() {\r
- // _.bindAll(this, 'updateBox');\r
- // joint.dia.ElementView.prototype.initialize.apply(this, arguments);\r
-\r
- // this.$box = $(_.template(this.template)());\r
- // // Prevent paper from handling pointerdown.\r
- // this.$box.find('input,select').on('mousedown click', function(evt) { evt.stopPropagation(); });\r
- // // This is an example of reacting on the input change and storing the input data in the cell model.\r
- // this.$box.find('input').on('change', _.bind(function(evt) {\r
- // this.model.set('input', $(evt.target).val());\r
- // }, this));\r
- // this.$box.find('button').on('click', _.bind(function(evt) {\r
- // this.model.set('button', $('.divc').css('display','block'));\r
- // }, this));\r
- // // Update the box position whenever the underlying model changes.\r
- // this.model.on('change', this.updateBox, this);\r
-\r
- // this.updateBox();\r
- // },\r
- // render: function() {\r
- // joint.dia.ElementView.prototype.render.apply(this, arguments);\r
- // this.paper.$el.prepend(this.$box);\r
- // this.updateBox();\r
- // return this;\r
- // },\r
- // updateBox: function() {\r
- // // Set the position and dimension of the box so that it covers the JointJS element.\r
- // var bbox = this.model.getBBox();\r
- // // Example of updating the HTML with a data stored in the cell model.\r
- // this.$box.css({ width: bbox.width, height: bbox.height, left: bbox.x, top: bbox.y, transform: 'rotate(' + (this.model.get('angle') || 0) + 'deg)' });\r
- // },\r
- // removeBox: function(evt) {\r
- // this.$box.remove();\r
- // }\r
- // });\r
-\r
- elementName = elementName.length > 20 ? elementName.slice(0,20) + '...' : elementName;\r
- // width = width > 200 ? 200 : width;\r
-\r
- // return new joint.shapes.basic.Rect({\r
- return new joint.shapes.html.Element({\r
- position: { x: posx || 0, y: posy || 0 },\r
- size: { width: width || GBPConstants.jointElements.minWidth, height: height || GBPConstants.jointElements.minHeight },\r
- attrs: { rect: { fill: bgcolor }, '.text1': { fill: 'black', text: titleName}, '.text2': { fill: 'black', text: elementName }},\r
- objType: objectType,\r
- objData: object\r
- });\r
- };\r
-\r
- jgf.transformElement = function(element, transformX, transformY) {\r
- return element.translate(transformX, transformY);\r
- };\r
-\r
- jgf.addItem = function(graph, item) {\r
- graph.addCells([item]);\r
- };\r
-\r
- jgf.addItemList = function(graph, listItem) {\r
- graph.addCells(listItem);\r
- };\r
-\r
- jgf.createLink = function(srcId, targetId, colorIn, colorOut, direction, objData) {\r
- colorIn = colorIn || defaulColor;\r
- colorOut = colorOut || defaulColor;\r
-\r
- var labelTextColor = GBPConstants.colors[GBPConstants.strings.sigmaTopoDefaultText],\r
- labelBckColor = GBPConstants.colors[GBPConstants.strings.linklabel];\r
-\r
- var linkObj = {\r
- source: { id: srcId },\r
- target: { id: targetId },\r
- attrs: {\r
- '.connection': { stroke: colorIn, 'stroke-width': 2, name: 'normal' },\r
- '.connection-wrap': { 'stroke-width': 10 } \r
- },\r
- objData: objData\r
- };\r
-\r
- if(direction === 'in' || direction == 'bidirectional' || direction === undefined || direction === null) {\r
- linkObj.attrs['.marker-target'] = { fill: colorIn, d: 'M 10 0 L 0 5 L 10 10 z' };\r
- }\r
-\r
- if(direction === 'out' || direction == 'bidirectional') {\r
- linkObj.attrs['.marker-source'] = { fill: colorOut, d: 'M 10 0 L 0 5 L 10 10 z' };\r
- }\r
-\r
- var link = new joint.dia.Link(linkObj);\r
-\r
- // if(labelText) {\r
- // link.label(0, { position: 0.3, attrs: { text: { text: labelText, fill: labelTextColor }, rect: { stroke: labelBckColor, 'stroke-width': 20 }}});\r
- // }\r
-\r
-\r
- return link;\r
- };\r
-\r
- return jgf;\r
- });\r
-\r
- gbp.register.factory('GBPJointGraphBuilder', function(GBPRestangular, GBPConstants, JointGraphFactory, JointGraphOffsetFactory, TopologyDataLoaders){\r
- var jgb = {};\r
-\r
- var builders = {};\r
-\r
- var buildJointData = function(paper, nodes, links) {\r
-\r
- };\r
-\r
- var setOperConfigTopoData = function(paper, data){\r
- var topo = TopologyDataLoaders.getEpgTopo(data);\r
-\r
- var offsetObj = {\r
- ow: 100,\r
- oh: 100,\r
- w: 100,\r
- h: 100\r
- },\r
- marginObj = {\r
- w: 50,\r
- h: 80\r
- },\r
- offsetHobj = {\r
- pEpg: 0,\r
- cEpg: 0,\r
- subject: 0\r
- },\r
- itemsArray = {\r
- epg: []\r
- },\r
- linksArray = [];\r
-\r
- JointGraphFactory.resetGraphDimension(paper, $('.policyGraphWrapper'));\r
- JointGraphFactory.reloadGraph(paper.model);\r
-\r
- var deg2rad = function(deg){\r
- return deg * Math.PI / 180;\r
- };\r
-\r
- var getXYInCircle = function(elementIndex, elementsCount, paperCenterX, paperCenterY, elementWidth, elementHeight){\r
- var result = {x:0, y:0};\r
- circleMargin = 100;\r
- r = (paperCenterX < paperCenterY ? paperCenterX : paperCenterY ) - circleMargin;\r
- degs = 360 / elementsCount * (elementIndex+1) + 180;\r
- rads = deg2rad(degs);\r
- \r
- elementWidth = elementWidth ? elementWidth : GBPConstants.jointElements.minWidth;\r
- elementHeight = elementHeight ? elementHeight : GBPConstants.jointElements.minHeight;\r
- \r
- if(elementWidth < GBPConstants.jointElements.minWidth){elementWidth = GBPConstants.jointElements.minWidth;}\r
- if(elementWidth > GBPConstants.jointElements.maxWidth){elementWidth = GBPConstants.jointElements.maxWidth;}\r
- if(elementHeight < GBPConstants.jointElements.minHeight){elementHeight = GBPConstants.jointElements.minHeight;}\r
- if(elementHeight > GBPConstants.jointElements.maxHeight){elementHeight = GBPConstants.jointElements.maxHeight;}\r
- \r
- result.x = paperCenterX + r * Math.cos(rads);\r
- result.y = paperCenterY + r * Math.sin(rads);\r
- \r
- degs = degs % 360;\r
- if(degs > 90 && degs < 270){\r
- result.x = result.x - elementWidth;\r
- }\r
- if(degs == 90 || degs == 270){\r
- result.x = result.x - elementWidth / 2;\r
- }\r
- if(degs > 180 && degs < 360){\r
- result.y = result.y - elementHeight;\r
- }\r
- if(degs === 0 || degs == 180){\r
- result.y = result.y - elementHeight / 2;\r
- }\r
- return result;\r
- };\r
- \r
- var paperCenterX = (paper.options.width) / 2;\r
- var paperCenterY = (paper.options.height) / 2;\r
- topo.nodes.forEach(function(i, index){\r
- var label = i.label,\r
- header = 'Epg',\r
- width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length)),\r
- color = GBPConstants.colors[GBPConstants.strings.epg];\r
- \r
- var itemPos = getXYInCircle(index, topo.nodes.length, paperCenterX, paperCenterY, width, null);\r
- var item = JointGraphFactory.createElement(label, itemPos.x, itemPos.y, width, null, GBPConstants.strings.epg , i, label, color, header);\r
-\r
- itemsArray.epg.push(item);\r
-\r
- // JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- });\r
-\r
- var getItemById = function(id, array){\r
- var item = array.filter(function(i){\r
- return i.attributes.objData.id === id;\r
- });\r
-\r
- return item.length ? item[0] : null;\r
- };\r
-\r
- topo.links.forEach(function(l){\r
- var sourceItem = getItemById(l.source, itemsArray.epg),\r
- targetItem = getItemById(l.target, itemsArray.epg);\r
-\r
- if (sourceItem && targetItem) {\r
- var link = JointGraphFactory.createLink(sourceItem.id, targetItem.id, 'blue', 'green', l.direction, l.data);\r
- linksArray.push(link);\r
- }\r
- });\r
-\r
- JointGraphFactory.addItemList(paper.model, linksArray);\r
- };\r
-\r
- jgb.loadTopology = function(args, paper, type) {\r
- if(type === null || builders.hasOwnProperty(type) === false) {\r
- type = GBPConstants.strings.empty;\r
- }\r
-\r
- builders[type](args, paper);\r
- };\r
-\r
- builders[GBPConstants.strings.empty] = function(args, paper) {\r
- JointGraphFactory.reloadGraph(paper.model);\r
- };\r
-\r
- builders[GBPConstants.strings.config] = function(args, paper) {\r
- var storage = args.storage || 'config',\r
- tenantId = args.tenantId;\r
- \r
- \r
- TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){\r
- setOperConfigTopoData(paper, data);\r
- }, function(){});\r
- };\r
-\r
- builders[GBPConstants.strings.oper] = function(args, paper) {\r
- var storage = args.storage || 'config',\r
- tenantId = args.tenantId;\r
-\r
- TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){\r
- setOperConfigTopoData(paper, data);\r
- }, function(){});\r
- };\r
-\r
- builders[GBPConstants.strings.l2l3] = function(args, paper) {\r
- var storage = args.storage || 'config',\r
- tenantId = args.tenantId;\r
-\r
- if(storage && tenantId) {\r
- restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);\r
-\r
- restObj.get().then(function(data) {\r
- var createLinks = function(srcList, srcItems, dstItems) {\r
- var linkItems = srcList.map(function(srcObj) {\r
- var linkItem = null;\r
- if(srcObj.parent && dstItems[srcObj.parent]) {\r
- linkItem = JointGraphFactory.createLink(srcItems[srcObj.id].id, dstItems[srcObj.parent].id, 'blue');\r
- }\r
- return linkItem;\r
- }).filter(function(linkObj) {\r
- return linkObj !== null;\r
- });\r
-\r
- return linkItems;\r
- };\r
-\r
- var offsetObj = {\r
- ow: 100,\r
- oh: 100,\r
- w: 100,\r
- h: 100\r
- },\r
- marginObj = {\r
- w: 50,\r
- h: 80\r
- },\r
- itemsArray = {\r
- l3: {},\r
- l2bridge: {},\r
- l2flood: {},\r
- subnets: {}\r
- };\r
-\r
- JointGraphFactory.reloadGraph(paper.model);\r
-\r
- data.tenant[0]['l3-context'].forEach(function(c, i) {\r
- var label = c.name || c.id,\r
- header = 'L3 context',\r
- color = GBPConstants.colors[GBPConstants.strings.l3ctx],\r
- width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.l3ctx , c, null, color, header);\r
-\r
- itemsArray.l3[c.id] = item;\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- });\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);\r
-\r
- data.tenant[0]['l2-bridge-domain'].forEach(function(c, i) {\r
- var label = c.name || c.id,\r
- header = 'L2 bridge domain',\r
- color = GBPConstants.colors[GBPConstants.strings.bridge],\r
- width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.bridge , c, null, color, header);\r
-\r
- itemsArray.l2bridge[c.id] = item;\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- });\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);\r
-\r
- data.tenant[0]['l2-flood-domain'].forEach(function(c, i) {\r
- var label = c.name || c.id,\r
- header = 'L2 flood domain',\r
- color = GBPConstants.colors[GBPConstants.strings.flood],\r
- width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.flood , c, null, color, header);\r
-\r
- itemsArray.l2flood[c.id] = item;\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- });\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);\r
-\r
- data.tenant[0]['subnet'].forEach(function(c, i) {\r
- var label = c.name || c.id,\r
- header = 'Subnet',\r
- color = GBPConstants.colors[GBPConstants.strings.subnet],\r
- width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));\r
- item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.subnet , c, null, color, header);\r
-\r
- itemsArray.subnets[c.id] = item;\r
-\r
- JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);\r
- JointGraphFactory.addItem(paper.model, item);\r
- });\r
-\r
- JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.oh);\r
-\r
- var l2bridgeL3 = createLinks(data.tenant[0]['l2-bridge-domain'], itemsArray.l2bridge, itemsArray.l3);\r
- JointGraphFactory.addItemList(paper.model, l2bridgeL3);\r
-\r
- var l2floodL2bridge = createLinks(data.tenant[0]['l2-flood-domain'], itemsArray.l2flood, itemsArray.l2bridge);\r
- JointGraphFactory.addItemList(paper.model, l2floodL2bridge);\r
-\r
- var l2floodSubnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l2flood);\r
- JointGraphFactory.addItemList(paper.model, l2floodSubnet);\r
-\r
- var l2bridgeSubnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l2bridge);\r
- JointGraphFactory.addItemList(paper.model, l2bridgeSubnet);\r
-\r
- var l3Subnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l3);\r
- JointGraphFactory.addItemList(paper.model, l3Subnet);\r
-\r
- }, function() {\r
-\r
- });\r
- }\r
- };\r
-\r
-\r
- return jgb;\r
- });\r
+define(['app/gbp/gbp.module', 'app/gbp/js/joint.clean.build'], function(gbp, joint) {
+
+ gbp.register.factory('GBPRestangular', function(Restangular, ENV) {
+ return Restangular.withConfig(function(RestangularConfig) {
+ RestangularConfig.setBaseUrl(ENV.getBaseURL("MD_SAL"));
+ });
+ });
+
+ gbp.register.factory('GBPConstants', function() {
+ var c = { colors: {'graph' : {}}, strings: {}, jointElements: {}, objType: {}, numbers: {}};
+
+ c.strings.flood = 'flood';
+ c.strings.bridge = 'bridge';
+ c.strings.l3ctx = 'l3ctx';
+ c.strings.subnet = 'subnet';
+ c.strings.linklabel = 'linklabel';
+ c.strings.in = 'in';
+ c.strings.out = 'out';
+ c.strings.bi = 'bidirectional';
+
+ c.strings.config = 'CONFIG';
+ c.strings.oper = 'OPERATIONAL';
+ c.strings.l2l3 = 'L2L3';
+ c.strings.mock = 'MOCK';
+ c.strings.sigmaTopoDefaultText = 'SIGMATOPODEFAULTTEXT';
+ c.strings.sigmaTopoDefault = 'SIGMATOPODEFAULTTEXT';
+
+ c.colors[c.strings.flood] = '#DF0101';
+ c.colors[c.strings.bridge] = '#0080FF';
+ c.colors[c.strings.l3ctx] = '#3ADF00';
+ c.colors[c.strings.subnet] = '#FF9933';
+ c.colors[c.strings.sigmaTopoDefaultText] = '#fff';
+ c.colors[c.strings.epg] = '#8fde70';
+ c.colors[c.strings.linklabel] = '#3366CC';
+
+ c.colors[c.strings.flood+'-'+c.strings.bridge] = '#6666FF';
+ c.colors[c.strings.bridge+'-'+c.strings.l3ctx] = '#6666FF';
+
+ c.colors[c.strings.subnet+'-'] = '#6666FF';
+
+ c.colors['graph']['subject'] = '#FFFFD4';
+ c.colors['graph']['cns'] = '#8EEDFF';
+ c.colors['graph']['pns'] = '#FF9C9C';
+
+ c.jointElements.minWidth = 100;
+ c.jointElements.maxWidth = 300;
+ c.jointElements.minHeight = 50;
+ c.jointElements.maxHeight = 300;
+
+ c.objType.contract = 'contract';
+ c.objType.epg = 'epg';
+ c.objType.consumer = 'consumer';
+ c.objType.provider = 'provider';
+ c.objType.subject = 'subject';
+ c.objType.rule = 'rule';
+
+ c.numbers.displayLabelLength = 40;
+
+ return c;
+ });
+
+ gbp.register.factory('MockServices', function() {
+
+ var ms = {};
+
+ ms.mockTopoData = function() {
+ var lid = 0,
+ nodeRaw = [0, 1, 2, 3],
+ linkRaw = [[0, 1], [2, 3], [3, 0], [0, 3]],
+ nodes = nodeRaw.map(function(data) {
+ return {
+ 'id': 'n' + data,
+ 'label': 'LABEL'+data,
+ 'size': 3,
+ 'x': Math.random(),
+ 'y': Math.random(),
+ 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]
+ };
+ }),
+ links = linkRaw.map(function(data) {
+ var obj = {
+ id: 'e' + lid,
+ source: 'n' + data[0],
+ target: 'n' + data[1],
+ color: GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]
+ };
+ lid = lid + 1;
+ return obj;
+ });
+
+ return {nodes: nodes, links: links};
+ };
+
+ return ms;
+ });
+
+ gbp.register.factory('TopologyDataLoaders', function(GBPRestangular, GBPConstants) {
+ var tdl = {};
+
+ tdl.getSubjectsBetweenEndpointGroups = function(storage, tenantId, successCbk, errorCbk) {
+ var restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'ui-backend:get-subjects-between-endpoint-groups',
+ reqData = { "input": { "tenant-id": tenantId }};
+
+ if(storage) {
+ reqData.input['from-oper-data'] = {};
+ }
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ // console.info('got data', data.output);
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ //Policies are representing links in PGN topology
+ tdl.getGroupRulesBetweenEndpointGroups = function(successCbk, errorCbk) {
+ var restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'pgn-application:get-group-rules-between-endpoint-groups',
+ reqData = { "input": { "endpoint-group-pair":[] }};
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data); //set topology links
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ //Groups are representing nodes in PGN topology
+ tdl.getEndpointGroups = function(successCbk, errorCbk) {
+ var tenantId = getId(idTypes.tenant),
+ restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'pgn-application:get-endpoint-groups',
+ reqData = {
+ "input": {
+ "endpoint-group-id":[
+ {
+ "pgn-application:tenant-id": tenantId
+ }
+ ]
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data); //set topology nodes
+ }, function(res) {
+ errorCbk(res);
+ });
+
+ };
+
+ tdl.getEndpointsFromEndpointGroup = function(tenantId, epgId, successCbk, errorCbk) {
+ var restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'ui-backend:get-endpoints-from-endpoint-group',
+ reqData = {
+ "input": {
+ "tenant-id": tenantId,
+ "endpoint-group-id":epgId
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data); //set topology nodes
+ }, function(res) {
+ errorCbk(res);
+ });
+
+ };
+
+ tdl.getEpgTopo = function(data){
+ var epgData = data.output['endpoint-group-pair-with-subject'],
+ nodes = [],
+ edges = [],
+ setNode = function(obj){
+ var nodeObj = {
+ 'id': 'n' + nodes.length,
+ 'label': obj.name || obj.id,
+ 'name': obj.name,
+ 'size': 1,
+ 'x': Math.random(),
+ 'y': Math.random(),
+ 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],
+ 'type': obj.type
+ };
+
+ nodes.push(nodeObj);
+ return nodeObj.id;
+ },
+ setEdge = function(sourceId, destId, data, direction) {
+ var obj = {
+ 'id': 'e' + edges.length,
+ 'source': sourceId,
+ 'target': destId,
+ 'color': GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault],
+ 'data': data,
+ 'direction' : direction
+ // 'type': 'curve',
+ // 'size' : 100
+ };
+
+ edges.push(obj);
+ },
+ getObjByProp = function(val, prop, list) {
+ return list.filter(function(i){
+ return i[prop] === val;
+ });
+ },
+ getDirection = function(subjects){
+ var directions = [];
+ if ( subjects ) {
+ subjects.forEach(function(s){
+ if ( s['ui-rule'] ) {
+ s['ui-rule'].forEach(function(rule){
+ if ( rule['classifier-ref'] ) {
+ rule['classifier-ref'].forEach(function(classifier){
+ if ( classifier.direction && directions.indexOf(classifier.direction) === -1 ){
+ directions.push(classifier.direction);
+ }
+ });
+ }
+ });
+ }
+ });
+ }
+ return directions.length === 1 ? directions[0] : directions.length > 1 ? 'bidirectional' : null;
+
+ };
+
+ if(epgData) {
+ epgData.forEach(function(e){
+ var cepgnId = null,
+ pepgnId = null;
+
+ if ( !getObjByProp(e['consumer-endpoint-group-id'],'name', nodes).length ) {
+ var objCepg = {
+ type: 'epg',
+ name: e['consumer-endpoint-group-id']
+ };
+ cepgnId = setNode(objCepg);
+ } else {
+ cepgnId = getObjByProp(e['consumer-endpoint-group-id'],'name', nodes)[0].id;
+ }
+ if ( !getObjByProp(e['provider-endpoint-group-id'],'name', nodes).length ) {
+ var objPepg = {
+ type: 'epg',
+ name: e['provider-endpoint-group-id']
+ };
+ pepgnId = setNode(objPepg);
+ } else {
+ pepgnId = getObjByProp(e['provider-endpoint-group-id'],'name', nodes)[0].id;
+ }
+
+ var direction = getDirection(e['ui-subject']);
+
+ if ( cepgnId && pepgnId ) {
+ setEdge(cepgnId, pepgnId, e['ui-subject'], direction);
+ }
+ });
+ }
+
+ return {
+ nodes: nodes,
+ links: edges
+ };
+ };
+
+
+ tdl.getL2L3 = function(storage, tenantId, successCbk, errorCbk) {
+ //l2-bridge-domain
+ var lid = 0,
+ nid = 0,
+ getL2L3Label = function(node) {
+ return node.name || node.id;
+ },
+ getSubnetLabel = function(node) {
+ return node['ip-prefix'] || node.id;
+ },
+ getNodeColor = function(src) {
+ return GBPConstants.colors[src] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];
+ },
+ getLinkColor = function(from, to) {
+ return GBPConstants.colors[from+'-'+to] || GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault];
+ },
+ getNodes = function(data, srcDesc, getLabelCbk) {
+ var nodes = data.map(function(elem) {
+ var obj = {
+ 'id': 'n' + nid,
+ 'label': getLabelCbk(elem),
+ 'uuid': elem.id,
+ 'size': 3,
+ 'x': Math.random(),
+ 'y': Math.random(),
+ 'color': getNodeColor(srcDesc),
+ 'elemType': srcDesc
+ };
+
+ nid += 1;
+ return obj;
+ });
+
+ return nodes;
+ },
+ getLinks = function(data, srcNodes, targetNodes, fromDesc, toDesc) {
+ var findByUUID = function(array, uuid) {
+ return array.filter(function(elem) {
+ return elem.uuid === uuid;
+ })[0];
+ };
+
+ var links = data.map(function(elem) {
+ var obj = null,
+ src = findByUUID(srcNodes, elem.id),
+ trg = findByUUID(targetNodes, elem.parent);
+
+ if(src && trg) {
+ obj = {
+ 'id': 'e' + lid,
+ 'source': src.id,
+ 'target': trg.id,
+ 'color': getLinkColor(fromDesc, toDesc)
+ };
+ lid += 1;
+ }
+
+ return obj;
+ }).filter(function(elem) {
+ return elem !== null;
+ });
+
+ return links;
+ };
+
+ restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);
+
+ restObj.get().then(function(data) {
+ var l2FloodNodes = getNodes(data.tenant[0]['l2-flood-domain'] || [], GBPConstants.strings.flood, getL2L3Label),
+ l2BridgeNodes = getNodes(data.tenant[0]['l2-bridge-domain'] || [], GBPConstants.strings.bridge, getL2L3Label),
+ l3ContextNodes = getNodes(data.tenant[0]['l3-context'] || [], GBPConstants.strings.l3ctx, getL2L3Label),
+ subnetNodes = getNodes(data.tenant[0]['subnet'] || [], GBPConstants.strings.subnet, getSubnetLabel),
+ l2FloodLinks = getLinks(data.tenant[0]['l2-flood-domain'] || [], l2FloodNodes, l2BridgeNodes, GBPConstants.strings.flood, GBPConstants.strings.bridge),
+ l2BridgeLinks = getLinks(data.tenant[0]['l2-bridge-domain'] || [], l2BridgeNodes, l3ContextNodes, GBPConstants.strings.bridge, GBPConstants.strings.l3ctx),
+ subnetLinks = getLinks(data.tenant[0]['subnet'] || [], subnetNodes, l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes), GBPConstants.strings.subnet, ''),
+ allNodes = l2BridgeNodes.concat(l2FloodNodes).concat(l3ContextNodes).concat(subnetNodes),
+ allLinks = l2BridgeLinks.concat(l2FloodLinks).concat(subnetLinks);
+
+ successCbk(allNodes, allLinks);
+ }, function(res) {
+ errorCbk(res.data, res.status);
+ });
+ };
+
+ tdl.getClassifierInstances = function() {
+
+ };
+
+ return tdl;
+ });
+
+ gbp.register.factory('TopoServices', function(TopologyDataLoaders, MockServices, GBPConstants) {
+
+ var ts = {};
+
+ var loaders = {};
+
+ var legends = {};
+
+ var transformPGNTopoNodes = function(data) {
+ return data.output['endpoint-group'].map(function(d) {
+ return {
+ id: d.id,
+ group: d.name,
+ sgt: d['security-group-tag']
+ };
+ });
+ };
+
+ var transformPGNTopoLinks = function(data) {
+ return data.output['endpoint-group-pair-with-rules'].map(function(d) {
+ return {
+ source: d['provider-group-id'],
+ target: d['consumer-group-id'],
+ policy: d['group-rule'][0]['action-ref'].map(function(r) {
+ return r.name;
+ })
+ };
+ });
+ };
+
+ var gbpLegend = {
+ 'epg' : GBPConstants.colors[GBPConstants.strings.sigmaTopoDefault]
+ };
+
+ legends[GBPConstants.strings.empty] = {};
+ legends[GBPConstants.strings.config] = gbpLegend;
+ legends[GBPConstants.strings.oper] = gbpLegend;
+ legends[GBPConstants.strings.mock] = gbpLegend;
+ legends[GBPConstants.strings.l2l3] = {
+ 'l2-flood': GBPConstants.colors[GBPConstants.strings.flood],
+ 'l2-bridge': GBPConstants.colors[GBPConstants.strings.bridge],
+ 'l3-context': GBPConstants.colors[GBPConstants.strings.l3ctx],
+ 'subnet': GBPConstants.colors[GBPConstants.strings.subnet],
+ 'link': GBPConstants.colors[GBPConstants.strings.subnet+'-']
+ };
+
+ loaders[GBPConstants.strings.empty] = function(successCbk, errorCbk) {
+ successCbk([], []);
+ };
+
+ loaders[GBPConstants.strings.config] = function(successCbk, errorCbk, args) {
+ var storage = args.storage || 'config',
+ tenantId = args.tenantId;
+
+
+ TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){
+ var topo = TopologyDataLoaders.getEpgTopo(data);
+ successCbk(topo.nodes, topo.links);
+ //successCbk
+ }, errorCbk);
+ };
+
+ loaders[GBPConstants.strings.oper] = function(successCbk, errorCbk, args) {
+ var storage = args.storage || 'config',
+ tenantId = args.tenantId;
+
+ TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){
+ var topo = TopologyDataLoaders.getEpgTopo(data);
+ successCbk(topo.nodes, topo.links);
+ //successCbk
+ }, errorCbk);
+ };
+
+ loaders[GBPConstants.strings.l2l3] = function(successCbk, errorCbk, args) {
+ var storage = args.storage || 'config',
+ tenantId = args.tenantId;
+
+ if(storage && tenantId) {
+ TopologyDataLoaders.getL2L3(storage, tenantId, successCbk, errorCbk);
+ } else {
+ //different kind of error
+ errorCbk();
+ }
+ };
+
+ loaders[GBPConstants.strings.mock] = function(successCbk, errorCbk) {
+ var data = MockServices.mockTopoData();
+ successCbk(data.nodes, data.links);
+ };
+
+ ts.getConsProvLabel = function(edge, topo){
+ var provName = '',
+ conName = '';
+
+ topo.nodes.forEach(function(n){
+
+ if ( edge.source === n.id ) {
+ provName = n.name;
+ }
+
+ if ( edge.target === n.id ) {
+ conName = n.name;
+ }
+ });
+
+ return provName + ':' + conName;
+ };
+
+ ts.getLegend = function(type) {
+ if(type === null || legends.hasOwnProperty(type) === false) {
+ type = GBPConstants.strings.empty;
+ }
+
+ return legends[type];
+ };
+
+ ts.loadTopology = function(type, successCbk, errorCbk, args) {
+ if(type === null || loaders.hasOwnProperty(type) === false) {
+ type = GBPConstants.strings.empty;
+ }
+
+ loaders[type](successCbk, errorCbk, args);
+ };
+
+ return ts;
+ });
+
+ gbp.register.factory('GPBServices', function(GBPRestangular) {
+
+ var s = {};
+
+ s.getDefinitions = function(successCbk, errorCbk) {
+ var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');
+
+ restObj.get().then(function(data) {
+ if(data['subject-feature-definitions']) {
+ var classifiersDefs = data['subject-feature-definitions']['classifier-definition'] || [],
+ actionsDefs = data['subject-feature-definitions']['action-definition'] || [];
+ successCbk(classifiersDefs, actionsDefs);
+ } else {
+ //TODO log error
+ }
+ }, function(res) {
+ // errorCbk(res);
+ });
+ };
+
+ s.getServiceFunctionChains = function(successCbk, errorCbk) {
+ var restObj = GBPRestangular.one('restconf').one('config').one('service-function-chain:service-function-chains');
+
+ restObj.get().then(function(data) {
+ if(data['service-function-chains']) {
+ successCbk(data['service-function-chains']['service-function-chain']);
+ } else {
+ //TODO log error
+ }
+ }, function(res) {
+ // errorCbk(res);
+ });
+ };
+
+ s.getUUIDnumber = function() {
+ var d = new Date().getTime();
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (d + Math.random()*16)%16 | 0;
+ d = Math.floor(d/16);
+ return (c=='x' ? r : (r&0x3|0x8)).toString(16);
+ });
+ };
+
+ s.createRestObj = function(storage) {
+ storage = storage || 'config';
+ restObj = GBPRestangular.one('restconf').one(storage);
+
+ return restObj;
+ };
+
+ s.send = function(restObj, reqData, successCbk, errorCbk) {
+ restObj.customPUT(reqData).then(function(data) {
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res.data, res.status);
+ });
+ };
+
+ s.post = function(restObj, reqData, successCbk, errorCbk) {
+ restObj.customPOST(reqData).then(function(data) {
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res.data, res.status);
+ });
+ };
+
+ s.delete = function(restObj, successCbk, errorCbk) {
+ restObj.remove().then(function(data) {
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res.data, res.status);
+ });
+ };
+
+ s.load = function(restObj, transformCallback, successCbk, errorCbk) {
+ restObj.get().then(function(data) {
+ var objs = transformCallback(data) || [];
+ successCbk(objs);
+ }, function(res) {
+ errorCbk(res.data, res.status);
+ });
+ };
+
+ s.stripNullValues = function(obj) {
+ Object.keys(obj).forEach(function(k) {
+ if(obj[k] === null) {
+ delete obj[k];
+ }
+ });
+
+ return obj;
+ };
+
+ s.removeEmptyElementsFromList = function(list) {
+ return list.filter(function(e) {
+ return e !== "";
+ });
+ };
+
+ s.createParamObj = function(name, type, value) {
+ var obj = { name: name };
+
+ obj[type+'-value'] = value;
+
+ return obj;
+ };
+
+ s.getInstanceParamValue = function(param) {
+ return param['int-value'] || param['string-value'] || param['range-value'];
+ };
+
+ s.getDefinitionObjParams = function(defObj, id) {
+ var obj = defObj.filter(function(def) {
+ return def.id === id;
+ })[0],
+ params = (obj && obj.parameter) ? obj.parameter : [];
+
+ return params;
+
+ };
+
+ s.getPropFromListByProp = function(list, propSrc, targetValue, propDst) {
+ var output = null,
+ selectedObj = list.filter(function(e) {
+ return e[propSrc] === targetValue;
+ })[0];
+
+ if(selectedObj) {
+ if(propDst) {
+ output = selectedObj[propDst];
+ } else {
+ output = selectedObj;
+ }
+ }
+
+ return output;
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPGovernanceServices', function(TopologyDataLoaders) {
+ var s = {};
+
+ var subjectInList = function(subjectName, subjectList) {
+ return subjectList.some(function(s) {
+ return s.name === subjectName;
+ });
+ };
+
+ var EPG = function(epgId, tenantId) {
+ this.id = epgId;
+ this.tenantId = tenantId;
+ };
+
+ var Subject = function(name) {
+ this.name = name;
+ this.rules = [];
+ this.providers = [];
+ this.consumers = [];
+
+ this.addProvider = function(providingEpg) {
+ if(this.providers.indexOf(providingEpg) === -1) {
+ this.providers.push(providingEpg);
+ }
+ };
+
+ this.addConsumer = function(consumingEpg) {
+ if(this.consumers.indexOf(consumingEpg) === -1) {
+ this.consumers.push(consumingEpg);
+ }
+ };
+
+ this.addRule = function(rule, classifierInstances) {
+ if(rule['classifier-ref'] && rule['classifier-ref'].length > 0) {
+
+ rule['classifier-ref'].forEach(function(cr) {
+ //cr['parameters'] = [];
+ classifierInstances.forEach(function(ci) {
+ if(ci['name'] === cr['instance-name']) {
+ cr['parameters'] = ci['parameter-value'];
+ }
+ });
+ });
+ }
+
+ this.rules.push(rule);
+ };
+ };
+
+ var addEpg = function(epgList, epgId, tenantId) {
+ var addedEpg = null;
+
+ if(epgList.some(function(epg) {
+ return epg.id === epgId && epg.tenantId === tenantId;
+ }) === false) {
+ addedEpg = new EPG(epgId, tenantId);
+ }
+
+ if(addedEpg !== null) {
+ epgList.push(addedEpg);
+ }
+
+ return addedEpg;
+ },
+ addSubject = function(subject, subjects, providerEpg, consumerEpg, classifierInstances) {
+ //console.log('classifierInstances:', classifierInstances);
+ var existingSubject = subjects.filter(function(s) {
+ return s.name === subject.name;
+ })[0],
+ newSubject = (existingSubject === undefined);
+
+ if(newSubject) {
+ existingSubject = new Subject(subject.name);
+ }
+
+ existingSubject.addProvider(providerEpg);
+ existingSubject.addConsumer(consumerEpg);
+
+ if(subject['ui-rule'] && subject['ui-rule'].length > 0) {
+ subject['ui-rule'].forEach(function(r) {
+ existingSubject.addRule(r, classifierInstances);
+ });
+ }
+
+ if(newSubject) {
+ subjects.push(existingSubject);
+ }
+ },
+ processPairData = function(providers, consumers, subjects, pairData, classifierInstances) {
+ addEpg(providers, pairData['provider-endpoint-group-id'], pairData['provider-tenant-id']);
+ addEpg(consumers, pairData['consumer-endpoint-group-id'], pairData['consumer-tenant-id']);
+
+ pairData['ui-subject'].forEach(function(s) {
+ addSubject(s, subjects, pairData['provider-endpoint-group-id'], pairData['consumer-endpoint-group-id'], classifierInstances);
+ });
+ };
+
+ s.getEPGsAndSubjects = function(tenantId, classifierInstances, successCbk, errorCbk) {
+ TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId,
+ function(data) {
+ var epgPairs = data.output['endpoint-group-pair-with-subject'],
+ consumers = [],
+ providers = [],
+ subjects = [];
+
+ if(epgPairs) {
+ epgPairs.forEach(function(p) {
+ processPairData(providers, consumers, subjects, p, classifierInstances);
+ });
+ }
+
+ successCbk({providers: providers, consumers: consumers, subjects: subjects});
+ },
+ function() {
+ //TODO log error
+ });
+ };
+
+ return s;
+ });
+
+ gbp.register.factory('GBPTenantServices', function(GPBServices) {
+
+ var s = {};
+
+ var Tenant = function(id, name, description) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.name = name || null;
+ this.description = description || null;
+ };
+
+ var createBaseRestObj = function() {
+ return GPBServices
+ .createRestObj().one('policy:tenants');
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj().one('tenant').one(pathObj.tenantId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new Tenant(rawObj.id, rawObj.name, rawObj.description);
+ // });
+ return rawData.tenants.tenant;
+ };
+
+ var createData = function(obj) {
+ return { tenant : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId) {
+ return {
+ tenantId: tenantId
+ };
+ };
+
+ s.createObj = function() {
+ return new Tenant();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.modify = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(successCbk, errorCbk) {
+ var restObj = createBaseRestObj();
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPContractServices', function(GPBServices) {
+
+ var s = {};
+
+ var Contract = function(id, description, parent) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.description = description || null;
+ this.parent = parent || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj().one('policy:tenants').one('tenant').one(pathObj.tenantId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('contract').one(pathObj.contractId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new Contract(rawObj.id, rawObj.description);
+ // });
+ return rawData.tenant[0].contract;
+ };
+
+ var createData = function(obj) {
+ return { contract : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, contractId) {
+ return {
+ tenantId: tenantId,
+ contractId: contractId
+ };
+ };
+
+ s.createObj = function() {
+ return new Contract();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPClauseServices', function(GPBServices) {
+
+ var s = {};
+
+ var Clause = function(name, subjectRefs) {
+ this.name = name || null;
+ this['subject-refs'] = subjectRefs || [];
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId)
+ .one('contract').one(pathObj.contractId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('clause').one(pathObj.clauseId);
+ };
+
+ var transformCallback = function(rawData) {
+ var data = null,
+ clauseData = rawData.contract[0].clause;
+
+ if(clauseData) {
+ data = clauseData.map(function(elem) {
+ if(elem.hasOwnProperty('subject-refs') === false) {
+ elem['subject-refs'] = [];
+ }
+ return elem;
+ });
+ }
+
+ return data;
+ };
+
+ var createData = function(obj) {
+ var o = GPBServices.stripNullValues(obj);
+
+ if(o['subject-refs']) {
+ o['subject-refs'] = GPBServices.removeEmptyElementsFromList(o['subject-refs']);
+ }
+
+ return { clause : [ o ] };
+ };
+
+ s.createPathObj = function(tenantId, contractId, clauseId) {
+ return {
+ tenantId: tenantId,
+ contractId: contractId,
+ clauseId: clauseId
+ };
+ };
+
+ s.createObj = function() {
+ return new Clause();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPSubjectServices', function(GPBServices) {
+
+ var s = {};
+
+ var Subject = function(name, order) {
+ this.name = name || null;
+ this.order = order || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId)
+ .one('contract').one(pathObj.contractId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('subject').one(pathObj.subjectId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new Subject(rawObj.name, rawObj.order);
+ // });
+ return rawData.contract[0].subject;
+ };
+
+ var createData = function(obj) {
+ return { subject : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, contractId, subjectId) {
+ return {
+ tenantId: tenantId,
+ contractId: contractId,
+ subjectId: subjectId
+ };
+ };
+
+ s.createObj = function() {
+ return new Subject();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPRuleServices', function(GPBServices) {
+
+ var s = {};
+
+ var Rule = function(name, order) {
+ this.name = name || null;
+ this.order = order || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant')
+ .one(pathObj.tenantId).one('contract').one(pathObj.contractId)
+ .one('subject').one(pathObj.subjectId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('rule').one(pathObj.ruleId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new Rule(rawObj.name, rawObj.order);
+ // });
+ return rawData.subject[0].rule;
+ };
+
+ var createData = function(obj) {
+ return { rule : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, contractId, subjectId, ruleId) {
+ return {
+ tenantId: tenantId,
+ contractId: contractId,
+ subjectId: subjectId,
+ ruleId: ruleId
+ };
+ };
+
+ s.createObj = function() {
+ return new Rule();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPClassifierRefsServices', function(GPBServices) {
+
+ var s = {};
+
+ var ClassifierRef = function(name, direction, instanceName, connectionTracking) {
+ this.name = name || null;
+ this.direction = direction || null;
+ this['instance-name'] = instanceName || null;
+ this['connection-tracking'] = connectionTracking || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant')
+ .one(pathObj.tenantId).one('contract').one(pathObj.contractId)
+ .one('subject').one(pathObj.subjectId)
+ .one('rule').one(pathObj.ruleId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('classifier-ref').one(pathObj.classifierRefId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new ClassifierRef(rawObj.name, rawObj.direction, rawObj['instance-name']);
+ // });
+ return rawData.rule[0]['classifier-ref'];
+ };
+
+ var createData = function(obj) {
+ return { 'classifier-ref' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, contractId, subjectId, ruleId, classifierRefId) {
+ return {
+ tenantId: tenantId,
+ contractId: contractId,
+ subjectId: subjectId,
+ ruleId: ruleId,
+ classifierRefId: classifierRefId
+ };
+ };
+
+ s.createObj = function() {
+ return new ClassifierRef();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPActionRefsServices', function(GPBServices) {
+
+ var s = {};
+
+ var ActionRef = function(name, order, instanceName) {
+ this.name = name || null;
+ this.order = order || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant')
+ .one(pathObj.tenantId).one('contract').one(pathObj.contractId)
+ .one('subject').one(pathObj.subjectId)
+ .one('rule').one(pathObj.ruleId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('action-ref').one(pathObj.actionRefId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new ActionRef(rawObj.name, rawObj.order);
+ // });
+ return rawData.rule[0]['action-ref'];
+ };
+
+ var createData = function(obj) {
+ return { 'action-ref' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, contractId, subjectId, ruleId, actionRefId) {
+ return {
+ tenantId: tenantId,
+ contractId: contractId,
+ subjectId: subjectId,
+ ruleId: ruleId,
+ actionRefId: actionRefId
+ };
+ };
+
+ s.createObj = function() {
+ return new ActionRef();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPL2FloodDomainServices', function(GPBServices) {
+
+ var s = {};
+
+ var L2FloodDomain = function(id, name, description, parent) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.name = name || null;
+ this.description = description || null;
+ this.parent = parent || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('l2-flood-domain').one(pathObj.l2FloodDomain);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new L2FloodDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);
+ // });
+ return rawData.tenant[0]['l2-flood-domain'];
+ };
+
+ var createData = function(obj) {
+ return { 'l2-flood-domain' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, l2FloodDomain) {
+ return {
+ tenantId: tenantId,
+ l2FloodDomain: l2FloodDomain
+ };
+ };
+
+ s.createObj = function() {
+ return new L2FloodDomain();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPL2BridgeDomainServices', function(GPBServices) {
+
+ var s = {};
+
+ var L2BridgeDomain = function(id, name, description, parent) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.name = name || null;
+ this.description = description || null;
+ this.parent = parent || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant')
+ .one(pathObj.tenantId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('l2-bridge-domain').one(pathObj.l2BridgeDomain);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new L2BridgeDomain(rawObj.id, rawObj.name, rawObj.description, rawObj.parent);
+ // });
+ return rawData.tenant[0]['l2-bridge-domain'];
+ };
+
+ var createData = function(obj) {
+ return { 'l2-bridge-domain' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, l2BridgeDomain) {
+ return {
+ tenantId: tenantId,
+ l2BridgeDomain: l2BridgeDomain
+ };
+ };
+
+ s.createObj = function() {
+ return new L2BridgeDomain();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPL3ContextServices', function(GPBServices) {
+
+ var s = {};
+
+ var L3Context = function(id, name, description) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.name = name || null;
+ this.description = description || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('l3-context').one(pathObj.l3Context);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
+ // });
+ return rawData.tenant[0]['l3-context'];
+ };
+
+ var createData = function(obj) {
+ return { 'l3-context' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, l3Context) {
+ return {
+ tenantId: tenantId,
+ l3Context: l3Context
+ };
+ };
+
+ s.createObj = function() {
+ return new L3Context();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPSubnetServices', function(GPBServices) {
+
+ var s = {};
+
+ var Subnet = function(id, name, description, parent, ipPrefix, virtualRouterIp) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.name = name || null;
+ this.description = description || null;
+ this.parent = parent || null;
+ this['ip-prefix'] = ipPrefix || null;
+ this['virtual-router-ip'] = virtualRouterIp || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('subnet').one(pathObj.subnet);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
+ // });
+ return rawData.tenant[0]['subnet'];
+ };
+
+ var createData = function(obj) {
+ return { 'subnet' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, subnet) {
+ return {
+ tenantId: tenantId,
+ subnet: subnet
+ };
+ };
+
+ s.createObj = function() {
+ return new Subnet();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPGatewayServices', function(GPBServices) {
+
+ var s = {};
+
+ var Gateway = function(gateway) {
+ this.gateway = gateway || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('gateways').one(pathObj.gateway);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
+ // });
+ return rawData.subnet[0]['gateways'];
+ };
+
+ var createData = function(obj) {
+ return { 'gateways' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, subnetId, gateway) {
+ return {
+ tenantId: tenantId,
+ subnetId: subnetId,
+ gateway: gateway
+ };
+ };
+
+ s.createObj = function() {
+ return new Gateway();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPPrefixServices', function(GPBServices) {
+
+ var s = {};
+
+ var Prefix = function(prefix) {
+ this.prefix = prefix || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subnet').one(pathObj.subnetId).one('gateways').one(pathObj.gatewayId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('prefixes').one(pathObj.prefixId);
+ };
+
+ var transformCallback = function(rawData) {
+ // return rawData.map(function(rawObj){
+ // return new L3Context(rawObj.id, rawObj.name, rawObj.description);
+ // });
+ return rawData.gateways[0].prefixes;
+ };
+
+ var createData = function(obj) {
+ return { 'prefixes' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, subnetId, gatewayId, prefixId) {
+ return {
+ tenantId: tenantId,
+ subnetId: subnetId,
+ gatewayId: gatewayId,
+ prefixId: prefixId ? prefixId.replace("/", "%2F") : prefixId
+ };
+ };
+
+ s.createObj = function() {
+ return new Prefix();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPClassifierInstanceServices', function(GPBServices) {
+
+ var s = {};
+
+ var ClassifierService = function(name, classifierDefId) {
+ this.name = name || null;
+ this['classifier-definition-id'] = classifierDefId || null;
+ this['parameter-value'] = [];
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('classifier-instance').one(pathObj.classfierInstanceId);
+ };
+
+ var transformCallback = function(rawData) {
+ return rawData['subject-feature-instances']['classifier-instance'];
+ };
+
+ var createData = function(obj) {
+ return { 'classifier-instance' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, classfierInstanceId) {
+ return {
+ tenantId: tenantId,
+ classfierInstanceId: classfierInstanceId
+ };
+ };
+
+ s.createObj = function() {
+ return new ClassifierService();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPActionInstanceServices', function(GPBServices) {
+
+ var s = {};
+
+ var ActionService = function(name, actionDefId) {
+ this.name = name || null;
+ this['action-definition-id'] = actionDefId || null;
+ this['parameter-value'] = [];
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('subject-feature-instances');
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('action-instance').one(pathObj.actionInstanceId);
+ };
+
+ var transformCallback = function(rawData) {
+ return rawData['subject-feature-instances']['action-instance'];
+ };
+
+ var createData = function(obj) {
+ return { 'action-instance' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, actionInstanceId) {
+ return {
+ tenantId: tenantId,
+ actionInstanceId: actionInstanceId
+ };
+ };
+
+ s.createObj = function() {
+ return new ActionService();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ s.getDefinitions = function(successCbk, errorCbk) {
+ var restObj = GBPRestangular.one('restconf').one('operational').one('policy:subject-feature-definitions');
+
+ restObj.get().then(function(data) {
+ successCbk(data['subject-feature-definitions']['action-definition']);
+ }, function(res) {
+ // errorCbk(res);
+ });
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPEpgServices', function(GPBServices) {
+
+ var s = {};
+
+ var EPG = function(name, description, intraGroupPolicy, networkDomain, id, parent) {
+ this.id = id || GPBServices.getUUIDnumber();
+ this.name = name || null;
+ this.description = description || null;
+ this['intra-group-policy'] = intraGroupPolicy || null;
+ this['network-domain'] = networkDomain || null;
+ this.parent = parent || null;
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('endpoint-group').one(pathObj.epgId);
+ };
+
+ var transformCallback = function(rawData) {
+ return rawData.tenant[0]['endpoint-group'];
+ };
+
+ var createData = function(obj) {
+ return { 'endpoint-group' : [ GPBServices.stripNullValues(obj) ] };
+ };
+
+ s.createPathObj = function(tenantId, epgId) {
+ return {
+ tenantId: tenantId,
+ epgId: epgId
+ };
+ };
+
+ s.createObj = function() {
+ return new EPG();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPConNamedSelServices', function(GPBServices) {
+
+ var s = {};
+
+ var ConsumerNamedSelector = function(name, contract) {
+ this.name = name || null;
+ this.contract = contract || [];
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('consumer-named-selector').one(pathObj.cnsId);
+ };
+
+ var transformCallback = function(rawData) {
+ var data = null,
+ consumerData = rawData['endpoint-group'][0]['consumer-named-selector'];
+
+ if(consumerData) {
+ data = consumerData.map(function(elem) {
+ if(elem.hasOwnProperty('contract') === false) {
+ elem.contract = [];
+ }
+ return elem;
+ });
+ }
+
+ return data;
+ };
+
+ var createData = function(obj) {
+ var o = GPBServices.stripNullValues(obj);
+
+ if(o.contract) {
+ o.contract = GPBServices.removeEmptyElementsFromList(o.contract);
+ }
+
+ return { 'consumer-named-selector' : [ o ] };
+ };
+
+ s.createPathObj = function(tenantId, epgId, cnsId) {
+ return {
+ tenantId: tenantId,
+ epgId: epgId,
+ cnsId: cnsId
+ };
+ };
+
+ s.createObj = function() {
+ return new ConsumerNamedSelector();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+
+ gbp.register.factory('GBPProNamedSelServices', function(GPBServices) {
+
+ var s = {};
+
+ var ProviderNamedSelector = function(name, contract) {
+ this.name = name || null;
+ this.contract = contract || [];
+ };
+
+ var createBaseRestObj = function(pathObj) {
+ return GPBServices.createRestObj()
+ .one('policy:tenants').one('tenant').one(pathObj.tenantId).one('endpoint-group').one(pathObj.epgId);
+ };
+
+ var createRestObj = function(pathObj) {
+ return createBaseRestObj(pathObj).one('provider-named-selector').one(pathObj.cnsId);
+ };
+
+ var transformCallback = function(rawData) {
+ var data = null,
+ provderData = rawData['endpoint-group'][0]['provider-named-selector'];
+
+ if(provderData) {
+ data = provderData.map(function(elem) {
+ if(elem.hasOwnProperty('contract') === false) {
+ elem.contract = [];
+ }
+ return elem;
+ });
+ }
+
+ return data;
+ };
+
+ var createData = function(obj) {
+ var o = GPBServices.stripNullValues(obj);
+
+ if(o.contract) {
+ o.contract = GPBServices.removeEmptyElementsFromList(o.contract);
+ }
+
+ return { 'provider-named-selector' : [ o ] };
+ };
+
+ s.createPathObj = function(tenantId, epgId, cnsId) {
+ return {
+ tenantId: tenantId,
+ epgId: epgId,
+ cnsId: cnsId
+ };
+ };
+
+ s.createObj = function() {
+ return new ProviderNamedSelector();
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path),
+ reqData = createData(obj);
+
+ GPBServices.send(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, successCbk, errorCbk) {
+ var restObj = createRestObj(path);
+
+ GPBServices.delete(restObj, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = createBaseRestObj(path);
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPEndpointServices', function(GPBServices) {
+
+ var s = {};
+
+ var Endpoint = function(tenantId) {
+ this.tenant = tenantId || null;
+ this['network-containment'] = null;
+ this['endpoint-group'] = null;
+ this['endpoint-groups'] = [];
+ this.condition = [];
+ this['l2-context'] = null;
+ this['mac-address'] = null;
+ this['l3-address'] = [];
+ };
+
+ var createRestObj = function() {
+ return GPBServices.createRestObj('operations');
+ };
+
+ var transformCallback = function(rawData) {
+ return rawData.endpoints.endpoint;
+ };
+
+ var createBaseData = function(obj) {
+ var o = GPBServices.stripNullValues(obj);
+
+ if(o.condition) {
+ o.condition = GPBServices.removeEmptyElementsFromList(o.condition);
+ }
+
+ if(o['endpoint-groups']) {
+ o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);
+ }
+
+ if(o['l3-address']) {
+ o['l3-address'] = GPBServices.removeEmptyElementsFromList(o['l3-address']);
+ }
+
+ return o;
+ };
+
+ var createSendData = function(obj) {
+ var o = createBaseData(obj);
+ return { 'input': o };
+ };
+
+ var createDeleteData = function(obj) {
+ var o = {
+ 'input': {
+ 'l3': obj['l3-address'],
+ 'l2': [
+ {
+ 'l2-context': obj['l2-context'],
+ 'mac-address': obj['mac-address']
+ }
+ ]
+ }
+ };
+
+ return o;
+ };
+
+ s.createObj = function(tenantId) {
+ return new Endpoint(tenantId);
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj().one('endpoint:register-endpoint'),
+ reqData = createSendData(obj);
+
+ GPBServices.post(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),
+ reqData = createDeleteData(obj);
+ GPBServices.post(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('GBPEndpointL3Services', function(GPBServices) {
+
+ var s = {};
+
+ var EndpointL3 = function(tenantId) {
+ this.tenant = tenantId || null;
+ this['endpoint-group'] = null;
+ this['endpoint-groups'] = [];
+ this.condition = [];
+ this['l3-context'] = null;
+ this['ip-prefix'] = null;
+ this['endpoint-l2-gateways'] = [];
+ this['endpoint-l3-gateways'] = [];
+ };
+
+ var createRestObj = function() {
+ return GPBServices.createRestObj('operations');
+ };
+
+ var transformCallback = function(rawData) {
+ return rawData.endpoints['endpoint-l3-prefix'];
+ };
+
+ var createBaseData = function(obj) {
+ var o = GPBServices.stripNullValues(obj);
+
+ if(o.condition) {
+ o.condition = GPBServices.removeEmptyElementsFromList(o.condition);
+ }
+
+ if(o['endpoint-groups']) {
+ o['endpoint-groups'] = GPBServices.removeEmptyElementsFromList(o['endpoint-groups']);
+ }
+
+ if(o['endpoint-l2-gateways']) {
+ o['endpoint-l2-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l2-gateways']);
+ }
+
+ if(o['endpoint-l3-gateways']) {
+ o['endpoint-l3-gateways'] = GPBServices.removeEmptyElementsFromList(o['endpoint-l3-gateways']);
+ }
+
+ return o;
+ };
+
+ var createSendData = function(obj) {
+ var o = createBaseData(obj);
+ return { 'input': o };
+ };
+
+ var createDeleteData = function(obj) {
+ var o = {
+ 'input': {
+ 'l3-prefix': [
+ {
+ 'l3-context': obj['l3-context'],
+ 'ip-prefix': obj['ip-prefix']
+ }
+ ],
+ 'l2': obj['endpoint-l2-gateways'],
+ 'l3': obj['endpoint-l3-gateways']
+ }
+ };
+
+ return o;
+ };
+
+ s.createObj = function(tenantId) {
+ return new EndpointL3(tenantId);
+ };
+
+ s.send = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj().one('endpoint:register-l3-prefix-endpoint'),
+ reqData = createSendData(obj);
+
+ GPBServices.post(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.delete = function(path, obj, successCbk, errorCbk) {
+ var restObj = createRestObj(path).one('endpoint:unregister-endpoint'),
+ reqData = createDeleteData(obj);
+
+ GPBServices.post(restObj, reqData, successCbk, errorCbk);
+ };
+
+ s.load = function(path, successCbk, errorCbk) {
+ var restObj = GPBServices.createRestObj('operational').one('endpoint:endpoints');
+
+ GPBServices.load(restObj, transformCallback, successCbk, errorCbk);
+ };
+
+ return s;
+
+ });
+
+ gbp.register.factory('PGNServices', function(GBPRestangular) {
+
+ var s = {};
+
+ var idGetter = {};
+
+ var idTypes = {
+ tenant: 'TENANT',
+ uuid: 'UUID',
+ l3ctx: 'L3CTX',
+ pathAction: 'PATHACTION',
+ accessAction: 'ACCESSACTION'
+ };
+
+ idGetter[idTypes.tenant] = function() {
+ return 1;
+ };
+
+ idGetter[idTypes.uuid] = function() {
+ return 2;
+ };
+
+ idGetter[idTypes.l3ctx] = function() {
+ return 3;
+ };
+
+ idGetter[idTypes.pathAction] = function() {
+ return 4;
+ };
+
+ idGetter[idTypes.accessAction] = function() {
+ return 5;
+ };
+
+ var getId = function(type) {
+ if(idGetter.hasOwnProperty(type)) {
+ return id = idGetter[type]();
+ } else {
+ throw "Cannot get idGetter for type " + type;
+ }
+ };
+
+ s.addReplaceEndpointGroup = function(successCbk, errorCbk, groupName, sgt, description) {
+ var tenantId = getId(idTypes.tenant),
+ uuid = getId(idTypes.uuid),
+ restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'pgn-application:create-or-replace-endpoint-groups',
+ reqData = {
+ "input":
+ {
+ "endpoint-group":[
+ {
+ "pgn-application:tenant-id": tenantID,
+ "pgn-application:id":uuid,
+ "pgn-application:security-group-tag":sgt,
+ "pgn-application:name":groupName,
+ "pgn-application:description":description
+ }
+ ]
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ s.deleteEndpointGroup = function(successCbk, errorCbk, uuid) {
+ var tenantId = getId(idTypes.tenant),
+ restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'pgn-application:delete-endpoint-groups',
+ reqData = {
+ "input": {
+ "endpoint-group":[
+ {
+ "pgn-application:tenant-id": tenantId,
+ "pgn-application:id":uuid
+ }
+ ]
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ s.getActions = function(successCbk, errorCbk) {
+ var tenantId = getId(idTypes.tenant),
+ pathActionId = getId(idTypes.pathAction),
+ accessActionId = getId(idTypes.accessAction),
+ restObj = GBPRestangular.one('restconf').one('config').one('policy:tenants', tenantId).one('subject-feature-instances');
+
+ restObj.get().then(function(data) {
+ successCbk(data); //TODO fill actions
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ s.applyPolicy = function(successCbk, errorCbk, providerId, consumerId, pathSelRule, accessCtrlRule) {
+ var restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'pgn-application:wire-endpoint-groups',
+ actionRefName = (pathSelRule ? pathSelRule : '') + (accessCtrlRule ? accessCtrlRule : ''),
+ reqData = {
+ "input": {
+ "endpoint-group-pair-with-rules": {
+ "pgn-application:provider-tenant-id": tenantID,
+ "pgn-application:consumer-tenant-id": tenantID,
+ "pgn-application:provider-group-id":providerId,
+ "pgn-application:consumer-group-id":consumerId,
+ "pgn-application:group-rule": [
+ {
+ "action-ref": [pathSelRule, accessCtrlRule].map(function(r) {
+ return { "name":r };
+ }),
+ "name":actionRefName
+ }
+ ]
+ }
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data); //TODO reload policies
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ s.deletePolicy = function(successCbk, errorCbk, providerId, consumerId) {
+ var tenantId = getId(idTypes.tenant),
+ restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'pgn-application:unwire-endpoint-groups',
+ reqData = {
+ "input":
+ {
+ "endpoint-group-pair":[
+ {
+ "pgn-application:provider-tenant-id": tenantId,
+ "pgn-application:consumer-tenant-id": tenantId,
+ "pgn-application:provider-group-id":providerId,
+ "pgn-application:consumer-group-id":consumerId
+ }
+ ]
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data); //TODO reload policies
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ s.addEndPoint = function(successCbk, errorCbk, ipAddress, groupId) {
+ var l3ctxId = getId(idTypes.l3ctx),
+ tenantId = getId(idTypes.tenant),
+ restObj = GBPRestangular.one('restconf').one('operations'),
+ rpcRes = 'endpoint:register-endpoint',
+ reqData = {
+ "input": {
+ "endpoint-group": groupId,
+ "l3-address": [
+ {
+ "ip-address": ipAddress,
+ "l3-context": l3ctxId
+ }
+ ],
+ "tenant": tenantId
+ }
+ };
+
+ restObj.post(rpcRes, reqData).then(function(data) {
+ successCbk(data);
+ }, function(res) {
+ errorCbk(res);
+ });
+ };
+
+ s.getUUIDnumber = function() {
+ var d = new Date().getTime();
+ return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
+ var r = (d + Math.random()*16)%16 | 0;
+ d = Math.floor(d/16);
+ return (c=='x' ? r : (r&0x3|0x8)).toString(16);
+ });
+ };
+
+ return s;
+ });
+
+ gbp.register.factory('DesignGbpFactory', function(){
+
+ var dvf = {};
+
+ dvf.setMainClass = function(){
+ if ( $('.gbpWrapper').length ) {
+ $('.gbpWrapper').closest('.col-xs-12').addClass('gbpGlobalWrapper');
+ }
+ };
+
+ return dvf;
+
+ });
+
+ gbp.register.factory('JointGraphOffsetFactory', function(GBPConstants){
+ var jgof = {};
+
+ jgof.createWHObj = function(w, h) {
+ return {w: w || 0, h: h || 0};
+ };
+
+ jgof.updateOffsets = function(delta, offset, margin, maximums, paper) {
+ offset.w = offset.w + delta.w + margin.w;
+
+ if(offset.w >= maximums.w) {
+ paper.setDimensions(offset.w + 30, paper.options.height);
+ offset.w = offset.ow;
+ offset.h = offset.h + margin.h;
+ }
+
+ };
+
+ jgof.resetOffsets = function(offset, w, h) {
+ offset.w = w;
+ offset.h = h;
+ };
+
+ jgof.getCurrentOffset = function(array, type) {
+ var max = 0;
+ array.forEach(function(item){
+ max = item.attributes.position[type] > max ? item.attributes.position[type] : max;
+ });
+
+ return max;
+ };
+
+ jgof.checkObjsHoffsets = function(array, size, paper) {
+ var lastPosY = 0,
+ addOffset = false,
+ cellBottomOffset = 80,
+ setItemPosition = function(item, type) {
+ while (item.attributes.position[type] < size + cellBottomOffset) {
+ item.translate(null, cellBottomOffset);
+ }
+ };
+
+ array.forEach(function(item){
+ addOffset = (size + cellBottomOffset) >= item.attributes.position.y;
+
+ if ( addOffset ) {
+ setItemPosition(item, 'y');
+ }
+
+ if ( item.attributes.position.y + cellBottomOffset > paper.options.height ) {
+ paper.setDimensions(paper.options.width, paper.options.height + cellBottomOffset);
+ }
+ });
+ };
+
+ return jgof;
+ });
+
+ gbp.register.factory('JointGraphFactory', function(GBPConstants){
+ var defaulColor = 'blue';
+
+ var jgf = {};
+
+ jgf.getLabelLength = function(length) {
+ return length * 10 > 200 ? 200 : length * 10;
+ };
+
+ jgf.createGraph = function() {
+ var graph = new joint.dia.Graph();
+
+ var paper = new joint.dia.Paper({
+ el: $('#graph'),
+ width: 1300,
+ height: 650,
+ model: graph,
+ gridSize: 1,
+ interactive: { vertexAdd: false }
+ });
+
+ return paper;
+ };
+
+ jgf.resetGraphDimension = function(paper, element, paddingT, paddingL){
+ paddingT = paddingT ? paddingT : 0;
+ paddingL = paddingL ? paddingL : paddingT;
+
+ var paperWidth = element.width() - paddingL,
+ paperHeight = element.height() - paddingT - 5;
+
+ paper.setDimensions(paperWidth, paperHeight);
+ };
+
+ jgf.reloadGraph = function(graph) {
+ graph.clear();
+ };
+
+ jgf.createElement = function(elementName, posx, posy, width, height, objectType, object, tooltip, bgcolor, titleName) {
+ var setWidth = function(width) {
+ return width < GBPConstants.jointElements.minWidth ? GBPConstants.jointElements.minWidth :
+ width > GBPConstants.jointElements.maxWidth ? GBPConstants.jointElements.maxWidth : width;
+ };
+
+ var setHeight = function(height) {
+ return height < GBPConstants.jointElements.minHeight ? GBPConstants.jointElements.minHeight :
+ height > GBPConstants.jointElements.maxHeight ? GBPConstants.jointElements.maxHeight : height;
+ };
+
+ // joint.shapes.basic.Rect = joint.shapes.basic.Generic.extend({
+ joint.shapes.html = {};
+ joint.shapes.html.Element = joint.shapes.basic.Generic.extend({
+
+ markup: '<g class="rotatable"><g class="scalable"><rect/><title /></g><text class="text1"></text><text class="text2"></text><title /></g>',
+
+ defaults: joint.util.deepSupplement({
+ type: 'html.Element',
+ attrs: {
+ 'rect': { fill: bgcolor, stroke: 'black', 'follow-scale': true, width: 80, height: 40, cursor: 'pointer' },
+ '.text1': { ref: 'rect', 'ref-x': 0.5, 'ref-y': 0.3, 'y-alignment': 'middle', 'x-alignment': 'middle', cursor: 'pointer', 'font-weight' : 'bold'},
+ '.text2': { ref: 'rect', 'ref-x': 0.5, 'ref-y': 0.7, 'y-alignment': 'middle', 'x-alignment': 'middle', cursor: 'pointer'},
+ 'title': {text: tooltip},
+ }
+
+ }, joint.shapes.basic.Generic.prototype.defaults)
+ });
+
+ // joint.shapes.html.ElementView = joint.dia.ElementView.extend({
+
+ // template: [
+ // '<input class="html-element" type="text" value="'+elementName+'"/>',
+ // ''
+ // ].join(''),
+
+ // initialize: function() {
+ // _.bindAll(this, 'updateBox');
+ // joint.dia.ElementView.prototype.initialize.apply(this, arguments);
+
+ // this.$box = $(_.template(this.template)());
+ // // Prevent paper from handling pointerdown.
+ // this.$box.find('input,select').on('mousedown click', function(evt) { evt.stopPropagation(); });
+ // // This is an example of reacting on the input change and storing the input data in the cell model.
+ // this.$box.find('input').on('change', _.bind(function(evt) {
+ // this.model.set('input', $(evt.target).val());
+ // }, this));
+ // this.$box.find('button').on('click', _.bind(function(evt) {
+ // this.model.set('button', $('.divc').css('display','block'));
+ // }, this));
+ // // Update the box position whenever the underlying model changes.
+ // this.model.on('change', this.updateBox, this);
+
+ // this.updateBox();
+ // },
+ // render: function() {
+ // joint.dia.ElementView.prototype.render.apply(this, arguments);
+ // this.paper.$el.prepend(this.$box);
+ // this.updateBox();
+ // return this;
+ // },
+ // updateBox: function() {
+ // // Set the position and dimension of the box so that it covers the JointJS element.
+ // var bbox = this.model.getBBox();
+ // // Example of updating the HTML with a data stored in the cell model.
+ // this.$box.css({ width: bbox.width, height: bbox.height, left: bbox.x, top: bbox.y, transform: 'rotate(' + (this.model.get('angle') || 0) + 'deg)' });
+ // },
+ // removeBox: function(evt) {
+ // this.$box.remove();
+ // }
+ // });
+
+ elementName = elementName.length > 20 ? elementName.slice(0,20) + '...' : elementName;
+ // width = width > 200 ? 200 : width;
+
+ // return new joint.shapes.basic.Rect({
+ return new joint.shapes.html.Element({
+ position: { x: posx || 0, y: posy || 0 },
+ size: { width: width || GBPConstants.jointElements.minWidth, height: height || GBPConstants.jointElements.minHeight },
+ attrs: { rect: { fill: bgcolor }, '.text1': { fill: 'black', text: titleName}, '.text2': { fill: 'black', text: elementName }},
+ objType: objectType,
+ objData: object
+ });
+ };
+
+ jgf.transformElement = function(element, transformX, transformY) {
+ return element.translate(transformX, transformY);
+ };
+
+ jgf.addItem = function(graph, item) {
+ graph.addCells([item]);
+ };
+
+ jgf.addItemList = function(graph, listItem) {
+ graph.addCells(listItem);
+ };
+
+ jgf.createLink = function(srcId, targetId, colorIn, colorOut, direction, objData) {
+ colorIn = colorIn || defaulColor;
+ colorOut = colorOut || defaulColor;
+
+ var labelTextColor = GBPConstants.colors[GBPConstants.strings.sigmaTopoDefaultText],
+ labelBckColor = GBPConstants.colors[GBPConstants.strings.linklabel];
+
+ var linkObj = {
+ source: { id: srcId },
+ target: { id: targetId },
+ attrs: {
+ '.connection': { stroke: colorIn, 'stroke-width': 2, name: 'normal' },
+ '.connection-wrap': { 'stroke-width': 10 }
+ },
+ objData: objData
+ };
+
+ if(direction === 'in' || direction == 'bidirectional' || direction === undefined || direction === null) {
+ linkObj.attrs['.marker-target'] = { fill: colorIn, d: 'M 10 0 L 0 5 L 10 10 z' };
+ }
+
+ if(direction === 'out' || direction == 'bidirectional') {
+ linkObj.attrs['.marker-source'] = { fill: colorOut, d: 'M 10 0 L 0 5 L 10 10 z' };
+ }
+
+ var link = new joint.dia.Link(linkObj);
+
+ // if(labelText) {
+ // link.label(0, { position: 0.3, attrs: { text: { text: labelText, fill: labelTextColor }, rect: { stroke: labelBckColor, 'stroke-width': 20 }}});
+ // }
+
+
+ return link;
+ };
+
+ return jgf;
+ });
+
+ gbp.register.factory('GBPJointGraphBuilder', function(GBPRestangular, GBPConstants, JointGraphFactory, JointGraphOffsetFactory, TopologyDataLoaders){
+ var jgb = {};
+
+ var builders = {};
+
+ var buildJointData = function(paper, nodes, links) {
+
+ };
+
+ var setOperConfigTopoData = function(paper, data){
+ var topo = TopologyDataLoaders.getEpgTopo(data);
+
+ var offsetObj = {
+ ow: 100,
+ oh: 100,
+ w: 100,
+ h: 100
+ },
+ marginObj = {
+ w: 50,
+ h: 80
+ },
+ offsetHobj = {
+ pEpg: 0,
+ cEpg: 0,
+ subject: 0
+ },
+ itemsArray = {
+ epg: []
+ },
+ linksArray = [];
+
+ JointGraphFactory.resetGraphDimension(paper, $('.policyGraphWrapper'));
+ JointGraphFactory.reloadGraph(paper.model);
+
+ var deg2rad = function(deg){
+ return deg * Math.PI / 180;
+ };
+
+ var getXYInCircle = function(elementIndex, elementsCount, paperCenterX, paperCenterY, elementWidth, elementHeight){
+ var result = {x:0, y:0};
+ circleMargin = 100;
+ r = (paperCenterX < paperCenterY ? paperCenterX : paperCenterY ) - circleMargin;
+ degs = 360 / elementsCount * (elementIndex+1) + 180;
+ rads = deg2rad(degs);
+
+ elementWidth = elementWidth ? elementWidth : GBPConstants.jointElements.minWidth;
+ elementHeight = elementHeight ? elementHeight : GBPConstants.jointElements.minHeight;
+
+ if(elementWidth < GBPConstants.jointElements.minWidth){elementWidth = GBPConstants.jointElements.minWidth;}
+ if(elementWidth > GBPConstants.jointElements.maxWidth){elementWidth = GBPConstants.jointElements.maxWidth;}
+ if(elementHeight < GBPConstants.jointElements.minHeight){elementHeight = GBPConstants.jointElements.minHeight;}
+ if(elementHeight > GBPConstants.jointElements.maxHeight){elementHeight = GBPConstants.jointElements.maxHeight;}
+
+ result.x = paperCenterX + r * Math.cos(rads);
+ result.y = paperCenterY + r * Math.sin(rads);
+
+ degs = degs % 360;
+ if(degs > 90 && degs < 270){
+ result.x = result.x - elementWidth;
+ }
+ if(degs == 90 || degs == 270){
+ result.x = result.x - elementWidth / 2;
+ }
+ if(degs > 180 && degs < 360){
+ result.y = result.y - elementHeight;
+ }
+ if(degs === 0 || degs == 180){
+ result.y = result.y - elementHeight / 2;
+ }
+ return result;
+ };
+
+ var paperCenterX = (paper.options.width) / 2;
+ var paperCenterY = (paper.options.height) / 2;
+ topo.nodes.forEach(function(i, index){
+ var label = i.label,
+ header = 'Epg',
+ width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length)),
+ color = GBPConstants.colors[GBPConstants.strings.epg];
+
+ var itemPos = getXYInCircle(index, topo.nodes.length, paperCenterX, paperCenterY, width, null);
+ var item = JointGraphFactory.createElement(label, itemPos.x, itemPos.y, width, null, GBPConstants.strings.epg , i, label, color, header);
+
+ itemsArray.epg.push(item);
+
+ // JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ });
+
+ var getItemById = function(id, array){
+ var item = array.filter(function(i){
+ return i.attributes.objData.id === id;
+ });
+
+ return item.length ? item[0] : null;
+ };
+
+ topo.links.forEach(function(l){
+ var sourceItem = getItemById(l.source, itemsArray.epg),
+ targetItem = getItemById(l.target, itemsArray.epg);
+
+ if (sourceItem && targetItem) {
+ var link = JointGraphFactory.createLink(sourceItem.id, targetItem.id, 'blue', 'green', l.direction, l.data);
+ linksArray.push(link);
+ }
+ });
+
+ JointGraphFactory.addItemList(paper.model, linksArray);
+ };
+
+ jgb.loadTopology = function(args, paper, type) {
+ if(type === null || builders.hasOwnProperty(type) === false) {
+ type = GBPConstants.strings.empty;
+ }
+
+ builders[type](args, paper);
+ };
+
+ builders[GBPConstants.strings.empty] = function(args, paper) {
+ JointGraphFactory.reloadGraph(paper.model);
+ };
+
+ builders[GBPConstants.strings.config] = function(args, paper) {
+ var storage = args.storage || 'config',
+ tenantId = args.tenantId;
+
+
+ TopologyDataLoaders.getSubjectsBetweenEndpointGroups(false, tenantId, function(data){
+ setOperConfigTopoData(paper, data);
+ }, function(){});
+ };
+
+ builders[GBPConstants.strings.oper] = function(args, paper) {
+ var storage = args.storage || 'config',
+ tenantId = args.tenantId;
+
+ TopologyDataLoaders.getSubjectsBetweenEndpointGroups(true, tenantId, function(data){
+ setOperConfigTopoData(paper, data);
+ }, function(){});
+ };
+
+ builders[GBPConstants.strings.l2l3] = function(args, paper) {
+ var storage = args.storage || 'config',
+ tenantId = args.tenantId;
+
+ if(storage && tenantId) {
+ restObj = GBPRestangular.one('restconf').one(storage).one('policy:tenants').one('tenant').one(tenantId);
+
+ restObj.get().then(function(data) {
+ var createLinks = function(srcList, srcItems, dstItems) {
+ var linkItems = srcList.map(function(srcObj) {
+ var linkItem = null;
+ if(srcObj.parent && dstItems[srcObj.parent]) {
+ linkItem = JointGraphFactory.createLink(srcItems[srcObj.id].id, dstItems[srcObj.parent].id, 'blue');
+ }
+ return linkItem;
+ }).filter(function(linkObj) {
+ return linkObj !== null;
+ });
+
+ return linkItems;
+ };
+
+ var offsetObj = {
+ ow: 100,
+ oh: 100,
+ w: 100,
+ h: 100
+ },
+ marginObj = {
+ w: 50,
+ h: 80
+ },
+ itemsArray = {
+ l3: {},
+ l2bridge: {},
+ l2flood: {},
+ subnets: {}
+ };
+
+ JointGraphFactory.reloadGraph(paper.model);
+
+ data.tenant[0]['l3-context'].forEach(function(c, i) {
+ var label = c.name || c.id,
+ header = 'L3 context',
+ color = GBPConstants.colors[GBPConstants.strings.l3ctx],
+ width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.l3ctx , c, null, color, header);
+
+ itemsArray.l3[c.id] = item;
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ });
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);
+
+ data.tenant[0]['l2-bridge-domain'].forEach(function(c, i) {
+ var label = c.name || c.id,
+ header = 'L2 bridge domain',
+ color = GBPConstants.colors[GBPConstants.strings.bridge],
+ width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.bridge , c, null, color, header);
+
+ itemsArray.l2bridge[c.id] = item;
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ });
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);
+
+ data.tenant[0]['l2-flood-domain'].forEach(function(c, i) {
+ var label = c.name || c.id,
+ header = 'L2 flood domain',
+ color = GBPConstants.colors[GBPConstants.strings.flood],
+ width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.flood , c, null, color, header);
+
+ itemsArray.l2flood[c.id] = item;
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ });
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.h + 100);
+
+ data.tenant[0]['subnet'].forEach(function(c, i) {
+ var label = c.name || c.id,
+ header = 'Subnet',
+ color = GBPConstants.colors[GBPConstants.strings.subnet],
+ width = Math.max(JointGraphFactory.getLabelLength(label.length), JointGraphFactory.getLabelLength(header.length));
+ item = JointGraphFactory.createElement(label, offsetObj.w, offsetObj.h, width, null, GBPConstants.strings.subnet , c, null, color, header);
+
+ itemsArray.subnets[c.id] = item;
+
+ JointGraphOffsetFactory.updateOffsets(JointGraphOffsetFactory.createWHObj(width), offsetObj, marginObj, JointGraphOffsetFactory.createWHObj(paper.options.width, paper.options.height), paper);
+ JointGraphFactory.addItem(paper.model, item);
+ });
+
+ JointGraphOffsetFactory.resetOffsets(offsetObj, offsetObj.ow, offsetObj.oh);
+
+ var l2bridgeL3 = createLinks(data.tenant[0]['l2-bridge-domain'], itemsArray.l2bridge, itemsArray.l3);
+ JointGraphFactory.addItemList(paper.model, l2bridgeL3);
+
+ var l2floodL2bridge = createLinks(data.tenant[0]['l2-flood-domain'], itemsArray.l2flood, itemsArray.l2bridge);
+ JointGraphFactory.addItemList(paper.model, l2floodL2bridge);
+
+ var l2floodSubnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l2flood);
+ JointGraphFactory.addItemList(paper.model, l2floodSubnet);
+
+ var l2bridgeSubnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l2bridge);
+ JointGraphFactory.addItemList(paper.model, l2bridgeSubnet);
+
+ var l3Subnet = createLinks(data.tenant[0]['subnet'], itemsArray.subnets, itemsArray.l3);
+ JointGraphFactory.addItemList(paper.model, l3Subnet);
+
+ }, function() {
+
+ });
+ }
+ };
+
+
+ return jgb;
+ });
});
\ No newline at end of file
-<div ng-controller="actionRefCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section ng-show="internalView.actionRef">\r
- <form name="actionRefForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- \r
- <div class="rowWrapper">\r
- <label class="block basicLabel"><span>Name:</span>\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="actionRefForm.name.$error.required"></i>\r
- </label>\r
- <select class="form-control" ng-model="newActionRefObj.name" ng-options="c.name as getDisplayLabel(c, actionInstanceNames.labels) for c in actionInstanceNames.options" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newActionRefObj['order']">\r
- <label class="block basicLabel"><span>Order:</span>\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="errors.int32"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newActionRefObj.order" ng-disabled="internalView.edit === 'view'" ng-change="validate(newActionRefObj.order, errors)"/>\r
- </div>\r
- \r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
+<div ng-controller="actionRefCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section ng-show="internalView.actionRef">
+ <form name="actionRefForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel"><span>Name:</span>
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="actionRefForm.name.$error.required"></i>
+ </label>
+ <select class="form-control" ng-model="newActionRefObj.name" ng-options="c.name as getDisplayLabel(c, actionInstanceNames.labels) for c in actionInstanceNames.options" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newActionRefObj['order']">
+ <label class="block basicLabel"><span>Order:</span>
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="errors.int32"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newActionRefObj.order" ng-disabled="internalView.edit === 'view'" ng-change="validate(newActionRefObj.order, errors)"/>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>
+ </form>
+ </section>
+
</div>
\ No newline at end of file
-<div ng-controller="actionsCtrl" ng-init="init()">\r
- <h2 class="text-center">Actions</h2> \r
-\r
-<div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="actionsView">\r
- <form name="actionsForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add actions</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name\r
- <i class="icon-exclamation-sign red" tooltip="{{actionsForm.name.$error.required ? 'Required field' : actionsForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="actionsForm.name.$error.required || actionsForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" name="name" ng-required="true" ng-model="newActionObj.name" ng-disabled="edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="edit === 'view' && !newActionObj['action-definition-id']">\r
- <label class="block basicLabel">Definition</label>\r
- <select class="form-control" ng-model="newActionObj['action-definition-id']" ng-options="d.id as getDisplayLabel(d, actionDefinitions.labels) for d in actionDefinitions.options" ng-disabled="edit === 'view'" ng-change="reloadDefs()">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <div ng-repeat="param in defs">\r
- <div class="row-param" ng-controller="paramCtrl" ng-init="init(param, newActionObj['parameter-value'])">\r
- <div ng-show="param.type !== 'range'">\r
- <label>{{ parameter.name + ' (' + parameter.type + ')' }}:</label>\r
- <input class="form-control" type="text" ng-model="value" ng-disabled="edit === 'view'"></input>\r
- </div>\r
- <div ng-show="param.type === 'range'">\r
- <label class="param-label">{{ parameter.name + ' (' + parameter.type + ')' }}:</label>\r
-\r
- <input class="form-control narrow-input-left" type="text" ng-model="value.min" ng-disabled="edit === 'view'"></input>\r
- <input class="form-control narrow-input-right" type="text" ng-model="value.max" ng-disabled="edit === 'view'"></input>\r
- </div>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
+<div ng-controller="actionsCtrl" ng-init="init()">
+ <h2 class="text-center">Actions</h2>
+
+<div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="actionsView">
+ <form name="actionsForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add actions</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name
+ <i class="icon-exclamation-sign red" tooltip="{{actionsForm.name.$error.required ? 'Required field' : actionsForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="actionsForm.name.$error.required || actionsForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" name="name" ng-required="true" ng-model="newActionObj.name" ng-disabled="edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="edit === 'view' && !newActionObj['action-definition-id']">
+ <label class="block basicLabel">Definition</label>
+ <select class="form-control" ng-model="newActionObj['action-definition-id']" ng-options="d.id as getDisplayLabel(d, actionDefinitions.labels) for d in actionDefinitions.options" ng-disabled="edit === 'view'" ng-change="reloadDefs()">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper">
+ <div ng-repeat="param in defs">
+ <div class="row-param" ng-controller="paramCtrl" ng-init="init(param, newActionObj['parameter-value'])">
+ <div ng-show="param.type !== 'range'">
+ <label>{{ parameter.name + ' (' + parameter.type + ')' }}:</label>
+ <input class="form-control" type="text" ng-model="value" ng-disabled="edit === 'view'"></input>
+ </div>
+ <div ng-show="param.type === 'range'">
+ <label class="param-label">{{ parameter.name + ' (' + parameter.type + ')' }}:</label>
+
+ <input class="form-control narrow-input-left" type="text" ng-model="value.min" ng-disabled="edit === 'view'"></input>
+ <input class="form-control narrow-input-right" type="text" ng-model="value.max" ng-disabled="edit === 'view'"></input>
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="edit === 'view'">Save</button>
+ </form>
+ </section>
+
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
</div>
\ No newline at end of file
-<div ng-controller="classifierRefCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
- \r
- <section ng-show="internalView.classifierRef">\r
- <form name="classifierRefForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel"><span>Name:</span>\r
- <i class="icon-exclamation-sign red" tooltip="{{classifierRefForm.name.$error.required ? 'Required field' : classifierRefForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="classifierRefForm.name.$error.required || classifierRefForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newClassifierRefObj.name" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
- \r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newClassifierRefObj['instance-name']">\r
- <label class="block basicLabel"><span>Instance name:</span></label>\r
- <select class="form-control" ng-model="newClassifierRefObj['instance-name']" ng-options="c.name as getDisplayLabel(c, instanceNames.labels) for c in instanceNames.options" ng-disabled="internalView.edit === 'view'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newClassifierRefObj['direction']">\r
- <label class="block basicLabel"><span>Direction:</span></label>\r
- <select class="form-control" ng-model="newClassifierRefObj.direction" ng-options="c for c in formDirections" ng-disabled="internalView.edit === 'view'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newClassifierRefObj['connection-tracking']">\r
- <label class="block basicLabel"><span>Connection tracking:</span></label>\r
- <select class="form-control" ng-model="newClassifierRefObj['connection-tracking']" ng-options="c for c in formConnectionTracking" ng-disabled="internalView.edit === 'view'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
- \r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
+<div ng-controller="classifierRefCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section ng-show="internalView.classifierRef">
+ <form name="classifierRefForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel"><span>Name:</span>
+ <i class="icon-exclamation-sign red" tooltip="{{classifierRefForm.name.$error.required ? 'Required field' : classifierRefForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="classifierRefForm.name.$error.required || classifierRefForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newClassifierRefObj.name" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newClassifierRefObj['instance-name']">
+ <label class="block basicLabel"><span>Instance name:</span></label>
+ <select class="form-control" ng-model="newClassifierRefObj['instance-name']" ng-options="c.name as getDisplayLabel(c, instanceNames.labels) for c in instanceNames.options" ng-disabled="internalView.edit === 'view'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newClassifierRefObj['direction']">
+ <label class="block basicLabel"><span>Direction:</span></label>
+ <select class="form-control" ng-model="newClassifierRefObj.direction" ng-options="c for c in formDirections" ng-disabled="internalView.edit === 'view'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newClassifierRefObj['connection-tracking']">
+ <label class="block basicLabel"><span>Connection tracking:</span></label>
+ <select class="form-control" ng-model="newClassifierRefObj['connection-tracking']" ng-options="c for c in formConnectionTracking" ng-disabled="internalView.edit === 'view'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>
+ </form>
+ </section>
+
</div>
\ No newline at end of file
-<div ng-controller="classifiersCtrl" ng-init="init()">\r
- <h2 class="text-center">Classifiers</h2> \r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="classifiersView">\r
- <form name="classifierForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add classifiers</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name\r
- <i class="icon-exclamation-sign red" tooltip="{{classifierForm.name.$error.required ? 'Required field' : classifierForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="classifierForm.name.$error.required || classifierForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" name="name" ng-required="true" ng-model="newClassifierObj.name" ng-disabled="edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="edit === 'view' && !newClassifierObj['classifier-definition-id']">\r
- <label class="block basicLabel">Definition</label>\r
- <select class="form-control" ng-model="newClassifierObj['classifier-definition-id']" ng-options="d.id as getDisplayLabel(d, classifierDefinitions.labels) for d in classifierDefinitions.options" ng-change="reloadDefs()" ng-disabled="edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix">\r
- <div ng-repeat="param in defs">\r
- <div class="rowWrapper" ng-controller="paramCtrl" ng-init="init(param, newClassifierObj['parameter-value'])">\r
- <div ng-show="param.type !== 'range'">\r
- <label class="block basicLabel">{{ parameter.name + ' (' + parameter.type + ')' }}:</label>\r
- <input class="form-control" type="text" ng-model="value" ng-disabled="edit === 'view'"></input>\r
- </div>\r
- <div ng-show="param.type === 'range'">\r
- <label class="block basicLabel">{{ parameter.name + ' (' + parameter.type + ')' }}:</label>\r
-\r
- <div class="col-md-6 inputWrapper leftInput">\r
- <input class="form-control" type="text" ng-model="value.min" ng-disabled="edit === 'view'"></input>\r
- </div>\r
- <div class="col-md-6 inputWrapper rightInput">\r
- <input class="form-control col-md-6" type="text" ng-model="value.max" ng-disabled="edit === 'view'"></input>\r
- </div>\r
-\r
- </div>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
- \r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
+<div ng-controller="classifiersCtrl" ng-init="init()">
+ <h2 class="text-center">Classifiers</h2>
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="classifiersView">
+ <form name="classifierForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add classifiers</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name
+ <i class="icon-exclamation-sign red" tooltip="{{classifierForm.name.$error.required ? 'Required field' : classifierForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="classifierForm.name.$error.required || classifierForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" name="name" ng-required="true" ng-model="newClassifierObj.name" ng-disabled="edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="edit === 'view' && !newClassifierObj['classifier-definition-id']">
+ <label class="block basicLabel">Definition</label>
+ <select class="form-control" ng-model="newClassifierObj['classifier-definition-id']" ng-options="d.id as getDisplayLabel(d, classifierDefinitions.labels) for d in classifierDefinitions.options" ng-change="reloadDefs()" ng-disabled="edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper clearfix">
+ <div ng-repeat="param in defs">
+ <div class="rowWrapper" ng-controller="paramCtrl" ng-init="init(param, newClassifierObj['parameter-value'])">
+ <div ng-show="param.type !== 'range'">
+ <label class="block basicLabel">{{ parameter.name + ' (' + parameter.type + ')' }}:</label>
+ <input class="form-control" type="text" ng-model="value" ng-disabled="edit === 'view'"></input>
+ </div>
+ <div ng-show="param.type === 'range'">
+ <label class="block basicLabel">{{ parameter.name + ' (' + parameter.type + ')' }}:</label>
+
+ <div class="col-md-6 inputWrapper leftInput">
+ <input class="form-control" type="text" ng-model="value.min" ng-disabled="edit === 'view'"></input>
+ </div>
+ <div class="col-md-6 inputWrapper rightInput">
+ <input class="form-control col-md-6" type="text" ng-model="value.max" ng-disabled="edit === 'view'"></input>
+ </div>
+
+ </div>
+ </div>
+ </div>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
</div>
\ No newline at end of file
-<div ng-controller="contractCtrl" ng-init="init()">\r
-\r
- <h2 class="text-center">Contracts</h2> \r
-\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="internalView.contract">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add contract</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel"><span>Id:</span></label>\r
- <input class="form-control" type="text" ng-model="newContractObj.id" disabled/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newContractObj['description']">\r
- <label class="block basicLabel"><span>Description:</span></label>\r
- <input class="form-control" type="text" ng-model="newContractObj.description" ng-disabled="internalView.edit === 'view'"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newContractObj['parent']">\r
- <label class="block basicLabel"><span>Parent:</span></label>\r
- <select class="form-control" ng-model="newContractObj.parent" ng-options="d.id as getDisplayLabel(d, displayLabel) for d in list" ng-disabled="internalView.edit === 'view'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedContract">\r
- <div ng-include src="view_path+'clause.tpl.html'"></div>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedContract">\r
- <div ng-include src="view_path+'subjects.tpl.html'"></div>\r
- </section>\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
-\r
-</div>\r
-\r
-\r
+<div ng-controller="contractCtrl" ng-init="init()">
+
+ <h2 class="text-center">Contracts</h2>
+
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="internalView.contract">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add contract</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel"><span>Id:</span></label>
+ <input class="form-control" type="text" ng-model="newContractObj.id" disabled/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newContractObj['description']">
+ <label class="block basicLabel"><span>Description:</span></label>
+ <input class="form-control" type="text" ng-model="newContractObj.description" ng-disabled="internalView.edit === 'view'"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newContractObj['parent']">
+ <label class="block basicLabel"><span>Parent:</span></label>
+ <select class="form-control" ng-model="newContractObj.parent" ng-options="d.id as getDisplayLabel(d, displayLabel) for d in list" ng-disabled="internalView.edit === 'view'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedContract">
+ <div ng-include src="view_path+'clause.tpl.html'"></div>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedContract">
+ <div ng-include src="view_path+'subjects.tpl.html'"></div>
+ </section>
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
+
+</div>
+
+
-<div>\r
- <h2 class="text-center">Docs</h2> \r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpanded('basic')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="toggleExpanded('policy')">Up</button>\r
-</div>\r
+<div>
+ <h2 class="text-center">Docs</h2>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpanded('basic')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="toggleExpanded('policy')">Up</button>
+</div>
-<div ng-controller="endpointCtrl" ng-init="init()">\r
-\r
- <h2 class="text-center">Endpoint</h2> \r
-\r
- <div ng-include src="view_path+'parts/crud-endpoint.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.endpoint">\r
- <form name="endpointForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['network-containment']">\r
- <label class="block basicLabel">Network containment:</label>\r
- <select class="form-control" ng-model="newEndpointObj['network-containment']" ng-options="c.id as getDisplayLabel(c, networkContainment.labels) for c in networkContainment.options | orderBy:'name'" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-group']">\r
- <label class="block basicLabel">Endpoint group:</label>\r
- <select class="form-control" ng-model="newEndpointObj['endpoint-group']" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-groups']">\r
- <label class="basicLabel">Endpoint groups:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="epGroups in newEndpointObj['endpoint-groups'] track by $index">\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <select class="form-control" ng-model="epGroups" ng-change="updateLeafListEl($index, epGroups, 'endpoint-groups')" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['condition']">\r
- <label class="basicLabel">Condition:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('condition')" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="condition in newEndpointObj['condition'] track by $index">\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <input class="form-control" type="text" ng-model="condition" ng-change="updateLeafListEl($index, condition, 'condition')" ng-disabled="view.edit === 'view'"/>\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'condition')" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix">\r
- <label class="block basicLabel">L2 context:\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="endpointForm.l2context.$error.required"></i>\r
- </label>\r
- <select class="form-control" ng-model="newEndpointObj['l2-context']" name="l2context" ng-required="true" ng-options="c.id as getDisplayLabel(c, l2context.labels) for c in l2context.options" ng-disabled="view.edit !== 'add'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix">\r
- <label class="block basicLabel">MAC Address:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="endpointForm.macAddress.$error.pattern"></i>\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="endpointForm.macAddress.$error.required"></i>\r
- </label>\r
- <input class="form-control" type="text" name="macAddress" ng-model="newEndpointObj['mac-address']" ng-pattern="/^([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})$/" ng-required="true" ng-disabled="view.edit !== 'add'"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['l3-address']">\r
- <label class="basicLabel">L3 Address:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewL3address()" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="l3address in newEndpointObj['l3-address'] track by $index">\r
- <div class="separator col-md-11">\r
- <div class="inner-separator"></div>\r
- </div>\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">L3 Context:</label>\r
- <select class="form-control" ng-model="l3address['l3-context']" ng-options="c.id as getDisplayLabel(c, l3context.labels) for c in l3context.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">IP Address:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="endpointForm.ipAddress.$error.pattern"></i>\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="endpointForm.ipAddress.$error.required"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="l3address['ip-address']" name="ipAddress" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/" ng-required="l3address['l3-context']" ng-disabled="view.edit === 'view'"/>\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2 btn-list" ng-click="deleteNewL3address($index)" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
-\r
+<div ng-controller="endpointCtrl" ng-init="init()">
+
+ <h2 class="text-center">Endpoint</h2>
+
+ <div ng-include src="view_path+'parts/crud-endpoint.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.endpoint">
+ <form name="endpointForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['network-containment']">
+ <label class="block basicLabel">Network containment:</label>
+ <select class="form-control" ng-model="newEndpointObj['network-containment']" ng-options="c.id as getDisplayLabel(c, networkContainment.labels) for c in networkContainment.options | orderBy:'name'" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-group']">
+ <label class="block basicLabel">Endpoint group:</label>
+ <select class="form-control" ng-model="newEndpointObj['endpoint-group']" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-groups']">
+ <label class="basicLabel">Endpoint groups:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="epGroups in newEndpointObj['endpoint-groups'] track by $index">
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <select class="form-control" ng-model="epGroups" ng-change="updateLeafListEl($index, epGroups, 'endpoint-groups')" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['condition']">
+ <label class="basicLabel">Condition:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('condition')" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="condition in newEndpointObj['condition'] track by $index">
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <input class="form-control" type="text" ng-model="condition" ng-change="updateLeafListEl($index, condition, 'condition')" ng-disabled="view.edit === 'view'"/>
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'condition')" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <div class="rowWrapper clearfix">
+ <label class="block basicLabel">L2 context:
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="endpointForm.l2context.$error.required"></i>
+ </label>
+ <select class="form-control" ng-model="newEndpointObj['l2-context']" name="l2context" ng-required="true" ng-options="c.id as getDisplayLabel(c, l2context.labels) for c in l2context.options" ng-disabled="view.edit !== 'add'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper clearfix">
+ <label class="block basicLabel">MAC Address:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="endpointForm.macAddress.$error.pattern"></i>
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="endpointForm.macAddress.$error.required"></i>
+ </label>
+ <input class="form-control" type="text" name="macAddress" ng-model="newEndpointObj['mac-address']" ng-pattern="/^([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})$/" ng-required="true" ng-disabled="view.edit !== 'add'"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['l3-address']">
+ <label class="basicLabel">L3 Address:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewL3address()" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="l3address in newEndpointObj['l3-address'] track by $index">
+ <div class="separator col-md-11">
+ <div class="inner-separator"></div>
+ </div>
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <label class="block basicLabel">L3 Context:</label>
+ <select class="form-control" ng-model="l3address['l3-context']" ng-options="c.id as getDisplayLabel(c, l3context.labels) for c in l3context.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">IP Address:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="endpointForm.ipAddress.$error.pattern"></i>
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="endpointForm.ipAddress.$error.required"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="l3address['ip-address']" name="ipAddress" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/" ng-required="l3address['l3-context']" ng-disabled="view.edit === 'view'"/>
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2 btn-list" ng-click="deleteNewL3address($index)" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
+
</div>
\ No newline at end of file
-<div ng-controller="epgCtrl" ng-init="init()">\r
- <h2 class="text-center">Endpoint groups</h2>\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="internalView.epg">\r
- <form name="epgForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Id:</label>\r
- <input class="form-control" type="text" ng-model="newEpgObj.id" ng-disabled="internalView.edit !== 'add'"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['name']">\r
- <label class="block basicLabel">Name:\r
- <i class="icon-exclamation-sign red" tooltip="{{epgForm.name.$error.required ? 'Required field' : epgForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="epgForm.name.$error.required || epgForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" name="name" ng-model="newEpgObj.name" ng-required="true" ng-disabled="internalView.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['description']">\r
- <label class="block basicLabel">Description:</label>\r
- <input class="form-control" type="text" ng-model="newEpgObj.description" ng-disabled="internalView.edit === 'view'"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['intra-group-policy']">\r
- <label class="block basicLabel">Intra group policy:</label>\r
- <select class="form-control" ng-model="newEpgObj['intra-group-policy']" ng-options="opt for opt in igpOpts" ng-disabled="internalView.edit === 'view'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['network-domain']">\r
- <label class="block basicLabel">Network domain:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="epgForm.netDomain.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newEpgObj['network-domain']" name="netDomain" ng-pattern="/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/" ng-disabled="internalView.edit === 'view'"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['parent']">\r
- <label class="block basicLabel">Parent:</label>\r
- <select class="form-control" ng-model="newEpgObj.parent" ng-options="d.id as getDisplayLabel(d, displayLabel) for d in list">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedEpg">\r
- <div ng-include src="view_path+'cns.tpl.html'"></div>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedEpg">\r
- <div ng-include src="view_path+'pns.tpl.html'"></div>\r
- </section>\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
-\r
+<div ng-controller="epgCtrl" ng-init="init()">
+ <h2 class="text-center">Endpoint groups</h2>
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="internalView.epg">
+ <form name="epgForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Id:</label>
+ <input class="form-control" type="text" ng-model="newEpgObj.id" ng-disabled="internalView.edit !== 'add'"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['name']">
+ <label class="block basicLabel">Name:
+ <i class="icon-exclamation-sign red" tooltip="{{epgForm.name.$error.required ? 'Required field' : epgForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="epgForm.name.$error.required || epgForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" name="name" ng-model="newEpgObj.name" ng-required="true" ng-disabled="internalView.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['description']">
+ <label class="block basicLabel">Description:</label>
+ <input class="form-control" type="text" ng-model="newEpgObj.description" ng-disabled="internalView.edit === 'view'"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['intra-group-policy']">
+ <label class="block basicLabel">Intra group policy:</label>
+ <select class="form-control" ng-model="newEpgObj['intra-group-policy']" ng-options="opt for opt in igpOpts" ng-disabled="internalView.edit === 'view'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['network-domain']">
+ <label class="block basicLabel">Network domain:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="epgForm.netDomain.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newEpgObj['network-domain']" name="netDomain" ng-pattern="/^[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}$/" ng-disabled="internalView.edit === 'view'"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newEpgObj['parent']">
+ <label class="block basicLabel">Parent:</label>
+ <select class="form-control" ng-model="newEpgObj.parent" ng-options="d.id as getDisplayLabel(d, displayLabel) for d in list">
+ <option>--</option>
+ </select>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedEpg">
+ <div ng-include src="view_path+'cns.tpl.html'"></div>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedEpg">
+ <div ng-include src="view_path+'pns.tpl.html'"></div>
+ </section>
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
+
</div>
\ No newline at end of file
-<section class="col-md-3 simpleBox mt30">\r
- <h3 class="text-center">Health</h3>\r
- <div class="panelWrapper clearfix">\r
- <button class="btn btn-primary col-md-12 btn-lg">Exception</button>\r
- <button class="btn btn-primary col-md-12 btn-lg">Conflict</button>\r
- </div>\r
-</section>\r
-\r
-<section class="col-md-4 col-md-offset-2 simpleBox mt30">\r
- <div class="panelWrapper clearfix">\r
- <!-- Tenants list -->\r
- <div class="rowWrapper clearfix">\r
- <label class="block"><span>Tenants list</span></label>\r
- <div class="selectWrapper col-md-12">\r
- <select class="form-control" ng-model="selectedTenant" ng-change="setTenant(selectedTenant)" ng-options="getDisplayLabel(d, tenantDisplayLabel) for d in tenantList">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="clear"></div>\r
-\r
- <div class="mt10 clearfix">\r
- <div class="col-md-6 pl0">\r
- <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpanded('expressed-policy'); setViewExpand('subMenuView','governance', true); setBreadcrumb('l2', 'Expressed policy', true);" >Expressed<br />policy</button>\r
- </div>\r
- <div class="col-md-6 pr0">\r
- <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpanded('delivered-policy'); setViewExpand('subMenuView','governance', true); setBreadcrumb('l2', 'Delivered policy', true);">Delivered<br />policy</button>\r
- </div>\r
- </div>\r
- \r
- </div>\r
- </div>\r
-\r
-\r
- <div class="panelWrapper clearfix">\r
- <!-- Tenants list -->\r
- <div class="rowWrapper clearfix">\r
- <label class="block"><span>Renderers list</span></label>\r
- <div class="selectWrapper col-md-12">\r
- <select class="form-control" ng-model="selectedRenderer" ng-change="setRenderer()" ng-options="getDisplayLabel(d, tenantDisplayLabel) for d in rendererList">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="clear"></div>\r
-\r
- <div class="mt10 clearfix">\r
- <div class="col-md-6 pl0">\r
- <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView', 'renderers', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);" >Renderer<br />configuration</button>\r
- </div>\r
- <div class="col-md-6 pr0">\r
- <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpanded('renderer-state'); setBreadcrumb('l1', 'Governance', true); setBreadcrumb('l2', 'Renderer state', true);">Renderer<br />state</button>\r
- </div>\r
- </div>\r
-\r
- </div>\r
- </div>\r
+<section class="col-md-3 simpleBox mt30">
+ <h3 class="text-center">Health</h3>
+ <div class="panelWrapper clearfix">
+ <button class="btn btn-primary col-md-12 btn-lg">Exception</button>
+ <button class="btn btn-primary col-md-12 btn-lg">Conflict</button>
+ </div>
+</section>
+
+<section class="col-md-4 col-md-offset-2 simpleBox mt30">
+ <div class="panelWrapper clearfix">
+ <!-- Tenants list -->
+ <div class="rowWrapper clearfix">
+ <label class="block"><span>Tenants list</span></label>
+ <div class="selectWrapper col-md-12">
+ <select class="form-control" ng-model="selectedTenant" ng-change="setTenant(selectedTenant)" ng-options="getDisplayLabel(d, tenantDisplayLabel) for d in tenantList">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="clear"></div>
+
+ <div class="mt10 clearfix">
+ <div class="col-md-6 pl0">
+ <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpanded('expressed-policy'); setViewExpand('subMenuView','governance', true); setBreadcrumb('l2', 'Expressed policy', true);" >Expressed<br />policy</button>
+ </div>
+ <div class="col-md-6 pr0">
+ <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpanded('delivered-policy'); setViewExpand('subMenuView','governance', true); setBreadcrumb('l2', 'Delivered policy', true);">Delivered<br />policy</button>
+ </div>
+ </div>
+
+ </div>
+ </div>
+
+
+ <div class="panelWrapper clearfix">
+ <!-- Tenants list -->
+ <div class="rowWrapper clearfix">
+ <label class="block"><span>Renderers list</span></label>
+ <div class="selectWrapper col-md-12">
+ <select class="form-control" ng-model="selectedRenderer" ng-change="setRenderer()" ng-options="getDisplayLabel(d, tenantDisplayLabel) for d in rendererList">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="clear"></div>
+
+ <div class="mt10 clearfix">
+ <div class="col-md-6 pl0">
+ <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView', 'renderers', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);" >Renderer<br />configuration</button>
+ </div>
+ <div class="col-md-6 pr0">
+ <button class="btn btn-primary col-md-12 btn-big" ng-click="toggleExpanded('renderer-state'); setBreadcrumb('l1', 'Governance', true); setBreadcrumb('l2', 'Renderer state', true);">Renderer<br />state</button>
+ </div>
+ </div>
+
+ </div>
+ </div>
</section>
\ No newline at end of file
-<div ng-controller="layerCtrl" ng-init="init(key,value)" class="{{ checkData(value, 'Object') ? 'customContainer' : '' }}">\r
-\r
- <div ng-if="checkData(value, 'Object')" class="topContainerPart">\r
- <span class="treeBullet containerBullet" ng-if="key !== 'subject-feature-definitions'">•</span>\r
- <button class="yangButton {{ expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="Show / Hide container" ng-click='toggleExpanded()'></button>\r
- <button class="btn-name btn-slim">\r
- {{key}}\r
- </button>\r
-\r
- <div ng-if="checkData(data, 'Array')" class="listPagination inlineBlock" ng-show="data.length > 0">\r
- <button ng-click="shiftDisplayPrev()" ng-show="showPrevButton()" tooltip="Show previous item" class="yangButton iconPrev"></button>\r
- <div class="paginationItemWrapper">\r
- <button ng-repeat="offset in displayOffsets track by $index" ng-if="currentDisplayIndex + offset > -1 && data.length > currentDisplayIndex + offset" class="btn btn-like-tab {{ (data[currentDisplayIndex + offset] === actSelected ? 'btn-selected':'') }}" ng-click="setActData(data[currentDisplayIndex + offset])" tooltip="Select this node">\r
- {{ data[currentDisplayIndex + offset].name }}\r
- </button>\r
- </div>\r
- <button ng-click="shiftDisplayNext()" ng-show="showNextButton('listData')" tooltip="Show next item" class="yangButton iconNext"></button>\r
- </div>\r
- </div>\r
-\r
- <div class="leaf" ng-if="!checkData(value, 'Object') && !checkData(value, 'Array')">\r
- <span class="treeBullet" ng-if="key !== 'subject-feature-definitions'">•</span>\r
- <span class="leaf-label col-md-2">\r
- {{ key }}\r
- </span>\r
- <span class="leaf-label col-md-9"><strong>{{value}}</strong></span>\r
- <div class="clear"></div>\r
- </div>\r
-\r
- <div ng-if="checkData(data, 'Array')" ng-repeat="(key, value) in actSelected track by $index" ng-include src="view_path+'/node-structure.tpl.html'" ng-show="expanded">\r
- </div>\r
-\r
- <div ng-if="!checkData(data, 'Array') && checkData(data, 'Object')" ng-repeat="(key, value) in data track by $index" ng-include src="view_path+'/node-structure.tpl.html'" ng-show="expanded">\r
- </div>\r
-\r
- <i class="icon-caret-down borderArrow"></i>\r
+<div ng-controller="layerCtrl" ng-init="init(key,value)" class="{{ checkData(value, 'Object') ? 'customContainer' : '' }}">
+
+ <div ng-if="checkData(value, 'Object')" class="topContainerPart">
+ <span class="treeBullet containerBullet" ng-if="key !== 'subject-feature-definitions'">•</span>
+ <button class="yangButton {{ expanded ? 'iconArrowDown' : 'iconArrowRight' }} inlineBlock" tooltip="Show / Hide container" ng-click='toggleExpanded()'></button>
+ <button class="btn-name btn-slim">
+ {{key}}
+ </button>
+
+ <div ng-if="checkData(data, 'Array')" class="listPagination inlineBlock" ng-show="data.length > 0">
+ <button ng-click="shiftDisplayPrev()" ng-show="showPrevButton()" tooltip="Show previous item" class="yangButton iconPrev"></button>
+ <div class="paginationItemWrapper">
+ <button ng-repeat="offset in displayOffsets track by $index" ng-if="currentDisplayIndex + offset > -1 && data.length > currentDisplayIndex + offset" class="btn btn-like-tab {{ (data[currentDisplayIndex + offset] === actSelected ? 'btn-selected':'') }}" ng-click="setActData(data[currentDisplayIndex + offset])" tooltip="Select this node">
+ {{ data[currentDisplayIndex + offset].name }}
+ </button>
+ </div>
+ <button ng-click="shiftDisplayNext()" ng-show="showNextButton('listData')" tooltip="Show next item" class="yangButton iconNext"></button>
+ </div>
+ </div>
+
+ <div class="leaf" ng-if="!checkData(value, 'Object') && !checkData(value, 'Array')">
+ <span class="treeBullet" ng-if="key !== 'subject-feature-definitions'">•</span>
+ <span class="leaf-label col-md-2">
+ {{ key }}
+ </span>
+ <span class="leaf-label col-md-9"><strong>{{value}}</strong></span>
+ <div class="clear"></div>
+ </div>
+
+ <div ng-if="checkData(data, 'Array')" ng-repeat="(key, value) in actSelected track by $index" ng-include src="view_path+'/node-structure.tpl.html'" ng-show="expanded">
+ </div>
+
+ <div ng-if="!checkData(data, 'Array') && checkData(data, 'Object')" ng-repeat="(key, value) in data track by $index" ng-include src="view_path+'/node-structure.tpl.html'" ng-show="expanded">
+ </div>
+
+ <i class="icon-caret-down borderArrow"></i>
</div>
\ No newline at end of file
-<section class="col-md-9 col-md-offset-2 simpleBox mt30">\r
- <div ng-controller="rendererStateCtrl">\r
- <div ng-if="!checkData(data, 'Array')" ng-repeat="(key, value) in data" ng-include src="view_path+'/node-structure.tpl.html'">\r
- </div>\r
- </div>\r
-</section>\r
-\r
+<section class="col-md-9 col-md-offset-2 simpleBox mt30">
+ <div ng-controller="rendererStateCtrl">
+ <div ng-if="!checkData(data, 'Array')" ng-repeat="(key, value) in data" ng-include src="view_path+'/node-structure.tpl.html'">
+ </div>
+ </div>
+</section>
+
-<section class="gbpWrapper clearfix">\r
-\r
- <section class="mainNavigationWrapper" ng-show="mainView.main" ng-include src="view_path+'main/main.tpl.html'"></section>\r
- <section ng-show="mainView.governance" ng-include src="view_path+'main/governance.tpl.html'"></section>\r
- <section ng-show="mainView['policy-renderer']" ng-include src="view_path+'main/policy-renderer.tpl.html'"></section>\r
-</section>\r
-\r
-\r
-\r
-\r
+<section class="gbpWrapper clearfix">
+
+ <section class="mainNavigationWrapper" ng-show="mainView.main" ng-include src="view_path+'main/main.tpl.html'"></section>
+ <section ng-show="mainView.governance" ng-include src="view_path+'main/governance.tpl.html'"></section>
+ <section ng-show="mainView['policy-renderer']" ng-include src="view_path+'main/policy-renderer.tpl.html'"></section>
+</section>
+
+
+
+
-<div ng-controller="l3ContextCtrl" ng-init="init()">\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.l3context">\r
- <form name="l3ContextForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add L3 Context</label>\r
-\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Id:</label>\r
- <input class="form-control" type="text" ng-model="newL3ContextObj.id" disabled />\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name:\r
- <i class="icon-exclamation-sign red" tooltip="{{l3ContextForm.name.$error.required ? 'Required field' : l3ContextForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="l3ContextForm.name.$error.required || l3ContextForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newL3ContextObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL3ContextObj.description">\r
- <label class="block basicLabel">Description:</label>\r
- <input class="form-control" type="text" ng-model="newL3ContextObj.description" ng-disabled="view.edit === 'view'" />\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-</div>\r
-\r
-<br/><br/>\r
-\r
-<div ng-controller="l2BridgeCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.l2bridge">\r
- <form name="l2BridgeForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add L2 Bridge Domain</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Id:</label>\r
- <input class="form-control" type="text" ng-model="newL2BridgeObj.id" disabled />\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name:\r
- <i class="icon-exclamation-sign red" tooltip="{{l2BridgeForm.name.$error.required ? 'Required field' : l2BridgeForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="l2BridgeForm.name.$error.required || l2BridgeForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newL2BridgeObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2BridgeObj.description">\r
- <label class="block basicLabel">Description:</label>\r
- <input class="form-control" type="text" ng-model="newL2BridgeObj.description" ng-disabled="view.edit === 'view'" />\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2BridgeObj.parent">\r
- <label class="block basicLabel">Parent:</label>\r
- <select class="form-control" ng-model="newL2BridgeObj.parent" ng-options="d.id as getDisplayLabel(d, l3context.labels) for d in l3context.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-</div>\r
-\r
-<br/><br/>\r
-\r
-<div ng-controller="l2FloodCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.l2flood">\r
- <form name="l2FloodForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add L2 Flood Domain</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Id:</label>\r
- <input class="form-control" type="text" ng-model="newL2FloodObj.id" disabled />\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name:\r
- <i class="icon-exclamation-sign red" tooltip="{{l2FloodForm.name.$error.required ? 'Required field' : l2FloodForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="l2FloodForm.name.$error.required || l2FloodForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newL2FloodObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2FloodObj.description">\r
- <label class="block basicLabel">Description:</label>\r
- <input class="form-control" type="text" ng-model="newL2FloodObj.description" ng-disabled="view.edit === 'view'" />\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2FloodObj.parent">\r
- <label class="block basicLabel">Parent:</label>\r
- <select class="form-control" ng-model="newL2FloodObj.parent" ng-options="d.id as getDisplayLabel(d, l2bridge.labels) for d in l2bridge.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-</div>\r
-\r
-<br/><br/>\r
-\r
-<div ng-controller="subnetCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.subnet">\r
- <form name="subnetForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add Subnet</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Id:</label>\r
- <input class="form-control" type="text" ng-model="newSubnetObj.id" disabled />\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name:\r
- <i class="icon-exclamation-sign red" tooltip="{{subnetForm.name.$error.required ? 'Required field' : subnetForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="subnetForm.name.$error.required || subnetForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newSubnetObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj.description">\r
- <label class="block basicLabel">Description:</label>\r
- <input class="form-control" type="text" ng-model="newSubnetObj.description" ng-disabled="view.edit === 'view'"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj.parent">\r
- <label class="block basicLabel">Parent:</label>\r
- <select class="form-control" ng-model="newSubnetObj.parent" ng-options="d.id as getDisplayLabel(d, l2L3List.labels) for d in l2L3List.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj['ip-prefix']">\r
- <label class="block basicLabel">IP prefix:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="subnetForm.ipPrefix.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newSubnetObj['ip-prefix']" name="ipPrefix" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))$/" ng-disabled="view.edit === 'view'" />\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj['virtual-router-ip']">\r
- <label class="block basicLabel">Virtual router:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="subnetForm.virtualRouter.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newSubnetObj['virtual-router-ip']" name="virtualRouter" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?$/"\r
- ng-model="newSubnetObj['virtual-router-ip']" ng-disabled="view.edit === 'view'" />\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedSubnet">\r
- <div ng-include src="view_path+'gateway.tpl.html'"></div>\r
- </section>\r
-\r
- <div class="formWrapper clearfix">\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
- </div>\r
+<div ng-controller="l3ContextCtrl" ng-init="init()">
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.l3context">
+ <form name="l3ContextForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add L3 Context</label>
+
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Id:</label>
+ <input class="form-control" type="text" ng-model="newL3ContextObj.id" disabled />
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name:
+ <i class="icon-exclamation-sign red" tooltip="{{l3ContextForm.name.$error.required ? 'Required field' : l3ContextForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="l3ContextForm.name.$error.required || l3ContextForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newL3ContextObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL3ContextObj.description">
+ <label class="block basicLabel">Description:</label>
+ <input class="form-control" type="text" ng-model="newL3ContextObj.description" ng-disabled="view.edit === 'view'" />
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>
+ </form>
+ </section>
+</div>
+
+<br/><br/>
+
+<div ng-controller="l2BridgeCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.l2bridge">
+ <form name="l2BridgeForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add L2 Bridge Domain</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Id:</label>
+ <input class="form-control" type="text" ng-model="newL2BridgeObj.id" disabled />
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name:
+ <i class="icon-exclamation-sign red" tooltip="{{l2BridgeForm.name.$error.required ? 'Required field' : l2BridgeForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="l2BridgeForm.name.$error.required || l2BridgeForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newL2BridgeObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2BridgeObj.description">
+ <label class="block basicLabel">Description:</label>
+ <input class="form-control" type="text" ng-model="newL2BridgeObj.description" ng-disabled="view.edit === 'view'" />
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2BridgeObj.parent">
+ <label class="block basicLabel">Parent:</label>
+ <select class="form-control" ng-model="newL2BridgeObj.parent" ng-options="d.id as getDisplayLabel(d, l3context.labels) for d in l3context.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>
+ </form>
+ </section>
+</div>
+
+<br/><br/>
+
+<div ng-controller="l2FloodCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.l2flood">
+ <form name="l2FloodForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add L2 Flood Domain</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Id:</label>
+ <input class="form-control" type="text" ng-model="newL2FloodObj.id" disabled />
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name:
+ <i class="icon-exclamation-sign red" tooltip="{{l2FloodForm.name.$error.required ? 'Required field' : l2FloodForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="l2FloodForm.name.$error.required || l2FloodForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newL2FloodObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2FloodObj.description">
+ <label class="block basicLabel">Description:</label>
+ <input class="form-control" type="text" ng-model="newL2FloodObj.description" ng-disabled="view.edit === 'view'" />
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newL2FloodObj.parent">
+ <label class="block basicLabel">Parent:</label>
+ <select class="form-control" ng-model="newL2FloodObj.parent" ng-options="d.id as getDisplayLabel(d, l2bridge.labels) for d in l2bridge.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>
+ </form>
+ </section>
+</div>
+
+<br/><br/>
+
+<div ng-controller="subnetCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.subnet">
+ <form name="subnetForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add Subnet</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Id:</label>
+ <input class="form-control" type="text" ng-model="newSubnetObj.id" disabled />
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name:
+ <i class="icon-exclamation-sign red" tooltip="{{subnetForm.name.$error.required ? 'Required field' : subnetForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="subnetForm.name.$error.required || subnetForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newSubnetObj.name" name="name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj.description">
+ <label class="block basicLabel">Description:</label>
+ <input class="form-control" type="text" ng-model="newSubnetObj.description" ng-disabled="view.edit === 'view'"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj.parent">
+ <label class="block basicLabel">Parent:</label>
+ <select class="form-control" ng-model="newSubnetObj.parent" ng-options="d.id as getDisplayLabel(d, l2L3List.labels) for d in l2L3List.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj['ip-prefix']">
+ <label class="block basicLabel">IP prefix:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="subnetForm.ipPrefix.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newSubnetObj['ip-prefix']" name="ipPrefix" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))$/" ng-disabled="view.edit === 'view'" />
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newSubnetObj['virtual-router-ip']">
+ <label class="block basicLabel">Virtual router:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="subnetForm.virtualRouter.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newSubnetObj['virtual-router-ip']" name="virtualRouter" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])(%[\p{N}\p{L}]+)?$/"
+ ng-model="newSubnetObj['virtual-router-ip']" ng-disabled="view.edit === 'view'" />
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedSubnet">
+ <div ng-include src="view_path+'gateway.tpl.html'"></div>
+ </section>
+
+ <div class="formWrapper clearfix">
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
+ </div>
</div>
\ No newline at end of file
-<div ng-controller="l3EndpointCtrl" ng-init="init()">\r
-\r
- <h2 class="text-center">L3 Prefix Endpoint</h2> \r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.endpoint">\r
- <form name="l3EndpointForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-group']">\r
- <label class="block basicLabel">Endpoint group:</label>\r
- <select class="form-control" ng-model="newEndpointObj['endpoint-group']" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-groups']">\r
- <label class="basicLabel">Endpoint groups:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="epGroups in newEndpointObj['endpoint-groups'] track by $index">\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <select class="form-control" ng-model="epGroups" ng-change="updateLeafListEl($index, epGroups, 'endpoint-groups')" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['condition']">\r
- <label class="basicLabel">Condition:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('condition')" ng-disabled="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="condition in newEndpointObj['condition'] track by $index">\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <input class="form-control" type="text" ng-model="condition" ng-change="updateLeafListEl($index, condition, 'condition')" ng-disabled="view.edit === 'view'"/>\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'condition')" ng-disabled="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">L3 Context:\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="l3EndpointForm.l3context.$error.required"></i>\r
- </label>\r
- <select class="form-control" ng-model="newEndpointObj['l3-context']" name="l3context" ng-required="true" ng-options="c.id as getDisplayLabel(c, l3context.labels) for c in l3context.options" ng-disabled="view.edit !== 'add'">\r
- <option>--</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-l2-gateways']">\r
- <label class="basicLabel">L2 gateways:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewL2gateways()" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="l2gateways in newEndpointObj['endpoint-l2-gateways'] track by $index">\r
- <div class="separator col-md-11">\r
- <div class="inner-separator"></div>\r
- </div>\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">L2 context:</label>\r
- <select class="form-control" ng-model="l2gateways['l2-context']" ng-options="c.id as getDisplayLabel(c, l2context.labels) for c in l2context.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">MAC Address:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="l3EndpointForm.macAddress.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" name="macAddress" ng-pattern="/^([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})$/" ng-model="l2gateways['mac-address']"/ ng-disabled="view.edit === 'view'">\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2 btn-list" ng-click="deleteNewL2gateways($index)" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-l3-gateways']">\r
- <label class="basicLabel">L3 gateways:</label>\r
- <button class="btn btn-primary btn-slim" ng-click="addNewL3gateways()" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>\r
-\r
- <div ng-repeat="l3gateways in newEndpointObj['endpoint-l3-gateways'] track by $index">\r
- <div class="separator col-md-11">\r
- <div class="inner-separator"></div>\r
- </div>\r
- <div class="selectWrapper col-md-10">\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">L3 Context:</label>\r
- <select class="form-control" ng-model="l3gateways['l3-context']" ng-options="c.id as getDisplayLabel(c, l3context.labels) for c in l3context.options" ng-disabled="view.edit === 'view'">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">IP Address:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="l3EndpointForm.ipAddress.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" name="ipAddress" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/" ng-model="l3gateways['ip-address']" \r
- ng-disabled="view.edit === 'view'"/>\r
- </div>\r
- </div>\r
- <button class="btn btn-danger col-md-2 btn-list" ng-click="deleteNewL3gateways($index)" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>\r
- </div>\r
- </div>\r
-\r
- <div class="clearfix"></div>\r
-\r
- <div class="rowWrapper">\r
- <label class="basicLabel">IP prefix:\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="l3EndpointForm.ipprefix.$error.pattern"></i>\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="l3EndpointForm.ipprefix.$error.required"></i>\r
- </label>\r
- <input class="form-control" type="text" name="ipprefix" ng-model="newEndpointObj['ip-prefix']" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))$/" ng-required="true" ng-disabled="view.edit !== 'add'" />\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-show="view.edit === 'edit' || view.edit === 'add'">Save</button>\r
- </form>\r
- </section>\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
-\r
+<div ng-controller="l3EndpointCtrl" ng-init="init()">
+
+ <h2 class="text-center">L3 Prefix Endpoint</h2>
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.endpoint">
+ <form name="l3EndpointForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-group']">
+ <label class="block basicLabel">Endpoint group:</label>
+ <select class="form-control" ng-model="newEndpointObj['endpoint-group']" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper clearfix" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-groups']">
+ <label class="basicLabel">Endpoint groups:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="epGroups in newEndpointObj['endpoint-groups'] track by $index">
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <select class="form-control" ng-model="epGroups" ng-change="updateLeafListEl($index, epGroups, 'endpoint-groups')" ng-options="c.id as getDisplayLabel(c, epg.labels) for c in epg.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'endpoint-groups')" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['condition']">
+ <label class="basicLabel">Condition:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewLeafListEl('condition')" ng-disabled="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="condition in newEndpointObj['condition'] track by $index">
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <input class="form-control" type="text" ng-model="condition" ng-change="updateLeafListEl($index, condition, 'condition')" ng-disabled="view.edit === 'view'"/>
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2" ng-click="deleteNewLeafListEl($index,'condition')" ng-disabled="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">L3 Context:
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="l3EndpointForm.l3context.$error.required"></i>
+ </label>
+ <select class="form-control" ng-model="newEndpointObj['l3-context']" name="l3context" ng-required="true" ng-options="c.id as getDisplayLabel(c, l3context.labels) for c in l3context.options" ng-disabled="view.edit !== 'add'">
+ <option>--</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-l2-gateways']">
+ <label class="basicLabel">L2 gateways:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewL2gateways()" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="l2gateways in newEndpointObj['endpoint-l2-gateways'] track by $index">
+ <div class="separator col-md-11">
+ <div class="inner-separator"></div>
+ </div>
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <label class="block basicLabel">L2 context:</label>
+ <select class="form-control" ng-model="l2gateways['l2-context']" ng-options="c.id as getDisplayLabel(c, l2context.labels) for c in l2context.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">MAC Address:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="l3EndpointForm.macAddress.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" name="macAddress" ng-pattern="/^([0-9a-fA-F]{2}(:[0-9a-fA-F]{2}){5})$/" ng-model="l2gateways['mac-address']"/ ng-disabled="view.edit === 'view'">
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2 btn-list" ng-click="deleteNewL2gateways($index)" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newEndpointObj['endpoint-l3-gateways']">
+ <label class="basicLabel">L3 gateways:</label>
+ <button class="btn btn-primary btn-slim" ng-click="addNewL3gateways()" ng-hide="view.edit === 'view'"><i class="icon-plus"></i></button>
+
+ <div ng-repeat="l3gateways in newEndpointObj['endpoint-l3-gateways'] track by $index">
+ <div class="separator col-md-11">
+ <div class="inner-separator"></div>
+ </div>
+ <div class="selectWrapper col-md-10">
+ <div class="rowWrapper">
+ <label class="block basicLabel">L3 Context:</label>
+ <select class="form-control" ng-model="l3gateways['l3-context']" ng-options="c.id as getDisplayLabel(c, l3context.labels) for c in l3context.options" ng-disabled="view.edit === 'view'">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">IP Address:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="l3EndpointForm.ipAddress.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" name="ipAddress" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])$/" ng-model="l3gateways['ip-address']"
+ ng-disabled="view.edit === 'view'"/>
+ </div>
+ </div>
+ <button class="btn btn-danger col-md-2 btn-list" ng-click="deleteNewL3gateways($index)" ng-hide="view.edit === 'view'"><i class="icon-remove"></i></button>
+ </div>
+ </div>
+
+ <div class="clearfix"></div>
+
+ <div class="rowWrapper">
+ <label class="basicLabel">IP prefix:
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="l3EndpointForm.ipprefix.$error.pattern"></i>
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="l3EndpointForm.ipprefix.$error.required"></i>
+ </label>
+ <input class="form-control" type="text" name="ipprefix" ng-model="newEndpointObj['ip-prefix']" ng-pattern="/^(([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])/(([0-9])|([1-2][0-9])|(3[0-2]))$/" ng-required="true" ng-disabled="view.edit !== 'add'" />
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-show="view.edit === 'edit' || view.edit === 'add'">Save</button>
+ </form>
+ </section>
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
+
</div>
\ No newline at end of file
-<section ng-controller="governanceCtrl">\r
- <section class="col-md-9">\r
- \r
- <section ng-if="contentTpl" ng-include src="view_path + 'governance/' + contentTpl + '.tpl.html'" onload="checkBroadcastCalling(contentTpl)"></section>\r
- \r
- </section>\r
-\r
- <!-- RIGHT PANEL -->\r
- <aside class="col-md-3"> \r
- <section class="inWrapper">\r
-\r
- <!-- Menu including -->\r
- <section ng-if="menuTpl" ng-include src="view_path + 'menu/' + menuTpl + '.tpl.html'"></section>\r
- <section class="mb50" ng-if="menuBox" ng-include src="view_path + 'box/' + menuBox + '.tpl.html'" onload="broadcastCalling('menuBox')"></section>\r
- </section>\r
- </aside>\r
-\r
- <section ng-show="wizards.actionReferenceWizard">\r
- <div ng-include src="view_path+'wizards/actionReferenceWizard.tpl.html'"></div>\r
- </section>\r
-</section>\r
-\r
+<section ng-controller="governanceCtrl">
+ <section class="col-md-9">
+
+ <section ng-if="contentTpl" ng-include src="view_path + 'governance/' + contentTpl + '.tpl.html'" onload="checkBroadcastCalling(contentTpl)"></section>
+
+ </section>
+
+ <!-- RIGHT PANEL -->
+ <aside class="col-md-3">
+ <section class="inWrapper">
+
+ <!-- Menu including -->
+ <section ng-if="menuTpl" ng-include src="view_path + 'menu/' + menuTpl + '.tpl.html'"></section>
+ <section class="mb50" ng-if="menuBox" ng-include src="view_path + 'box/' + menuBox + '.tpl.html'" onload="broadcastCalling('menuBox')"></section>
+ </section>
+ </aside>
+
+ <section ng-show="wizards.actionReferenceWizard">
+ <div ng-include src="view_path+'wizards/actionReferenceWizard.tpl.html'"></div>
+ </section>
+</section>
+
-<h1 class="text-center">GBP</h1>\r
-\r
-<nav class="mainNavigation">\r
-\r
- <div class="topButtonsWrapper">\r
- <div class="buttonWrapper">\r
- <button class="btn btn-primary btn-large" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','policySub', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Policy', true);"></i>Policy expression</button>\r
- <i class="icon-large icon-circle-arrow-down"></i>\r
- </div>\r
- </div>\r
-\r
- <div class="middleButtonsWrapper">\r
- <div class="buttonWrapper">\r
- <button class="btn btn-primary btn-large" ng-click="toggleExpandedMM('governance', null, 'GOV_INIT'); setViewExpand('subMenuView','governance', true); setBreadcrumb('l1', 'Governance', true);">Governance</button>\r
- <div class="iconWrapper">\r
- <i class="icon-large icon-circle-arrow-right"></i>\r
- </div>\r
- </div>\r
-\r
- <div class="middleBox">\r
- <div class="infinityIcon" ng-click="toggleExpandedMM('governance', null, 'GOV_INIT'); setBreadcrumb('l1', 'Governance', true);"></div>\r
- </div>\r
-\r
- <div class="buttonWrapper">\r
- <div class="iconWrapper">\r
- <i class="icon-large icon-circle-arrow-left"></i>\r
- </div>\r
- <button class="btn btn-primary btn-large" ></i>Operational constraints</button>\r
- </div>\r
- </div>\r
- \r
- <div class="bottomButtonsWrapper">\r
- <div class="buttonWrapper">\r
- <i class="icon-large icon-circle-arrow-up"></i>\r
- <button class="btn btn-primary btn-large" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView', 'renderers', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);"></i>Renderer configuration</button>\r
- </div>\r
- </div>\r
-\r
+<h1 class="text-center">GBP</h1>
+
+<nav class="mainNavigation">
+
+ <div class="topButtonsWrapper">
+ <div class="buttonWrapper">
+ <button class="btn btn-primary btn-large" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','policySub', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Policy', true);"></i>Policy expression</button>
+ <i class="icon-large icon-circle-arrow-down"></i>
+ </div>
+ </div>
+
+ <div class="middleButtonsWrapper">
+ <div class="buttonWrapper">
+ <button class="btn btn-primary btn-large" ng-click="toggleExpandedMM('governance', null, 'GOV_INIT'); setViewExpand('subMenuView','governance', true); setBreadcrumb('l1', 'Governance', true);">Governance</button>
+ <div class="iconWrapper">
+ <i class="icon-large icon-circle-arrow-right"></i>
+ </div>
+ </div>
+
+ <div class="middleBox">
+ <div class="infinityIcon" ng-click="toggleExpandedMM('governance', null, 'GOV_INIT'); setBreadcrumb('l1', 'Governance', true);"></div>
+ </div>
+
+ <div class="buttonWrapper">
+ <div class="iconWrapper">
+ <i class="icon-large icon-circle-arrow-left"></i>
+ </div>
+ <button class="btn btn-primary btn-large" ></i>Operational constraints</button>
+ </div>
+ </div>
+
+ <div class="bottomButtonsWrapper">
+ <div class="buttonWrapper">
+ <i class="icon-large icon-circle-arrow-up"></i>
+ <button class="btn btn-primary btn-large" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView', 'renderers', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);"></i>Renderer configuration</button>
+ </div>
+ </div>
+
</nav>
\ No newline at end of file
-<section ng-controller="policyRendererCtrl">\r
- <!-- TOPOLOGY -->\r
- <section class="sigmaWrapper col-md-9">\r
- <section class="sigmaModalWrapper simpleBox" ng-controller="linkDataCtrl" ng-show="showTable">\r
- <div class="tableWrapper">\r
- <i class="icon-remove" ng-click="close()"></i>\r
-\r
- <div class="dataWrapper">\r
- <section ng-repeat="subject in linkData">\r
- <section class="header">\r
- <span class="block">{{ 'Subject: ' + subject.name }}</span>\r
- </section>\r
-\r
- <section class="ml10" ng-repeat="rule in subject['ui-rule']">\r
- <label class="block">Rule:{{rule.name}}</label>\r
- <section class="ml10" ng-repeat="classifier in rule['classifier-ref']">\r
- <span class="block">Classifier:</span>\r
- <ul>\r
- <li ng-repeat="(key, value) in classifier">{{key}}: {{value}}</li>\r
- </ul>\r
- </section>\r
- <section ng-repeat="classifier in rule['action-ref']">\r
- <span class="block">Action:</span>\r
- <ul>\r
- <li ng-repeat="(key, value) in classifier">{{key}}: {{value}}</li>\r
- </ul>\r
- </section>\r
- </section>\r
- </section>\r
- </div>\r
- </div>\r
- </section>\r
- \r
- \r
- <section class="policyGraphWrapper">\r
- <div graph="graph" id="graph" grid-size="1" />\r
- </section>\r
-\r
- <div class="topoNav">\r
- <label class="block"><span>Topology type:</span></label>\r
- <div class="btn-group" role="group">\r
- <button type="button" class="btn btn-primary" ng-click="loadTopology('CONFIG', { tenantId: selectedTenant.id })">Config</button>\r
- <button type="button" class="btn btn-primary" ng-click="loadTopology('OPERATIONAL', { tenantId: selectedTenant.id })">Operational</button>\r
- <button type="button" class="btn btn-primary" ng-click="loadTopology('L2L3', { tenantId: selectedTenant.id, storage: 'config' })">L2/L3</button>\r
- </div>\r
- </div>\r
-\r
- </section>\r
-\r
- <!-- RIGHT PANEL -->\r
- <aside class="col-md-3"> \r
- <section class="inWrapper">\r
-\r
- <div ng-include src="view_path+'parts/breadcrumbs.tpl.html'" class="breadcrumbs clearfix"></div>\r
-\r
- <div class="block clearfix" style="height: 109px;">\r
- <!-- Tenants list -->\r
- <div class="rowWrapper clearfix">\r
- <label class="block"><span>Tenants list</span></label>\r
- <div class="selectWrapper col-md-12">\r
- <select class="form-control" ng-model="selectedTenant" ng-change="setTenant(selectedTenant); reloadTopo();" ng-options="getDisplayLabel(d, tenantDisplayLabel) for d in tenantList">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
- </div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.basic">\r
- <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','policySub'); setBreadcrumb('l2', 'Policy', subMenuView.policySub);" tooltip="Show/Hide policy submenu" >Policy</button>\r
- <section ng-show="subMenuView.policySub">\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('tenants'); setBreadcrumb('l3', 'Tenants', policyRendererView.tenants);" tooltip="CRUD for tenants" >Tenants</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('epg'); setBreadcrumb('l3', 'Endpoint groups', policyRendererView.epg);" tooltip="CRUD for endpoint groups">Endpoint groups</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('contracts'); setBreadcrumb('l3', 'Contracts', policyRendererView.contracts);" tooltip="CRUD for contracts">Contracts</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('l2l3'); setBreadcrumb('l3', 'L2/L3', policyRendererView.l2l3);" tooltip="CRUD for l2/l3">L2/L3</button>\r
- </section>\r
-\r
- <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','renderers'); setBreadcrumb('l2', 'Renderers', subMenuView.renderers);" tooltip="Show/Hide renderers submenu" >Renderers</button>\r
-\r
- <section ng-show="subMenuView.renderers">\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('classifiers'); setBreadcrumb('l3', 'Classifiers', policyRendererView.classifiers);" tooltip="CRUD for classifiers">Classifiers</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('actions'); setBreadcrumb('l3', 'Actions', policyRendererView.actions);" tooltip="CRUD for actions">Actions</button>\r
- </section>\r
-\r
- <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','endpoints'); setBreadcrumb('l2', 'Endpoints', subMenuView.endpoints);" tooltip="Show/Hide endpoints submenu">Endpoints</button>\r
- <section ng-show="subMenuView.endpoints">\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('registerEndpoint'); setBreadcrumb('l3', 'Endpoint', policyRendererView.registerEndpoint);" tooltip="CRUD for endpoint">Endpoint</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpanded('registerL3PrefixEndpoint'); setBreadcrumb('l3', 'L3 prefix endpoint', policyRendererView.registerL3PrefixEndpoint);" tooltip="CRUD for L3 prefix endpoint">L3 prefix endpoint</button>\r
- </section>\r
- <!-- <button class="btn btn-primary col-md-12" ng-click="toggleExpanded('docs')" >Docs</button> -->\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary bottom-buttons full-width" ng-click="toggleExpandedMM('main')" >Home</button>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.tenants">\r
- <div ng-include src="view_path+'tenants.tpl.html'"></div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.l2l3">\r
- <div ng-include src="view_path+'l2l3.tpl.html'"></div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.epg" ng-controller="epgCtrl">\r
- <div ng-include src="view_path+'epg.tpl.html'"></div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.contracts">\r
- <div ng-include src="view_path+'contracts.tpl.html'"></div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.docs">\r
- <div ng-include src="view_path+'docs.tpl.html'"></div>\r
- </div>\r
-\r
- <div ng-controller="renderersCtrl">\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.classifiers" ng-controller="classifiersCtrl">\r
- <div ng-include src="view_path+'classifiers.tpl.html'"></div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.actions" ng-controller="actionsCtrl">\r
- <div ng-include src="view_path+'actions.tpl.html'"></div>\r
- </div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.registerEndpoint">\r
- <div ng-include src="view_path+'endpoint.tpl.html'"></div>\r
- </div>\r
-\r
- <div class="panelWrapper clearfix" ng-show="policyRendererView.registerL3PrefixEndpoint">\r
- <div ng-include src="view_path+'l3-endpoint.tpl.html'"></div>\r
- </div>\r
-\r
-\r
-\r
- </section>\r
- </aside>\r
-\r
- <div ng-if="wizards.accessModelWizard">\r
- <div ng-include src="view_path+'wizards/accessModelWizard.tpl.html'"></div>\r
- </div>\r
-</section>\r
+<section ng-controller="policyRendererCtrl">
+ <!-- TOPOLOGY -->
+ <section class="sigmaWrapper col-md-9">
+ <section class="sigmaModalWrapper simpleBox" ng-controller="linkDataCtrl" ng-show="showTable">
+ <div class="tableWrapper">
+ <i class="icon-remove" ng-click="close()"></i>
+
+ <div class="dataWrapper">
+ <section ng-repeat="subject in linkData">
+ <section class="header">
+ <span class="block">{{ 'Subject: ' + subject.name }}</span>
+ </section>
+
+ <section class="ml10" ng-repeat="rule in subject['ui-rule']">
+ <label class="block">Rule:{{rule.name}}</label>
+ <section class="ml10" ng-repeat="classifier in rule['classifier-ref']">
+ <span class="block">Classifier:</span>
+ <ul>
+ <li ng-repeat="(key, value) in classifier">{{key}}: {{value}}</li>
+ </ul>
+ </section>
+ <section ng-repeat="classifier in rule['action-ref']">
+ <span class="block">Action:</span>
+ <ul>
+ <li ng-repeat="(key, value) in classifier">{{key}}: {{value}}</li>
+ </ul>
+ </section>
+ </section>
+ </section>
+ </div>
+ </div>
+ </section>
+
+
+ <section class="policyGraphWrapper">
+ <div graph="graph" id="graph" grid-size="1" />
+ </section>
+
+ <div class="topoNav">
+ <label class="block"><span>Topology type:</span></label>
+ <div class="btn-group" role="group">
+ <button type="button" class="btn btn-primary" ng-click="loadTopology('CONFIG', { tenantId: selectedTenant.id })">Config</button>
+ <button type="button" class="btn btn-primary" ng-click="loadTopology('OPERATIONAL', { tenantId: selectedTenant.id })">Operational</button>
+ <button type="button" class="btn btn-primary" ng-click="loadTopology('L2L3', { tenantId: selectedTenant.id, storage: 'config' })">L2/L3</button>
+ </div>
+ </div>
+
+ </section>
+
+ <!-- RIGHT PANEL -->
+ <aside class="col-md-3">
+ <section class="inWrapper">
+
+ <div ng-include src="view_path+'parts/breadcrumbs.tpl.html'" class="breadcrumbs clearfix"></div>
+
+ <div class="block clearfix" style="height: 109px;">
+ <!-- Tenants list -->
+ <div class="rowWrapper clearfix">
+ <label class="block"><span>Tenants list</span></label>
+ <div class="selectWrapper col-md-12">
+ <select class="form-control" ng-model="selectedTenant" ng-change="setTenant(selectedTenant); reloadTopo();" ng-options="getDisplayLabel(d, tenantDisplayLabel) for d in tenantList">
+ <option value="">Select option</option>
+ </select>
+ </div>
+ </div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.basic">
+ <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','policySub'); setBreadcrumb('l2', 'Policy', subMenuView.policySub);" tooltip="Show/Hide policy submenu" >Policy</button>
+ <section ng-show="subMenuView.policySub">
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('tenants'); setBreadcrumb('l3', 'Tenants', policyRendererView.tenants);" tooltip="CRUD for tenants" >Tenants</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('epg'); setBreadcrumb('l3', 'Endpoint groups', policyRendererView.epg);" tooltip="CRUD for endpoint groups">Endpoint groups</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('contracts'); setBreadcrumb('l3', 'Contracts', policyRendererView.contracts);" tooltip="CRUD for contracts">Contracts</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('l2l3'); setBreadcrumb('l3', 'L2/L3', policyRendererView.l2l3);" tooltip="CRUD for l2/l3">L2/L3</button>
+ </section>
+
+ <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','renderers'); setBreadcrumb('l2', 'Renderers', subMenuView.renderers);" tooltip="Show/Hide renderers submenu" >Renderers</button>
+
+ <section ng-show="subMenuView.renderers">
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('classifiers'); setBreadcrumb('l3', 'Classifiers', policyRendererView.classifiers);" tooltip="CRUD for classifiers">Classifiers</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('actions'); setBreadcrumb('l3', 'Actions', policyRendererView.actions);" tooltip="CRUD for actions">Actions</button>
+ </section>
+
+ <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','endpoints'); setBreadcrumb('l2', 'Endpoints', subMenuView.endpoints);" tooltip="Show/Hide endpoints submenu">Endpoints</button>
+ <section ng-show="subMenuView.endpoints">
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('registerEndpoint'); setBreadcrumb('l3', 'Endpoint', policyRendererView.registerEndpoint);" tooltip="CRUD for endpoint">Endpoint</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpanded('registerL3PrefixEndpoint'); setBreadcrumb('l3', 'L3 prefix endpoint', policyRendererView.registerL3PrefixEndpoint);" tooltip="CRUD for L3 prefix endpoint">L3 prefix endpoint</button>
+ </section>
+ <!-- <button class="btn btn-primary col-md-12" ng-click="toggleExpanded('docs')" >Docs</button> -->
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary bottom-buttons full-width" ng-click="toggleExpandedMM('main')" >Home</button>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.tenants">
+ <div ng-include src="view_path+'tenants.tpl.html'"></div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.l2l3">
+ <div ng-include src="view_path+'l2l3.tpl.html'"></div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.epg" ng-controller="epgCtrl">
+ <div ng-include src="view_path+'epg.tpl.html'"></div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.contracts">
+ <div ng-include src="view_path+'contracts.tpl.html'"></div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.docs">
+ <div ng-include src="view_path+'docs.tpl.html'"></div>
+ </div>
+
+ <div ng-controller="renderersCtrl">
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.classifiers" ng-controller="classifiersCtrl">
+ <div ng-include src="view_path+'classifiers.tpl.html'"></div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.actions" ng-controller="actionsCtrl">
+ <div ng-include src="view_path+'actions.tpl.html'"></div>
+ </div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.registerEndpoint">
+ <div ng-include src="view_path+'endpoint.tpl.html'"></div>
+ </div>
+
+ <div class="panelWrapper clearfix" ng-show="policyRendererView.registerL3PrefixEndpoint">
+ <div ng-include src="view_path+'l3-endpoint.tpl.html'"></div>
+ </div>
+
+
+
+ </section>
+ </aside>
+
+ <div ng-if="wizards.accessModelWizard">
+ <div ng-include src="view_path+'wizards/accessModelWizard.tpl.html'"></div>
+ </div>
+</section>
-<div ng-include src="view_path+'parts/breadcrumbs.tpl.html'" class="breadcrumbs clearfix"></div>\r
-\r
-<div class="panelWrapper clearfix no-padd-top">\r
- <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','policy');" tooltip="Show/Hide policy submenu"></i>Policy expression</button>\r
- <section ng-show="subMenuView.policy">\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','policySub', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Policy', true);" >Policy</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','renderers', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);">Renderers</button>\r
- <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','endpoints', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Endpoints', true);">Endpoints</button>\r
- </section>\r
-\r
-\r
-\r
- <button class="btn btn-primary col-md-12 btn-lg" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);"></i>Renderer configuration</button>\r
-\r
- <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','governance')" tooltip="Show/Hide governance submenu">Governance</button>\r
-\r
- <section ng-show="subMenuView.governance">\r
- <button class="btn btn-default col-md-12" ng-class="contentTpl === 'main' && mainView.governance ? 'activated' : ''" ng-click="toggleExpandedMM('governance', true, 'GOV_INIT'); setBreadcrumb('l1', 'Governance', true);" >Governance</button>\r
- <button class="btn btn-default col-md-12" ng-class="contentTpl === 'expressed-policy' ? 'activated' : ''" ng-click="toggleExpanded('expressed-policy'); setBreadcrumb('l2', 'Expressed policy', true);" tooltip="Show expressed policy diagram">Expressed policy</button>\r
- <button class="btn btn-default col-md-12" ng-class="contentTpl === 'delivered-policy' || contentTpl === 'epg-detail' || contentTpl === 'subject-detail' ? 'activated' : ''" ng-click="toggleExpanded('delivered-policy'); setBreadcrumb('l2', 'Delivered policy', true);" tooltip="Show delivered policy diagram">Delivered policy</button>\r
-\r
- <!-- <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true);" >Renderer configuration</button> -->\r
-\r
- <button class="btn btn-default col-md-12" ng-class="contentTpl === 'renderer-state' ? 'activated' : ''" ng-click="toggleExpanded('renderer-state'); setBreadcrumb('l1', 'Governance', true); setBreadcrumb('l2', 'Renderer state', true);">Renderer state</button>\r
- </section>\r
-\r
- <button class="btn btn-primary col-md-12 btn-lg" ></i>Operational constraints</button>\r
-\r
- <button class="btn btn-primary bottom-buttons full-width" ng-click="toggleExpandedMM('main')" >Home</button>\r
-</div>\r
-\r
+<div ng-include src="view_path+'parts/breadcrumbs.tpl.html'" class="breadcrumbs clearfix"></div>
+
+<div class="panelWrapper clearfix no-padd-top">
+ <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','policy');" tooltip="Show/Hide policy submenu"></i>Policy expression</button>
+ <section ng-show="subMenuView.policy">
+ <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','policySub', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Policy', true);" >Policy</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','renderers', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);">Renderers</button>
+ <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setViewExpand('subMenuView','endpoints', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Endpoints', true);">Endpoints</button>
+ </section>
+
+
+
+ <button class="btn btn-primary col-md-12 btn-lg" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l1', 'Policy expression', true); setBreadcrumb('l2', 'Renderers', true);"></i>Renderer configuration</button>
+
+ <button class="btn btn-primary col-md-12 btn-lg" ng-click="setViewExpand('subMenuView','governance')" tooltip="Show/Hide governance submenu">Governance</button>
+
+ <section ng-show="subMenuView.governance">
+ <button class="btn btn-default col-md-12" ng-class="contentTpl === 'main' && mainView.governance ? 'activated' : ''" ng-click="toggleExpandedMM('governance', true, 'GOV_INIT'); setBreadcrumb('l1', 'Governance', true);" >Governance</button>
+ <button class="btn btn-default col-md-12" ng-class="contentTpl === 'expressed-policy' ? 'activated' : ''" ng-click="toggleExpanded('expressed-policy'); setBreadcrumb('l2', 'Expressed policy', true);" tooltip="Show expressed policy diagram">Expressed policy</button>
+ <button class="btn btn-default col-md-12" ng-class="contentTpl === 'delivered-policy' || contentTpl === 'epg-detail' || contentTpl === 'subject-detail' ? 'activated' : ''" ng-click="toggleExpanded('delivered-policy'); setBreadcrumb('l2', 'Delivered policy', true);" tooltip="Show delivered policy diagram">Delivered policy</button>
+
+ <!-- <button class="btn btn-default col-md-12" ng-click="toggleExpandedMM('policy-renderer'); setViewExpand('policyRendererView', 'basic', true);" >Renderer configuration</button> -->
+
+ <button class="btn btn-default col-md-12" ng-class="contentTpl === 'renderer-state' ? 'activated' : ''" ng-click="toggleExpanded('renderer-state'); setBreadcrumb('l1', 'Governance', true); setBreadcrumb('l2', 'Renderer state', true);">Renderer state</button>
+ </section>
+
+ <button class="btn btn-primary col-md-12 btn-lg" ></i>Operational constraints</button>
+
+ <button class="btn btn-primary bottom-buttons full-width" ng-click="toggleExpandedMM('main')" >Home</button>
+</div>
+
-<section class="rowWrapper clearfix" ng-controller="crudCtrl">\r
- <div class="inline-block full-width">\r
- <label class="block float-left"><span>{{ crudLabel }}</span></label>\r
-\r
- <button type="button" class="btn btn-primary col-md-4 float-right" ng-click="filter = !filter"><i class="icon-filter"></i></button>\r
- </div>\r
-\r
- <div ng-init="filter = false" class="ep-filter" ng-show="filter">\r
- <div class="inline-block">\r
- <label class="block"><span>Endpoint group</span></label>\r
- <input type="text" class="form-control" ng-model="q['endpoint-group']" placeholder="Filter by Endpoint groups"/>\r
- </div>\r
-\r
- <div class="inline-block">\r
- <label class="block"><span>Network containment</span></label>\r
- <input type="text" class="form-control" ng-model="q['network-containment']" placeholder="Filter by netw. containment"/>\r
- </div>\r
- </div>\r
-\r
- <div class="selectWrapper col-md-6">\r
- <select class="form-control" ng-model="selectedObj" ng-change="reload(selectedObj)" ng-options="getDisplayLabel(d, displayLabel) for d in list | filter:q">\r
- <option value="">Select option</option>\r
- </select>\r
-\r
- </div>\r
-\r
- <div class="btn-group col-md-6" role="group">\r
- <button type="button" class="btn btn-primary col-md-4" ng-click="add()">Add</button>\r
- <button type="button" class="btn btn-primary col-md-4" ng-click="modify()">Edit</button>\r
- <button type="button" class="btn btn-primary col-md-4" ng-click="delete()">Delete</button>\r
- </div>\r
+<section class="rowWrapper clearfix" ng-controller="crudCtrl">
+ <div class="inline-block full-width">
+ <label class="block float-left"><span>{{ crudLabel }}</span></label>
+
+ <button type="button" class="btn btn-primary col-md-4 float-right" ng-click="filter = !filter"><i class="icon-filter"></i></button>
+ </div>
+
+ <div ng-init="filter = false" class="ep-filter" ng-show="filter">
+ <div class="inline-block">
+ <label class="block"><span>Endpoint group</span></label>
+ <input type="text" class="form-control" ng-model="q['endpoint-group']" placeholder="Filter by Endpoint groups"/>
+ </div>
+
+ <div class="inline-block">
+ <label class="block"><span>Network containment</span></label>
+ <input type="text" class="form-control" ng-model="q['network-containment']" placeholder="Filter by netw. containment"/>
+ </div>
+ </div>
+
+ <div class="selectWrapper col-md-6">
+ <select class="form-control" ng-model="selectedObj" ng-change="reload(selectedObj)" ng-options="getDisplayLabel(d, displayLabel) for d in list | filter:q">
+ <option value="">Select option</option>
+ </select>
+
+ </div>
+
+ <div class="btn-group col-md-6" role="group">
+ <button type="button" class="btn btn-primary col-md-4" ng-click="add()">Add</button>
+ <button type="button" class="btn btn-primary col-md-4" ng-click="modify()">Edit</button>
+ <button type="button" class="btn btn-primary col-md-4" ng-click="delete()">Delete</button>
+ </div>
</section>
\ No newline at end of file
-<section class="rowWrapper clearfix" ng-controller="crudCtrl">\r
- <label class="block"><span>{{ crudLabel }}</span></label>\r
-\r
- <div class="selectWrapper col-md-6">\r
- <select class="form-control" ng-model="selectedObj" ng-change="reload(selectedObj)" ng-options="getDisplayLabel(d, displayLabel) for d in list">\r
- <option value="">Select option</option>\r
- </select>\r
- </div>\r
-\r
- <div class="btn-group col-md-6" role="group">\r
- <button type="button" class="btn btn-primary col-md-4" ng-click="add()">Add</button>\r
- <button type="button" class="btn btn-primary col-md-4" ng-click="modify()">Edit</button>\r
- <button type="button" class="btn btn-primary col-md-4" ng-click="delete()">Delete</button>\r
- </div>\r
+<section class="rowWrapper clearfix" ng-controller="crudCtrl">
+ <label class="block"><span>{{ crudLabel }}</span></label>
+
+ <div class="selectWrapper col-md-6">
+ <select class="form-control" ng-model="selectedObj" ng-change="reload(selectedObj)" ng-options="getDisplayLabel(d, displayLabel) for d in list">
+ <option value="">Select option</option>
+ </select>
+ </div>
+
+ <div class="btn-group col-md-6" role="group">
+ <button type="button" class="btn btn-primary col-md-4" ng-click="add()">Add</button>
+ <button type="button" class="btn btn-primary col-md-4" ng-click="modify()">Edit</button>
+ <button type="button" class="btn btn-primary col-md-4" ng-click="delete()">Delete</button>
+ </div>
</section>
\ No newline at end of file
-<div ng-controller="ruleCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section ng-show="internalView.rule">\r
- <form name="rulesForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- \r
- <div class="rowWrapper">\r
- <label class="block basicLabel"><span>Name:</span>\r
- <i class="icon-exclamation-sign red" tooltip="{{rulesForm.name.$error.required ? 'Required field' : rulesForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="rulesForm.name.$error.required || rulesForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newRuleObj.name" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newRuleObj['order']">\r
- <label class="block basicLabel"><span>Order:</span>\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="rulesForm.order.$error.required"></i>\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="errors.int32 && !rulesForm.order.$error.required"></i>\r
- </label>\r
- <input class="form-control" type="text" name="order" ng-required="true" ng-model="newRuleObj.order" ng-disabled="internalView.edit === 'view'" ng-change="validate(newRuleObj.order, errors)"/>\r
- </div>\r
- \r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedRule">\r
- <div ng-include src="view_path+'action-ref.tpl.html'"></div>\r
- </section>\r
-\r
- <section class="formWrapper clearfix" ng-show="selectedRule">\r
- <div ng-include src="view_path+'classifier-ref.tpl.html'"></div>\r
- </section>\r
-\r
+<div ng-controller="ruleCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section ng-show="internalView.rule">
+ <form name="rulesForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel"><span>Name:</span>
+ <i class="icon-exclamation-sign red" tooltip="{{rulesForm.name.$error.required ? 'Required field' : rulesForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="rulesForm.name.$error.required || rulesForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newRuleObj.name" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newRuleObj['order']">
+ <label class="block basicLabel"><span>Order:</span>
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="rulesForm.order.$error.required"></i>
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="errors.int32 && !rulesForm.order.$error.required"></i>
+ </label>
+ <input class="form-control" type="text" name="order" ng-required="true" ng-model="newRuleObj.order" ng-disabled="internalView.edit === 'view'" ng-change="validate(newRuleObj.order, errors)"/>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedRule">
+ <div ng-include src="view_path+'action-ref.tpl.html'"></div>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedRule">
+ <div ng-include src="view_path+'classifier-ref.tpl.html'"></div>
+ </section>
+
</div>
\ No newline at end of file
-<div ng-controller="subjectCtrl" ng-init="init()">\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section ng-show="internalView.subject">\r
- <form name="subjectForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel"><span>Name:</span>\r
- <i class="icon-exclamation-sign red" tooltip="{{subjectForm.name.$error.required ? 'Required field' : subjectForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="subjectForm.name.$error.required || subjectForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" ng-model="newSubjectObj.name" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newSubjectObj['order']">\r
- <label class="block basicLabel"><span>Order:</span>\r
- <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="subjectForm.order.$error.required"></i>\r
- <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="errors.int32 && !subjectForm.order.$error.required"></i>\r
- </label>\r
- <input class="form-control" type="text" name="order" ng-required="true" name="order" ng-model="newSubjectObj.order" ng-disabled="internalView.edit === 'view'" ng-change="validate(newSubjectObj.order, errors)"/>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
- \r
- <section class="formWrapper clearfix" ng-show="selectedSubject">\r
- <div ng-include src="view_path+'rules.tpl.html'"></div>\r
- </section>\r
+<div ng-controller="subjectCtrl" ng-init="init()">
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section ng-show="internalView.subject">
+ <form name="subjectForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel"><span>Name:</span>
+ <i class="icon-exclamation-sign red" tooltip="{{subjectForm.name.$error.required ? 'Required field' : subjectForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="subjectForm.name.$error.required || subjectForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" ng-model="newSubjectObj.name" name="name" ng-required="true" ng-disabled="internalView.edit !== 'add'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="internalView.edit === 'view' && !newSubjectObj['order']">
+ <label class="block basicLabel"><span>Order:</span>
+ <i class="icon-exclamation-sign red" tooltip="Required field" ng-show="subjectForm.order.$error.required"></i>
+ <i class="icon-exclamation-sign red" tooltip="Invalid pattern" ng-show="errors.int32 && !subjectForm.order.$error.required"></i>
+ </label>
+ <input class="form-control" type="text" name="order" ng-required="true" name="order" ng-model="newSubjectObj.order" ng-disabled="internalView.edit === 'view'" ng-change="validate(newSubjectObj.order, errors)"/>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="internalView.edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <section class="formWrapper clearfix" ng-show="selectedSubject">
+ <div ng-include src="view_path+'rules.tpl.html'"></div>
+ </section>
</div>
\ No newline at end of file
-<div ng-controller="tenantCtrl" ng-init="init()">\r
-\r
- <h2 class="text-center">Tenants</h2> \r
-\r
-\r
- <div ng-include src="view_path+'parts/crud.tpl.html'"></div>\r
-\r
- <section class="formWrapper clearfix" ng-show="view.tenant">\r
- <form name="tenantForm" novalidate="novalidate">\r
- <i class="icon-remove align-right" ng-click="close()"></i>\r
- <label class="block">Add Tenant</label>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Id:</label>\r
- <input class="form-control" type="text" ng-model="newTenantObj.id" disabled/>\r
- </div>\r
-\r
- <div class="rowWrapper">\r
- <label class="block basicLabel">Name:\r
- <i class="icon-exclamation-sign red" tooltip="{{tenantForm.name.$error.required ? 'Required field' : tenantForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="tenantForm.name.$error.required || tenantForm.name.$error.pattern"></i>\r
- </label>\r
- <input class="form-control" type="text" name="name" ng-model="newTenantObj.name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>\r
- </div>\r
-\r
- <div class="rowWrapper" ng-hide="view.edit === 'view' && !newTenantObj.description">\r
- <label class="block basicLabel">Description:</label>\r
- <input class="form-control" type="text" ng-model="newTenantObj.description" ng-disabled="view.edit === 'view'"/>\r
- </div>\r
-\r
- <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>\r
- </form>\r
- </section>\r
-\r
- <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>\r
- <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>\r
-\r
+<div ng-controller="tenantCtrl" ng-init="init()">
+
+ <h2 class="text-center">Tenants</h2>
+
+
+ <div ng-include src="view_path+'parts/crud.tpl.html'"></div>
+
+ <section class="formWrapper clearfix" ng-show="view.tenant">
+ <form name="tenantForm" novalidate="novalidate">
+ <i class="icon-remove align-right" ng-click="close()"></i>
+ <label class="block">Add Tenant</label>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Id:</label>
+ <input class="form-control" type="text" ng-model="newTenantObj.id" disabled/>
+ </div>
+
+ <div class="rowWrapper">
+ <label class="block basicLabel">Name:
+ <i class="icon-exclamation-sign red" tooltip="{{tenantForm.name.$error.required ? 'Required field' : tenantForm.name.$error.pattern ? 'Value must start with letter followed by letters and digits without space' : ''}}" ng-show="tenantForm.name.$error.required || tenantForm.name.$error.pattern"></i>
+ </label>
+ <input class="form-control" type="text" name="name" ng-model="newTenantObj.name" ng-required="true" ng-disabled="view.edit === 'view'" ng-pattern="/^[a-zA-Z]([a-zA-Z0-9\-_.])*$/"/>
+ </div>
+
+ <div class="rowWrapper" ng-hide="view.edit === 'view' && !newTenantObj.description">
+ <label class="block basicLabel">Description:</label>
+ <input class="form-control" type="text" ng-model="newTenantObj.description" ng-disabled="view.edit === 'view'"/>
+ </div>
+
+ <button class="btn btn-primary col-md-12" ng-click="save()" ng-hide="view.edit === 'view'">Save</button>
+ </form>
+ </section>
+
+ <button class="btn btn-primary bottom-buttons full-width wizard-button" ng-click="showWizard('accessModelWizard')"><i class="icon-magic"></i>Access Model Wizard</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons home" ng-click="toggleExpandedMM('main')">Home</button>
+ <button class="btn btn-primary col-md-12 bottom-buttons back" ng-click="setViewExpand('policyRendererView', 'basic', true); setBreadcrumb('l3', null, false);">Back</button>
+
</div>
\ No newline at end of file
<modelVersion>4.0.0</modelVersion>
<groupId>org.opendaylight.groupbasedpolicy</groupId>
- <artifactId>groupbasedpolicy-ui</artifactId>
- <name>groupbasedpolicy-ui</name>
+ <artifactId>groupbasedpolicy-old-ui</artifactId>
+ <name>groupbasedpolicy-old-ui</name>
<description>Resources</description>
<version>0.4.0-SNAPSHOT</version>
<packaging>pom</packaging>
<module>neutron-mapper</module>
<module>neutron-ovsdb</module>
<module>ui-backend</module>
- <module>groupbasedpolicy-ui</module>
+ <module>groupbasedpolicy-old-ui</module>
<module>distribution-karaf</module>
<module>features</module>
<module>sxp-mapper</module>
this.rpcRegistryDependency = rpcRegistryDependency;
final EndpointService endpointService = rpcRegistryDependency.getRpcService(EndpointService.class);
- sxpMapperReactor = new SxpMapperReactorImpl(endpointService);
+ sxpMapperReactor = new SxpMapperReactorImpl(endpointService, dataBroker);
final SimpleCachedDao<Sgt, EndpointPolicyTemplateBySgt> epPolicyTemplateCachedDao = new SimpleCachedDaoImpl<>();
final SimpleCachedDao<IpPrefix, EndpointForwardingTemplateBySubnet> epForwardingTemplateCachedDao =
package org.opendaylight.groupbasedpolicy.sxp.mapper.impl;
+import com.google.common.base.Optional;
+import com.google.common.base.Preconditions;
+import com.google.common.util.concurrent.AsyncFunction;
+import com.google.common.util.concurrent.CheckedFuture;
+import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.JdkFutureAdapters;
import com.google.common.util.concurrent.ListenableFuture;
+import java.util.Collections;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SxpMapperReactor;
+import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.SxpListenerUtil;
+import org.opendaylight.groupbasedpolicy.util.IidFactory;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpAddress;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.common.rev140421.L3ContextId;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInputBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3Address;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoint.fields.L3AddressBuilder;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3Key;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
/**
* Purpose: exclusively processes sxp master database changes and EGP templates changes
*/
public class SxpMapperReactorImpl implements SxpMapperReactor {
+
+ private static final Logger LOG = LoggerFactory.getLogger(SxpMapperReactorImpl.class);
+
private final EndpointService l3EndpointService;
+ private final DataBroker dataBroker;
- public SxpMapperReactorImpl(final EndpointService l3EndpointService) {
- this.l3EndpointService = l3EndpointService;
+ public SxpMapperReactorImpl(final EndpointService l3EndpointService, final DataBroker dataBroker) {
+ this.l3EndpointService = Preconditions.checkNotNull(l3EndpointService, "l3Endpoint service missing");
+ this.dataBroker = Preconditions.checkNotNull(dataBroker, "dataBroker missing");
}
@Override
- public ListenableFuture<RpcResult<Void>> processPolicyAndSxpMasterDB(final EndpointPolicyTemplateBySgt template, final MasterDatabaseBinding masterDatabaseBinding) {
+ public ListenableFuture<RpcResult<Void>> processPolicyAndSxpMasterDB(final EndpointPolicyTemplateBySgt template, final MasterDatabaseBinding masterDBBinding) {
+ LOG.debug("processing ep-policy-template + sxpMasterDB entry: {} - {}",
+ masterDBBinding.getSecurityGroupTag(), masterDBBinding.getIpPrefix());
// apply sxpMasterDB to policy template
- final RegisterEndpointInput input = new RegisterEndpointInputBuilder()
+ final L3Address l3Address = buildL3Address(masterDBBinding.getIpPrefix());
+ final RegisterEndpointInput epInput = new RegisterEndpointInputBuilder()
.setCondition(template.getConditions())
.setTenant(template.getTenant())
.setEndpointGroups(template.getEndpointGroups())
+ .setL3Address(Collections.singletonList(l3Address))
.build();
- // invoke service
- return JdkFutureAdapters.listenInPoolThread(l3EndpointService.registerEndpoint(input));
+ return chainL3EPServiceIfEpAbsent(l3Address, epInput);
}
@Override
- public ListenableFuture<RpcResult<Void>> processForwardingAndSxpMasterDB(final EndpointForwardingTemplateBySubnet template, final MasterDatabaseBinding masterDatabaseBinding) {
+ public ListenableFuture<RpcResult<Void>> processForwardingAndSxpMasterDB(final EndpointForwardingTemplateBySubnet template, final MasterDatabaseBinding masterDBBinding) {
+ LOG.debug("processing ep-forwarding-template + sxpMasterDB entry: {} - {}",
+ masterDBBinding.getSecurityGroupTag(), masterDBBinding.getIpPrefix());
// apply sxpMasterDB to policy template
- final RegisterEndpointInput input = new RegisterEndpointInputBuilder()
+ final L3Address l3Address = buildL3Address(masterDBBinding.getIpPrefix());
+ final RegisterEndpointInput epInput = new RegisterEndpointInputBuilder()
.setNetworkContainment(template.getNetworkContainment())
+ .setL3Address(Collections.singletonList(l3Address))
.build();
- // invoke service
- return JdkFutureAdapters.listenInPoolThread(l3EndpointService.registerEndpoint(input));
+ return chainL3EPServiceIfEpAbsent(l3Address, epInput);
+ }
+
+ private L3Address buildL3Address(final IpPrefix ipPrefix) {
+ final String ipv4PrefixValue = ipPrefix.getIpv4Prefix().getValue();
+ final IpAddress ipv4Value = new IpAddress(new Ipv4Address(ipv4PrefixValue.replaceFirst("/.+", "")));
+ return new L3AddressBuilder()
+ .setIpAddress(ipv4Value)
+ .setL3Context(new L3ContextId(ipv4PrefixValue))
+ .build();
+ }
+
+ private CheckedFuture<Optional<EndpointL3>, ReadFailedException> findExistingEndPoint(final L3Address l3Address) {
+ EndpointL3Key epL3key = new EndpointL3Key(l3Address.getIpAddress(), l3Address.getL3Context());
+ final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
+ final CheckedFuture<Optional<EndpointL3>, ReadFailedException> read = rTx.read(
+ LogicalDatastoreType.OPERATIONAL, IidFactory.l3EndpointIid(epL3key));
+ Futures.addCallback(read, SxpListenerUtil.createTxCloseCallback(rTx));
+ return read;
+ }
+
+ private ListenableFuture<RpcResult<Void>> chainL3EPServiceIfEpAbsent(final L3Address l3Address, final RegisterEndpointInput epInput) {
+ CheckedFuture<Optional<EndpointL3>, ReadFailedException> existingEndpointFuture = findExistingEndPoint(l3Address);
+
+ return Futures.transform(existingEndpointFuture, new AsyncFunction<Optional<EndpointL3>, RpcResult<Void>>() {
+ @Override
+ public ListenableFuture<RpcResult<Void>> apply(final Optional<EndpointL3> input) throws Exception {
+ final ListenableFuture<RpcResult<Void>> nextResult;
+ if (input == null || !input.isPresent()) {
+ // invoke service
+ return JdkFutureAdapters.listenInPoolThread(l3EndpointService.registerEndpoint(epInput));
+ } else {
+ final String existingL3EpMsg = String.format("L3Endpoint for given key already exists: %s", l3Address);
+ nextResult = Futures.immediateFailedFuture(new IllegalStateException(existingL3EpMsg));
+ }
+ return nextResult;
+ }
+ });
}
}
+
*/
public class EPForwardingTemplateDaoImpl implements DSAsyncDao<IpPrefix, EndpointForwardingTemplateBySubnet> {
- public static final ListenableFuture<Optional<EndpointForwardingTemplateBySubnet>> READ_FUTURE_ABSENT = Futures.immediateFuture(Optional.absent());
+ private static final ListenableFuture<Optional<EndpointForwardingTemplateBySubnet>> READ_FUTURE_ABSENT = Futures.immediateFuture(Optional.absent());
private final DataBroker dataBroker;
private final SimpleCachedDao<IpPrefix, EndpointForwardingTemplateBySubnet> cachedDao;
cachedDao.update(template.getIpPrefix(), template);
}
}
- return cachedDao.find(key);
+ return lookup(cachedDao, key);
} else {
return Optional.absent();
}
import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
import org.opendaylight.controller.md.sal.common.api.data.ReadFailedException;
import org.opendaylight.groupbasedpolicy.sxp.mapper.api.DSAsyncDao;
-import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SimpleCachedDao;
import org.opendaylight.groupbasedpolicy.sxp.mapper.api.EPTemplateListener;
+import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SimpleCachedDao;
import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.SxpListenerUtil;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgtKey;
*/
public class EPPolicyTemplateDaoImpl implements DSAsyncDao<Sgt, EndpointPolicyTemplateBySgt> {
+ private static final ListenableFuture<Optional<EndpointPolicyTemplateBySgt>> READ_FUTURE_ABSENT = Futures.immediateFuture(Optional.absent());
+
private final DataBroker dataBroker;
private final SimpleCachedDao<Sgt, EndpointPolicyTemplateBySgt> cachedDao;
final Optional<EndpointPolicyTemplateBySgt> cachedEndpointPolicyTemplateBySgtalue = lookup(cachedDao, key);
if (cachedEndpointPolicyTemplateBySgtalue.isPresent()) {
return Futures.immediateFuture(cachedEndpointPolicyTemplateBySgtalue);
+ } else if (!cachedDao.isEmpty()) {
+ return READ_FUTURE_ABSENT;
} else {
final ReadOnlyTransaction rTx = dataBroker.newReadOnlyTransaction();
final CheckedFuture<Optional<EndpointPolicyTemplateBySgt>, ReadFailedException> read =
ReadableByKey<Sgt, MasterDatabaseBinding> {
private static final Logger LOG = LoggerFactory.getLogger(MasterDatabaseBindingDaoImpl.class);
+ private static final ListenableFuture<Optional<MasterDatabaseBinding>> READ_FUTURE_ABSENT = Futures.immediateFuture(Optional.absent());
private final DataBroker dataBroker;
private final SimpleCachedDao<IpPrefix, MasterDatabaseBinding> cachedDao;
final Optional<MasterDatabaseBinding> cachedMasterDatabaseBinding = lookup(cachedDao, key);
if (cachedMasterDatabaseBinding.isPresent()) {
return Futures.immediateFuture(cachedMasterDatabaseBinding);
+ } else if (!cachedDao.isEmpty()) {
+ return READ_FUTURE_ABSENT;
} else {
final ListenableFuture<Void> cacheUpdatedFt = updateCache();
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
-import java.util.ArrayList;
import java.util.Collection;
-import java.util.List;
import javax.annotation.Nonnull;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.controller.md.sal.binding.api.DataTreeIdentifier;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
final ListenableFuture<RpcResult<Void>> allRpcResult = Futures.transform(sxpMasterDbItemFuture, new AsyncFunction<Optional<MasterDatabaseBinding>, RpcResult<Void>>() {
@Override
public ListenableFuture<RpcResult<Void>> apply(final Optional<MasterDatabaseBinding> input) throws Exception {
- if (input == null && input.isPresent()) {
+ final ListenableFuture<RpcResult<Void>> rpcResult;
+ if (input == null || !input.isPresent()) {
LOG.debug("no epForwardingTemplate available for sgt: {}", changeKey);
- throw new IllegalArgumentException("no epForwardingTemplate available");
+ rpcResult = RpcResultBuilder.<Void>failed()
+ .withError(RpcError.ErrorType.APPLICATION,
+ "no ip-sgt mapping in sxpMasterDB available for " + changeKey)
+ .buildFuture();
} else {
- List<ListenableFuture<RpcResult<Void>>> resultBag = new ArrayList<>();
LOG.trace("processing sxpMasterDB event and epForwardingTemplate for sgt: {}", changeKey);
- final ListenableFuture<RpcResult<Void>> rpcResult = sxpMapperReactor.processForwardingAndSxpMasterDB(epForwardingTemplate, input.get());
- return rpcResult;
+ rpcResult = sxpMapperReactor.processForwardingAndSxpMasterDB(epForwardingTemplate, input.get());
}
+ return rpcResult;
}
});
import com.google.common.util.concurrent.ListenableFuture;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.Collections;
import java.util.List;
import javax.annotation.Nonnull;
import org.opendaylight.controller.md.sal.binding.api.DataBroker;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
final ListenableFuture<List<RpcResult<Void>>> rpcResult = Futures.transform(sxpMasterDbItemFuture, new AsyncFunction<Collection<MasterDatabaseBinding>, List<RpcResult<Void>>>() {
@Override
public ListenableFuture<List<RpcResult<Void>>> apply(final Collection<MasterDatabaseBinding> input) throws Exception {
+ final ListenableFuture<List<RpcResult<Void>>> result;
if (input == null || input.isEmpty()) {
LOG.debug("no epPolicyTemplate available from sgt: {}", changeKey);
- throw new IllegalArgumentException("no epPolicyTemplate available");
+ result = Futures.immediateFuture(Collections.singletonList(
+ RpcResultBuilder.<Void>failed()
+ .withError(RpcError.ErrorType.APPLICATION,
+ "no ip-sgt mapping in sxpMasterDB available for " + changeKey)
+ .build()));
} else {
LOG.trace("processing sxpMasterDB event and epPolicyTemplate for sgt: {}", changeKey);
List<ListenableFuture<RpcResult<Void>>> allResults = new ArrayList<>(input.size());
for (MasterDatabaseBinding masterDBItem : input) {
- allResults.add(sxpMapperReactor.processPolicyAndSxpMasterDB(epPolicyTemplate, masterDBItem));
+ allResults.add(sxpMapperReactor.processPolicyAndSxpMasterDB(epPolicyTemplate, masterDBItem));
}
- return Futures.successfulAsList(allResults);
+ result = Futures.successfulAsList(allResults);
}
+
+ return result;
}
});
import org.opendaylight.groupbasedpolicy.sxp.mapper.api.MasterDatabaseBindingListener;
import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SimpleCachedDao;
import org.opendaylight.groupbasedpolicy.sxp.mapper.api.SxpMapperReactor;
+import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.ForwardingTemplateUtil;
import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.L3EPServiceUtil;
import org.opendaylight.groupbasedpolicy.sxp.mapper.impl.util.SxpListenerUtil;
import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
import org.opendaylight.yang.gen.v1.urn.tbd.params.xml.ns.yang.network.topology.rev131021.network.topology.topology.Node;
import org.opendaylight.yangtools.concepts.ListenerRegistration;
import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
+import org.opendaylight.yangtools.yang.common.RpcError;
import org.opendaylight.yangtools.yang.common.RpcResult;
+import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
}
private void processWithEPForwardingTemplate(final IpPrefix changeKey, final MasterDatabaseBinding sxpMasterDBItem) {
+ if (!ForwardingTemplateUtil.isPlain(changeKey)) {
+ // SKIP SUBNET
+ LOG.debug("received ip-sgt binding with subnet ip - SKIPPING: {} - {}",
+ changeKey, sxpMasterDBItem.getSecurityGroupTag());
+ return;
+ }
+
final ListenableFuture<Optional<EndpointForwardingTemplateBySubnet>> epForwardingTemplateFuture =
epForwardingTemplateDao.read(changeKey);
final ListenableFuture<RpcResult<Void>> rpcResult = Futures.transform(epPolicyTemplateFuture, new AsyncFunction<Optional<EndpointPolicyTemplateBySgt>, RpcResult<Void>>() {
@Override
public ListenableFuture<RpcResult<Void>> apply(final Optional<EndpointPolicyTemplateBySgt> input) throws Exception {
+ final ListenableFuture<RpcResult<Void>> result;
if (input == null || !input.isPresent()) {
LOG.debug("no epPolicyTemplate available for sgt: {}", changeKey);
- throw new IllegalArgumentException("no epPolicyTemplate available");
+ result = RpcResultBuilder.<Void>failed()
+ .withError(RpcError.ErrorType.APPLICATION,
+ "no ip-sgt mapping in sxpMasterDB available for " + changeKey)
+ .buildFuture();
} else {
LOG.trace("processing sxpMasterDB event and epPolicyTemplate for sgt: {}", changeKey);
- return sxpMapperReactor.processPolicyAndSxpMasterDB(input.get(), sxpMasterDBItem);
+ result = sxpMapperReactor.processPolicyAndSxpMasterDB(input.get(), sxpMasterDBItem);
}
+ return result;
}
});
*/
package org.opendaylight.groupbasedpolicy.sxp.mapper.impl;
+import com.google.common.base.Optional;
+import com.google.common.util.concurrent.Futures;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.runners.MockitoJUnitRunner;
+import org.opendaylight.controller.md.sal.binding.api.DataBroker;
+import org.opendaylight.controller.md.sal.binding.api.ReadOnlyTransaction;
+import org.opendaylight.controller.md.sal.common.api.data.LogicalDatastoreType;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.IpPrefix;
+import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev100924.Ipv4Prefix;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.EndpointService;
import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.RegisterEndpointInput;
+import org.opendaylight.yang.gen.v1.urn.opendaylight.groupbasedpolicy.endpoint.rev140421.endpoints.EndpointL3;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointForwardingTemplateBySubnet;
import org.opendaylight.yang.gen.v1.urn.opendaylight.params.xml.ns.yang.controller.config.groupbasedpolicy.sxp.mapper.model.rev160302.sxp.mapper.EndpointPolicyTemplateBySgt;
import org.opendaylight.yang.gen.v1.urn.opendaylight.sxp.database.rev160308.master.database.fields.MasterDatabaseBinding;
+import org.opendaylight.yangtools.yang.binding.InstanceIdentifier;
import org.opendaylight.yangtools.yang.common.RpcResultBuilder;
/**
@RunWith(MockitoJUnitRunner.class)
public class SxpMapperReactorImplTest {
+ private static final IpPrefix IP_PREFIX = new IpPrefix(new Ipv4Prefix("10.11.12.1/32"));
+
@Mock
private EndpointService l3EndpointService;
@Mock
private MasterDatabaseBinding masterDBBinding;
@Mock
private EndpointForwardingTemplateBySubnet epForwardingTemplate;
+ @Mock
+ private DataBroker dataBroker;
+ @Mock
+ private ReadOnlyTransaction rTx;
private SxpMapperReactorImpl sxpMapperReactor;
@Before
public void setUp() throws Exception {
- sxpMapperReactor = new SxpMapperReactorImpl(l3EndpointService);
+ sxpMapperReactor = new SxpMapperReactorImpl(l3EndpointService, dataBroker);
Mockito.when(l3EndpointService.registerEndpoint(Matchers.<RegisterEndpointInput>any()))
.thenReturn(RpcResultBuilder.<Void>success().buildFuture());
+ Mockito.when(masterDBBinding.getIpPrefix()).thenReturn(IP_PREFIX);
+ Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
+ Mockito.when(rTx.read(Matchers.same(LogicalDatastoreType.OPERATIONAL),
+ Matchers.<InstanceIdentifier<EndpointL3>>any())).thenReturn(Futures.immediateCheckedFuture(Optional.absent()));
}
@After
public void testRead_presentDS() throws Exception {
Mockito.when(cachedDao.find(Matchers.<Sgt>any())).thenReturn(
Optional.<EndpointPolicyTemplateBySgt>absent());
+ Mockito.when(cachedDao.isEmpty()).thenReturn(true);
Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
Mockito.when(rTx.read(Matchers.eq(LogicalDatastoreType.CONFIGURATION),
Matchers.<InstanceIdentifier<EndpointPolicyTemplateBySgt>>any())).thenReturn(
Mockito.when(cachedDao.find(Matchers.<IpPrefix>any())).thenReturn(
Optional.<MasterDatabaseBinding>absent(),
Optional.of(MASTER_DB_BINDING_VALUE));
+ Mockito.when(cachedDao.isEmpty()).thenReturn(true);
Mockito.when(dataBroker.newReadOnlyTransaction()).thenReturn(rTx);
Mockito.when(rTx.read(Matchers.eq(LogicalDatastoreType.CONFIGURATION),
Matchers.<InstanceIdentifier<Topology>>any())).thenReturn(