Ravi Nori has uploaded a new change for review.

Change subject: engine: Add infrastructure code for removal of parameter classes
......................................................................

engine: Add infrastructure code for removal of parameter classes

This patch adds the infrastructure code that is
needed by subsequent patches to remove
dependency on parameter classes.

A new map Map<VdcQueryParameter, VdcQueryParameterValue>
has been added to VdcQueryParametersBase. This map contains
all the parameters required for the execution of the
query. Eliminating the need for a specific QueryParameter
class.

Change-Id: I6a0970e492c0eff561888a46b02e47645ff68fc3
Signed-off-by: Ravi Nori <rn...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionParametersBase.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/InvalidParameterValueException.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryParametersBase.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameter.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameterValue.java
A 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParametersMapBase.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResourceTest.java
M 
backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/test/util/TestHelper.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
A 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonVdcParametersMapBaseMixIn.java
M 
frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
13 files changed, 367 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/14/20414/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionParametersBase.java
index 12ae3aa..7ef40b5 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionParametersBase.java
@@ -10,6 +10,9 @@
 import 
org.ovirt.engine.core.common.businessentities.BusinessEntitiesDefinitions;
 import org.ovirt.engine.core.common.businessentities.DbUser;
 import org.ovirt.engine.core.common.utils.ValidationUtils;
+import org.ovirt.engine.core.common.utils.VdcParameter;
+import org.ovirt.engine.core.common.utils.VdcParameterValue;
+import org.ovirt.engine.core.common.utils.VdcParametersMapBase;
 import org.ovirt.engine.core.common.validation.group.PreRun;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.compat.TransactionScopeOption;
@@ -61,6 +64,7 @@
 
     private Guid jobId;
     private Guid stepId;
+    private VdcParametersMapBase paramsMap;
 
     public VdcActionParametersBase() {
         shouldbelogged = true;
@@ -72,6 +76,7 @@
         parentCommand = VdcActionType.Unknown;
         commandType = VdcActionType.Unknown;
         imagesParameters = new ArrayList<VdcActionParametersBase>();
+        paramsMap = new VdcParametersMapBase();
     }
 
     public Guid getCommandId() {
@@ -248,6 +253,23 @@
         executionIndex--;
     }
 
+    public <T> void addParameter(VdcParameter param, Object obj) {
+        VdcParameterValue<T> value = 
param.getVdcParameterHandler().createVdcParameterValue(obj);
+        addParameter(param, value);
+    }
+
+    public <T> void addParameter(VdcParameter param, VdcParameterValue<T> 
value) {
+        paramsMap.addParameter(param, value);
+    }
+
+    public <T> VdcParameterValue<T> getParameterValue(VdcParameter param) {
+        return paramsMap.getParameterValue(param);
+    }
+
+    public VdcParametersMapBase getParamsHelper() {
+        return paramsMap;
+    }
+
     @Override
     public int hashCode() {
         final int prime = 31;
@@ -264,6 +286,7 @@
         result = prime * result + executionIndex;
         result = prime * result + ((jobId == null) ? 0 : jobId.hashCode());
         result = prime * result + ((stepId == null) ? 0 : stepId.hashCode());
+        result = prime * result + ((paramsMap == null) ? 0 : 
paramsMap.hashCode());
         return result;
     }
 
@@ -321,6 +344,11 @@
                 return false;
         } else if (!stepId.equals(other.stepId))
             return false;
+        if (paramsMap == null) {
+            if (other.getParamsHelper() != null)
+                return false;
+        } else if (!paramsMap.equals(other.getParamsHelper()))
+            return false;
 
         return true;
     }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/InvalidParameterValueException.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/InvalidParameterValueException.java
