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