| /*- |
| * 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. |
| |
| */ |
| |
| define(['./module'], function(controllers) { |
| 'use strict'; |
| controllers.controller('CreateRuleANCtrl', ['$scope', '$http', '$config', '$location', 'toaster', '$timeout', '$route', '$filter', function($scope, $http, $config, $location, toaster, $timeout, $route, $filter) { |
| console.log('CreateRuleANCtrl'); |
| $scope.currentStep = 1; |
| |
| var dbtreeUrl = $config.uri.dbtree; |
| var schemaDefinitionUrl = $config.uri.schemadefinition; |
| |
| $http.get(dbtreeUrl).success(function(data) { |
| var dbList = []; |
| if (data && data.length > 0) { |
| data.forEach(function(db) { |
| var dbNode = { |
| name: db.platform, |
| l1: true, |
| children: [] |
| }; |
| dbList.push(dbNode); |
| if (db.systems && db.systems.length > 0) { |
| db.systems.forEach(function(system) { |
| var dsNode = { |
| name: system.name, |
| l2: true, |
| children: [] |
| }; |
| dbNode.children.push(dsNode); |
| dsNode.parent = db; |
| |
| |
| if (system.assets && system.assets.length > 0) { |
| system.assets.sort(function(a, b){ |
| return (a.name<b.name?-1:(a.name>b.name?1:0)); |
| }); |
| system.assets.forEach(function(schema) { |
| var schemaNode = { |
| id: schema.id, |
| name: schema.name, |
| l3: true |
| }; |
| schemaNode.parent = dsNode; |
| dsNode.children.push(schemaNode); |
| }); |
| } |
| }); |
| } |
| |
| }); |
| } |
| $scope.dbList = dbList; |
| }); |
| |
| |
| //trigger after select schema for src |
| $scope.$watch('currentNode', function(newValue) { |
| // $scope.schemaCollection = null; |
| if (newValue && newValue.l3) { |
| |
| var sysName = newValue.parent.name; |
| $scope.form.basic.system = $filter('stridx')(sysName, 'modelsystem') + ''; |
| |
| //retrieve the schema definition and display the table |
| $http.get(schemaDefinitionUrl + '/' + newValue.id).success(function(data) { |
| $scope.schemaCollection = data.schema; |
| }); |
| } |
| }); |
| |
| |
| |
| |
| $scope.$on('$viewContentLoaded', function() { |
| $scope.$emit('initReq'); |
| resizeWindow(); |
| }); |
| |
| $scope.$on('resizeHandler', function(e) { |
| if ($route.current.$$route.controller == "CreateRuleANCtrl") { |
| $scope.$emit('initReq'); |
| resizeWindow(); |
| } |
| }); |
| |
| |
| function resizeWindow() { |
| var stepSelection = '.formStep[id=step-' + $scope.currentStep + ']'; |
| $(stepSelection).css({ |
| height: window.innerHeight - $(stepSelection).offset().top - $('#footerwrap').outerHeight() |
| }); |
| $('fieldset').height($(stepSelection).height() - $(stepSelection + '>.stepDesc').height() - $('.btn-container').height() - 80); |
| $('.y-scrollable').css({ |
| 'max-height': $('fieldset').height() - $('.add-dataset').outerHeight() |
| }); |
| //error message box position |
| $('.formula-text-mid').css({ |
| 'padding-top': (($('.formula-text-up').height() - $('.formula-text-mid').height()) + $('.formula-text-mid').height() / 2) + 'px' |
| }); |
| |
| } |
| |
| $scope.ruleTypes = $filter('strarr')('modeltype');//['Accuracy', 'Validity', 'Anomaly Detection', 'Publish Metrics']; |
| $scope.scheduleTypes = $filter('strarr')('scheduletype');//['Daily', 'Weekly', 'Monthly', 'Hourly']; |
| $scope.ruleSystems = $filter('strarr')('modelsystem');//['Bullseye', 'GPS', 'Hadoop', 'PDS', 'IDLS', 'Pulsar', 'Kafka']; |
| $scope.anTypes = ['', 'History Trend Detection', 'Bollinger Bands Detection', 'Deviation Detection']; |
| // $scope.ruleType = function(index){ |
| // var types = ['', 'Accuracy', 'Validity', 'Anomaly Detection', 'Publish Metrics']; |
| // return types[index]; |
| // } |
| |
| // $scope.scheduleType = function(index){ |
| // var types = ['', 'Daily', 'Weekly', 'Monthly', 'Hourly']; |
| // return types[index]; |
| // } |
| // |
| // $scope.ruleSystem = function(index){ |
| // var sys = ['', 'Bullseye', 'GPS', 'Hadoop', 'PDS', 'IDLS', 'Pulsar', 'Kafka']; |
| // return sys[index]; |
| // } |
| |
| // Initial Value |
| $scope.form = { |
| |
| next: function(form) { |
| |
| if (formValidation()) { |
| // form.$setPristine(); |
| nextStep(); |
| } else { |
| var field = null |
| , firstError = null ; |
| for (field in form) { |
| if (field[0] != '$') { |
| if (firstError === null && !form[field].$valid) { |
| firstError = form[field].$name; |
| } |
| |
| if (form[field].$pristine) { |
| form[field].$dirty = true; |
| } |
| } |
| } |
| |
| // angular.element('.ng-invalid[name=' + firstError + ']').focus(); |
| errorMessage($scope.currentStep); |
| } |
| }, |
| prev: function(form) { |
| //$scope.toTheTop(); |
| prevStep(); |
| }, |
| goTo: function(form, i) { |
| if (parseInt($scope.currentStep) > parseInt(i)) { |
| // $scope.toTheTop(); |
| goToStep(i); |
| |
| } else { |
| if (formValidation()) { |
| // $scope.toTheTop(); |
| if(i - parseInt($scope.currentStep) == 1){ |
| goToStep(i); |
| } |
| |
| } else { |
| errorMessage($scope.currentStep); |
| } |
| } |
| }, |
| submit: function(form) { |
| if (!form.$valid) { |
| var field = null |
| , firstError = null ; |
| for (field in form) { |
| if (field[0] != '$') { |
| if (firstError === null && !form[field].$valid) { |
| firstError = form[field].$name; |
| } |
| |
| if (form[field].$invalid) { |
| form[field].$dirty = true; |
| } |
| } |
| } |
| angular.element('.ng-invalid[name=' + firstError + ']').focus(); |
| errorMessage($scope.currentStep); |
| } else { |
| form.$setPristine(); |
| this.data={ |
| basic: this.basic, |
| extra: { |
| srcDb: $scope.currentNode.parent.parent.platform, |
| srcDataSet: $scope.currentNode.parent.name, |
| anType: this.anType |
| } |
| }; |
| |
| this.data.basic.dataaset = $scope.currentNode.name; |
| this.data.basic.dataasetId = $scope.currentNode.id; |
| // this.data.anType = this.anType; |
| |
| $('#confirm-an').modal('show'); |
| } |
| }, |
| |
| save: function() { |
| |
| //::TODO: Need to save the data to backend with POST/PUT method |
| console.log(JSON.stringify($scope.form.data)); |
| |
| var newModel = $config.uri.newAnomalyModel; |
| $http.post(newModel, this.data).success(function(data) { |
| // if(data.status=='0') |
| // { |
| $('#confirm-an').on('hidden.bs.modal', function(e) { |
| $('#confirm-an').off('hidden.bs.modal'); |
| $location.path('/rules'); |
| $scope.$apply(); |
| }); |
| $('#confirm-an').modal('hide'); |
| // } |
| // else |
| // { |
| // errorMessage(0, data.result); |
| // } |
| }).error(function(data){ |
| // errorMessage(0, 'Save model failed, please try again!'); |
| toaster.pop('error', 'Save model failed, please try again!', data.message); |
| }); |
| }, |
| |
| }; |
| |
| |
| var nextStep = function() { |
| $scope.currentStep++; |
| $timeout(function(){ |
| resizeWindow(); |
| }, 0); |
| } |
| ; |
| var prevStep = function() { |
| $scope.currentStep--; |
| $timeout(function(){ |
| resizeWindow(); |
| }, 0); |
| } |
| ; |
| var goToStep = function(i) { |
| $scope.currentStep = i; |
| $timeout(function(){ |
| resizeWindow(); |
| }, 0); |
| } |
| ; |
| |
| //validation only happens when going forward |
| var formValidation = function(step) { |
| // return true;//for dev purpose |
| if (step == undefined) { |
| step = $scope.currentStep; |
| } |
| if (step == 1) { |
| return $scope.currentNode?true:false; |
| } else if (step == 2) { |
| return true; |
| } else if (step == 3) { |
| return true; |
| //::TODO: also need to check if duplicated mappings or empty mappings |
| } |
| |
| return false; |
| } |
| |
| var errorMessage = function(i, msg) { |
| var errorMsgs = ['Please select one schema!','', 'please complete the form in this step before proceeding']; |
| if (!msg) { |
| toaster.pop('error', 'Error', errorMsgs[i - 1], 0); |
| } else { |
| toaster.pop('error', 'Error', msg, 0); |
| } |
| } |
| ; |
| } |
| ]); |
| }); |