Repository: incubator-ignite
Updated Branches:
  refs/heads/ignite-843 cd2048eb4 -> e86538d73


IGNITE-843: Link clusters an caches.


Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/e86538d7
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/e86538d7
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/e86538d7

Branch: refs/heads/ignite-843
Commit: e86538d738e46089d606c2b9b30bd2a56d362691
Parents: cd2048e
Author: AKuznetsov <akuznet...@gridgain.com>
Authored: Tue Aug 18 11:04:15 2015 +0700
Committer: AKuznetsov <akuznet...@gridgain.com>
Committed: Tue Aug 18 11:04:15 2015 +0700

----------------------------------------------------------------------
 .../main/js/controllers/caches-controller.js    |  25 ++++-
 .../main/js/controllers/clusters-controller.js  |  28 +++--
 .../src/main/js/routes/clusters.js              | 110 +++++++++++--------
 3 files changed, 106 insertions(+), 57 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e86538d7/modules/control-center-web/src/main/js/controllers/caches-controller.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/controllers/caches-controller.js 
b/modules/control-center-web/src/main/js/controllers/caches-controller.js
index ac11049..6cd0727 100644
--- a/modules/control-center-web/src/main/js/controllers/caches-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/caches-controller.js
@@ -199,7 +199,28 @@ controlCenterModule.controller('cachesController', [
                             });
 
                             if (idx >= 0) {
-                                $scope.selectedItem = $scope.caches[idx];
+                                var cache = $scope.caches[idx];
+
+                                var restoredSelectedItem = 
angular.fromJson(sessionStorage.cacheSelectedItem);
+
+                                // Clusters not changed by user. We should 
take clusters from server as they could be changed on Clusters screen.
+                                if (restoredSelectedItem && 
_.isEqual(restoredItem.clusters, restoredSelectedItem.clusters)) {
+                                    restoredItem.clusters = [];
+
+                                    _.forEach(cache.clusters, function (cache) 
{
+                                        restoredItem.clusters.push(cache)
+                                    });
+                                }
+                                else {
+                                    // Clusters changed by user. We need to 
remove deleted clusters (if any).
+                                    restoredItem.clusters = 
_.filter(restoredItem.clusters, function (clusterId) {
+                                        return _.findIndex($scope.clusters, 
function (scopeCcluster) {
+                                                return scopeCcluster.value == 
clusterId;
+                                            }) >= 0;
+                                    });
+                                }
+
+                                $scope.selectedItem = cache;
                                 $scope.backupItem = restoredItem;
                             }
                             else
