From 90bb6262f9b5e6984b44b85eed1b6643eadbb292 Mon Sep 17 00:00:00 2001 From: Christoph Strobl Date: Mon, 30 Jan 2017 08:44:10 +0100 Subject: [PATCH] DATAMONGO-1609 - Fix compile errors. Still way to go: - Failures: 113, Errors: 836, Skipped: 16 --- .../mongodb/core/DefaultIndexOperations.java | 2 +- .../data/mongodb/core/MongoTemplate.java | 4 +- .../mongodb/core/ReactiveMongoTemplate.java | 81 +++++++++---------- .../MongoPersistentEntityIndexResolver.java | 73 +++++++++-------- .../mapping/event/AuditingEventListener.java | 4 +- .../data/mongodb/core/query/NearQuery.java | 12 +-- .../data/mongodb/core/query/Query.java | 6 +- .../data/mongodb/gridfs/GridFsTemplate.java | 3 +- .../repository/cdi/MongoRepositoryBean.java | 5 +- .../cdi/MongoRepositoryExtension.java | 3 +- .../repository/query/AbstractMongoQuery.java | 4 +- .../query/AbstractReactiveMongoQuery.java | 4 +- .../query/ConvertingParameterAccessor.java | 3 +- .../query/DtoInstantiatingConverter.java | 16 ++-- .../repository/query/MongoParameters.java | 2 +- .../repository/query/MongoQueryCreator.java | 5 +- .../repository/query/MongoQueryExecution.java | 21 ++--- .../repository/query/MongoQueryMethod.java | 15 ++-- .../repository/query/PartTreeMongoQuery.java | 4 +- .../query/ReactiveMongoQueryExecution.java | 6 +- .../query/ReactiveMongoQueryMethod.java | 6 +- .../query/ReactivePartTreeMongoQuery.java | 4 +- .../MappingMongoEntityInformation.java | 2 +- .../support/MongoRepositoryFactory.java | 19 ++--- .../PersistableMongoEntityInformation.java | 5 +- .../support/QueryDslMongoRepository.java | 21 +---- .../support/QuerydslRepositorySupport.java | 3 +- .../ReactiveMongoRepositoryFactory.java | 11 +-- .../support/SimpleMongoRepository.java | 18 ++--- .../SimpleReactiveMongoRepository.java | 6 +- .../support/SpringDataMongodbSerializer.java | 13 +-- .../AbstractMongoConfigurationUnitTests.java | 2 +- ...ctReactiveMongoConfigurationUnitTests.java | 2 +- .../DefaultScriptOperationsUnitTests.java | 1 - .../mongodb/core/MongoDbUtilsUnitTests.java | 1 - .../mongodb/core/MongoTemplateUnitTests.java | 17 ++-- .../data/mongodb/core/NoExplicitIdTests.java | 5 +- .../core/QueryCursorPreparerUnitTests.java | 1 - .../convert/CustomConvertersUnitTests.java | 1 - .../DbRefMappingMongoConverterUnitTests.java | 18 ++--- .../DefaultDbRefResolverUnitTests.java | 1 - .../DefaultMongoTypeMapperUnitTests.java | 7 +- .../core/convert/QueryMapperUnitTests.java | 37 ++++----- .../ReflectiveDBRefResolverUnitTests.java | 1 - ...PersistentEntityIndexCreatorUnitTests.java | 2 +- ...ersistentEntityIndexResolverUnitTests.java | 2 +- .../mapping/MongoMappingContextUnitTests.java | 14 ++-- .../event/AuditingEventListenerUnitTests.java | 13 +-- .../performance/ReactivePerformanceTests.java | 7 +- .../ContactRepositoryIntegrationTests.java | 2 +- .../mongodb/repository/PersonRepository.java | 4 +- ...RepositoryLazyLoadingIntegrationTests.java | 6 +- .../query/AbstractMongoQueryUnitTests.java | 1 - .../ConvertingParameterAccessorUnitTests.java | 4 +- .../query/StubParameterAccessor.java | 6 +- .../MongoRepositoryFactoryUnitTests.java | 5 +- .../support/SimpleMongoRepositoryTests.java | 9 ++- .../mongodb/test/util/CleanMongoDBTests.java | 1 - 58 files changed, 270 insertions(+), 281 deletions(-) diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java index adf9ccbe7..3438e858b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/DefaultIndexOperations.java @@ -120,7 +120,7 @@ public class DefaultIndexOperations implements IndexOperations { private MongoPersistentEntity lookupPersistentEntity(Class entityType, String collection) { if (entityType != null) { - return mapper.getMappingContext().getPersistentEntity(entityType); + return mapper.getMappingContext().getRequiredPersistentEntity(entityType); } Collection> entities = mapper.getMappingContext().getPersistentEntities(); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java index f474a5fbe..f28541075 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoTemplate.java @@ -684,7 +684,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, List> result = new ArrayList>(results.size()); int index = 0; - int elementsToSkip = near.getSkip() != null ? near.getSkip() : 0; + long elementsToSkip = near.getSkip() != null ? near.getSkip() : 0; for (Object element : results) { @@ -2521,7 +2521,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware, try { if (query.getSkip() > 0) { - cursorToUse = cursorToUse.skip(query.getSkip()); + cursorToUse = cursorToUse.skip((int)query.getSkip()); } if (query.getLimit() > 0) { cursorToUse = cursorToUse.limit(query.getLimit()); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java index c13bae356..779b69d9e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/ReactiveMongoTemplate.java @@ -27,6 +27,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; @@ -610,8 +611,8 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ public Mono findById(Object id, Class entityClass, String collectionName) { - MongoPersistentEntity persistentEntity = mappingContext.getPersistentEntity(entityClass); - MongoPersistentProperty idProperty = persistentEntity == null ? null : persistentEntity.getIdProperty(); + Optional> persistentEntity = mappingContext.getPersistentEntity(entityClass); + MongoPersistentProperty idProperty = persistentEntity.isPresent() ? persistentEntity.get().getIdProperty().orElse(null) : null; String idKey = idProperty == null ? ID_FIELD : idProperty.getName(); @@ -859,11 +860,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati final Map> elementsByCollection = new HashMap>(); listToSave.forEach(element -> { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(element.getClass()); - - if (entity == null) { - throw new InvalidDataAccessApiUsageException("No PersistentEntity information found for " + element.getClass()); - } + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(element.getClass()); String collection = entity.getCollection(); List collectionElements = elementsByCollection.get(collection); @@ -965,14 +962,14 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati ConvertingPropertyAccessor convertingAccessor = new ConvertingPropertyAccessor( entity.getPropertyAccessor(objectToSave), mongoConverter.getConversionService()); - MongoPersistentProperty idProperty = entity.getIdProperty(); - MongoPersistentProperty versionProperty = entity.getVersionProperty(); + MongoPersistentProperty idProperty = entity.getIdProperty().orElseThrow(() -> new IllegalArgumentException("No id property present!")); + MongoPersistentProperty versionProperty = entity.getVersionProperty().orElseThrow(() -> new IllegalArgumentException("No version property present!"));; - Object version = convertingAccessor.getProperty(versionProperty); - Number versionNumber = convertingAccessor.getProperty(versionProperty, Number.class); + Optional version = convertingAccessor.getProperty(versionProperty); + Optional versionNumber = convertingAccessor.getProperty(versionProperty, Number.class); // Fresh instance -> initialize version property - if (version == null) { + if (!version.isPresent()) { return doInsert(collectionName, objectToSave, mongoConverter); } @@ -983,7 +980,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati Query query = new Query(Criteria.where(idProperty.getName()).is(id).and(versionProperty.getName()).is(version)); // Bump version number - convertingAccessor.setProperty(versionProperty, versionNumber.longValue() + 1); + convertingAccessor.setProperty(versionProperty, Optional.of(versionNumber.orElse(0).longValue() + 1)); ReactiveMongoTemplate.this.maybeEmitEvent(new BeforeConvertEvent(objectToSave, collectionName)); @@ -1229,7 +1226,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati private void increaseVersionForUpdateIfNecessary(MongoPersistentEntity persistentEntity, Update update) { if (persistentEntity != null && persistentEntity.hasVersionProperty()) { - String versionFieldName = persistentEntity.getVersionProperty().getFieldName(); + String versionFieldName = persistentEntity.getVersionProperty().get().getFieldName(); if (!update.modifies(versionFieldName)) { update.inc(versionFieldName, 1L); } @@ -1242,7 +1239,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati return false; } - return document.containsKey(persistentEntity.getVersionProperty().getFieldName()); + return document.containsKey(persistentEntity.getVersionProperty().get().getFieldName()); } /* (non-Javadoc) @@ -1304,14 +1301,14 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati return Collections.singletonMap(ID_FIELD, ((Document) object).get(ID_FIELD)).entrySet().iterator().next(); } - MongoPersistentEntity entity = mappingContext.getPersistentEntity(objectType); - MongoPersistentProperty idProp = entity == null ? null : entity.getIdProperty(); + Optional> entity = mappingContext.getPersistentEntity(objectType); + MongoPersistentProperty idProp = entity.isPresent() ? entity.get().getIdProperty().orElse(null) : null; if (idProp == null) { throw new MappingException("No id property found for object of type " + objectType); } - Object idValue = entity.getPropertyAccessor(object).getProperty(idProp); + Object idValue = entity.get().getPropertyAccessor(object).getProperty(idProp); return Collections.singletonMap(idProp.getFieldName(), idValue).entrySet().iterator().next(); } @@ -1352,18 +1349,18 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati private void assertUpdateableIdIfNotSet(Object entity) { - MongoPersistentEntity persistentEntity = mappingContext.getPersistentEntity(entity.getClass()); - MongoPersistentProperty idProperty = persistentEntity == null ? null : persistentEntity.getIdProperty(); + Optional> persistentEntity = mappingContext.getPersistentEntity(entity.getClass()); + Optional idProperty = persistentEntity.isPresent() ? persistentEntity.get().getIdProperty() : Optional.empty(); - if (idProperty == null) { + if (!idProperty.isPresent()) { return; } - Object idValue = persistentEntity.getPropertyAccessor(entity).getProperty(idProperty); + Optional idValue = persistentEntity.get().getPropertyAccessor(entity).getProperty(idProperty.get()); - if (idValue == null && !MongoSimpleTypes.AUTOGENERATED_ID_TYPES.contains(idProperty.getType())) { + if (!idValue.isPresent() && !MongoSimpleTypes.AUTOGENERATED_ID_TYPES.contains(idProperty.get().getType())) { throw new InvalidDataAccessApiUsageException( - String.format("Cannot autogenerate id of type %s for entity of type %s!", idProperty.getType().getName(), + String.format("Cannot autogenerate id of type %s for entity of type %s!", idProperty.get().getType().getName(), entity.getClass().getName())); } } @@ -1535,7 +1532,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati */ protected Mono doFindOne(String collectionName, Document query, Document fields, Class entityClass) { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); + Optional> entity = mappingContext.getPersistentEntity(entityClass); Document mappedQuery = queryMapper.getMappedObject(query, entity); Document mappedFields = fields == null ? null : queryMapper.getMappedObject(fields, entity); @@ -1585,7 +1582,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati protected Flux doFind(String collectionName, Document query, Document fields, Class entityClass, FindPublisherPreparer preparer, DocumentCallback objectCallback) { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); + Optional> entity = mappingContext.getPersistentEntity(entityClass); Document mappedFields = queryMapper.getMappedFields(fields, entity); Document mappedQuery = queryMapper.getMappedObject(query, entity); @@ -1638,7 +1635,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati serializeToJsonSafely(query), fields, sort, entityClass, collectionName)); } - MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); + Optional> entity = mappingContext.getPersistentEntity(entityClass); return executeFindOneInternal(new FindAndRemoveCallback(queryMapper.getMappedObject(query, entity), fields, sort), new ReadDocumentCallback(this.mongoConverter, entityClass, collectionName), collectionName); @@ -1654,11 +1651,11 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati optionsToUse = options; } - MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); + Optional> entity = mappingContext.getPersistentEntity(entityClass); return Mono.defer(() -> { - increaseVersionForUpdateIfNecessary(entity, update); + increaseVersionForUpdateIfNecessary(entity.get(), update); Document mappedQuery = queryMapper.getMappedObject(query, entity); Document mappedUpdate = updateMapper.getMappedObject(update.getUpdateObject(), entity); @@ -1706,14 +1703,14 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati } ConversionService conversionService = mongoConverter.getConversionService(); - MongoPersistentEntity entity = mappingContext.getPersistentEntity(savedObject.getClass()); + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(savedObject.getClass()); PersistentPropertyAccessor accessor = entity.getPropertyAccessor(savedObject); if (accessor.getProperty(idProp) != null) { return; } - new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, id); + new ConvertingPropertyAccessor(accessor, conversionService).setProperty(idProp, Optional.ofNullable(id)); } private MongoCollection getAndPrepareCollection(MongoDatabase db, String collectionName) { @@ -1901,12 +1898,12 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati } private MongoPersistentEntity getPersistentEntity(Class type) { - return type == null ? null : mappingContext.getPersistentEntity(type); + return type == null ? null : mappingContext.getPersistentEntity(type).orElse(null); } private MongoPersistentProperty getIdPropertyFor(Class type) { - MongoPersistentEntity persistentEntity = mappingContext.getPersistentEntity(type); - return persistentEntity == null ? null : persistentEntity.getIdProperty(); + Optional> persistentEntity = mappingContext.getPersistentEntity(type); + return persistentEntity.isPresent() ? persistentEntity.get().getIdProperty().orElse(null) : null; } private String determineEntityCollectionName(T obj) { @@ -1925,13 +1922,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati "No class parameter provided, entity collection can't be determined!"); } - MongoPersistentEntity entity = mappingContext.getPersistentEntity(entityClass); - - if (entity == null) { - throw new InvalidDataAccessApiUsageException( - "No Persistent Entity information found for the class " + entityClass.getName()); - } - + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(entityClass); return entity.getCollection(); } @@ -1986,7 +1977,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati if (mongoPersistentEntity != null && mongoPersistentEntity.hasVersionProperty()) { ConvertingPropertyAccessor accessor = new ConvertingPropertyAccessor( mongoPersistentEntity.getPropertyAccessor(entity), mongoConverter.getConversionService()); - accessor.setProperty(mongoPersistentEntity.getVersionProperty(), 0); + accessor.setProperty(mongoPersistentEntity.getVersionProperty().get(), Optional.of(0)); } } @@ -2290,7 +2281,7 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati try { if (query.getSkip() > 0) { - findPublisherToUse = findPublisherToUse.skip(query.getSkip()); + findPublisherToUse = findPublisherToUse.skip((int)query.getSkip()); } if (query.getLimit() > 0) { findPublisherToUse = findPublisherToUse.limit(query.getLimit()); @@ -2346,9 +2337,9 @@ public class ReactiveMongoTemplate implements ReactiveMongoOperations, Applicati static class NoOpDbRefResolver implements DbRefResolver { @Override - public Object resolveDbRef(MongoPersistentProperty property, DBRef dbref, DbRefResolverCallback callback, + public Optional resolveDbRef(MongoPersistentProperty property, DBRef dbref, DbRefResolverCallback callback, DbRefProxyHandler proxyHandler) { - return null; + return Optional.empty(); } @Override diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java index 20618526a..9e2721416 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolver.java @@ -23,6 +23,7 @@ import java.util.Iterator; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.concurrent.TimeUnit; import org.slf4j.Logger; @@ -77,7 +78,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { */ @Override public Iterable resolveIndexFor(TypeInformation typeInformation) { - return resolveIndexForEntity(mappingContext.getPersistentEntity(typeInformation)); + return resolveIndexForEntity(mappingContext.getRequiredPersistentEntity(typeInformation)); } /** @@ -92,7 +93,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { public List resolveIndexForEntity(final MongoPersistentEntity root) { Assert.notNull(root, "Index cannot be resolved for given 'null' entity."); - Document document = root.findAnnotation(Document.class); + Document document = root.findAnnotation(Document.class).orElseThrow(() -> new IllegalArgumentException("Given entity is not collection root.")); Assert.notNull(document, "Given entity is not collection root."); final List indexInformation = new ArrayList(); @@ -140,7 +141,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { private List resolveIndexForClass(final TypeInformation type, final String path, final String collection, final CycleGuard guard) { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(type); + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(type); final List indexInformation = new ArrayList(); indexInformation.addAll(potentiallyCreateCompoundIndexDefinitions(path, collection, entity)); @@ -253,14 +254,14 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { indexDefinitionBuilder.withLanguageOverride(persistentProperty.getFieldName()); } - TextIndexed indexed = persistentProperty.findAnnotation(TextIndexed.class); + Optional indexed = persistentProperty.findAnnotation(TextIndexed.class); - if (includeOptions.isForce() || indexed != null || persistentProperty.isEntity()) { + if (includeOptions.isForce() || indexed.isPresent()|| persistentProperty.isEntity()) { String propertyDotPath = (StringUtils.hasText(dotPath) ? dotPath + "." : "") + persistentProperty.getFieldName(); - Float weight = indexed != null ? indexed.weight() + Float weight = indexed != null ? indexed.get().weight() : (includeOptions.getParentFieldSpec() != null ? includeOptions.getParentFieldSpec().getWeight() : 1.0F); if (persistentProperty.isEntity()) { @@ -273,7 +274,7 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { try { appendTextIndexInformation(propertyDotPath, indexDefinitionBuilder, - mappingContext.getPersistentEntity(persistentProperty.getActualType()), optionsForNestedType, guard); + mappingContext.getRequiredPersistentEntity(persistentProperty.getActualType()), optionsForNestedType, guard); } catch (CyclicPropertyReferenceException e) { LOGGER.info(e.getMessage(), e); } catch (InvalidDataAccessApiUsageException e) { @@ -302,18 +303,18 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { MongoPersistentEntity entity) { List indexDefinitions = new ArrayList(); - CompoundIndexes indexes = entity.findAnnotation(CompoundIndexes.class); + Optional indexes = entity.findAnnotation(CompoundIndexes.class); - if (indexes != null) { - for (CompoundIndex index : indexes.value()) { + if (indexes.isPresent()) { + for (CompoundIndex index : indexes.get().value()) { indexDefinitions.add(createCompoundIndexDefinition(dotPath, fallbackCollection, index, entity)); } } - CompoundIndex index = entity.findAnnotation(CompoundIndex.class); + Optional index = entity.findAnnotation(CompoundIndex.class); - if (index != null) { - indexDefinitions.add(createCompoundIndexDefinition(dotPath, fallbackCollection, index, entity)); + if (index.isPresent()) { + indexDefinitions.add(createCompoundIndexDefinition(dotPath, fallbackCollection, index.get(), entity)); } return indexDefinitions; @@ -380,29 +381,33 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { protected IndexDefinitionHolder createIndexDefinition(String dotPath, String collection, MongoPersistentProperty persitentProperty) { - Indexed index = persitentProperty.findAnnotation(Indexed.class); + Optional index = persitentProperty.findAnnotation(Indexed.class); - Index indexDefinition = new Index().on(dotPath, - IndexDirection.ASCENDING.equals(index.direction()) ? Sort.Direction.ASC : Sort.Direction.DESC); - - if (!index.useGeneratedName()) { - indexDefinition.named(pathAwareIndexName(index.name(), dotPath, persitentProperty)); + if(!index.isPresent()){ + return null; } - if (index.unique()) { + Index indexDefinition = new Index().on(dotPath, + IndexDirection.ASCENDING.equals(index.get().direction()) ? Sort.Direction.ASC : Sort.Direction.DESC); + + if (!index.get().useGeneratedName()) { + indexDefinition.named(pathAwareIndexName(index.get().name(), dotPath, persitentProperty)); + } + + if (index.get().unique()) { indexDefinition.unique(); } - if (index.sparse()) { + if (index.get().sparse()) { indexDefinition.sparse(); } - if (index.background()) { + if (index.get().background()) { indexDefinition.background(); } - if (index.expireAfterSeconds() >= 0) { - indexDefinition.expire(index.expireAfterSeconds(), TimeUnit.SECONDS); + if (index.get().expireAfterSeconds() >= 0) { + indexDefinition.expire(index.get().expireAfterSeconds(), TimeUnit.SECONDS); } return new IndexDefinitionHolder(dotPath, indexDefinition, collection); @@ -420,17 +425,21 @@ public class MongoPersistentEntityIndexResolver implements IndexResolver { protected IndexDefinitionHolder createGeoSpatialIndexDefinition(String dotPath, String collection, MongoPersistentProperty persistentProperty) { - GeoSpatialIndexed index = persistentProperty.findAnnotation(GeoSpatialIndexed.class); + Optional index = persistentProperty.findAnnotation(GeoSpatialIndexed.class); - GeospatialIndex indexDefinition = new GeospatialIndex(dotPath); - indexDefinition.withBits(index.bits()); - indexDefinition.withMin(index.min()).withMax(index.max()); - - if (!index.useGeneratedName()) { - indexDefinition.named(pathAwareIndexName(index.name(), dotPath, persistentProperty)); + if(!index.isPresent()) { + return null; } - indexDefinition.typed(index.type()).withBucketSize(index.bucketSize()).withAdditionalField(index.additionalField()); + GeospatialIndex indexDefinition = new GeospatialIndex(dotPath); + indexDefinition.withBits(index.get().bits()); + indexDefinition.withMin(index.get().min()).withMax(index.get().max()); + + if (!index.get().useGeneratedName()) { + indexDefinition.named(pathAwareIndexName(index.get().name(), dotPath, persistentProperty)); + } + + indexDefinition.typed(index.get().type()).withBucketSize(index.get().bucketSize()).withAdditionalField(index.get().additionalField()); return new IndexDefinitionHolder(dotPath, indexDefinition, collection); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListener.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListener.java index 6205d27a7..bf3c56d78 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListener.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListener.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.core.mapping.event; +import java.util.Optional; + import org.springframework.beans.factory.ObjectFactory; import org.springframework.context.ApplicationListener; import org.springframework.core.Ordered; @@ -52,7 +54,7 @@ public class AuditingEventListener implements ApplicationListener event) { Object entity = event.getSource(); - auditingHandlerFactory.getObject().markAudited(entity); + auditingHandlerFactory.getObject().markAudited(Optional.ofNullable(entity)); } /* diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java index add50e92a..0273549e5 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/NearQuery.java @@ -41,8 +41,8 @@ public final class NearQuery { private Distance minDistance; private Metric metric; private boolean spherical; - private Integer num; - private Integer skip; + private Long num; + private Long skip; /** * Creates a new {@link NearQuery}. @@ -125,7 +125,7 @@ public final class NearQuery { * @param num * @return */ - public NearQuery num(int num) { + public NearQuery num(long num) { this.num = num; return this; } @@ -136,7 +136,7 @@ public final class NearQuery { * @param skip * @return */ - public NearQuery skip(int skip) { + public NearQuery skip(long skip) { this.skip = skip; return this; } @@ -380,7 +380,7 @@ public final class NearQuery { this.skip = query.getSkip(); if (query.getLimit() != 0) { - this.num = query.getLimit(); + this.num = (long) query.getLimit(); } return this; } @@ -388,7 +388,7 @@ public final class NearQuery { /** * @return the number of elements to skip. */ - public Integer getSkip() { + public Long getSkip() { return skip; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java index 14b954846..16d197bc9 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/query/Query.java @@ -49,7 +49,7 @@ public class Query { private final Map criteria = new LinkedHashMap(); private Field fieldSpec; private Sort sort; - private int skip; + private long skip; private int limit; private String hint; @@ -114,7 +114,7 @@ public class Query { * @param skip * @return */ - public Query skip(int skip) { + public Query skip(long skip) { this.skip = skip; return this; } @@ -255,7 +255,7 @@ public class Query { * * @return */ - public int getSkip() { + public long getSkip() { return this.skip; } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java index ebb10588b..072e9662e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java @@ -21,6 +21,7 @@ import static org.springframework.data.mongodb.gridfs.GridFsCriteria.*; import java.io.InputStream; import java.util.ArrayList; import java.util.List; +import java.util.Optional; import org.bson.BsonObjectId; import org.bson.Document; @@ -262,7 +263,7 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver } private Document getMappedQuery(Document query) { - return query == null ? null : queryMapper.getMappedObject(query, null); + return query == null ? null : queryMapper.getMappedObject(query, Optional.empty()); } private GridFSBucket getGridFs() { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java index 6a43fa025..6906f62f5 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryBean.java @@ -16,6 +16,7 @@ package org.springframework.data.mongodb.repository.cdi; import java.lang.annotation.Annotation; +import java.util.Optional; import java.util.Set; import javax.enterprise.context.spi.CreationalContext; @@ -49,7 +50,7 @@ public class MongoRepositoryBean extends CdiRepositoryBean { * {@link CustomRepositoryImplementationDetector}, can be {@literal null}. */ public MongoRepositoryBean(Bean operations, Set qualifiers, Class repositoryType, - BeanManager beanManager, CustomRepositoryImplementationDetector detector) { + BeanManager beanManager, Optional detector) { super(qualifiers, repositoryType, beanManager, detector); @@ -62,7 +63,7 @@ public class MongoRepositoryBean extends CdiRepositoryBean { * @see org.springframework.data.repository.cdi.CdiRepositoryBean#create(javax.enterprise.context.spi.CreationalContext, java.lang.Class) */ @Override - protected T create(CreationalContext creationalContext, Class repositoryType, Object customImplementation) { + protected T create(CreationalContext creationalContext, Class repositoryType, Optional customImplementation) { MongoOperations mongoOperations = getDependencyInstance(operations, MongoOperations.class); MongoRepositoryFactory factory = new MongoRepositoryFactory(mongoOperations); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryExtension.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryExtension.java index 690232604..b7ed7fa7a 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryExtension.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/cdi/MongoRepositoryExtension.java @@ -21,6 +21,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Map.Entry; +import java.util.Optional; import java.util.Set; import javax.enterprise.event.Observes; @@ -112,6 +113,6 @@ public class MongoRepositoryExtension extends CdiRepositoryExtensionSupport { // Construct and return the repository bean. return new MongoRepositoryBean(mongoOperations, qualifiers, repositoryType, beanManager, - getCustomImplementationDetector()); + Optional.ofNullable(getCustomImplementationDetector())); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java index d59efb045..7a97b780e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractMongoQuery.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.query; +import java.util.Optional; + import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.EntityInstantiators; import org.springframework.data.mongodb.core.MongoOperations; @@ -85,7 +87,7 @@ public abstract class AbstractMongoQuery implements RepositoryQuery { applyQueryMetaAttributesWhenPresent(query); - ResultProcessor processor = method.getResultProcessor().withDynamicProjection(accessor); + ResultProcessor processor = method.getResultProcessor().withDynamicProjection(Optional.of(accessor)); String collection = method.getEntityInformation().getCollectionName(); MongoQueryExecution execution = getExecution(query, accessor, diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java index 0a2b8e97a..07fd6d5ed 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/AbstractReactiveMongoQuery.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.query; +import java.util.Optional; + import reactor.core.publisher.Flux; import reactor.core.publisher.Mono; @@ -102,7 +104,7 @@ public abstract class AbstractReactiveMongoQuery implements RepositoryQuery { applyQueryMetaAttributesWhenPresent(query); - ResultProcessor processor = method.getResultProcessor().withDynamicProjection(parameterAccessor); + ResultProcessor processor = method.getResultProcessor().withDynamicProjection(Optional.of(parameterAccessor)); String collection = method.getEntityInformation().getCollectionName(); ReactiveMongoQueryExecution execution = getExecution(query, parameterAccessor, diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java index f49f4d69d..3e501cc5f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.Collections; import java.util.Iterator; import java.util.List; +import java.util.Optional; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Range; @@ -96,7 +97,7 @@ public class ConvertingParameterAccessor implements MongoParameterAccessor { * @see org.springframework.data.repository.query.ParameterAccessor#getDynamicProjection() */ @Override - public Class getDynamicProjection() { + public Optional> getDynamicProjection() { return delegate.getDynamicProjection(); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/DtoInstantiatingConverter.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/DtoInstantiatingConverter.java index 0aa06e5e5..f91491f95 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/DtoInstantiatingConverter.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/DtoInstantiatingConverter.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.query; +import java.util.Optional; + import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.EntityInstantiator; import org.springframework.data.convert.EntityInstantiators; @@ -58,7 +60,7 @@ class DtoInstantiatingConverter implements Converter { this.targetType = dtoType; this.context = context; - this.instantiator = instantiator.getInstantiatorFor(context.getPersistentEntity(dtoType)); + this.instantiator = instantiator.getInstantiatorFor(context.getRequiredPersistentEntity(dtoType)); } /* @@ -72,18 +74,18 @@ class DtoInstantiatingConverter implements Converter { return source; } - final PersistentEntity sourceEntity = context.getPersistentEntity(source.getClass()); + final PersistentEntity sourceEntity = context.getRequiredPersistentEntity(source.getClass()); final PersistentPropertyAccessor sourceAccessor = sourceEntity.getPropertyAccessor(source); - final PersistentEntity targetEntity = context.getPersistentEntity(targetType); + final PersistentEntity targetEntity = context.getRequiredPersistentEntity(targetType); final PreferredConstructor> constructor = targetEntity - .getPersistenceConstructor(); + .getPersistenceConstructor().get(); @SuppressWarnings({ "rawtypes", "unchecked" }) Object dto = instantiator.createInstance(targetEntity, new ParameterValueProvider() { @Override - public Object getParameterValue(Parameter parameter) { - return sourceAccessor.getProperty(sourceEntity.getPersistentProperty(parameter.getName())); + public Optional getParameterValue(Parameter parameter) { + return sourceAccessor.getProperty(sourceEntity.getPersistentProperty(parameter.getName().get().toString()).get()); } }); @@ -99,7 +101,7 @@ class DtoInstantiatingConverter implements Converter { } dtoAccessor.setProperty(property, - sourceAccessor.getProperty(sourceEntity.getPersistentProperty(property.getName()))); + sourceAccessor.getProperty(sourceEntity.getPersistentProperty(property.getName()).get())); } }); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoParameters.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoParameters.java index 7845a439f..5c0ed54b1 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoParameters.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoParameters.java @@ -190,7 +190,7 @@ public class MongoParameters extends Parameters if (componentType == null) { return i; - } else if (componentType.equals(candidate.getComponentType().getType())) { + } else if (componentType.equals(candidate.getComponentType().get().getType())) { return i; } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java index 769b2da37..401f306c9 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryCreator.java @@ -20,6 +20,7 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import java.util.Arrays; import java.util.Collection; import java.util.Iterator; +import java.util.Optional; import java.util.regex.Pattern; import org.slf4j.Logger; @@ -407,7 +408,7 @@ class MongoQueryCreator extends AbstractQueryCreator { private boolean isSpherical(MongoPersistentProperty property) { - GeoSpatialIndexed index = property.findAnnotation(GeoSpatialIndexed.class); - return index != null && index.type().equals(GeoSpatialIndexType.GEO_2DSPHERE); + Optional index = property.findAnnotation(GeoSpatialIndexed.class); + return index.isPresent() && index.get().type().equals(GeoSpatialIndexType.GEO_2DSPHERE); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java index 443ab1c71..adca90606 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java @@ -19,6 +19,7 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; import java.util.List; +import java.util.Optional; import java.util.function.Function; import org.springframework.core.convert.converter.Converter; @@ -39,7 +40,6 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.repository.query.ResultProcessor; import org.springframework.data.repository.query.ReturnedType; import org.springframework.data.repository.support.PageableExecutionUtils; -import org.springframework.data.repository.support.PageableExecutionUtils.TotalSupplier; import org.springframework.data.util.CloseableIterator; import org.springframework.data.util.StreamUtils; import org.springframework.data.util.TypeInformation; @@ -140,17 +140,14 @@ interface MongoQueryExecution { // Adjust limit if page would exceed the overall limit if (overallLimit != 0 && pageable.getOffset() + pageable.getPageSize() > overallLimit) { - query.limit(overallLimit - pageable.getOffset()); + query.limit((int)(overallLimit - pageable.getOffset())); } - return PageableExecutionUtils.getPage(operations.find(query, type, collection), pageable, new TotalSupplier() { - - @Override - public long get() { + return PageableExecutionUtils.getPage(operations.find(query, type, collection), pageable, () -> { long count = operations.count(query, type, collection); return overallLimit != 0 ? Math.min(count, overallLimit) : count; - } + }); } } @@ -279,8 +276,8 @@ interface MongoQueryExecution { return false; } - TypeInformation componentType = returnType.getComponentType(); - return componentType != null && GeoResult.class.equals(componentType.getType()); + Optional> componentType = returnType.getComponentType(); + return componentType.isPresent() && GeoResult.class.equals(componentType.get().getType()); } } @@ -316,10 +313,8 @@ interface MongoQueryExecution { GeoResults geoResults = doExecuteQuery(query, type, collection); Page> page = PageableExecutionUtils.getPage(geoResults.getContent(), accessor.getPageable(), - new TotalSupplier() { + () -> { - @Override - public long get() { ConvertingParameterAccessor parameterAccessor = new ConvertingParameterAccessor(operations.getConverter(), accessor); @@ -327,7 +322,7 @@ interface MongoQueryExecution { .applyQueryMetaAttributesWhenPresent(mongoQuery.createCountQuery(parameterAccessor)); return operations.count(countQuery, collection); - } + }); // transform to GeoPage after applying optimization diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java index 731b3fdaf..55e4b4aff 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryMethod.java @@ -19,6 +19,7 @@ import java.io.Serializable; import java.lang.reflect.Method; import java.util.Arrays; import java.util.List; +import java.util.Optional; import org.springframework.core.annotation.AnnotatedElementUtils; import org.springframework.core.annotation.AnnotationUtils; @@ -134,18 +135,18 @@ public class MongoQueryMethod extends QueryMethod { if (ClassUtils.isPrimitiveOrWrapper(returnedObjectType)) { this.metadata = new SimpleMongoEntityMetadata((Class) domainClass, - mappingContext.getPersistentEntity(domainClass)); + mappingContext.getRequiredPersistentEntity(domainClass)); } else { - MongoPersistentEntity returnedEntity = mappingContext.getPersistentEntity(returnedObjectType); - MongoPersistentEntity managedEntity = mappingContext.getPersistentEntity(domainClass); - returnedEntity = returnedEntity == null || returnedEntity.getType().isInterface() ? managedEntity + Optional> returnedEntity = mappingContext.getPersistentEntity(returnedObjectType); + MongoPersistentEntity managedEntity = mappingContext.getRequiredPersistentEntity(domainClass); + returnedEntity = !returnedEntity.isPresent() || returnedEntity.get().getType().isInterface() ? Optional.of(managedEntity) : returnedEntity; - MongoPersistentEntity collectionEntity = domainClass.isAssignableFrom(returnedObjectType) ? returnedEntity + MongoPersistentEntity collectionEntity = domainClass.isAssignableFrom(returnedObjectType) ? returnedEntity.get() : managedEntity; - this.metadata = new SimpleMongoEntityMetadata((Class) returnedEntity.getType(), + this.metadata = new SimpleMongoEntityMetadata((Class) returnedEntity.get().getType(), collectionEntity); } } @@ -183,7 +184,7 @@ public class MongoQueryMethod extends QueryMethod { if (Iterable.class.isAssignableFrom(returnType)) { TypeInformation from = ClassTypeInformation.fromReturnTypeOf(method); - return GeoResult.class.equals(from.getComponentType().getType()); + return GeoResult.class.equals(from.getComponentType().get().getType()); } return false; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java index f036e6055..6a5ac71f4 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/PartTreeMongoQuery.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.query; +import java.util.Optional; + import com.mongodb.BasicDBObject; import com.mongodb.DBObject; import com.mongodb.util.JSON; @@ -99,7 +101,7 @@ public class PartTreeMongoQuery extends AbstractMongoQuery { if (!StringUtils.hasText(fieldSpec)) { - ReturnedType returnedType = processor.withDynamicProjection(accessor).getReturnedType(); + ReturnedType returnedType = processor.withDynamicProjection(Optional.of(accessor)).getReturnedType(); if (returnedType.isProjecting()) { diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecution.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecution.java index aca3e3809..03da22d14 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecution.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryExecution.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.query; +import java.util.Optional; + import org.springframework.core.convert.converter.Converter; import org.springframework.data.convert.EntityInstantiators; import org.springframework.data.domain.Pageable; @@ -163,8 +165,8 @@ interface ReactiveMongoQueryExecution { return false; } - TypeInformation componentType = returnType.getComponentType(); - return componentType != null && GeoResult.class.equals(componentType.getType()); + Optional> componentType = returnType.getComponentType(); + return componentType.isPresent() && GeoResult.class.equals(componentType.get().getType()); } } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethod.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethod.java index 37be1491a..add7c413e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethod.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactiveMongoQueryMethod.java @@ -70,8 +70,8 @@ public class ReactiveMongoQueryMethod extends MongoQueryMethod { boolean multiWrapper = ReactiveWrappers.isMultiValueType(returnType.getType()); boolean singleWrapperWithWrappedPageableResult = ReactiveWrappers.isSingleValueType(returnType.getType()) - && (PAGE_TYPE.isAssignableFrom(returnType.getComponentType()) - || SLICE_TYPE.isAssignableFrom(returnType.getComponentType())); + && (PAGE_TYPE.isAssignableFrom(returnType.getComponentType().get()) + || SLICE_TYPE.isAssignableFrom(returnType.getComponentType().get())); if (singleWrapperWithWrappedPageableResult) { throw new InvalidDataAccessApiUsageException( @@ -125,7 +125,7 @@ public class ReactiveMongoQueryMethod extends MongoQueryMethod { if (ReactiveWrappers.supports(method.getReturnType())) { TypeInformation from = ClassTypeInformation.fromReturnTypeOf(method); - return GeoResult.class.equals(from.getComponentType().getType()); + return GeoResult.class.equals(from.getComponentType().get().getType()); } return false; diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java index e61bd8750..0aab32d1c 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ReactivePartTreeMongoQuery.java @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.repository.query; +import java.util.Optional; + import org.bson.Document; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mongodb.core.MongoTemplate; @@ -94,7 +96,7 @@ public class ReactivePartTreeMongoQuery extends AbstractReactiveMongoQuery { if (!StringUtils.hasText(fieldSpec)) { - ReturnedType returnedType = processor.withDynamicProjection(accessor).getReturnedType(); + ReturnedType returnedType = processor.withDynamicProjection(Optional.of(accessor)).getReturnedType(); if (returnedType.isProjecting()) { returnedType.getInputProperties().forEach(query.fields()::include); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MappingMongoEntityInformation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MappingMongoEntityInformation.java index 7d6191fbd..b141894be 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MappingMongoEntityInformation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MappingMongoEntityInformation.java @@ -98,7 +98,7 @@ public class MappingMongoEntityInformation extends P * @see org.springframework.data.mongodb.repository.MongoEntityInformation#getIdAttribute() */ public String getIdAttribute() { - return entityMetadata.getIdProperty().getName(); + return entityMetadata.getIdProperty().get().getName(); } /* diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java index 7adc158b7..a986ef302 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactory.java @@ -15,10 +15,11 @@ */ package org.springframework.data.mongodb.repository.support; -import static org.springframework.data.querydsl.QueryDslUtils.*; +import static org.springframework.data.querydsl.QuerydslUtils.*; import java.io.Serializable; import java.lang.reflect.Method; +import java.util.Optional; import org.springframework.dao.InvalidDataAccessApiUsageException; import org.springframework.data.mapping.context.MappingContext; @@ -32,7 +33,7 @@ import org.springframework.data.mongodb.repository.query.MongoQueryMethod; import org.springframework.data.mongodb.repository.query.PartTreeMongoQuery; import org.springframework.data.mongodb.repository.query.StringBasedMongoQuery; import org.springframework.data.projection.ProjectionFactory; -import org.springframework.data.querydsl.QueryDslPredicateExecutor; +import org.springframework.data.querydsl.QuerydslPredicateExecutor; import org.springframework.data.repository.core.NamedQueries; import org.springframework.data.repository.core.RepositoryInformation; import org.springframework.data.repository.core.RepositoryMetadata; @@ -96,7 +97,7 @@ public class MongoRepositoryFactory extends RepositoryFactorySupport { RXJAVA_OBSERVABLE_PRESENT && RxJava1CrudRepository.class.isAssignableFrom(metadata.getRepositoryInterface())); boolean isQueryDslRepository = QUERY_DSL_PRESENT - && QueryDslPredicateExecutor.class.isAssignableFrom(metadata.getRepositoryInterface()); + && QuerydslPredicateExecutor.class.isAssignableFrom(metadata.getRepositoryInterface()); if (isReactiveRepository) { @@ -126,8 +127,8 @@ public class MongoRepositoryFactory extends RepositoryFactorySupport { * @see org.springframework.data.repository.core.support.RepositoryFactorySupport#getQueryLookupStrategy(org.springframework.data.repository.query.QueryLookupStrategy.Key, org.springframework.data.repository.query.EvaluationContextProvider) */ @Override - protected QueryLookupStrategy getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { - return new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext); + protected Optional getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { + return Optional.of(new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext)); } /* @@ -142,13 +143,7 @@ public class MongoRepositoryFactory extends RepositoryFactorySupport { private MongoEntityInformation getEntityInformation(Class domainClass, RepositoryInformation information) { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(domainClass); - - if (entity == null) { - throw new MappingException( - String.format("Could not lookup mapping metadata for domain class %s!", domainClass.getName())); - } - + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(domainClass); return MongoEntityInformationSupport. entityInformationFor(entity, information != null ? information.getIdType() : null); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/PersistableMongoEntityInformation.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/PersistableMongoEntityInformation.java index 99305f4b4..21a8e8adc 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/PersistableMongoEntityInformation.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/PersistableMongoEntityInformation.java @@ -19,6 +19,7 @@ import lombok.NonNull; import lombok.RequiredArgsConstructor; import java.io.Serializable; +import java.util.Optional; import org.springframework.data.domain.Persistable; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; @@ -76,10 +77,10 @@ class PersistableMongoEntityInformation implements M */ @Override @SuppressWarnings("unchecked") - public ID getId(T t) { + public Optional getId(T t) { if (t instanceof Persistable) { - return (ID) ((Persistable) t).getId(); + return Optional.ofNullable(((Persistable) t).getId()); } return delegate.getId(t); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QueryDslMongoRepository.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QueryDslMongoRepository.java index 59d22ea81..984a0c9ef 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QueryDslMongoRepository.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QueryDslMongoRepository.java @@ -27,12 +27,11 @@ import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; import org.springframework.data.querydsl.EntityPathResolver; import org.springframework.data.querydsl.QSort; -import org.springframework.data.querydsl.QueryDslPredicateExecutor; +import org.springframework.data.querydsl.QuerydslPredicateExecutor; import org.springframework.data.querydsl.SimpleEntityPathResolver; import org.springframework.data.repository.core.EntityInformation; import org.springframework.data.repository.core.EntityMetadata; import org.springframework.data.repository.support.PageableExecutionUtils; -import org.springframework.data.repository.support.PageableExecutionUtils.TotalSupplier; import org.springframework.util.Assert; import com.querydsl.core.types.EntityPath; @@ -50,7 +49,7 @@ import com.querydsl.mongodb.AbstractMongodbQuery; * @author Mark Paluch */ public class QueryDslMongoRepository extends SimpleMongoRepository - implements QueryDslPredicateExecutor { + implements QuerydslPredicateExecutor { private final PathBuilder builder; private final EntityInformation entityInformation; @@ -144,13 +143,7 @@ public class QueryDslMongoRepository extends SimpleM AbstractMongodbQuery> query = createQueryFor(predicate); - return PageableExecutionUtils.getPage(applyPagination(query, pageable).fetchResults().getResults(), pageable, new TotalSupplier() { - - @Override - public long get() { - return createQueryFor(predicate).fetchCount(); - } - }); + return PageableExecutionUtils.getPage(applyPagination(query, pageable).fetchResults().getResults(), pageable, () -> createQueryFor(predicate).fetchCount()); } /* @@ -162,13 +155,7 @@ public class QueryDslMongoRepository extends SimpleM AbstractMongodbQuery> query = createQuery(); - return PageableExecutionUtils.getPage(applyPagination(query, pageable).fetchResults().getResults(), pageable, new TotalSupplier() { - - @Override - public long get() { - return createQuery().fetchCount(); - } - }); + return PageableExecutionUtils.getPage(applyPagination(query, pageable).fetchResults().getResults(), pageable, () -> createQuery().fetchCount()); } /* diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupport.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupport.java index bbfe8dd9b..8da612321 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupport.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/QuerydslRepositorySupport.java @@ -57,8 +57,7 @@ public abstract class QuerydslRepositorySupport { protected AbstractMongodbQuery> from(final EntityPath path) { Assert.notNull(path, "EntityPath must not be null!"); - - MongoPersistentEntity entity = context.getPersistentEntity(path.getType()); + MongoPersistentEntity entity = context.getRequiredPersistentEntity(path.getType()); return from(path, entity.getCollection()); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java index 89cb9e7e9..5fc227afa 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/ReactiveMongoRepositoryFactory.java @@ -20,6 +20,7 @@ import lombok.RequiredArgsConstructor; import java.io.Serializable; import java.lang.reflect.Method; +import java.util.Optional; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.model.MappingException; @@ -97,8 +98,8 @@ public class ReactiveMongoRepositoryFactory extends ReactiveRepositoryFactorySup * @see org.springframework.data.repository.core.support.RepositoryFactorySupport#getQueryLookupStrategy(org.springframework.data.repository.query.QueryLookupStrategy.Key, org.springframework.data.repository.query.EvaluationContextProvider) */ @Override - protected QueryLookupStrategy getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { - return new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext); + protected Optional getQueryLookupStrategy(Key key, EvaluationContextProvider evaluationContextProvider) { + return Optional.of(new MongoQueryLookupStrategy(operations, evaluationContextProvider, mappingContext)); } /* @@ -113,14 +114,14 @@ public class ReactiveMongoRepositoryFactory extends ReactiveRepositoryFactorySup private MongoEntityInformation getEntityInformation(Class domainClass, RepositoryInformation information) { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(domainClass); + Optional> entity = mappingContext.getPersistentEntity(domainClass); - if (entity == null) { + if (!entity.isPresent()) { throw new MappingException( String.format("Could not lookup mapping metadata for domain class %s!", domainClass.getName())); } - return new MappingMongoEntityInformation((MongoPersistentEntity) entity, + return new MappingMongoEntityInformation((MongoPersistentEntity) entity.get(), information != null ? (Class) information.getIdType() : null); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepository.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepository.java index c6549dff6..e74fc719b 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepository.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepository.java @@ -23,6 +23,7 @@ import java.util.Collection; import java.util.Collections; import java.util.HashSet; import java.util.List; +import java.util.Optional; import java.util.Set; import org.springframework.data.domain.Example; @@ -37,7 +38,6 @@ import org.springframework.data.mongodb.core.query.Query; import org.springframework.data.mongodb.repository.MongoRepository; import org.springframework.data.mongodb.repository.query.MongoEntityInformation; import org.springframework.data.repository.support.PageableExecutionUtils; -import org.springframework.data.repository.support.PageableExecutionUtils.TotalSupplier; import org.springframework.util.Assert; /** @@ -118,9 +118,9 @@ public class SimpleMongoRepository implements MongoR * (non-Javadoc) * @see org.springframework.data.repository.CrudRepository#findOne(java.io.Serializable) */ - public T findOne(ID id) { + public Optional findOne(ID id) { Assert.notNull(id, "The given id must not be null!"); - return mongoOperations.findById(id, entityInformation.getJavaType(), entityInformation.getCollectionName()); + return Optional.ofNullable(mongoOperations.findById(id, entityInformation.getJavaType(), entityInformation.getCollectionName())); } private Query getIdQuery(Object id) { @@ -165,7 +165,7 @@ public class SimpleMongoRepository implements MongoR */ public void delete(T entity) { Assert.notNull(entity, "The given entity must not be null!"); - delete(entityInformation.getId(entity)); + delete(entityInformation.getId(entity).orElse(null)); } /* @@ -275,13 +275,9 @@ public class SimpleMongoRepository implements MongoR final Query q = new Query(new Criteria().alike(example)).with(pageable); List list = mongoOperations.find(q, example.getProbeType(), entityInformation.getCollectionName()); - return PageableExecutionUtils.getPage(list, pageable, new TotalSupplier() { - - @Override - public long get() { - return mongoOperations.count(q, example.getProbeType(), entityInformation.getCollectionName()); - } - }); + return PageableExecutionUtils.getPage(list, pageable, () -> + mongoOperations.count(q, example.getProbeType(), entityInformation.getCollectionName()) + ); } /* diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepository.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepository.java index 7c8fb1a9d..a1ae5c790 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepository.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SimpleReactiveMongoRepository.java @@ -272,7 +272,7 @@ public class SimpleReactiveMongoRepository implement Assert.notNull(entity, "The given entity must not be null!"); - return delete(entityInformation.getId(entity)); + return delete(entityInformation.getId(entity).get()); } // TODO: should this one really be void? @@ -280,7 +280,7 @@ public class SimpleReactiveMongoRepository implement Assert.notNull(entities, "The given Iterable of entities must not be null!"); - return Flux.fromIterable(entities).flatMap(entity -> delete(entityInformation.getId(entity))).then(); + return Flux.fromIterable(entities).flatMap(entity -> delete(entityInformation.getId(entity).get())).then(); } // TODO: should this one really be void? @@ -289,7 +289,7 @@ public class SimpleReactiveMongoRepository implement Assert.notNull(entityStream, "The given Publisher of entities must not be null!"); - return Flux.from(entityStream).flatMap(entity -> delete(entityInformation.getId(entity))).then(); + return Flux.from(entityStream).flatMap(entity -> delete(entityInformation.getId(entity).get())).then(); } // TODO: should this one really be void? diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java index e8d0db8c8..c6df324ec 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/support/SpringDataMongodbSerializer.java @@ -17,6 +17,7 @@ package org.springframework.data.mongodb.repository.support; import java.util.Collections; import java.util.HashSet; +import java.util.Optional; import java.util.Set; import java.util.regex.Pattern; @@ -106,10 +107,10 @@ class SpringDataMongodbSerializer extends MongodbSerializer { } Path parent = metadata.getParent(); - MongoPersistentEntity entity = mappingContext.getPersistentEntity(parent.getType()); - MongoPersistentProperty property = entity.getPersistentProperty(metadata.getName()); + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(parent.getType()); + Optional property = entity.getPersistentProperty(metadata.getName()); - return property == null ? super.getKeyForPath(expr, metadata) : property.getFieldName(); + return !property.isPresent() ? super.getKeyForPath(expr, metadata) : property.get().getFieldName(); } /* @@ -121,7 +122,7 @@ class SpringDataMongodbSerializer extends MongodbSerializer { if (ID_KEY.equals(key)) { DBObject superIdValue = super.asDBObject(key, value); - Document mappedIdValue = mapper.getMappedObject((BasicDBObject) superIdValue, null); + Document mappedIdValue = mapper.getMappedObject((BasicDBObject) superIdValue, Optional.empty()); return (DBObject) JSON.parse(mappedIdValue.toJson()); } return super.asDBObject(key, value instanceof Pattern ? value : converter.convertToMongoType(value)); @@ -200,8 +201,8 @@ class SpringDataMongodbSerializer extends MongodbSerializer { return null; } - MongoPersistentEntity entity = mappingContext.getPersistentEntity(parent.getType()); - return entity != null ? entity.getPersistentProperty(path.getMetadata().getName()) : null; + Optional> entity = mappingContext.getPersistentEntity(parent.getType()); + return entity.isPresent() ? entity.get().getRequiredPersistentProperty(path.getMetadata().getName()) : null; } /** diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java index d221f4a8c..5642c5343 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractMongoConfigurationUnitTests.java @@ -106,7 +106,7 @@ public class AbstractMongoConfigurationUnitTests { AbstractApplicationContext context = new AnnotationConfigApplicationContext(SampleMongoConfiguration.class); MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class); - BasicMongoPersistentEntity entity = mappingContext.getPersistentEntity(Entity.class); + BasicMongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(Entity.class); StandardEvaluationContext spElContext = (StandardEvaluationContext) ReflectionTestUtils.getField(entity, "context"); assertThat(spElContext.getBeanResolver(), is(notNullValue())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java index 75a0c6bb3..5bfaafc23 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AbstractReactiveMongoConfigurationUnitTests.java @@ -106,7 +106,7 @@ public class AbstractReactiveMongoConfigurationUnitTests { AbstractApplicationContext context = new AnnotationConfigApplicationContext(SampleMongoConfiguration.class); MongoMappingContext mappingContext = context.getBean(MongoMappingContext.class); - BasicMongoPersistentEntity entity = mappingContext.getPersistentEntity(Entity.class); + BasicMongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(Entity.class); StandardEvaluationContext spElContext = (StandardEvaluationContext) ReflectionTestUtils.getField(entity, "context"); assertThat(spElContext.getBeanResolver(), is(notNullValue())); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsUnitTests.java index 3a42d7212..84fb1bb43 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/DefaultScriptOperationsUnitTests.java @@ -16,7 +16,6 @@ package org.springframework.data.mongodb.core; import static org.hamcrest.core.IsNull.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import org.junit.Assert; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoDbUtilsUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoDbUtilsUnitTests.java index e92d77294..6e9da53ed 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoDbUtilsUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoDbUtilsUnitTests.java @@ -18,7 +18,6 @@ package org.springframework.data.mongodb.core; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; import static org.junit.Assume.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.List; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java index 857c17401..f2651f77a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateUnitTests.java @@ -17,12 +17,12 @@ package org.springframework.data.mongodb.core; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.math.BigInteger; import java.util.Collections; import java.util.List; +import java.util.Optional; import java.util.regex.Pattern; import org.bson.Document; @@ -196,7 +196,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { template.updateFirst(query, update, Wrapper.class); QueryMapper queryMapper = new QueryMapper(converter); - Document reference = queryMapper.getMappedObject(update.getUpdateObject(), null); + Document reference = queryMapper.getMappedObject(update.getUpdateObject(), Optional.empty()); verify(collection, times(1)).updateOne(Mockito.any(org.bson.Document.class), eq(reference), Mockito.any(UpdateOptions.class)); // .update(Mockito.any(Document.class), eq(reference), anyBoolean(), @@ -278,13 +278,8 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { verify(spy, times(1)).addApplicationListener(argThat(new ArgumentMatcher() { @Override - public boolean matches(Object argument) { - - if (!(argument instanceof MongoPersistentEntityIndexCreator)) { - return false; - } - - return ((MongoPersistentEntityIndexCreator) argument).isIndexCreatorFor(mappingContext); + public boolean matches(MongoPersistentEntityIndexCreator argument) { + return argument.isIndexCreatorFor(mappingContext); } })); } @@ -574,7 +569,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { private MongoTemplate mockOutGetDb() { MongoTemplate template = spy(this.template); - stub(template.getDb()).toReturn(db); + when(template.getDb()).thenReturn(db); return template; } @@ -584,7 +579,7 @@ public class MongoTemplateUnitTests extends MongoOperationsUnitTests { @Override protected MongoOperations getOperationsForExceptionHandling() { MongoTemplate template = spy(this.template); - stub(template.getDb()).toThrow(new MongoException("Error!")); + when(template.getDb()).thenThrow(new MongoException("Error!")); return template; } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/NoExplicitIdTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/NoExplicitIdTests.java index e61358033..971790bd8 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/NoExplicitIdTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/NoExplicitIdTests.java @@ -21,6 +21,7 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; import java.util.Map; +import java.util.Optional; import org.junit.Before; import org.junit.Test; @@ -106,8 +107,8 @@ public class NoExplicitIdTests { Map map = mongoOps.findOne(query(where("someString").is(noid.someString)), Map.class, "typeWithoutIdProperty"); - TypeWithoutIdProperty retrieved = repo.findOne(map.get("_id").toString()); - assertThat(retrieved.someString, is(noid.someString)); + Optional retrieved = repo.findOne(map.get("_id").toString()); + assertThat(retrieved.get().someString, is(noid.someString)); } static class TypeWithoutIdProperty { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java index 9bd2a46a6..126c3c40a 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/QueryCursorPreparerUnitTests.java @@ -17,7 +17,6 @@ package org.springframework.data.mongodb.core; import static org.hamcrest.core.IsEqual.*; import static org.junit.Assert.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConvertersUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConvertersUnitTests.java index 8ca5cae34..736c44af7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConvertersUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/CustomConvertersUnitTests.java @@ -15,7 +15,6 @@ */ package org.springframework.data.mongodb.core.convert; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.Arrays; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java index 6f045d652..bc03c9f14 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DbRefMappingMongoConverterUnitTests.java @@ -17,8 +17,6 @@ package org.springframework.data.mongodb.core.convert; import static org.hamcrest.CoreMatchers.*; import static org.junit.Assert.*; -import static org.mockito.Matchers.*; -import static org.mockito.Matchers.any; import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.core.convert.LazyLoadingTestUtils.*; @@ -473,9 +471,9 @@ public class DbRefMappingMongoConverterUnitTests { @Test // DATAMONGO-1012 public void shouldEagerlyResolveIdPropertyWithFieldAccess() { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(ClassWithLazyDbRefs.class); - MongoPersistentProperty property = entity.getPersistentProperty("dbRefToConcreteType"); - MongoPersistentEntity propertyEntity = mappingContext.getPersistentEntity(property); + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(ClassWithLazyDbRefs.class); + MongoPersistentProperty property = entity.getRequiredPersistentProperty("dbRefToConcreteType"); + MongoPersistentEntity propertyEntity = mappingContext.getRequiredPersistentEntity(property); String idValue = new ObjectId().toString(); DBRef dbRef = converter.toDBRef(new LazyDbRefTarget(idValue), property); @@ -485,7 +483,7 @@ public class DbRefMappingMongoConverterUnitTests { ClassWithLazyDbRefs result = converter.read(ClassWithLazyDbRefs.class, object); PersistentPropertyAccessor accessor = propertyEntity.getPropertyAccessor(result.dbRefToConcreteType); - MongoPersistentProperty idProperty = mappingContext.getPersistentEntity(LazyDbRefTarget.class).getIdProperty(); + MongoPersistentProperty idProperty = mappingContext.getRequiredPersistentEntity(LazyDbRefTarget.class).getIdProperty().get(); assertThat(accessor.getProperty(idProperty), is(notNullValue())); assertProxyIsResolved(result.dbRefToConcreteType, false); @@ -494,8 +492,8 @@ public class DbRefMappingMongoConverterUnitTests { @Test // DATAMONGO-1012 public void shouldNotEagerlyResolveIdPropertyWithPropertyAccess() { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(ClassWithLazyDbRefs.class); - MongoPersistentProperty property = entity.getPersistentProperty("dbRefToConcreteTypeWithPropertyAccess"); + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(ClassWithLazyDbRefs.class); + MongoPersistentProperty property = entity.getRequiredPersistentProperty("dbRefToConcreteTypeWithPropertyAccess"); String idValue = new ObjectId().toString(); DBRef dbRef = converter.toDBRef(new LazyDbRefTargetPropertyAccess(idValue), property); @@ -512,8 +510,8 @@ public class DbRefMappingMongoConverterUnitTests { @Test // DATAMONGO-1076 public void shouldNotTriggerResolvingOfLazyLoadedProxyWhenFinalizeMethodIsInvoked() throws Exception { - MongoPersistentEntity entity = mappingContext.getPersistentEntity(WithObjectMethodOverrideLazyDbRefs.class); - MongoPersistentProperty property = entity.getPersistentProperty("dbRefToConcreteTypeWithPropertyAccess"); + MongoPersistentEntity entity = mappingContext.getRequiredPersistentEntity(WithObjectMethodOverrideLazyDbRefs.class); + MongoPersistentProperty property = entity.getRequiredPersistentProperty("dbRefToConcreteTypeWithPropertyAccess"); String idValue = new ObjectId().toString(); DBRef dbRef = converter.toDBRef(new LazyDbRefTargetPropertyAccess(idValue), property); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverUnitTests.java index d0e82852a..e1cc440f5 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultDbRefResolverUnitTests.java @@ -18,7 +18,6 @@ package org.springframework.data.mongodb.core.convert; import static org.hamcrest.Matchers.*; import static org.hamcrest.Matchers.contains; import static org.junit.Assert.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.Arrays; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapperUnitTests.java index a927a574c..336c58119 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/DefaultMongoTypeMapperUnitTests.java @@ -21,6 +21,7 @@ import static org.junit.Assert.*; import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Optional; import org.bson.Document; import org.junit.Before; @@ -186,13 +187,13 @@ public class DefaultMongoTypeMapperUnitTests { private void readsTypeFromField(Document document, Class type) { - TypeInformation typeInfo = typeMapper.readType(document); + Optional> typeInfo = typeMapper.readType(document); if (type != null) { assertThat(typeInfo, is(notNullValue())); - assertThat(typeInfo.getType(), is(typeCompatibleWith(type))); + assertThat(typeInfo.get().getType(), is(typeCompatibleWith(type))); } else { - assertThat(typeInfo, is(nullValue())); + assertThat(typeInfo, is(Optional.empty())); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java index 237c174f1..555e88ddc 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/QueryMapperUnitTests.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; +import java.util.Optional; import org.bson.types.ObjectId; import org.hamcrest.core.Is; @@ -94,7 +95,7 @@ public class QueryMapperUnitTests { public void translatesIdPropertyIntoIdKey() { org.bson.Document query = new org.bson.Document("foo", "value"); - MongoPersistentEntity entity = context.getPersistentEntity(Sample.class); + MongoPersistentEntity entity = context.getRequiredPersistentEntity(Sample.class); org.bson.Document result = mapper.getMappedObject(query, entity); assertThat(result.get("_id"), is(notNullValue())); @@ -142,7 +143,7 @@ public class QueryMapperUnitTests { @Test // DATAMONGO-326 public void handlesEnumsCorrectly() { Query query = query(where("foo").is(Enum.INSTANCE)); - org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); Object object = result.get("foo"); assertThat(object, is(instanceOf(String.class))); @@ -151,7 +152,7 @@ public class QueryMapperUnitTests { @Test public void handlesEnumsInNotEqualCorrectly() { Query query = query(where("foo").ne(Enum.INSTANCE)); - org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); Object object = result.get("foo"); assertThat(object, is(instanceOf(org.bson.Document.class))); @@ -165,7 +166,7 @@ public class QueryMapperUnitTests { public void handlesEnumsIn$InCorrectly() { Query query = query(where("foo").in(Enum.INSTANCE)); - org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); Object object = result.get("foo"); assertThat(object, is(instanceOf(org.bson.Document.class))); @@ -183,7 +184,7 @@ public class QueryMapperUnitTests { public void handlesNativelyBuiltQueryCorrectly() { DBObject query = new QueryBuilder().or(new BasicDBObject("foo", "bar")).get(); - mapper.getMappedObject(new org.bson.Document(query.toMap()), null); + mapper.getMappedObject(new org.bson.Document(query.toMap()), Optional.empty()); } @Test // DATAMONGO-369 @@ -193,7 +194,7 @@ public class QueryMapperUnitTests { query.put("foo", new org.bson.Document("$in", Arrays.asList(1, 2))); query.put("bar", new Person()); - org.bson.Document result = mapper.getMappedObject(query, null); + org.bson.Document result = mapper.getMappedObject(query, Optional.empty()); assertThat(result.get("bar"), is(notNullValue())); } @@ -202,7 +203,7 @@ public class QueryMapperUnitTests { Query query = new BasicQuery("{ 'tags' : { '$all' : [ 'green', 'orange']}}"); - org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); assertThat(result.toJson(), is(query.getQueryObject().toJson())); } @@ -212,7 +213,7 @@ public class QueryMapperUnitTests { org.bson.Document document = new org.bson.Document("id", new ObjectId().toString()); document.put("nested", new org.bson.Document("id", new ObjectId().toString())); - MongoPersistentEntity entity = context.getPersistentEntity(ClassWithDefaultId.class); + MongoPersistentEntity entity = context.getRequiredPersistentEntity(ClassWithDefaultId.class); org.bson.Document result = mapper.getMappedObject(document, entity); assertThat(result.get("_id"), is(instanceOf(ObjectId.class))); @@ -354,7 +355,7 @@ public class QueryMapperUnitTests { String id = new ObjectId().toString(); Query query = query(where("id").is(id)); - org.bson.Document object = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document object = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); assertThat(object.containsKey("id"), is(true)); assertThat(object.get("id"), is((Object) id)); @@ -382,7 +383,7 @@ public class QueryMapperUnitTests { org.bson.Document document = new org.bson.Document().append("_id", new ObjectId().toString()); - org.bson.Document mapped = mapper.getMappedObject(document, null); + org.bson.Document mapped = mapper.getMappedObject(document, Optional.empty()); assertThat(mapped.containsKey("_id"), is(true)); assertThat(mapped.get("_id"), is(instanceOf(ObjectId.class))); } @@ -392,7 +393,7 @@ public class QueryMapperUnitTests { Query query = query(where("reference").exists(false)); - BasicMongoPersistentEntity entity = context.getPersistentEntity(WithDBRef.class); + BasicMongoPersistentEntity entity = context.getRequiredPersistentEntity(WithDBRef.class); org.bson.Document mappedObject = mapper.getMappedObject(query.getQueryObject(), entity); org.bson.Document reference = getAsDocument(mappedObject, "reference"); @@ -408,7 +409,7 @@ public class QueryMapperUnitTests { Query query = query(where("someString").is("foo").andOperator(where("reference").in(reference))); - BasicMongoPersistentEntity entity = context.getPersistentEntity(WithDBRef.class); + BasicMongoPersistentEntity entity = context.getRequiredPersistentEntity(WithDBRef.class); org.bson.Document mappedObject = mapper.getMappedObject(query.getQueryObject(), entity); assertThat(mappedObject.get("someString"), is((Object) "foo")); @@ -426,7 +427,7 @@ public class QueryMapperUnitTests { Query query = query(where("myvalue").is("$334")); - org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); assertThat(result.keySet(), hasSize(1)); assertThat(result.get("myvalue"), is((Object) "$334")); @@ -437,7 +438,7 @@ public class QueryMapperUnitTests { Query query = query(where("myvalue").is("$center")); - org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), null); + org.bson.Document result = mapper.getMappedObject(query.getQueryObject(), Optional.empty()); assertThat(result.keySet(), hasSize(1)); assertThat(result.get("myvalue"), is((Object) "$center")); @@ -449,7 +450,7 @@ public class QueryMapperUnitTests { Query query = query(where("someString").is("foo")); query.fields().exclude("reference"); - BasicMongoPersistentEntity entity = context.getPersistentEntity(WithDBRef.class); + BasicMongoPersistentEntity entity = context.getRequiredPersistentEntity(WithDBRef.class); org.bson.Document queryResult = mapper.getMappedObject(query.getQueryObject(), entity); org.bson.Document fieldsResult = mapper.getMappedObject(query.getFieldsObject(), entity); @@ -460,8 +461,8 @@ public class QueryMapperUnitTests { @Test // DATAMONGO-686 public void queryMapperShouldNotChangeStateInGivenQueryObjectWhenIdConstrainedByInList() { - BasicMongoPersistentEntity persistentEntity = context.getPersistentEntity(Sample.class); - String idPropertyName = persistentEntity.getIdProperty().getName(); + BasicMongoPersistentEntity persistentEntity = context.getRequiredPersistentEntity(Sample.class); + String idPropertyName = persistentEntity.getIdProperty().get().getName(); org.bson.Document queryObject = query(where(idPropertyName).in("42")).getQueryObject(); Object idValuesBefore = getAsDocument(queryObject, idPropertyName).get("$in"); @@ -518,7 +519,7 @@ public class QueryMapperUnitTests { @Test // DATAMONGO-773 public void queryMapperShouldBeAbleToProcessQueriesThatIncludeDbRefFields() { - BasicMongoPersistentEntity persistentEntity = context.getPersistentEntity(WithDBRef.class); + BasicMongoPersistentEntity persistentEntity = context.getRequiredPersistentEntity(WithDBRef.class); Query qry = query(where("someString").is("abc")); qry.fields().include("reference"); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java index 0af84779b..3b706803d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/ReflectiveDBRefResolverUnitTests.java @@ -19,7 +19,6 @@ import static org.hamcrest.core.Is.*; import static org.hamcrest.core.IsNull.*; import static org.junit.Assert.*; import static org.junit.Assume.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import static org.springframework.data.mongodb.util.MongoClientVersion.*; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreatorUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreatorUnitTests.java index 05f377dd5..4ee0dceeb 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreatorUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexCreatorUnitTests.java @@ -113,7 +113,7 @@ public class MongoPersistentEntityIndexCreatorUnitTests { MongoPersistentEntityIndexCreator creator = new MongoPersistentEntityIndexCreator(mappingContext, mongoTemplate); - MongoPersistentEntity entity = personMappingContext.getPersistentEntity(Person.class); + MongoPersistentEntity entity = personMappingContext.getRequiredPersistentEntity(Person.class); MappingContextEvent, MongoPersistentProperty> event = new MappingContextEvent, MongoPersistentProperty>( personMappingContext, entity); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java index 3626596cb..aece9c4c0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/index/MongoPersistentEntityIndexResolverUnitTests.java @@ -1178,7 +1178,7 @@ public class MongoPersistentEntityIndexResolverUnitTests { MongoMappingContext mappingContext = prepareMappingContext(type); MongoPersistentEntityIndexResolver resolver = new MongoPersistentEntityIndexResolver(mappingContext); - return resolver.resolveIndexForEntity(mappingContext.getPersistentEntity(type)); + return resolver.resolveIndexForEntity(mappingContext.getRequiredPersistentEntity(type)); } private static MongoMappingContext prepareMappingContext(Class type) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java index 158e13957..55de6ca6b 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/MongoMappingContextUnitTests.java @@ -86,8 +86,8 @@ public class MongoMappingContextUnitTests { } }); - MongoPersistentEntity entity = context.getPersistentEntity(Person.class); - assertThat(entity.getPersistentProperty("firstname").getFieldName(), is("FIRSTNAME")); + MongoPersistentEntity entity = context.getRequiredPersistentEntity(Person.class); + assertThat(entity.getRequiredPersistentProperty("firstname").getFieldName(), is("FIRSTNAME")); } @Test // DATAMONGO-607 @@ -116,27 +116,27 @@ public class MongoMappingContextUnitTests { public void mappingContextShouldAcceptClassWithImplicitIdProperty() { MongoMappingContext context = new MongoMappingContext(); - BasicMongoPersistentEntity pe = context.getPersistentEntity(ClassWithImplicitId.class); + BasicMongoPersistentEntity pe = context.getRequiredPersistentEntity(ClassWithImplicitId.class); assertThat(pe, is(not(nullValue()))); - assertThat(pe.isIdProperty(pe.getPersistentProperty("id")), is(true)); + assertThat(pe.isIdProperty(pe.getRequiredPersistentProperty("id")), is(true)); } @Test // DATAMONGO-688 public void mappingContextShouldAcceptClassWithExplicitIdProperty() { MongoMappingContext context = new MongoMappingContext(); - BasicMongoPersistentEntity pe = context.getPersistentEntity(ClassWithExplicitId.class); + BasicMongoPersistentEntity pe = context.getRequiredPersistentEntity(ClassWithExplicitId.class); assertThat(pe, is(not(nullValue()))); - assertThat(pe.isIdProperty(pe.getPersistentProperty("myId")), is(true)); + assertThat(pe.isIdProperty(pe.getRequiredPersistentProperty("myId")), is(true)); } @Test // DATAMONGO-688 public void mappingContextShouldAcceptClassWithExplicitAndImplicitIdPropertyByGivingPrecedenceToExplicitIdProperty() { MongoMappingContext context = new MongoMappingContext(); - BasicMongoPersistentEntity pe = context.getPersistentEntity(ClassWithExplicitIdAndImplicitId.class); + BasicMongoPersistentEntity pe = context.getRequiredPersistentEntity(ClassWithExplicitIdAndImplicitId.class); assertThat(pe, is(not(nullValue()))); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListenerUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListenerUnitTests.java index 34e8bb43b..ae01439d7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListenerUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapping/event/AuditingEventListenerUnitTests.java @@ -21,6 +21,7 @@ import static org.mockito.Mockito.*; import java.util.Arrays; import java.util.Date; +import java.util.Optional; import org.junit.Before; import org.junit.Test; @@ -56,8 +57,8 @@ public class AuditingEventListenerUnitTests { mappingContext.getPersistentEntity(Sample.class); handler = spy(new IsNewAwareAuditingHandler(new PersistentEntities(Arrays.asList(mappingContext)))); - doNothing().when(handler).markCreated(Mockito.any(Object.class)); - doNothing().when(handler).markModified(Mockito.any(Object.class)); + doNothing().when(handler).markCreated(Mockito.any(Optional.class)); + doNothing().when(handler).markModified(Mockito.any(Optional.class)); listener = new AuditingEventListener(new ObjectFactory() { @@ -79,8 +80,8 @@ public class AuditingEventListenerUnitTests { Sample sample = new Sample(); listener.onApplicationEvent(new BeforeConvertEvent(sample, "collection-1")); - verify(handler, times(1)).markCreated(sample); - verify(handler, times(0)).markModified(Mockito.any(Sample.class)); + verify(handler, times(1)).markCreated(Optional.of(sample)); + verify(handler, times(0)).markModified(Mockito.any(Optional.class)); } @Test // DATAMONGO-577 @@ -90,8 +91,8 @@ public class AuditingEventListenerUnitTests { sample.id = "id"; listener.onApplicationEvent(new BeforeConvertEvent(sample, "collection-1")); - verify(handler, times(0)).markCreated(Mockito.any(Sample.class)); - verify(handler, times(1)).markModified(sample); + verify(handler, times(0)).markCreated(Mockito.any(Optional.class)); + verify(handler, times(1)).markModified(Optional.of(sample)); } @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java index b5d84ffeb..fd440ca17 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/performance/ReactivePerformanceTests.java @@ -32,6 +32,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Random; import java.util.Set; import java.util.regex.Pattern; @@ -106,9 +107,9 @@ public class ReactivePerformanceTests { converter = new MappingMongoConverter(new DbRefResolver() { @Override - public Object resolveDbRef(MongoPersistentProperty property, DBRef dbref, DbRefResolverCallback callback, - DbRefProxyHandler proxyHandler) { - return null; + public Optional resolveDbRef(MongoPersistentProperty property, DBRef dbref, DbRefResolverCallback callback, + DbRefProxyHandler proxyHandler) { + return Optional.empty(); } @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ContactRepositoryIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ContactRepositoryIntegrationTests.java index e504e2254..18e3202dc 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ContactRepositoryIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/ContactRepositoryIntegrationTests.java @@ -49,7 +49,7 @@ public class ContactRepositoryIntegrationTests { Person person = new Person("Oliver", "Gierke"); Contact result = repository.save(person); - assertTrue(repository.findOne(result.getId().toString()) instanceof Person); + assertTrue(repository.findOne(result.getId().toString()).get() instanceof Person); } @Test // DATAMONGO-1245 diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java index f9c501eb6..120aac56d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepository.java @@ -33,7 +33,7 @@ import org.springframework.data.geo.GeoResults; import org.springframework.data.geo.Point; import org.springframework.data.geo.Polygon; import org.springframework.data.mongodb.repository.Person.Sex; -import org.springframework.data.querydsl.QueryDslPredicateExecutor; +import org.springframework.data.querydsl.QuerydslPredicateExecutor; import org.springframework.data.repository.query.Param; /** @@ -45,7 +45,7 @@ import org.springframework.data.repository.query.Param; * @author Fırat KÜÇÜK * @author Mark Paluch */ -public interface PersonRepository extends MongoRepository, QueryDslPredicateExecutor { +public interface PersonRepository extends MongoRepository, QuerydslPredicateExecutor { /** * Returns all {@link Person}s with the given lastname. diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepositoryLazyLoadingIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepositoryLazyLoadingIntegrationTests.java index 2934f9a79..d5775b972 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepositoryLazyLoadingIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/PersonRepositoryLazyLoadingIntegrationTests.java @@ -64,7 +64,7 @@ public class PersonRepositoryLazyLoadingIntegrationTests { person.setRealFans(new ArrayList(Arrays.asList(thomas))); repository.save(person); - Person oliver = repository.findOne(person.id); + Person oliver = repository.findOne(person.id).get(); List fans = oliver.getFans(); assertProxyIsResolved(fans, false); @@ -87,7 +87,7 @@ public class PersonRepositoryLazyLoadingIntegrationTests { person.setRealFans(new ArrayList(Arrays.asList(thomas))); repository.save(person); - Person oliver = repository.findOne(person.id); + Person oliver = repository.findOne(person.id).get(); List realFans = oliver.getRealFans(); assertProxyIsResolved(realFans, false); @@ -114,7 +114,7 @@ public class PersonRepositoryLazyLoadingIntegrationTests { person.setCoworker(thomas); repository.save(person); - Person oliver = repository.findOne(person.id); + Person oliver = repository.findOne(person.id).get(); User coworker = oliver.getCoworker(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java index 4410164f3..0174bc8db 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/AbstractMongoQueryUnitTests.java @@ -17,7 +17,6 @@ package org.springframework.data.mongodb.repository.query; import static org.hamcrest.Matchers.*; import static org.junit.Assert.*; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.lang.reflect.Method; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessorUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessorUnitTests.java index 2662786d8..ac9a5fa69 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessorUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessorUnitTests.java @@ -126,8 +126,8 @@ public class ConvertingParameterAccessorUnitTests { MongoParameterAccessor delegate = new StubParameterAccessor(parameters); PotentiallyConvertingIterator iterator = new ConvertingParameterAccessor(converter, delegate).iterator(); - MongoPersistentEntity entity = context.getPersistentEntity(Entity.class); - MongoPersistentProperty property = entity.getPersistentProperty("property"); + MongoPersistentEntity entity = context.getRequiredPersistentEntity(Entity.class); + MongoPersistentProperty property = entity.getRequiredPersistentProperty("property"); return iterator.nextConverted(property); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java index c13b27eb0..08525fef7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java @@ -17,7 +17,9 @@ package org.springframework.data.mongodb.repository.query; import java.util.Arrays; import java.util.Iterator; +import java.util.Optional; +import jdk.nashorn.internal.runtime.regexp.joni.constants.OPCode; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Range; import org.springframework.data.domain.Sort; @@ -144,7 +146,7 @@ class StubParameterAccessor implements MongoParameterAccessor { * @see org.springframework.data.repository.query.ParameterAccessor#getDynamicProjection() */ @Override - public Class getDynamicProjection() { - return null; + public Optional> getDynamicProjection() { + return Optional.empty(); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java index 68282293b..02b69769d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/MongoRepositoryFactoryUnitTests.java @@ -20,6 +20,7 @@ import static org.junit.Assert.*; import static org.mockito.Mockito.*; import java.io.Serializable; +import java.util.Optional; import org.junit.Before; import org.junit.Test; @@ -67,7 +68,7 @@ public class MongoRepositoryFactoryUnitTests { @SuppressWarnings("unchecked") public void usesMappingMongoEntityInformationIfMappingContextSet() { - when(mappingContext.getPersistentEntity(Person.class)).thenReturn(entity); + when(mappingContext.getPersistentEntity(Person.class)).thenReturn(Optional.of(entity)); when(entity.getType()).thenReturn(Person.class); MongoRepositoryFactory factory = new MongoRepositoryFactory(template); @@ -79,7 +80,7 @@ public class MongoRepositoryFactoryUnitTests { @SuppressWarnings("unchecked") public void createsRepositoryWithIdTypeLong() { - when(mappingContext.getPersistentEntity(Person.class)).thenReturn(entity); + when(mappingContext.getPersistentEntity(Person.class)).thenReturn(Optional.of(entity)); when(entity.getType()).thenReturn(Person.class); MongoRepositoryFactory factory = new MongoRepositoryFactory(template); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryTests.java index 10aaa8564..5ab3ba9c4 100755 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/support/SimpleMongoRepositoryTests.java @@ -25,6 +25,7 @@ import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; +import java.util.Optional; import java.util.Set; import java.util.UUID; @@ -91,7 +92,7 @@ public class SimpleMongoRepositoryTests { @Test public void findOneFromCustomCollectionName() { - Person result = repository.findOne(dave.getId()); + Person result = repository.findOne(dave.getId()).get(); assertThat(result, is(dave)); } @@ -121,7 +122,7 @@ public class SimpleMongoRepositoryTests { Person person1 = new Person("First1" + randomId, "Last2" + randomId, 42); person1 = repository.insert(person1); - Person saved = repository.findOne(person1.getId()); + Person saved = repository.findOne(person1.getId()).get(); assertThat(saved, is(equalTo(person1))); } @@ -428,8 +429,8 @@ public class SimpleMongoRepositoryTests { } @Override - public String getId(Person entity) { - return entity.getId(); + public Optional getId(Person entity) { + return Optional.ofNullable(entity.getId()); } @Override diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/CleanMongoDBTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/CleanMongoDBTests.java index 209dd61c0..3988dd66e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/CleanMongoDBTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/test/util/CleanMongoDBTests.java @@ -15,7 +15,6 @@ */ package org.springframework.data.mongodb.test.util; -import static org.mockito.Matchers.*; import static org.mockito.Mockito.*; import java.util.Arrays;