Martin Sivák has uploaded a new change for review.

Change subject: engine: Enhance the xml-rpc Long support to deal with Maps and 
Lists
......................................................................

engine: Enhance the xml-rpc Long support to deal with Maps and Lists

It is common to have a Long value in a sub-map of an xml-rpc
argument. The current implementation does not deal with this case.

The ideal solution to this would be to instruct the marshaller
to do this. Unfortunately that is not possible and we have to
work around that limitation.

Change-Id: I5a5933a68f937c4734b547c173188e88bd7b9464
Signed-off-by: Martin Sivák <msi...@redhat.com>
---
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java
1 file changed, 32 insertions(+), 5 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/52/35352/1

diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java
index 62907f6..41fc6fc 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/xmlrpc/XmlRpcUtils.java
@@ -9,8 +9,11 @@
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.Callable;
 import java.util.concurrent.FutureTask;
@@ -297,14 +300,38 @@
             List<Object> result = new ArrayList<>();
             for (int i = 0; i < request.getParameterCount(); i++) {
                 Object object = request.getParameter(i);
-                if (Long.class.isInstance(object)) {
-                    result.add(object.toString());
-                    continue;
-                }
-                result.add(object);
+                result.add(longToString(object));
             }
             return result.toArray();
         }
+
+        /**
+         * Workaround the lack of Long support in VDSM by converting all
+         * Long typed variables to String.
+         *
+         * @param object object that potentially contains Long items
+         * @return new object where all the Longs are converted to Strings
+         */
+        @SuppressWarnings("unchecked")
+        private Object longToString(Object object) {
+            if (Long.class.isInstance(object)) {
+                return object.toString();
+            } else if (Map.class.isInstance(object)) {
+                Map<Object, Object> map = new HashMap<>();
+                for (Map.Entry<Object, Object> entry: ((Map<Object, 
Object>)object).entrySet()) {
+                    map.put(entry.getKey(), longToString(entry.getValue()));
+                }
+                return map;
+            } else if (Collection.class.isInstance(object)) {
+                List<Object> list = new ArrayList<>();
+                for (Object entry: (List<Object>)object) {
+                    list.add(longToString(entry));
+                }
+                return list;
+            } else {
+                return object;
+            }
+        }
     };
 
     /**


-- 
To view, visit http://gerrit.ovirt.org/35352
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5a5933a68f937c4734b547c173188e88bd7b9464
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Martin Sivák <msi...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to