IGNITE-5985 Web Console: added generation for QueryEntity key fields.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/ef055fee Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/ef055fee Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/ef055fee Branch: refs/heads/ignite-5578 Commit: ef055feeac69ba115b4ad8ebfd91db675574e75e Parents: fb890a2 Author: Vasiliy Sisko <[email protected]> Authored: Fri Aug 18 11:08:13 2017 +0700 Committer: Alexey Kuznetsov <[email protected]> Committed: Fri Aug 18 11:08:13 2017 +0700 ---------------------------------------------------------------------- modules/web-console/backend/app/mongo.js | 1 + .../generator/ConfigurationGenerator.js | 3 ++- .../states/configuration/domains/query.pug | 7 ++++++ .../app/services/LegacyTable.service.js | 6 ++--- .../frontend/controllers/domains-controller.js | 24 +++++++++++++++----- .../views/configuration/domains-import.tpl.pug | 6 +++++ 6 files changed, 37 insertions(+), 10 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ignite/blob/ef055fee/modules/web-console/backend/app/mongo.js ---------------------------------------------------------------------- diff --git a/modules/web-console/backend/app/mongo.js b/modules/web-console/backend/app/mongo.js index 0bc0e5c..28eaa5d 100644 --- a/modules/web-console/backend/app/mongo.js +++ b/modules/web-console/backend/app/mongo.js @@ -124,6 +124,7 @@ module.exports.factory = function(passportMongo, settings, pluginMongo, mongoose javaFieldName: String, javaFieldType: String }], + queryKeyFields: [String], fields: [{name: String, className: String}], aliases: [{field: String, alias: String}], indexes: [{ http://git-wip-us.apache.org/repos/asf/ignite/blob/ef055fee/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js index a14bfd3..24dc0d3 100644 --- a/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js +++ b/modules/web-console/frontend/app/modules/configuration/generator/ConfigurationGenerator.js @@ -1695,7 +1695,8 @@ export default class IgniteConfigurationGenerator { fields.push({name: valFieldName, className: javaTypes.fullClassName(domain.valueType)}); } - cfg.mapProperty('fields', fields, 'fields', true) + cfg.collectionProperty('keyFields', 'keyFields', domain.queryKeyFields, 'java.lang.String', 'java.util.HashSet') + .mapProperty('fields', fields, 'fields', true) .mapProperty('aliases', 'aliases'); const indexes = _.map(domain.indexes, (index) => http://git-wip-us.apache.org/repos/asf/ignite/blob/ef055fee/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug b/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug index 19cb83d..e8eceac 100644 --- a/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug +++ b/modules/web-console/frontend/app/modules/states/configuration/domains/query.pug @@ -18,6 +18,7 @@ include /app/helpers/jade/mixins -var form = 'query' -var model = 'backupItem' +-var queryKeyFields = `${model}.queryKeyFields` -var queryFields = `${model}.fields` -var queryAliases = `${model}.aliases` -var queryIndexes = `${model}.indexes` @@ -100,6 +101,12 @@ mixin table-index-item-edit(prefix, index, sortAvailable, idAddition) td.col-sm-12 +table-pair-edit('queryFieldsTbl', 'new', 'Field name', 'Field full class name', false, true, '{{::queryFieldsTbl.focusId + $index}}', '-1', '/') .settings-row + +ignite-form-field-dropdown('Key fields:', queryKeyFields, '"queryKeyFields"', false, false, true, + 'Select key fields', 'Configure available fields', 'fields(\'cur\', ' + queryKeyFields + ')', + 'Query fields that belongs to the key.<br/>\ + Used to build / modify keys and values during SQL DML operations when no key - value classes are present on cluster nodes.' + ) + .settings-row +ignite-form-group(ng-model=queryAliases ng-form=queryAliasesForm) ignite-form-field-label | Aliases http://git-wip-us.apache.org/repos/asf/ignite/blob/ef055fee/modules/web-console/frontend/app/services/LegacyTable.service.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/app/services/LegacyTable.service.js b/modules/web-console/frontend/app/services/LegacyTable.service.js index ab95164..38b041a 100644 --- a/modules/web-console/frontend/app/services/LegacyTable.service.js +++ b/modules/web-console/frontend/app/services/LegacyTable.service.js @@ -72,10 +72,10 @@ export default ['IgniteLegacyTable', table.editIndex = editIndex; } - function _tableUI(field) { - const ui = field.ui; + function _tableUI(tbl) { + const ui = tbl.ui; - return ui ? ui : field.type; + return ui ? ui : tbl.type; } function _tableFocus(focusId, index) { http://git-wip-us.apache.org/repos/asf/ignite/blob/ef055fee/modules/web-console/frontend/controllers/domains-controller.js ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/controllers/domains-controller.js b/modules/web-console/frontend/controllers/domains-controller.js index 7c87ce0..840086e 100644 --- a/modules/web-console/frontend/controllers/domains-controller.js +++ b/modules/web-console/frontend/controllers/domains-controller.js @@ -28,7 +28,7 @@ export default ['$rootScope', '$scope', '$http', '$state', '$filter', '$timeout' let __original_value; - const blank = {}; + const blank = {queryKeyFields: []}; // We need to initialize backupItem with empty object in order to properly used from angular directives. $scope.backupItem = emptyDomain; @@ -63,6 +63,7 @@ export default ['$rootScope', '$scope', '$http', '$state', '$filter', '$timeout' $scope.ui.generatePojo = true; $scope.ui.builtinKeys = true; + $scope.ui.generateKeyFields = true; $scope.ui.usePrimitives = true; $scope.ui.generateTypeAliases = true; $scope.ui.generateFieldAliases = true; @@ -145,13 +146,17 @@ export default ['$rootScope', '$scope', '$http', '$state', '$filter', '$timeout' $scope.tableRemove = function(item, field, index) { if ($scope.tableReset(true)) { - // Remove field from indexes. if (field.type === 'fields') { + // Remove field from indexes. _.forEach($scope.backupItem.indexes, (modelIndex) => { modelIndex.fields = _.filter(modelIndex.fields, (indexField) => { return indexField.name !== $scope.backupItem.fields[index].name; }); }); + + // Remove field from query key fields. + $scope.backupItem.queryKeyFields = _.filter($scope.backupItem.queryKeyFields, + (keyField) => keyField !== $scope.backupItem.fields[index].name); } LegacyTable.tableRemove(item, field, index); @@ -212,8 +217,10 @@ export default ['$rootScope', '$scope', '$http', '$state', '$filter', '$timeout' if (prefix === 'new') return fields; - if (cur && !_.find(fields, {value: cur})) - fields.push({value: cur, label: cur + ' (Unknown field)'}); + _.forEach(_.isArray(cur) ? cur : [cur], (value) => { + if (!_.find(fields, {value})) + fields.push({value, label: value + ' (Unknown field)'}); + }); return fields; }; @@ -929,6 +936,7 @@ export default ['$rootScope', '$scope', '$http', '$state', '$filter', '$timeout' newDomain.databaseSchema = table.schema; newDomain.databaseTable = tableName; newDomain.fields = qryFields; + newDomain.queryKeyFields = _.map(keyFields, (field) => field.javaFieldName); newDomain.indexes = indexes; newDomain.keyFields = keyFields; newDomain.aliases = aliases; @@ -945,8 +953,12 @@ export default ['$rootScope', '$scope', '$http', '$state', '$filter', '$timeout' newDomain.keyType = keyField.javaType; newDomain.keyFieldName = keyField.javaFieldName; - // Exclude key column from query fields. - newDomain.fields = _.filter(newDomain.fields, (field) => field.name !== keyField.javaFieldName); + if (!$scope.ui.generateKeyFields) { + // Exclude key column from query fields. + newDomain.fields = _.filter(newDomain.fields, (field) => field.name !== keyField.javaFieldName); + + newDomain.queryKeyFields = []; + } // Exclude key column from indexes. _.forEach(newDomain.indexes, (index) => { http://git-wip-us.apache.org/repos/asf/ignite/blob/ef055fee/modules/web-console/frontend/views/configuration/domains-import.tpl.pug ---------------------------------------------------------------------- diff --git a/modules/web-console/frontend/views/configuration/domains-import.tpl.pug b/modules/web-console/frontend/views/configuration/domains-import.tpl.pug index e9ed6f3..369c7de 100644 --- a/modules/web-console/frontend/views/configuration/domains-import.tpl.pug +++ b/modules/web-console/frontend/views/configuration/domains-import.tpl.pug @@ -158,6 +158,12 @@ mixin td-ellipses-lbl(w, lbl) .settings-row +checkbox('Use primitive types for NOT NULL table columns', 'ui.usePrimitives', '"domainUsePrimitives"', 'Use primitive types like "int", "long", "double" for POJOs fields generation in case of NOT NULL columns') .settings-row + +checkbox('Generate query entity key fields', 'ui.generateKeyFields', '"generateKeyFields"', + 'Generate key fields for query entity.<br\>\ + We need this for the cases when no key-value classes\ + are present on cluster nodes, and we need to build/modify keys and values during SQL DML operations.\ + Thus, setting this parameter is not mandatory and should be based on particular use case.') + .settings-row +checkbox('Generate POJO classes', generatePojo, '"domainGeneratePojo"', 'If selected then POJO classes will be generated from database tables') .settings-row(ng-show=generatePojo) +checkbox('Generate aliases for query entity', 'ui.generateTypeAliases', '"domainGenerateTypeAliases"', 'Generate aliases for query entity if table name is invalid Java identifier')
