diff --git a/CHANGELOG.md b/CHANGELOG.md
index a5ee722..e46dd58 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,9 @@
+# Version 3.1.0 (2020-01-31)
+
+* [new] Morphia repository now has the ability to stream results from the database as consumed (using a cursor instead of a list behind the scenes).
+* [chg] Update the Morphia module to work with business framework 4.3.0+.
+* [chg] Updated Morphia to 1.5.8 (its package has changed to `dev.morphia`, update project code accordingly if necessary).
+
# Version 3.0.2 (2019-01-10)
* [fix] Fix issue #11: an exception occurred at startup because the way of accessing the ValidationFactory changed.
diff --git a/core/pom.xml b/core/pom.xml
index f4c2eb4..b4d2ef0 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -14,7 +14,7 @@
org.seedstack.addons.mongodb
mongodb
- 3.0.2-SNAPSHOT
+ 3.1.0-SNAPSHOT
mongodb-core
diff --git a/core/src/main/java/org/seedstack/mongodb/internal/AbstractMongoDbManager.java b/core/src/main/java/org/seedstack/mongodb/internal/AbstractMongoDbManager.java
index 8635e73..a807d19 100644
--- a/core/src/main/java/org/seedstack/mongodb/internal/AbstractMongoDbManager.java
+++ b/core/src/main/java/org/seedstack/mongodb/internal/AbstractMongoDbManager.java
@@ -12,18 +12,17 @@
import com.mongodb.AuthenticationMechanism;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
-import org.seedstack.coffig.Coffig;
-import org.seedstack.mongodb.MongoDbConfig;
-import org.seedstack.seed.SeedException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.seedstack.coffig.Coffig;
+import org.seedstack.mongodb.MongoDbConfig;
+import org.seedstack.seed.SeedException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
abstract class AbstractMongoDbManager implements MongoDbManager {
private static final Logger LOGGER = LoggerFactory.getLogger(AbstractMongoDbManager.class);
diff --git a/core/src/main/java/org/seedstack/mongodb/internal/SyncMongoDbManager.java b/core/src/main/java/org/seedstack/mongodb/internal/SyncMongoDbManager.java
index efa4378..1217867 100644
--- a/core/src/main/java/org/seedstack/mongodb/internal/SyncMongoDbManager.java
+++ b/core/src/main/java/org/seedstack/mongodb/internal/SyncMongoDbManager.java
@@ -5,6 +5,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+
package org.seedstack.mongodb.internal;
import com.mongodb.MongoClient;
@@ -13,13 +14,12 @@
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;
import com.mongodb.client.MongoDatabase;
+import java.util.List;
import org.seedstack.coffig.BuilderSupplier;
import org.seedstack.coffig.Coffig;
import org.seedstack.mongodb.MongoDbConfig;
import org.seedstack.seed.SeedException;
-import java.util.List;
-
class SyncMongoDbManager extends AbstractMongoDbManager {
@Override
protected MongoClient doCreateClient(String clientName, MongoDbConfig.ClientConfig clientConfig, Coffig coffig) {
@@ -41,7 +41,8 @@ protected void doClose(MongoClient client) {
client.close();
}
- private MongoClient createMongoClient(String clientName, MongoDbConfig.ClientConfig clientConfig, MongoClientOptions mongoClientOptions) {
+ private MongoClient createMongoClient(String clientName, MongoDbConfig.ClientConfig clientConfig,
+ MongoClientOptions mongoClientOptions) {
List serverAddresses = buildServerAddresses(clientName, clientConfig.getHosts());
if (serverAddresses.isEmpty()) {
diff --git a/morphia/pom.xml b/morphia/pom.xml
index 2407b4e..f97c36d 100644
--- a/morphia/pom.xml
+++ b/morphia/pom.xml
@@ -14,7 +14,7 @@
org.seedstack.addons.mongodb
mongodb
- 3.0.2-SNAPSHOT
+ 3.1.0-SNAPSHOT
mongodb-morphia
@@ -36,13 +36,24 @@
true
- org.mongodb.morphia
- morphia
+ dev.morphia.morphia
+ core
${morphia.version}
+
+
+ org.mongodb
+ mongo-java-driver
+
+
+
+
+ org.mongodb
+ mongo-java-driver
+ ${mongodb.version}
- org.mongodb.morphia
- morphia-logging-slf4j
+ dev.morphia.morphia
+ logging-slf4j
${morphia.version}
@@ -51,6 +62,12 @@
+
+ javax.validation
+ validation-api
+ ${javax.validation.version}
+ provided
+
org.seedstack.seed
@@ -73,7 +90,7 @@
org.hibernate
hibernate-validator
- 6.0.13.Final
+ 5.4.3.Final
test
diff --git a/morphia/src/license/THIRD-PARTY.properties b/morphia/src/license/THIRD-PARTY.properties
new file mode 100644
index 0000000..4f00996
--- /dev/null
+++ b/morphia/src/license/THIRD-PARTY.properties
@@ -0,0 +1,20 @@
+# Generated by org.codehaus.mojo.license.AddThirdPartyMojo
+#-------------------------------------------------------------------------------
+# Already used licenses in project :
+# - Apache 2
+# - BSD
+# - CDDL
+# - IGNORED_LICENSE
+# - LGPL 3.0
+# - MIT License
+# - MPL 2.0
+# - Public Domain
+# - The MIT License (MIT)
+# - WTFPL
+#-------------------------------------------------------------------------------
+# Please fill the missing licenses for dependencies :
+#
+#
+#Fri Jan 31 12:24:04 CET 2020
+dev.morphia.morphia--core--1.5.8=Apache 2
+dev.morphia.morphia--logging-slf4j--1.5.8=Apache 2
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java
index c4c89d1..7db40d2 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/BaseMorphiaRepository.java
@@ -5,23 +5,28 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+
package org.seedstack.mongodb.morphia;
import static com.google.common.base.Preconditions.checkArgument;
-
+import static java.util.Spliterators.spliteratorUnknownSize;
+
+import com.mongodb.DBCollection;
+import dev.morphia.Datastore;
+import dev.morphia.query.CountOptions;
+import dev.morphia.query.CriteriaContainer;
+import dev.morphia.query.FindOptions;
+import dev.morphia.query.Query;
+import dev.morphia.query.Sort;
+import dev.morphia.query.internal.MorphiaCursor;
import edu.umd.cs.findbugs.annotations.SuppressFBWarnings;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
+import java.util.Spliterator;
import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
import javax.inject.Inject;
-import org.mongodb.morphia.Datastore;
-import org.mongodb.morphia.mapping.Mapper;
-import org.mongodb.morphia.query.CountOptions;
-import org.mongodb.morphia.query.CriteriaContainer;
-import org.mongodb.morphia.query.FindOptions;
-import org.mongodb.morphia.query.Query;
-import org.mongodb.morphia.query.Sort;
import org.seedstack.business.domain.AggregateExistsException;
import org.seedstack.business.domain.AggregateNotFoundException;
import org.seedstack.business.domain.AggregateRoot;
@@ -42,6 +47,7 @@
* @param Identifier class.
*/
public abstract class BaseMorphiaRepository, ID> extends BaseRepository {
+ public static final String ID_KEY = "_id";
private Datastore datastore;
private SpecificationTranslator specificationTranslator;
@@ -77,12 +83,14 @@ public void add(A aggregate) throws AggregateExistsException {
@Override
public Stream get(Specification specification, Option... options) {
- return buildQuery(specification, options).asList(buildFindOptions(options)).stream();
+ final MorphiaCursor cursor = buildQuery(specification, options).find(buildFindOptions(options));
+ return StreamSupport.stream(spliteratorUnknownSize(cursor, Spliterator.ORDERED), false)
+ .onClose(cursor::close);
}
@Override
public Optional get(ID id) {
- return Optional.ofNullable(datastore.get(getAggregateRootClass(), id));
+ return Optional.ofNullable(datastore.createQuery(getAggregateRootClass()).first());
}
@Override
@@ -92,7 +100,7 @@ public boolean contains(Specification specification) {
@Override
public boolean contains(ID id) {
- return datastore.find(getAggregateRootClass()).filter(Mapper.ID_KEY, id).count(new CountOptions().limit(1)) > 0;
+ return datastore.find(getAggregateRootClass()).filter(ID_KEY, id).count(new CountOptions().limit(1)) > 0;
}
@Override
@@ -102,7 +110,7 @@ public long count(Specification specification) {
@Override
public long size() {
- return datastore.getCount(getAggregateRootClass());
+ return datastore.createQuery(getAggregateRootClass()).count();
}
@Override
@@ -112,7 +120,9 @@ public long remove(Specification specification) throws AggregateNotFoundExcep
@Override
public void remove(ID id) throws AggregateNotFoundException {
- checkExactlyOneAggregateRemoved(datastore.delete(getAggregateRootClass(), id).getN(), id);
+ checkExactlyOneAggregateRemoved(
+ datastore.delete(datastore.find(getAggregateRootClass()).filter(ID_KEY, id)).getN(),
+ id);
}
private void checkExactlyOneAggregateRemoved(int n, ID id) {
@@ -143,8 +153,9 @@ public A addOrUpdate(A aggregate) {
@Override
public void clear() {
- datastore.getCollection(getAggregateRootClass()).drop();
- datastore.getCollection(getAggregateRootClass()).dropIndexes();
+ DBCollection collection = datastore.getCollection(getAggregateRootClass());
+ collection.drop();
+ collection.dropIndexes();
}
private Query buildQuery(Specification specification, Option... options) {
@@ -187,7 +198,7 @@ private void applyLimit(FindOptions findOptions, LimitOption limitOption) {
findOptions.limit((int) limit);
}
- private void applySort(Query query, SortOption sortOption) {
+ private void applySort(Query> query, SortOption sortOption) {
List sorts = new ArrayList<>();
for (SortOption.SortedAttribute sortedAttribute : sortOption.getSortedAttributes()) {
switch (sortedAttribute.getDirection()) {
@@ -202,6 +213,6 @@ private void applySort(Query query, SortOption sortOption) {
"Unsupported sort direction " + sortedAttribute.getDirection());
}
}
- query.order(sorts.toArray(new Sort[sorts.size()]));
+ query.order(sorts.toArray(new Sort[0]));
}
}
\ No newline at end of file
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java
index 827cc6a..f110c49 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreFactory.java
@@ -5,22 +5,22 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+
package org.seedstack.mongodb.morphia.internal;
+import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation;
+import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig;
+
import com.google.inject.Injector;
import com.google.inject.Key;
import com.google.inject.name.Names;
import com.mongodb.MongoClient;
-import org.mongodb.morphia.Datastore;
-import org.mongodb.morphia.Morphia;
+import dev.morphia.Datastore;
+import dev.morphia.Morphia;
+import javax.inject.Inject;
import org.seedstack.mongodb.morphia.MorphiaDatastore;
import org.seedstack.seed.Application;
-import javax.inject.Inject;
-
-import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.createDatastoreAnnotation;
-import static org.seedstack.mongodb.morphia.internal.MorphiaUtils.getMongoClientConfig;
-
public class DatastoreFactory {
private final Application application;
private final Injector injector;
@@ -46,7 +46,7 @@ public Datastore createDatastore(String clientName, String dbName) {
dbName
)
);
- datastore.ensureIndexes(true);
+ datastore.ensureIndexes();
datastore.ensureCaps();
return datastore;
}
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java
index 8fca5c6..e4c2be6 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/DatastoreProvider.java
@@ -8,7 +8,7 @@
package org.seedstack.mongodb.morphia.internal;
import com.google.inject.Provider;
-import org.mongodb.morphia.Datastore;
+import dev.morphia.Datastore;
import org.seedstack.mongodb.morphia.MorphiaDatastore;
import javax.inject.Inject;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java
index 7d44b89..ff5525e 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaModule.java
@@ -15,10 +15,10 @@
import com.google.inject.Key;
import com.google.inject.Scopes;
import java.util.Collection;
-import org.mongodb.morphia.Datastore;
-import org.mongodb.morphia.Morphia;
+import java.util.Collection;
+import dev.morphia.Datastore;
+import dev.morphia.Morphia;
import org.seedstack.mongodb.morphia.MorphiaDatastore;
-
class MorphiaModule extends AbstractModule {
private final Collection morphiaDatastoresAnnotation;
private final Morphia morphia;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java
index bceff44..2022c05 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaPlugin.java
@@ -13,7 +13,9 @@
import io.nuun.kernel.api.plugin.request.ClasspathScanRequest;
import java.util.Collection;
import java.util.HashSet;
-import org.mongodb.morphia.Morphia;
+import java.util.Collection;
+import java.util.HashSet;
+import dev.morphia.Morphia;
import org.seedstack.mongodb.morphia.MorphiaDatastore;
import org.seedstack.seed.Application;
import org.seedstack.seed.core.internal.AbstractSeedPlugin;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaSpecifications.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaSpecifications.java
index 6dad22f..eb7d407 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaSpecifications.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/MorphiaSpecifications.java
@@ -8,8 +8,8 @@
package org.seedstack.mongodb.morphia.internal;
import org.kametic.specifications.Specification;
-import org.mongodb.morphia.annotations.Embedded;
-import org.mongodb.morphia.annotations.Entity;
+import dev.morphia.annotations.Embedded;
+import dev.morphia.annotations.Entity;
import org.seedstack.seed.core.internal.utils.SpecificationBuilder;
import java.lang.reflect.Modifier;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java
index b039d4b..fb7a54b 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/ValidatingEntityInterceptor.java
@@ -5,6 +5,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+
package org.seedstack.mongodb.morphia.internal;
import com.mongodb.DBObject;
@@ -12,9 +13,9 @@
import javax.inject.Inject;
import javax.validation.ConstraintViolation;
import javax.validation.ValidatorFactory;
-import org.mongodb.morphia.AbstractEntityInterceptor;
-import org.mongodb.morphia.mapping.Mapper;
import org.seedstack.seed.core.internal.validation.VerboseConstraintViolationException;
+import dev.morphia.AbstractEntityInterceptor;
+import dev.morphia.mapping.Mapper;
class ValidatingEntityInterceptor extends AbstractEntityInterceptor {
@Inject
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAndConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAndConverter.java
index 4847a01..33b7bc9 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAndConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAndConverter.java
@@ -8,8 +8,8 @@
package org.seedstack.mongodb.morphia.internal.specification;
import java.util.Arrays;
-import org.mongodb.morphia.query.Criteria;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.Criteria;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.AndSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAttributeConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAttributeConverter.java
index 7931047..0719f73 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAttributeConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaAttributeConverter.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.AttributeSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaEqualConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaEqualConverter.java
index ab43ee0..a3bb730 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaEqualConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaEqualConverter.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.EqualSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaFalseConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaFalseConverter.java
index 796d21a..86ca967 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaFalseConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaFalseConverter.java
@@ -7,17 +7,16 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.mapping.Mapper;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.FalseSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
-
+import org.seedstack.mongodb.morphia.BaseMorphiaRepository;
class MorphiaFalseConverter implements SpecificationConverter, MorphiaTranslationContext>, CriteriaContainer> {
@Override
public CriteriaContainer convert(FalseSpecification> specification, MorphiaTranslationContext> context, SpecificationTranslator, CriteriaContainer> translator) {
// Always false
- return context.getQuery().criteria(Mapper.ID_KEY).doesNotExist();
+ return context.getQuery().criteria(BaseMorphiaRepository.ID_KEY).doesNotExist();
}
}
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaGreaterThanConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaGreaterThanConverter.java
index 385e078..9963bd7 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaGreaterThanConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaGreaterThanConverter.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.GreaterThanSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaIdentityConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaIdentityConverter.java
index 9a77dcb..f380ac0 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaIdentityConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaIdentityConverter.java
@@ -7,16 +7,16 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.mapping.Mapper;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.IdentitySpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
+import org.seedstack.mongodb.morphia.BaseMorphiaRepository;
class MorphiaIdentityConverter implements SpecificationConverter, MorphiaTranslationContext>, CriteriaContainer> {
@Override
public CriteriaContainer convert(IdentitySpecification, ?> specification, MorphiaTranslationContext> context, SpecificationTranslator, CriteriaContainer> translator) {
- context.setProperty(Mapper.ID_KEY);
+ context.setProperty(BaseMorphiaRepository.ID_KEY);
// We avoid using equal() because Morphia optimizes it without operator ("someAttr": "someVal")
// Thus generating an invalid query when trying to negate it ("$not": "someVal")
return context.pickFieldEnd().not().notEqual(specification.getExpectedIdentifier());
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaLessThanConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaLessThanConverter.java
index f00caac..9c7dd70 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaLessThanConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaLessThanConverter.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.LessThanSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaNotConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaNotConverter.java
index 966fc2e..b2421d3 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaNotConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaNotConverter.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.NotSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaOrConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaOrConverter.java
index 69edb40..8157518 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaOrConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaOrConverter.java
@@ -8,8 +8,8 @@
package org.seedstack.mongodb.morphia.internal.specification;
import java.util.Arrays;
-import org.mongodb.morphia.query.Criteria;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.Criteria;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.OrSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaSpecificationTranslator.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaSpecificationTranslator.java
index 9d59847..4b0f86a 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaSpecificationTranslator.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaSpecificationTranslator.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.Specification;
import org.seedstack.business.spi.BaseSpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaStringConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaStringConverter.java
index 6dd6ba6..2d9b3fc 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaStringConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaStringConverter.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.StringSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTranslationContext.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTranslationContext.java
index 4e8c09a..a46f1e0 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTranslationContext.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTranslationContext.java
@@ -9,9 +9,9 @@
import static com.google.common.base.Preconditions.checkState;
-import org.mongodb.morphia.query.CriteriaContainer;
-import org.mongodb.morphia.query.FieldEnd;
-import org.mongodb.morphia.query.Query;
+import dev.morphia.query.CriteriaContainer;
+import dev.morphia.query.FieldEnd;
+import dev.morphia.query.Query;
public class MorphiaTranslationContext {
private final Query query;
diff --git a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTrueConverter.java b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTrueConverter.java
index 9e2fe8f..c356f56 100644
--- a/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTrueConverter.java
+++ b/morphia/src/main/java/org/seedstack/mongodb/morphia/internal/specification/MorphiaTrueConverter.java
@@ -7,17 +7,16 @@
*/
package org.seedstack.mongodb.morphia.internal.specification;
-import org.mongodb.morphia.mapping.Mapper;
-import org.mongodb.morphia.query.CriteriaContainer;
+import dev.morphia.query.CriteriaContainer;
import org.seedstack.business.specification.TrueSpecification;
import org.seedstack.business.spi.SpecificationConverter;
import org.seedstack.business.spi.SpecificationTranslator;
-
+import org.seedstack.mongodb.morphia.BaseMorphiaRepository;
class MorphiaTrueConverter implements SpecificationConverter, MorphiaTranslationContext>, CriteriaContainer> {
@Override
public CriteriaContainer convert(TrueSpecification> specification, MorphiaTranslationContext> context, SpecificationTranslator, CriteriaContainer> translator) {
// Always true
- return context.getQuery().criteria(Mapper.ID_KEY).not().doesNotExist();
+ return context.getQuery().criteria(BaseMorphiaRepository.ID_KEY).not().doesNotExist();
}
}
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/MorphiaIT.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/MorphiaIT.java
index b73b503..af2c376 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/MorphiaIT.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/MorphiaIT.java
@@ -19,8 +19,9 @@
import org.assertj.core.api.Assertions;
import org.junit.Test;
import org.junit.runner.RunWith;
-import org.mongodb.morphia.Datastore;
-import org.mongodb.morphia.Key;
+import org.junit.runner.RunWith;
+import dev.morphia.Datastore;
+import dev.morphia.Key;
import org.seedstack.business.domain.Repository;
import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy1;
import org.seedstack.mongodb.morphia.fixtures.dummyobject.Dummy2;
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/SpecificationIT.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/SpecificationIT.java
index 23f7f1c..e4c3f4a 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/SpecificationIT.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/SpecificationIT.java
@@ -5,6 +5,7 @@
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
+
package org.seedstack.mongodb.morphia;
import static org.assertj.core.api.Assertions.assertThat;
@@ -20,7 +21,12 @@
import org.seedstack.business.domain.IdentityService;
import org.seedstack.business.domain.Repository;
import org.seedstack.business.domain.SortOption;
+import org.seedstack.business.specification.AttributeSpecification;
+import org.seedstack.business.specification.EqualSpecification;
+import org.seedstack.business.specification.GreaterThanSpecification;
+import org.seedstack.business.specification.LessThanSpecification;
import org.seedstack.business.specification.Specification;
+import org.seedstack.business.specification.StringMatchingSpecification;
import org.seedstack.business.specification.dsl.SpecificationBuilder;
import org.seedstack.mongodb.morphia.fixtures.product.Picture;
import org.seedstack.mongodb.morphia.fixtures.product.Product;
@@ -34,6 +40,7 @@ public class SpecificationIT {
private Product product4;
private Product product5;
private Product product6;
+ private Product product7;
@Inject
@Morphia
private Repository repository;
@@ -50,6 +57,7 @@ public void setUp() throws Exception {
product4 = createProduct(4L, "product4", "url2", " picture4", 6d);
product5 = createProduct(5L, "product5", "url5", "picture4 ", 1d);
product6 = createProduct(6L, "product6", "url6", "picture5", 5d);
+ product7 = createProduct(7L, "product7", "url7", "picture5", 6d);
repository.clear();
@@ -59,6 +67,7 @@ public void setUp() throws Exception {
repository.add(product4);
repository.add(product5);
repository.add(product6);
+ repository.add(product7);
}
@After
@@ -71,7 +80,7 @@ public void testTrue() throws Exception {
assertThat(repository.get(specificationBuilder.of(Product.class)
.all()
.build())
- ).containsExactlyInAnyOrder(product1, product2, product3, product4, product5, product6);
+ ).containsExactlyInAnyOrder(product1, product2, product3, product4, product5, product6, product7);
}
@Test
@@ -91,7 +100,7 @@ public void testIdentity() throws Exception {
assertThat(repository.get(specificationBuilder.ofAggregate(Product.class)
.identity().isNot(3L)
.build())
- ).containsExactlyInAnyOrder(product1, product2, product4, product5, product6);
+ ).containsExactlyInAnyOrder(product1, product2, product4, product5, product6, product7);
}
@Test
@@ -99,7 +108,7 @@ public void testGreaterThan() throws Exception {
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("id").greaterThan(3)
.build())
- ).containsExactlyInAnyOrder(product4, product5, product6);
+ ).containsExactlyInAnyOrder(product4, product5, product6, product7);
}
@Test
@@ -107,7 +116,7 @@ public void testGreaterThanOrEqualTo() throws Exception {
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("id").greaterThanOrEqualTo(3)
.build())
- ).containsExactlyInAnyOrder(product3, product4, product5, product6);
+ ).containsExactlyInAnyOrder(product3, product4, product5, product6, product7);
}
@Test
@@ -183,27 +192,27 @@ public void testStringMatching() throws Exception {
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").matching("picture?")
.build())
- ).containsExactlyInAnyOrder(product1, product2, product3, product6);
+ ).containsExactlyInAnyOrder(product1, product2, product3, product6, product7);
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").matching("picture*")
.build())
- ).containsExactlyInAnyOrder(product1, product2, product3, product5, product6);
+ ).containsExactlyInAnyOrder(product1, product2, product3, product5, product6, product7);
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").matching("pict?re5")
.build())
- ).containsExactlyInAnyOrder(product6);
+ ).containsExactlyInAnyOrder(product6, product7);
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").matching("pic*re5")
.build())
- ).containsExactlyInAnyOrder(product6);
+ ).containsExactlyInAnyOrder(product6, product7);
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").matching("?ict?re5")
.build())
- ).containsExactlyInAnyOrder(product6);
+ ).containsExactlyInAnyOrder(product6, product7);
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").matching("*cture5")
.build())
- ).containsExactlyInAnyOrder(product6);
+ ).containsExactlyInAnyOrder(product6, product7);
}
@Test
@@ -243,7 +252,7 @@ public void testNot() throws Exception {
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").not().equalTo("picture2")
.build())
- ).containsExactlyInAnyOrder(product1, product3, product4, product5, product6);
+ ).containsExactlyInAnyOrder(product1, product3, product4, product5, product6, product7);
}
@Test
@@ -268,6 +277,7 @@ public void testAnd() throws Exception {
.property("price").equalTo(2d)
.build())
).containsExactlyInAnyOrder(product2);
+
assertThat(repository.get(specificationBuilder.of(Product.class)
.property("pictures.url.url").equalTo("picture3")
.and()
@@ -276,6 +286,31 @@ public void testAnd() throws Exception {
).isEmpty();
}
+ @Test
+ public void testAndVariations() {
+ assertThat(repository.get(
+ new AttributeSpecification("pictures.url.url", new EqualSpecification<>("picture5"))
+ .and(new AttributeSpecification<>("designation", new StringMatchingSpecification("product?")))
+ .and(new AttributeSpecification<>("price", new EqualSpecification<>(6d)))
+ )).containsExactly(product7);
+
+ assertThat(repository.get(
+ new AttributeSpecification("pictures.url.url", new EqualSpecification<>("picture5"))
+ .and(new AttributeSpecification<>("designation", new StringMatchingSpecification("product?"))
+ .and(new AttributeSpecification<>("price", new EqualSpecification<>(6d)))
+ )
+ )).containsExactly(product7);
+
+ assertThat(repository.get(
+ new AttributeSpecification<>(
+ "price",
+ new GreaterThanSpecification<>(4d)
+ .and(new LessThanSpecification<>(7d))
+ .and(new EqualSpecification<>(5d))
+ )
+ )).containsExactly(product6);
+ }
+
@Test
public void testSort() throws Exception {
assertThat(repository.get(Specification.any(),
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Picture.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Picture.java
index 96e7da7..4f235a7 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Picture.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Picture.java
@@ -11,9 +11,9 @@
package org.seedstack.mongodb.morphia.fixtures.product;
-import org.mongodb.morphia.annotations.Embedded;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.Id;
+import dev.morphia.annotations.Embedded;
+import dev.morphia.annotations.Entity;
+import dev.morphia.annotations.Id;
import org.seedstack.business.domain.BaseEntity;
import org.seedstack.business.domain.Identity;
import org.seedstack.business.util.SequenceGenerator;
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/PictureURL.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/PictureURL.java
index 9dfa5e3..74d26cb 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/PictureURL.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/PictureURL.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.fixtures.product;
-import org.mongodb.morphia.annotations.Embedded;
+import dev.morphia.annotations.Embedded;
import org.seedstack.business.domain.BaseValueObject;
@Embedded
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Product.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Product.java
index a1a2768..2c95b0b 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Product.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/product/Product.java
@@ -8,8 +8,8 @@
package org.seedstack.mongodb.morphia.fixtures.product;
import java.util.List;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.Id;
+import dev.morphia.annotations.Entity;
+import dev.morphia.annotations.Id;
import org.seedstack.business.domain.BaseAggregateRoot;
@Entity
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java
index 236f73a..deef8eb 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/Address.java
@@ -7,7 +7,7 @@
*/
package org.seedstack.mongodb.morphia.fixtures.user;
-import org.mongodb.morphia.annotations.Embedded;
+import dev.morphia.annotations.Embedded;
import org.seedstack.business.domain.ValueObject;
@Embedded
diff --git a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/User.java b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/User.java
index dd37641..7c5d502 100644
--- a/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/User.java
+++ b/morphia/src/test/java/org/seedstack/mongodb/morphia/fixtures/user/User.java
@@ -7,8 +7,8 @@
*/
package org.seedstack.mongodb.morphia.fixtures.user;
-import org.mongodb.morphia.annotations.Entity;
-import org.mongodb.morphia.annotations.Id;
+import dev.morphia.annotations.Entity;
+import dev.morphia.annotations.Id;
import org.seedstack.business.domain.AggregateRoot;
import javax.validation.constraints.NotNull;
diff --git a/pom.xml b/pom.xml
index d0d68f7..3a88d98 100644
--- a/pom.xml
+++ b/pom.xml
@@ -14,19 +14,19 @@
org.seedstack.poms
parent-internal
- 3.4.6
+ 3.4.8
org.seedstack.addons.mongodb
mongodb
- 3.0.2-SNAPSHOT
+ 3.1.0-SNAPSHOT
pom
- 3.8.5
- 3.0.3
- 1.3.2
- 4.0.0
+ 3.9.1
+ 3.12.1
+ 1.5.8
+ 4.3.0
3.0.0
@@ -59,6 +59,7 @@
Apache 2|Apache License, Version 2.0
Apache 2|The Apache Software License, Version 2.0
+ Apache 2|The Apache License, Version 2.0
Apache 2|ASF 2.0
Apache 2|Apache License 2.0
Apache 2|Apache License, version 2.0
@@ -69,6 +70,7 @@
CDDL|CDDL + GPLv2 with classpath exception
LGPL 3.0|GNU Lesser Public License
MIT License|The MIT License
+ MIT License|The MIT License (MIT)
MIT License|MIT license
IGNORED_LICENSE|MPL 1.1
IGNORED_LICENSE|LGPL 2.1