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/06/24 21:05:15 UTC
incubator-ignite git commit: IGNITE-843: WIP on persistence UI.
Repository: incubator-ignite
Updated Branches:
refs/heads/ignite-843 3e44bf56d -> 9005bd11a
IGNITE-843: WIP on persistence UI.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/9005bd11
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/9005bd11
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/9005bd11
Branch: refs/heads/ignite-843
Commit: 9005bd11a52e6991f5d252fb980d92f3b753c3c9
Parents: 3e44bf5
Author: AKuznetsov <ak...@gridgain.com>
Authored: Thu Jun 25 02:05:12 2015 +0700
Committer: AKuznetsov <ak...@gridgain.com>
Committed: Thu Jun 25 02:05:12 2015 +0700
----------------------------------------------------------------------
modules/webconfig/nodejs/db.js | 44 +++++++++-
.../nodejs/public/form-models/persistence.json | 20 ++++-
.../javascripts/controllers/persistence.js | 17 +++-
modules/webconfig/nodejs/routes/persistence.js | 91 ++++++++++++++++++++
.../nodejs/views/includes/controls.jade | 7 ++
modules/webconfig/nodejs/views/persistence.jade | 14 ++-
6 files changed, 181 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9005bd11/modules/webconfig/nodejs/db.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/db.js b/modules/webconfig/nodejs/db.js
index c1a618d..1a2a5e7 100644
--- a/modules/webconfig/nodejs/db.js
+++ b/modules/webconfig/nodejs/db.js
@@ -97,10 +97,16 @@ var CacheSchema = new Schema({
rebalanceThrottle: Number,
store: {
- kind: {type: String, enum: ['CacheJdbcPojoStoreFactory', 'CacheJdbcBlobStoreFactory', 'CacheHibernateBlobStoreFactory']},
+ kind: {
+ type: String,
+ enum: ['CacheJdbcPojoStoreFactory', 'CacheJdbcBlobStoreFactory', 'CacheHibernateBlobStoreFactory']
+ },
CacheJdbcPojoStoreFactory: {
dataSourceBean: String,
- dialect: {type: String, enum: ['BasicJdbcDialect', 'OracleDialect', 'DB2Dialect', 'SQLServerDialect', 'MySQLDialect', 'H2Dialect']}
+ dialect: {
+ type: String,
+ enum: ['BasicJdbcDialect', 'OracleDialect', 'DB2Dialect', 'SQLServerDialect', 'MySQLDialect', 'H2Dialect']
+ }
},
CacheJdbcBlobStoreFactory: {
user: String,
@@ -151,6 +157,7 @@ exports.Cache = mongoose.model('Cache', CacheSchema);
// Define discovery model.
exports.Discovery = mongoose.model('Discovery', new Schema(DiscoveryObj));
+// Define cluster schema.
var ClusterSchema = new Schema({
space: {type: ObjectId, ref: 'Space'},
name: String,
@@ -206,7 +213,8 @@ var ClusterSchema = new Schema({
'EVTS_CACHE_QUERY', 'EVTS_SWAPSPACE', 'EVTS_IGFS']
}],
managementThreadPoolSize: Number,
- marshaller: {kind: {type: String, enum: ['OptimizedMarshaller', 'JdkMarshaller']},
+ marshaller: {
+ kind: {type: String, enum: ['OptimizedMarshaller', 'JdkMarshaller']},
OptimizedMarshaller: {
poolSize: Number,
requireSerializable: Boolean
@@ -231,7 +239,8 @@ var ClusterSchema = new Schema({
segmentationPolicy: {type: String, enum: ['RESTART_JVM', 'STOP', 'NOOP']},
allSegmentationResolversPassRequired: Boolean,
segmentationResolveAttempts: Number,
- swapSpaceSpi: {kind: {type: String, enum: ['FileSwapSpaceSpi']},
+ swapSpaceSpi: {
+ kind: {type: String, enum: ['FileSwapSpaceSpi']},
FileSwapSpaceSpi: {
baseDirectory: String,
readStripesNumber: Number,
@@ -259,6 +268,33 @@ var ClusterSchema = new Schema({
// Define cluster model.
exports.Cluster = mongoose.model('Cluster', ClusterSchema);
+// Define persistence schema.
+var PersistenceSchema = new Schema({
+ space: {type: ObjectId, ref: 'Space'},
+ name: String,
+ database: {type: String, enum: ['oracle', 'db2', 'mssql', 'postgre', 'mysql', 'h2']},
+ user: String,
+ tables: [{
+ use: Boolean,
+ schemaName: String,
+ tableName: String,
+ keyClass: String,
+ valueClass: String,
+ columns: [{
+ use: Boolean,
+ pk: Boolean,
+ ak: Boolean,
+ dbName: String,
+ dbType: Number,
+ javaName: String,
+ javaType: String
+ }]
+ }]
+});
+
+// Define persistence model.
+exports.Persistence = mongoose.model('Persistence', PersistenceSchema);
+
exports.upsert = function (model, data, cb) {
if (data._id) {
var id = data._id;
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9005bd11/modules/webconfig/nodejs/public/form-models/persistence.json
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/form-models/persistence.json b/modules/webconfig/nodejs/public/form-models/persistence.json
index ab421b5..515aa6c 100644
--- a/modules/webconfig/nodejs/public/form-models/persistence.json
+++ b/modules/webconfig/nodejs/public/form-models/persistence.json
@@ -1,5 +1,5 @@
{
- "general": [
+ "connection": [
{
"label": "Database",
"type": "dropdown",
@@ -9,6 +9,24 @@
"tip": [
"Select database to connect and generate cache type metadata"
]
+ },
+ {
+ "label": "User",
+ "type": "text",
+ "model": "user",
+ "placeholder": "",
+ "tip": [
+ "User name for connecting to database"
+ ]
+ },
+ {
+ "label": "Password",
+ "type": "password",
+ "model": "user",
+ "placeholder": "",
+ "tip": [
+ "User name for connecting to database"
+ ]
}
]
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9005bd11/modules/webconfig/nodejs/public/javascripts/controllers/persistence.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/public/javascripts/controllers/persistence.js b/modules/webconfig/nodejs/public/javascripts/controllers/persistence.js
index 6f24528..88b4d31 100644
--- a/modules/webconfig/nodejs/public/javascripts/controllers/persistence.js
+++ b/modules/webconfig/nodejs/public/javascripts/controllers/persistence.js
@@ -17,18 +17,27 @@
configuratorModule.controller('persistenceController', ['$scope', '$alert', '$http', function ($scope, $alert, $http) {
$scope.databases = [
- {value: 'oracle', label: 'Oracle'},
+ {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: 'mysql', label: 'MySQL'},
+ {value: 'h2', label: 'H2 database'}
];
- $scope.general = [];
+ $scope.connection = [];
+
+ $scope.persistences = [];
$http.get('/form-models/persistence.json')
.success(function (data) {
- $scope.general = data.general;
+ $scope.connection = data.connection;
});
+
+ // Add new persistence.
+ $scope.createItem = function() {
+ $scope.backupItem = {database: oracle};
+ $scope.backupItem.space = $scope.spaces[0]._id;
+ };
}]
);
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9005bd11/modules/webconfig/nodejs/routes/persistence.js
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/routes/persistence.js b/modules/webconfig/nodejs/routes/persistence.js
new file mode 100644
index 0000000..3163fdd
--- /dev/null
+++ b/modules/webconfig/nodejs/routes/persistence.js
@@ -0,0 +1,91 @@
+/*
+ * 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');
+
+/**
+ * Send spaces and persistences accessed for user account.
+ *
+ * @param req Request.
+ * @param res Response.
+ */
+function selectAll(req, res) {
+ var user_id = req.user._id;
+
+ // 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}}, function (err, persistences) {
+ if (err)
+ return res.status(500).send(err.message);
+
+ res.json({spaces: spaces, persistences: persistences});
+ });
+ });
+}
+
+/**
+ * Get spaces and persistences accessed for user account.
+ */
+router.get('/', function(req, res) {
+ selectAll(req, res);
+});
+
+/**
+ * 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, persistence) {
+ if (err)
+ return res.status(500).send(err.message);
+
+ res.send(req.body._id);
+ });
+ else {
+ var persistence = new db.Persistence(req.body);
+
+ persistence.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);
+ })
+});
+
+module.exports = router;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9005bd11/modules/webconfig/nodejs/views/includes/controls.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/includes/controls.jade b/modules/webconfig/nodejs/views/includes/controls.jade
index 6033177..e25f6dd 100644
--- a/modules/webconfig/nodejs/views/includes/controls.jade
+++ b/modules/webconfig/nodejs/views/includes/controls.jade
@@ -99,6 +99,13 @@ mixin form-row
.input-tip
input.form-control(type='text' ng-if='!group.model' ng-model='backupItem[field.model]' placeholder='{{field.placeholder}}' ng-required='field.required')
input.form-control(type='text' ng-if='group.model' ng-model='backupItem[group.model][field.model]' placeholder='{{field.placeholder}}' ng-required='field.required')
+ div(ng-switch-when='password')
+ label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
+ .col-sm-4
+ +tipField('field.tip')
+ .input-tip
+ input.form-control(type='password' ng-if='!group.model' ng-model='backupItem[field.model]' placeholder='{{field.placeholder}}' ng-required='field.required')
+ input.form-control(type='password' ng-if='group.model' ng-model='backupItem[group.model][field.model]' placeholder='{{field.placeholder}}' ng-required='field.required')
div(ng-switch-when='number')
label(class=lblClasses ng-class='{required: field.required}') {{field.label}}:
.col-sm-4
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/9005bd11/modules/webconfig/nodejs/views/persistence.jade
----------------------------------------------------------------------
diff --git a/modules/webconfig/nodejs/views/persistence.jade b/modules/webconfig/nodejs/views/persistence.jade
index 74b2cec..39cdd6e 100644
--- a/modules/webconfig/nodejs/views/persistence.jade
+++ b/modules/webconfig/nodejs/views/persistence.jade
@@ -27,13 +27,21 @@ block content
p Create and configure Ignite persistence.
hr
.docs-body(ng-controller='persistenceController')
- form.form-horizontal(name='persistenceForm')
+ .links(ng-hide='persistences.length == 0')
+ table.col-sm-12(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')
div(bs-collapse data-start-collapsed='false')
.panel.panel-default
.panel-heading
h3
- a(bs-collapse-toggle) General
+ a(bs-collapse-toggle) Connection
.panel-collapse(bs-collapse-target)
.panel-body
- .settings-row(ng-repeat='field in general')
+ .settings-row(ng-repeat='field in connection')
+form-row