IGNITE-843: WIP load metadata from db.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/76d999b3 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/76d999b3 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/76d999b3 Branch: refs/heads/ignite-843 Commit: 76d999b3d2458c40f3454f3dcf0cd9e10f5b0d9d Parents: c43eb9b Author: Alexey Kuznetsov <akuznet...@apache.org> Authored: Thu Aug 20 11:38:18 2015 +0700 Committer: Alexey Kuznetsov <akuznet...@apache.org> Committed: Thu Aug 20 11:38:18 2015 +0700 ---------------------------------------------------------------------- .../main/js/controllers/clusters-controller.js | 35 ++----- .../src/main/js/controllers/common-module.js | 52 +++++++++- .../main/js/controllers/metadata-controller.js | 102 +++++++++---------- .../js/views/configuration/metadata-load.jade | 17 +++- .../src/main/js/views/includes/controls.jade | 4 +- 5 files changed, 117 insertions(+), 93 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76d999b3/modules/control-center-web/src/main/js/controllers/clusters-controller.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/clusters-controller.js b/modules/control-center-web/src/main/js/controllers/clusters-controller.js index 1ad20d7..3ed69f3 100644 --- a/modules/control-center-web/src/main/js/controllers/clusters-controller.js +++ b/modules/control-center-web/src/main/js/controllers/clusters-controller.js @@ -66,40 +66,17 @@ controlCenterModule.controller('clustersController', ['$scope', '$http', '$commo } } - $scope.cacheModes = [ - {value: 'LOCAL', label: 'LOCAL'}, - {value: 'REPLICATED', label: 'REPLICATED'}, - {value: 'PARTITIONED', label: 'PARTITIONED'} - ]; + $scope.cacheModes = $common.mkOptions(['LOCAL', 'REPLICATED', 'PARTITIONED']); - $scope.deploymentModes = [ - {value: 'PRIVATE', label: 'PRIVATE'}, - {value: 'ISOLATED', label: 'ISOLATED'}, - {value: 'SHARED', label: 'SHARED'}, - {value: 'CONTINUOUS', label: 'CONTINUOUS'} - ]; + $scope.deploymentModes = $common.mkOptions(['PRIVATE', 'ISOLATED', 'SHARED', 'CONTINUOUS']); - $scope.transactionConcurrency = [ - {value: 'OPTIMISTIC', label: 'OPTIMISTIC'}, - {value: 'PESSIMISTIC', label: 'PESSIMISTIC'} - ]; + $scope.transactionConcurrency = $common.mkOptions(['OPTIMISTIC', 'PESSIMISTIC']); - $scope.transactionIsolation = [ - {value: 'READ_COMMITTED', label: 'READ_COMMITTED'}, - {value: 'REPEATABLE_READ', label: 'REPEATABLE_READ'}, - {value: 'SERIALIZABLE', label: 'SERIALIZABLE'} - ]; + $scope.transactionIsolation = $common.mkOptions(['READ_COMMITTED', 'REPEATABLE_READ', 'SERIALIZABLE']); - $scope.segmentationPolicy = [ - {value: 'RESTART_JVM', label: 'RESTART_JVM'}, - {value: 'STOP', label: 'STOP'}, - {value: 'NOOP', label: 'NOOP'} - ]; + $scope.segmentationPolicy = $common.mkOptions(['RESTART_JVM', 'STOP', 'NOOP']); - $scope.marshallers = [ - {value: 'OptimizedMarshaller', label: 'OptimizedMarshaller'}, - {value: 'JdkMarshaller', label: 'JdkMarshaller'} - ]; + $scope.marshallers = $common.mkOptions(['OptimizedMarshaller', 'JdkMarshaller']); $scope.ui = {expanded: false}; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76d999b3/modules/control-center-web/src/main/js/controllers/common-module.js ---------------------------------------------------------------------- diff --git a/modules/control-center-web/src/main/js/controllers/common-module.js b/modules/control-center-web/src/main/js/controllers/common-module.js index 674940f..8ddec82 100644 --- a/modules/control-center-web/src/main/js/controllers/common-module.js +++ b/modules/control-center-web/src/main/js/controllers/common-module.js @@ -123,12 +123,51 @@ controlCenterModule.service('$common', [ return _.contains(javaBuildInClasses, cls) || _.contains(javaBuildInFullNameClasses, cls); } - var JDBC_TYPES = [ + var SUPPORTED_JDBC_TYPES = [ 'BIT', 'BOOLEAN', 'TINYINT', 'SMALLINT', 'INTEGER', 'BIGINT', 'REAL', 'FLOAT', 'DOUBLE', 'NUMERIC', 'DECIMAL', 'CHAR', 'VARCHAR', 'LONGVARCHAR', 'NCHAR', 'NVARCHAR', 'LONGNVARCHAR', 'DATE', 'TIME', 'TIMESTAMP' ]; + var ALL_JDBC_TYPES = [ + {dbName: 'BIT', dbType: -7, javaType: 'Boolean'}, + {dbName: 'TINYINT', dbType: -6, javaType: 'Byte'}, + {dbName: 'SMALLINT', dbType: 5, javaType: 'Short'}, + {dbName: 'INTEGER', dbType: 4, javaType: 'Integer'}, + {dbName: 'BIGINT', dbType: -5, javaType: 'Long'}, + {dbName: 'FLOAT', dbType: 6, javaType: 'Float'}, + {dbName: 'REAL', dbType: 7, javaType: 'Double'}, + {dbName: 'DOUBLE', dbType: 8, javaType: 'Double'}, + {dbName: 'NUMERIC', dbType: 2, javaType: 'BigDecimal'}, + {dbName: 'DECIMAL', dbType: 3, javaType: 'BigDecimal'}, + {dbName: 'CHAR', dbType: 1, javaType: 'String'}, + {dbName: 'VARCHAR', dbType: 12, javaType: 'String'}, + {dbName: 'LONGVARCHAR', dbType: -1, javaType: 'String'}, + {dbName: 'DATE', dbType: 91, javaType: 'Date'}, + {dbName: 'TIME', dbType: 92, javaType: 'Time'}, + {dbName: 'TIMESTAMP', dbType: 93, javaType: 'Timestamp'}, + {dbName: 'BINARY', dbType: -2, javaType: 'Object'}, + {dbName: 'VARBINARY', dbType: -3, javaType: 'Object'}, + {dbName: 'LONGVARBINARY', dbType: -4, javaType: 'Object'}, + {dbName: 'NULL', dbType: 0, javaType: 'Object'}, + {dbName: 'OTHER', dbType: 1111, javaType: 'Object'}, + {dbName: 'JAVA_OBJECT', dbType: 2000, javaType: 'Object'}, + {dbName: 'DISTINCT', dbType: 2001, javaType: 'Object'}, + {dbName: 'STRUCT', dbType: 2002, javaType: 'Object'}, + {dbName: 'ARRAY', dbType: 2003, javaType: 'Object'}, + {dbName: 'BLOB', dbType: 2004, javaType: 'Object'}, + {dbName: 'CLOB', dbType: 2005, javaType: 'String'}, + {dbName: 'REF', dbType: 2006, javaType: 'Object'}, + {dbName: 'DATALINK', dbType: 70, javaType: 'Object'}, + {dbName: 'BOOLEAN', dbType: 16, javaType: 'Boolean'}, + {dbName: 'ROWID', dbType: -8, javaType: 'Object'}, + {dbName: 'NCHAR', dbType: -15, javaType: 'String'}, + {dbName: 'NVARCHAR', dbType: -9, javaType: 'String'}, + {dbName: 'LONGNVARCHAR', dbType: -16, javaType: 'String'}, + {dbName: 'NCLOB', dbType: 2011, javaType: 'String'}, + {dbName: 'SQLXML', dbType: 2009, javaType: 'Object'} + ]; + var JAVA_KEYWORDS = [ 'abstract', 'assert', 'boolean', 'break', 'byte', 'case', 'catch', 'char', 'class', 'const', @@ -483,7 +522,7 @@ controlCenterModule.service('$common', [ }, mkOptions: function (options) { return _.map(options, function (option) { - return {value: option, label: option}; + return {value: option, label: isDefined(option) ? option : 'Not set'}; }); }, isDefined: isDefined, @@ -501,7 +540,14 @@ controlCenterModule.service('$common', [ duration: 2 }); }, - JDBC_TYPES: JDBC_TYPES, + SUPPORTED_JDBC_TYPES: SUPPORTED_JDBC_TYPES, + findJdbcType: function (jdbcType) { + var res = _.find(ALL_JDBC_TYPES, function (item) { + return item.dbType == jdbcType; + }); + + return res ? res : {dbName: 'Unknown', javaType: 'Unknown'} + }, javaBuildInClasses: javaBuildInClasses, isJavaBuildInClass: isJavaBuildInClass, isValidJavaIdentifier: isValidJavaIdentifier, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76d999b3/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 2d9b251..42d115e 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 @@ -47,52 +47,7 @@ controlCenterModule.controller('metadataController', [ $scope.hidePopover = $common.hidePopover; var showPopoverMessage = $common.showPopoverMessage; - var JDBC_TYPES = [ - {dbName: 'BIT', dbType: -7, javaType: 'Boolean'}, - {dbName: 'TINYINT', dbType: -6, javaType: 'Byte'}, - {dbName: 'SMALLINT', dbType: 5, javaType: 'Short'}, - {dbName: 'INTEGER', dbType: 4, javaType: 'Integer'}, - {dbName: 'BIGINT', dbType: -5, javaType: 'Long'}, - {dbName: 'FLOAT', dbType: 6, javaType: 'Float'}, - {dbName: 'REAL', dbType: 7, javaType: 'Double'}, - {dbName: 'DOUBLE', dbType: 8, javaType: 'Double'}, - {dbName: 'NUMERIC', dbType: 2, javaType: 'BigDecimal'}, - {dbName: 'DECIMAL', dbType: 3, javaType: 'BigDecimal'}, - {dbName: 'CHAR', dbType: 1, javaType: 'String'}, - {dbName: 'VARCHAR', dbType: 12, javaType: 'String'}, - {dbName: 'LONGVARCHAR', dbType: -1, javaType: 'String'}, - {dbName: 'DATE', dbType: 91, javaType: 'Date'}, - {dbName: 'TIME', dbType: 92, javaType: 'Time'}, - {dbName: 'TIMESTAMP', dbType: 93, javaType: 'Timestamp'}, - {dbName: 'BINARY', dbType: -2, javaType: 'Object'}, - {dbName: 'VARBINARY', dbType: -3, javaType: 'Object'}, - {dbName: 'LONGVARBINARY', dbType: -4, javaType: 'Object'}, - {dbName: 'NULL', dbType: 0, javaType: 'Object'}, - {dbName: 'OTHER', dbType: 1111, javaType: 'Object'}, - {dbName: 'JAVA_OBJECT', dbType: 2000, javaType: 'Object'}, - {dbName: 'DISTINCT', dbType: 2001, javaType: 'Object'}, - {dbName: 'STRUCT', dbType: 2002, javaType: 'Object'}, - {dbName: 'ARRAY', dbType: 2003, javaType: 'Object'}, - {dbName: 'BLOB', dbType: 2004, javaType: 'Object'}, - {dbName: 'CLOB', dbType: 2005, javaType: 'String'}, - {dbName: 'REF', dbType: 2006, javaType: 'Object'}, - {dbName: 'DATALINK', dbType: 70, javaType: 'Object'}, - {dbName: 'BOOLEAN', dbType: 16, javaType: 'Boolean'}, - {dbName: 'ROWID', dbType: -8, javaType: 'Object'}, - {dbName: 'NCHAR', dbType: -15, javaType: 'String'}, - {dbName: 'NVARCHAR', dbType: -9, javaType: 'String'}, - {dbName: 'LONGNVARCHAR', dbType: -16, javaType: 'String'}, - {dbName: 'NCLOB', dbType: 2011, javaType: 'String'}, - {dbName: 'SQLXML', dbType: 2009, javaType: 'Object'} - ]; - - function _findJdbcType(jdbcType) { - var res = _.find(JDBC_TYPES, function (item) { - return item.code == jdbcCode; - }); - return res ? res : {dbName: 'Unknown', javaType: 'Unknown'} - } var presets = [ { @@ -179,9 +134,9 @@ controlCenterModule.controller('metadataController', [ } }, true); - $scope.jdbcTypes = $common.mkOptions($common.JDBC_TYPES); + $scope.supportedJdbcTypes = $common.mkOptions($common.SUPPORTED_JDBC_TYPES); - $scope.javaTypes = $common.mkOptions($common.javaBuildInClasses); + $scope.supportedJavaTypes = $common.mkOptions($common.javaBuildInClasses); $scope.sortDirections = [ {value: false, label: 'ASC'}, @@ -201,6 +156,7 @@ controlCenterModule.controller('metadataController', [ return false; }; + // Load page descriptor. $http.get('/models/metadata.json') .success(function (data) { $scope.screenTip = data.screenTip; @@ -244,6 +200,7 @@ controlCenterModule.controller('metadataController', [ // Show load metadata modal. $scope.showLoadMetadataModal = function () { + // Get available JDBC drivers via agent. $http.post('/agent/drivers') .success(function (drivers) { if (drivers && drivers.length > 0) { @@ -325,22 +282,59 @@ controlCenterModule.controller('metadataController', [ } function toJavaName(dbName) { - return dbName; + var javaName = toJavaClassName(dbName); + + return javaName.charAt(0).toLocaleLowerCase() + javaName.slice(1); } + $scope.packageName = 'org.apache.ignite'; + $scope.saveSelectedMetadata = function () { loadMetaModal.hide(); _.forEach($scope.loadMeta.tables, function (table) { if (table.use) { + var qryFields = []; + var ascFields = []; + var descFields = []; + var groups = []; + var keyFields = []; + var valFields = []; + + var tableName = table.tbl; + + var valType = $scope.packageName + '.' + toJavaClassName(tableName); + + function queryField(name, jdbcType) { + return {name: toJavaName(name), className: jdbcType.javaType} + } + + _.forEach(table.cols, function(col) { + var name = col.name; + var jdbcType = $common.findJdbcType(col.type); + + qryFields.push(queryField(name, jdbcType)); + + if (_.includes(table.ascCols, name)) + ascFields.push(queryField(name, jdbcType)); + + if (_.includes(table.descCols, name)) + descFields.push(queryField(name, jdbcType)); + }); + var newItem = { - name: toProperCase(table.tbl), + space: $scope.spaces[0], + name: toProperCase(tableName), databaseSchema: table.schema, - databaseTable: table.tbl, - keyType: table.tableName + 'Key', - valueType: table.tableName, - keyFields: [], - valueFields: [] + databaseTable: tableName, + keyType: valType + 'Key', + valueType: valType, + queryFields: qryFields, + ascendingFields: ascFields, + descendingFields: descFields, + groups: groups, + keyFields: keyFields, + valueFields: valFields }; save(newItem); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76d999b3/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 21cf3a1..8d9a4e4 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 @@ -31,26 +31,33 @@ include ../includes/controls .settings-row label.col-sm-2.required Package: .col-sm-10 - input.form-control(type="text") + input.form-control(type="text" ng-model='packageName') table.table.table-condensed.table-stripped.metadata(st-table='displayedTables' st-safe-src='loadMeta.tables') thead tr - th.header(colspan='2') + th + th + th.header input.form-control(type='text' st-search='' placeholder='Filter tables...') tr th input(type='checkbox' ng-model='loadMeta.allSelected' ng-change='loadMeta.selectAll()') th + label Schemas + th label Tables + tbody tr(ng-repeat='table in displayedTables') td input(type='checkbox' ng-model='table.use' ng-change='loadMeta.select()') td - label {{::table.schemaName}} / {{::table.tableName}} - tfoot + label {{::table.schema}} + td + label {{::table.tbl}} + tfoot() tr - td.text-right(colspan='2') + 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 http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/76d999b3/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 779fe80..0d989a5 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 @@ -206,7 +206,7 @@ mixin table-db-field-edit(prefix, focusId, index) .col-xs-3.col-sm-3.col-md-3 label.fieldSep / .input-tip - button.form-control(id=databaseTypeId enter-focus-next=javaNameId ng-model=databaseTypeModel bs-select bs-options='item.value as item.label for item in {{jdbcTypes}}' on-escape='tableReset()' tabindex='0') + button.form-control(id=databaseTypeId enter-focus-next=javaNameId ng-model=databaseTypeModel bs-select bs-options='item.value as item.label for item in {{supportedJdbcTypes}}' on-escape='tableReset()' tabindex='0') .col-xs-3.col-sm-3.col-md-3 label.fieldSep / .input-tip @@ -218,7 +218,7 @@ mixin table-db-field-edit(prefix, focusId, index) +btn-save(btnVisible, btnSave) .input-tip - button.form-control(id=javaTypeId ng-model=javaTypeModel bs-select bs-options='item.value as item.label for item in {{javaTypes}}' on-enter=btnVisibleAndSave on-escape='tableReset()' tabindex='0') + button.form-control(id=javaTypeId ng-model=javaTypeModel bs-select bs-options='item.value as item.label for item in {{supportedJavaTypes}}' on-enter=btnVisibleAndSave on-escape='tableReset()' tabindex='0') mixin table-group-item-edit(prefix, index) -var fieldName = prefix + 'FieldName'