Repository: ignite
Updated Branches:
  refs/heads/ignite-843 e47c26b7b -> f155bceaf


IGNITE-843 Implemented schemas selection.


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

Branch: refs/heads/ignite-843
Commit: f155bceaf71e047ad01d8d1f2aafebb390b1585d
Parents: e47c26b
Author: Alexey Kuznetsov <[email protected]>
Authored: Mon Aug 24 16:30:52 2015 +0700
Committer: Alexey Kuznetsov <[email protected]>
Committed: Mon Aug 24 16:30:52 2015 +0700

----------------------------------------------------------------------
 .../ignite/agent/remote/RemoteHandler.java      |  3 +-
 .../test-drive/test-drive.sql                   | 44 +++++++----
 .../src/main/js/agents/agent-manager.js         | 17 +++-
 .../main/js/controllers/metadata-controller.js  | 83 ++++++++++++++++----
 .../src/main/js/public/stylesheets/style.scss   |  4 +
 .../src/main/js/routes/agent.js                 | 24 +++++-
 .../js/views/configuration/metadata-load.jade   | 35 +++++++--
 7 files changed, 166 insertions(+), 44 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
----------------------------------------------------------------------
diff --git 
a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
 
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
index 2ef9292..e970470 100644
--- 
a/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
+++ 
b/modules/control-center-agent/src/main/java/org/apache/ignite/agent/remote/RemoteHandler.java
@@ -76,8 +76,7 @@ public class RemoteHandler implements AutoCloseable {
      * @param req Request.
      */
     public void onMessage(JsonObject req) {
-        if (log.isLoggable(Level.FINE))
-            log.fine("Message: " + req);
+        log.log(Level.INFO, "Message: " + req);
 
         JsonPrimitive reqIdJson = req.getAsJsonPrimitive("reqId");
 

http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/modules/control-center-agent/test-drive/test-drive.sql
----------------------------------------------------------------------
diff --git a/modules/control-center-agent/test-drive/test-drive.sql 
b/modules/control-center-agent/test-drive/test-drive.sql
index 98cfa25..fd910fe 100644
--- a/modules/control-center-agent/test-drive/test-drive.sql
+++ b/modules/control-center-agent/test-drive/test-drive.sql
@@ -18,23 +18,39 @@
 CREATE TABLE COUNTRY(ID INTEGER NOT NULL PRIMARY KEY, COUNTRY_NAME 
VARCHAR(100));
 
 CREATE TABLE DEPARTMENT(
-                DEPARTMENT_ID INTEGER  NOT NULL PRIMARY KEY,
-                DEPARTMENT_NAME VARCHAR(50) NOT NULL,
-                COUNTRY_ID INTEGER,
-                MANAGER_ID INTEGER);
+ DEPARTMENT_ID INTEGER  NOT NULL PRIMARY KEY,
+ DEPARTMENT_NAME VARCHAR(50) NOT NULL,
+ COUNTRY_ID INTEGER,
+ MANAGER_ID INTEGER);
 
 CREATE TABLE EMPLOYEE(
-                EMPLOYEE_ID INTEGER NOT NULL PRIMARY KEY,
-                FIRST_NAME VARCHAR(20) NOT NULL,
-                LAST_NAME VARCHAR(30) NOT NULL,
-                EMAIL VARCHAR(25) NOT NULL,
-                PHONE_NUMBER VARCHAR(20),
-                HIRE_DATE DATE NOT NULL,
-                JOB VARCHAR(50) NOT NULL,
-                SALARY DOUBLE,
-                MANAGER_ID INTEGER,
-                DEPARTMENT_ID INTEGER);
+ EMPLOYEE_ID INTEGER NOT NULL PRIMARY KEY,
+ FIRST_NAME VARCHAR(20) NOT NULL,
+ LAST_NAME VARCHAR(30) NOT NULL,
+ EMAIL VARCHAR(25) NOT NULL,
+ PHONE_NUMBER VARCHAR(20),
+ HIRE_DATE DATE NOT NULL,
+ JOB VARCHAR(50) NOT NULL,
+ SALARY DOUBLE,
+ MANAGER_ID INTEGER,
+ DEPARTMENT_ID INTEGER);
 
 CREATE INDEX EMP_SALARY_A ON EMPLOYEE(SALARY ASC);
 CREATE INDEX EMP_SALARY_B ON EMPLOYEE(SALARY DESC);
 CREATE INDEX EMP_NAMES ON EMPLOYEE(FIRST_NAME ASC, LAST_NAME  ASC);
