Extended ConvertingParameterAccessor to convert for getBindableValue(…) as well.

Added special handling for enums as the PropertyDescriptor otherwise fails to resolve the generic type.
This commit is contained in:
Oliver Gierke
2011-03-01 21:05:43 +01:00
parent f90766d3f4
commit ef7178c9fa

View File

@@ -71,6 +71,27 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
public Sort getSort() {
return delegate.getSort();
}
/* (non-Javadoc)
* @see org.springframework.data.repository.query.ParameterAccessor#getBindableParameter(int)
*/
public Object getBindableValue(int index) {
return getConvertedValue(delegate.getBindableValue(index));
}
/**
* Converts the given value with the underlying {@link MongoWriter}.
*
* @param value
* @return
*/
private Object getConvertedValue(Object value) {
DBObject result = new BasicDBObject();
writer.write(value.getClass().isEnum() ? new EnumValueHolder((Enum<?>) value) : new ValueHolder(value), result);
return result.get("value");
}
/**
* Custom {@link Iterator} to convert items before returning them.
@@ -106,9 +127,7 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
*/
public Object next() {
DBObject result = new BasicDBObject();
writer.write(new ValueHolder(delegate.next()), result);
return result.get("value");
return getConvertedValue(delegate.next());
}
/*
@@ -141,4 +160,20 @@ public class ConvertingParameterAccessor implements ParameterAccessor {
return value;
}
}
private static class EnumValueHolder {
private Enum<?> value;
public EnumValueHolder(Enum<?> value) {
this.value = value;
}
/**
* @return the value
*/
public Enum<?> getValue() {
return value;
}
}
}