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 | 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}}
