You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by ak...@apache.org on 2016/01/15 07:39:15 UTC

ignite git commit: IGNITE-2381 WIP Move indexed key-value pairs to metadata screen.

Repository: ignite
Updated Branches:
  refs/heads/ignite-843-rc2 c08529959 -> a8ac74390


IGNITE-2381 WIP Move indexed key-value pairs to metadata screen.


Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/a8ac7439
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/a8ac7439
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/a8ac7439

Branch: refs/heads/ignite-843-rc2
Commit: a8ac743903124deb0e2640c97199be782bb3cfa5
Parents: c085299
Author: vsisko <vs...@gridgain.com>
Authored: Fri Jan 15 13:39:25 2016 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Fri Jan 15 13:39:25 2016 +0700

----------------------------------------------------------------------
 .../main/js/controllers/caches-controller.js    |  6 --
 .../main/js/controllers/metadata-controller.js  | 68 ++++++++++--------
 .../src/main/js/controllers/models/caches.json  | 14 ----
 .../main/js/controllers/models/metadata.json    | 32 +++++++++
 modules/control-center-web/src/main/js/db.js    |  2 +-
 .../js/helpers/generator/generator-common.js    |  5 ++
 .../main/js/helpers/generator/generator-java.js | 74 ++++++++++++--------
 .../main/js/helpers/generator/generator-xml.js  | 56 ++++++++++-----
 .../src/main/js/views/includes/controls.jade    |  2 -
 9 files changed, 160 insertions(+), 99 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/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 50ebf1b..d3d5c2f 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
