@ -15,8 +15,6 @@
@@ -15,8 +15,6 @@
* /
package org.springframework.data.mongodb.core.convert ;
import java.util.Arrays ;
import java.util.Iterator ;
import java.util.Map.Entry ;
import org.springframework.core.convert.converter.Converter ;
@ -24,13 +22,11 @@ import org.springframework.data.mapping.Association;
@@ -24,13 +22,11 @@ import org.springframework.data.mapping.Association;
import org.springframework.data.mapping.context.MappingContext ;
import org.springframework.data.mongodb.core.mapping.MongoPersistentEntity ;
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty ;
import org.springframework.data.mongodb.core.mapping.MongoPersistentProperty.PropertyToFieldNameConverter ;
import org.springframework.data.mongodb.core.query.Query ;
import org.springframework.data.mongodb.core.query.Update.Modifier ;
import org.springframework.data.mongodb.core.query.Update.Modifiers ;
import org.springframework.data.util.ClassTypeInformation ;
import org.springframework.data.util.TypeInformation ;
import org.springframework.util.Assert ;
import com.mongodb.BasicDBObject ;
import com.mongodb.DBObject ;
@ -213,7 +209,7 @@ public class UpdateMapper extends QueryMapper {
@@ -213,7 +209,7 @@ public class UpdateMapper extends QueryMapper {
* /
@Override
protected Converter < MongoPersistentProperty , String > getPropertyConverter ( ) {
return new UpdatePropert yConverter( key ) ;
return new PositionParameterRetainingPropertyKe yConverter( key ) ;
}
/ *
@ -225,99 +221,6 @@ public class UpdateMapper extends QueryMapper {
@@ -225,99 +221,6 @@ public class UpdateMapper extends QueryMapper {
return new UpdateAssociationConverter ( getAssociation ( ) , key ) ;
}
/ * *
* Special mapper handling positional parameter { @literal $ } within property names .
*
* @author Christoph Strobl
* @since 1 . 7
* /
private static class UpdateKeyMapper {
private final Iterator < String > iterator ;
protected UpdateKeyMapper ( String rawKey ) {
Assert . hasText ( rawKey , "Key must not be null or empty!" ) ;
this . iterator = Arrays . asList ( rawKey . split ( "\\." ) ) . iterator ( ) ;
this . iterator . next ( ) ;
}
/ * *
* Maps the property name while retaining potential positional operator { @literal $ } .
*
* @param property
* @return
* /
protected String mapPropertyName ( MongoPersistentProperty property ) {
String mappedName = PropertyToFieldNameConverter . INSTANCE . convert ( property ) ;
boolean inspect = iterator . hasNext ( ) ;
while ( inspect ) {
String partial = iterator . next ( ) ;
boolean isPositional = isPositionalParameter ( partial ) ;
if ( isPositional ) {
mappedName + = "." + partial ;
}
inspect = isPositional & & iterator . hasNext ( ) ;
}
return mappedName ;
}
boolean isPositionalParameter ( String partial ) {
if ( partial . equals ( "$" ) ) {
return true ;
}
try {
Long . valueOf ( partial ) ;
return true ;
} catch ( NumberFormatException e ) {
return false ;
}
}
}
/ * *
* Special { @link Converter } for { @link MongoPersistentProperty } instances that will concatenate the { @literal $ }
* contained in the source update key .
*
* @author Oliver Gierke
* @author Christoph Strobl
* /
private static class UpdatePropertyConverter implements Converter < MongoPersistentProperty , String > {
private final UpdateKeyMapper mapper ;
/ * *
* Creates a new { @link UpdatePropertyConverter } with the given update key .
*
* @param updateKey must not be { @literal null } or empty .
* /
public UpdatePropertyConverter ( String updateKey ) {
Assert . hasText ( updateKey , "Update key must not be null or empty!" ) ;
this . mapper = new UpdateKeyMapper ( updateKey ) ;
}
/ *
* ( non - Javadoc )
* @see org . springframework . core . convert . converter . Converter # convert ( java . lang . Object )
* /
@Override
public String convert ( MongoPersistentProperty property ) {
return mapper . mapPropertyName ( property ) ;
}
}
/ * *
* { @link Converter } retaining positional parameter { @literal $ } for { @link Association } s .
*
@ -325,7 +228,7 @@ public class UpdateMapper extends QueryMapper {
@@ -325,7 +228,7 @@ public class UpdateMapper extends QueryMapper {
* /
protected static class UpdateAssociationConverter extends AssociationConverter {
private final Update KeyMapper mapper ;
private final KeyMapper mapper ;
/ * *
* Creates a new { @link AssociationConverter } for the given { @link Association } .
@ -335,7 +238,7 @@ public class UpdateMapper extends QueryMapper {
@@ -335,7 +238,7 @@ public class UpdateMapper extends QueryMapper {
public UpdateAssociationConverter ( Association < MongoPersistentProperty > association , String key ) {
super ( association ) ;
this . mapper = new Update KeyMapper( key ) ;
this . mapper = new KeyMapper ( key ) ;
}
/ *