Repository: ignite
Updated Branches:
  refs/heads/ignite-843-rc2 c739b2b4c -> 404ff2696


IGNITE-1869 Improve metadata loading from database.


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

Branch: refs/heads/ignite-843-rc2
Commit: 404ff2696a47928cc618f3111fb3d7b72c7e1408
Parents: c739b2b
Author: AKuznetsov <[email protected]>
Authored: Sat Jan 9 23:22:10 2016 +0700
Committer: AKuznetsov <[email protected]>
Committed: Sun Jan 10 23:38:44 2016 +0700

----------------------------------------------------------------------
 .../ui-ace-pojos/ui-ace-pojos.controller.js     |   4 +-
 .../main/js/controllers/caches-controller.js    |   6 +-
 .../main/js/controllers/metadata-controller.js  |  77 ++++++--
 .../src/main/js/controllers/models/caches.json  |   4 +-
 .../main/js/helpers/generator/generator-java.js |   4 +-
 .../src/main/js/public/stylesheets/style.scss   |  48 +----
 .../src/main/js/routes/metadata.js              | 176 ++++++++++++-------
 .../js/views/configuration/metadata-load.jade   |  44 ++++-
 .../main/js/views/configuration/summary.jade    |   4 +-
 .../src/main/js/views/includes/controls.jade    |   4 +-
 .../src/main/js/views/settings/profile.jade     |   8 +-
 .../src/main/js/views/sql/sql.jade              |   6 +-
 .../main/js/views/templates/agent-download.jade |   4 +-
 13 files changed, 245 insertions(+), 144 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
 
b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
index 91857d3..53d78e4 100644
--- 
a/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
+++ 
b/modules/control-center-web/src/main/js/app/directives/ui-ace-pojos/ui-ace-pojos.controller.js
@@ -50,7 +50,9 @@ export default ['$scope', 'IgniteUiAceOnLoad', 
function($scope, onLoad) {
         const classes = ctrl.classes = [];
 
         _.forEach(ctrl.metadatas, (meta) => {
-            classes.push(meta.keyType);
+            if (meta.keyType)
+                classes.push(meta.keyType);
+
             classes.push(meta.valueType);
         });
     };

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/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 e67b312..6818fc0 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
@@ -388,7 +388,7 @@ consoleModule.controller('cachesController', [
                                 }
                             }, true);
 
-                            $scope.$watchCollection('backupItem.metadatas', 
function (val, old) {
+                            $scope.$watchCollection('backupItem.metadatas', 
function (val) {
                                 if ($scope.selectedItemWatchGuard)
                                     $scope.selectedItemWatchGuard = false;
                                 else {
@@ -508,7 +508,7 @@ consoleModule.controller('cachesController', [
                     if (item.cacheStoreFactory.kind === 
'CacheJdbcPojoStoreFactory') {
                         if 
($common.isEmptyString(item.cacheStoreFactory.CacheJdbcPojoStoreFactory.dataSourceBean))
                             return showPopoverMessage($scope.panels, 'store', 
'dataSourceBean',
-                                'Data source bean should not be empty');
+                                'Data source bean name should not be empty');
 
                         if 
(!item.cacheStoreFactory.CacheJdbcPojoStoreFactory.dialect)
                             return showPopoverMessage($scope.panels, 'store', 
'dialect',
@@ -522,7 +522,7 @@ consoleModule.controller('cachesController', [
 
                         if 
($common.isEmptyString(item.cacheStoreFactory.CacheJdbcBlobStoreFactory.dataSourceBean))
                             return showPopoverMessage($scope.panels, 'store', 
'dataSourceBean',
-                                'Data source bean should not be empty');
+                                'Data source bean name should not be empty');
                     }
                 }
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/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 e077038..5016b60 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
@@ -27,6 +27,10 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
 
             $scope.ui.packageName = 
$commonUtils.toJavaPackageName($scope.$root.user.email.replace('@', 
'.').split('.')
                 .reverse().join('.') + '.model');
+            $scope.ui.builtinKeys = true;
+            $scope.ui.usePrimitives = true;
+            $scope.ui.generateCaches = true;
+            $scope.ui.generatedCachesClusters = [];
 
             $scope.joinTip = $common.joinTip;
             $scope.getModel = $common.getModel;
@@ -121,7 +125,8 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
 
             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';
+            var INFO_SELECT_TABLES = 'Select tables to load as cache type 
metadata';
+            var INFO_SELECT_OPTIONS = 'Select load metadata options';
             var LOADING_JDBC_DRIVERS = {text: 'Loading JDBC drivers...'};
             var LOADING_SCHEMAS = {text: 'Loading schemas...'};
             var LOADING_TABLES = {text: 'Loading tables...'};
@@ -440,6 +445,9 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                 });
             };
 
+            /**
+             * Load list of database schemas.
+             */
             function _loadSchemas() {
                 $loading.start('loadingMetadataFromDb');
 
@@ -475,7 +483,10 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                     });
             }
 
-            function _loadMetadata() {
+            /**
+             * Load list of database tables.
+             */
+            function _loadTables() {
                 $loading.start('loadingMetadataFromDb');
 
                 $scope.loadMeta.allTablesSelected = false;
@@ -502,7 +513,6 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
 
                         $scope.loadMeta.tables = tables;
                         $scope.loadMeta.action = 'tables';
-                        $scope.loadMeta.button = 'Save';
                     })
                     .error(function (errMsg) {
                         $common.showError(errMsg);
@@ -515,6 +525,15 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                     });
             }
 
+            /**
+             * Show page with load metadata options.
+             */
+            function _selectOptions() {
+                $scope.loadMeta.action = 'options';
+                $scope.loadMeta.button = 'Save';
+                $scope.loadMeta.info = INFO_SELECT_OPTIONS;
+            }
+
             function toJavaClassName(name) {
                 var len = name.length;
 
@@ -554,7 +573,11 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                             var lastItem;
                             var newItems = [];
 
-                            _.forEach(savedBatch, function (savedItem) {
+                            _.forEach(savedBatch.generatedCaches, function 
(generatedCache) {
+                                $scope.caches.push(generatedCache);
+                            });
+
+                            _.forEach(savedBatch.savedMetas, function 
(savedItem) {
                                 var idx = _.findIndex($scope.metadatas, 
function (meta) {
                                     return meta._id === savedItem._id;
                                 });
@@ -617,11 +640,12 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
 
                 function dbField(name, jdbcType, nullable) {
                     return {
+                        jdbcType: jdbcType,
                         databaseFieldName: name,
                         databaseFieldType: jdbcType.dbName,
                         javaFieldName: toJavaName(name),
                         javaFieldType: nullable ? jdbcType.javaType :
-                            (jdbcType.primitiveType ? jdbcType.primitiveType : 
jdbcType.javaType)
+                            ($scope.ui.usePrimitives && jdbcType.primitiveType 
? jdbcType.primitiveType : jdbcType.javaType)
                     };
                 }
 
@@ -639,7 +663,8 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                         if (dup)
                             dupCnt++;
 
-                        var valType = 
$commonUtils.toJavaPackageName($scope.ui.packageName) + '.' + 
toJavaClassName(tableName);
+                        var typeName = toJavaClassName(tableName);
+                        var valType = 
$commonUtils.toJavaPackageName($scope.ui.packageName) + '.' + typeName;
 
                         var _containKey = false;
 
@@ -695,6 +720,8 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                         var dupSfx = (dup ? '_' + dupCnt : '');
 
                         meta.keyType = valType + 'Key' + dupSfx;
+
+                        meta.keyType = valType + 'Key' + dupSfx;
                         meta.valueType = valType + dupSfx;
                         meta.databaseSchema = table.schema;
                         meta.databaseTable = tableName;
@@ -703,6 +730,19 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                         meta.keyFields = keyFields;
                         meta.valueFields = valFields;
 
+                        // Use Java built-in type for key.
+                        if ($scope.ui.builtinKeys && meta.keyFields.length === 
1) {
+                            meta.keyType = meta.keyFields[0].jdbcType.javaType;
+                            meta.keyFields = [];
+                        }
+
+                        // Prepare caches for generation.
+                        if ($scope.ui.generateCaches)
+                            meta.newCache = {
+                                name: typeName,
+                                clusters: $scope.ui.generatedCachesClusters
+                            };
+
                         batch.push(meta);
                         tables.push(tableName);
                     }
@@ -749,9 +789,14 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
                 if (!$scope.nextAvailable())
                     return;
 
-                $scope.loadMeta.action === 'connect' && _loadSchemas();
-                $scope.loadMeta.action === 'schemas' && _loadMetadata();
-                $scope.loadMeta.action === 'tables' && _saveMetadata();
+                if ($scope.loadMeta.action === 'connect')
+                    _loadSchemas();
+                else if ($scope.loadMeta.action === 'schemas')
+                    _loadTables();
+                else if ($scope.loadMeta.action === 'tables')
+                    _selectOptions();
+                else if ($scope.loadMeta.action === 'options')
+                    _saveMetadata();
             };
 
             $scope.nextTooltipText = function () {
@@ -768,15 +813,19 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
             };
 
             $scope.loadMetadataPrev = function () {
-                if  ($scope.loadMeta.action === 'tables' && 
$scope.loadMeta.schemas.length > 0) {
+                $scope.loadMeta.button = 'Next';
+
+                if  ($scope.loadMeta.action === 'options') {
+                    $scope.loadMeta.action = 'tables';
+                    $scope.loadMeta.info = INFO_SELECT_TABLES;
+                }
+                else if  ($scope.loadMeta.action === 'tables' && 
$scope.loadMeta.schemas.length > 0) {
                     $scope.loadMeta.action = 'schemas';
-                    $scope.loadMeta.button = 'Next';
                     $scope.loadMeta.info = INFO_SELECT_SCHEMAS;
                     $scope.loadMeta.loadingOptions = LOADING_TABLES;
                 }
                 else {
                     $scope.loadMeta.action = 'connect';
-                    $scope.loadMeta.button = 'Next';
                     $scope.loadMeta.info = INFO_CONNECT_TO_DB;
                     $scope.loadMeta.loadingOptions = LOADING_SCHEMAS;
                 }
@@ -797,9 +846,13 @@ consoleModule.controller('metadataController', function 
($filter, $http, $timeou
             $http.post('/api/v1/configuration/metadata/list')
                 .success(function (data) {
                     $scope.spaces = data.spaces;
+                    $scope.clusters = data.clusters;
                     $scope.caches = data.caches;
                     $scope.metadatas = data.metadatas;
 
+                    if (_.size($scope.clusters) > 0)
+                        
$scope.ui.generatedCachesClusters.push($scope.clusters[0].value);
+
                     // Load page descriptor.
                     $http.get('/models/metadata.json')
                         .success(function (data) {

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/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 9f2a65c..863179c 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
@@ -416,7 +416,7 @@
               "expanded": true,
               "fields": [
                 {
-                  "label": "Data source bean",
+                  "label": "Data source bean name",
                   "id": "dataSourceBean",
                   "type": "text",
                   "path": "cacheStoreFactory.CacheJdbcPojoStoreFactory",
@@ -466,7 +466,7 @@
                   ]
                 },
                 {
-                  "label": "Data source bean",
+                  "label": "Data source bean name",
                   "id": "dataSourceBean",
                   "type": "text",
                   "path": "cacheStoreFactory.CacheJdbcBlobStoreFactory",

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/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 423d043..701b40c 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
@@ -1083,7 +1083,9 @@ $generatorJava.cacheStore = function (cache, metadatas, 
cacheVarName, res) {
                 $generatorJava.cacheStoreDataSource(storeFactory, res);
 
                 res.line('setDataSource(dataSource);');
-                res.line('');
+
+                res.needEmptyLine = true;
+
                 res.line('return super.create();');
                 res.endBlock('}');
                 res.endBlock('};');

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/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 8f11f31..2750954 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
@@ -662,7 +662,7 @@ button.form-control {
         float: right;
     }
 
-    .fa-chevron-circle-up, .fa-chevron-circle-down {
+    .fa-chevron-circle-right, .fa-chevron-circle-down {
         font-size: $font-size-base;
         color: inherit;
         float: left;
@@ -830,26 +830,6 @@ button.form-control {
     }
 }
 
-.metadata-package-name {
-    margin: 10px 0;
-    overflow: hidden;
-
-    label {
-        line-height: $input-height;
-        float: left;
-    }
-
-    input {
-        width: 100%
-    }
-
-    span {
-        display: block;
-        overflow: hidden;
-        padding-left: 10px;
-    }
-}
-
 .metadata-content {
     margin: 15px 30px;
 }
@@ -960,9 +940,8 @@ button.form-control {
 }
 
 .panel-details {
-    margin-top: 10px;
-
-    padding: 10px;
+    margin-top: 5px;
+    padding: 5px;
 
     border-radius: 5px;
     border: thin dotted $ignite-border-color;
@@ -1159,6 +1138,7 @@ label {
 
 .form-horizontal .checkbox {
     padding-top: 0;
+    min-height: 0;
 }
 
 .input-tip {
@@ -1229,27 +1209,9 @@ label {
     margin-right: 5px;
 }
 
-.fa-chevron-circle-up {
-    color: $brand-primary;
-    margin-right: 5px;
-}
-
-.fa-chevron-circle-left {
-    color: $brand-primary;
-    margin-right: 5px;
-
-    font-size: 15px;
-
-    line-height: $line-height-base;
-}
-
 .fa-chevron-circle-right {
     color: $brand-primary;
     margin-right: 5px;
-
-    font-size: 15px;
-
-    line-height: $line-height-base;
 }
 
 .fa-question-circle {
@@ -1707,7 +1669,6 @@ button.select-toggle {
 }
 
 button.select-toggle::after {
-    vertical-align: middle;
     content: "";
     border-top: 0.3em solid;
     border-right: 0.3em solid transparent;
@@ -1715,6 +1676,7 @@ button.select-toggle::after {
     position: absolute;
     right: 5px;
     top: 50%;
+    vertical-align: middle;
 }
 
 // Prevent scroll bars from being hidden for OS X.

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/routes/metadata.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/metadata.js 
b/modules/control-center-web/src/main/js/routes/metadata.js
index 617c5c3..c8f5eba 100644
--- a/modules/control-center-web/src/main/js/routes/metadata.js
+++ b/modules/control-center-web/src/main/js/routes/metadata.js
@@ -36,27 +36,35 @@ router.post('/list', function (req, res) {
                 return value._id;
             });
 
-            // Get all caches for spaces.
-            db.Cache.find({space: {$in: 
space_ids}}).sort('name').exec(function (err, caches) {
+            // Get all clusters for spaces.
+            db.Cluster.find({space: {$in: space_ids}}, '_id 
name').sort('name').exec(function (err, clusters) {
                 if (db.processed(err, res)) {
-                    // Get all metadata for spaces.
-                    db.CacheTypeMetadata.find({space: {$in: 
space_ids}}).sort('valueType').exec(function (err, metadatas) {
+                    // Get all caches for spaces.
+                    db.Cache.find({space: {$in: 
space_ids}}).sort('name').exec(function (err, caches) {
                         if (db.processed(err, res)) {
-                            // Remove deleted caches.
-                            _.forEach(metadatas, function (meta) {
-                                meta.caches = _.filter(meta.caches, function 
(cacheId) {
-                                    return _.findIndex(caches, function 
(cache) {
-                                            return cache._id.equals(cacheId);
-                                        }) >= 0;
-                                });
-                            });
-
-                            res.json({
-                                spaces: spaces,
-                                caches: caches.map(function (cache) {
-                                    return {value: cache._id, label: 
cache.name};
-                                }),
-                                metadatas: metadatas
+                            // Get all metadata for spaces.
+                            db.CacheTypeMetadata.find({space: {$in: 
space_ids}}).sort('valueType').exec(function (err, metadatas) {
+                                if (db.processed(err, res)) {
+                                    // Remove deleted caches.
+                                    _.forEach(metadatas, function (meta) {
+                                        meta.caches = _.filter(meta.caches, 
function (cacheId) {
+                                            return _.findIndex(caches, 
function (cache) {
+                                                    return 
cache._id.equals(cacheId);
+                                                }) >= 0;
+                                        });
+                                    });
+
+                                    res.json({
+                                        spaces: spaces,
+                                        clusters: clusters.map(function 
(cluster) {
+                                            return {value: cluster._id, label: 
cluster.name};
+                                        }),
+                                        caches: caches.map(function (cache) {
+                                            return {value: cache._id, label: 
cache.name};
+                                        }),
+                                        metadatas: metadatas
+                                    });
+                                }
                             });
                         }
                     });
@@ -66,66 +74,110 @@ router.post('/list', function (req, res) {
     });
 });
 
-function _save(metas, res) {
-    var savedMetas = [];
+function _saveMeta(meta, savedMetas, callback) {
+    var metaId = meta._id;
+    var caches = meta.caches;
 
-    if (metas && metas.length > 0)
-        async.forEachOf(metas, function(meta, idx, callback) {
-            var metaId = meta._id;
-            var caches = meta.caches;
-
-            if (metaId)
-                db.CacheTypeMetadata.update({_id: meta._id}, meta, {upsert: 
true}, function (err) {
+    if (metaId)
+        db.CacheTypeMetadata.update({_id: meta._id}, meta, {upsert: true}, 
function (err) {
+            if (err)
+                callback(err);
+            else
+                db.Cache.update({_id: {$in: caches}}, {$addToSet: {metadatas: 
metaId}}, {multi: true}, function (err) {
                     if (err)
                         callback(err);
                     else
-                        db.Cache.update({_id: {$in: caches}}, {$addToSet: 
{metadatas: metaId}}, {multi: true}, function (err) {
+                        db.Cache.update({_id: {$nin: caches}}, {$pull: 
{metadatas: metaId}}, {multi: true}, function (err) {
                             if (err)
                                 callback(err);
-                            else
-                                db.Cache.update({_id: {$nin: caches}}, {$pull: 
{metadatas: metaId}}, {multi: true}, function (err) {
-                                    if (err)
-                                        callback(err);
-                                    else {
-                                        savedMetas.push(meta);
-
-                                        callback();
-                                    }
-                                });
+                            else {
+                                savedMetas.push(meta);
+
+                                callback();
+                            }
                         });
                 });
-            else {
-                db.CacheTypeMetadata.findOne({space: meta.space, valueType: 
meta.valueType}, function (err, metadata) {
-                    if (err)
-                        callback(err);
-                    else
-                        if (metadata)
-                            return callback('Cache type metadata with value 
type: "' + metadata.valueType + '" already exist.');
+        });
+    else
+        db.CacheTypeMetadata.findOne({space: meta.space, valueType: 
meta.valueType}, function (err, metadata) {
+            if (err)
+                callback(err);
+            else
+            if (metadata)
+                return callback('Cache type metadata with value type: "' + 
metadata.valueType + '" already exist.');
 
-                        (new db.CacheTypeMetadata(meta)).save(function (err, 
metadata) {
-                            if (err)
-                                callback(err);
-                            else {
-                                metaId = metadata._id;
+            (new db.CacheTypeMetadata(meta)).save(function (err, metadata) {
+                if (err)
+                    callback(err);
+                else {
+                    metaId = metadata._id;
 
-                                db.Cache.update({_id: {$in: caches}}, 
{$addToSet: {metadatas: metaId}}, {multi: true}, function (err) {
-                                    if (err)
-                                        callback(err);
-                                    else {
-                                        savedMetas.push(metadata);
+                    db.Cache.update({_id: {$in: caches}}, {$addToSet: 
{metadatas: metaId}}, {multi: true}, function (err) {
+                        if (err)
+                            callback(err);
+                        else {
+                            savedMetas.push(metadata);
 
-                                        callback();
-                                    }
-                                });
-                            }
-                        });
+                            callback();
+                        }
                     });
                 }
+            });
+        });
+}
+
+function _save(metas, res) {
+    var savedMetas = [];
+    var generatedCaches = [];
+
+    if (metas && metas.length > 0)
+        async.forEachOf(metas, function(meta, idx, callback) {
+            if (meta.newCache) {
+                db.Cache.findOne({space: meta.space, name: 
meta.newCache.name}, function (err, cache) {
+                    if (db.processed(err, res))
+                        if (cache) // Cache already exists, just save metadata.
+                            _saveMeta(meta, savedMetas, callback);
+                        else {
+                            // If cache not found, then create it and 
associate with metadata.
+                            (new db.Cache({
+                                space: meta.space,
+                                name: meta.newCache.name,
+                                clusters: meta.newCache.clusters,
+                                cacheMode: 'PARTITIONED',
+                                atomicityMode: 'ATOMIC',
+                                cacheStoreFactory: {
+                                    kind: 'CacheJdbcPojoStoreFactory',
+                                    CacheJdbcPojoStoreFactory: {
+                                        dataSourceBean: 'dataSource',
+                                        dialect: 'H2'
+                                    }
+                                },
+                                readThrough: true,
+                                writeThrough: true
+                            })).save(function (err, cache) {
+                                var cacheId = cache._id;
+
+                                if (db.processed(err, res)) {
+                                    db.Cluster.update({_id: {$in: 
cache.clusters}}, {$addToSet: {caches: cacheId}}, {multi: true}, function (err) 
{
+                                        if (db.processed(err, res)) {
+                                            meta.caches = [cacheId];
+                                            generatedCaches.push({ value: 
cacheId, label: cache.name });
+
+                                            _saveMeta(meta, savedMetas, 
callback);
+                                        }
+                                    });
+                                }
+                            });
+                        }
+                });
+            }
+            else
+                _saveMeta(meta, savedMetas, callback);
         }, function (err) {
             if (err)
                 res.status(500).send(err);
             else
-                res.send(savedMetas);
+                res.send({ savedMetas: savedMetas, generatedCaches: 
generatedCaches });
         });
     else
         res.status(500).send('Nothing to save!');

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/views/configuration/metadata-load.jade
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/views/configuration/metadata-load.jade 
b/modules/control-center-web/src/main/js/views/configuration/metadata-load.jade
index d80368e4..dd1a320 100644
--- 
a/modules/control-center-web/src/main/js/views/configuration/metadata-load.jade
+++ 
b/modules/control-center-web/src/main/js/views/configuration/metadata-load.jade
@@ -27,10 +27,10 @@ mixin chk(mdl, change, tip)
                 h4.modal-title Load metadata from database
             .metadata-content(ng-show='loadMeta.action == "drivers"')
             .metadata-content(ng-show='loadMeta.action == "connect"')
-                form.form-horizontal(name='loadForm' novalidate)
+                form.form-horizontal(name='connectForm' novalidate)
                     .settings-row(ng-repeat='field in metadataDb')
                         +form-row-custom(['col-xs-4 col-sm-3 col-md-3'], 
['col-xs-8 col-sm-9 col-md-9'], 'preset')
-                div(ng-show='preset.drvIdx < 1')
+                div(ng-show='preset.drvIdx < 1' style='margin-top: 6px')
                     label Demo description:
                     ul
                         li In-memory H2 database server will be started inside 
agent
@@ -66,10 +66,6 @@ mixin chk(mdl, change, tip)
                                                     td
                                                         label {{::schema.name}}
             .metadata-content(ng-show='loadMeta.action == "tables"' 
style='margin-bottom: 50px')
-                .metadata-package-name
-                    label.required Package:
-                    span
-                        input.form-control(id='metadataLoadPackage' 
type="text" ng-model='ui.packageName' placeholder='Package for POJOs 
generation' bs-tooltip='' data-title='Package that will be used for POJOs 
generation' data-placement='top' data-trigger='hover')
                 table.table.metadata(st-table='loadMeta.displayedTables' 
st-safe-src='loadMeta.tables')
                     thead
                         tr
@@ -86,7 +82,7 @@ mixin chk(mdl, change, tip)
                     tbody
                         tr
                             td(colspan='3')
-                                .scrollable-y(style='height: 146px')
+                                .scrollable-y(style='height: 184px')
                                     
table.table-modal-striped(id='metadataTableData')
                                         tbody
                                             tr(ng-repeat='table in 
loadMeta.displayedTables')
@@ -96,6 +92,40 @@ mixin chk(mdl, change, tip)
                                                     label {{::table.schema}}
                                                 td
                                                     label {{::table.tbl}}
+            .metadata-content(ng-show='loadMeta.action == "options"' 
style='margin-bottom: 152px')
+                form.form-horizontal(name='optionsForm' novalidate)
+                    .settings-row
+                        .col-xs-3.col-sm-2.col-md-2.required
+                            label.required Package:
+                        .col-xs-9.col-sm-10.col-md-10
+                            i.tipField.fa.fa-question-circle(bs-tooltip='' 
data-title='Package that will be used for POJOs generation')
+                            .input-tip
+                                input.form-control(id='metadataPackageName' 
type="text" ng-model='ui.packageName' placeholder='Package for POJOs 
generation')
+                    .settings-row
+                        .checkbox
+                            label
+                                input(id='metadataBuiltinKeys' type='checkbox' 
ng-model='ui.builtinKeys')
+                                | Use Java built-in types for keys
+                                i.tipLabel.fa.fa-question-circle(bs-tooltip='' 
data-title='Use Java built-in types like "Integer", "Long", "String" instead of 
POJO generation in case when table primary key contains only one field')
+                    .settings-row
+                        .checkbox
+                            label
+                                input(id='metadataUsePrimitives' 
type='checkbox' ng-model='ui.usePrimitives')
+                                | Use primitive types for NON NULL table 
columns
+                                i.tipLabel.fa.fa-question-circle(bs-tooltip='' 
data-title='Use primitive types like "int", "long", "double" for POJOs fields 
generation in case of NOT NULL columns')
+                    .settings-row
+                        .checkbox
+                            label
+                                input(id='metadataGenerateCaches' 
type='checkbox' ng-model='ui.generateCaches')
+                                | Generate cache for each loaded table
+                            i.tipLabel.fa.fa-question-circle(bs-tooltip='' 
data-title='Separate cache will be generated for each loaded table')
+                    .settings-row
+                        .col-xs-3.col-sm-2.col-md-2.required
+                            label Clusters:
+                        .col-xs-9.col-sm-10.col-md-10
+                            i.tipField.fa.fa-question-circle(bs-tooltip='' 
data-title='Choose clusters that will be associated with generated caches')
+                            .input-tip
+                                
button.select-toggle.form-control(id='metadataGeneratedCachesCluster' bs-select 
ng-model='ui.generatedCachesClusters' ng-disabled='!ui.generateCaches' 
ng-class='{placeholder: !(ui.generatedCachesClusters && 
ui.generatedCachesClusters.length > 0)}' data-container='false' 
data-multiple='1' placeholder='Choose clusters for generated caches' 
bs-options='item.value as item.label for item in clusters')
             .modal-footer
                 label.labelField {{loadMeta.info}}
                 button.btn.btn-primary(ng-show='loadMeta.action != "connect"' 
ng-click='loadMetadataPrev()') Prev

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/views/configuration/summary.jade
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/views/configuration/summary.jade 
b/modules/control-center-web/src/main/js/views/configuration/summary.jade
index 1f73f48..46e5099 100644
--- a/modules/control-center-web/src/main/js/views/configuration/summary.jade
+++ b/modules/control-center-web/src/main/js/views/configuration/summary.jade
@@ -69,7 +69,7 @@ mixin ignite-form-field-tooltip(message)
                 .panel-group(bs-collapse ng-init='panels.activePanels=[0,1]' 
ng-model='panels.activePanels' data-allow-multiple='true')
                     .panel.panel-default
                         .panel-heading(role='tab' bs-collapse-toggle)
-                            i.fa(ng-class='panelExpanded(panels, "server") ? 
"fa-chevron-circle-up" : "fa-chevron-circle-down"')
+                            i.fa(ng-class='panelExpanded(panels, "server") ? 
"fa-chevron-circle-down" : "fa-chevron-circle-right"')
                             label Server
 
                         .panel-collapse(id='server' role='tabpanel' 
bs-collapse-target)
@@ -85,7 +85,7 @@ mixin ignite-form-field-tooltip(message)
 
                     .panel.panel-default
                         .panel-heading(role='tab' bs-collapse-toggle)
-                            i.fa(ng-class='panelExpanded(panels, "client") ? 
"fa-chevron-circle-up" : "fa-chevron-circle-down"')
+                            i.fa(ng-class='panelExpanded(panels, "client") ? 
"fa-chevron-circle-down" : "fa-chevron-circle-right"')
                             label Client
 
                         .panel-collapse(id='client' role='tabpanel' 
bs-collapse-target)

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/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 8181add..b581b89 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
@@ -543,7 +543,7 @@ mixin main-table(title, rows, focusId, click, rowTemplate, 
searchField)
 mixin groups(groups, dataSource)
     .panel.panel-default(ng-repeat='group in #{groups}' 
ng-click='triggerDigest=true' ng-hide='{{group.hide}}')
         .panel-heading(bs-collapse-toggle ng-click='hidePopover()')
-            i.fa(ng-class='panelExpanded(panels, "{{group.group}}") ? 
"fa-chevron-circle-up" : "fa-chevron-circle-down"')
+            i.fa(ng-class='panelExpanded(panels, "{{group.group}}") ? 
"fa-chevron-circle-down" : "fa-chevron-circle-right"')
             label(id='{{::group.group + "-title"}}') {{::group.label}}
             i.tipLabel.fa.fa-question-circle(ng-if='group.tip' 
bs-tooltip='joinTip(group.tip)')
             i.tipLabel.fa.fa-question-circle.blank(ng-if='!group.tip')
@@ -558,7 +558,7 @@ mixin groups(groups, dataSource)
 
 mixin advanced-options
     .advanced-options
-        i.fa(ng-class='ui.expanded ? "fa-chevron-circle-up" : 
"fa-chevron-circle-down"' ng-click='toggleExpanded()')
+        i.fa(ng-class='ui.expanded ? "fa-chevron-circle-down" : 
"fa-chevron-circle-right"' ng-click='toggleExpanded()')
         a(ng-click='toggleExpanded()') {{ui.expanded ? 'Hide advanced 
settings...' : 'Show advanced settings...'}}
 
 mixin preview-content(preview, state, mode)

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/views/settings/profile.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/settings/profile.jade 
b/modules/control-center-web/src/main/js/views/settings/profile.jade
index b792c93..963519b 100644
--- a/modules/control-center-web/src/main/js/views/settings/profile.jade
+++ b/modules/control-center-web/src/main/js/views/settings/profile.jade
@@ -35,8 +35,8 @@ mixin lbl(txt)
                             input.form-control(id='profile-email' type='email' 
ng-model='profileUser.email' placeholder='[email protected]' required)
                     .details-row
                         .advanced-options
-                            
i.fa.fa-chevron-circle-up(ng-show='profileUser.showToken' 
ng-click='profileUser.showToken = ! profileUser.showToken')
-                            
i.fa.fa-chevron-circle-down(ng-show='!profileUser.showToken' 
ng-click='profileUser.showToken = ! profileUser.showToken')
+                            
i.fa.fa-chevron-circle-down(ng-show='profileUser.showToken' 
ng-click='profileUser.showToken = ! profileUser.showToken')
+                            
i.fa.fa-chevron-circle-right(ng-show='!profileUser.showToken' 
ng-click='profileUser.showToken = ! profileUser.showToken')
                             a(ng-click='profileUser.showToken = ! 
profileUser.showToken') {{profileUser.showToken ? 'Hide security token...' : 
'Show security token...'}}
                     .details-row(ng-show='profileUser.showToken')
                         +lbl('Security token:')
@@ -46,8 +46,8 @@ mixin lbl(txt)
                         i.tipLabel.fa.fa-question-circle(ng-if=lines 
bs-tooltip='' data-title='The security token is used for authorization of web 
agent')
                     .details-row
                         .advanced-options
-                            
i.fa.fa-chevron-circle-up(ng-show='profileUser.changePassword' 
ng-click='profileUser.changePassword = ! profileUser.changePassword')
-                            
i.fa.fa-chevron-circle-down(ng-show='!profileUser.changePassword' 
ng-click='profileUser.changePassword = ! profileUser.changePassword')
+                            
i.fa.fa-chevron-circle-down(ng-show='profileUser.changePassword' 
ng-click='profileUser.changePassword = ! profileUser.changePassword')
+                            
i.fa.fa-chevron-circle-right(ng-show='!profileUser.changePassword' 
ng-click='profileUser.changePassword = ! profileUser.changePassword')
                             a(ng-click='profileUser.changePassword = ! 
profileUser.changePassword') {{profileUser.changePassword ? 'Cancel password 
changing...' : 'Change password...'}}
                     div(ng-if='profileUser.changePassword')
                         .details-row

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/views/sql/sql.jade
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/views/sql/sql.jade 
b/modules/control-center-web/src/main/js/views/sql/sql.jade
index bd76b93..987366f 100644
--- a/modules/control-center-web/src/main/js/views/sql/sql.jade
+++ b/modules/control-center-web/src/main/js/views/sql/sql.jade
@@ -31,7 +31,7 @@ mixin chart-settings(mdl)
         .col-xs-4
             .chart-settings-link(ng-show='paragraph.chart && 
paragraph.chartColumns.length > 0')
                 a(title='Click to show chart settings dialog' 
ng-click='$event.stopPropagation()' bs-popover 
data-template-url='/sql/chart-settings.html' data-placement='bottom' 
data-auto-close='1' data-trigger='click')
-                    i.fa.fa-chevron-circle-down
+                    i.fa.fa-chevron-circle-right
                     | Chart settings
                 div(ng-show='paragraphTimeSpanVisible(paragraph)')
                     label Show
@@ -84,7 +84,7 @@ mixin chart-settings(mdl)
                             .panel-heading(id='{{paragraph.id}}' 
bs-collapse-toggle)
                                 .row
                                     .col-sm-6(ng-hide='paragraph.edit')
-                                        
i.tipLabel.fa(ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-up" : 
"fa-chevron-circle-down"')
+                                        
i.tipLabel.fa(ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-down" 
: "fa-chevron-circle-right"')
                                         label {{paragraph.name}}
 
                                         
.btn-group(ng-hide='notebook.paragraphs.length > 1')
@@ -95,7 +95,7 @@ mixin chart-settings(mdl)
                                             +btn-toolbar('fa-remove', 
'removeParagraph(paragraph)', 'Remove query')
 
                                     .col-sm-6(ng-show='paragraph.edit')
-                                        i.tipLabel.fa(style='float: left;' 
ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-up" : 
"fa-chevron-circle-down"')
+                                        i.tipLabel.fa(style='float: left;' 
ng-class='paragraphExpanded(paragraph) ? "fa-chevron-circle-down" : 
"fa-chevron-circle-right"')
                                         
i.tipLabel.fa.fa-floppy-o(style='float: right;' ng-show='paragraph.editName' 
ng-click='renameParagraph(paragraph, paragraph.editName); 
$event.stopPropagation();' bs-tooltip data-title='Save query name' 
data-trigger='hover')
                                         .input-tip
                                             
input.form-control(id='paragraph-name-{{paragraph.id}}' 
ng-model='paragraph.editName' required ng-click='$event.stopPropagation();' 
on-enter='renameParagraph(paragraph, paragraph.editName)' 
on-escape='paragraph.edit = false')

http://git-wip-us.apache.org/repos/asf/ignite/blob/404ff269/modules/control-center-web/src/main/js/views/templates/agent-download.jade
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/views/templates/agent-download.jade 
b/modules/control-center-web/src/main/js/views/templates/agent-download.jade
index f31ae74..8ece589 100644
--- a/modules/control-center-web/src/main/js/views/templates/agent-download.jade
+++ b/modules/control-center-web/src/main/js/views/templates/agent-download.jade
@@ -32,8 +32,8 @@
                         b README.txt
                         | &nbsp;for more information
                 .modal-advanced-options
-                    i.fa.fa-chevron-circle-up(ng-show='agentLoad.showToken' 
ng-click='agentLoad.showToken = ! agentLoad.showToken')
-                    i.fa.fa-chevron-circle-down(ng-show='!agentLoad.showToken' 
ng-click='agentLoad.showToken = ! agentLoad.showToken')
+                    i.fa.fa-chevron-circle-down(ng-show='agentLoad.showToken' 
ng-click='agentLoad.showToken = ! agentLoad.showToken')
+                    
i.fa.fa-chevron-circle-right(ng-show='!agentLoad.showToken' 
ng-click='agentLoad.showToken = ! agentLoad.showToken')
                     a(ng-click='agentLoad.showToken = ! agentLoad.showToken') 
{{agentLoad.showToken ? 'Hide security token...' : 'Show security token...'}}
                 .details-row(ng-show='agentLoad.showToken')
                     label.labelField Security token: {{user.token}}

Reply via email to