Hello Yair Zaslavsky,
I'd like you to do a code review. Please visit
http://gerrit.ovirt.org/21307
to review the following change.
Change subject: introspector - should be fixed up on the third patch in the
series (PropertyRename patch)
......................................................................
introspector - should be fixed up on the third patch in the series
(PropertyRename patch)
Change-Id: I0f3e063d28adb460f1165e6ff062954fbb5da20d
Signed-off-by: Yair Zaslavsky <[email protected]>
---
M
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospector.java
M
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/DeserializationResolver.java
M
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectDeserializer.java
M
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectSerializer.java
M
backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospectorTest.java
5 files changed, 61 insertions(+), 15 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/07/21307/1
diff --git
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospector.java
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospector.java
index 2f155c0..d8d2070 100644
---
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospector.java
+++
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospector.java
@@ -1,5 +1,7 @@
package org.ovirt.engine.core.utils.serialization.json;
+import java.lang.annotation.Annotation;
+
import org.codehaus.jackson.map.introspect.AnnotatedMethod;
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
@@ -9,6 +11,16 @@
public String findSettablePropertyName(AnnotatedMethod am)
{
System.out.println("annotated method is " + am.getName());
+ // Todo - for all setters check that they have the JsonProperyRename
property
+ if (am.getName().equals("setAge") ||
am.getAnnotation(JsonPropertyRename.class) != null) {
+ // Todo - use the DeserializationResolver to resolve the field name
+ return "blabla";
+ }
return super.findSettablePropertyName(am);
}
+
+ @Override
+ public boolean isHandled(Annotation ann) {
+ return ann.annotationType().equals(JsonPropertyRename.class) ||
super.isHandled(ann);
+ }
}
diff --git
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/DeserializationResolver.java
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/DeserializationResolver.java
index 806a8d6..2cc925d 100644
---
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/DeserializationResolver.java
+++
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/DeserializationResolver.java
@@ -7,18 +7,18 @@
public class DeserializationResolver {
private static DeserializationResolver instance = new
DeserializationResolver();
-
+
private Map<Pair<String, String>, Pair<String, String>> classResolvingMap
= new HashMap<>();
private Map<ClassFieldNameInfo, ClassFieldNameInfo> fieldResolvingMap =
new HashMap<>();
public static DeserializationResolver getInstance() {
return instance;
}
-
+
public void add(String oldClassName, String oldClassVer, String className,
String classVer) {
classResolvingMap.put(new Pair<String, String>(oldClassVer,
oldClassName),
new Pair<String, String>(classVer, className));
-
+
}
public void addFieldName(
@@ -26,7 +26,7 @@
String className, String classVer, String fieldName) {
fieldResolvingMap.put(new ClassFieldNameInfo(oldClassVer,
oldClassName, oldFieldName),
new ClassFieldNameInfo(classVer, className, fieldName));
-
+
}
public String reolveClassName(String className, String originalVer, String
resolvingVer) {
@@ -69,7 +69,7 @@
// while (pair.getFirst().compareTo(resolvingVer) >= 0) {
while (true) {
ClassFieldNameInfo auxFieldInfo =
fieldResolvingMap.get(fieldInfo);
- if (auxFieldInfo == null ||
+ if (auxFieldInfo == null ||
(auxFieldInfo.getClassNameVersionPair().getSecond().equals(fieldInfo.getClassNameVersionPair().getSecond())
&&
auxFieldInfo.getFieldName().equals(fieldInfo.getFieldName())
@@ -80,7 +80,7 @@
}
return null;
}
-
+
public void add(String className, String ver) {
add(className, ver, className, ver);
}
diff --git
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectDeserializer.java
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectDeserializer.java
index c7f180a..e03eba2 100644
---
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectDeserializer.java
+++
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/serialization/json/JsonObjectDeserializer.java
@@ -9,12 +9,8 @@
import org.apache.commons.lang.SerializationException;
import org.apache.commons.lang.StringUtils;
import org.codehaus.jackson.JsonNode;
-import org.codehaus.jackson.JsonToken;
import org.codehaus.jackson.map.DeserializationConfig.Feature;
-import org.codehaus.jackson.map.MapperConfig;
import org.codehaus.jackson.map.ObjectMapper;
-import org.codehaus.jackson.map.PropertyNamingStrategy;
-import org.codehaus.jackson.map.introspect.AnnotatedField;
import org.codehaus.jackson.map.introspect.AnnotatedMethod;
import org.codehaus.jackson.map.introspect.JacksonAnnotationIntrospector;
import org.codehaus.jackson.node.ObjectNode;
@@ -44,7 +40,7 @@
static {
formattedMapper = new ObjectMapper();
formattedMapper.setDeserializationConfig(formattedMapper.getDeserializationConfig()
- .withAnnotationIntrospector(new
BackwardCompatbilityAnnotationIntrospector2()));
+ .withAnnotationIntrospector(new
BackwardCompatbilityAnnotationIntrospector()));
addMixin(Guid.class, JsonGuidMixIn.class);
addMixin(VdcActionParametersBase.class,
JsonVdcActionParametersBaseMixIn.class);
addMixin(IVdcQueryable.class, JsonIVdcQueryableMixIn.class);
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 08cafed..6007144 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
@@ -88,7 +88,7 @@
public String serializeUnformattedJson(Serializable payload) throws
SerializationExeption {
return writeJsonAsString(payload, unformattedMapper);
}
-
+
static class Person {
private String name;
private String lastname;
@@ -119,7 +119,7 @@
JsonObjectSerializer jos = new JsonObjectSerializer();
JsonObjectDeserializer jod = new JsonObjectDeserializer("3.2");
DeserializationResolver.getInstance().addFieldName(
- "org.ovirt.engine.core.common.businessentities.VmStatic",
"3.1", "osOldId",
+ "org.ovirt.engine.core.common.businessentities.VmStatic",
"3.1", "osOldId",
"org.ovirt.engine.core.common.businessentities.VmStatic",
"3.2", "osId");
String vmSs = "{\n" +
@@ -137,7 +137,7 @@
" \"comment\" : null,\n" +
" \"memSizeMb\" : 0\n}";
VmStatic vmS2 = jod.deserialize(vmSs, VmStatic.class);
-
+
System.out.println("Os Id = "+vmS2.getOsId());
}
}
diff --git
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospectorTest.java
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospectorTest.java
index 54955c9..30ac0fe 100644
---
a/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospectorTest.java
+++
b/backend/manager/modules/utils/src/test/java/org/ovirt/engine/core/utils/serialization/json/BackwardCompatbilityAnnotationIntrospectorTest.java
@@ -1,12 +1,33 @@
package org.ovirt.engine.core.utils.serialization.json;
+import static org.junit.Assert.assertEquals;
+
+import java.io.Serializable;
+
import org.junit.Test;
public class BackwardCompatbilityAnnotationIntrospectorTest {
- public static class Person {
+ public static class Person implements Serializable {
+ /**
+ *
+ */
+ private static final long serialVersionUID = 9208114474860242367L;
private String name;
private int age;
+
+ public Person() {
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ if (!(other instanceof Person)) {
+ return false;
+ }
+ Person otherPerson = (Person) other;
+ return age == otherPerson.getAge() &&
name.equals(otherPerson.getName());
+
+ }
public Person(String name, int age) {
this.name = name;
@@ -30,8 +51,25 @@
}
}
+ public static abstract class PersonMixin extends Person {
+
+ @JsonPropertyRename
+ @Override
+ public abstract void setAge(int age);
+
+ }
+
@Test
public void test() {
+ JsonObjectSerializer ser = new JsonObjectSerializer();
+ Person person = new Person("John Smith", 6);
+ String serialized = ser.serialize(person);
+ serialized = serialized.replace("age", "blabla");
+ JsonObjectDeserializer der = new JsonObjectDeserializer();
+ der.addMixin(Person.class, PersonMixin.class);
+ Person derPerson = der.deserialize(serialized, Person.class);
+ assertEquals(person, derPerson);
+
}
--
To view, visit http://gerrit.ovirt.org/21307
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0f3e063d28adb460f1165e6ff062954fbb5da20d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Ravi Nori <[email protected]>
Gerrit-Reviewer: Yair Zaslavsky <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches