Repository: incubator-ignite Updated Branches: refs/heads/ignite-843 75d817581 -> d298fd8d4
IGNITE-843 Implemented table for db fields metadata. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/d298fd8d Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/d298fd8d Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/d298fd8d Branch: refs/heads/ignite-843 Commit: d298fd8d4013d200de506766b09592187fe1e475 Parents: 75d8175 Author: AKuznetsov <akuznet...@gridgain.com> Authored: Mon Jul 20 17:34:38 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Mon Jul 20 17:34:38 2015 +0700 ---------------------------------------------------------------------- .../nodejs/controllers/common-module.js | 11 ++- .../nodejs/controllers/metadata-controller.js | 88 ++++++++++++++++++++ .../nodejs/controllers/models/metadata.json | 10 +-- modules/web-control-center/nodejs/db.js | 4 +- .../nodejs/public/stylesheets/style.less | 20 +++++ .../nodejs/views/includes/controls.jade | 45 +++++++++- 6 files changed, 165 insertions(+), 13 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d298fd8d/modules/web-control-center/nodejs/controllers/common-module.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/controllers/common-module.js b/modules/web-control-center/nodejs/controllers/common-module.js index a94d23c..f0667c2 100644 --- a/modules/web-control-center/nodejs/controllers/common-module.js +++ b/modules/web-control-center/nodejs/controllers/common-module.js @@ -110,6 +110,9 @@ controlCenterModule.service('$common', ['$alert', function ($alert) { return lines.join(""); }, isDefined: isDefined, + isNonEmpty: function (s) { + return isDefined(s) && s.trim().length > 0; + }, errorMessage: errorMessage, showError: function (msg) { if (msgModal) @@ -214,6 +217,9 @@ controlCenterModule.service('$table', ['$common', function ($common) { } return { + tableReset: function () { + _tableReset(); + }, tableNewItem: function (field) { _tableState(field.model, -1); }, @@ -248,7 +254,7 @@ controlCenterModule.service('$table', ['$common', function ($common) { } }, tableSimpleSaveVisible: function(newValue) { - return $common.isDefined(newValue) && newValue.trim().length > 0; + return $common.isNonEmpty(newValue); }, tableSimpleUp: function (item, field, index) { _tableReset(); @@ -287,8 +293,7 @@ controlCenterModule.service('$table', ['$common', function ($common) { } }, tablePairSaveVisible: function(newKey, newValue) { - return $common.isDefined(newKey) && $common.isDefined(newValue) && - newKey.trim().length > 0 && newValue.trim().length > 0; + return $common.isNonEmpty(newKey) && $common.isNonEmpty(newValue); } } }]); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d298fd8d/modules/web-control-center/nodejs/controllers/metadata-controller.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/controllers/metadata-controller.js b/modules/web-control-center/nodejs/controllers/metadata-controller.js index 017b316..b56b94e 100644 --- a/modules/web-control-center/nodejs/controllers/metadata-controller.js +++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js @@ -57,6 +57,51 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', '$commo {value: 'h2', label: 'H2 database'} ]; + $scope.jdbcTypes = [ + {value: 'BIT', label: 'BIT'}, + {value: 'BOOLEAN', label: 'BOOLEAN'}, + {value: 'TINYINT', label: 'TINYINT'}, + {value: 'SMALLINT', label: 'SMALLINT'}, + {value: 'INTEGER', label: 'INTEGER'}, + {value: 'BIGINT', label: 'BIGINT'}, + {value: 'REAL', label: 'REAL'}, + {value: 'FLOAT', label: 'FLOAT'}, + {value: 'DOUBLE', label: 'DOUBLE'}, + {value: 'NUMERIC', label: 'NUMERIC'}, + {value: 'DECIMAL', label: 'DECIMAL'}, + {value: 'CHAR', label: 'CHAR'}, + {value: 'VARCHAR', label: 'VARCHAR'}, + {value: 'LONGVARCHAR', label: 'LONGVARCHAR'}, + {value: 'NCHAR', label: 'NCHAR'}, + {value: 'NVARCHAR', label: 'NVARCHAR'}, + {value: 'LONGNVARCHAR', label: 'LONGNVARCHAR'}, + {value: 'DATE', label: 'DATE'}, + {value: 'TIME', label: 'TIME'}, + {value: 'TIMESTAMP', label: 'TIMESTAMP'} + ]; + + $scope.javaTypes = [ + {value: 'boolean', label: 'boolean'}, + {value: 'Boolean', label: 'Boolean'}, + {value: 'byte', label: 'byte'}, + {value: 'Byte', label: 'Byte'}, + {value: 'short', label: 'short'}, + {value: 'Short', label: 'Short'}, + {value: 'int', label: 'int'}, + {value: 'Integer', label: 'Integer'}, + {value: 'long', label: 'long'}, + {value: 'Long', label: 'Long'}, + {value: 'float', label: 'float'}, + {value: 'Float', label: 'Float'}, + {value: 'double', label: 'double'}, + {value: 'Double', label: 'Double'}, + {value: 'BigDecimal', label: 'BigDecimal'}, + {value: 'String', label: 'String'}, + {value: 'Date', label: 'Date'}, + {value: 'Time', label: 'Time'}, + {value: 'Timestamp', label: 'Timestamp'} + ]; + $scope.data = { curTableIdx: 0, curFieldIdx: 0, @@ -352,6 +397,49 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', '$commo return true; }; + $scope.tableDbFieldSaveVisible = function(dbName, dbType, javaName, javaType){ + return $common.isNonEmpty(dbName) && $common.isDefined(dbType) && + $common.isNonEmpty(javaName) && $common.isDefined(javaType); + }; + + $scope.tableDbFieldSave = function(field, newDbName, newDbType, newJavaName, newJavaType, index) { + var item = $scope.backupItem; + + var model = item[field.model]; + + var newItem = {dbName: newDbName, dbType: newDbType, javaName: newJavaName, javaType: newJavaType}; + + if ($common.isDefined(model)) { + var idx = _.findIndex(model, function (dbMeta) {return dbMeta.dbName == newDbName}); + + // Found duplicate. + if (idx >= 0 && index != idx) { + $common.showError('DB field with such name already exists!'); + + return; + } + + if (index < 0) { + if (model) + model.push(newItem); + else + item[field.model] = [newItem]; + } + else { + var dbField = model[index]; + + dbField.dbName = newDbName; + dbField.dbType = newDbType; + dbField.javaName = newJavaName; + dbField.javaType = newJavaType; + } + } + else + item[field.model] = [newItem]; + + $table.tableReset(); + }; + $scope.selectSchema = function (idx) { var data = $scope.data; var tables = data.tables; http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d298fd8d/modules/web-control-center/nodejs/controllers/models/metadata.json ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/controllers/models/metadata.json b/modules/web-control-center/nodejs/controllers/models/metadata.json index cff787f..a3c0c75 100644 --- a/modules/web-control-center/nodejs/controllers/models/metadata.json +++ b/modules/web-control-center/nodejs/controllers/models/metadata.json @@ -61,7 +61,7 @@ }, { "label": "Key fields", - "type": "fieldsMetadata", + "type": "dbFields", "model": "keyFields", "keyName": "name", "valueName": "className", @@ -70,7 +70,7 @@ }, { "label": "Value fields", - "type": "fieldsMetadata", + "type": "dbFields", "model": "valueFields", "keyName": "name", "valueName": "className", @@ -79,7 +79,7 @@ }, { "label": "Query fields", - "type": "fieldsMetadata", + "type": "queryFields", "model": "queryFields", "keyName": "name", "valueName": "className", @@ -88,7 +88,7 @@ }, { "label": "Ascending fields", - "type": "fieldsMetadata", + "type": "queryFields", "model": "ascendingFields", "keyName": "name", "valueName": "className", @@ -97,7 +97,7 @@ }, { "label": "Descending fields", - "type": "fieldsMetadata", + "type": "queryFields", "model": "descendingFields", "keyName": "name", "valueName": "className", http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d298fd8d/modules/web-control-center/nodejs/db.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/db.js b/modules/web-control-center/nodejs/db.js index b8034a3..ae34573 100644 --- a/modules/web-control-center/nodejs/db.js +++ b/modules/web-control-center/nodejs/db.js @@ -70,8 +70,8 @@ var CacheTypeMetadataSchema = new Schema({ databaseTable: String, keyType: String, valueType: String, - keyFields: [{dbName: String, dbType: Number, javaName: String, javaType: String}], - valueFields: [{dbName: String, dbType: Number, javaName: String, javaType: String}], + keyFields: [{dbName: String, dbType: String, javaName: String, javaType: String}], + valueFields: [{dbName: String, dbType: String, javaName: String, javaType: String}], queryFields: [{name: String, className: String}], ascendingFields: [{name: String, className: String}], descendingFields: [{name: String, className: String}], http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d298fd8d/modules/web-control-center/nodejs/public/stylesheets/style.less ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/public/stylesheets/style.less b/modules/web-control-center/nodejs/public/stylesheets/style.less index 2323b9f..80bbbdb 100644 --- a/modules/web-control-center/nodejs/public/stylesheets/style.less +++ b/modules/web-control-center/nodejs/public/stylesheets/style.less @@ -871,6 +871,18 @@ label { cursor: pointer; } +.fa-floppy-o { + cursor: pointer; +} + +.fa-arrow-up { + cursor: pointer; +} + +.fa-arrow-down { + cursor: pointer; +} + label.required:after { color: @ignite-red; content: ' *'; @@ -1062,12 +1074,20 @@ a { list-style: none; margin: 0; padding: 0; + + label { + line-height: @input-height; + } } .grid-cell { flex-basis: 50%; } +.grid-cell-4 { + flex-basis: 25%; +} + .grid-fixed-cell { flex-basis: 10px; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/d298fd8d/modules/web-control-center/nodejs/views/includes/controls.jade ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/views/includes/controls.jade b/modules/web-control-center/nodejs/views/includes/controls.jade index 9da9d49..aedee2c 100644 --- a/modules/web-control-center/nodejs/views/includes/controls.jade +++ b/modules/web-control-center/nodejs/views/includes/controls.jade @@ -137,6 +137,23 @@ mixin details-row input.form-control(name='{{detail.model}}' type='text' ng-model='newValue' ng-focus='tableNewItem(detail)' placeholder='{{detail.placeholder}}')&attributes(customValidators) +ico-exclamation('{{detail.model}}', 'ipaddress', 'Invalid address, see help for format description.') +mixin table-db-field-edit(dbName, dbType, javaName, javaType) + .grid + .grid-cell-4 + input.form-control(type='text' ng-model=dbName placeholder='DB name') + div + label / + .grid-cell-4 + button.form-control(ng-model=dbType bs-select data-placeholder='JDBC type' bs-options='item.value as item.label for item in {{jdbcTypes}}') + div + label / + .grid-cell-4 + input.form-control(type='text' ng-model=javaName placeholder='Java name') + div + label / + .grid-cell-4 + button.form-control(ng-model=javaType bs-select data-placeholder='Java type' bs-options='item.value as item.label for item in {{javaTypes}}') + mixin form-row +form-row-custom(['col-sm-2'], ['col-sm-4']) @@ -224,9 +241,31 @@ mixin form-row-custom(lblClasses, fieldClasses) +btn-save('tableSimpleSaveVisible(newValue)', 'tableSimpleSave(tableSimpleValid, backupItem, field, newValue, -1)') .input-tip input.form-control(type='text' ng-model='newValue' placeholder='{{field.placeholder}}') - div(ng-switch-when='fieldsMetadata' ng-hide=fieldHide) + div(ng-switch-when='indexedTypes') + +table-pair('Index key-value type pairs', fieldMdl, 'keyClass', 'valueClass', 'Key class full name', 'Value class full name') + div(ng-switch-when='queryFields' ng-hide=fieldHide) +table-pair('{{field.label}}', fieldMdl, 'name', 'className', 'Field name', 'Field class full name') + div(ng-switch-when='dbFields' ng-hide=fieldHide) + .col-sm-6 + label.table-header {{field.label}}: + +tipLabel('field.tip') + button.btn.btn-primary.fieldButton(ng-click='tableNewItem(field)') Add + table.links-edit.col-sm-12(st-table=fieldMdl ng-show='#{fieldMdl}.length > 0') + tbody + tr.col-sm-12(ng-repeat='item in #{fieldMdl}') + td.col-sm-6 + div(ng-show='!tableEditing(field, $index)') + a(ng-click='curDbFldMeta = tableStartEdit(backupItem, field, $index); curDbName = curDbFldMeta.dbName; curDbType = curDbFldMeta.dbType; curJavaName = curDbFldMeta.javaName; curJavaType = curDbFldMeta.javaType') {{$index + 1}}) {{item.dbName}} / {{item.dbType}} / {{item.javaName}} / {{item.javaType}} + +btn-remove('tableRemove(backupItem, field, $index)') + div(ng-if='tableEditing(field, $index)') + label.labelField {{$index + 1}}) + +btn-save('tableDbFieldSaveVisible(curDbName, curDbType, curJavaName, curJavaType)', 'tableDbFieldSave(field, curDbName, curDbType, curJavaName, curJavaType, $index)') + .input-tip + +table-db-field-edit('curDbName', 'curDbType', 'curJavaName', 'curJavaType') + .settings-row(ng-show='tableNewItemActive(field)') + .col-sm-6 + +btn-save('tableDbFieldSaveVisible(newDbName, newDbType, newJavaName, newJavaType)', 'tableDbFieldSave(field, newDbName, newDbType, newJavaName, newJavaType, -1)') + .input-tip + +table-db-field-edit('newDbName', 'newDbType', 'newJavaName', 'newJavaType') div(ng-switch-when='groupsMetadata' ng-hide=fieldHide)&attributes(fieldCommon) label.table-header {{field.label}}: - div(ng-switch-when='indexedTypes') - +table-pair('Index key-value type pairs', fieldMdl, 'keyClass', 'valueClass', 'Key class full name', 'Value class full name')