diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/MongoIndexesConfigurator.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/MongoCollectionConfigurator.java similarity index 73% rename from application-engine/src/main/java/com/netgrif/application/engine/configuration/MongoIndexesConfigurator.java rename to application-engine/src/main/java/com/netgrif/application/engine/configuration/MongoCollectionConfigurator.java index 0705a6586d..ac1cacd03f 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/MongoIndexesConfigurator.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/MongoCollectionConfigurator.java @@ -1,6 +1,6 @@ package com.netgrif.application.engine.configuration; -import com.netgrif.application.engine.adapter.spring.configuration.AbstractMongoIndexesConfigurator; +import com.netgrif.application.engine.adapter.spring.configuration.AbstractMongoCollectionConfigurator; import com.netgrif.application.engine.configuration.properties.DataConfigurationProperties; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.MongoTemplate; @@ -11,12 +11,12 @@ @Slf4j @Component -public class MongoIndexesConfigurator extends AbstractMongoIndexesConfigurator { +public class MongoCollectionConfigurator extends AbstractMongoCollectionConfigurator { private final DataConfigurationProperties.MongoProperties mongoProperties; - public MongoIndexesConfigurator(MongoTemplate mongoTemplate, - DataConfigurationProperties.MongoProperties mongoProperties) { + public MongoCollectionConfigurator(MongoTemplate mongoTemplate, + DataConfigurationProperties.MongoProperties mongoProperties) { super(mongoTemplate); this.mongoProperties = mongoProperties; } diff --git a/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/MongoDbRunner.java b/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/MongoDbRunner.java index f77d7af06c..003caeb4a9 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/MongoDbRunner.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/MongoDbRunner.java @@ -1,6 +1,6 @@ package com.netgrif.application.engine.startup.runner; -import com.netgrif.application.engine.configuration.MongoIndexesConfigurator; +import com.netgrif.application.engine.configuration.MongoCollectionConfigurator; import com.netgrif.application.engine.configuration.properties.DataConfigurationProperties; import com.netgrif.application.engine.startup.ApplicationEngineStartupRunner; import com.netgrif.application.engine.startup.annotation.RunnerOrder; @@ -22,19 +22,21 @@ public class MongoDbRunner implements ApplicationEngineStartupRunner { private final MongoTemplate mongoTemplate; - private final MongoIndexesConfigurator mongoIndexesConfigurator; + private final MongoCollectionConfigurator mongoCollectionConfigurator; @Override public void run(ApplicationArguments args) throws Exception { if (mongoProperties.getDrop()) { - if (mongoProperties.getHost() != null && mongoProperties.getPort() != null) + if (mongoProperties.getHost() != null && mongoProperties.getPort() != null) { log.info("Dropping Mongo database {}:{}/{}", mongoProperties.getHost(), mongoProperties.getPort(), mongoProperties.getDatabase()); - else if (mongoProperties.getUri() != null) + } else if (mongoProperties.getUri() != null) { log.info("Dropping Mongo database {}", mongoProperties.getUri()); + } mongoTemplate.getDb().drop(); + mongoCollectionConfigurator.resolveCollections(); } if (mongoProperties.getRunnerEnsureIndex()) { - mongoIndexesConfigurator.resolveIndexes(); + mongoCollectionConfigurator.resolveIndexes(); } } diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/Indexable.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/EnsureCollection.java similarity index 82% rename from nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/Indexable.java rename to nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/EnsureCollection.java index 6917ab391a..09269e8bc4 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/Indexable.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/EnsureCollection.java @@ -5,5 +5,5 @@ @Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) -public @interface Indexable { +public @interface EnsureCollection { } diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java index 565f52c131..d0d6af97d8 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/PetriNet.java @@ -1,6 +1,6 @@ package com.netgrif.application.engine.objects.petrinet.domain; -import com.netgrif.application.engine.objects.annotations.Indexable; +import com.netgrif.application.engine.objects.annotations.EnsureCollection; import com.netgrif.application.engine.objects.annotations.Indexed; import com.netgrif.application.engine.objects.auth.domain.ActorRef; import com.netgrif.application.engine.objects.petrinet.domain.arcs.Arc; @@ -26,7 +26,7 @@ import java.util.*; import java.util.stream.Collectors; -@Indexable +@EnsureCollection @QueryEntity public abstract class PetriNet extends PetriNetObject { diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/roles/ProcessRole.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/roles/ProcessRole.java index 487978e0b3..851a4974b1 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/roles/ProcessRole.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/roles/ProcessRole.java @@ -1,5 +1,7 @@ package com.netgrif.application.engine.objects.petrinet.domain.roles; +import com.netgrif.application.engine.objects.annotations.EnsureCollection; +import com.netgrif.application.engine.objects.annotations.Indexed; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; import com.netgrif.application.engine.objects.petrinet.domain.Imported; import com.netgrif.application.engine.objects.petrinet.domain.dataset.logic.action.Action; @@ -19,6 +21,7 @@ import java.util.Map; @Getter +@EnsureCollection @QueryEntity @EqualsAndHashCode(onlyExplicitlyIncluded = true, callSuper = false) public abstract class ProcessRole extends Imported { @@ -30,6 +33,7 @@ public abstract class ProcessRole extends Imported { public static final String GLOBAL = "global_"; @Setter + @Indexed private boolean global; @Getter @@ -39,9 +43,11 @@ public abstract class ProcessRole extends Imported { private I18nString name; @Setter + @Indexed private String processId; @Setter + @Indexed private String processIdentifier; @Setter diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Case.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Case.java index 6641ba23b8..4c1e751c19 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Case.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Case.java @@ -1,7 +1,7 @@ package com.netgrif.application.engine.objects.workflow.domain; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.netgrif.application.engine.objects.annotations.Indexable; +import com.netgrif.application.engine.objects.annotations.EnsureCollection; import com.netgrif.application.engine.objects.auth.domain.ActorRef; import com.netgrif.application.engine.objects.annotations.Indexed; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; @@ -24,7 +24,7 @@ import java.util.stream.Collectors; @Getter -@Indexable +@EnsureCollection @QueryEntity public abstract class Case implements Serializable { diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java index d1f5ea315c..09190296ad 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/workflow/domain/Task.java @@ -1,7 +1,7 @@ package com.netgrif.application.engine.objects.workflow.domain; import com.fasterxml.jackson.annotation.JsonIgnore; -import com.netgrif.application.engine.objects.annotations.Indexable; +import com.netgrif.application.engine.objects.annotations.EnsureCollection; import com.netgrif.application.engine.objects.annotations.Indexed; import com.netgrif.application.engine.objects.auth.domain.AbstractUser; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; @@ -26,7 +26,7 @@ import java.util.concurrent.atomic.AtomicBoolean; @QueryEntity -@Indexable +@EnsureCollection @AllArgsConstructor public abstract class Task implements Serializable { diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoCollectionConfigurator.java similarity index 79% rename from nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java rename to nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoCollectionConfigurator.java index cf1fba160b..b0c770f4e6 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoIndexesConfigurator.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/configuration/AbstractMongoCollectionConfigurator.java @@ -1,6 +1,6 @@ package com.netgrif.application.engine.adapter.spring.configuration; -import com.netgrif.application.engine.objects.annotations.Indexable; +import com.netgrif.application.engine.objects.annotations.EnsureCollection; import com.netgrif.application.engine.objects.annotations.Indexed; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.reflect.FieldUtils; @@ -19,13 +19,13 @@ import java.util.stream.StreamSupport; @Slf4j -public abstract class AbstractMongoIndexesConfigurator { +public abstract class AbstractMongoCollectionConfigurator { private final MongoTemplate mongoTemplate; private final MappingContext, MongoPersistentProperty> mappingContext; private final IndexResolver resolver; - public AbstractMongoIndexesConfigurator(MongoTemplate mongoTemplate) { + public AbstractMongoCollectionConfigurator(MongoTemplate mongoTemplate) { this.mongoTemplate = mongoTemplate; this.mappingContext = mongoTemplate.getConverter().getMappingContext(); this.resolver = new MongoPersistentEntityIndexResolver(mappingContext); @@ -34,10 +34,21 @@ public AbstractMongoIndexesConfigurator(MongoTemplate mongoTemplate) { public abstract MultiValueMap, String> getIndexes(); public abstract List> getEntityIndexBlacklist(); + public void resolveCollections() { + mappingContext.getPersistentEntities() + .stream() + .filter(it -> it.isAnnotationPresent(EnsureCollection.class) && !getEntityIndexBlacklist().contains(it.getType())) + .forEach(mongoPersistentEntity -> { + if (!mongoTemplate.collectionExists(mongoPersistentEntity.getCollection())) { + mongoTemplate.createCollection(mongoPersistentEntity.getCollection()); + } + }); + } + public void resolveIndexes() { mappingContext.getPersistentEntities() .stream() - .filter(it -> it.isAnnotationPresent(Indexable.class) && !getEntityIndexBlacklist().contains(it.getType())) + .filter(it -> it.isAnnotationPresent(EnsureCollection.class) && !getEntityIndexBlacklist().contains(it.getType())) .forEach(mongoPersistentEntity -> resolveIndexes(mongoPersistentEntity.getCollection(), mongoPersistentEntity.getType())); } diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/RealmServiceImpl.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/RealmServiceImpl.java index b38c2c00d9..abeeee95a2 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/RealmServiceImpl.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/RealmServiceImpl.java @@ -2,7 +2,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; -import com.netgrif.application.engine.adapter.spring.configuration.AbstractMongoIndexesConfigurator; +import com.netgrif.application.engine.adapter.spring.configuration.AbstractMongoCollectionConfigurator; import com.netgrif.application.engine.auth.provider.AbstractAuthConfig; import com.netgrif.application.engine.auth.provider.AuthMethodProvider; import com.netgrif.application.engine.auth.provider.CollectionNameProvider; @@ -44,13 +44,13 @@ public class RealmServiceImpl implements RealmService { @Autowired private AnonymousUserRefService anonymousUserRefService; - private AbstractMongoIndexesConfigurator mongoIndexesConfigurator; + private AbstractMongoCollectionConfigurator mongoCollectionConfigurator; private CollectionNameProvider collectionNameProvider; @Autowired - public void setMongoIndexesConfigurator(AbstractMongoIndexesConfigurator mongoIndexesConfigurator) { - this.mongoIndexesConfigurator = mongoIndexesConfigurator; + public void setMongoCollectionConfigurator(AbstractMongoCollectionConfigurator mongoCollectionConfigurator) { + this.mongoCollectionConfigurator = mongoCollectionConfigurator; } @Lazy @@ -78,7 +78,7 @@ public Realm createRealm(Realm createRequest) { if (!mongoTemplate.collectionExists(collectionName)) { try { mongoTemplate.createCollection(collectionName); - mongoIndexesConfigurator.resolveIndexes(collectionName, User.class); + mongoCollectionConfigurator.resolveIndexes(collectionName, User.class); } catch (Exception e) { log.error("Error occurred while creating collection for realm {}", realm.getName(), e); realmRepository.delete(realm);