Repository: ignite Updated Branches: refs/heads/ignite-843 3d9ac74aa -> 068e31342
ignite-1485 Metadata loading fixes Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/068e3134 Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/068e3134 Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/068e3134 Branch: refs/heads/ignite-843 Commit: 068e313427095908a73518a21358502686902eac Parents: 3d9ac74 Author: Vasiliy Sisko <[email protected]> Authored: Tue Oct 6 11:09:16 2015 +0700 Committer: Andrey <[email protected]> Committed: Tue Oct 6 11:09:16 2015 +0700 ---------------------------------------------------------------------- .../main/js/controllers/caches-controller.js | 8 ++-- .../src/main/js/controllers/common-module.js | 27 +++++++++--- .../main/js/controllers/metadata-controller.js | 46 ++++++++++++++++---- .../src/main/js/public/stylesheets/style.scss | 13 ++++++ .../main/js/views/configuration/metadata.jade | 23 +++++++++- .../src/main/js/views/includes/controls.jade | 2 +- 6 files changed, 98 insertions(+), 21 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/068e3134/modules/control-center-web/src/main/js/controllers/caches-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/caches-controller.js b/modules/control-center-web/src/main/js/controllers/caches-controller.js index 9171774..5e657a4 100644 --- a/modules/control-center-web/src/main/js/controllers/caches-controller.js +++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js @@ -17,8 +17,8 @@ // Controller for Caches screen. consoleModule.controller('cachesController', [ - '$scope', '$controller', '$http', '$timeout', '$common', '$focus', '$confirm', '$message', '$clone', '$table', '$preview', '$loading', '$unsavedChangesGuard', - function ($scope, $controller, $http, $timeout, $common, $focus, $confirm, $message, $clone, $table, $preview, $loading, $unsavedChangesGuard) { + '$scope', '$controller', '$filter', '$http', '$timeout', '$common', '$focus', '$confirm', '$message', '$clone', '$table', '$preview', '$loading', '$unsavedChangesGuard', + function ($scope, $controller, $filter, $http, $timeout, $common, $focus, $confirm, $message, $clone, $table, $preview, $loading, $unsavedChangesGuard) { $unsavedChangesGuard.install($scope); // Initialize the super class and extend it. @@ -233,10 +233,12 @@ consoleModule.controller('cachesController', [ // When landing on the page, get caches and show them. $http.post('caches/list') .success(function (data) { + var validFilter = $filter('metadatasValidation'); + $scope.spaces = data.spaces; $scope.caches = data.caches; $scope.clusters = data.clusters; - $scope.metadatas = _.sortBy(_.map(data.metadatas, function (meta) { + $scope.metadatas = _.sortBy(_.map(validFilter(data.metadatas, true, false), function (meta) { return {value: meta._id, label: meta.valueType, kind: meta.kind, meta: meta} }), 'label'); http://git-wip-us.apache.org/repos/asf/ignite/blob/068e3134/modules/control-center-web/src/main/js/controllers/common-module.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js index 3024f36..07c8378 100644 --- a/modules/control-center-web/src/main/js/controllers/common-module.js +++ b/modules/control-center-web/src/main/js/controllers/common-module.js @@ -865,19 +865,13 @@ consoleModule.service('$confirm', function ($modal, $rootScope, $q) { var confirmModal = $modal({templateUrl: '/confirm', scope: scope, placement: 'center', show: false}); scope.confirmOk = function () { - deferred.reject('cancelled'); - - confirmModal.hide(); - }; - - scope.confirmOk = function () { deferred.resolve(true); confirmModal.hide(); }; scope.confirmCancel = function () { - deferred.resolve(false); + deferred.reject('cancelled'); confirmModal.hide(); }; @@ -1607,6 +1601,25 @@ consoleModule.filter('metadatasSearch', function() { } }); +// Filter metadata with key fields configuration. +consoleModule.filter('metadatasValidation', ['$common', function ($common) { + return function(metadatas, valid, invalid) { + if (valid && invalid) + return metadatas; + + var out = []; + + _.forEach(metadatas, function (meta) { + var _valid = !$common.metadataForStoreConfigured(meta) || $common.isJavaBuildInClass(meta.keyType) || !$common.isEmptyArray(meta.keyFields); + + if (valid && _valid || invalid && !_valid) + out.push(meta); + }); + + return out; + } +}]); + // Directive to enable validation for IP addresses. consoleModule.directive('ipaddress', function () { const ip = '(([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])\.){3}([0-9]|[1-9][0-9]|1[0-9]{2}|2[0-4][0-9]|25[0-5])'; http://git-wip-us.apache.org/repos/asf/ignite/blob/068e3134/modules/control-center-web/src/main/js/controllers/metadata-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/metadata-controller.js b/modules/control-center-web/src/main/js/controllers/metadata-controller.js index 8a8f085..4ebc894 100644 --- a/modules/control-center-web/src/main/js/controllers/metadata-controller.js +++ b/modules/control-center-web/src/main/js/controllers/metadata-controller.js @@ -131,6 +131,8 @@ consoleModule.controller('metadataController', [ tablesOnly: true }; + $scope.ui.showValid = true; + var jdbcDrivers = []; function _findPreset(jdbcDriverJar) { @@ -300,6 +302,12 @@ consoleModule.controller('metadataController', [ $scope.loadMeta.tables = tables; $scope.loadMeta.action = 'tables'; $scope.loadMeta.button = 'Save'; + + _.forEach(tables, function (tbl) { + tbl.use = $common.isDefined(_.find(tbl.cols, function (col) { + return col.key; + })); + }) }) .error(function (errMsg) { $common.showError(errMsg); @@ -410,6 +418,8 @@ consoleModule.controller('metadataController', [ var tables = []; var dupCnt = 0; + var containKey = true; + _.forEach($scope.loadMeta.tables, function (table) { if (table.use) { var qryFields = []; @@ -448,6 +458,8 @@ consoleModule.controller('metadataController', [ return 'Unknown'; } + var _containKey = false; + _.forEach(table.cols, function (col) { var colName = col.name; var jdbcType = $common.findJdbcType(col.type); @@ -461,12 +473,17 @@ consoleModule.controller('metadataController', [ if (_.includes(table.descCols, colName)) descFields.push(queryField(colName, jdbcType)); - if (col.key) + if (col.key) { keyFields.push(dbField(colName, jdbcType)); + + _containKey = true; + } else valFields.push(dbField(colName, jdbcType)); }); + containKey &= _containKey; + var idxs = table.idxs; if (table.idxs) { @@ -554,15 +571,26 @@ consoleModule.controller('metadataController', [ var itemsToConfirm = _.filter(batch, function (item) { return item.confirm; }); - if (itemsToConfirm.length > 0) - $confirmBatch.confirm(overwriteMessage, itemsToConfirm) - .then(function () { - _saveBatch(_.filter(batch, function (item) {return !item.skip})); - }, function () { - $common.showError('Cache type metadata loading interrupted by user.'); - }); + function checkOverwrite() { + if (itemsToConfirm.length > 0) + $confirmBatch.confirm(overwriteMessage, itemsToConfirm) + .then(function () { + _saveBatch(_.filter(batch, function (item) { + return !item.skip + })); + }, function () { + $common.showError('Cache type metadata loading interrupted by user.'); + }); + else + _saveBatch(batch); + } + + if (containKey) + checkOverwrite(); else - _saveBatch(batch); + $confirm.confirm('Imported tables contain tables without primary key.<br/>' + + 'You should manually configure key type and key fields for these metadata types.') + .then(function () { checkOverwrite(); }) } $scope.loadMetadataNext = function () { http://git-wip-us.apache.org/repos/asf/ignite/blob/068e3134/modules/control-center-web/src/main/js/public/stylesheets/style.scss ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/public/stylesheets/style.scss b/modules/control-center-web/src/main/js/public/stylesheets/style.scss index deb6008..1cf871e 100644 --- a/modules/control-center-web/src/main/js/public/stylesheets/style.scss +++ b/modules/control-center-web/src/main/js/public/stylesheets/style.scss @@ -1831,3 +1831,16 @@ treecontrol.tree-classic { min-height: 450px; } } + +.additional-filter { + input[type="checkbox"] { + position: absolute; + margin-top: 8px; + } + + a { + font-family: normal; + padding-left: 20px; + float: none; + } +} http://git-wip-us.apache.org/repos/asf/ignite/blob/068e3134/modules/control-center-web/src/main/js/views/configuration/metadata.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/views/configuration/metadata.jade b/modules/control-center-web/src/main/js/views/configuration/metadata.jade index 43b2ec5..aec80af 100644 --- a/modules/control-center-web/src/main/js/views/configuration/metadata.jade +++ b/modules/control-center-web/src/main/js/views/configuration/metadata.jade @@ -29,7 +29,28 @@ block content div(ng-show='ui.ready') +block-callout('{{screenTip.workflowTitle}}', 'screenTip.workflowContent', '{{screenTip.whatsNextTitle}}', 'screenTip.whatsNextContent') hr - +main-table('Types metadata:', 'metadatas', 'metadataName', 'selectItem(row)', '{{$index + 1}}) {{row.valueType}}') + .padding-bottom-dflt(ng-show='metadatas && metadatas.length > 0') + table.links(st-set-filter='metadatasSearch' st-table='displayedRows' st-safe-src='metadatas') + thead + tr + th + lable.labelHeader.labelFormField Types metadata: + .col-sm-8.pull-right(style='padding: 0') + .col-sm-6 + .pull-right.labelLogin.additional-filter(ng-if='(displayedRows | metadatasValidation:false:true).length > 0') + a.labelFormField(ng-if='ui.showValid' ng-click='ui.showValid = !ui.showValid') Key fields should be configured: {{(displayedRows | metadatasValidation:false:true).length}}  + a.labelFormField(ng-if='!ui.showValid' ng-click='ui.showValid = !ui.showValid') Show all metadata: {{displayedRows.length}}  + .col-sm-6 + input.form-control.pull-right(type='text' st-search='' placeholder='Filter metadatas...') + tbody + tr + td + .scrollable-y(style='max-height: 200px') + table + tbody + tr(ng-repeat='row in (displayedRows | metadatasValidation:ui.showValid:true) track by row._id') + td + a(ng-class='{active: row._id == selectedItem._id}' ng-click='selectItem(row)') '{{$index + 1}}) {{row.valueType}}' .padding-top-dflt(bs-affix) .panel-tip-container(data-placement='bottom' bs-tooltip data-title='Create new metadata') button.btn.btn-primary(id='new-item' ng-click='createItem()') Add metadata http://git-wip-us.apache.org/repos/asf/ignite/blob/068e3134/modules/control-center-web/src/main/js/views/includes/controls.jade ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/views/includes/controls.jade b/modules/control-center-web/src/main/js/views/includes/controls.jade index 642cb5b..1fda142 100644 --- a/modules/control-center-web/src/main/js/views/includes/controls.jade +++ b/modules/control-center-web/src/main/js/views/includes/controls.jade @@ -442,7 +442,7 @@ mixin form-row-custom(lblClasses, fieldClasses, dataSource) .input-tip input#newGroupName.form-control(type='text' ng-model='field.newGroupName' placeholder='Group name' on-enter='tableGroupSaveVisible(field, -1) && tableGroupSave(field, -1)' on-escape='tableReset()') -mixin main-table(title, rows, focusId, click, rowTemplate) +mixin main-table(title, rows, focusId, click, rowTemplate) .padding-bottom-dflt(ng-show='#{rows} && #{rows}.length > 0') table.links(st-set-filter='#{rows}Search' st-table='displayedRows' st-safe-src='#{rows}') thead
