ignite-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From akuznet...@apache.org
Subject [12/52] ignite git commit: Web Console beta-3.
Date Fri, 09 Sep 2016 03:26:40 GMT
http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/ModelNormalizer.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/app/services/ModelNormalizer.service.js b/modules/web-console/src/main/js/app/services/ModelNormalizer.service.js
deleted file mode 100644
index 4c7052b..0000000
--- a/modules/web-console/src/main/js/app/services/ModelNormalizer.service.js
+++ /dev/null
@@ -1,59 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-// Service to normalize objects for dirty checks.
-export default ['IgniteModelNormalizer', () => {
-    /**
-     * Normalize object for dirty checks.
-     *
-     * @param original
-     * @param dest
-     * @returns {*}
-     */
-    const normalize = (original, dest) => {
-        if (_.isUndefined(original))
-            return dest;
-
-        if (_.isObject(original)) {
-            _.forOwn(original, (value, key) => {
-                if (/\$\$hashKey/.test(key))
-                    return;
-
-                const attr = normalize(value);
-
-                if (!_.isNil(attr)) {
-                    dest = dest || {};
-                    dest[key] = attr;
-                }
-            });
-        } else if (_.isBoolean(original) && original === true)
-            dest = original;
-        else if ((_.isString(original) && original.length) || _.isNumber(original))
-            dest = original;
-        else if (_.isArray(original) && original.length)
-            dest = _.map(original, (value) => normalize(value, {}));
-
-        return dest;
-    };
-
-    return {
-        normalize,
-        isEqual(prev, cur) {
-            return _.isEqual(prev, normalize(cur));
-        }
-    };
-}];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/services/UnsavedChangesGuard.service.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/app/services/UnsavedChangesGuard.service.js b/modules/web-console/src/main/js/app/services/UnsavedChangesGuard.service.js
deleted file mode 100644
index 91244b0..0000000
--- a/modules/web-console/src/main/js/app/services/UnsavedChangesGuard.service.js
+++ /dev/null
@@ -1,38 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-const MSG = 'You have unsaved changes.\n\nAre you sure you want to discard them?';
-
-// Service that show confirmation about unsaved changes on user change location.
-export default ['IgniteUnsavedChangesGuard', ['$rootScope', ($root) => {
-    return {
-        install(scope, customDirtyCheck = () => scope.ui.inputForm.$dirty) {
-            scope.$on('$destroy', () => window.onbeforeunload = null);
-
-            const unbind = $root.$on('$stateChangeStart', (event) => {
-                if (_.get(scope, 'ui.inputForm', false) && customDirtyCheck()) {
-                    if (!confirm(MSG)) // eslint-disable-line no-alert
-                        event.preventDefault();
-                    else
-                        unbind();
-                }
-            });
-
-            window.onbeforeunload = () => _.get(scope, 'ui.inputForm.$dirty', false) ? MSG : null;
-        }
-    };
-}]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/app/vendor.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/app/vendor.js b/modules/web-console/src/main/js/app/vendor.js
deleted file mode 100644
index a8eeea7..0000000
--- a/modules/web-console/src/main/js/app/vendor.js
+++ /dev/null
@@ -1,54 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-import 'jquery';
-import 'angular';
-import 'angular-animate';
-import 'angular-sanitize';
-import 'angular-strap';
-import 'angular-strap/dist/angular-strap.tpl';
-import 'angular-socket-io';
-import 'angular-retina';
-import 'angular-ui-router';
-import 'ui-router-metatags/dist/ui-router-metatags';
-import 'angular-smart-table';
-import 'angular-ui-grid/ui-grid';
-import 'angular-drag-and-drop-lists';
-import 'angular-nvd3';
-import 'angular-tree-control';
-import 'angular-gridster';
-import 'bootstrap-sass/assets/javascripts/bootstrap/transition';
-import 'bootstrap-sass/assets/javascripts/bootstrap/carousel';
-import 'brace';
-import 'brace/mode/xml';
-import 'brace/mode/sql';
-import 'brace/mode/java';
-import 'brace/mode/dockerfile';
-import 'brace/mode/snippets';
-import 'brace/theme/chrome';
-import 'brace/ext/language_tools';
-import 'brace/ext/searchbox';
-import 'file-saver';
-import 'jszip';
-import 'nvd3';
-import 'query-command-supported';
-import 'angular-gridster/dist/angular-gridster.min.css';
-import 'angular-tree-control/css/tree-control-attribute.css';
-import 'angular-tree-control/css/tree-control.css';
-import 'angular-ui-grid/ui-grid.css';
-import 'angular-motion/dist/angular-motion.css';
-import 'nvd3/build/nv.d3.css';

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/controllers/admin-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/controllers/admin-controller.js b/modules/web-console/src/main/js/controllers/admin-controller.js
deleted file mode 100644
index 9e5aea7..0000000
--- a/modules/web-console/src/main/js/controllers/admin-controller.js
+++ /dev/null
@@ -1,91 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-// Controller for Admin screen.
-export default ['adminController', [
-    '$rootScope', '$scope', '$http', '$q', '$state', 'IgniteMessages', 'IgniteConfirm', 'User', 'IgniteCountries',
-    ($rootScope, $scope, $http, $q, $state, Messages, Confirm, User, Countries) => {
-        $scope.users = null;
-
-        const _reloadUsers = () => {
-            $http.post('/api/v1/admin/list')
-                .then(({data}) => {
-                    $scope.users = data;
-
-                    _.forEach($scope.users, (user) => {
-                        user.userName = user.firstName + ' ' + user.lastName;
-                        user.countryCode = Countries.getByName(user.country).code;
-                        user.label = user.userName + ' ' + user.email + ' ' +
-                            (user.company || '') + ' ' + (user.countryCode || '');
-                    });
-                })
-                .catch(Messages.showError);
-        };
-
-        _reloadUsers();
-
-        $scope.becomeUser = function(user) {
-            $http.get('/api/v1/admin/become', { params: {viewedUserId: user._id}})
-                .then(User.read)
-                .then((becomeUser) => {
-                    $rootScope.$broadcast('user', becomeUser);
-
-                    $state.go('base.configuration.clusters');
-                })
-                .catch(Messages.showError);
-        };
-
-        $scope.removeUser = (user) => {
-            Confirm.confirm('Are you sure you want to remove user: "' + user.userName + '"?')
-                .then(() => {
-                    $http.post('/api/v1/admin/remove', {userId: user._id})
-                        .success(() => {
-                            const i = _.findIndex($scope.users, (u) => u._id === user._id);
-
-                            if (i >= 0)
-                                $scope.users.splice(i, 1);
-
-                            Messages.showInfo('User has been removed: "' + user.userName + '"');
-                        })
-                        .error((err, status) => {
-                            if (status === 503)
-                                Messages.showInfo(err);
-                            else
-                                Messages.showError(Messages.errorMessage('Failed to remove user: ', err));
-                        });
-                });
-        };
-
-        $scope.toggleAdmin = (user) => {
-            if (user.adminChanging)
-                return;
-
-            user.adminChanging = true;
-
-            $http.post('/api/v1/admin/save', {userId: user._id, adminFlag: !user.admin})
-                .success(() => {
-                    user.admin = !user.admin;
-
-                    Messages.showInfo('Admin right was successfully toggled for user: "' + user.userName + '"');
-                })
-                .error((err) => {
-                    Messages.showError(Messages.errorMessage('Failed to toggle admin right for user: ', err));
-                })
-                .finally(() => user.adminChanging = false);
-        };
-    }
-]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/controllers/caches-controller.js b/modules/web-console/src/main/js/controllers/caches-controller.js
deleted file mode 100644
index cbd681e..0000000
--- a/modules/web-console/src/main/js/controllers/caches-controller.js
+++ /dev/null
@@ -1,470 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-// Controller for Caches screen.
-export default ['cachesController', [
-    '$scope', '$http', '$state', '$filter', '$timeout', 'IgniteLegacyUtils', 'IgniteMessages', 'IgniteConfirm', 'IgniteClone', 'IgniteLoading', 'IgniteModelNormalizer', 'IgniteUnsavedChangesGuard',
-    function($scope, $http, $state, $filter, $timeout, LegacyUtils, Messages, Confirm, Clone, Loading, ModelNormalizer, UnsavedChangesGuard) {
-        UnsavedChangesGuard.install($scope);
-
-        const emptyCache = {empty: true};
-
-        let __original_value;
-
-        const blank = {
-            evictionPolicy: {},
-            cacheStoreFactory: {},
-            nearConfiguration: {}
-        };
-
-        // We need to initialize backupItem with empty object in order to properly used from angular directives.
-        $scope.backupItem = emptyCache;
-
-        $scope.ui = LegacyUtils.formUI();
-        $scope.ui.activePanels = [0];
-        $scope.ui.topPanels = [0, 1, 2, 3];
-
-        $scope.hidePopover = LegacyUtils.hidePopover;
-        $scope.saveBtnTipText = LegacyUtils.saveBtnTipText;
-        $scope.widthIsSufficient = LegacyUtils.widthIsSufficient;
-
-        const showPopoverMessage = LegacyUtils.showPopoverMessage;
-
-        $scope.contentVisible = function() {
-            const item = $scope.backupItem;
-
-            return !item.empty && (!item._id || _.find($scope.displayedRows, {_id: item._id}));
-        };
-
-        $scope.toggleExpanded = function() {
-            $scope.ui.expanded = !$scope.ui.expanded;
-
-            LegacyUtils.hidePopover();
-        };
-
-        $scope.caches = [];
-        $scope.domains = [];
-
-        function _cacheLbl(cache) {
-            return cache.name + ', ' + cache.cacheMode + ', ' + cache.atomicityMode;
-        }
-
-        function selectFirstItem() {
-            if ($scope.caches.length > 0)
-                $scope.selectItem($scope.caches[0]);
-        }
-
-        function cacheDomains(item) {
-            return _.reduce($scope.domains, function(memo, domain) {
-                if (item && _.includes(item.domains, domain.value))
-                    memo.push(domain.meta);
-
-                return memo;
-            }, []);
-        }
-
-        Loading.start('loadingCachesScreen');
-
-        // When landing on the page, get caches and show them.
-        $http.post('/api/v1/configuration/caches/list')
-            .success(function(data) {
-                const validFilter = $filter('domainsValidation');
-
-                $scope.spaces = data.spaces;
-                $scope.caches = data.caches;
-
-                _.forEach($scope.caches, (cache) => cache.label = _cacheLbl(cache));
-
-                $scope.clusters = _.map(data.clusters, function(cluster) {
-                    return {
-                        value: cluster._id,
-                        label: cluster.name,
-                        caches: cluster.caches
-                    };
-                });
-
-                $scope.domains = _.sortBy(_.map(validFilter(data.domains, true, false), function(domain) {
-                    return {
-                        value: domain._id,
-                        label: domain.valueType,
-                        kind: domain.kind,
-                        meta: domain
-                    };
-                }), 'label');
-
-                if ($state.params.linkId)
-                    $scope.createItem($state.params.linkId);
-                else {
-                    const lastSelectedCache = angular.fromJson(sessionStorage.lastSelectedCache);
-
-                    if (lastSelectedCache) {
-                        const idx = _.findIndex($scope.caches, function(cache) {
-                            return cache._id === lastSelectedCache;
-                        });
-
-                        if (idx >= 0)
-                            $scope.selectItem($scope.caches[idx]);
-                        else {
-                            sessionStorage.removeItem('lastSelectedCache');
-
-                            selectFirstItem();
-                        }
-                    }
-                    else
-                        selectFirstItem();
-                }
-
-                $scope.$watch('ui.inputForm.$valid', function(valid) {
-                    if (valid && ModelNormalizer.isEqual(__original_value, $scope.backupItem))
-                        $scope.ui.inputForm.$dirty = false;
-                });
-
-                $scope.$watch('backupItem', function(val) {
-                    const form = $scope.ui.inputForm;
-
-                    if (form.$pristine || (form.$valid && ModelNormalizer.isEqual(__original_value, val)))
-                        form.$setPristine();
-                    else
-                        form.$setDirty();
-                }, true);
-            })
-            .catch(Messages.showError)
-            .finally(function() {
-                $scope.ui.ready = true;
-                $scope.ui.inputForm.$setPristine();
-                Loading.finish('loadingCachesScreen');
-            });
-
-        $scope.selectItem = function(item, backup) {
-            function selectItem() {
-                $scope.selectedItem = item;
-
-                if (item && !_.get(item.cacheStoreFactory.CacheJdbcBlobStoreFactory, 'connectVia'))
-                    _.set(item.cacheStoreFactory, 'CacheJdbcBlobStoreFactory.connectVia', 'DataSource');
-
-                try {
-                    if (item && item._id)
-                        sessionStorage.lastSelectedCache = angular.toJson(item._id);
-                    else
-                        sessionStorage.removeItem('lastSelectedCache');
-                }
-                catch (ignored) {
-                    // No-op.
-                }
-
-                if (backup)
-                    $scope.backupItem = backup;
-                else if (item)
-                    $scope.backupItem = angular.copy(item);
-                else
-                    $scope.backupItem = emptyCache;
-
-                $scope.backupItem = angular.merge({}, blank, $scope.backupItem);
-
-                __original_value = ModelNormalizer.normalize($scope.backupItem);
-
-                if (LegacyUtils.getQueryVariable('new'))
-                    $state.go('base.configuration.caches');
-            }
-
-            LegacyUtils.confirmUnsavedChanges($scope.backupItem && $scope.ui.inputForm.$dirty, selectItem);
-        };
-
-        $scope.linkId = () => $scope.backupItem._id ? $scope.backupItem._id : 'create';
-
-        function prepareNewItem(linkId) {
-            return {
-                space: $scope.spaces[0]._id,
-                cacheMode: 'PARTITIONED',
-                atomicityMode: 'ATOMIC',
-                readFromBackup: true,
-                copyOnRead: true,
-                clusters: linkId && _.find($scope.clusters, {value: linkId})
-                    ? [linkId] : _.map($scope.clusters, function(cluster) { return cluster.value; }),
-                domains: linkId && _.find($scope.domains, { value: linkId }) ? [linkId] : [],
-                cacheStoreFactory: {CacheJdbcBlobStoreFactory: {connectVia: 'DataSource'}}
-            };
-        }
-
-        // Add new cache.
-        $scope.createItem = function(linkId) {
-            $timeout(() => LegacyUtils.ensureActivePanel($scope.ui, 'general', 'cacheName'));
-
-            $scope.selectItem(null, prepareNewItem(linkId));
-        };
-
-        function cacheClusters() {
-            return _.filter($scope.clusters, (cluster) => _.includes($scope.backupItem.clusters, cluster.value));
-        }
-
-        function clusterCaches(cluster) {
-            const caches = _.filter($scope.caches,
-                (cache) => cache._id !== $scope.backupItem._id && _.includes(cluster.caches, cache._id));
-
-            caches.push($scope.backupItem);
-
-            return caches;
-        }
-
-        function checkDataSources() {
-            const clusters = cacheClusters();
-
-            let checkRes = {checked: true};
-
-            const failCluster = _.find(clusters, (cluster) => {
-                const caches = clusterCaches(cluster);
-
-                checkRes = LegacyUtils.checkCachesDataSources(caches, $scope.backupItem);
-
-                return !checkRes.checked;
-            });
-
-            if (!checkRes.checked) {
-                return showPopoverMessage($scope.ui, 'store', checkRes.firstCache.cacheStoreFactory.kind === 'CacheJdbcPojoStoreFactory' ? 'pojoDialect' : 'blobDialect',
-                    'Found cache "' + checkRes.secondCache.name + '" in cluster "' + failCluster.label + '" ' +
-                    'with the same data source bean name "' + checkRes.firstCache.cacheStoreFactory[checkRes.firstCache.cacheStoreFactory.kind].dataSourceBean +
-                    '" and different database: "' + LegacyUtils.cacheStoreJdbcDialectsLabel(checkRes.firstDB) + '" in current cache and "' +
-                    LegacyUtils.cacheStoreJdbcDialectsLabel(checkRes.secondDB) + '" in "' + checkRes.secondCache.name + '"', 10000);
-            }
-
-            return true;
-        }
-
-        function checkSQLSchemas() {
-            const clusters = cacheClusters();
-
-            let checkRes = {checked: true};
-
-            const failCluster = _.find(clusters, (cluster) => {
-                const caches = clusterCaches(cluster);
-
-                checkRes = LegacyUtils.checkCacheSQLSchemas(caches, $scope.backupItem);
-
-                return !checkRes.checked;
-            });
-
-            if (!checkRes.checked) {
-                return showPopoverMessage($scope.ui, 'query', 'sqlSchema',
-                    'Found cache "' + checkRes.secondCache.name + '" in cluster "' + failCluster.label + '" ' +
-                    'with the same SQL schema name "' + checkRes.firstCache.sqlSchema + '"', 10000);
-            }
-
-            return true;
-        }
-
-        function checkStoreFactoryBean(storeFactory, beanFieldId) {
-            if (!LegacyUtils.isValidJavaIdentifier('Data source bean', storeFactory.dataSourceBean, beanFieldId, $scope.ui, 'store'))
-                return false;
-
-            return checkDataSources();
-        }
-
-        function checkStoreFactory(item) {
-            const cacheStoreFactorySelected = item.cacheStoreFactory && item.cacheStoreFactory.kind;
-
-            if (cacheStoreFactorySelected) {
-                const storeFactory = item.cacheStoreFactory[item.cacheStoreFactory.kind];
-
-                if (item.cacheStoreFactory.kind === 'CacheJdbcPojoStoreFactory' && !checkStoreFactoryBean(storeFactory, 'pojoDataSourceBean'))
-                    return false;
-
-                if (item.cacheStoreFactory.kind === 'CacheJdbcBlobStoreFactory' && storeFactory.connectVia !== 'URL'
-                    && !checkStoreFactoryBean(storeFactory, 'blobDataSourceBean'))
-                    return false;
-            }
-
-            if ((item.readThrough || item.writeThrough) && !cacheStoreFactorySelected)
-                return showPopoverMessage($scope.ui, 'store', 'cacheStoreFactory', (item.readThrough ? 'Read' : 'Write') + ' through are enabled but store is not configured!');
-
-            if (item.writeBehindEnabled && !cacheStoreFactorySelected)
-                return showPopoverMessage($scope.ui, 'store', 'cacheStoreFactory', 'Write behind enabled but store is not configured!');
-
-            if (cacheStoreFactorySelected && !item.readThrough && !item.writeThrough)
-                return showPopoverMessage($scope.ui, 'store', 'readThroughTooltip', 'Store is configured but read/write through are not enabled!');
-
-            return true;
-        }
-
-        // Check cache logical consistency.
-        function validate(item) {
-            LegacyUtils.hidePopover();
-
-            if (LegacyUtils.isEmptyString(item.name))
-                return showPopoverMessage($scope.ui, 'general', 'cacheName', 'Cache name should not be empty!');
-
-            if (item.memoryMode === 'ONHEAP_TIERED' && item.offHeapMaxMemory > 0 && !LegacyUtils.isDefined(item.evictionPolicy.kind))
-                return showPopoverMessage($scope.ui, 'memory', 'evictionPolicyKind', 'Eviction policy should not be configured!');
-
-            if (!LegacyUtils.checkFieldValidators($scope.ui))
-                return false;
-
-            if (item.memoryMode === 'OFFHEAP_VALUES' && !_.isEmpty(item.domains))
-                return showPopoverMessage($scope.ui, 'memory', 'memoryMode', 'Query indexing could not be enabled while values are stored off-heap!');
-
-            if (item.memoryMode === 'OFFHEAP_TIERED' && (!LegacyUtils.isDefined(item.offHeapMaxMemory) || item.offHeapMaxMemory < 0))
-                return showPopoverMessage($scope.ui, 'memory', 'offHeapMaxMemory', 'Off-heap max memory should be specified!');
-
-            if (!checkSQLSchemas())
-                return false;
-
-            if (!checkStoreFactory(item))
-                return false;
-
-            if (item.writeBehindFlushSize === 0 && item.writeBehindFlushFrequency === 0)
-                return showPopoverMessage($scope.ui, 'store', 'writeBehindFlushSize', 'Both "Flush frequency" and "Flush size" are not allowed as 0!');
-
-            return true;
-        }
-
-        // Save cache in database.
-        function save(item) {
-            $http.post('/api/v1/configuration/caches/save', item)
-                .success(function(_id) {
-                    item.label = _cacheLbl(item);
-
-                    $scope.ui.inputForm.$setPristine();
-
-                    const idx = _.findIndex($scope.caches, function(cache) {
-                        return cache._id === _id;
-                    });
-
-                    if (idx >= 0)
-                        angular.merge($scope.caches[idx], item);
-                    else {
-                        item._id = _id;
-                        $scope.caches.push(item);
-                    }
-
-                    _.forEach($scope.clusters, (cluster) => {
-                        if (_.includes(item.clusters, cluster.value))
-                            cluster.caches = _.union(cluster.caches, [_id]);
-                        else
-                            _.remove(cluster.caches, (id) => id === _id);
-                    });
-
-                    _.forEach($scope.domains, (domain) => {
-                        if (_.includes(item.domains, domain.value))
-                            domain.meta.caches = _.union(domain.meta.caches, [_id]);
-                        else
-                            _.remove(domain.meta.caches, (id) => id === _id);
-                    });
-
-                    $scope.selectItem(item);
-
-                    Messages.showInfo('Cache "' + item.name + '" saved.');
-                })
-                .error(Messages.showError);
-        }
-
-        // Save cache.
-        $scope.saveItem = function() {
-            const item = $scope.backupItem;
-
-            angular.extend(item, LegacyUtils.autoCacheStoreConfiguration(item, cacheDomains(item)));
-
-            if (validate(item))
-                save(item);
-        };
-
-        function _cacheNames() {
-            return _.map($scope.caches, function(cache) {
-                return cache.name;
-            });
-        }
-
-        // Clone cache with new name.
-        $scope.cloneItem = function() {
-            if (validate($scope.backupItem)) {
-                Clone.confirm($scope.backupItem.name, _cacheNames()).then(function(newName) {
-                    const item = angular.copy($scope.backupItem);
-
-                    delete item._id;
-
-                    item.name = newName;
-
-                    delete item.sqlSchema;
-
-                    save(item);
-                });
-            }
-        };
-
-        // Remove cache from db.
-        $scope.removeItem = function() {
-            const selectedItem = $scope.selectedItem;
-
-            Confirm.confirm('Are you sure you want to remove cache: "' + selectedItem.name + '"?')
-                .then(function() {
-                    const _id = selectedItem._id;
-
-                    $http.post('/api/v1/configuration/caches/remove', {_id})
-                        .success(function() {
-                            Messages.showInfo('Cache has been removed: ' + selectedItem.name);
-
-                            const caches = $scope.caches;
-
-                            const idx = _.findIndex(caches, function(cache) {
-                                return cache._id === _id;
-                            });
-
-                            if (idx >= 0) {
-                                caches.splice(idx, 1);
-
-                                if (caches.length > 0)
-                                    $scope.selectItem(caches[0]);
-                                else {
-                                    $scope.backupItem = emptyCache;
-                                    $scope.ui.inputForm.$setPristine();
-                                }
-
-                                _.forEach($scope.clusters, (cluster) => _.remove(cluster.caches, (id) => id === _id));
-                                _.forEach($scope.domains, (domain) => _.remove(domain.meta.caches, (id) => id === _id));
-                            }
-                        })
-                        .error(Messages.showError);
-                });
-        };
-
-        // Remove all caches from db.
-        $scope.removeAllItems = function() {
-            Confirm.confirm('Are you sure you want to remove all caches?')
-                .then(function() {
-                    $http.post('/api/v1/configuration/caches/remove/all')
-                        .success(function() {
-                            Messages.showInfo('All caches have been removed');
-
-                            $scope.caches = [];
-
-                            _.forEach($scope.clusters, (cluster) => cluster.caches = []);
-                            _.forEach($scope.domains, (domain) => domain.meta.caches = []);
-
-                            $scope.backupItem = emptyCache;
-                            $scope.ui.inputForm.$setPristine();
-                        })
-                        .error(Messages.showError);
-                });
-        };
-
-        $scope.resetAll = function() {
-            Confirm.confirm('Are you sure you want to undo all changes for current cache?')
-                .then(function() {
-                    $scope.backupItem = $scope.selectedItem ? angular.copy($scope.selectedItem) : prepareNewItem();
-                    $scope.ui.inputForm.$setPristine();
-                });
-        };
-    }
-]];

http://git-wip-us.apache.org/repos/asf/ignite/blob/6af6560a/modules/web-console/src/main/js/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/controllers/clusters-controller.js b/modules/web-console/src/main/js/controllers/clusters-controller.js
deleted file mode 100644
index 5f86d08..0000000
--- a/modules/web-console/src/main/js/controllers/clusters-controller.js
+++ /dev/null
@@ -1,626 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You 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.
- */
-
-// Controller for Clusters screen.
-export default ['clustersController', [
-    '$rootScope', '$scope', '$http', '$state', '$timeout', 'IgniteLegacyUtils', 'IgniteMessages', 'IgniteConfirm', 'IgniteClone', 'IgniteLoading', 'IgniteModelNormalizer', 'IgniteUnsavedChangesGuard', 'igniteEventGroups', 'DemoInfo', 'IgniteLegacyTable',
-    function($root, $scope, $http, $state, $timeout, LegacyUtils, Messages, Confirm, Clone, Loading, ModelNormalizer, UnsavedChangesGuard, igniteEventGroups, DemoInfo, LegacyTable) {
-        UnsavedChangesGuard.install($scope);
-
-        const emptyCluster = {empty: true};
-
-        let __original_value;
-
-        const blank = {
-            atomicConfiguration: {},
-            binaryConfiguration: {},
-            communication: {},
-            connector: {},
-            discovery: {},
-            marshaller: {},
-            sslContextFactory: {},
-            swapSpaceSpi: {},
-            transactionConfiguration: {},
-            collision: {}
-        };
-
-        const pairFields = {
-            attributes: {id: 'Attribute', idPrefix: 'Key', searchCol: 'name', valueCol: 'key', dupObjName: 'name', group: 'attributes'},
-            'collision.JobStealing.stealingAttributes': {id: 'CAttribute', idPrefix: 'Key', searchCol: 'name', valueCol: 'key', dupObjName: 'name', group: 'collision'}
-        };
-
-        const showPopoverMessage = LegacyUtils.showPopoverMessage;
-
-        $scope.tablePairValid = function(item, field, index) {
-            const pairField = pairFields[field.model];
-
-            const pairValue = LegacyTable.tablePairValue(field, index);
-
-            if (pairField) {
-                const model = _.get(item, field.model);
-
-                if (LegacyUtils.isDefined(model)) {
-                    const idx = _.findIndex(model, (pair) => {
-                        return pair[pairField.searchCol] === pairValue[pairField.valueCol];
-                    });
-
-                    // Found duplicate by key.
-                    if (idx >= 0 && idx !== index)
-                        return showPopoverMessage($scope.ui, pairField.group, LegacyTable.tableFieldId(index, pairField.idPrefix + pairField.id), 'Attribute with such ' + pairField.dupObjName + ' already exists!');
-                }
-            }
-
-            return true;
-        };
-
-        $scope.tableSave = function(field, index, stopEdit) {
-            if (LegacyTable.tablePairSaveVisible(field, index))
-                return LegacyTable.tablePairSave($scope.tablePairValid, $scope.backupItem, field, index, stopEdit);
-
-            return true;
-        };
-
-        $scope.tableReset = (trySave) => {
-            const field = LegacyTable.tableField();
-
-            if (trySave && LegacyUtils.isDefined(field) && !$scope.tableSave(field, LegacyTable.tableEditedRowIndex(), true))
-                return false;
-
-            LegacyTable.tableReset();
-
-            return true;
-        };
-
-        $scope.tableNewItem = function(field) {
-            if ($scope.tableReset(true)) {
-                if (field.type === 'failoverSpi') {
-                    if (LegacyUtils.isDefined($scope.backupItem.failoverSpi))
-                        $scope.backupItem.failoverSpi.push({});
-                    else
-                        $scope.backupItem.failoverSpi = {};
-                }
-                else
-                    LegacyTable.tableNewItem(field);
-            }
-        };
-
-        $scope.tableNewItemActive = LegacyTable.tableNewItemActive;
-
-        $scope.tableStartEdit = function(item, field, index) {
-            if ($scope.tableReset(true))
-                LegacyTable.tableStartEdit(item, field, index, $scope.tableSave);
-        };
-
-        $scope.tableEditing = LegacyTable.tableEditing;
-
-        $scope.tableRemove = function(item, field, index) {
-            if ($scope.tableReset(true))
-                LegacyTable.tableRemove(item, field, index);
-        };
-
-        $scope.tablePairSave = LegacyTable.tablePairSave;
-        $scope.tablePairSaveVisible = LegacyTable.tablePairSaveVisible;
-
-        $scope.attributesTbl = {
-            type: 'attributes',
-            model: 'attributes',
-            focusId: 'Attribute',
-            ui: 'table-pair',
-            keyName: 'name',
-            valueName: 'value',
-            save: $scope.tableSave
-        };
-
-        $scope.stealingAttributesTbl = {
-            type: 'attributes',
-            model: 'collision.JobStealing.stealingAttributes',
-            focusId: 'CAttribute',
-            ui: 'table-pair',
-            keyName: 'name',
-            valueName: 'value',
-            save: $scope.tableSave
-        };
-
-        $scope.removeFailoverConfiguration = function(idx) {
-            $scope.backupItem.failoverSpi.splice(idx, 1);
-        };
-
-        // We need to initialize backupItem with empty object in order to properly used from angular directives.
-        $scope.backupItem = emptyCluster;
-
-        $scope.ui = LegacyUtils.formUI();
-        $scope.ui.activePanels = [0];
-        $scope.ui.topPanels = [0];
-
-        $scope.hidePopover = LegacyUtils.hidePopover;
-        $scope.saveBtnTipText = LegacyUtils.saveBtnTipText;
-        $scope.widthIsSufficient = LegacyUtils.widthIsSufficient;
-
-        $scope.contentVisible = function() {
-            const item = $scope.backupItem;
-
-            return !item.empty && (!item._id || _.find($scope.displayedRows, {_id: item._id}));
-        };
-
-        $scope.toggleExpanded = function() {
-            $scope.ui.expanded = !$scope.ui.expanded;
-
-            LegacyUtils.hidePopover();
-        };
-
-        $scope.discoveries = [
-            {value: 'Vm', label: 'Static IPs'},
-            {value: 'Multicast', label: 'Multicast'},
-            {value: 'S3', label: 'AWS S3'},
-            {value: 'Cloud', label: 'Apache jclouds'},
-            {value: 'GoogleStorage', label: 'Google cloud storage'},
-            {value: 'Jdbc', label: 'JDBC'},
-            {value: 'SharedFs', label: 'Shared filesystem'},
-            {value: 'ZooKeeper', label: 'Apache ZooKeeper'}
-        ];
-
-        $scope.swapSpaceSpis = [
-            {value: 'FileSwapSpaceSpi', label: 'File-based swap'},
-            {value: null, label: 'Not set'}
-        ];
-
-        $scope.eventGroups = igniteEventGroups;
-
-        $scope.clusters = [];
-
-        function _clusterLbl(cluster) {
-            return cluster.name + ', ' + _.find($scope.discoveries, {value: cluster.discovery.kind}).label;
-        }
-
-        function selectFirstItem() {
-            if ($scope.clusters.length > 0)
-                $scope.selectItem($scope.clusters[0]);
-        }
-
-        Loading.start('loadingClustersScreen');
-
-        // When landing on the page, get clusters and show them.
-        $http.post('/api/v1/configuration/clusters/list')
-            .success(function(data) {
-                $scope.spaces = data.spaces;
-                $scope.clusters = data.clusters;
-                $scope.caches = _.map(data.caches, (cache) => ({value: cache._id, label: cache.name, cache}));
-                $scope.igfss = _.map(data.igfss, (igfs) => ({value: igfs._id, label: igfs.name, igfs}));
-
-                _.forEach($scope.clusters, (cluster) => {
-                    cluster.label = _clusterLbl(cluster);
-
-                    if (!cluster.collision || !cluster.collision.kind)
-                        cluster.collision = {kind: 'Noop', JobStealing: {stealingEnabled: true}, PriorityQueue: {starvationPreventionEnabled: true}};
-
-                    if (!cluster.failoverSpi)
-                        cluster.failoverSpi = [];
-
-                    if (!cluster.logger)
-                        cluster.logger = {Log4j: { mode: 'Default'}};
-                });
-
-                if ($state.params.linkId)
-                    $scope.createItem($state.params.linkId);
-                else {
-                    const lastSelectedCluster = angular.fromJson(sessionStorage.lastSelectedCluster);
-
-                    if (lastSelectedCluster) {
-                        const idx = _.findIndex($scope.clusters, (cluster) => cluster._id === lastSelectedCluster);
-
-                        if (idx >= 0)
-                            $scope.selectItem($scope.clusters[idx]);
-                        else {
-                            sessionStorage.removeItem('lastSelectedCluster');
-
-                            selectFirstItem();
-                        }
-                    }
-                    else
-                        selectFirstItem();
-                }
-
-                $scope.$watch('ui.inputForm.$valid', function(valid) {
-                    if (valid && ModelNormalizer.isEqual(__original_value, $scope.backupItem))
-                        $scope.ui.inputForm.$dirty = false;
-                });
-
-                $scope.$watch('backupItem', function(val) {
-                    const form = $scope.ui.inputForm;
-
-                    if (form.$pristine || (form.$valid && ModelNormalizer.isEqual(__original_value, val)))
-                        form.$setPristine();
-                    else
-                        form.$setDirty();
-                }, true);
-
-                if ($root.IgniteDemoMode && sessionStorage.showDemoInfo !== 'true') {
-                    sessionStorage.showDemoInfo = 'true';
-
-                    DemoInfo.show();
-                }
-            })
-            .catch(Messages.showError)
-            .finally(function() {
-                $scope.ui.ready = true;
-                $scope.ui.inputForm.$setPristine();
-                Loading.finish('loadingClustersScreen');
-            });
-
-        $scope.selectItem = function(item, backup) {
-            function selectItem() {
-                $scope.selectedItem = item;
-
-                try {
-                    if (item && item._id)
-                        sessionStorage.lastSelectedCluster = angular.toJson(item._id);
-                    else
-                        sessionStorage.removeItem('lastSelectedCluster');
-                }
-                catch (ignored) {
-                    // No-op.
-                }
-
-                if (backup)
-                    $scope.backupItem = backup;
-                else if (item)
-                    $scope.backupItem = angular.copy(item);
-                else
-                    $scope.backupItem = emptyCluster;
-
-                $scope.backupItem = angular.merge({}, blank, $scope.backupItem);
-
-                __original_value = ModelNormalizer.normalize($scope.backupItem);
-
-                if (LegacyUtils.getQueryVariable('new'))
-                    $state.go('base.configuration.clusters');
-            }
-
-            LegacyUtils.confirmUnsavedChanges($scope.backupItem && $scope.ui.inputForm.$dirty, selectItem);
-        };
-
-        $scope.linkId = () => $scope.backupItem._id ? $scope.backupItem._id : 'create';
-
-        function prepareNewItem(linkId) {
-            return angular.merge({}, blank, {
-                space: $scope.spaces[0]._id,
-                discovery: {kind: 'Multicast', Vm: {addresses: ['127.0.0.1:47500..47510']}, Multicast: {addresses: ['127.0.0.1:47500..47510']}},
-                binaryConfiguration: {typeConfigurations: [], compactFooter: true},
-                communication: {tcpNoDelay: true},
-                connector: {noDelay: true},
-                collision: {kind: 'Noop', JobStealing: {stealingEnabled: true}, PriorityQueue: {starvationPreventionEnabled: true}},
-                failoverSpi: [],
-                logger: {Log4j: { mode: 'Default'}},
-                caches: linkId && _.find($scope.caches, {value: linkId}) ? [linkId] : [],
-                igfss: linkId && _.find($scope.igfss, {value: linkId}) ? [linkId] : []
-            });
-        }
-
-        // Add new cluster.
-        $scope.createItem = function(linkId) {
-            $timeout(() => LegacyUtils.ensureActivePanel($scope.ui, 'general', 'clusterName'));
-
-            $scope.selectItem(null, prepareNewItem(linkId));
-        };
-
-        $scope.indexOfCache = function(cacheId) {
-            return _.findIndex($scope.caches, (cache) => cache.value === cacheId);
-        };
-
-        function clusterCaches(item) {
-            return _.filter(_.map($scope.caches, (scopeCache) => scopeCache.cache),
-                (cache) => _.includes(item.caches, cache._id));
-        }
-
-        function checkCacheDatasources(item) {
-            const caches = clusterCaches(item);
-
-            const checkRes = LegacyUtils.checkCachesDataSources(caches);
-
-            if (!checkRes.checked) {
-                return showPopoverMessage($scope.ui, 'general', 'caches',
-                    'Found caches "' + checkRes.firstCache.name + '" and "' + checkRes.secondCache.name + '" ' +
-                    'with the same data source bean name "' + checkRes.firstCache.cacheStoreFactory[checkRes.firstCache.cacheStoreFactory.kind].dataSourceBean +
-                    '" and different databases: "' + LegacyUtils.cacheStoreJdbcDialectsLabel(checkRes.firstDB) + '" in "' + checkRes.firstCache.name + '" and "' +
-                    LegacyUtils.cacheStoreJdbcDialectsLabel(checkRes.secondDB) + '" in "' + checkRes.secondCache.name + '"', 10000);
-            }
-
-            return true;
-        }
-
-        function checkCacheSQLSchemas(item) {
-            const caches = clusterCaches(item);
-
-            const checkRes = LegacyUtils.checkCacheSQLSchemas(caches);
-
-            if (!checkRes.checked) {
-                return showPopoverMessage($scope.ui, 'general', 'caches',
-                    'Found caches "' + checkRes.firstCache.name + '" and "' + checkRes.secondCache.name + '" ' +
-                    'with the same SQL schema name "' + checkRes.firstCache.sqlSchema + '"', 10000);
-            }
-
-            return true;
-        }
-
-        function checkBinaryConfiguration(item) {
-            const b = item.binaryConfiguration;
-
-            if (LegacyUtils.isDefined(b)) {
-                if (!_.isEmpty(b.typeConfigurations)) {
-                    for (let typeIx = 0; typeIx < b.typeConfigurations.length; typeIx++) {
-                        const type = b.typeConfigurations[typeIx];
-
-                        if (LegacyUtils.isEmptyString(type.typeName))
-                            return showPopoverMessage($scope.ui, 'binary', 'typeName' + typeIx, 'Type name should be specified!');
-
-                        if (_.find(b.typeConfigurations, (t, ix) => ix < typeIx && t.typeName === type.typeName))
-                            return showPopoverMessage($scope.ui, 'binary', 'typeName' + typeIx, 'Type with such name is already specified!');
-                    }
-                }
-            }
-
-            return true;
-        }
-
-        function checkCommunicationConfiguration(item) {
-            const c = item.communication;
-
-            if (LegacyUtils.isDefined(c)) {
-                if (LegacyUtils.isDefined(c.unacknowledgedMessagesBufferSize)) {
-                    if (LegacyUtils.isDefined(c.messageQueueLimit) && c.unacknowledgedMessagesBufferSize < 5 * c.messageQueueLimit)
-                        return showPopoverMessage($scope.ui, 'communication', 'unacknowledgedMessagesBufferSize', 'Maximum number of stored unacknowledged messages should be at least 5 * message queue limit!');
-
-                    if (LegacyUtils.isDefined(c.ackSendThreshold) && c.unacknowledgedMessagesBufferSize < 5 * c.ackSendThreshold)
-                        return showPopoverMessage($scope.ui, 'communication', 'unacknowledgedMessagesBufferSize', 'Maximum number of stored unacknowledged messages should be at least 5 * ack send threshold!');
-                }
-
-                if (c.sharedMemoryPort === 0)
-                    return showPopoverMessage($scope.ui, 'communication', 'sharedMemoryPort', 'Shared memory port should be more than "0" or equals to "-1"!');
-            }
-
-            return true;
-        }
-
-        function checkDiscoveryConfiguration(item) {
-            const d = item.discovery;
-
-            if (d) {
-                if ((_.isNil(d.maxAckTimeout) ? 600000 : d.maxAckTimeout) < (d.ackTimeout || 5000))
-                    return showPopoverMessage($scope.ui, 'discovery', 'ackTimeout', 'Acknowledgement timeout should be less than max acknowledgement timeout!');
-
-                if (d.kind === 'Vm' && d.Vm && d.Vm.addresses.length === 0)
-                    return showPopoverMessage($scope.ui, 'general', 'addresses', 'Addresses are not specified!');
-            }
-
-            return true;
-        }
-
-        function checkSwapConfiguration(item) {
-            const swapKind = item.swapSpaceSpi && item.swapSpaceSpi.kind;
-
-            if (swapKind && item.swapSpaceSpi[swapKind]) {
-                const swap = item.swapSpaceSpi[swapKind];
-
-                const sparsity = swap.maximumSparsity;
-
-                if (LegacyUtils.isDefined(sparsity) && (sparsity < 0 || sparsity >= 1))
-                    return showPopoverMessage($scope.ui, 'swap', 'maximumSparsity', 'Maximum sparsity should be more or equal 0 and less than 1!');
-
-                const readStripesNumber = swap.readStripesNumber;
-
-                if (readStripesNumber && !(readStripesNumber === -1 || (readStripesNumber & (readStripesNumber - 1)) === 0))
-                    return showPopoverMessage($scope.ui, 'swap', 'readStripesNumber', 'Read stripe size must be positive and power of two!');
-            }
-
-            return true;
-        }
-
-        function checkSslConfiguration(item) {
-            const r = item.connector;
-
-            if (LegacyUtils.isDefined(r)) {
-                if (r.sslEnabled && LegacyUtils.isEmptyString(r.sslFactory))
-                    return showPopoverMessage($scope.ui, 'connector', 'connectorSslFactory', 'SSL factory should not be empty!');
-            }
-
-            if (item.sslEnabled) {
-                if (!LegacyUtils.isDefined(item.sslContextFactory) || LegacyUtils.isEmptyString(item.sslContextFactory.keyStoreFilePath))
-                    return showPopoverMessage($scope.ui, 'sslConfiguration', 'keyStoreFilePath', 'Key store file should not be empty!');
-
-                if (LegacyUtils.isEmptyString(item.sslContextFactory.trustStoreFilePath) && _.isEmpty(item.sslContextFactory.trustManagers))
-                    return showPopoverMessage($scope.ui, 'sslConfiguration', 'sslConfiguration-title', 'Trust storage file or managers should be configured!');
-            }
-
-            return true;
-        }
-
-        function checkPoolSizes(item) {
-            if (item.rebalanceThreadPoolSize && item.systemThreadPoolSize && item.systemThreadPoolSize <= item.rebalanceThreadPoolSize)
-                return showPopoverMessage($scope.ui, 'pools', 'rebalanceThreadPoolSize', 'Rebalance thread pool size exceed or equals System thread pool size!');
-
-            return true;
-        }
-
-        // Check cluster logical consistency.
-        function validate(item) {
-            LegacyUtils.hidePopover();
-
-            if (LegacyUtils.isEmptyString(item.name))
-                return showPopoverMessage($scope.ui, 'general', 'clusterName', 'Cluster name should not be empty!');
-
-            if (!LegacyUtils.checkFieldValidators($scope.ui))
-                return false;
-
-            if (!checkCacheSQLSchemas(item))
-                return false;
-
-            if (!checkCacheDatasources(item))
-                return false;
-
-            if (!checkBinaryConfiguration(item))
-                return false;
-
-            if (!checkCommunicationConfiguration(item))
-                return false;
-
-            if (!checkDiscoveryConfiguration(item))
-                return false;
-
-            if (!checkSwapConfiguration(item))
-                return false;
-
-            if (!checkSslConfiguration(item))
-                return false;
-
-            if (!checkPoolSizes(item))
-                return false;
-
-            return true;
-        }
-
-        // Save cluster in database.
-        function save(item) {
-            $http.post('/api/v1/configuration/clusters/save', item)
-                .success(function(_id) {
-                    item.label = _clusterLbl(item);
-
-                    $scope.ui.inputForm.$setPristine();
-
-                    const idx = _.findIndex($scope.clusters, (cluster) => cluster._id === _id);
-
-                    if (idx >= 0)
-                        angular.merge($scope.clusters[idx], item);
-                    else {
-                        item._id = _id;
-                        $scope.clusters.push(item);
-                    }
-
-                    _.forEach($scope.caches, (cache) => {
-                        if (_.includes(item.caches, cache.value))
-                            cache.cache.clusters = _.union(cache.cache.clusters, [_id]);
-                        else
-                            _.remove(cache.cache.clusters, (id) => id === _id);
-                    });
-
-                    _.forEach($scope.igfss, (igfs) => {
-                        if (_.includes(item.igfss, igfs.value))
-                            igfs.igfs.clusters = _.union(igfs.igfs.clusters, [_id]);
-                        else
-                            _.remove(igfs.igfs.clusters, (id) => id === _id);
-                    });
-
-                    $scope.selectItem(item);
-
-                    Messages.showInfo('Cluster "' + item.name + '" saved.');
-                })
-                .error(Messages.showError);
-        }
-
-        // Save cluster.
-        $scope.saveItem = function() {
-            const item = $scope.backupItem;
-
-            const swapSpi = LegacyUtils.autoClusterSwapSpiConfiguration(item, clusterCaches(item));
-
-            if (swapSpi)
-                angular.extend(item, swapSpi);
-
-            if (validate(item))
-                save(item);
-        };
-
-        function _clusterNames() {
-            return _.map($scope.clusters, (cluster) => cluster.name);
-        }
-
-        // Clone cluster with new name.
-        $scope.cloneItem = function() {
-            if (validate($scope.backupItem)) {
-                Clone.confirm($scope.backupItem.name, _clusterNames()).then(function(newName) {
-                    const item = angular.copy($scope.backupItem);
-
-                    delete item._id;
-                    item.name = newName;
-
-                    save(item);
-                });
-            }
-        };
-
-        // Remove cluster from db.
-        $scope.removeItem = function() {
-            const selectedItem = $scope.selectedItem;
-
-            Confirm.confirm('Are you sure you want to remove cluster: "' + selectedItem.name + '"?')
-                .then(function() {
-                    const _id = selectedItem._id;
-
-                    $http.post('/api/v1/configuration/clusters/remove', {_id})
-                        .success(function() {
-                            Messages.showInfo('Cluster has been removed: ' + selectedItem.name);
-
-                            const clusters = $scope.clusters;
-
-                            const idx = _.findIndex(clusters, (cluster) => cluster._id === _id);
-
-                            if (idx >= 0) {
-                                clusters.splice(idx, 1);
-
-                                if (clusters.length > 0)
-                                    $scope.selectItem(clusters[0]);
-                                else {
-                                    $scope.backupItem = emptyCluster;
-                                    $scope.ui.inputForm.$setPristine();
-                                }
-
-                                _.forEach($scope.caches, (cache) => _.remove(cache.cache.clusters, (id) => id === _id));
-                                _.forEach($scope.igfss, (igfs) => _.remove(igfs.igfs.clusters, (id) => id === _id));
-                            }
-                        })
-                        .error(Messages.showError);
-                });
-        };
-
-        // Remove all clusters from db.
-        $scope.removeAllItems = function() {
-            Confirm.confirm('Are you sure you want to remove all clusters?')
-                .then(function() {
-                    $http.post('/api/v1/configuration/clusters/remove/all')
-                        .success(() => {
-                            Messages.showInfo('All clusters have been removed');
-
-                            $scope.clusters = [];
-
-                            _.forEach($scope.caches, (cache) => cache.cache.clusters = []);
-                            _.forEach($scope.igfss, (igfs) => igfs.igfs.clusters = []);
-
-                            $scope.backupItem = emptyCluster;
-                            $scope.ui.inputForm.$setPristine();
-                        })
-                        .error(Messages.showError);
-                });
-        };
-
-        $scope.resetAll = function() {
-            Confirm.confirm('Are you sure you want to undo all changes for current cluster?')
-                .then(function() {
-                    $scope.backupItem = $scope.selectedItem ? angular.copy($scope.selectedItem) : prepareNewItem();
-                    $scope.ui.inputForm.$setPristine();
-                });
-        };
-    }
-]];


Mime
View raw message