@@ -225,6 +246,8 @@ controlCenterModule.controller('cachesController', [
 
                 $scope.selectedItem = item;
                 $scope.backupItem = angular.copy(item);
+
+                sessionStorage.cacheSelectedItem = angular.toJson(item);
             };
 
             // Add new cache.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e86538d7/modules/control-center-web/src/main/js/controllers/clusters-controller.js
----------------------------------------------------------------------
diff --git 
a/modules/control-center-web/src/main/js/controllers/clusters-controller.js 
b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
index a128f02..ef4bff5 100644
--- a/modules/control-center-web/src/main/js/controllers/clusters-controller.js
+++ b/modules/control-center-web/src/main/js/controllers/clusters-controller.js
@@ -175,18 +175,24 @@ controlCenterModule.controller('clustersController', 
['$scope', '$http', '$commo
                         if (idx >= 0) {
                             var cluster = $scope.clusters[idx];
 
-                            var restoredSelectedItem = 
angular.fromJson(sessionStorage.clusterSelectedBackupItem);
+                            var restoredSelectedItem = 
angular.fromJson(sessionStorage.clusterSelectedItem);
 
-                            if (restoredSelectedItem) {
-                                // TODO
-                            }
+                            // Caches not changed by user. We should take 
caches from server as they could be changed on Caches screen.
+                            if (restoredSelectedItem && 
_.isEqual(restoredItem.caches, restoredSelectedItem.caches)) {
+                                restoredItem.caches = [];
 
-                            // Remove deleted caches.
-                            restoredItem.caches = 
_.filter(restoredItem.caches, function (cacheId) {
-                                return _.findIndex($scope.caches, function 
(scopeCache) {
-                                        return scopeCache.value == cacheId;
-                                    }) >= 0;
-                            });
+                                _.forEach(cluster.caches, function (cache) {
+                                    restoredItem.caches.push(cache)
+                                });
+                            }
+                            else {
+                                // Caches changed by user. We need to remove 
deleted caches (if any).
+                                restoredItem.caches = 
_.filter(restoredItem.caches, function (cacheId) {
+                                    return _.findIndex($scope.caches, function 
(scopeCache) {
+                                            return scopeCache.value == cacheId;
+                                        }) >= 0;
+                                });
+                            }
 
                             $scope.selectedItem = cluster;
                             $scope.backupItem = restoredItem;
@@ -215,7 +221,7 @@ controlCenterModule.controller('clustersController', 
['$scope', '$http', '$commo
             $scope.selectedItem = item;
             $scope.backupItem = angular.copy(item);
 
-            sessionStorage.slectedClusterBackupItem = angular.toJson(item);
+            sessionStorage.clusterSelectedItem = angular.toJson(item);
         };
 
         // Add new cluster.

http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/e86538d7/modules/control-center-web/src/main/js/routes/clusters.js
----------------------------------------------------------------------
diff --git a/modules/control-center-web/src/main/js/routes/clusters.js 
b/modules/control-center-web/src/main/js/routes/clusters.js
index 0bf6061..a027552 100644
--- a/modules/control-center-web/src/main/js/routes/clusters.js
+++ b/modules/control-center-web/src/main/js/routes/clusters.js
@@ -24,6 +24,16 @@ router.get('/', function (req, res) {
     res.render('configuration/clusters');
 });
 
+function _processed(err, res) {
+    if (err) {
+        res.status(500).send(err.message);
+
+        return false;
+    }
+
+    return true;
+}
+
 /**
  * Get spaces and clusters accessed for user account.
  *
@@ -35,38 +45,38 @@ router.post('/list', function (req, res) {
 
     // 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;
-        });
+        if (_processed(err, res)) {
+            var space_ids = spaces.map(function (value) {
+                return value._id;
+            });
 
-        db.Cache.find({space: {$in: space_ids}}, '_id name swapEnabled', 
function (err, caches) {
-            if (err)
-                return res.status(500).send(err);
-
-            // Get all clusters for spaces.
-            db.Cluster.find({space: {$in: 
space_ids}}).sort('name').exec(function (err, clusters) {
-                if (err)
-                    return res.status(500).send(err.message);
-
-                // Remove deleted caches.
-                _.forEach(clusters, function (cluster) {
-                    cluster.caches = _.filter(cluster.caches, function 
(cacheId) {
-                        return _.findIndex(caches, function (cache) {
-                            return cache._id.equals(cacheId);
-                        }) >= 0;
+            // Get all caches for spaces.
+            db.Cache.find({space: {$in: space_ids}}, '_id name swapEnabled', 
function (err, caches) {
+                if (_processed(err, res)) {
+                    // Get all clusters for spaces.
+                    db.Cluster.find({space: {$in: 
space_ids}}).sort('name').exec(function (err, clusters) {
+                        if (_processed(err, res)) {
+                            // Remove deleted caches.
+                            _.forEach(clusters, function (cluster) {
+                                cluster.caches = _.filter(cluster.caches, 
function (cacheId) {
+                                    return _.findIndex(caches, function 
(cache) {
+                                            return cache._id.equals(cacheId);
+                                        }) >= 0;
+                                });
+                            });
+
+                            res.json({
+                                spaces: spaces,
+                                caches: caches.map(function (cache) {
+                                    return {value: cache._id, label: 
cache.name, swapEnabled: cache.swapEnabled};
+                                }),
+                                clusters: clusters
+                            });
+                        }
                     });
-                });
-
-                var cachesJson = caches.map(function (cache) {
-                    return {value: cache._id, label: cache.name, swapEnabled: 
cache.swapEnabled};
-                });
-
-                res.json({spaces: spaces, caches: cachesJson, clusters: 
clusters});
+                }
             });
-        });
+        }
     });
 });
 
@@ -75,28 +85,38 @@ router.post('/list', function (req, res) {
  */
 router.post('/save', function (req, res) {
     var params = req.body;
+    var clusterId = params._id;
+    var caches = params.caches;
 
     if (params._id)
         db.Cluster.update({_id: params._id}, params, {upsert: true}, function 
(err) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            res.send(params._id);
+            if (_processed(err, res))
+                db.Cache.update({_id: {$in: caches}}, {$addToSet: {clusters: 
clusterId}}, {upsert: true, multi: true}, function(err) {
+                    if (_processed(err, res)) {
+                        db.Cache.update({_id: {$nin: caches}}, {$pull: 
{clusters: clusterId}}, {upsert: true, multi: true}, function(err) {
+                            if (_processed(err, res))
+                                res.send(params._id);
+                        });
+                    }
+                });
         });
     else {
         db.Cluster.findOne({space: params.space, name: params.name}, function 
(err, cluster) {
-            if (err)
-                return res.status(500).send(err.message);
-
-            if (cluster)
-                return res.status(500).send('Cluster with name: "' + 
cluster.name + '" already exist.');
-
-            (new db.Cluster(params)).save(function (err, cluster) {
-                if (err)
-                    return res.status(500).send(err.message);
-
-                res.send(cluster._id);
-            });
+            if (_processed(err, res)) {
+                if (cluster)
+                    return res.status(500).send('Cluster with name: "' + 
cluster.name + '" already exist.');
+
+                (new db.Cluster(params)).save(function (err, cluster) {
+                    if (_processed(err, res)) {
+                        clusterId = cluster._id;
+
+                        db.Cache.update({_id: {$in: caches}}, {$addToSet: 
{clusters: clusterId}}, {upsert: true, multi: true}, function (err) {
+                            if (_processed(err, res))
+                                res.send(clusterId);
+                        });
+                    }
+                });
+            }
         });
     }
 });

Reply via email to