Spring Data MongoDB - Core

org.springframework.data.mongodb.core.convert
Class QueryMapper

java.lang.Object
  extended by org.springframework.data.mongodb.core.convert.QueryMapper
Direct Known Subclasses:
UpdateMapper

public class QueryMapper
extends Object

A helper class to encapsulate any modifications of a Query object before it gets submitted to the database.

Author:
Jon Brisbin, Oliver Gierke, Patryk Wasik, Thomas Darimont, Christoph Strobl

Nested Class Summary
protected static class QueryMapper.Field
          Value object to represent a field and its meta-information.
protected static class QueryMapper.MetadataBackedField
          Extension of DocumentField to be backed with mapping metadata.
 
Constructor Summary
QueryMapper(MongoConverter converter)
          Creates a new QueryMapper with the given MongoConverter.
 
Method Summary
protected  Object convertAssociation(Object source, MongoPersistentProperty property)
          Converts the given source assuming it's actually an association to another object.
protected  Object convertAssociation(Object source, QueryMapper.Field field)
           
 Object convertId(Object id)
          Converts the given raw id value into either ObjectId or String.
protected  Object convertSimpleOrDBObject(Object source, MongoPersistentEntity<?> entity)
          Retriggers mapping if the given source is a DBObject or simply invokes the
protected  Map.Entry<String,Object> createMapEntry(QueryMapper.Field field, Object value)
          Creates a new Map.Entry for the given QueryMapper.Field with the given value.
protected  QueryMapper.Field createPropertyField(MongoPersistentEntity<?> entity, String key, MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext)
           
protected  Object delegateConvertToMongoType(Object source, MongoPersistentEntity<?> entity)
          Converts the given source Object to a mongo type with the type information of the original source type omitted.
protected  com.mongodb.DBObject getMappedKeyword(QueryMapper.Field property, org.springframework.data.mongodb.core.convert.QueryMapper.Keyword keyword)
          Returns the mapped keyword considered defining a criteria for the given property.
protected  com.mongodb.DBObject getMappedKeyword(org.springframework.data.mongodb.core.convert.QueryMapper.Keyword keyword, MongoPersistentEntity<?> entity)
          Returns the given DBObject representing a keyword by mapping the keyword's value.
 com.mongodb.DBObject getMappedObject(com.mongodb.DBObject query, MongoPersistentEntity<?> entity)
          Replaces the property keys used in the given DBObject with the appropriate keys by using the PersistentEntity metadata.
protected  Map.Entry<String,Object> getMappedObjectForField(QueryMapper.Field field, Object rawValue)
          Extracts the mapped object value for given field out of rawValue taking nested Keywords into account
protected  Object getMappedValue(QueryMapper.Field documentField, Object value)
          Returns the mapped value for the given source object assuming it's a value for the given MongoPersistentProperty.
protected  boolean isAssociationConversionNecessary(QueryMapper.Field documentField, Object value)
          Returns whether the given QueryMapper.Field represents an association reference that together with the given value requires conversion to a DBRef object.
protected  boolean isDBObject(Object value)
          Checks whether the given value is a DBObject.
protected  boolean isKeyword(String candidate)
          Returns whether the given String is a MongoDB keyword.
protected  boolean isNestedKeyword(Object candidate)
          Returns whether the given Object is a keyword, i.e. if it's a DBObject with a keyword key.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

QueryMapper

public QueryMapper(MongoConverter converter)
Creates a new QueryMapper with the given MongoConverter.

Parameters:
converter - must not be null.
Method Detail

getMappedObject

public com.mongodb.DBObject getMappedObject(com.mongodb.DBObject query,
                                            MongoPersistentEntity<?> entity)
Replaces the property keys used in the given DBObject with the appropriate keys by using the PersistentEntity metadata.

Parameters:
query - must not be null.
entity - can be null.
Returns:

getMappedObjectForField

