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 &quot;' + tableName + '&quot; 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