IGNITE-843: Deleted old persistence code.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/949e37c6 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/949e37c6 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/949e37c6 Branch: refs/heads/ignite-1121 Commit: 949e37c6df74c5c8f617b46d698cd010bcc3e195 Parents: 5483c51 Author: AKuznetsov <akuznet...@gridgain.com> Authored: Thu Jul 16 22:47:43 2015 +0700 Committer: AKuznetsov <akuznet...@gridgain.com> Committed: Thu Jul 16 22:47:43 2015 +0700 ---------------------------------------------------------------------- modules/web-control-center/nodejs/app.js | 2 - .../nodejs/controllers/models/persistence.json | 66 ---- .../controllers/persistence-controller.js | 213 ------------ .../nodejs/routes/persistence.js | 320 ------------------- .../nodejs/tests/routes/persistence.js | 32 -- .../nodejs/views/configuration/persistence.jade | 114 ------- 6 files changed, 747 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/949e37c6/modules/web-control-center/nodejs/app.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/app.js b/modules/web-control-center/nodejs/app.js index c9b79ab..8c347db 100644 --- a/modules/web-control-center/nodejs/app.js +++ b/modules/web-control-center/nodejs/app.js @@ -29,7 +29,6 @@ var publicRoutes = require('./routes/public'); var clustersRouter = require('./routes/clusters'); var cachesRouter = require('./routes/caches'); var metadataRouter = require('./routes/metadata'); -var persistenceRouter = require('./routes/persistence'); var summary = require('./routes/summary'); var adminRouter = require('./routes/admin'); var profileRouter = require('./routes/profile'); @@ -120,7 +119,6 @@ app.use('/profile', mustAuthenticated, profileRouter); app.use('/configuration/clusters', clustersRouter); app.use('/configuration/caches', cachesRouter); app.use('/configuration/metadata', metadataRouter); -app.use('/configuration/persistence', persistenceRouter); app.use('/configuration/summary', summary); app.use('/sql', sqlRouter); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/949e37c6/modules/web-control-center/nodejs/controllers/models/persistence.json ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/controllers/models/persistence.json b/modules/web-control-center/nodejs/controllers/models/persistence.json deleted file mode 100644 index edf5344..0000000 --- a/modules/web-control-center/nodejs/controllers/models/persistence.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "connection": [ - { - "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." - ] - } - ] -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/949e37c6/modules/web-control-center/nodejs/controllers/persistence-controller.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/controllers/persistence-controller.js b/modules/web-control-center/nodejs/controllers/persistence-controller.js deleted file mode 100644 index a77c445..0000000 --- a/modules/web-control-center/nodejs/controllers/persistence-controller.js +++ /dev/null @@ -1,213 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -controlCenterModule.controller('persistenceController', ['$scope', '$http', 'commonFunctions', function ($scope, $http, commonFunctions) { - $scope.joinTip = commonFunctions.joinTip; - $scope.getModel = commonFunctions.getModel; - - $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.connection = []; - - $http.get('/models/persistence.json') - .success(function (data) { - $scope.connection = data.connection; - }) - .error(function (errMsg) { - commonFunctions.showError(errMsg); - }); - - $scope.persistences = []; - - // When landing on the page, get persistences and show them. - $http.post('persistence/list') - .success(function (data) { - $scope.spaces = data.spaces; - $scope.persistences = data.persistences; - - var restoredItem = angular.fromJson(sessionStorage.persistenceBackupItem); - - if (restoredItem && restoredItem._id) { - var idx = _.findIndex($scope.persistences, function (persistence) { - return persistence._id == restoredItem._id; - }); - - if (idx >= 0) { - $scope.selectedItem = $scope.persistences[idx]; - - $scope.backupItem = restoredItem; - } - else - sessionStorage.removeItem('persistenceBackupItem'); - } - else - $scope.backupItem = restoredItem; - - $scope.$watch('backupItem', function (val) { - if (val) - sessionStorage.persistenceBackupItem = angular.toJson(val); - }, true); - }) - .error(function (errMsg) { - commonFunctions.showError(errMsg); - }); - - $scope.selectItem = function (item) { - $scope.selectedItem = item; - $scope.backupItem = angular.copy(item); - }; - - // Add new persistence. - $scope.createItem = function () { - $scope.backupItem = {database: 'oracle'}; - $scope.backupItem.space = $scope.spaces[0]._id; - }; - - // Save persistence in db. - $scope.saveItem = function () { - var item = $scope.backupItem; - - $http.post('save', item) - .success(function (_id) { - var i = _.findIndex($scope.persistences, function (persistence) { - return persistence._id == _id; - }); - - if (i >= 0) - angular.extend($scope.persistences[i], item); - else { - item._id = _id; - - $scope.persistences.push(item); - } - - $scope.selectItem(item); - }) - .error(function (errMsg) { - commonFunctions.showError(errMsg); - }); - }; - - $scope.removeItem = function () { - var _id = $scope.selectedItem._id; - - $http.post('remove', {_id: _id}) - .success(function () { - var i = _.findIndex($scope.persistences, function (persistence) { - return persistence._id == _id; - }); - - if (i >= 0) { - $scope.persistences.splice(i, 1); - - $scope.selectedItem = undefined; - $scope.backupItem = undefined; - } - }) - .error(function (errMsg) { - commonFunctions.showError(errMsg); - }); - }; - - $scope.data = { - curTableIdx: -1, - curFieldIdx: -1, - 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.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; - } - }; - }] -); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/949e37c6/modules/web-control-center/nodejs/routes/persistence.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/routes/persistence.js b/modules/web-control-center/nodejs/routes/persistence.js deleted file mode 100644 index 44d8b69..0000000 --- a/modules/web-control-center/nodejs/routes/persistence.js +++ /dev/null @@ -1,320 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one or more - * contributor license agreements. See the NOTICE file distributed with - * this work for additional information regarding copyright ownership. - * The ASF licenses this file to You under the Apache License, Version 2.0 - * (the "License"); you may not use this file except in compliance with - * the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -var router = require('express').Router(); -var db = require('../db'); -var ds = require('../helpers/data-structures.js'), jdbcTypes = ds.jdbcTypes, javaTypes = ds.javaTypes; - -/* GET persistence page. */ -router.get('/', function (req, res) { - res.render('configuration/persistence'); -}); - -/** - * Get spaces and persistences accessed for user account. - * - * @param req Request. - * @param res Response. - */ -router.post('/list', function (req, res) { - var user_id = req.currentUserId(); - - // Get owned space and all accessed space. - db.Space.find({$or: [{owner: user_id}, {usedBy: {$elemMatch: {account: user_id}}}]}, function (err, spaces) { - if (err) - return res.status(500).send(err.message); - - var space_ids = spaces.map(function (value) { - return value._id; - }); - - // Get all persistences for spaces. - db.Persistence.find({space: {$in: space_ids}}).sort('name').exec(function (err, persistences) { - if (err) - return res.status(500).send(err.message); - - res.json({spaces: spaces, persistences: persistences}); - }); - }); -}); - -/** - * Save persistence. - */ -router.post('/save', function (req, res) { - if (req.body._id) - db.Persistence.update({_id: req.body._id}, req.body, {upsert: true}, function (err) { - if (err) - return res.status(500).send(err.message); - - res.send(req.body._id); - }); - else { - db.CacheTypeMetadata.findOne({name: req.body.name}, function (err, persistence) { - if (err) - return res.status(500).send(err.message); - - if (persistence) - return res.status(500).send('Persistence with name: "' + persistence.name + '" already exist.'); - - (new db.Persistence(req.body)).save(function (err, persistence) { - if (err) - return res.status(500).send(err.message); - - res.send(persistence._id); - }); - }); - } -}); - -/** - * Remove persistence by ._id. - */ -router.post('/remove', function (req, res) { - db.Persistence.remove(req.body, function (err) { - if (err) - return res.status(500).send(err.message); - - res.sendStatus(200); - }) -}); - -// simple countdown latch -function CDL(countdown, completion) { - this.countDown = function () { - if (--countdown < 1) completion(); - }; -} - -/** - * @param name Source name. - * @return String converted to java class name notation. - */ -function toJavaClassName(name) { - var len = name.length; - - var buf = []; - - var capitalizeNext = true; - - for (var i = 0; i < len; i++) { - var ch = name.charAt(i); - - if (' ' == ch || '_' == ch) - capitalizeNext = true; - else if (capitalizeNext) { - buf.push(ch.toUpperCase()); - - capitalizeNext = false; - } - else - buf.push(ch.toLowerCase()); - } - - return buf.join(""); -} - -/** - * @param name Source name. - * @return String converted to java field name notation. - */ -function toJavaFieldName(name) { - var javaName = toJavaClassName(name); - - return javaName.charAt(0).toLowerCase() + javaName.substring(1); -} - - -// -router.post('/pg', function (req, res) { - var pg = require('pg'); - var util = require('util'); - - var host = req.body.host; - var port = req.body.port; - - var username = req.body.username; - var password = req.body.password; - - var dbName = req.body.dbName; - - var connectionString = util.format('postgres://%s:%s@%s:%d/%s', username, password, host, port, dbName); - - pg.connect(connectionString, function (err, client, done) { - var sendError = function (err) { - done(); - - res.status(500).send(err.message); - }; - - if (err) - return sendError(err); - - var sendResponse = function () { - done(); - - console.log(JSON.stringify(tables)); - - res.status(200).send(tables); - }, jdbcType = function (dataType) { - switch (dataType) { - case 'smallint': - case 'int2': - return jdbcTypes.SMALLINT; - case 'integer': - case 'int': - case 'int4': - return jdbcTypes.INTEGER; - case 'oid': - case 'bigint': - case 'int8': - return jdbcTypes.BIGINT; - case 'money': - return jdbcTypes.DOUBLE; - case 'decimal': - case 'numeric': - return jdbcTypes.NUMERIC; - case 'float4': - return jdbcTypes.REAL; - case 'float': - case 'float8': - return jdbcTypes.DOUBLE; - case 'char': - case 'bpchar': - return jdbcTypes.CHAR; - case 'varchar': - case 'text': - case 'name': - return jdbcTypes.VARCHAR; - case 'bytea': - return jdbcTypes.BINARY; - case 'boolean': - case 'bool': - case 'bit': - return jdbcTypes.BIT; - case 'date': - return jdbcTypes.DATE; - case 'time': - case 'timetz': - return jdbcTypes.TIME; - case 'timestamp': - case 'timestamptz': - return jdbcTypes.TIMESTAMP; - } - }, javaType = function (dataType) { - switch (dataType) { - case jdbcTypes.SMALLINT: - case jdbcTypes.INTEGER: - return javaTypes.INTEGER; - case jdbcTypes.BIGINT: - return javaTypes.LONG; - case jdbcTypes.DOUBLE: - return javaTypes.DOUBLE; - case jdbcTypes.NUMERIC: - return javaTypes.BIGDECIMAL; - case jdbcTypes.REAL: - return javaTypes.FLOAT; - case jdbcTypes.CHAR: - case jdbcTypes.VARCHAR: - return javaTypes.STRING; - case jdbcTypes.BINARY: - return javaTypes.BYTE_ARRAY; - case jdbcTypes.BIT: - return javaTypes.BOOLEAN; - case jdbcTypes.DATE: - return javaTypes.DATE; - case jdbcTypes.TIME: - return javaTypes.TIME; - case jdbcTypes.TIMESTAMP: - return javaTypes.TIMESTAMP; - } - }; - - var tables = []; - - client.query( - 'SELECT table_schema, table_name ' + - 'FROM information_schema.tables ' + - 'WHERE table_schema = ANY (current_schemas(false)) ' + - 'ORDER BY table_schema, table_name', function (err, result) { - - if (err) - return sendError(err); - - if (result.rows.length > 0) { - // usage - var latch = new CDL(result.rows.length, sendResponse); - - result.rows.forEach(function (table) { - - var indisprimary = client.query( - "SELECT a.attname " + - "FROM pg_index i " + - "JOIN pg_attribute a " + - " ON a.attrelid = i.indrelid AND a.attnum = ANY(i.indkey) " + - "WHERE i.indrelid = $1::regclass AND i.indisprimary", [table.table_schema + '.' + table.table_name], - function (err, result) { - if (err) - return sendError(err); - - var pks = result.rows.map(function (row) { - return row.attname; - }); - - client.query( - 'SELECT column_name, udt_name, is_nullable ' + - 'FROM information_schema.columns ' + - 'WHERE table_schema = $1 AND table_name = $2', [table.table_schema, table.table_name], - function (err, result) { - if (err) - return sendError(err); - - var cols = []; - - result.rows.forEach(function (column) { - var dataType = jdbcType(column.udt_name); - - cols.push({ - pk: pks.indexOf(column.column_name) >= 0, - use: true, - notNull: column.is_nullable == 'NO', - dbName: column.column_name, - dbType: dataType, - javaName: toJavaFieldName(column.column_name), - javaType: javaType(dataType) - }); - }); - - var valClsName = toJavaClassName(table.table_name); - - tables.push({ - use: pks.length > 0, - schemaName: table.table_schema, tableName: table.table_name, - keyClass: valClsName + 'Key', valueClass: valClsName, - columns: cols - }); - - latch.countDown(); - }) - }); - }); - } - }); - }); -}); - -module.exports = router; \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/949e37c6/modules/web-control-center/nodejs/tests/routes/persistence.js ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/tests/routes/persistence.js b/modules/web-control-center/nodejs/tests/routes/persistence.js deleted file mode 100644 index 4d25950..0000000 --- a/modules/web-control-center/nodejs/tests/routes/persistence.js +++ /dev/null @@ -1,32 +0,0 @@ -var request = require('supertest'), - should = require('should'), - express = require('express'), - persistenceRouter = require('../../routes/persistence'); - -var app = express(); - -app.use(require('body-parser').json()); - -app.use('/rest/persistence', persistenceRouter); - -describe('request.persistence', function(){ - var agent = request.agent(app); - - it('should return 200', function(done){ - agent - .post('/rest/persistence/pg') - .send({ - username: 'nva', - password: 'nva.141', - host: 'localhost', - port: '5432', - dbName: 'ggmonitor' - }) - .end(function(err, res) { - if (err) - throw err; - - done(); - }); - }); -}); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/949e37c6/modules/web-control-center/nodejs/views/configuration/persistence.jade ---------------------------------------------------------------------- diff --git a/modules/web-control-center/nodejs/views/configuration/persistence.jade b/modules/web-control-center/nodejs/views/configuration/persistence.jade deleted file mode 100644 index b8973d7..0000000 --- a/modules/web-control-center/nodejs/views/configuration/persistence.jade +++ /dev/null @@ -1,114 +0,0 @@ -//- - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - -extends sidebar - -append scripts - script(src='/persistence-controller.js') - -include ../includes/controls - -mixin dbcheck(chk) - input(type='checkbox' style='margin-left: 5px' ng-checked=chk) - -block content - .docs-header - h1 Create and configure Ignite persistence - hr - .docs-body(ng-controller='persistenceController') - .links(ng-hide='persistences.length == 0') - table(st-table='persistences') - tbody - tr(ng-repeat='row in persistences track by row._id') - td.col-sm-6(ng-class='{active: row._id == selectedItem._id}') - a(ng-click='selectItem(row)') {{$index + 1}}) {{row.name}}, {{row.database | displayValue:databases:'Database not set'}} - button.btn.btn-primary(ng-click='createItem()') Add - hr - form.form-horizontal(name='inputForm' ng-if='backupItem' novalidate) - div(bs-collapse data-start-collapsed='false') - .panel.panel-default - .panel-heading - h3 - a(bs-collapse-toggle) Connection - .panel-collapse(bs-collapse-target) - .panel-body - .settings-row(ng-repeat='field in connection') - +form-row - div(bs-collapse data-start-collapsed='true' ng-hide='data.tables.length == 0') - .panel.panel-default - .panel-heading - h3 - a(bs-collapse-toggle) Metadata - .panel-collapse(bs-collapse-target) - .panel-body - 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='inputForm.$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 - -