@@ -44,12 +44,6 @@ consoleModule.controller('cachesController', [
                         return $table.tableSimpleSave($scope.tableSimpleValid, $scope.backupItem, field, index, stopEdit);
 
                     break;
-
-                case 'indexedTypes':
-                    if ($table.tablePairSaveVisible(field, index))
-                        return $table.tablePairSave($scope.tablePairValid, $scope.backupItem, field, index, stopEdit);
-
-                    break;
             }
 
             return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/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 f22a8d3..310a5df 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
@@ -182,6 +182,8 @@ consoleModule.controller('metadataController', function ($filter, $http, $timeou
         $scope.tablePairSave = $table.tablePairSave;
         $scope.tablePairSaveVisible = $table.tablePairSaveVisible;
 
+        $scope.metadataVariants = $common.mkOptions(['Annotations', 'Configuration']);
+
         var INFO_CONNECT_TO_DB = 'Configure connection to database';
         var INFO_SELECT_SCHEMAS = 'Select schemas to load tables from';
         var INFO_SELECT_TABLES = 'Select tables to import as cache type metadata';
@@ -1041,6 +1043,13 @@ consoleModule.controller('metadataController', function ($filter, $http, $timeou
                 else
                     $scope.backupItem = undefined;
 
+                if ($common.isDefined($scope.backupItem) && !$common.isDefined($scope.backupItem.metadata)) {
+                    $scope.backupItem.metadata = 'Configuration';
+
+                    if ($common.isDefined($scope.selectedItem))
+                        $scope.selectedItem.metadata = 'Configuration';
+                }
+
                 if ($common.getQueryVariable('new'))
                     $state.go('base.configuration.metadata');
             }
@@ -1056,7 +1065,8 @@ consoleModule.controller('metadataController', function ($filter, $http, $timeou
             return {
                 space: $scope.spaces[0]._id,
                 caches: cacheId && _.find($scope.caches, {value: cacheId}) ? [cacheId] :
-                    (!$common.isEmptyArray($scope.caches) ? [$scope.caches[0].value] : [])
+                    (!$common.isEmptyArray($scope.caches) ? [$scope.caches[0].value] : []),
+                metadata: 'Configuration'
             };
         }
 
@@ -1084,43 +1094,45 @@ consoleModule.controller('metadataController', function ($filter, $http, $timeou
             else if (!$common.isValidJavaClass('Value type', item.valueType, false, 'valueType'))
                 return false;
 
-            var qry = $common.metadataForQueryConfigured(item);
+            if (item.metadata === 'Configuration') {
+                var qry = $common.metadataForQueryConfigured(item);
 
-            if (qry) {
-                if ($common.isEmptyArray(item.fields))
-                    return showPopoverMessage($scope.panels, 'query', 'fields-legend', 'Query fields should not be empty');
+                if (qry) {
+                    if ($common.isEmptyArray(item.fields))
+                        return showPopoverMessage($scope.panels, 'query', 'fields-legend', 'Query fields should not be empty');
 
-                var indexes = item.indexes;
+                    var indexes = item.indexes;
 
-                if (indexes && indexes.length > 0) {
-                    if (_.find(indexes, function(index, i) {
-                        if ($common.isEmptyArray(index.fields))
-                            return !showPopoverMessage($scope.panels, 'query', 'indexes' + i, 'Index fields are not specified');
-                    }))
-                        return false;
+                    if (indexes && indexes.length > 0) {
+                        if (_.find(indexes, function (index, i) {
+                                if ($common.isEmptyArray(index.fields))
+                                    return !showPopoverMessage($scope.panels, 'query', 'indexes' + i, 'Index fields are not specified');
+                            }))
+                            return false;
+                    }
                 }
-            }
 
-            var str = $common.metadataForStoreConfigured(item);
+                var str = $common.metadataForStoreConfigured(item);
 
-            if (str) {
-                if ($common.isEmptyString(item.databaseSchema))
-                    return showPopoverMessage($scope.panels, 'store', 'databaseSchema', 'Database schema should not be empty');
+                if (str) {
+                    if ($common.isEmptyString(item.databaseSchema))
+                        return showPopoverMessage($scope.panels, 'store', 'databaseSchema', 'Database schema should not be empty');
 
-                if ($common.isEmptyString(item.databaseTable))
-                    return showPopoverMessage($scope.panels, 'store', 'databaseTable', 'Database table should not be empty');
+                    if ($common.isEmptyString(item.databaseTable))
+                        return showPopoverMessage($scope.panels, 'store', 'databaseTable', 'Database table should not be empty');
 
-                if ($common.isEmptyArray(item.keyFields))
-                    return showPopoverMessage($scope.panels, 'store', 'keyFields-add', 'Key fields are not specified');
+                    if ($common.isEmptyArray(item.keyFields))
+                        return showPopoverMessage($scope.panels, 'store', 'keyFields-add', 'Key fields are not specified');
 
-                if ($common.isJavaBuiltInClass(item.keyType) && item.keyFields.length !== 1)
-                    return showPopoverMessage($scope.panels, 'store', 'keyFields-add', 'Only one field should be specified in case when key type is a Java built-in type');
+                    if ($common.isJavaBuiltInClass(item.keyType) && item.keyFields.length !== 1)
+                        return showPopoverMessage($scope.panels, 'store', 'keyFields-add', 'Only one field should be specified in case when key type is a Java built-in type');
 
-                if ($common.isEmptyArray(item.valueFields))
-                    return showPopoverMessage($scope.panels, 'store', 'valueFields-add', 'Value fields are not specified');
-            }
-            else if (!qry) {
-                return showPopoverMessage($scope.panels, 'query', 'query-title', 'SQL query metadata should be configured');
+                    if ($common.isEmptyArray(item.valueFields))
+                        return showPopoverMessage($scope.panels, 'store', 'valueFields-add', 'Value fields are not specified');
+                }
+                else if (!qry) {
+                    return showPopoverMessage($scope.panels, 'query', 'query-title', 'SQL query metadata should be configured');
+                }
             }
 
             return true;

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/modules/control-center-web/src/main/js/controllers/models/caches.json
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/controllers/models/caches.json b/modules/control-center-web/src/main/js/controllers/models/caches.json
index 2c21f0b..555b440 100644
--- a/modules/control-center-web/src/main/js/controllers/models/caches.json
+++ b/modules/control-center-web/src/main/js/controllers/models/caches.json
@@ -350,20 +350,6 @@
           ]
         },
         {
-          "ui": "table-pair",
-          "id": "indexedTypes",
-          "type": "indexedTypes",
-          "model": "indexedTypes",
-          "keyName": "keyClass",
-          "valueName": "valueClass",
-          "focusId": "IndexedType",
-          "addTip": "Add new key and value classes to indexed types",
-          "removeTip": "Remove item from indexed types",
-          "tip": [
-            "Collection of types to index"
-          ]
-        },
-        {
           "label": "SQL functions",
           "id": "sqlFunctionClasses",
           "type": "table-simple",

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/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 caac576..6c623d8 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
@@ -23,6 +23,21 @@
           }
         },
         {
+          "label": "Metadata",
+          "id": "metadata",
+          "type": "dropdown",
+          "model": "metadata",
+          "items": "metadataVariants",
+          "required": true,
+          "tip": [
+            "Metadata configured in: ",
+            "<ul>",
+            "  <li>Class annotations</li>",
+            "  <li>Configuration</li>",
+            "</ul>"
+          ]
+        },
+        {
           "label": "Key type",
           "id": "keyType",
           "type": "typeahead",
@@ -55,6 +70,11 @@
       ],
       "fields": [
         {
+          "label": "Not available for annotated types",
+          "type": "label",
+          "hide": "backupItem.metadata === 'Configuration'"
+        },
+        {
           "label": "Fields",
           "id": "fields",
           "ui": "table-pair",
@@ -63,6 +83,7 @@
           "keyName": "name",
           "valueName": "className",
           "focusId": "QryField",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "addTip": "Add field to query",
           "removeTip": "Remove field",
           "tip": [
@@ -78,6 +99,7 @@
           "keyName": "field",
           "valueName": "alias",
           "focusId": "Alias",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "addTip": "Add alias to query",
           "removeTip": "Remove alias",
           "tip": [
@@ -91,6 +113,7 @@
           "type": "table-indexes",
           "ui": "table-indexes",
           "model": "indexes",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "addTip": "Add new index",
           "removeTip": "Remove index",
           "addItemTip": "Add new field to index",
@@ -110,10 +133,16 @@
       ],
       "fields": [
         {
+          "label": "Not available for annotated types",
+          "type": "label",
+          "hide": "backupItem.metadata === 'Configuration'"
+        },
+        {
           "label": "Database schema",
           "id": "databaseSchema",
           "type": "text",
           "model": "databaseSchema",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "placeholder": "Input DB schema name",
           "tip": [
             "Schema name in database"
@@ -124,6 +153,7 @@
           "id": "databaseTable",
           "type": "text",
           "model": "databaseTable",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "placeholder": "Input DB table name",
           "tip": [
             "Table name in database"
@@ -137,6 +167,7 @@
           "keyName": "name",
           "valueName": "className",
           "focusId": "KeyField",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "addTip": "Add key field",
           "removeTip": "Remove key field",
           "tip": [
@@ -151,6 +182,7 @@
           "keyName": "name",
           "valueName": "className",
           "focusId": "ValueField",
+          "hide": "backupItem.metadata !== 'Configuration'",
           "addTip": "Add value field",
           "removeTip": "Remove value field",
           "tip": [

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/modules/control-center-web/src/main/js/db.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/db.js b/modules/control-center-web/src/main/js/db.js
index 9cc4c8f..2678ade 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -74,6 +74,7 @@ exports.Space = mongoose.model('Space', new Schema({
 var CacheTypeMetadataSchema = new Schema({
     space: {type: ObjectId, ref: 'Space'},
     caches: [{type: ObjectId, ref: 'Cache'}],
+    metadata: {type: String, enum: ['Annotations', 'Config']},
     kind: {type: String, enum: ['query', 'store', 'both']},
     databaseSchema: String,
     databaseTable: String,
@@ -183,7 +184,6 @@ var CacheSchema = new Schema({
     sqlSchema: String,
     sqlOnheapRowCacheSize: Number,
     longQueryWarningTimeout: Number,
-    indexedTypes: [{keyClass: String, valueClass: String}],
     sqlFunctionClasses: [String],
     statisticsEnabled: Boolean,
     managementEnabled: Boolean,

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-common.js b/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
index e479c2d..9922e8a 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-common.js
@@ -463,3 +463,8 @@ $generatorCommon.binaryIsDefined = function (binary) {
     return binary && ($commonUtils.isDefinedAndNotEmpty(binary.idMapper) || $commonUtils.isDefinedAndNotEmpty(binary.serializer) ||
         $commonUtils.isDefinedAndNotEmpty(binary.typeConfigurations) || ($commonUtils.isDefined(binary.compactFooter) && !binary.compactFooter));
 };
+
+// Extract domain metadata.
+$generatorCommon.domainMetadata = function(domain) {
+    return domain.metadata ? domain.metadata : 'Configuration';
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-java.js b/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
index badf8e3..36fa6a4 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-java.js
@@ -986,16 +986,20 @@ $generatorJava.cacheQuery = function (cache, varName, res) {
     $generatorJava.property(res, varName, cache, 'sqlOnheapRowCacheSize');
     $generatorJava.property(res, varName, cache, 'longQueryWarningTimeout');
 
-    if (cache.indexedTypes && cache.indexedTypes.length > 0) {
+    var indexedTypes = _.filter(cache.metadatas, function (meta) {
+        return meta.metadata === 'Annotations'
+    });
+
+    if ($commonUtils.isDefinedAndNotEmpty(indexedTypes)) {
         res.emptyLineIfNeeded();
 
         res.startBlock(varName + '.setIndexedTypes(');
 
-        var len = cache.indexedTypes.length - 1;
+        var len = indexedTypes.length - 1;
 
-        _.forEach(cache.indexedTypes, function(pair, ix) {
-            res.line($generatorJava.toJavaCode(res.importClass(pair.keyClass), 'class') + ', ' +
-                $generatorJava.toJavaCode(res.importClass(pair.valueClass), 'class') + (ix < len ? ',' : ''));
+        _.forEach(indexedTypes, function(meta, ix) {
+            res.line($generatorJava.toJavaCode(res.importClass(meta.keyType), 'class') + ', ' +
+                $generatorJava.toJavaCode(res.importClass(meta.valueType), 'class') + (ix < len ? ',' : ''));
         });
 
         res.endBlock(');');
@@ -1172,14 +1176,17 @@ $generatorJava.cacheStore = function (cache, metadatas, cacheVarName, res) {
 
                 res.needEmptyLine = true;
 
-                if (metadatas && _.find(metadatas, function (meta) {
-                    return $commonUtils.isDefinedAndNotEmpty(meta.databaseTable);
-                })) {
+                var metaConfigs = _.filter(metadatas, function (meta) {
+                    return $generatorCommon.domainMetadata(meta) === 'Configuration' &&
+                        $commonUtils.isDefinedAndNotEmpty(meta.databaseTable);
+                });
+
+                if ($commonUtils.isDefinedAndNotEmpty(metaConfigs)) {
                     $generatorJava.declareVariable(res, 'jdbcTypes', 'java.util.Collection', 'java.util.ArrayList', 'org.apache.ignite.cache.store.jdbc.JdbcType');
 
                     res.needEmptyLine = true;
 
-                    _.forEach(metadatas, function (meta) {
+                    _.forEach(metaConfigs, function (meta) {
                         if ($commonUtils.isDefinedAndNotEmpty(meta.databaseTable))
                             res.line('jdbcTypes.add(jdbcType' + $generatorJava.extractType(meta.valueType) + '(' + cacheVarName + '.getName()));');
                     });
@@ -1489,13 +1496,15 @@ $generatorJava.metadataQuery = function (meta, res) {
     if (!res)
         res = $generatorCommon.builder();
 
-    $generatorJava.metadataQueryFields(res, meta);
+    if ($generatorCommon.domainMetadata(meta) === 'Configuration') {
+        $generatorJava.metadataQueryFields(res, meta);
 
-    $generatorJava.metadataQueryAliases(res, meta);
+        $generatorJava.metadataQueryAliases(res, meta);
 
-    $generatorJava.metadataQueryIndexes(res, meta);
+        $generatorJava.metadataQueryIndexes(res, meta);
 
-    res.needEmptyLine = true;
+        res.needEmptyLine = true;
+    }
 
     return res;
 };
@@ -1505,19 +1514,21 @@ $generatorJava.metadataStore = function (meta, withTypes, res) {
     if (!res)
         res = $generatorCommon.builder();
 
-    $generatorJava.property(res, 'jdbcType', meta, 'databaseSchema');
-    $generatorJava.property(res, 'jdbcType', meta, 'databaseTable');
+    if ($generatorCommon.domainMetadata(meta) === 'Configuration') {
+        $generatorJava.property(res, 'jdbcType', meta, 'databaseSchema');
+        $generatorJava.property(res, 'jdbcType', meta, 'databaseTable');
 
-    if (withTypes) {
-        $generatorJava.classNameProperty(res, 'jdbcType', meta, 'keyType');
-        $generatorJava.property(res, 'jdbcType', meta, 'valueType');
-    }
+        if (withTypes) {
+            $generatorJava.classNameProperty(res, 'jdbcType', meta, 'keyType');
+            $generatorJava.property(res, 'jdbcType', meta, 'valueType');
+        }
 
-    $generatorJava.metadataDatabaseFields(res, meta, 'keyFields');
+        $generatorJava.metadataDatabaseFields(res, meta, 'keyFields');
 
-    $generatorJava.metadataDatabaseFields(res, meta, 'valueFields');
+        $generatorJava.metadataDatabaseFields(res, meta, 'valueFields');
 
-    res.needEmptyLine = true;
+        res.needEmptyLine = true;
+    }
 
     return res;
 };
@@ -1527,13 +1538,16 @@ $generatorJava.cacheMetadatas = function (metadatas, varName, res) {
     if (!res)
         res = $generatorCommon.builder();
 
+    var metaConfigs = _.filter(metadatas, function (meta) {
+        return $generatorCommon.domainMetadata(meta) === 'Configuration' &&
+            $commonUtils.isDefinedAndNotEmpty(meta.fields);
+    });
+
     // Generate cache type metadata configs.
-    if (metadatas && _.find(metadatas, function (meta) {
-            return $commonUtils.isDefinedAndNotEmpty(meta.fields);
-        })) {
+    if ($commonUtils.isDefinedAndNotEmpty(metaConfigs)) {
         $generatorJava.declareVariable(res, 'queryEntities', 'java.util.Collection', 'java.util.ArrayList', 'org.apache.ignite.cache.QueryEntity');
 
-        _.forEach(metadatas, function (meta) {
+        _.forEach(metaConfigs, function (meta) {
             if ($commonUtils.isDefinedAndNotEmpty(meta.fields))
                 res.line('queryEntities.add(queryEntity' + $generatorJava.extractType(meta.valueType) + '());');
         });
@@ -1581,7 +1595,8 @@ $generatorJava.clusterMetadatas = function (caches, res) {
 
     _.forEach(caches, function (cache) {
         _.forEach(cache.metadatas, function (meta) {
-            if (!$commonUtils.isDefined(_.find(metadatas, function (m) {
+            if ($generatorCommon.domainMetadata(meta) === 'Configuration' &&
+                !$commonUtils.isDefined(_.find(metadatas, function (m) {
                     return m === meta.valueType;
                 }))) {
                 $generatorJava.resetVariables(res);
@@ -2021,9 +2036,10 @@ $generatorJava.pojos = function (caches, useConstructor, includeKeyFields) {
     _.forEach(caches, function(cache) {
         _.forEach(cache.metadatas, function(meta) {
             // Skip already generated classes.
-            if (!_.find(metadatas, {valueType: meta.valueType}) &&
+            if ($generatorCommon.domainMetadata(meta) === 'Configuration' &&
+                !_.find(metadatas, {valueType: meta.valueType}) &&
                 // Skip metadata without value fields.
-                $commonUtils.isDefined(meta.valueFields) && meta.valueFields.length > 0) {
+                $commonUtils.isDefinedAndNotEmpty(meta.valueFields)) {
                 var metadata = {};
 
                 // Key class generation only if key is not build in java class.

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js b/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
index bf74f41..5d14a22 100644
--- a/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
+++ b/modules/control-center-web/src/main/js/helpers/generator/generator-xml.js
@@ -765,13 +765,17 @@ $generatorXml.cacheQuery = function(cache, res) {
     $generatorXml.property(res, cache, 'sqlOnheapRowCacheSize');
     $generatorXml.property(res, cache, 'longQueryWarningTimeout');
 
-    if (cache.indexedTypes && cache.indexedTypes.length > 0) {
+    var indexedTypes = _.filter(cache.metadatas, function (meta) {
+        return meta.metadata === 'Annotations'
+    });
+
+    if (indexedTypes.length > 0) {
         res.startBlock('<property name="indexedTypes">');
         res.startBlock('<list>');
 
-        _.forEach(cache.indexedTypes, function(pair) {
-            res.line('<value>' + $dataStructures.fullClassName(pair.keyClass) + '</value>');
-            res.line('<value>' + $dataStructures.fullClassName(pair.valueClass) + '</value>');
+        _.forEach(cache.indexedTypes, function(meta) {
+            res.line('<value>' + $dataStructures.fullClassName(meta.keyType) + '</value>');
+            res.line('<value>' + $dataStructures.fullClassName(meta.valueType) + '</value>');
         });
 
         res.endBlock('</list>');
@@ -810,11 +814,16 @@ $generatorXml.cacheStore = function(cache, metadatas, res) {
                 res.line('<bean class="' + $generatorCommon.jdbcDialectClassName(storeFactory.dialect) + '"/>');
                 res.endBlock('</property>');
 
-                if (metadatas && metadatas.length > 0) {
+                var metaConfigs = _.filter(metadatas, function (meta) {
+                    return $generatorCommon.domainMetadata(meta) === 'Configuration' &&
+                        $commonUtils.isDefinedAndNotEmpty(meta.databaseTable);
+                });
+
+                if ($commonUtils.isDefinedAndNotEmpty(metaConfigs)) {
                     res.startBlock('<property name="types">');
                     res.startBlock('<list>');
 
-                    _.forEach(metadatas, function (meta) {
+                    _.forEach(metaConfigs, function (meta) {
                         res.startBlock('<bean class="org.apache.ignite.cache.store.jdbc.JdbcType">');
 
                         $generatorXml.property(res, cache, 'name', 'cacheName');
@@ -1113,13 +1122,15 @@ $generatorXml.metadataQuery = function(meta, res) {
     if (!res)
         res = $generatorCommon.builder();
 
-    $generatorXml.metadataQueryFields(res, meta);
+    if ($generatorCommon.domainMetadata(meta) === 'Configuration') {
+        $generatorXml.metadataQueryFields(res, meta);
 
-    $generatorXml.metadataQueryAliases(res, meta);
+        $generatorXml.metadataQueryAliases(res, meta);
 
-    $generatorXml.metadataQueryIndexes(res, meta);
+        $generatorXml.metadataQueryIndexes(res, meta);
 
-    res.needEmptyLine = true;
+        res.needEmptyLine = true;
+    }
 
     return res;
 };
@@ -1129,17 +1140,19 @@ $generatorXml.metadataStore = function(meta, res) {
     if (!res)
         res = $generatorCommon.builder();
 
-    $generatorXml.property(res, meta, 'databaseSchema');
-    $generatorXml.property(res, meta, 'databaseTable');
+    if ($generatorCommon.domainMetadata(meta) === 'Configuration') {
+        $generatorXml.property(res, meta, 'databaseSchema');
+        $generatorXml.property(res, meta, 'databaseTable');
 
-    res.needEmptyLine = true;
+        res.needEmptyLine = true;
 
-    if (!$dataStructures.isJavaBuiltInClass(meta.keyType))
-        $generatorXml.metadataDatabaseFields(res, meta, 'keyFields');
+        if (!$dataStructures.isJavaBuiltInClass(meta.keyType))
+            $generatorXml.metadataDatabaseFields(res, meta, 'keyFields');
 
-    $generatorXml.metadataDatabaseFields(res, meta, 'valueFields');
+        $generatorXml.metadataDatabaseFields(res, meta, 'valueFields');
 
-    res.needEmptyLine = true;
+        res.needEmptyLine = true;
+    }
 
     return res;
 };
@@ -1167,13 +1180,18 @@ $generatorXml.cacheMetadatas = function(metadatas, res) {
     if (!res)
         res = $generatorCommon.builder();
 
-    if (metadatas && metadatas.length > 0) {
+    var metaConfigs = _.filter(metadatas, function (meta) {
+        return $generatorCommon.domainMetadata(meta) === 'Configuration' &&
+            $commonUtils.isDefinedAndNotEmpty(meta.fields);
+    });
+
+    if ($commonUtils.isDefinedAndNotEmpty(metaConfigs)) {
         res.emptyLineIfNeeded();
 
         res.startBlock('<property name="queryEntities">');
         res.startBlock('<list>');
 
-        _.forEach(metadatas, function (meta) {
+        _.forEach(metaConfigs, function (meta) {
             $generatorXml.cacheQueryMetadata(meta, res);
         });
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/a8ac7439/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 1676af1..949d551 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
@@ -432,8 +432,6 @@ mixin form-row-custom(lblClasses, fieldClasses, dataSource)
                                     +btn-save('tableSimpleSaveVisible(field, -1)', 'tableSimpleSave(tableSimpleValid, backupItem, field, -1)')
                                     .input-tip
                                         input.form-control(id='new{{::field.focusId}}' type='text' ng-model='field.newValue' placeholder='{{::field.placeholder}}' on-enter='tableSimpleSaveVisible(field, -1) && tableSimpleSave(tableSimpleValid, backupItem, field, -1)' on-escape='tableReset()')
-        .group-section(ng-switch-when='indexedTypes')
-            +table-pair('Index key-value type pairs', fieldMdl, 'keyClass', 'valueClass', 'Key full class name', 'Value class full name', true, true, '/')
         div(ng-switch-when='fields' ng-hide=fieldHide)
             +table-pair('{{::field.label}}', fieldMdl, 'name', 'className', 'Field name', 'Field full class name', false, true, '/')
         .group-section(ng-switch-when='aliases' ng-hide=fieldHide)