2 * Copyright (c) 2014 Cisco Systems, Inc. and others. All rights reserved.
\r
4 * This program and the accompanying materials are made available under the
\r
5 * terms of the Eclipse Public License v1.0 which accompanies this distribution,
\r
6 * and is available at http://www.eclipse.org/legal/epl-v10.html
\r
10 angular.module('console.yangui', ['common.yangUtils'])
\r
14 .config(function ($stateProvider) {
\r
15 var access = routingConfig.accessLevels;
\r
16 $stateProvider.state('yangui', {
\r
19 templateUrl: 'yangui/root.tpl.html'
\r
22 $stateProvider.state('yangui.index', {
\r
24 access: access.admin,
\r
27 controller: 'yanguiCtrl',
\r
28 templateUrl: 'yangui/index.tpl.html'
\r
34 .controller('yanguiCtrl', ['$scope', '$http', '$timeout', 'Restangular', 'yangUtils', function ($scope, $http, $timeout, Restangular, yangUtils) {
\r
35 $scope.currentPath = './assets/views/yangui';
\r
36 $scope.host = '127.0.0.1';
\r
37 $scope.port = '9999';
\r
43 var requestWorkingCallback = function() {
\r
47 msg: 'SEND_OPER_WAIT'
\r
51 var requestOperErrorCallback = function() {
\r
54 msg: 'SEND_OPER_ERROR'
\r
58 var requestSuccessCallback = function() {
\r
65 var requestErrorCallback = function() {
\r
72 var loadModules = function() {
\r
73 $scope.nodeModules = [];
\r
74 Restangular.all('modules').getList().then(function(modulesRawData) {
\r
75 // console.info('modules raw:',modulesRawData);
\r
76 yangUtils.processModules(modulesRawData.modules, function(node) {
\r
77 $scope.nodeModules.push(node);
\r
82 var loadNodes = function loadNodes() {
\r
83 //TODO change when module discovery will be implemented
\r
84 $scope.devices = [];
\r
85 Restangular.all('operational').all('opendaylight-inventory:nodes').getList().then(function(inventoryRawData) {
\r
86 $scope.devices = yangUtils.processNodes(inventoryRawData.nodes);
\r
90 var loadFlows = function loadFlows() {
\r
92 if($scope.selDevice) {
\r
93 //TODO change when module discovery will be implemented
\r
94 Restangular.all('config').all('opendaylight-inventory:nodes').one('node', $scope.selDevice).get().then(function(nodeRawData) {
\r
95 $scope.flows = yangUtils.processFlows(nodeRawData.node[0]);
\r
100 var sendFlow = function sendFlow() {
\r
101 if($scope.selDevice && $scope.selModule) {
\r
102 var requestData = yangUtils.buildRequest($scope.selModule),
\r
103 flowId = requestData.flow[0].id,
\r
104 tableId = requestData.flow[0].table_id;
\r
107 //TODO change when module discovery will be implemented
\r
108 var request = Restangular.all('config').all('opendaylight-inventory:nodes').one('node',$scope.selDevice).one('table',tableId).one('flow',flowId);
\r
110 request.customPUT(requestData).then(function() {
\r
111 requestWorkingCallback();
\r
112 yangUtils.checkOperational($scope.selDevice, requestData.flow[0], requestSuccessCallback, requestOperErrorCallback);
\r
114 requestErrorCallback();
\r
120 var deleteFlow = function deleteFlow() {
\r
121 if($scope.selDevice && $scope.selFlow) {
\r
122 var flowId = $scope.selFlow.flow,
\r
123 tableId = $scope.selFlow.table,
\r
124 //TODO change when module discovery will be implemented
\r
125 request = Restangular.all('config').all('opendaylight-inventory:nodes').one('node',$scope.selDevice).one('table',tableId).one('flow',flowId);
\r
127 request.remove().then(function() {
\r
128 $scope.selFlow = null;
\r
129 requestSuccessCallback();
\r
131 requestErrorCallback();
\r
136 $scope.dismissStatus = function() {
\r
137 $scope.status = {};
\r
140 $scope.loadController = function() {
\r
141 $scope.nodeModules = [];
\r
143 $scope.devices = [];
\r
144 $scope.showPreview = true;
\r
145 $scope.previewValue = '';
\r
151 $scope.getAPIs = function() {
\r
152 //TODO load api when cross domain issue with Restconf API explorer will be closed
\r
154 // Restangular.all('config').all('opendaylight-inventory:nodes').one('node', 'openflow:1').one('table', '1').one('flow', '1').get().then(function(flowData) {
\r
155 // console.info('flowData:',flowData);
\r
157 console.info(yangUtils.exportModulesLocales($scope.nodeModules));
\r
160 $scope.getData = function() {
\r
164 $scope.fill = function() {
\r
165 if($scope.selFlow && $scope.selModule) {
\r
166 //TODO when rest api explorer will be available do it by it
\r
167 var data = {'flow-node-inventory:flow': [$scope.selFlow.data]},
\r
168 name = 'flow-node-inventory:flows';
\r
170 $scope.selModule.clear();
\r
171 $scope.selModule.fill(name, data);
\r
176 $scope.delete = function() {
\r
182 $scope.clear = function() {
\r
183 if($scope.selModule) {
\r
184 $scope.selModule.clear();
\r
189 $scope.send = function() {
\r
194 $scope.preview = function() {
\r
195 if($scope.showPreview && $scope.selModule) {
\r
196 $scope.previewValue = yangUtils.getRequestString($scope.selModule);
\r
198 $scope.previewValue = '';
\r
201 $scope.previewVisible = ($scope.showPreview && $scope.previewValue);
\r
205 loadModules: loadModules,
\r
206 loadNodes: loadNodes,
\r
207 loadFlows: loadFlows,
\r
208 sendFlow: sendFlow,
\r
209 deleteFlow: deleteFlow
\r
212 $scope.loadController();
\r
215 .controller('leafCtrl', function ($scope) {
\r
216 $scope.parentNode = $scope.node;
\r
218 $scope.changed = function() {
\r
223 .controller('containerCtrl', function ($scope) {
\r
224 $scope.parentNode = $scope.node;
\r
225 var node = $scope.node;
\r
226 $scope.toggleExpanded = function() {
\r
227 node.expanded = !node.expanded;
\r
231 .controller('caseCtrl', function ($scope) {
\r
232 $scope.parentNode = $scope.node;
\r
233 var node = $scope.node;
\r
234 $scope.empty = (node.children.length === 0 || (node.children.length === 1 && node.children[0].children.length ===0));
\r
237 .controller('choiceCtrl', function ($scope) {
\r
238 $scope.parentNode = $scope.node;
\r
243 .controller('listCtrl', function ($scope) {
\r
244 $scope.parentNode = $scope.node;
\r
245 $scope.actElement = null;
\r
246 var node = $scope.node;
\r
248 $scope.setActElement = function setActElement(elem) {
\r
249 $scope.parentNode.actElement = elem;
\r
252 $scope.addListElem = function addListElem() {
\r
253 node.addListElem();
\r
256 $scope.removeListElem = function removeListElem(elem) {
\r
257 node.removeListElem(elem);
\r
258 // $scope.preview();
\r
261 $scope.isElemActive = function isElemActive(elem) {
\r
262 var match = (elem === $scope.parentNode.actElement);
\r
263 return (match ? 'active' : '');
\r