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/07/15 12:43:20 UTC
incubator-ignite git commit: IGNITE-843 WIP metadata.
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-843 ecf4e20ad -> 24112a74f
IGNITE-843 WIP 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/24112a74
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/24112a74
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/24112a74
Branch: refs/heads/ignite-843
Commit: 24112a74f4dc7d6f33b81153c1872d1677d7ed9e
Parents: ecf4e20
Author: AKuznetsov <ak...@gridgain.com>
Authored: Wed Jul 15 17:43:20 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Wed Jul 15 17:43:20 2015 +0700
----------------------------------------------------------------------
.../nodejs/controllers/metadata-controller.js | 97 +++++++++++++++++++-
.../nodejs/controllers/models/metadata.json | 66 ++++++++++++-
.../nodejs/views/configuration/metadata.jade | 68 +++++++++++++-
3 files changed, 220 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/24112a74/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 194a993..a4b54cc 100644
--- a/modules/web-control-center/nodejs/controllers/metadata-controller.js
+++ b/modules/web-control-center/nodejs/controllers/metadata-controller.js
@@ -26,13 +26,56 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
{value: {kind: 'both'}, label: 'both'}
];
+ $scope.template = $scope.templates[0].value;
+
$scope.kinds = [
{value: 'query', label: 'query'},
{value: 'store', label: 'store'},
{value: 'both', label: 'both'}
];
- $scope.template = $scope.templates[0].value;
+ $scope.databases = [
+ {value: 'oracle', label: 'Oracle database'},
+ {value: 'db2', label: 'IBM DB2'},
+ {value: 'mssql', label: 'MS SQL Server'},
+ {value: 'postgre', label: 'PostgreSQL'},
+ {value: 'mysql', label: 'MySQL'},
+ {value: 'h2', label: 'H2 database'}
+ ];
+
+ $scope.data = {
+ curTableIdx: 0,
+ curFieldIdx: 0,
+ curKeyClass: '',
+ curValueClass: '',
+ curJavaName: '',
+ curJavaType: '',
+ tables: [
+ {schemaName: 'Schema1', use: true},
+ {schemaName: 'Schema1', use: true, tableName: 'Table1', keyClass: 'KeyClass1', valueClass: 'ValueClass1',
+ fields: [
+ {use: true, key: true, ak: true, dbName: 'name1', dbType: 'dbType1', javaName: 'javaName1', javaType: 'javaType1'},
+ {use: true, key: false, ak: false, dbName: 'name2', dbType: 'dbType2', javaName: 'javaName2', javaType: 'javaType2'},
+ {use: false, key: false, ak: false, dbName: 'name3', dbType: 'dbType3', javaName: 'javaName3', javaType: 'javaType3'}
+ ]
+ },
+ {schemaName: 'Schema2 with very long name', use: false},
+ {schemaName: 'Schema2', use: false, tableName: 'Table2', keyClass: 'KeyClass2', valueClass: 'ValueClass2',
+ fields: [
+ {use: true, key: true, ak: true, dbName: 'name4', dbType: 'dbType4', javaName: 'javaName4', javaType: 'javaType4'},
+ {use: true, key: false, ak: false, dbName: 'name5', dbType: 'dbType5', javaName: 'javaName5', javaType: 'javaType5'},
+ {use: false, key: false, ak: false, dbName: 'name6', dbType: 'dbType6', javaName: 'javaName6', javaType: 'javaType6'}
+ ]},
+ {schemaName: 'Schema2', use: false, tableName: 'Table3', keyClass: 'KeyClass3', valueClass: 'ValueClass3',
+ fields: [
+ {use: true, key: true, ak: true, dbName: 'name7', dbType: 'dbType7', javaName: 'javaName7', javaType: 'javaType7'},
+ {use: true, key: false, ak: false, dbName: 'name8', dbType: 'dbType8', javaName: 'javaName8', javaType: 'javaType8'},
+ {use: false, key: false, ak: false, dbName: 'name9', dbType: 'dbType9', javaName: 'javaName9', javaType: 'javaType9'},
+ {use: false, key: false, ak: false, dbName: 'name10', dbType: 'dbType10', javaName: 'javaName10', javaType: 'javaType10'},
+ {use: false, key: false, ak: false, dbName: 'name11', dbType: 'dbType11', javaName: 'javaName11', javaType: 'javaType11'},
+ {use: false, key: false, ak: false, dbName: 'name12', dbType: 'dbType12', javaName: 'javaName12', javaType: 'javaType12'}
+ ]}]
+ };
$scope.metadata = [];
@@ -40,14 +83,13 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
.success(function (data) {
$scope.screenTip = data.screenTip;
$scope.templateTip = data.templateTip;
- $scope.general = data.general;
+ $scope.metadataManual = data.metadataManual;
+ $scope.metadataDb = data.metadataDb;
})
.error(function (errMsg) {
commonFunctions.showError(errMsg);
});
- $scope.metadatas = [];
-
// When landing on the page, get metadatas and show them.
$http.post('metadata/list')
.success(function (data) {
@@ -83,7 +125,6 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
$scope.selectItem = function (item) {
$scope.selectedItem = item;
-
$scope.backupItem = angular.copy(item);
};
@@ -140,5 +181,51 @@ controlCenterModule.controller('metadataController', ['$scope', '$http', 'common
commonFunctions.showError(errMsg);
});
};
+
+ $scope.selectSchema = function (idx) {
+ var data = $scope.data;
+ var tables = data.tables;
+ var schemaName = tables[idx].schemaName;
+ var use = tables[idx].use;
+
+ for (var i = idx + 1; i < tables.length; i++) {
+ var item = tables[i];
+
+ if (item.schemaName == schemaName && item.tableName)
+ item.use = use;
+ else
+ break;
+ }
+
+ data.curTableIdx = -1;
+ data.curFieldIdx = -1;
+ };
+
+ $scope.selectTable = function (idx) {
+ var data = $scope.data;
+
+ data.curTableIdx = idx;
+ data.curFieldIdx = -1;
+
+ if (idx >= 0) {
+ var tbl = data.tables[idx];
+
+ data.curKeyClass = tbl.keyClass;
+ data.curValueClass = tbl.valueClass;
+ }
+ };
+
+ $scope.selectField = function (idx) {
+ var data = $scope.data;
+
+ data.curFieldIdx = idx;
+
+ if (idx >= 0) {
+ var fld = data.tables[data.curTableIdx].fields[idx];
+
+ data.curJavaName = fld.javaName;
+ data.curJavaType = fld.javaType;
+ }
+ };
}]
);
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/24112a74/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 ce206b4..753f643 100644
--- a/modules/web-control-center/nodejs/controllers/models/metadata.json
+++ b/modules/web-control-center/nodejs/controllers/models/metadata.json
@@ -12,7 +12,7 @@
" <li>both - Create cache type metadata to use with query and store.</li>",
"</ul>"
],
- "general": [
+ "metadataManual": [
{
"label": "Name",
"type": "text",
@@ -110,5 +110,69 @@
"hide": "backupItem.kind != 'query'",
"tip": ["TODO."]
}
+ ],
+ "metadataDb": [
+ {
+ "label": "Name",
+ "type": "text",
+ "model": "name",
+ "required": true
+ },
+ {
+ "label": "Database type",
+ "type": "dropdown",
+ "model": "dbType",
+ "placeholder": "Choose database",
+ "items": "databases",
+ "tip": [
+ "Select database type to connect for loading tables metadata."
+ ]
+ },
+ {
+ "label": "Database name",
+ "type": "text",
+ "model": "dbName",
+ "tip": [
+ "Database name to connect for loading tables metadata."
+ ]
+ },
+ {
+ "label": "Host",
+ "type": "text",
+ "model": "host",
+ "placeholder": "IP address or host",
+ "tip": [
+ "IP address or host name where database server deployed."
+ ]
+ },
+ {
+ "label": "Port",
+ "type": "number",
+ "model": "port",
+ "max": 65535,
+ "placeholder": "",
+ "tip": [
+ "Port number for connecting to database."
+ ]
+ },
+ {
+ "label": "User",
+ "type": "text",
+ "model": "user",
+ "placeholder": "",
+ "tip": [
+ "User name for connecting to database."
+ ]
+ },
+ {
+ "label": "Password",
+ "type": "password",
+ "model": "password",
+ "placeholder": "",
+ "tip": [
+ "Password for connecting to database.",
+ "Note, password would not be saved."
+ ]
+ }
]
}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/24112a74/modules/web-control-center/nodejs/views/configuration/metadata.jade
----------------------------------------------------------------------
diff --git a/modules/web-control-center/nodejs/views/configuration/metadata.jade b/modules/web-control-center/nodejs/views/configuration/metadata.jade
index 526edb4..1e4c986 100644
--- a/modules/web-control-center/nodejs/views/configuration/metadata.jade
+++ b/modules/web-control-center/nodejs/views/configuration/metadata.jade
@@ -46,16 +46,74 @@ block content
button.btn.btn-default(ng-model='template' data-template='/select' data-placeholder='Choose metadata type' bs-options='item.value as item.label for item in templates' bs-select)
i.tiplabel.fa.fa-question-circle(bs-tooltip data-title='{{joinTip(templateTip)}}' type='button')
hr
- form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate)
+ form.form-horizontal(name='manualForm' ng-if='backupItem' novalidate)
.panel-body
- .settings-row(ng-repeat='field in general')
+ .settings-row(ng-repeat='field in metadataManual')
+form-row
- button#save-btn.btn.btn-primary(ng-disabled='inputForm.$invalid' ng-click='saveItem()') Save
+ button#save-btn.btn.btn-primary(ng-disabled='manualForm.$invalid' ng-click='saveItem()') Save
button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
.panel.panel-default
.panel-heading
h3
a(bs-collapse-toggle) Load from database
- .panel-collapse(role="tabpanel" bs-collapse-target)
+ .panel-collapse(bs-collapse-target)
.panel-body
- p TODO 2
+ form.form-horizontal(name='dbForm' novalidate)
+ .settings-row(ng-repeat='field in metadataDb')
+ +form-row
+ div(ng-hide='data.tables.length == 0')
+ table.table-bordered.table-condensed.links-edit-small-padding.col-sm-12(st-table='data.tables')
+ thead
+ tr
+ th.col-sm-3 Schema/Table
+ th Key class
+ th Value class
+ tbody
+ tr(ng-repeat='row in data.tables')
+ td(colspan='{{row.tableName ? 1 : 3}}')
+ div.checkbox(ng-if='!row.tableName')
+ label(ng-click='selectSchema($index)')
+ input(type='checkbox' ng-checked='row.use')
+ | {{row.schemaName}}
+ div.checkbox(ng-if='row.tableName')
+ label(style='padding-left: 30px' ng-click='selectTable($index)')
+ input(type='checkbox' ng-checked = 'row.use')
+ | {{row.tableName}}
+ td(ng-if='row.tableName')
+ a(ng-show='data.curTableIdx != $index' ng-click='selectTable($index)') {{row.keyClass}}
+ input.form-control(type='text' ng-show='data.curTableIdx == $index' ng-model='data.curKeyClass' placeholder='Key class full name')
+ td(ng-if='row.tableName')
+ a(ng-show='data.curTableIdx != $index' ng-click='selectTable($index)') {{row.valueClass}}
+ input.form-control(type='text' ng-show='data.curTableIdx == $index' ng-model='data.curValueClass' placeholder='Value class full name')
+ //div(ng-hide='data.curTableIdx < 0')
+ // table.table-bordered.table-condensed.links-edit-small-padding.col-sm-12(st-table='data.tables[data.curTableIdx].fields')
+ // thead
+ // tr
+ // th(style='width:45px') Use
+ // th(style='width:45px') Key
+ // th(style='width:45px') Ak
+ // th DB Name
+ // th DB Type
+ // th Java Name
+ // th Java Type
+ // tbody
+ // tr(ng-repeat='row in data.tables[data.curTableIdx].fields')
+ // td
+ // +dbcheck('row.use')
+ // td
+ // +dbcheck('row.key')
+ // td
+ // +dbcheck('row.ak')
+ // td
+ // label {{row.dbName}}
+ // td
+ // label {{row.dbType}}
+ // td
+ // a(ng-show='data.curFieldIdx != $index' ng-click='selectField($index)') {{row.javaName}}
+ // input.form-control(type='text' ng-show='data.curFieldIdx == $index' ng-model='data.curJavaName' placeholder='Field Java name')
+ // td
+ // a(ng-show='data.curFieldIdx != $index' ng-click='selectField($index)') {{row.javaType}}
+ // input.form-control(type='text' ng-show='data.curFieldIdx == $index' ng-model='data.curJavaType' placeholder='Field Java type')
+ button.btn.btn-primary(ng-disabled='dbForm.$invalid' ng-click='saveItem()') Save
+ button.btn.btn-primary.btn-second(ng-show='backupItem._id' ng-click='removeItem()') Remove
+ button.btn.btn-primary.btn-second(ng-click='reloadMetadata()') Reload
\ No newline at end of file