new file mode 100644
index 0000000..6fc0b17
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/InvalidParameterValueException.java
@@ -0,0 +1,10 @@
+package org.ovirt.engine.core.common.queries;
+
+public class InvalidParameterValueException extends IllegalArgumentException {
+
+    static final String MSG_PREFIX = "Invalid value for 
VdcQueryParametersBase.addParameter. Expected value of type ";
+    public InvalidParameterValueException(Class expected, Class<? extends 
Object> actual) {
+        super(MSG_PREFIX+expected.getName()+" but actual class was 
"+actual.getName());
+    }
+
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryParametersBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryParametersBase.java
index c16673d..98fe7a7 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryParametersBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryParametersBase.java
@@ -1,6 +1,9 @@
 package org.ovirt.engine.core.common.queries;
 
+import org.ovirt.engine.core.common.utils.VdcParameter;
+import org.ovirt.engine.core.common.utils.VdcParameterValue;
 import java.io.Serializable;
+import org.ovirt.engine.core.common.utils.VdcParametersMapBase;
 
 public class VdcQueryParametersBase implements Serializable {
     private static final long serialVersionUID = -6766170283465888549L;
@@ -25,8 +28,11 @@
      */
     private boolean isFiltered;
 
+    private VdcParametersMapBase paramsMap;
+
     public VdcQueryParametersBase() {
         refresh = true;
+        paramsMap = new VdcParametersMapBase();
     }
 
     public String getSessionId() {
@@ -61,6 +67,19 @@
         this.isFiltered = isFiltered;
     }
 
+    public <T> void addParameter(VdcParameter param, Object obj) {
+        VdcParameterValue<T> value = 
param.getVdcParameterHandler().createVdcParameterValue(obj);
+        addParameter(param, value);
+    }
+
+    public <T> void addParameter(VdcParameter param, VdcParameterValue<T> 
value) {
+        paramsMap.addParameter(param, value);
+    }
+
+    public <T> VdcParameterValue<T> getParameterValue(VdcParameter param) {
+        return paramsMap.getParameterValue(param);
+    }
+
     @Override
     public String toString() {
         StringBuilder builder = new StringBuilder(25);
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameter.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameter.java
new file mode 100644
index 0000000..758b5a2
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameter.java
@@ -0,0 +1,51 @@
+package org.ovirt.engine.core.common.utils;
+
+import java.io.Serializable;
+import org.ovirt.engine.core.compat.Guid;
+
+
+public enum VdcParameter {
+    ClusterId(Guid.class, new VdcParameterHandler<Guid>()),
+    DataCenterId(Guid.class, new VdcParameterHandler<Guid>()),
+    RoleId(Guid.class, new VdcParameterHandler<Guid>()),
+    StorageDomainId(Guid.class, new VdcParameterHandler<Guid>());
+
+    public static enum Status { Active, Obsolete}
+
+    private Class javaType;
+    private Status status;
+    private VdcParameterHandler parameterHandler;
+
+    <T> VdcParameter(Class javaType, VdcParameterHandler<T> parameterHandler) {
+        this(javaType, Status.Active, parameterHandler);
+    }
+
+    <T> VdcParameter(Class javaType, Status status, VdcParameterHandler<T> 
parameterHandler) {
+        this.javaType = javaType;
+        this.status = status;
+        this.parameterHandler = parameterHandler;
+    }
+
+    public Class getJavaType() {
+        return javaType;
+    }
+
+    public Status getStatus() {
+        return status;
+    }
+
+    public static class VdcParameterHandler<T> implements Serializable {
+        public VdcParameterValue createVdcParameterValue(T obj) {
+            return new VdcParameterValue(obj);
+        }
+
+        public T getVdcParameterValue(VdcParameterValue<T> paramValue) {
+            return paramValue.getValue();
+        }
+    }
+
+    public VdcParameterHandler getVdcParameterHandler() {
+        return parameterHandler;
+    }
+
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameterValue.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameterValue.java
new file mode 100644
index 0000000..27504bb
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParameterValue.java
@@ -0,0 +1,32 @@
+package org.ovirt.engine.core.common.utils;
+
+import java.io.Serializable;
+
+public class VdcParameterValue<T> implements Serializable {
+
+    private T value;
+
+    public VdcParameterValue(T value) {
+        this.value = value;
+    }
+
+    public T getValue() {
+        return value;
+    }
+
+    @Override
+    public boolean equals(Object other) {
+        if (other == null || !(other instanceof VdcParameterValue)) {
+            return false;
+        }
+        VdcParameterValue otherInstance = (VdcParameterValue) other;
+        return value.equals(otherInstance.getValue());
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        hash = 31 * hash + (this.value != null ? this.value.hashCode() : 0);
+        return hash;
+    }
+}
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParametersMapBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParametersMapBase.java
new file mode 100644
index 0000000..5780e20
--- /dev/null
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/utils/VdcParametersMapBase.java
@@ -0,0 +1,64 @@
+package org.ovirt.engine.core.common.utils;
+
+import java.io.Serializable;
+import java.util.EnumMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import org.ovirt.engine.core.common.queries.InvalidParameterValueException;
+
+public class VdcParametersMapBase implements Serializable {
+
+    private Map<VdcParameter, VdcParameterValue> paramsMap;
+
+    public VdcParametersMapBase() {
+        paramsMap = new EnumMap<VdcParameter, 
VdcParameterValue>(VdcParameter.class);
+    }
+
+    public <T> void addParameter(VdcParameter param, VdcParameterValue<T> 
value) {
+        if (!value.getValue().getClass().equals(param.getJavaType()))
+            throw new InvalidParameterValueException(param.getJavaType(), 
value.getValue().getClass());
+        paramsMap.put(param, value);
+    }
+
+    public <T> VdcParameterValue<T> getParameterValue(VdcParameter param) {
+        return paramsMap.get(param);
+    }
+
+    public int getNumParameterValues() {
+        return paramsMap.size();
+    }
+
+    @Override
+    public boolean equals(Object obj) {
+        if (this == obj)
+            return true;
+        if (obj == null)
+            return false;
+        if (getClass() != obj.getClass())
+            return false;
+        VdcParametersMapBase other = (VdcParametersMapBase) obj;
+        if (getNumParameterValues() != other.getNumParameterValues()) {
+            return false;
+        }
+        for (Entry<VdcParameter, VdcParameterValue> entry : 
paramsMap.entrySet()) {
+            VdcParameterValue otherValue = 
other.getParameterValue(entry.getKey());
+            if (otherValue == null) {
+                return false;
+            }
+            if (!entry.getValue().equals(otherValue)) {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    @Override
+    public int hashCode() {
+        int hash = 7;
+        final int prime = 31;
+        for (Entry<VdcParameter, VdcParameterValue> entry : 
paramsMap.entrySet()) {
+            hash = prime * hash + entry.getValue().hashCode();
+        }
+        return hash;
+    }
+}
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java
index cbedaf4..15a7aa4 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendSubResource.java
@@ -12,11 +12,14 @@
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.api.restapi.logging.Messages;
+import org.ovirt.engine.core.utils.log.Log;
+import org.ovirt.engine.core.utils.log.LogFactory;
 
 public abstract class AbstractBackendSubResource<R extends BaseResource, Q /* 
extends IVdcQueryable */> extends
         AbstractBackendResource<R, Q> {
 
     protected static final String[] STRICTLY_IMMUTABLE = { "id" };
+    protected static final Log LOG = 
LogFactory.getLog(AbstractBackendSubResource.class);
 
     protected String id;
     protected Guid guid;
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java
index f7a8714..6c677c3 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendBaseTest.java
@@ -49,6 +49,8 @@
 import 
org.ovirt.engine.core.common.queries.GetTasksStatusesByTasksIDsParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.SearchParameters;
+import org.ovirt.engine.core.common.utils.VdcParameter;
+import org.ovirt.engine.core.common.utils.VdcParameterValue;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -180,6 +182,27 @@
         expect(queryResult.getReturnValue()).andReturn(entity).anyTimes();
     }
 
+    protected <E> void setUpGetEntityExpectationsWithParamNames(VdcQueryType 
query,
+            Class<? extends VdcQueryParametersBase> clz, String[] names, 
Object[] values, VdcParameter[] queryParamNames, E entity)
+            throws Exception {
+        VdcQueryParametersBase paramsBase = 
control.createMock(VdcQueryParametersBase.class);
+        int i = 0;
+        for (VdcParameter param : queryParamNames) {
+            
expect(paramsBase.getParameterValue(eq(param))).andReturn(getVdcQueryParameterValue(param,
 values[i])).anyTimes();
+            i++;
+        }
+
+        VdcQueryReturnValue queryResult = 
control.createMock(VdcQueryReturnValue.class);
+        expect(backend.RunQuery(eq(query), eqQueryParams(clz, 
addSession(names), addSession(values), queryParamNames))).andReturn(
+                queryResult).anyTimes();
+        expect(queryResult.getSucceeded()).andReturn(true).anyTimes();
+        expect(queryResult.getReturnValue()).andReturn(entity).anyTimes();
+    }
+
+    protected VdcParameterValue getVdcQueryParameterValue(VdcParameter param, 
Object value) {
+        return param.getVdcParameterHandler().createVdcParameterValue(value);
+    }
+
     protected <E> void setUpGetEntityExpectations(String query,
             SearchType type,
             E entity) throws Exception {
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResourceTest.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResourceTest.java
index 0af5283..9929a3d 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResourceTest.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/AbstractBackendCollectionResourceTest.java
@@ -233,6 +233,44 @@
                                              boolean success,
                                              Object taskReturn,
                                              ArrayList<Guid> asyncTasks,
+                                             ArrayList<AsyncTaskStatus> 
asyncStatuses) {
+        VdcReturnValueBase taskResult = 
control.createMock(VdcReturnValueBase.class);
+        expect(taskResult.getCanDoAction()).andReturn(canDo).anyTimes();
+        if (canDo) {
+            expect(taskResult.getSucceeded()).andReturn(success).anyTimes();
+            if (success) {
+                
expect(taskResult.getActionReturnValue()).andReturn(taskReturn).anyTimes();
+            } else {
+                
expect(taskResult.getExecuteFailedMessages()).andReturn(asList(FAILURE)).anyTimes();
+                setUpL10nExpectations(asList(FAILURE));
+            }
+        } else {
+            
expect(taskResult.getCanDoActionMessages()).andReturn(asList(CANT_DO)).anyTimes();
+            setUpL10nExpectations(asList(CANT_DO));
+        }
+        expect(taskResult.getHasAsyncTasks()).andReturn(asyncTasks != 
null).anyTimes();
+        if (asyncTasks != null) {
+            
expect(taskResult.getVdsmTaskIdList()).andReturn(asyncTasks).anyTimes();
+            VdcQueryReturnValue monitorResult = 
control.createMock(VdcQueryReturnValue.class);
+            expect(monitorResult.getSucceeded()).andReturn(success).anyTimes();
+            
expect(monitorResult.getReturnValue()).andReturn(asyncStatuses).anyTimes();
+            
expect(backend.RunQuery(eq(VdcQueryType.GetTasksStatusesByTasksIDs),
+                                    
eqQueryParams(GetTasksStatusesByTasksIDsParameters.class,
+                                                  addSession(new String[]{}),
+                                                  addSession(new 
Object[]{})))).andReturn(monitorResult);
+        }
+        expect(backend.RunAction(eq(task), eqActionParams(taskClass, 
addSession(taskNames), addSession(taskValues))))
+                .andReturn(taskResult);
+        control.replay();
+    }
+    protected void setUpCreationExpectations(VdcActionType task,
+                                             Class<? extends 
VdcActionParametersBase> taskClass,
+                                             String[] taskNames,
+                                             Object[] taskValues,
+                                             boolean canDo,
+                                             boolean success,
+                                             Object taskReturn,
+                                             ArrayList<Guid> asyncTasks,
                                              ArrayList<AsyncTaskStatus> 
asyncStatuses,
                                              VdcQueryType query,
                                              Class<? extends 
VdcQueryParametersBase> queryClass,
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/test/util/TestHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/test/util/TestHelper.java
index 6402895..8c880ac 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/test/util/TestHelper.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/test/util/TestHelper.java
@@ -11,6 +11,8 @@
 
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.queries.SearchParameters;
+import org.ovirt.engine.core.common.utils.VdcParameter;
+import org.ovirt.engine.core.common.utils.VdcParameterValue;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 
 @Ignore
@@ -26,6 +28,10 @@
         return clz.getMethod("get" + name);
     }
 
+    protected static Method getMethodWithParam(Class<?> clz, String name, 
Class... param) throws NoSuchMethodException {
+        return clz.getMethod("get" + name, param);
+    }
+
     protected static Method getMethod(Class<?> clz, String name, Object value) 
throws NoSuchMethodException {
         Method method = null;
         try {
@@ -33,6 +39,20 @@
         } catch (NoSuchMethodException nsme) {
             if (Boolean.class.equals(value.getClass())) {
                 method = clz.getMethod("is" + name);
+            } else {
+                throw nsme;
+            }
+        }
+        return method;
+    }
+
+    protected static Method getMethodWithParam(Class<?> clz, String name, 
Object value, Class... param) throws NoSuchMethodException {
+        Method method = null;
+        try {
+            method = getMethodWithParam(clz, name, param);
+        } catch (NoSuchMethodException nsme) {
+            if (Boolean.class.equals(value.getClass())) {
+                method = clz.getMethod("is" + name, param);
             } else {
                 throw nsme;
             }
@@ -70,6 +90,16 @@
                 name = subField(name);
             }
             return matches(value, getMethod(clz, name, 
value).invoke(instance));
+        } catch (Exception e) {
+            System.out.println(e);
+            return false;
+        }
+    }
+
+    protected static boolean matches(Class<?> clz, Object instance, String 
name, Object value, VdcParameter paramName) {
+        try {
+            VdcParameterValue paramValue = (VdcParameterValue) 
getMethodWithParam(clz, name, value, VdcParameter.class).invoke(instance, 
paramName);
+            return matches(value, paramValue.getValue());
         } catch (Exception e) {
             System.out.println(e);
             return false;
@@ -172,6 +202,12 @@
         return null;
     }
 
+    public static VdcQueryParametersBase eqQueryParams(Class<? extends 
VdcQueryParametersBase> clz,
+            String[] names, Object[] values, VdcParameter[] queryParamNames) {
+        EasyMock.reportMatcher(new QueryParametersEqualsNew(clz, names, 
values, queryParamNames));
+        return null;
+    }
+
     /**
      * This generic matcher for QueryParameters is required because this types
      * don't override Object.equals() with a deep comparison
@@ -211,4 +247,52 @@
             buffer.append(")");
         }
     }
+
+    /**
+     * This generic matcher for QueryParameters is required because this types
+     * don't override Object.equals() with a deep comparison
+     */
+    @Ignore
+    protected static class QueryParametersEqualsNew implements 
IArgumentMatcher {
+        Class<? extends VdcQueryParametersBase> clz;
+        String[] names;
+        Object[] values;
+        VdcParameter[] queryParamNames;
+
+        public QueryParametersEqualsNew(Class<? extends 
VdcQueryParametersBase> clz, String[] names,
+                Object[] values, VdcParameter[] queryParamNames) {
+            this.clz = clz;
+            this.names = names;
+            this.values = values;
+            this.queryParamNames = queryParamNames;
+        }
+
+        @Override
+        public boolean matches(Object actual) {
+            if (clz.isInstance(actual)) {
+                for (int i = 0; i < names.length; i++) {
+                    if (i < queryParamNames.length) {
+                        if (!TestHelper.matches(clz, actual, names[i], 
values[i], queryParamNames[i])) {
+                            return false;
+                        }
+                    } else {
+                       if (!TestHelper.matches(clz, actual, names[i], 
values[i])) {
+                           return false;
+                       }
+                    }
+                }
+                return true;
+            }
+            return false;
+        }
+
+        @Override
+        public void appendTo(StringBuffer buffer) {
+            buffer.append("eqQueryParams(");
+            for (String name : names) {
+                buffer.append(", field: " + name);
+            }
+            buffer.append(")");
+        }
+    }
 }
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
index 2f4ed92..271601d 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
@@ -19,6 +19,7 @@
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmPayload;
 import org.ovirt.engine.core.common.businessentities.VmStatic;
+import org.ovirt.engine.core.common.utils.VdcParametersMapBase;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.utils.SerializationExeption;
 import org.ovirt.engine.core.utils.Serializer;
@@ -33,6 +34,8 @@
     static {
         formattedMapper = new ObjectMapper();
         
formattedMapper.getSerializationConfig().addMixInAnnotations(Guid.class, 
JsonGuidMixIn.class);
+        
formattedMapper.getSerializationConfig().addMixInAnnotations(VdcParametersMapBase.class,
+                JsonVdcParametersMapBaseMixIn.class);
         
formattedMapper.getSerializationConfig().addMixInAnnotations(VdcActionParametersBase.class,
                 JsonVdcActionParametersBaseMixIn.class);
         
formattedMapper.getSerializationConfig().addMixInAnnotations(IVdcQueryable.class,
 JsonIVdcQueryableMixIn.class);
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonVdcParametersMapBaseMixIn.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonVdcParametersMapBaseMixIn.java
new file mode 100644
index 0000000..0e2dc84
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonVdcParametersMapBaseMixIn.java
@@ -0,0 +1,11 @@
+package org.ovirt.engine.core.utils.serialization.json;
+
+import org.codehaus.jackson.annotate.JsonTypeInfo;
+import org.codehaus.jackson.annotate.JsonTypeInfo.As;
+import org.codehaus.jackson.annotate.JsonTypeInfo.Id;
+import org.ovirt.engine.core.common.action.VdcActionParametersBase;
+
+@SuppressWarnings("serial")
+@JsonTypeInfo(use = Id.CLASS, include = As.PROPERTY)
+public abstract class JsonVdcParametersMapBaseMixIn extends 
VdcActionParametersBase {
+}
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 99619f8..23ff301 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -203,6 +203,7 @@
                <!-- Sadly because VdcQueryParametersBase / 
VdcActionParametersBase :/ -->
                <include name="common/queries/*.java" />
                <include name="common/action/*.java" />
+               <include name="common/utils/VdcParameter*.java" />
 
                <!-- Most custom field serializers match the two previous 
rules, but some 
                        dont, we need to include them explicitly: -->


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6a0970e492c0eff561888a46b02e47645ff68fc3
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <rn...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to