blob: 559dca12ff88ed73d131653853d535e163647481 [file] [log] [blame]
/*
* Copyright 2015-present Open Networking Laboratory
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/*
ONOS GUI -- Intent View Module
*/
(function () {
'use strict';
var dialogId = 'remove-intent-dialog',
dialogOpts = {
edge: 'right'
};
angular.module('ovIntent', [])
.controller('OvIntentCtrl',
['$log', '$scope', 'TableBuilderService', 'NavService',
'TopoOverlayService', 'TopoTrafficService', 'DialogService',
function ($log, $scope, tbs, ns, tov, tts, ds) {
$scope.briefTip = 'Switch to brief view';
$scope.detailTip = 'Switch to detailed view';
$scope.brief = true;
$scope.intentState = 'NA';
$scope.fired = false;
function selCb($event, row) {
$log.debug('Got a click on:', row);
var m = /(\d+)\s:\s(.*)/.exec(row.appId),
id = m ? m[1] : null,
name = m ? m[2] : null;
$scope.intentData = ($scope.selId && m) ? {
appId: id,
appName: name,
key: row.key
} : null;
$scope.intentState = row.state;
}
function respCb() {
if ($scope.fired) {
if ($scope.changedData) {
$scope.intentState = $scope.changedData.state;
}
$scope.fired = false;
}
}
tbs.buildTable({
scope: $scope,
tag: 'intent',
selCb: selCb,
respCb: respCb,
idKey: 'key'
});
$scope.topoTip = 'Show selected intent on topology view';
$scope.resubmitTip = 'Resubmit selected intent';
$scope.deactivateTip = 'Remove selected intent';
$scope.purgeTip = 'Purge selected intent';
$scope.purgeAllTip = 'Purge withdrawn intents';
$scope.showIntent = function () {
var d = $scope.intentData;
if (d) {
// TODO: if more than one overlay registered, provide dropdown
$log.debug('SHOW-INTENT: overlay list:', tov.list());
$log.debug('SHOW-INTENT: overlay info:', tov.list(true));
ns.navTo('topo', d);
}
};
$scope.isIntentInstalled = function () {
return $scope.intentState === 'Installed';
};
$scope.isIntentWithdrawn = function () {
return $scope.intentState === 'Withdrawn';
};
$scope.isHavingWithdrawn = function () {
var isWithdrawn = false;
$scope.tableData.forEach(function (intent) {
if (intent.state ==='Withdrawn') {
isWithdrawn = true;
}
});
return isWithdrawn;
};
function executeAction(action) {
var content = ds.createDiv(),
txt,
bPurge = action === 'purge';
$scope.intentData.intentPurge = bPurge;
content.append('p').
text('Are you sure you want to '+ action +
' the selected intent?');
function dOk() {
var d = $scope.intentData;
$log.debug(d);
d && (action === 'resubmit' ? tts.resubmitIntent(d) :
tts.removeIntent(d));
$scope.fired = true;
}
function dCancel() {
ds.closeDialog();
$log.debug('Canceling remove-intent action');
}
ds.openDialog(dialogId, dialogOpts)
.setTitle('Confirm Action')
.addContent(content)
.addOk(dOk)
.addCancel(dCancel)
.bindKeys();
}
function executeActions(action) {
var content = ds.createDiv(),
txt='purgeIntents';
content.append('p').
text('Are you sure you want to purge all the withdrawn intents?');
function dOk() {
tts.removeIntents();
$scope.fired = true;
}
function dCancel() {
ds.closeDialog();
$log.debug('Canceling remove-intents action');
}
ds.openDialog(dialogId, dialogOpts)
.setTitle('Confirm Action')
.addContent(content)
.addOk(dOk)
.addCancel(dCancel)
.bindKeys();
}
$scope.deactivateIntent = function () {
executeAction("withdraw");
};
$scope.resubmitIntent = function () {
executeAction("resubmit");
};
$scope.purgeIntent = function () {
executeAction("purge");
};
$scope.briefToggle = function () {
$scope.brief = !$scope.brief;
};
$scope.$on('$destroy', function () {
ds.closeDialog();
$log.debug('OvIntentCtrl has been destroyed');
});
$scope.purgeIntents = function () {
executeActions("purgeIntents");
};
$log.debug('OvIntentCtrl has been created');
}]);
}());