+
+CREATE SCHEMA CARS;
+
+CREATE TABLE CARS.PARKING(
+ PARKING_ID INTEGER NOT NULL PRIMARY KEY,
+ PARKING_NAME VARCHAR(50) NOT NULL
+);
+
+CREATE TABLE CARS.CAR(
+ CAR_ID INTEGER NOT NULL PRIMARY KEY,
+ PARKING_ID INTEGER NOT NULL,
+ CAR_NAME VARCHAR(50) NOT NULL
+);
+
+
+

http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/modules/control-center-web/src/main/js/agents/agent-manager.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/agents/agent-manager.js 
b/modules/control-center-web/src/main/js/agents/agent-manager.js
index 43d8f9f..2689be2 100644
--- a/modules/control-center-web/src/main/js/agents/agent-manager.js
+++ b/modules/control-center-web/src/main/js/agents/agent-manager.js
@@ -167,12 +167,25 @@ Client.prototype.authResult = function(error) {
  * @param {String} jdbcDriverClass
  * @param {String} jdbcUrl
  * @param {Object} jdbcInfo
+ * @param {Function} cb Callback. Take two arguments: {Object} exception, 
{Object} result.
+ * @return {Array} List of tables (see org.apache.ignite.schema.parser.DbTable 
java class)
+ */
+Client.prototype.metadataSchemas = function(jdbcDriverJarPath, 
jdbcDriverClass, jdbcUrl, jdbcInfo, cb) {
+    this._invokeRmtMethod('schemas', arguments)
+};
+
+/**
+ * @param {String} jdbcDriverJarPath
+ * @param {String} jdbcDriverClass
+ * @param {String} jdbcUrl
+ * @param {Object} jdbcInfo
+ * @param {Array} schemas
  * @param {Boolean} tablesOnly
  * @param {Function} cb Callback. Take two arguments: {Object} exception, 
{Object} result.
  * @return {Array} List of tables (see org.apache.ignite.schema.parser.DbTable 
java class)
  */
-Client.prototype.extractMetadata = function(jdbcDriverJarPath, 
jdbcDriverClass, jdbcUrl, jdbcInfo, tablesOnly, cb) {
-    this._invokeRmtMethod('extractMetadata', arguments)
+Client.prototype.metadataTables = function(jdbcDriverJarPath, jdbcDriverClass, 
jdbcUrl, jdbcInfo, schemas, tablesOnly, cb) {
+    this._invokeRmtMethod('metadata', arguments)
 };
 
 /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/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 adf88bf..ce3b880 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
@@ -49,8 +49,6 @@ controlCenterModule.controller('metadataController', [
             $scope.hidePopover = $common.hidePopover;
             var showPopoverMessage = $common.showPopoverMessage;
 
-
-
             var presets = [
                 {
                     db: 'oracle',
@@ -95,7 +93,8 @@ controlCenterModule.controller('metadataController', [
                 jdbcDriverClass: '',
                 jdbcDriverJar: '',
                 jdbcUrl: 'jdbc:[database]',
-                user: 'sa'
+                user: 'sa',
+                tablesOnly: true
             };
 
             var jdbcDrivers = [];
@@ -182,19 +181,28 @@ controlCenterModule.controller('metadataController', [
                 $scope.backupItem = bak;
             }
 
-            $scope.loadMeta = {action: 'connect'};
-            $scope.loadMeta.tables = [];
+            $scope.selectAllSchemas = function () {
+                var allSelected = $scope.loadMeta.allSchemasSelected;
+
+                _.forEach($scope.loadMeta.schemas, function (schema) {
+                    schema.use = allSelected;
+                });
+            };
+
+            $scope.selectSchema = function () {
+                $scope.loadMeta.allSchemasSelected = 
_.every($scope.loadMeta.schemas, 'use', true);
+            };
 
-            $scope.loadMeta.selectAll = function () {
-                var allSelected = $scope.loadMeta.allSelected;
+            $scope.selectAllTables = function () {
+                var allSelected = $scope.loadMeta.allTablesSelected;
 
                 _.forEach($scope.loadMeta.tables, function (table) {
                     table.use = allSelected;
                 });
             };
 
-            $scope.loadMeta.select = function () {
-                $scope.loadMeta.allSelected = _.every($scope.loadMeta.tables, 
'use', true);
+            $scope.selectTable = function () {
+                $scope.loadMeta.allTablesSelected = 
_.every($scope.loadMeta.tables, 'use', true);
             };
 
             // Pre-fetch modal dialogs.
@@ -202,6 +210,15 @@ controlCenterModule.controller('metadataController', [
 
             // Show load metadata modal.
             $scope.showLoadMetadataModal = function () {
+                $scope.loadMeta = {
+                    action: 'connect',
+                    schemas: [],
+                    allSchemasSelected: false,
+                    tables: [],
+                    allTablesSelected: false,
+                    button: 'Next'
+                };
+
                 // Get available JDBC drivers via agent.
                 $http.post('/agent/drivers')
                     .success(function (drivers) {
@@ -234,24 +251,35 @@ controlCenterModule.controller('metadataController', [
                     });
             };
 
-            $scope.loadMetadataFromDb = function () {
-                $scope.preset.space = $scope.spaces[0];
-
-                $http.post('presets/save', $scope.preset)
+            function _loadSchemas() {
+                $http.post('/agent/schemas', $scope.preset)
+                    .success(function (schemas) {
+                        $scope.loadMeta.schemas = _.map(schemas, function 
(schema) { return {use: false, name: schema}});
+                        $scope.loadMeta.action = 'schemas';
+                    })
                     .error(function (errMsg) {
                         $common.showError(errMsg);
                     });
+            }
+
+            function _loadMetadata() {
+                $scope.preset.schemas = [];
 
+                _.forEach($scope.loadMeta.schemas, function (schema) {
+                   if (schema.use)
+                       $scope.preset.schemas.push(schema.name);
+                });
 
                 $http.post('/agent/metadata', $scope.preset)
                     .success(function (tables) {
                         $scope.loadMeta.tables = tables;
                         $scope.loadMeta.action = 'tables';
+                        $scope.loadMeta.button = 'Save';
                     })
                     .error(function (errMsg) {
                         $common.showError(errMsg);
                     });
-            };
+            }
 
             function toProperCase(name) {
                 var properName = name.toLocaleLowerCase();
@@ -291,7 +319,14 @@ controlCenterModule.controller('metadataController', [
 
             $scope.packageName = 'org.apache.ignite';
 
-            $scope.saveSelectedMetadata = function () {
+            function _saveMetadata() {
+                $scope.preset.space = $scope.spaces[0];
+
+                $http.post('presets/save', $scope.preset)
+                    .error(function (errMsg) {
+                        $common.showError(errMsg);
+                    });
+
                 loadMetaModal.hide();
 
                 _.forEach($scope.loadMeta.tables, function (table) {
@@ -390,6 +425,24 @@ controlCenterModule.controller('metadataController', [
                         save(meta);
                     }
                 });
+            }
+
+            $scope.loadMetadataNext = function () {
+                if ($scope.loadMeta.action == 'connect')
+                    _loadSchemas();
+                else if  ($scope.loadMeta.action == 'schemas')
+                    _loadMetadata();
+                else if  ($scope.loadMeta.action == 'tables')
+                    _saveMetadata();
+            };
+
+            $scope.loadMetadataPrev = function () {
+                if  ($scope.loadMeta.action == 'tables') {
+                    $scope.loadMeta.action = 'schemas';
+                    $scope.loadMeta.button = 'Next';
+                }
+                else if  ($scope.loadMeta.action == 'schemas')
+                    $scope.loadMeta.action = 'connect';
             };
 
             // When landing on the page, get metadatas and show them.

http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/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 f307161..4de127d 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
@@ -907,6 +907,10 @@ button .caret, .btn .caret {
     margin-bottom: 10px;
 }
 
+.metadata-content {
+    margin: 15px;
+}
+
 .theme-line table.sql-results {
     [class*="col-"] {
         padding-left: 0 !important;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/modules/control-center-web/src/main/js/routes/agent.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/agent.js 
b/modules/control-center-web/src/main/js/routes/agent.js
index 4b23b2e..13b0cbe 100644
--- a/modules/control-center-web/src/main/js/routes/agent.js
+++ b/modules/control-center-web/src/main/js/routes/agent.js
@@ -130,14 +130,14 @@ router.post('/drivers', function (req, res) {
     }
 });
 
-/** Get database metadata. */
-router.post('/metadata', function (req, res) {
+/** Get database schemas. */
+router.post('/schemas', function (req, res) {
     var client = _client(req, res);
 
     if (client) {
         var params = req.body;
 
-        client.extractMetadata(params.jdbcDriverJar, params.jdbcDriverClass, 
params.jdbcUrl, {user: params.user, password: params.password}, true, function 
(err, meta) {
+        client.metadataSchemas(params.jdbcDriverJar, params.jdbcDriverClass, 
params.jdbcUrl, {user: params.user, password: params.password}, function (err, 
meta) {
             if (err)
                 return res.status(500).send(err);
 
@@ -146,4 +146,22 @@ router.post('/metadata', function (req, res) {
     }
 });
 
+/** Get database metadata. */
+router.post('/metadata', function (req, res) {
+    var client = _client(req, res);
+
+    if (client) {
+        var params = req.body;
+
+        client.metadataTables(params.jdbcDriverJar, params.jdbcDriverClass, 
params.jdbcUrl,
+            {user: params.user, password: params.password}, params.schemas, 
params.tablesOnly,
+            function (err, meta) {
+                if (err)
+                    return res.status(500).send(err);
+
+                res.json(meta);
+            });
+    }
+});
+
 module.exports = router;

http://git-wip-us.apache.org/repos/asf/ignite/blob/f155bcea/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 41573a4..4e44a2f 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
@@ -22,12 +22,33 @@ include ../includes/controls
             #errors-container.modal-header.header
                 button.close(type='button' ng-click='$hide()' 
aria-hidden='true') &times;
                 h4.modal-title Load metadata from database
-            div(ng-show='loadMeta.action == "connect"')
+            .metadata-content(ng-show='loadMeta.action == "connect"')
                 form.form-horizontal(name='loadForm' novalidate)
                     .modal-body
                         .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='loadMeta.action == "tables"' style='margin: 15px')
+            .metadata-content(ng-show='loadMeta.action == "schemas"')
+                
table.table.table-condensed.table-stripped.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...')
+                        tr
+                            th(width='50px')
+                                input(type='checkbox' 
ng-model='loadMeta.allSchemasSelected' ng-change='selectAllSchemas()')
+                            th
+                                label Schema
+                        tbody
+                            tr(ng-repeat='schema in displayedSchemas')
+                                td
+                                    input(type='checkbox' 
ng-model='schema.use' ng-change='selectSchema()')
+                                td
+                                    label {{::schema.name}}
+                        tfoot
+                            tr
+                                td.text-right(colspan='3')
+                                    div(st-pagination st-items-by-page='10' 
st-displayed-pages='5')
+            .metadata-content(ng-show='loadMeta.action == "tables"')
                 .settings-row
                     label.col-sm-2.required Package:
                     .col-sm-10
@@ -39,16 +60,15 @@ include ../includes/controls
                                 input.form-control(type='text' st-search='' 
placeholder='Filter tables...')
                         tr
                             th(width='50px')
-                                input(type='checkbox' 
ng-model='loadMeta.allSelected' ng-change='loadMeta.selectAll()')
+                                input(type='checkbox' 
ng-model='loadMeta.allTablesSelected' ng-change='selectAllTables()')
                             th(width='30%')
                                 label Schema
                             th
                                 label Table
-
                     tbody
                         tr(ng-repeat='table in displayedTables')
                             td
-                                input(type='checkbox' ng-model='table.use' 
ng-change='loadMeta.select()')
+                                input(type='checkbox' ng-model='table.use' 
ng-change='selectTable()')
                             td
                                 label {{::table.schema}}
                             td
@@ -58,6 +78,5 @@ include ../includes/controls
                             td.text-right(colspan='3')
                                 div(st-pagination st-items-by-page='10' 
st-displayed-pages='5')
             .modal-footer
-                button.btn.btn-primary(ng-show='loadMeta.action == "connect"' 
ng-disabled='loadForm.$invalid' ng-click='loadMetadataFromDb()') Load metadata
-                button.btn.btn-primary(ng-show='loadMeta.action == "tables"' 
ng-click='loadMeta.action = "connect"') Prev
-                button.btn.btn-primary(ng-show='loadMeta.action == "tables"' 
ng-click='saveSelectedMetadata()') Save
+                button.btn.btn-primary(ng-show='loadMeta.action != "connect"' 
ng-click='loadMetadataPrev()') Prev
+                button.btn.btn-primary(ng-click='loadMetadataNext()') 
{{loadMeta.button}}

Reply via email to