Browse Source

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

Added special handling for enums as the PropertyDescriptor otherwise fails to resolve the generic type.
pull/1/head
Oliver Gierke 15 years ago
parent
commit
ef7178c9fa
  1. 41
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java

41
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/repository/ConvertingParameterAccessor.java

@ -71,6 +71,27 @@ public class ConvertingParameterAccessor implements ParameterAccessor { @@ -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 { @@ -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 { @@ -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;
}
}
}

Loading…
Cancel
Save