From 4e2725abedeb190f65b09999ddc1180c169b9d43 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Wed, 19 Nov 2025 12:23:53 +0100 Subject: [PATCH 1/2] Add @Indexable annotation for indexing configuration Introduced a new @Indexable annotation to flag classes for MongoDB indexing. Updated Task, PetriNet, and Case classes to use @Indexable and adjusted the Mongo index configurator to process this annotation. This simplifies index configuration and enhances maintainability. --- .../engine/objects/annotations/Indexable.java | 11 +++++++++++ .../engine/objects/petrinet/domain/PetriNet.java | 4 ++++ .../engine/objects/workflow/domain/Case.java | 4 ++++ .../engine/objects/workflow/domain/Task.java | 2 ++ .../AbstractMongoIndexesConfigurator.java | 3 ++- 5 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/Indexable.java 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/Indexable.java new file mode 100644 index 0000000000..a810088a7e --- /dev/null +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/annotations/Indexable.java @@ -0,0 +1,11 @@ +package com.netgrif.application.engine.objects.annotations; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ElementType.TYPE}) +public @interface Indexable { +} 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 a8b2fa447c..e665518ff2 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,5 +1,7 @@ package com.netgrif.application.engine.objects.petrinet.domain; +import com.netgrif.application.engine.objects.annotations.Indexable; +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; import com.netgrif.application.engine.objects.petrinet.domain.arcs.reference.Referencable; @@ -24,6 +26,7 @@ import java.util.*; import java.util.stream.Collectors; +@Indexable @QueryEntity public abstract class PetriNet extends PetriNetObject { @@ -57,6 +60,7 @@ public abstract class PetriNet extends PetriNetObject { @Getter @Setter + @Indexed private String initials; @Getter 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 34c2168398..77f61006f1 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,6 +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.auth.domain.ActorRef; import com.netgrif.application.engine.objects.annotations.Indexed; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; @@ -22,6 +23,7 @@ import java.util.stream.Collectors; @Getter +@Indexable @QueryEntity public abstract class Case implements Serializable { @@ -35,6 +37,7 @@ public abstract class Case implements Serializable { private LocalDateTime lastModified; @Setter + @Indexed private String visualId; @NotNull @@ -48,6 +51,7 @@ public abstract class Case implements Serializable { @NotNull @Setter + @Indexed private String processIdentifier; @Setter 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 eb52c24a81..34dd668f92 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,6 +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.Indexed; import com.netgrif.application.engine.objects.auth.domain.AbstractUser; import com.netgrif.application.engine.objects.petrinet.domain.I18nString; @@ -24,6 +25,7 @@ import java.util.*; @QueryEntity +@Indexable @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/AbstractMongoIndexesConfigurator.java index bb27b1d883..98e3acbd65 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/AbstractMongoIndexesConfigurator.java @@ -1,5 +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.Indexed; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.reflect.FieldUtils; @@ -36,7 +37,7 @@ public AbstractMongoIndexesConfigurator(MongoTemplate mongoTemplate) { public void resolveIndexes() { mappingContext.getPersistentEntities() .stream() - .filter(it -> it.isAnnotationPresent(Document.class) && !getEntityIndexBlacklist().contains(it.getType())) + .filter(it -> it.isAnnotationPresent(Indexable.class) && !getEntityIndexBlacklist().contains(it.getType())) .forEach(mongoPersistentEntity -> resolveIndexes(mongoPersistentEntity.getCollection(), mongoPersistentEntity.getType())); } From a18f14f50865d3feb911c1e59a93a722d3bf4e13 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Tue, 9 Dec 2025 08:55:08 +0100 Subject: [PATCH 2/2] - added inherited to annotation --- .../application/engine/objects/annotations/Indexable.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) 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/Indexable.java index a810088a7e..6917ab391a 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/Indexable.java @@ -1,10 +1,8 @@ package com.netgrif.application.engine.objects.annotations; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; +import java.lang.annotation.*; +@Inherited @Retention(RetentionPolicy.RUNTIME) @Target({ElementType.TYPE}) public @interface Indexable {