Repository: incubator-ignite Updated Branches: refs/heads/ignite-843 40e87e2ce -> 1585080ed
IGNITE-843 Validation of metadata content. Hide KeyValues if KeyType is a primitive type. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/1585080e Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/1585080e Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/1585080e Branch: refs/heads/ignite-843 Commit: 1585080ed166cbdb090b5bbed8b9fb5be3bebffd Parents: 40e87e2 Author: AKuznetsov <akuznet...@gridgain.com> Authored: Fri Jul 31 17:14:23 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Fri Jul 31 17:14:23 2015 +0700 ---------------------------------------------------------------------- .../src/main/js/controllers/common-module.js | 3 +- .../main/js/controllers/metadata-controller.js | 61 ++++++++++++++++++++ .../main/js/controllers/models/metadata.json | 2 +- .../src/main/js/routes/generator/common.js | 8 +++ .../src/main/js/routes/generator/java.js | 7 ++- .../src/main/js/routes/generator/xml.js | 7 ++- 6 files changed, 82 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1585080e/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 9c2ee0c..7803b85 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 @@ -498,8 +498,9 @@ controlCenterModule.controller('notebooks', ['$scope', '$http','$common', functi { divider: true } ]; - for (notebook of $scope.notebooks) + _.forEach($scope.notebooks, function (notebook) { $scope.notebookDropdown.push({text: notebook.name, href: '/sql/' + notebook._id, target: '_self'}); + }); } }) .error(function (errMsg) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1585080e/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 da543e2..91d8abf 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 @@ -258,6 +258,15 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', '$commo $scope.metadatas = []; + $scope.isJavaBuildInType = function () { + var item = $scope.backupItem; + + if (item && item.keyType) + return _.contains($common.javaBuildInTypes, item.keyType); + + return false; + }; + $http.get('/models/metadata.json') .success(function (data) { $scope.screenTip = data.screenTip; @@ -334,8 +343,60 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', '$commo $scope.backupItem.space = $scope.spaces[0]._id; }; + function isEmpty(arr) { + if ($common.isDefined(arr)) + return arr.length == 0; + else + return true; + } + // Check metadata logical consistency. function validate(item) { + var kind = item.kind; + + if (kind == 'query' || kind == 'both') { + if (isEmpty(item.queryFields) && isEmpty(item.ascendingFields) && isEmpty(item.descendingFields) + && isEmpty(item.textFields) && isEmpty(item.groups)) { + $common.showError('SQL fields are not specified!'); + + return false; + } + + var groups = item.groups; + if (groups && groups.length > 0) { + for (var i = 0; i < groups.length; i++) { + var group = groups[i]; + var fields = group.fields; + + if (isEmpty(fields)) { + $common.showError('Group "' + group.name + '" has no fields.'); + + return false; + } + + if (fields.length == 1) { + $common.showError('Group "' + group.name + '" has only one field.<br/> Consider to use ascending or descending fields.'); + + return false; + } + } + } + } + + if (kind == 'store' || kind == 'both') { + if (isEmpty(item.keyFields) && !_.contains($common.javaBuildInTypes, item.keyType)) { + $common.showError('Key fields are not specified!'); + + return false; + } + + if (isEmpty(item.valueFields)) { + $common.showError('Value fields are not specified!'); + + return false; + } + } + return true; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1585080e/modules/control-center-web/src/main/js/controllers/models/metadata.json ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/models/metadata.json b/modules/control-center-web/src/main/js/controllers/models/metadata.json index 86efe0b..65725b8 100644 --- a/modules/control-center-web/src/main/js/controllers/models/metadata.json +++ b/modules/control-center-web/src/main/js/controllers/models/metadata.json @@ -93,7 +93,7 @@ "model": "keyFields", "keyName": "name", "valueName": "className", - "hide": "backupItem.kind == 'query'", + "hide": "backupItem.kind == 'query' || isJavaBuildInType()", "addTip": "Add key field.", "removeTip": "Remove key field.", "tip": [ http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1585080e/modules/control-center-web/src/main/js/routes/generator/common.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/routes/generator/common.js b/modules/control-center-web/src/main/js/routes/generator/common.js index 01a7cd6..c005f58 100644 --- a/modules/control-center-web/src/main/js/routes/generator/common.js +++ b/modules/control-center-web/src/main/js/routes/generator/common.js @@ -202,6 +202,14 @@ function javaBuildInClass(className) { exports.javaBuildInClass = javaBuildInClass; +/** + * @param className Class name to check. + * @returns 'true' if given class name is a java build-in type. + */ +exports.isJavaBuildInClass = function (className) { + return isDefined(javaBuildInClasses[className]); +}; + exports.knownClasses = { Oracle: new ClassDescriptor('org.apache.ignite.cache.store.jdbc.dialect.OracleDialect', {}), DB2: new ClassDescriptor('org.apache.ignite.cache.store.jdbc.dialect.DB2Dialect', {}), http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1585080e/modules/control-center-web/src/main/js/routes/generator/java.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/routes/generator/java.js b/modules/control-center-web/src/main/js/routes/generator/java.js index 516c7f4..06b8a2a 100644 --- a/modules/control-center-web/src/main/js/routes/generator/java.js +++ b/modules/control-center-web/src/main/js/routes/generator/java.js @@ -428,13 +428,16 @@ function addCacheTypeMetadataConfiguration(res, meta) { var kind = meta.kind; - addClassProperty(res, 'typeMeta', meta, 'keyType'); + var keyType = addClassProperty(res, 'typeMeta', meta, 'keyType'); addClassProperty(res, 'typeMeta', meta, 'valueType'); if (kind != 'query') { addProperty(res, 'typeMeta', meta, 'databaseSchema'); addProperty(res, 'typeMeta', meta, 'databaseTable'); - addCacheTypeMetadataDatabaseFields(res, meta, 'keyFields'); + + if (!generatorCommon.isJavaBuildInClass(keyType)) + addCacheTypeMetadataDatabaseFields(res, meta, 'keyFields'); + addCacheTypeMetadataDatabaseFields(res, meta, 'valueFields'); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/1585080e/modules/control-center-web/src/main/js/routes/generator/xml.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/routes/generator/xml.js b/modules/control-center-web/src/main/js/routes/generator/xml.js index cba14df..7c5d045 100644 --- a/modules/control-center-web/src/main/js/routes/generator/xml.js +++ b/modules/control-center-web/src/main/js/routes/generator/xml.js @@ -427,13 +427,16 @@ function generateCacheTypeMetadataConfiguration(res, meta) { var kind = meta.kind; - addProperty(res, meta, 'keyType'); + var keyType = addProperty(res, meta, 'keyType'); addProperty(res, meta, 'valueType'); if (kind != 'query') { addProperty(res, meta, 'databaseSchema'); addProperty(res, meta, 'databaseTable'); - addCacheTypeMetadataDatabaseFields(res, meta, 'keyFields'); + + if (!generatorCommon.isJavaBuildInClass(keyType)) + addCacheTypeMetadataDatabaseFields(res, meta, 'keyFields'); + addCacheTypeMetadataDatabaseFields(res, meta, 'valueFields'); }