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 2015/09/08 12:28:24 UTC
ignite git commit: IGNITE-843 WIP Metadata load dialog.
Repository: ignite
Updated Branches:
refs/heads/ignite-843 85ca6a2ee -> 059a96115
IGNITE-843 WIP Metadata load dialog.
Project: http://git-wip-us.apache.org/repos/asf/ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/ignite/commit/059a9611
Tree: http://git-wip-us.apache.org/repos/asf/ignite/tree/059a9611
Diff: http://git-wip-us.apache.org/repos/asf/ignite/diff/059a9611
Branch: refs/heads/ignite-843
Commit: 059a961156062a5a77d263ed9f6eeda6e94a3c79
Parents: 85ca6a2
Author: Alexey Kuznetsov <ak...@apache.org>
Authored: Tue Sep 8 17:29:00 2015 +0700
Committer: Alexey Kuznetsov <ak...@apache.org>
Committed: Tue Sep 8 17:29:00 2015 +0700
----------------------------------------------------------------------
.../main/js/controllers/metadata-controller.js | 51 ++++++++++++-----
modules/control-center-web/src/main/js/db.js | 3 +-
.../src/main/js/public/stylesheets/style.scss | 59 +++++++++++++++++++-
.../js/views/configuration/metadata-load.jade | 29 ++++++----
.../src/main/js/views/includes/controls.jade | 2 +-
5 files changed, 115 insertions(+), 29 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ignite/blob/059a9611/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 5db83b9..a336fa4 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
@@ -310,6 +310,8 @@ controlCenterModule.controller('metadataController', [
}
function _loadMetadata() {
+ $scope.loadMeta.allTablesSelected = false;
+
$scope.preset.schemas = [];
_.forEach($scope.loadMeta.schemas, function (schema) {
@@ -364,7 +366,7 @@ controlCenterModule.controller('metadataController', [
return javaName.charAt(0).toLocaleLowerCase() + javaName.slice(1);
}
- $scope.ui.packageName = 'org.apache.ignite';
+ $scope.ui.packageName = 'org.' + $scope.user.email.replace('@', '.');
function _saveMetadata() {
$scope.preset.space = $scope.spaces[0];
@@ -484,7 +486,21 @@ controlCenterModule.controller('metadataController', [
meta.keyFields = keyFields;
meta.valueFields = valFields;
- save(meta, true);
+ var idx = _.findIndex($scope.metadatas, function (metadata) {
+ return metadata.databaseTable == tableName;
+ });
+
+ if (idx >= 0) {
+ $confirm.show(
+ '<span>' +
+ 'Metadata with name "' + tableName + '" already exist.<br/><br/>' +
+ 'Are you sure you want to overwrite it?' +
+ '</span>').then(function () {
+ save(meta, true);
+ })
+ }
+ else
+ save(meta, true);
tables.push(table.tbl)
}
@@ -509,12 +525,19 @@ controlCenterModule.controller('metadataController', [
$scope.loadMetadataNext = function () {
if ($scope.loadMeta.action == 'connect')
_loadSchemas();
- else if ($scope.loadMeta.action == 'schemas')
+ else if ($scope.loadMeta.action == 'schemas')
_loadMetadata();
- else if ($scope.loadMeta.action == 'tables')
+ else if ($scope.loadMeta.action == 'tables' && $scope.nextAvailable())
_saveMetadata();
};
+ $scope.nextTooltipText = function () {
+ if ($scope.loadMeta.action == 'tables' && !$scope.nextAvailable())
+ return 'Select tables to continue';
+
+ return undefined;
+ };
+
$scope.nextAvailable = function () {
return $scope.loadMeta.action != 'tables' || $('#metadataTableData').find(':checked').length > 0;
};
@@ -655,15 +678,15 @@ controlCenterModule.controller('metadataController', [
// Check metadata logical consistency.
function validate(item) {
if ($common.isEmptyString(item.name))
- return showPopoverMessage($scope.panels, 'metadata', 'metadataName', 'Name should not be empty');
+ return showPopoverMessage($scope.panels, 'general', 'metadataName', 'Name should not be empty');
if ($common.isEmptyString(item.keyType))
- return showPopoverMessage($scope.panels, 'metadata', 'keyType', 'Key type should not be empty');
+ return showPopoverMessage($scope.panels, 'general', 'keyType', 'Key type should not be empty');
else if (!$common.isValidJavaClass('Key type', item.keyType, true, 'keyType'))
return false;
if ($common.isEmptyString(item.valueType))
- return showPopoverMessage($scope.panels, 'metadata', 'valueType', 'Value type should not be empty');
+ return showPopoverMessage($scope.panels, 'general', 'valueType', 'Value type should not be empty');
else if (!$common.isValidJavaClass('Value type', item.valueType, false, 'valueType'))
return false;
@@ -678,10 +701,10 @@ controlCenterModule.controller('metadataController', [
var fields = group.fields;
if ($common.isEmptyArray(fields))
- return showPopoverMessage($scope.panels, 'metadataQuery', 'groups' + i, 'Group fields are not specified');
+ return showPopoverMessage($scope.panels, 'query', 'groups' + i, 'Group fields are not specified');
if (fields.length == 1) {
- return showPopoverMessage($scope.panels, 'metadataQuery', 'groups' + i, 'Group has only one field. Consider to use ascending or descending fields.');
+ return showPopoverMessage($scope.panels, 'query', 'groups' + i, 'Group has only one field. Consider to use ascending or descending fields.');
}
}
}
@@ -691,19 +714,19 @@ controlCenterModule.controller('metadataController', [
if (str) {
if ($common.isEmptyString(item.databaseSchema))
- return showPopoverMessage($scope.panels, 'metadataCache', 'databaseSchema', 'Database schema should not be empty');
+ return showPopoverMessage($scope.panels, 'store', 'databaseSchema', 'Database schema should not be empty');
if ($common.isEmptyString(item.databaseTable))
- return showPopoverMessage($scope.panels, 'metadataCache', 'databaseTable', 'Database table should not be empty');
+ return showPopoverMessage($scope.panels, 'store', 'databaseTable', 'Database table should not be empty');
if ($common.isEmptyArray(item.keyFields) && !$common.isJavaBuildInClass(item.keyType))
- return showPopoverMessage($scope.panels, 'metadataCache', 'keyFields-add', 'Key fields are not specified');
+ return showPopoverMessage($scope.panels, 'store', 'keyFields-add', 'Key fields are not specified');
if ($common.isEmptyArray(item.valueFields))
- return showPopoverMessage($scope.panels, 'metadataCache', 'valueFields-add', 'Value fields are not specified');
+ return showPopoverMessage($scope.panels, 'store', 'valueFields-add', 'Value fields are not specified');
}
else if (!qry) {
- return showPopoverMessage($scope.panels, 'metadataQuery', 'query-title', 'SQL query metadata should be configured');
+ 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/059a9611/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 88011d1..d494b17 100644
--- a/modules/control-center-web/src/main/js/db.js
+++ b/modules/control-center-web/src/main/js/db.js
@@ -371,7 +371,8 @@ var DatabasePresetSchema = new Schema({
jdbcDriverJar: String,
jdbcDriverClass: String,
jdbcUrl: String,
- user: String
+ user: String,
+ packageName: String
});
// Define Database preset model.
http://git-wip-us.apache.org/repos/asf/ignite/blob/059a9611/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 2735da8..93161d3 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
@@ -585,7 +585,7 @@ h3 {
padding: 0 0 10px;
div {
- padding: 0
+ padding: 0;
}
input[type="text"] {
@@ -622,6 +622,26 @@ h3 {
}
}
+.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;
}
@@ -638,13 +658,50 @@ h3 {
cursor: default;
}
+ thead > tr {
+ input[type="checkbox"] {
+ cursor: pointer;
+ }
+ }
+
thead > tr th.header {
+ padding: 0 0 10px;
+
+ .pull-right {
+ padding: 0;
+ }
+
+ input[type="checkbox"] {
+ cursor: pointer;
+ }
+
input[type="text"] {
font-weight: normal;
}
}
+
+ tbody > tr > td {
+ padding: 0;
+ }
}
+.table-modal-striped {
+ width: 100%;
+
+ > tbody > tr {
+ border-bottom: 2px solid $ignite-border-color;
+
+ input[type="checkbox"] {
+ cursor: pointer;
+ }
+ }
+
+ > tbody > tr > td {
+ padding: 8px !important;
+ }
+}
+
+
.theme-line table.sql-results {
[class*="col-"] {
padding-left: 0 !important;
http://git-wip-us.apache.org/repos/asf/ignite/blob/059a9611/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 756fdee..93b2a38 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
@@ -16,6 +16,9 @@
include ../includes/controls
+mixin chk(mdl, change, tip)
+ input(type='checkbox' ng-model=mdl ng-change=change bs-tooltip='' data-title=tip data-placement='bottom')
+
.modal.center(role='dialog')
.modal-dialog
.modal-content
@@ -28,21 +31,22 @@ include ../includes/controls
.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')
.metadata-content(ng-show='loadMeta.action == "schemas"')
- table.table.table-condensed.table-stripped.metadata(st-table='displayedSchemas' st-safe-src='loadMeta.schemas')
+ table.table.metadata(st-table='displayedSchemas' st-safe-src='loadMeta.schemas')
thead
tr
th.header(colspan='2')
- input.form-control(type='text' st-search='' placeholder='Filter schemas...')
+ .col-sm-4.pull-right
+ input.form-control(type='text' st-search='' placeholder='Filter schemas...')
tr
th(width='50px')
- input(type='checkbox' ng-model='loadMeta.allSchemasSelected' ng-change='selectAllSchemas()')
+ +chk('loadMeta.allSchemasSelected', 'selectAllSchemas()', 'Select all schemas')
th
label Schema
tbody
tr
td(colspan='2')
.metadata-scrollable(style='height: 184px')
- table(id='metadataSchemaData')
+ table.table-modal-striped(id='metadataSchemaData')
tbody
tr(ng-repeat='schema in displayedSchemas')
td(width='50px')
@@ -50,18 +54,19 @@ include ../includes/controls
td
label {{::schema.name}}
.metadata-content(ng-show='loadMeta.action == "tables"')
- .settings-row
- label.col-sm-2.required Package:
- .col-sm-10
+ div.metadata-package-name
+ label.required Package:
+ span
input.form-control(type="text" ng-model='ui.packageName')
- table.table.table-condensed.table-stripped.metadata(st-table='displayedTables' st-safe-src='loadMeta.tables')
+ table.table.metadata(st-table='displayedTables' st-safe-src='loadMeta.tables')
thead
tr
th.header(colspan='3')
- input.form-control(type='text' st-search='' placeholder='Filter tables...')
+ .col-sm-4.pull-right
+ input.form-control(type='text' st-search='' placeholder='Filter tables...')
tr
th(width='50px')
- input(type='checkbox' ng-model='loadMeta.allTablesSelected' ng-change='selectAllTables()')
+ +chk('loadMeta.allTablesSelected', 'selectAllTables()', 'Select all tables')
th(width='200px')
label Schema
th
@@ -70,7 +75,7 @@ include ../includes/controls
tr
td(colspan='3')
.metadata-scrollable(style='height: 146px')
- table(id='metadataTableData')
+ table.table-modal-striped(id='metadataTableData')
tbody
tr(ng-repeat='table in displayedTables')
td(width='50px')
@@ -81,4 +86,4 @@ include ../includes/controls
label {{::table.tbl}}
.modal-footer
button.btn.btn-primary(ng-show='loadMeta.action != "connect"' ng-click='loadMetadataPrev()') Prev
- button.btn.btn-primary(ng-click='loadMetadataNext()' ng-disabled='!nextAvailable()') {{loadMeta.button}}
+ a.btn.btn-primary(ng-click='loadMetadataNext()' ng-disabled='!nextAvailable()' bs-tooltip data-title='{{nextTooltipText()}}' data-placement='bottom') {{loadMeta.button}}
http://git-wip-us.apache.org/repos/asf/ignite/blob/059a9611/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 bc2efc6..95e5fcf 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
@@ -478,7 +478,7 @@ mixin preview(preview, id)
label All Defaults
mixin save-remove-buttons(objectName)
- -var removeTip = '"Remove current ' + objectName+ '"'
+ -var removeTip = '"Remove current ' + objectName + '"'
.panel-tip-container(ng-hide='backupItem._id')
a.btn.btn-primary(ng-disabled='!formChanged(ui.inputForm)' ng-click='formChanged(ui.inputForm) ? saveItem() : ""' bs-tooltip data-title='{{saveBtnTipText(ui.inputForm, "#{objectName}")}}' data-placement='bottom' data-trigger='hover') Save