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')

Reply via email to