From ff395e113db7d521feabd1023b72a97ceac0de03 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Carlos=20Mart=C3=ADn?= <cmartin@opennebula.org>
Date: Thu, 18 Jun 2015 13:29:11 +0200
Subject: [PATCH] Feature #3748: Index resource names in opennebula/action

---
 src/sunstone/public/app/opennebula/action.js  | 21 +++++++++++-
 src/sunstone/public/app/opennebula/cluster.js |  3 ++
 .../public/app/opennebula/datastore.js        |  3 ++
 src/sunstone/public/app/opennebula/group.js   |  7 ++--
 src/sunstone/public/app/opennebula/helper.js  | 33 +++++++++++++++++++
 src/sunstone/public/app/opennebula/host.js    |  3 ++
 src/sunstone/public/app/opennebula/image.js   |  3 ++
 src/sunstone/public/app/opennebula/network.js |  3 ++
 .../public/app/opennebula/securitygroup.js    |  3 ++
 src/sunstone/public/app/opennebula/service.js |  3 ++
 .../public/app/opennebula/servicetemplate.js  |  3 ++
 .../public/app/opennebula/template.js         |  3 ++
 src/sunstone/public/app/opennebula/user.js    |  7 ++--
 src/sunstone/public/app/opennebula/vdc.js     |  3 ++
 src/sunstone/public/app/opennebula/vm.js      |  3 ++
 src/sunstone/public/app/opennebula/zone.js    |  7 ++--
 16 files changed, 101 insertions(+), 7 deletions(-)

diff --git a/src/sunstone/public/app/opennebula/action.js b/src/sunstone/public/app/opennebula/action.js
index 4b197b6fda..1eb6dcb919 100644
--- a/src/sunstone/public/app/opennebula/action.js
+++ b/src/sunstone/public/app/opennebula/action.js
@@ -6,6 +6,8 @@ define(function(require) {
   var listWaiting = {};
   var listCallbacks = {};
 
+  var nameIndex = {};
+
   var CACHE_EXPIRE = 60000; //ms
 
   var _clearCache = function(cache_name) {
@@ -161,6 +163,9 @@ define(function(require) {
             list = OpenNebulaHelper.pool(resource, response);
           }
 
+          nameIndex[cache_name] = OpenNebulaHelper.pool_name_processing(
+                                        resource+"_POOL", resource, response);
+
           listCache[cache_name] = {
             timestamp   : new Date().getTime(),
             data        : list
@@ -345,8 +350,22 @@ define(function(require) {
       });
     },
 
+    "getName": function(id, cache_name){
+      if(nameIndex[cache_name] != undefined){
+        var name = nameIndex[cache_name][id];
+        if (name != undefined){
+          return name;
+        }
+
+        // TODO: if name is not found, perform a .list or .show to at least
+        // get it ready for the next call?
+      }
+
+      return ""+id;
+    },
+
     "clear_cache": _clearCache
-  }
+  };
 
   return Action;
 });
diff --git a/src/sunstone/public/app/opennebula/cluster.js b/src/sunstone/public/app/opennebula/cluster.js
index 43598ced69..271861f325 100644
--- a/src/sunstone/public/app/opennebula/cluster.js
+++ b/src/sunstone/public/app/opennebula/cluster.js
@@ -54,6 +54,9 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/datastore.js b/src/sunstone/public/app/opennebula/datastore.js
index 04e54aae3e..44bee59875 100644
--- a/src/sunstone/public/app/opennebula/datastore.js
+++ b/src/sunstone/public/app/opennebula/datastore.js
@@ -50,6 +50,9 @@ define(function(require) {
     },
     "disable": function(params) {
       OpenNebulaAction.simple_action(params, RESOURCE, "disable");
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/group.js b/src/sunstone/public/app/opennebula/group.js
index 4eba319953..8ab61f02b7 100644
--- a/src/sunstone/public/app/opennebula/group.js
+++ b/src/sunstone/public/app/opennebula/group.js
@@ -61,8 +61,11 @@ define(function(require) {
     "del_admin" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "del_admin", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
-  }
+  };
 
   return Group;
-})
+});
\ No newline at end of file
diff --git a/src/sunstone/public/app/opennebula/helper.js b/src/sunstone/public/app/opennebula/helper.js
index 4977ffca4b..ff710358ad 100644
--- a/src/sunstone/public/app/opennebula/helper.js
+++ b/src/sunstone/public/app/opennebula/helper.js
@@ -91,6 +91,39 @@ define(function(require) {
 
         p_pool[res[resource_name]['ID']] = res;
 
+        return (p_pool);
+      }
+    },
+
+    "pool_name_processing": function(pool_name, resource_name, response) {
+      var pool;
+
+      if (typeof(pool_name) == "undefined") {
+        return Error('Incorrect Pool');
+      }
+
+      var p_pool = {};
+
+      if (response[pool_name]) {
+        pool = response[pool_name][resource_name];
+      } else {
+        pool = null;
+      }
+
+      if (pool == null) {
+        return p_pool;
+      } else if (pool.length) {
+        for (i = 0; i < pool.length; i++) {
+          var res = pool[i];
+
+          p_pool[res['ID']] = res['NAME'];
+        }
+        return (p_pool);
+      } else {
+        var res = pool;
+
+        p_pool[res['ID']] = res['NAME'];
+
         return (p_pool);
       }
     }
diff --git a/src/sunstone/public/app/opennebula/host.js b/src/sunstone/public/app/opennebula/host.js
index b4d2c23a20..33bcd11846 100644
--- a/src/sunstone/public/app/opennebula/host.js
+++ b/src/sunstone/public/app/opennebula/host.js
@@ -70,6 +70,9 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/image.js b/src/sunstone/public/app/opennebula/image.js
index 1769bce00b..fe2c572bc0 100644
--- a/src/sunstone/public/app/opennebula/image.js
+++ b/src/sunstone/public/app/opennebula/image.js
@@ -83,6 +83,9 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/network.js b/src/sunstone/public/app/opennebula/network.js
index 5f16536c75..327b579afd 100644
--- a/src/sunstone/public/app/opennebula/network.js
+++ b/src/sunstone/public/app/opennebula/network.js
@@ -70,6 +70,9 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/securitygroup.js b/src/sunstone/public/app/opennebula/securitygroup.js
index 8dc2912e81..9ec2c4e906 100644
--- a/src/sunstone/public/app/opennebula/securitygroup.js
+++ b/src/sunstone/public/app/opennebula/securitygroup.js
@@ -43,6 +43,9 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/service.js b/src/sunstone/public/app/opennebula/service.js
index 16595a6d93..30b7bd33df 100644
--- a/src/sunstone/public/app/opennebula/service.js
+++ b/src/sunstone/public/app/opennebula/service.js
@@ -56,6 +56,9 @@ define(function(require) {
           Locale.tr("COOLDOWN")
       ][state_int]
       return state ? state : state_int;
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, CACHE_NAME);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/servicetemplate.js b/src/sunstone/public/app/opennebula/servicetemplate.js
index c70d8bc43f..ba657cdfa3 100644
--- a/src/sunstone/public/app/opennebula/servicetemplate.js
+++ b/src/sunstone/public/app/opennebula/servicetemplate.js
@@ -46,6 +46,9 @@ define(function(require) {
       params.cache_name = CACHE_NAME;
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "chmod", action_obj, PATH);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, CACHE_NAME);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/template.js b/src/sunstone/public/app/opennebula/template.js
index 5e75ec6540..b202e0d114 100644
--- a/src/sunstone/public/app/opennebula/template.js
+++ b/src/sunstone/public/app/opennebula/template.js
@@ -52,6 +52,9 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/user.js b/src/sunstone/public/app/opennebula/user.js
index 246ab7a271..839f08145e 100644
--- a/src/sunstone/public/app/opennebula/user.js
+++ b/src/sunstone/public/app/opennebula/user.js
@@ -77,8 +77,11 @@ define(function(require) {
     "delgroup" : function(params) {
       var action_obj = {"group_id": params.data.extra_param};
       OpenNebulaAction.simple_action(params, RESOURCE, "delgroup", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
-  }
+  };
 
   return User;
-})
+});
\ No newline at end of file
diff --git a/src/sunstone/public/app/opennebula/vdc.js b/src/sunstone/public/app/opennebula/vdc.js
index 7f32b67b87..3fc84b16dc 100644
--- a/src/sunstone/public/app/opennebula/vdc.js
+++ b/src/sunstone/public/app/opennebula/vdc.js
@@ -72,6 +72,9 @@ define(function(require) {
     "del_vnet" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "del_vnet", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
   }
 
diff --git a/src/sunstone/public/app/opennebula/vm.js b/src/sunstone/public/app/opennebula/vm.js
index 78196d7b80..87db25da03 100644
--- a/src/sunstone/public/app/opennebula/vm.js
+++ b/src/sunstone/public/app/opennebula/vm.js
@@ -475,6 +475,9 @@ define(function(require) {
     "isNICAttachSupported": isNICAttachSupported,
     "isVNCSupported": isVNCSupported,
     "isSPICESupported": isSPICESupported,
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
+    }
   }
 
   function retrieveLastHistoryRecord(element) {
diff --git a/src/sunstone/public/app/opennebula/zone.js b/src/sunstone/public/app/opennebula/zone.js
index 43fe4431ba..95e683831c 100644
--- a/src/sunstone/public/app/opennebula/zone.js
+++ b/src/sunstone/public/app/opennebula/zone.js
@@ -27,8 +27,11 @@ define(function(require) {
     "rename" : function(params) {
       var action_obj = params.data.extra_param;
       OpenNebulaAction.simple_action(params, RESOURCE, "rename", action_obj);
+    },
+    "getName": function(id){
+      return OpenNebulaAction.getName(id, RESOURCE);
     }
-  }
+  };
 
   return Zone;
-})
+});
\ No newline at end of file