DATAMONGO-2155 - Polishing.

Reduce visibility of MappedUpdated to package-protected to avoid exposure. Rename UpdateDefinition.incVersion() to inc(). Reintroduce doUpdate() methods accepting Update and delegating to the new doUpdate() methods to preserve binary compatibility.

Original pull request: #625.
This commit is contained in:
Mark Paluch
2019-01-09 16:07:59 +01:00
parent a759dff5fd
commit abe7876086
5 changed files with 27 additions and 16 deletions

View File

@@ -83,7 +83,7 @@ public class MappedDocument {
return Filters.eq(ID_FIELD, document.get(ID_FIELD)); return Filters.eq(ID_FIELD, document.get(ID_FIELD));
} }
public MappedUpdate updateWithoutId() { public UpdateDefinition updateWithoutId() {
return new MappedUpdate(Update.fromDocument(document, ID_FIELD)); return new MappedUpdate(Update.fromDocument(document, ID_FIELD));
} }
@@ -92,9 +92,9 @@ public class MappedDocument {
* mapped to the specific domain type. * mapped to the specific domain type.
* *
* @author Christoph Strobl * @author Christoph Strobl
* @since 2.2 * @since 2.1.4
*/ */
public class MappedUpdate implements UpdateDefinition { class MappedUpdate implements UpdateDefinition {
private final Update delegate; private final Update delegate;
@@ -122,11 +122,11 @@ public class MappedDocument {
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#incVersion(java.lang.String) * @see org.springframework.data.mongodb.core.query.UpdateDefinition#inc(java.lang.String)
*/ */
@Override @Override
public void incVersion(String version) { public void inc(String version) {
delegate.incVersion(version); delegate.inc(version);
} }
/* /*

View File

@@ -1386,7 +1386,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
MappedDocument mapped = source.toMappedDocument(mongoConverter); MappedDocument mapped = source.toMappedDocument(mongoConverter);
maybeEmitEvent(new BeforeSaveEvent<>(toSave, mapped.getDocument(), collectionName)); maybeEmitEvent(new BeforeSaveEvent<>(toSave, mapped.getDocument(), collectionName));
MappedUpdate update = mapped.updateWithoutId(); UpdateDefinition update = mapped.updateWithoutId();
UpdateResult result = doUpdate(collectionName, query, update, toSave.getClass(), false, false); UpdateResult result = doUpdate(collectionName, query, update, toSave.getClass(), false, false);
@@ -1556,7 +1556,12 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
return doUpdate(collectionName, query, update, entityClass, false, true); return doUpdate(collectionName, query, update, entityClass, false, true);
} }
protected UpdateResult doUpdate(final String collectionName, final Query query, final UpdateDefinition update, protected UpdateResult doUpdate(final String collectionName, final Query query, final Update update,
@Nullable final Class<?> entityClass, final boolean upsert, final boolean multi) {
return doUpdate(collectionName, query, (UpdateDefinition) update, entityClass, upsert, multi);
}
private UpdateResult doUpdate(final String collectionName, final Query query, final UpdateDefinition update,
@Nullable final Class<?> entityClass, final boolean upsert, final boolean multi) { @Nullable final Class<?> entityClass, final boolean upsert, final boolean multi) {
Assert.notNull(collectionName, "CollectionName must not be null!"); Assert.notNull(collectionName, "CollectionName must not be null!");
@@ -1622,7 +1627,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware,
if (persistentEntity != null && persistentEntity.hasVersionProperty()) { if (persistentEntity != null && persistentEntity.hasVersionProperty()) {
String versionFieldName = persistentEntity.getRequiredVersionProperty().getFieldName(); String versionFieldName = persistentEntity.getRequiredVersionProperty().getFieldName();
if (!update.modifies(versionFieldName)) { if (!update.modifies(versionFieldName)) {
update.incVersion(versionFieldName); update.inc(versionFieldName);
} }
} }
} }

View File

@@ -1612,7 +1612,12 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
return doUpdate(collectionName, query, update, entityClass, false, true); return doUpdate(collectionName, query, update, entityClass, false, true);
} }
protected Mono<UpdateResult> doUpdate(String collectionName, Query query, @Nullable UpdateDefinition update, protected Mono<UpdateResult> doUpdate(String collectionName, Query query, @Nullable Update update,
@Nullable Class<?> entityClass, boolean upsert, boolean multi) {
return doUpdate(collectionName, query, (UpdateDefinition) update, entityClass, upsert, multi);
}
private Mono<UpdateResult> doUpdate(String collectionName, Query query, @Nullable UpdateDefinition update,
@Nullable Class<?> entityClass, boolean upsert, boolean multi) { @Nullable Class<?> entityClass, boolean upsert, boolean multi) {
MongoPersistentEntity<?> entity = entityClass == null ? null : getPersistentEntity(entityClass); MongoPersistentEntity<?> entity = entityClass == null ? null : getPersistentEntity(entityClass);
@@ -1675,7 +1680,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati
if (persistentEntity != null && persistentEntity.hasVersionProperty()) { if (persistentEntity != null && persistentEntity.hasVersionProperty()) {
String versionFieldName = persistentEntity.getRequiredVersionProperty().getFieldName(); String versionFieldName = persistentEntity.getRequiredVersionProperty().getFieldName();
if (!update.modifies(versionFieldName)) { if (!update.modifies(versionFieldName)) {
update.incVersion(versionFieldName); update.inc(versionFieldName);
} }
} }
} }

View File

@@ -157,10 +157,10 @@ public class Update implements UpdateDefinition {
/* /*
* (non-Javadoc) * (non-Javadoc)
* @see org.springframework.data.mongodb.core.query.UpdateDefinition#incVersion() * @see org.springframework.data.mongodb.core.query.UpdateDefinition#inc()
*/ */
@Override @Override
public void incVersion(String key) { public void inc(String key) {
inc(key, 1L); inc(key, 1L);
} }

View File

@@ -21,7 +21,8 @@ import org.bson.Document;
* Interface fixing must have operations for {@literal updates} as implemented via {@link Update}. * Interface fixing must have operations for {@literal updates} as implemented via {@link Update}.
* *
* @author Christoph Strobl * @author Christoph Strobl
* @since 2.2 * @author Mark Paluch
* @since 2.1.4
*/ */
public interface UpdateDefinition { public interface UpdateDefinition {
@@ -47,9 +48,9 @@ public interface UpdateDefinition {
boolean modifies(String key); boolean modifies(String key);
/** /**
* Bump the version of a given {@literal key} by {@code 1}. * Increment the value of a given {@literal key} by {@code 1}.
* *
* @param key must not be {@literal null}. * @param key must not be {@literal null}.
*/ */
void incVersion(String key); void inc(String key);
} }