package com.owlike.genson.reflect;
import java.lang.annotation.Annotation;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Type;
import com.owlike.genson.*;
import com.owlike.genson.stream.ObjectReader;
public abstract class PropertyMutator
extends BeanProperty
implements Comparable
<PropertyMutator
> {
Deserializer
<Object
> propertyDeserializer
;
protected PropertyMutator
(1.5.0/docs/api/java/lang/String.html">String name,
1.5.0/docs/api/java/lang/reflect/Type.html">Type type, Class
<?> declaringClass, Class
<?> concreteClass,
5+0%2Fdocs%2Fapi+Annotation">Annotation[] annotations,
int modifiers
) {
super(name, type, declaringClass, concreteClass, annotations, modifiers
);
}
public 5+0%2Fdocs%2Fapi+Object">Object deserialize
(ObjectReader reader,
5+0%2Fdocs%2Fapi+Context">Context ctx
) {
try {
return propertyDeserializer.
deserialize(reader, ctx
);
} catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable th
) {
throw couldNotDeserialize
(th
);
}
}
public void deserialize
(5+0%2Fdocs%2Fapi+Object">Object into, ObjectReader reader,
5+0%2Fdocs%2Fapi+Context">Context ctx
) {
5+0%2Fdocs%2Fapi+Object">Object propValue =
null;
try {
propValue = propertyDeserializer.
deserialize(reader, ctx
);
} catch (1.5.0/docs/api/java/lang/Throwable.html">Throwable th
) {
throw couldNotDeserialize
(th
);
}
mutate
(into, propValue
);
}
public abstract void mutate
(5+0%2Fdocs%2Fapi+Object">Object target,
5+0%2Fdocs%2Fapi+Object">Object value
);
public int compareTo
(PropertyMutator o
) {
return o.
priority() - priority
();
}
protected JsonBindingException couldNotMutate
(1.5.0/docs/api/java/lang/Exception.html">Exception e
) {
return new JsonBindingException
("Could not mutate value of property named '"
+ name +
"' using mutator " + signature
(), e
);
}
protected JsonBindingException couldNotDeserialize
(1.5.0/docs/api/java/lang/Throwable.html">Throwable e
) {
return new JsonBindingException
("Could not deserialize to property '" + name +
"' of class " + declaringClass, e
);
}
public static class MethodMutator
extends PropertyMutator
{
protected final 1.5.0/docs/api/java/lang/reflect/Method.html">Method _setter
;
public MethodMutator
(1.5.0/docs/api/java/lang/String.html">String name,
1.5.0/docs/api/java/lang/reflect/Method.html">Method setter,
1.5.0/docs/api/java/lang/reflect/Type.html">Type type, Class
<?> concreteClass
) {
super(name, type, setter.
getDeclaringClass(), concreteClass, setter.
getAnnotations(), setter.
getModifiers());
this._setter = setter
;
if (!_setter.
isAccessible()) {
_setter.
setAccessible(true);
}
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public void mutate
(5+0%2Fdocs%2Fapi+Object">Object target,
5+0%2Fdocs%2Fapi+Object">Object value
) {
try {
_setter.
invoke(target, value
);
} catch (1.5.0/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException e
) {
throw couldNotMutate
(e
);
} catch (1.5.0/docs/api/java/lang/IllegalAccessException.html">IllegalAccessException e
) {
throw couldNotMutate
(e
);
} catch (1.5.0/docs/api/java/lang/reflect/InvocationTargetException.html">InvocationTargetException e
) {
throw couldNotMutate
(e
);
}
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public 1.5.0/docs/api/java/lang/String.html">String signature
() {
return _setter.
toGenericString();
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public int priority
() {
return 100;
}
}
public static class FieldMutator
extends PropertyMutator
{
protected final 1.5.0/docs/api/java/lang/reflect/Field.html">Field _field
;
public FieldMutator
(1.5.0/docs/api/java/lang/String.html">String name,
1.5.0/docs/api/java/lang/reflect/Field.html">Field field,
1.5.0/docs/api/java/lang/reflect/Type.html">Type type, Class
<?> concreteClass
) {
super(name, type, field.
getDeclaringClass(), concreteClass, field.
getAnnotations(), field.
getModifiers());
this._field = field
;
if (!_field.
isAccessible()) {
_field.
setAccessible(true);
}
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public void mutate
(5+0%2Fdocs%2Fapi+Object">Object target,
5+0%2Fdocs%2Fapi+Object">Object value
) {
try {
_field.
set(target, value
);
} catch (1.5.0/docs/api/java/lang/IllegalArgumentException.html">IllegalArgumentException e
) {
throw couldNotMutate
(e
);
} catch (1.5.0/docs/api/java/lang/IllegalAccessException.html">IllegalAccessException e
) {
throw couldNotMutate
(e
);
}
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public 1.5.0/docs/api/java/lang/String.html">String signature
() {
return _field.
toGenericString();
}
@
1.5.0/docs/api/java/lang/Override.html">Override
public int priority
() {
return 0;
}
}
}