dbus service: create Agent wrapper only if agent has been created successfully
[contrib/cloudeebus.git] / cloudeebus / cloudeebus.js
index bcb7ca7..e0ee0a4 100644 (file)
@@ -175,15 +175,8 @@ cloudeebus.BusConnection.prototype.addService = function(serviceName) {
                var cloudeebusService = new cloudeebus.Service(self.wampSession, self, serviceName);
        
                function ServiceAddedSuccessCB(serviceName) {
-                       try {
-                               cloudeebusService.isCreated = true;
-                               resolver.fulfill(cloudeebusService, true);
-                       }
-                       catch (e) {
-                               var errorStr = cloudeebus.getError(e);
-                               cloudeebus.log("Method callback exception: " + errorStr);
-                               resolver.reject(errorStr, true);
-                       }               
+                       cloudeebusService.isCreated = true;
+                       resolver.fulfill(cloudeebusService, true);
                }
                
                function ServiceAddedErrorCB(error) {
@@ -212,8 +205,7 @@ cloudeebus.BusConnection.prototype.addService = function(serviceName) {
 //objPath : a DBus path to access it
 //jsHdl : a Javascript handler to process methods, 
 //xml : the xml which describe interface/methods/signals...
-cloudeebus.Agent = function(srvDbusName, objPath, jsHdl, xml) {
-       this.srvName = srvDbusName;
+cloudeebus.Agent = function(objPath, jsHdl, xml) {
        this.xml = xml;
        this.objectPath = objPath;
        this.jsHdl = jsHdl;
@@ -236,14 +228,7 @@ cloudeebus.Service.prototype.remove = function() {
        
        var promise = new cloudeebus.Promise(function (resolver) {
                function ServiceRemovedSuccessCB(serviceName) {
-                       try {
-                               resolver.fulfill(serviceName, true);
-                       }
-                       catch (e) {
-                               var errorStr = cloudeebus.getError(e);
-                               cloudeebus.log("Method callback exception: " + errorStr);
-                               resolver.reject(errorStr, true);
-                       }               
+                       resolver.fulfill(serviceName, true);
                }
                
                function ServiceRemovedErrorCB(error) {
@@ -251,12 +236,6 @@ cloudeebus.Service.prototype.remove = function() {
                        resolver.reject(errorStr, true);
                }
                
-               for (var idx in self.agents) {
-                       if (self.agents[idx]) {
-                               self.removeAgent(self.agents[idx]);
-                       }
-               }
-               
                var arglist = [
                    self.name
                    ];
@@ -372,15 +351,17 @@ cloudeebus.Service.prototype.addAgent = function(agent) {
        
        var promise = new cloudeebus.Promise(function (resolver) {
                function ServiceAddAgentSuccessCB(objPath) {
-                       try { // calling dbus hook object function for un-translated types
-                               self.agents.push(agent);
-                               resolver.fulfill(objPath, true);
+                       self.agents.push(agent);
+                       try {
+                               self._createWrapper(agent);
                        }
                        catch (e) {
                                var errorStr = cloudeebus.getError(e);
-                               cloudeebus.log("Method callback exception: " + errorStr);
+                               cloudeebus.log("Exception creating agent wrapper " + agent.objectPath + " : " + errorStr);
                                resolver.reject(errorStr, true);
+                               return;
                        }               
+                       resolver.fulfill(objPath, true);
                }
                
                function ServiceAddAgenterrorCB(error) {
@@ -389,16 +370,6 @@ cloudeebus.Service.prototype.addAgent = function(agent) {
                        self.promise.resolver.reject(errorStr, true);
                }
                
-               try {
-                       self._createWrapper(agent);
-               }
-               catch (e) {
-                       var errorStr = cloudeebus.getError(e);
-                       cloudeebus.log("Exception creating agent wrapper " + agent.objectPath + " : " + errorStr);
-                       resolver.reject(errorStr, true);
-                       return;
-               }
-               
                var arglist = [
                    agent.objectPath,
                    agent.xml
@@ -440,16 +411,9 @@ cloudeebus.Service.prototype.removeAgent = function(rmAgent) {
                                        break;
                                }
                                        
-                       try { // calling dbus hook object function for un-translated types
-                               self.agents.splice(idx, 1);
-                               self._deleteWrapper(agent);
-                               resolver.fulfill(agent, true);
-                       }
-                       catch (e) {
-                               var errorStr = cloudeebus.getError(e);
-                               cloudeebus.log("Method callback exception: " + errorStr);
-                               resolver.reject(errorStr, true);
-                       }               
+                       self.agents.splice(idx, 1);
+                       self._deleteWrapper(agent);
+                       resolver.fulfill(agent, true);
                }
 
                function ServiceRemoveAgentErrorCB(error) {
@@ -801,6 +765,15 @@ cloudeebus.ProxyObject.prototype._introspect = function(successCB, errorCB) {
        function introspectSuccessCB(str) {
                var parser = new DOMParser();
                var xmlDoc = parser.parseFromString(str, "text/xml");
+               var nodes = xmlDoc.getElementsByTagName("node");
+               self.childNodeNames = [];
+               var l = nodes.length;
+               //there will always be 1 node, the parent/head node
+               if(l > 1){
+                       for(var i = 1; i < l; i++){
+                               self.childNodeNames.push(nodes[i].getAttribute("name"));
+                       }
+               }
                var interfaces = xmlDoc.getElementsByTagName("interface");
                self.propInterfaces = [];
                var supportDBusProperties = false;