protected Map.Entry<String,Object> getMappedObjectForField(QueryMapper.Field field,
                                                           Object rawValue)
Extracts the mapped object value for given field out of rawValue taking nested Keywords into account

Parameters:
field -
rawValue -
Returns:

createPropertyField

protected QueryMapper.Field createPropertyField(MongoPersistentEntity<?> entity,
                                                String key,
                                                MappingContext<? extends MongoPersistentEntity<?>,MongoPersistentProperty> mappingContext)
Parameters:
entity -
key -
mappingContext -
Returns:

getMappedKeyword

protected com.mongodb.DBObject getMappedKeyword(org.springframework.data.mongodb.core.convert.QueryMapper.Keyword keyword,
                                                MongoPersistentEntity<?> entity)
Returns the given DBObject representing a keyword by mapping the keyword's value.

Parameters:
keyword - the DBObject representing a keyword (e.g. $ne : … )
entity -
Returns:

getMappedKeyword

protected com.mongodb.DBObject getMappedKeyword(QueryMapper.Field property,
                                                org.springframework.data.mongodb.core.convert.QueryMapper.Keyword keyword)
Returns the mapped keyword considered defining a criteria for the given property.

Parameters:
property -
keyword -
Returns:

getMappedValue

protected Object getMappedValue(QueryMapper.Field documentField,
                                Object value)
Returns the mapped value for the given source object assuming it's a value for the given MongoPersistentProperty.

Parameters:
value - the source object to be mapped
property - the property the value is a value for
newKey - the key the value will be bound to eventually
Returns:

isAssociationConversionNecessary

protected boolean isAssociationConversionNecessary(QueryMapper.Field documentField,
                                                   Object value)
Returns whether the given QueryMapper.Field represents an association reference that together with the given value requires conversion to a DBRef object. We check whether the type of the given value is compatible with the type of the given document field in order to deal with potential query field exclusions, since MongoDB uses the int 0 as an indicator for an excluded field.

Parameters:
documentField -
value -
Returns:

convertSimpleOrDBObject

protected Object convertSimpleOrDBObject(Object source,
                                         MongoPersistentEntity<?> entity)
Retriggers mapping if the given source is a DBObject or simply invokes the

Parameters:
source -
entity -
Returns:

delegateConvertToMongoType

protected Object delegateConvertToMongoType(Object source,
                                            MongoPersistentEntity<?> entity)
Converts the given source Object to a mongo type with the type information of the original source type omitted. Subclasses may overwrite this method to retain the type information of the source type on the resulting mongo type.

Parameters:
source -
entity -
Returns:
the converted mongo type or null if source is null

convertAssociation

protected Object convertAssociation(Object source,
                                    QueryMapper.Field field)

convertAssociation

protected Object convertAssociation(Object source,
                                    MongoPersistentProperty property)
Converts the given source assuming it's actually an association to another object.

Parameters:
source -
property -
Returns:

isDBObject

protected final boolean isDBObject(Object value)
Checks whether the given value is a DBObject.

Parameters:
value - can be null.
Returns:

createMapEntry

protected final Map.Entry<String,Object> createMapEntry(QueryMapper.Field field,
                                                        Object value)
Creates a new Map.Entry for the given QueryMapper.Field with the given value.

Parameters:
field - must not be null.
value - can be null.
Returns:

convertId

public Object convertId(Object id)
Converts the given raw id value into either ObjectId or String.

Parameters:
id -
Returns:

isNestedKeyword

protected boolean isNestedKeyword(Object candidate)
Returns whether the given Object is a keyword, i.e. if it's a DBObject with a keyword key.

Parameters:
candidate -
Returns:

isKeyword

protected boolean isKeyword(String candidate)
Returns whether the given String is a MongoDB keyword. The default implementation will check against the set of registered keywords returned by #getKeywords().

Parameters:
candidate -
Returns:

Spring Data MongoDB - Core

Copyright © 2011-2014-2014 Pivotal. All Rights Reserved.