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 <yzasl...@redhat.com> --- 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 <rn...@redhat.com> Gerrit-Reviewer: Yair Zaslavsky <yzasl...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches