You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/03/28 10:48:13 UTC

[33/50] [abbrv] ignite git commit: IGNITE-2676 Refactoring IGFS screen to Angular directives and JADE mixins.

http://git-wip-us.apache.org/repos/asf/ignite/blob/6cd972a1/modules/control-center-web/src/main/js/controllers/igfs-controller.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/igfs-controller.js b/modules/control-center-web/src/main/js/controllers/igfs-controller.js
index b32b606..553fd4c 100644
--- a/modules/control-center-web/src/main/js/controllers/igfs-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/igfs-controller.js
@@ -17,102 +17,38 @@
 
 // Controller for IGFS screen.
 consoleModule.controller('igfsController', [
-    '$scope', '$http', '$state', '$filter', '$timeout', '$common', '$focus', '$confirm', '$clone', '$table', '$preview', '$loading', '$unsavedChangesGuard',
-    function ($scope, $http, $state, $filter, $timeout, $common, $focus, $confirm, $clone, $table, $preview, $loading, $unsavedChangesGuard) {
+    '$scope', '$http', '$state', '$filter', '$timeout', '$common', '$confirm', '$clone', '$loading', '$cleanup', '$unsavedChangesGuard',
+    function ($scope, $http, $state, $filter, $timeout, $common, $confirm, $clone, $loading, $cleanup, $unsavedChangesGuard) {
         $unsavedChangesGuard.install($scope);
 
+        var emptyIgfs = {empty: true};
+
+        var __original_value;
+
+        var blank = {
+            ipcEndpointConfiguration: {},
+            secondaryFileSystem: {}
+        };
+
+        // We need to initialize backupItem with empty object in order to properly used from angular directives.
+        $scope.backupItem = emptyIgfs;
+
         $scope.ui = $common.formUI();
+        $scope.ui.angularWay = true; // TODO We need to distinguish refactored UI from legacy UI.
         $scope.ui.activePanels = [0];
         $scope.ui.topPanels = [0];
 
-        $scope.joinTip = $common.joinTip;
-        $scope.getModel = $common.getModel;
-        $scope.javaBuiltInClasses = $common.javaBuiltInClasses;
         $scope.compactJavaName = $common.compactJavaName;
         $scope.widthIsSufficient = $common.widthIsSufficient;
         $scope.saveBtnTipText = $common.saveBtnTipText;
-        $scope.panelExpanded = $common.panelExpanded;
-
-        $scope.tableVisibleRow = $table.tableVisibleRow;
-
-        $scope.tableSave = function (field, index, stopEdit) {
-            switch (field.type) {
-                case 'pathModes':
-                    if ($table.tablePairSaveVisible(field, index))
-                        return $table.tablePairSave($scope.tablePairValid, $scope.backupItem, field, index, stopEdit);
-
-                    break;
-            }
-
-            return true;
-        };
-
-        $scope.tableReset = function (save) {
-            var field = $table.tableField();
-
-            if (!save || !$common.isDefined(field) || $scope.tableSave(field, $table.tableEditedRowIndex(), true)) {
-                $table.tableReset();
-
-                return true;
-            }
-
-            return false;
-        };
-
-        $scope.tableNewItem = function (field) {
-            if ($scope.tableReset(true))
-                $table.tableNewItem(field);
-        };
-
-        $scope.tableNewItemActive = $table.tableNewItemActive;
-
-        $scope.tableStartEdit = function (item, field, index) {
-            if ($scope.tableReset(true))
-                $table.tableStartEdit(item, field, index);
-        };
-
-        $scope.tableEditing = $table.tableEditing;
-
-        $scope.tableRemove = function (item, field, index) {
-            if ($scope.tableReset(true))
-                $table.tableRemove(item, field, index);
-        };
-
-        $scope.tableSimpleSave = $table.tableSimpleSave;
-        $scope.tableSimpleSaveVisible = $table.tableSimpleSaveVisible;
-
-        $scope.tableSimpleUp = function (item, field, index) {
-            if ($scope.tableReset(true))
-                $table.tableSimpleUp(item, field, index);
-        };
-
-        $scope.tableSimpleDown = function (item, field, index) {
-            if ($scope.tableReset(true))
-                $table.tableSimpleDown(item, field, index);
-        };
-
-        $scope.tableSimpleDownVisible = $table.tableSimpleDownVisible;
-
-        $scope.tablePairSave = $table.tablePairSave;
-        $scope.tablePairSaveVisible = $table.tablePairSaveVisible;
-
-        var previews = [];
-
-        $scope.previewInit = function (preview) {
-            previews.push(preview);
-
-            $preview.previewInit(preview);
-        };
-
-        $scope.previewChanged = $preview.previewChanged;
-
-        $scope.hidePopover = $common.hidePopover;
 
         var showPopoverMessage = $common.showPopoverMessage;
 
-        $scope.igfsModes = $common.mkOptions(['PRIMARY', 'PROXY', 'DUAL_SYNC', 'DUAL_ASYNC']);
+        $scope.contentVisible = function () {
+            var item = $scope.backupItem;
 
-        $scope.ipcTypes = $common.mkOptions(['SHMEM', 'TCP']);
+            return !item.empty && (!item._id || _.find($scope.displayedRows, {_id: item._id}));
+        };
 
         $scope.toggleExpanded = function () {
             $scope.ui.expanded = !$scope.ui.expanded;
@@ -120,38 +56,9 @@ consoleModule.controller('igfsController', [
             $common.hidePopover();
         };
 
-        $scope.general = [];
-        $scope.advanced = [];
         $scope.igfss = [];
         $scope.clusters = [];
 
-        $scope.preview = {
-            general: {xml: '', java: '', allDefaults: true},
-            ipc: {xml: '', java: '', allDefaults: true},
-            fragmentizer: {xml: '', java: '', allDefaults: true},
-            dualMode: {xml: '', java: '', allDefaults: true},
-            secondaryFileSystem: {xml: '', java: '', allDefaults: true},
-            misc: {xml: '', java: '', allDefaults: true}
-        };
-
-        $scope.tablePairValid = function (item, field, index) {
-            var pairValue = $table.tablePairValue(field, index);
-
-            var model = item[field.model];
-
-            if ($common.isDefined(model)) {
-                var idx = _.findIndex(model, function (pair) {
-                    return pair.path === pairValue.key;
-                });
-
-                // Found duplicate.
-                if (idx >= 0 && idx !== index)
-                    return showPopoverMessage($scope.ui, 'misc', $table.tableFieldId(index, 'KeyPathMode'), 'Such path already exists!');
-            }
-
-            return true;
-        };
-
         function selectFirstItem() {
             if ($scope.igfss.length > 0)
                 $scope.selectItem($scope.igfss[0]);
@@ -171,113 +78,82 @@ consoleModule.controller('igfsController', [
                     };
                 });
 
-                // Load page descriptor.
-                $http.get('/models/igfs.json')
-                    .success(function (data) {
-                        $scope.general = data.general;
-                        $scope.advanced = data.advanced;
+                if ($state.params.id)
+                    $scope.createItem($state.params.id);
+                else {
+                    var lastSelectedIgfs = angular.fromJson(sessionStorage.lastSelectedIgfs);
 
-                        $scope.ui.addGroups(data.general, data.advanced);
+                    if (lastSelectedIgfs) {
+                        var idx = _.findIndex($scope.igfss, function (igfs) {
+                            return igfs._id === lastSelectedIgfs;
+                        });
 
-                        if ($state.params.id)
-                            $scope.createItem($state.params.id);
+                        if (idx >= 0)
+                            $scope.selectItem($scope.igfss[idx]);
                         else {
-                            var lastSelectedIgfs = angular.fromJson(sessionStorage.lastSelectedIgfs);
-
-                            if (lastSelectedIgfs) {
-                                var idx = _.findIndex($scope.igfss, function (igfs) {
-                                    return igfs._id === lastSelectedIgfs;
-                                });
+                            sessionStorage.removeItem('lastSelectedIgfs');
 
-                                if (idx >= 0)
-                                    $scope.selectItem($scope.igfss[idx]);
-                                else {
-                                    sessionStorage.removeItem('lastSelectedIgfs');
-
-                                    selectFirstItem();
-                                }
-
-                            }
-                            else
-                                selectFirstItem();
+                            selectFirstItem();
                         }
+                    }
+                    else
+                        selectFirstItem();
+                }
 
-                        $scope.$watch('backupItem', function (val) {
-                            if (val) {
-                                var srcItem = $scope.selectedItem ? $scope.selectedItem : prepareNewItem();
-
-                                $scope.ui.checkDirty(val, srcItem);
-
-                                var varName = $commonUtils.toJavaName('igfs', val.name);
-
-                                $scope.preview.general.xml = $generatorXml.igfsGeneral(val).asString();
-                                $scope.preview.general.java = $generatorJava.igfsGeneral(val, varName).asString();
-                                $scope.preview.general.allDefaults = $common.isEmptyString($scope.preview.general.xml);
-
-                                $scope.preview.ipc.xml = $generatorXml.igfsIPC(val).asString();
-                                $scope.preview.ipc.java = $generatorJava.igfsIPC(val, varName).asString();
-                                $scope.preview.ipc.allDefaults = $common.isEmptyString($scope.preview.ipc.xml);
-
-                                $scope.preview.fragmentizer.xml = $generatorXml.igfsFragmentizer(val).asString();
-                                $scope.preview.fragmentizer.java = $generatorJava.igfsFragmentizer(val, varName).asString();
-                                $scope.preview.fragmentizer.allDefaults = $common.isEmptyString($scope.preview.fragmentizer.xml);
-
-                                $scope.preview.dualMode.xml = $generatorXml.igfsDualMode(val).asString();
-                                $scope.preview.dualMode.java = $generatorJava.igfsDualMode(val, varName).asString();
-                                $scope.preview.dualMode.allDefaults = $common.isEmptyString($scope.preview.dualMode.xml);
+                $scope.$watch('ui.inputForm.$valid', function(valid) {
+                    if (valid && __original_value === JSON.stringify($cleanup($scope.backupItem))) {
+                        $scope.ui.inputForm.$dirty = false;
+                    }
+                });
 
-                                $scope.preview.secondaryFileSystem.xml = $generatorXml.igfsSecondFS(val).asString();
-                                $scope.preview.secondaryFileSystem.java = $generatorJava.igfsSecondFS(val, varName).asString();
-                                $scope.preview.secondaryFileSystem.allDefaults = $common.isEmptyString($scope.preview.secondaryFileSystem.xml);
+                $scope.$watch('backupItem', function (val) {
+                    var form = $scope.ui.inputForm;
 
-                                $scope.preview.misc.xml = $generatorXml.igfsMisc(val).asString();
-                                $scope.preview.misc.java = $generatorJava.igfsMisc(val, varName).asString();
-                                $scope.preview.misc.allDefaults = $common.isEmptyString($scope.preview.misc.xml);
-                            }
-                        }, true);
-                    })
-                    .error(function (errMsg) {
-                        $common.showError(errMsg);
-                    });
+                    if (form.$pristine || (form.$valid && __original_value === JSON.stringify($cleanup(val))))
+                        form.$setPristine();
+                    else
+                        form.$setDirty();
+                }, true);
             })
-            .error(function (errMsg) {
+            .catch(function (errMsg) {
                 $common.showError(errMsg);
             })
             .finally(function () {
                 $scope.ui.ready = true;
+                $scope.ui.inputForm.$setPristine();
                 $loading.finish('loadingIgfsScreen');
             });
 
         $scope.selectItem = function (item, backup) {
             function selectItem() {
-                $table.tableReset();
-
-                $scope.selectedItem = angular.copy(item);
+                $scope.selectedItem = item;
 
                 try {
-                    if (item)
+                    if (item && item._id)
                         sessionStorage.lastSelectedIgfs = angular.toJson(item._id);
                     else
                         sessionStorage.removeItem('lastSelectedIgfs');
                 }
-                catch (error) { }
-
-                _.forEach(previews, function(preview) {
-                    preview.attractAttention = false;
-                });
+                catch (ignored) {
+                    // No-op.
+                }
 
                 if (backup)
                     $scope.backupItem = backup;
                 else if (item)
                     $scope.backupItem = angular.copy(item);
                 else
-                    $scope.backupItem = undefined;
+                    $scope.backupItem = emptyIgfs;
+
+                $scope.backupItem = angular.merge({}, blank, $scope.backupItem);
+
+                __original_value = JSON.stringify($cleanup($scope.backupItem));
 
                 if ($common.getQueryVariable('new'))
                     $state.go('base.configuration.igfs');
             }
 
-            $common.confirmUnsavedChanges($scope.ui.isDirty(), selectItem);
+            $common.confirmUnsavedChanges($scope.backupItem && $scope.ui.inputForm.$dirty, selectItem);
         };
 
         function prepareNewItem(id) {
@@ -290,51 +166,90 @@ consoleModule.controller('igfsController', [
             };
         }
 
+        $scope.zzz = function () {
+            console.log("TEST on enter!")
+        };
+
         // Add new IGFS.
         $scope.createItem = function (id) {
-            if ($scope.tableReset(true)) {
-                $timeout(function () {
-                    $common.ensureActivePanel($scope.ui, 'general', 'igfsName');
-                });
+            $timeout(function () {
+                $common.ensureActivePanel($scope.ui, 'general', 'igfsName');
+            });
 
-                $scope.selectItem(undefined, prepareNewItem(id));
-            }
+            $scope.selectItem(undefined, prepareNewItem(id));
         };
 
         // Check IGFS logical consistency.
         function validate(item) {
+            $common.hidePopover();
+
             if ($common.isEmptyString(item.name))
-                return showPopoverMessage($scope.ui, 'general', 'igfsName', 'Name should not be empty');
+                return showPopoverMessage($scope.ui, 'general', 'igfsName', 'IGFS name should not be empty!');
+
+            var form = $scope.ui.inputForm;
+            var errors = form.$error;
+            var errKeys = Object.keys(errors);
+
+            if (errKeys && errKeys.length > 0) {
+                var firstErrorKey = errKeys[0];
+
+                var firstError = errors[firstErrorKey][0];
+                var actualError = firstError.$error[firstErrorKey][0];
+
+                var errNameFull = actualError.$name;
+                var errNameShort = errNameFull;
+
+                if (errNameShort.endsWith('TextInput') || errNameShort.endsWith('JavaClass'))
+                    errNameShort = errNameShort.substring(0, errNameShort.length - 9);
+
+                var extractErrorMessage = function (errName) {
+                    try {
+                        return errors[firstErrorKey][0].$errorMessages[errName][firstErrorKey];
+                    }
+                    catch(ignored) {
+                        try {
+                            msg = form[firstError.$name].$errorMessages[errName][firstErrorKey];
+                        }
+                        catch(ignited) {
+                            return false;
+                        }
+                    }
+                };
+
+                var msg = extractErrorMessage(errNameFull) || extractErrorMessage(errNameShort) || 'Invalid value!';
+
+                return showPopoverMessage($scope.ui, firstError.$name, errNameFull, msg);
+            }
 
             if (!$common.isEmptyString(item.dualModePutExecutorService) &&
                 !$common.isValidJavaClass('Put executor service', item.dualModePutExecutorService, false, 'dualModePutExecutorService', false, $scope.ui, 'dualMode'))
                 return false;
 
             if (!item.secondaryFileSystemEnabled && (item.defaultMode === 'PROXY'))
-                return showPopoverMessage($scope.ui, 'secondaryFileSystem', 'secondaryFileSystem-title', 'Secondary file system should be configured for "PROXY" IGFS mode');
+                return showPopoverMessage($scope.ui, 'secondaryFileSystem', 'secondaryFileSystem-title', 'Secondary file system should be configured for "PROXY" IGFS mode!');
 
             if (item.pathModes) {
                 for (var pathIx = 0; pathIx < item.pathModes.length; pathIx++) {
                     if (!item.secondaryFileSystemEnabled && item.pathModes[pathIx].mode === 'PROXY')
-                        return showPopoverMessage($scope.ui, 'misc', 'secondaryFileSystem-title', 'Secondary file system should be configured for "PROXY" path mode');
+                        return showPopoverMessage($scope.ui, 'misc', 'secondaryFileSystem-title', 'Secondary file system should be configured for "PROXY" path mode!');
                 }
             }
 
             return true;
         }
 
-        // Save IGFS into database.
+        // Save IGFS in database.
         function save(item) {
             $http.post('/api/v1/configuration/igfs/save', item)
                 .success(function (_id) {
-                    $scope.ui.markPristine();
+                    $scope.ui.inputForm.$setPristine();
 
                     var idx = _.findIndex($scope.igfss, function (igfs) {
                         return igfs._id === _id;
                     });
 
                     if (idx >= 0)
-                        angular.extend($scope.igfss[idx], item);
+                        angular.merge($scope.igfss[idx], item);
                     else {
                         item._id = _id;
                         $scope.igfss.push(item);
@@ -351,12 +266,10 @@ consoleModule.controller('igfsController', [
 
         // Save IGFS.
         $scope.saveItem = function () {
-            if ($scope.tableReset(true)) {
-                var item = $scope.backupItem;
+            var item = $scope.backupItem;
 
-                if (validate(item))
-                    save(item);
-            }
+            if (validate(item))
+                save(item);
         };
 
         function _igfsNames() {
@@ -365,13 +278,14 @@ consoleModule.controller('igfsController', [
             });
         }
 
-        // Save IGFS with new name.
+        // Clone IGFS with new name.
         $scope.cloneItem = function () {
-            if ($scope.tableReset(true) && validate($scope.backupItem)) {
+            if (validate($scope.backupItem)) {
                 $clone.confirm($scope.backupItem.name, _igfsNames()).then(function (newName) {
                     var item = angular.copy($scope.backupItem);
 
                     delete item._id;
+
                     item.name = newName;
 
                     save(item);
@@ -381,8 +295,6 @@ consoleModule.controller('igfsController', [
 
         // Remove IGFS from db.
         $scope.removeItem = function () {
-            $table.tableReset();
-
             var selectedItem = $scope.selectedItem;
 
             $confirm.confirm('Are you sure you want to remove IGFS: "' + selectedItem.name + '"?')
@@ -405,7 +317,7 @@ consoleModule.controller('igfsController', [
                                 if (igfss.length > 0)
                                     $scope.selectItem(igfss[0]);
                                 else
-                                    $scope.selectItem(undefined, undefined);
+                                    $scope.backupItem = emptyIgfs;
                             }
                         })
                         .error(function (errMsg) {
@@ -414,10 +326,8 @@ consoleModule.controller('igfsController', [
                 });
         };
 
-        // Remove all igfss from db.
+        // Remove all IGFS from db.
         $scope.removeAllItems = function () {
-            $table.tableReset();
-
             $confirm.confirm('Are you sure you want to remove all IGFS?')
                 .then(function () {
                     $http.post('/api/v1/configuration/igfs/remove/all')
@@ -425,8 +335,8 @@ consoleModule.controller('igfsController', [
                             $common.showInfo('All IGFS have been removed');
 
                             $scope.igfss = [];
-                            $scope.ui.markPristine();
-                            $scope.selectItem(undefined, undefined);
+                            $scope.backupItem = emptyIgfs;
+                            $scope.ui.inputForm.$setPristine();
                         })
                         .error(function (errMsg) {
                             $common.showError(errMsg);
@@ -434,23 +344,11 @@ consoleModule.controller('igfsController', [
                 });
         };
 
-        $scope.resetItem = function (group) {
-            var resetTo = $scope.selectedItem;
-
-            if (!$common.isDefined(resetTo))
-                resetTo = prepareNewItem();
-
-            $common.resetItem($scope.backupItem, resetTo, $scope.general, group);
-            $common.resetItem($scope.backupItem, resetTo, $scope.advanced, group);
-        };
-
         $scope.resetAll = function () {
-            $table.tableReset();
-
             $confirm.confirm('Are you sure you want to undo all changes for current IGFS?')
                 .then(function () {
                     $scope.backupItem = $scope.selectedItem ? angular.copy($scope.selectedItem) : prepareNewItem();
-                    $scope.ui.markPristine();
+                    $scope.ui.inputForm.$setPristine();
                 });
         };
     }]

http://git-wip-us.apache.org/repos/asf/ignite/blob/6cd972a1/modules/control-center-web/src/main/js/views/configuration/igfs.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/configuration/igfs.jade b/modules/control-center-web/src/main/js/views/configuration/igfs.jade
index 1a9d262..947cebe 100644
--- a/modules/control-center-web/src/main/js/views/configuration/igfs.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/igfs.jade
@@ -28,13 +28,21 @@ include ../includes/infos
             .padding-top-dflt(bs-affix)
                 .panel-tip-container(data-placement='bottom' bs-tooltip='' data-title='Create new IGFS')
                     button.btn.btn-primary(id='new-item' ng-click='createItem()') Add IGFS
-                +save-remove-buttons('IGFS')
+                +save-remove-buttons-new('IGFS')
                 hr
             .bs-affix-fix
-            form.form-horizontal(name='ui.inputForm' ng-show='backupItem && tableVisibleRow(displayedRows, selectedItem)' novalidate)
-                .panel-group(bs-collapse ng-model='ui.activePanels' data-allow-multiple='true' ng-click='triggerDigest = true')
-                    +groups('general', 'backupItem')
-                    div(ng-show='ui.expanded')
-                        +advanced-options
-                        +groups('advanced', 'backupItem')
-                +advanced-options
+            div(bs-collapse='' data-allow-multiple='true' ng-model='ui.activePanels')
+                form.form-horizontal(name='ui.inputForm' ng-show='contentVisible()' novalidate)
+                    .panel-group
+                        ignite-configuration-igfs-general
+
+                        ignite-advanced-options-toggle
+
+                        div(ng-show='ui.expanded')
+                            ignite-configuration-igfs-ipc
+                            ignite-configuration-igfs-fragmentizer
+                            ignite-configuration-igfs-dual
+                            ignite-configuration-igfs-secondary
+                            ignite-configuration-igfs-misc
+
+                            ignite-advanced-options-toggle