From 17e7be8437edf3b56a0eb5774ee7345b3b30cb5d Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Mon, 27 Apr 2026 13:22:54 +0200 Subject: [PATCH 1/9] [NAE-2418] Verify @Transient handling across persistence layers in nae-spring-core-adapter Replaced the incorrect `java.beans.Transient` import with `org.springframework.data.annotation.Transient`. This ensures proper handling of transiency in the context of Spring Data. --- .../engine/adapter/spring/workflow/domain/DataGroup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java index 3950e168f5..0db0d2510e 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java @@ -1,8 +1,8 @@ package com.netgrif.application.engine.adapter.spring.workflow.domain; import com.netgrif.application.engine.objects.workflow.domain.DataFieldsCollection; +import org.springframework.data.annotation.Transient; -import java.beans.Transient; public class DataGroup extends com.netgrif.application.engine.objects.petrinet.domain.DataGroup { From 3f362f97b06462907893e99576857eeb87465976 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Tue, 28 Apr 2026 12:51:14 +0200 Subject: [PATCH 2/9] [NAE-2418] Verify @Transient handling across persistence layers in nae-spring-core-adapter - created new arc classes in spring core adapter - refactored existing arc class to be abstract - added transient to arcs --- .../engine/petrinet/service/ArcFactory.java | 11 +++---- .../service/PetriNetEventHandler.java | 6 ++++ .../objects/petrinet/domain/arcs/Arc.java | 2 +- .../petrinet/domain/arcs/InhibitorArc.java | 2 +- .../objects/petrinet/domain/arcs/ReadArc.java | 2 +- .../petrinet/domain/arcs/ResetArc.java | 2 +- .../spring/petrinet/domain/arcs/Arc.java | 31 +++++++++++++++++++ .../petrinet/domain/arcs/InhibitorArc.java | 27 ++++++++++++++++ .../spring/petrinet/domain/arcs/ReadArc.java | 27 ++++++++++++++++ .../spring/petrinet/domain/arcs/ResetArc.java | 27 ++++++++++++++++ 10 files changed, 127 insertions(+), 10 deletions(-) create mode 100644 nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java create mode 100644 nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java create mode 100644 nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java create mode 100644 nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ArcFactory.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ArcFactory.java index 786a9be58b..1e6f6ac916 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ArcFactory.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ArcFactory.java @@ -1,11 +1,10 @@ package com.netgrif.application.engine.petrinet.service; +import com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs.InhibitorArc; +import com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs.ReadArc; +import com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs.ResetArc; import com.netgrif.application.engine.objects.petrinet.domain.arcs.Arc; -import com.netgrif.application.engine.objects.petrinet.domain.arcs.InhibitorArc; -import com.netgrif.application.engine.objects.petrinet.domain.arcs.ReadArc; -import com.netgrif.application.engine.objects.petrinet.domain.arcs.ResetArc; import com.netgrif.application.engine.objects.petrinet.domain.arcs.reference.Reference; -import com.netgrif.application.engine.objects.petrinet.domain.arcs.reference.Type; import org.springframework.stereotype.Component; @Component @@ -14,7 +13,7 @@ public final class ArcFactory { public Arc getArc(com.netgrif.application.engine.objects.importer.model.Arc arc) throws IllegalArgumentException { switch (arc.getType()) { case REGULAR: - return new Arc(); + return new com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs.Arc(); case RESET: return new ResetArc(); case INHIBITOR: @@ -22,7 +21,7 @@ public Arc getArc(com.netgrif.application.engine.objects.importer.model.Arc arc) case READ: return new ReadArc(); case VARIABLE: - Arc varArc = new Arc(); + Arc varArc = new com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs.Arc(); Reference ref = new Reference(); ref.setReference(String.valueOf(arc.getMultiplicity())); varArc.setReference(ref); diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java index 5117432ab7..70ab83999c 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java @@ -8,6 +8,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; import org.springframework.data.mongodb.core.mapping.event.AfterDeleteEvent; +import org.springframework.data.mongodb.core.mapping.event.AfterLoadEvent; import org.springframework.stereotype.Component; @Slf4j @@ -17,6 +18,11 @@ public class PetriNetEventHandler extends AbstractMongoEventListener { @Autowired private IElasticPetriNetService service; + @Override + public void onAfterLoad(AfterLoadEvent event) { + + } + @Override public void onAfterDelete(AfterDeleteEvent event) { Document document = event.getDocument(); diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/Arc.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/Arc.java index 0dcb218ac9..fb18b4d797 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/Arc.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/Arc.java @@ -10,7 +10,7 @@ import java.util.ArrayList; import java.util.List; -public class Arc extends PetriNetObject { +public abstract class Arc extends PetriNetObject { protected Node source; diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/InhibitorArc.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/InhibitorArc.java index 7ac2823da4..734b097367 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/InhibitorArc.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/InhibitorArc.java @@ -8,7 +8,7 @@ * m(p) < w
* More info */ -public class InhibitorArc extends PTArc { +public abstract class InhibitorArc extends PTArc { public InhibitorArc() { super(); diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ReadArc.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ReadArc.java index 4e3b7a5de2..0fca4635e4 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ReadArc.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ReadArc.java @@ -8,7 +8,7 @@ *
m(p) ≥ w
* More info */ -public class ReadArc extends PTArc { +public abstract class ReadArc extends PTArc { public ReadArc() { super(); diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ResetArc.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ResetArc.java index deabc849ab..bff971271a 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ResetArc.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/petrinet/domain/arcs/ResetArc.java @@ -10,7 +10,7 @@ * * More info */ -public class ResetArc extends PTArc { +public abstract class ResetArc extends PTArc { public ResetArc() { super(); diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java new file mode 100644 index 0000000000..7a025ed220 --- /dev/null +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java @@ -0,0 +1,31 @@ +package com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs; + +import com.netgrif.application.engine.objects.petrinet.domain.Node; +import org.springframework.data.annotation.Transient; + +public class Arc extends com.netgrif.application.engine.objects.petrinet.domain.arcs.Arc { + + public Arc() { + super(); + } + + public Arc(Arc arc) { + super(arc); + } + + public Arc(Node source, Node destination, int multiplicity) { + super(source, destination, multiplicity); + } + + @Override + @Transient + public Node getDestination() { + return super.getDestination(); + } + + @Override + @Transient + public Node getSource() { + return super.getSource(); + } +} diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java new file mode 100644 index 0000000000..1ff9c8e8e8 --- /dev/null +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java @@ -0,0 +1,27 @@ +package com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs; + +import com.netgrif.application.engine.objects.petrinet.domain.Node; +import org.springframework.data.annotation.Transient; + +public class InhibitorArc extends com.netgrif.application.engine.objects.petrinet.domain.arcs.InhibitorArc { + + public InhibitorArc() { + super(); + } + + public InhibitorArc(InhibitorArc arc) { + super(arc); + } + + @Override + @Transient + public Node getDestination() { + return super.getDestination(); + } + + @Override + @Transient + public Node getSource() { + return super.getSource(); + } +} diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java new file mode 100644 index 0000000000..f947819874 --- /dev/null +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java @@ -0,0 +1,27 @@ +package com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs; + +import com.netgrif.application.engine.objects.petrinet.domain.Node; +import org.springframework.data.annotation.Transient; + +public class ReadArc extends com.netgrif.application.engine.objects.petrinet.domain.arcs.ReadArc { + + public ReadArc() { + super(); + } + + public ReadArc(ReadArc readArc) { + super(readArc); + } + + @Override + @Transient + public Node getDestination() { + return super.getDestination(); + } + + @Override + @Transient + public Node getSource() { + return super.getSource(); + } +} diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java new file mode 100644 index 0000000000..bed1966139 --- /dev/null +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java @@ -0,0 +1,27 @@ +package com.netgrif.application.engine.adapter.spring.petrinet.domain.arcs; + +import com.netgrif.application.engine.objects.petrinet.domain.Node; +import org.springframework.data.annotation.Transient; + +public class ResetArc extends com.netgrif.application.engine.objects.petrinet.domain.arcs.ResetArc { + + public ResetArc() { + super(); + } + + public ResetArc(ResetArc arc) { + super(arc); + } + + @Override + @Transient + public Node getDestination() { + return super.getDestination(); + } + + @Override + @Transient + public Node getSource() { + return super.getSource(); + } +} From 3f4cd89001af39524aff7b6c663a16e539a5d7af Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Thu, 30 Apr 2026 12:22:32 +0200 Subject: [PATCH 3/9] [NAE-2418] Verify @Transient handling across persistence layers in nae-spring-core-adapter - added annotation to user objects, so process list is transient --- .../auth/service/RegistrationService.java | 2 +- .../security/PublicAuthenticationFilter.java | 2 +- .../startup/runner/SuperCreatorRunner.java | 2 +- .../engine/action/AssignActionTest.groovy | 2 +- .../engine/action/RemoveActionTest.groovy | 2 +- .../engine/auth/LoginAttemptsTest.groovy | 2 +- .../engine/auth/SecurityContextTest.groovy | 2 +- .../auth/TaskAuthorizationServiceTest.groovy | 2 +- .../engine/auth/UserServiceTest.groovy | 2 +- .../WorkflowAuthorizationServiceTest.groovy | 2 +- .../engine/elastic/ElasticSearchTest.groovy | 2 +- .../filters/FilterImportExportTest.groovy | 2 +- .../ImpersonationServiceTest.groovy | 6 ++-- .../engine/insurance/mvc/InsuranceTest.groovy | 2 +- .../engine/menu/MenuImportExportTest.groovy | 2 +- .../groups/GroupServiceTest.groovy | 4 +-- .../ElasticSearchViewPermissionTest.groovy | 2 +- .../QueryDSLViewPermissionTest.groovy | 2 +- .../domain/dataset/FileFieldTest.groovy | 2 +- .../domain/dataset/FileListFieldTest.groovy | 2 +- .../domain/roles/ProcessRoleTest.groovy | 6 ++-- .../service/CachePetriNetServiceTest.groovy | 2 +- .../service/PetriNetServiceTest.groovy | 2 +- .../web/PetriNetControllerTest.groovy | 4 +-- .../engine/workflow/TaskControllerTest.groovy | 2 +- .../engine/MailSenderServiceTest.java | 2 +- .../engine/auth/service/TokenServiceTest.java | 6 ++-- .../workflow/WorkflowMvcPerformanceTest.java | 2 +- .../AbstractAuthorizationServiceTest.java | 2 +- .../workflow/service/TaskServiceTest.java | 2 +- .../engine/workflow/web/VariableArcsTest.java | 2 +- .../engine/objects/auth/domain/Group.java | 2 +- .../engine/objects/auth/domain/User.java | 2 +- .../spring/auth/domain/AnonymousUser.java | 3 ++ .../adapter/spring/auth/domain/Group.java | 35 +++++++++++++++++++ .../adapter/spring/auth/domain/User.java | 32 +++++++++++++++++ .../engine/auth/service/GroupServiceImpl.java | 2 +- .../engine/auth/service/UserServiceImpl.java | 4 +-- 38 files changed, 114 insertions(+), 44 deletions(-) create mode 100644 nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/Group.java create mode 100644 nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/User.java diff --git a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java index 1583db825f..cff9a87a36 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/auth/service/RegistrationService.java @@ -132,7 +132,7 @@ public AbstractUser createNewUser(NewUserRequest newUser) { } log.info("Renewing old user [{}]", newUser.email); } else { - user = new User(); + user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setEmail(newUser.email); user.setUsername(newUser.email); log.info("Creating new user [{}]", newUser.email); diff --git a/application-engine/src/main/java/com/netgrif/application/engine/configuration/security/PublicAuthenticationFilter.java b/application-engine/src/main/java/com/netgrif/application/engine/configuration/security/PublicAuthenticationFilter.java index 02791ccc93..aecb717ce3 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/configuration/security/PublicAuthenticationFilter.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/configuration/security/PublicAuthenticationFilter.java @@ -105,7 +105,7 @@ private LoggedUser resolveLoggedUser(String existingToken) { } private LoggedUser createAnonymousUser() { - User anonymousUser = new User(); + User anonymousUser = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); anonymousUser.setState(UserState.ACTIVE); anonymousUser = (User) userService.saveUser(anonymousUser, null); return ActorTransformer.toLoggedUser(anonymousUser); diff --git a/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/SuperCreatorRunner.java b/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/SuperCreatorRunner.java index d3059fe5a6..28a44775c6 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/SuperCreatorRunner.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/startup/runner/SuperCreatorRunner.java @@ -55,7 +55,7 @@ private AbstractUser createSuperUser() { Optional superUser = userService.findUserByUsername(UserConstants.ADMIN_USER_USERNAME, null); if (superUser.isEmpty()) { - User user = new User(); + User user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setFirstName(UserConstants.ADMIN_USER_FIRST_NAME); user.setLastName(UserConstants.ADMIN_USER_LAST_NAME); user.setUsername(UserConstants.ADMIN_USER_USERNAME); diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/action/AssignActionTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/action/AssignActionTest.groovy index f55beac18b..90010945b3 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/action/AssignActionTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/action/AssignActionTest.groovy @@ -100,7 +100,7 @@ class AssignActionTest { auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: USER_PASSWORD, state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: USER_PASSWORD, state: UserState.ACTIVE), [auths.get("user"), auths.get("admin")] as Authority[], // [org] as Group[], [] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/action/RemoveActionTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/action/RemoveActionTest.groovy index 44e3965bc9..084448f73a 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/action/RemoveActionTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/action/RemoveActionTest.groovy @@ -102,7 +102,7 @@ class RemoveActionTest { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - importHelper.createUser(new User(firstName: "Test", lastName : "Integration", email: USER_EMAIL, password: USER_PASSWORD, state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName : "Integration", email: USER_EMAIL, password: USER_PASSWORD, state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/LoginAttemptsTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/LoginAttemptsTest.groovy index c75b94d786..30ab5c0af5 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/LoginAttemptsTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/LoginAttemptsTest.groovy @@ -63,7 +63,7 @@ class LoginAttemptsTest { .build() auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: USER_PASSWORD, state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: USER_PASSWORD, state: UserState.ACTIVE), [auths.get("user"), auths.get("admin")] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/SecurityContextTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/SecurityContextTest.groovy index a337fcc963..d9744e79c2 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/SecurityContextTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/SecurityContextTest.groovy @@ -67,7 +67,7 @@ class SecurityContextTest { @BeforeEach void before() { testHelper.truncateDbs() - user = new User() + user = new com.netgrif.application.engine.adapter.spring.auth.domain.User() user.setUsername('test@email.com') user.setEmail('test@email.com') user.setCredential("password", new PasswordCredential('password', 0, true)) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/TaskAuthorizationServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/TaskAuthorizationServiceTest.groovy index e7cadf5f54..d234f6663e 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/TaskAuthorizationServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/TaskAuthorizationServiceTest.groovy @@ -183,7 +183,7 @@ class TaskAuthorizationServiceTest { this.netWithUserRefs = netWithUserRefs.getNet() def auths = importHelper.createAuthorities(["user": Authority.user]) - testUser = importHelper.createUser(new User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + testUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], // [org] as Group[], [] as ProcessRole[] diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/UserServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/UserServiceTest.groovy index cdb7b91798..33bacf5562 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/UserServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/UserServiceTest.groovy @@ -135,7 +135,7 @@ class UserServiceTest { Optional userOptional = userService.findUserByUsername("dummy@netgrif.com", null) User user = null if (userOptional.isEmpty()) { - user = new User() + user = new com.netgrif.application.engine.adapter.spring.auth.domain.User() user.setFirstName("Dummy") user.setLastName("User") user.setUsername("dummy@netgrif.com") diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/WorkflowAuthorizationServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/WorkflowAuthorizationServiceTest.groovy index dd9517e20a..bcd1860f10 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/auth/WorkflowAuthorizationServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/auth/WorkflowAuthorizationServiceTest.groovy @@ -141,7 +141,7 @@ class WorkflowAuthorizationServiceTest { this.netWithUserRefs = netWithUserRefs.getNet() def auths = importHelper.createAuthorities(["user": Authority.user]) - testUser = importHelper.createUser(new User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + testUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")]as Authority[], // [org] as Group[], [] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/elastic/ElasticSearchTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/elastic/ElasticSearchTest.groovy index 4d99dcd598..7aa17a3f95 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/elastic/ElasticSearchTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/elastic/ElasticSearchTest.groovy @@ -111,7 +111,7 @@ class ElasticSearchTest { // def org = importHelper.createGroup("Test") def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) // def processRoles = importHelper.getProcessRoles(net.get()) - def testUser = importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: USER_PASSW, state: UserState.ACTIVE), + def testUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: USER_PASSW, state: UserState.ACTIVE), [auths.get("user")] as Authority[], [net.roles.values().find { it.importId == "process_role" }] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/filters/FilterImportExportTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/filters/FilterImportExportTest.groovy index c36b3da835..316538bcc8 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/filters/FilterImportExportTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/filters/FilterImportExportTest.groovy @@ -306,7 +306,7 @@ class FilterImportExportTest { private User createDummyUser() { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - return importHelper.createUser(new User(firstName: "Dummy", lastName: "User", email: DUMMY_USER_MAIL, username: DUMMY_USER_MAIL, password: DUMMY_USER_PASSWORD, state: UserState.ACTIVE), + return importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Dummy", lastName: "User", email: DUMMY_USER_MAIL, username: DUMMY_USER_MAIL, password: DUMMY_USER_PASSWORD, state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/impersonation/ImpersonationServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/impersonation/ImpersonationServiceTest.groovy index 0f69ac4bf9..3ee7829d4e 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/impersonation/ImpersonationServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/impersonation/ImpersonationServiceTest.groovy @@ -131,21 +131,21 @@ class ImpersonationServiceTest { def authorityAnon = authorityService.getOrCreate(Authority.anonymous) def authorityAdmin = authorityService.getOrCreate(Authority.admin) - user1 = helper.createUser(new User(firstName: "Test", lastName: "User", email: "test@netgrif.com", "username": "test@netgrif.com", password: "password", state: UserState.ACTIVE), + user1 = helper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "User", email: "test@netgrif.com", "username": "test@netgrif.com", password: "password", state: UserState.ACTIVE), [authority] as Authority[], [] as ProcessRole[]) auth1 = new UsernamePasswordAuthenticationToken(ActorTransformer.toLoggedUser(user1), (user1 as User).password, user1.authoritySet as List) auth1.setDetails(new WebAuthenticationDetails(new MockHttpServletRequest())) - user2 = helper.createUser(new User(firstName: "Test", lastName: "User2", email: "test2@netgrif.com", "username": "test2@netgrif.com", password: "password", state: UserState.ACTIVE), + user2 = helper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "User2", email: "test2@netgrif.com", "username": "test2@netgrif.com", password: "password", state: UserState.ACTIVE), [authority, authorityAnon] as Authority[], testNet.roles.values() as ProcessRole[]) auth2 = new UsernamePasswordAuthenticationToken(ActorTransformer.toLoggedUser(user2), (user2 as User).password, user2.authoritySet as List) auth2.setDetails(new WebAuthenticationDetails(new MockHttpServletRequest())) - adminUser = helper.createUser(new User(firstName: "Admin", lastName: "User", email: "admin@netgrif.com", "username": "admin@netgrif.com", password: "password", state: UserState.ACTIVE), + adminUser = helper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Admin", lastName: "User", email: "admin@netgrif.com", "username": "admin@netgrif.com", password: "password", state: UserState.ACTIVE), [authority, authorityAdmin] as Authority[], testNet.roles.values() as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/insurance/mvc/InsuranceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/insurance/mvc/InsuranceTest.groovy index 6baed99f0d..3fbf6e0a72 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/insurance/mvc/InsuranceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/insurance/mvc/InsuranceTest.groovy @@ -141,7 +141,7 @@ class InsuranceTest { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) def processRoles = ImportHelper.getProcessRolesByImportId(net.getNet(), ["agent": "1", "company": "2"]) - importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("user"), auths.get("admin")] as Authority[], [processRoles.get("agent"), processRoles.get("company")] as ProcessRole[]) List roles = processRoleService.findAll(netId) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/menu/MenuImportExportTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/menu/MenuImportExportTest.groovy index 7803d2f9aa..69f3e16fc8 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/menu/MenuImportExportTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/menu/MenuImportExportTest.groovy @@ -204,7 +204,7 @@ class MenuImportExportTest { private User createDummyUser() { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - return importHelper.createUser(new User(firstName: "Dummy", lastName: "User", email: DUMMY_USER_MAIL, password: DUMMY_USER_PASSWORD, state: UserState.ACTIVE), + return importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Dummy", lastName: "User", email: DUMMY_USER_MAIL, password: DUMMY_USER_PASSWORD, state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/orgstructure/groups/GroupServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/orgstructure/groups/GroupServiceTest.groovy index e577779fae..9af198986e 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/orgstructure/groups/GroupServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/orgstructure/groups/GroupServiceTest.groovy @@ -46,10 +46,10 @@ class GroupServiceTest { void groupTest() { testHelper.truncateDbs() def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - importHelper.createUser(new User(firstName: "Dummy", lastName: "User", email: DUMMY_USER_MAIL, username: DUMMY_USER_MAIL, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Dummy", lastName: "User", email: DUMMY_USER_MAIL, username: DUMMY_USER_MAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) - importHelper.createUser(new User(firstName: "Customer", lastName: "User", email: CUSTOMER_USER_MAIL, username: CUSTOMER_USER_MAIL, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Customer", lastName: "User", email: CUSTOMER_USER_MAIL, username: CUSTOMER_USER_MAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/ElasticSearchViewPermissionTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/ElasticSearchViewPermissionTest.groovy index b49b795d8a..39af53014f 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/ElasticSearchViewPermissionTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/ElasticSearchViewPermissionTest.groovy @@ -106,7 +106,7 @@ class ElasticSearchViewPermissionTest { userAuthority = authorityService.getOrCreate(Authority.user) - testUser = importHelper.createUser(new User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + testUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [userAuthority] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/QueryDSLViewPermissionTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/QueryDSLViewPermissionTest.groovy index 61a2e8d3b4..52f3b21790 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/QueryDSLViewPermissionTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/permissions/QueryDSLViewPermissionTest.groovy @@ -99,7 +99,7 @@ class QueryDSLViewPermissionTest { userAuthority = authorityService.getOrCreate(Authority.user) - testUser = importHelper.createUser(new User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + testUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [userAuthority] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileFieldTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileFieldTest.groovy index a7195dc810..79e41844b1 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileFieldTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileFieldTest.groovy @@ -135,7 +135,7 @@ class FileFieldTest { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - def adminUser = importHelper.createUser(new User(firstName: "Admin", lastName: "User", username: UserConstants.ADMIN_USER_USERNAME, email: UserConstants.ADMIN_USER_EMAIL, password: "password", state: UserState.ACTIVE), + def adminUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Admin", lastName: "User", username: UserConstants.ADMIN_USER_USERNAME, email: UserConstants.ADMIN_USER_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("admin")] as Authority[], // [] as Group[], [] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileListFieldTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileListFieldTest.groovy index 75fcf2f448..244c901256 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileListFieldTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/dataset/FileListFieldTest.groovy @@ -135,7 +135,7 @@ class FileListFieldTest { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - def adminUser = importHelper.createUser(new User(firstName: "Admin", lastName: "User", username: UserConstants.ADMIN_USER_USERNAME, email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + def adminUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Admin", lastName: "User", username: UserConstants.ADMIN_USER_USERNAME, email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("admin")] as Authority[], // [] as Group[], [] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/roles/ProcessRoleTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/roles/ProcessRoleTest.groovy index d2fced36c8..4ec10127f7 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/roles/ProcessRoleTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/domain/roles/ProcessRoleTest.groovy @@ -94,7 +94,7 @@ class ProcessRoleTest { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) def processRoles = userProcessRoleRepository.findAllByProcessId(netId) - importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL_VIEW, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL_VIEW, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [processRoles.find { it.getStringId() == net.getNet().roles.values().find { @@ -102,11 +102,11 @@ class ProcessRoleTest { }.stringId }] as ProcessRole[]) - importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL_PERFORM, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL_PERFORM, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [processRoles.find { it.getStringId() == net.getNet().roles.values().find { it.name.defaultValue == "Perform" }.stringId }] as ProcessRole[]) - importHelper.createUser(new User(firstName: "Test", lastName: "Integration", email: USER_EMAIL_BOTH, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Test", lastName: "Integration", email: USER_EMAIL_BOTH, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [processRoles.find { it.getStringId() == net.getNet().roles.values().find { it.name.defaultValue == "View" }.stringId }, processRoles.find { it.getStringId() == net.getNet().roles.values().find { it.name.defaultValue == "Perform" }.stringId }] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/CachePetriNetServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/CachePetriNetServiceTest.groovy index c2ec5a73c8..bb5cfbcf3e 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/CachePetriNetServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/CachePetriNetServiceTest.groovy @@ -61,7 +61,7 @@ class CachePetriNetServiceTest { void setup() { testHelper.truncateDbs() def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - importHelper.createUser(new User(firstName: "Customer", lastName: "User", email: CUSTOMER_USER_MAIL, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Customer", lastName: "User", email: CUSTOMER_USER_MAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/PetriNetServiceTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/PetriNetServiceTest.groovy index 90ee4f5404..71eadea2a0 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/PetriNetServiceTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/service/PetriNetServiceTest.groovy @@ -96,7 +96,7 @@ class PetriNetServiceTest { void setup() { testHelper.truncateDbs() def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - importHelper.createUser(new User(firstName: "Customer", lastName: "User", email: CUSTOMER_USER_MAIL, password: "password", state: UserState.ACTIVE), + importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Customer", lastName: "User", email: CUSTOMER_USER_MAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], [] as ProcessRole[]) } diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/web/PetriNetControllerTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/web/PetriNetControllerTest.groovy index 5477dcf487..8ac1cd4351 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/web/PetriNetControllerTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/petrinet/web/PetriNetControllerTest.groovy @@ -99,7 +99,7 @@ class PetriNetControllerTest { def auths = importHelper.createAuthorities(["user": Authority.user, "admin": Authority.admin]) - def simpleUser = importHelper.createUser(new User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), + def simpleUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Role", lastName: "User", email: USER_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("user")] as Authority[], // [] as Group[], [] as ProcessRole[]) @@ -107,7 +107,7 @@ class PetriNetControllerTest { userAuth = new UsernamePasswordAuthenticationToken(ActorTransformer.toLoggedUser(simpleUser), "password", [auths.get("user")] as List) userAuth.setDetails(new WebAuthenticationDetails(new MockHttpServletRequest())) - def adminUser = importHelper.createUser(new User(firstName: "Admin", lastName: "User", email: ADMIN_EMAIL, password: "password", state: UserState.ACTIVE), + def adminUser = importHelper.createUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User(firstName: "Admin", lastName: "User", email: ADMIN_EMAIL, password: "password", state: UserState.ACTIVE), [auths.get("admin")] as Authority[], // [] as Group[], [] as ProcessRole[]) diff --git a/application-engine/src/test/groovy/com/netgrif/application/engine/workflow/TaskControllerTest.groovy b/application-engine/src/test/groovy/com/netgrif/application/engine/workflow/TaskControllerTest.groovy index c121c08963..12fafa4d2c 100644 --- a/application-engine/src/test/groovy/com/netgrif/application/engine/workflow/TaskControllerTest.groovy +++ b/application-engine/src/test/groovy/com/netgrif/application/engine/workflow/TaskControllerTest.groovy @@ -102,7 +102,7 @@ class TaskControllerTest { @BeforeEach void init() { testHelper.truncateDbs() - userService.saveUser(new User( + userService.saveUser(new com.netgrif.application.engine.adapter.spring.auth.domain.User( firstName: "Dummy", lastName: "Netgrif", username: DUMMY_USER_MAIL, diff --git a/application-engine/src/test/java/com/netgrif/application/engine/MailSenderServiceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/MailSenderServiceTest.java index c8754d24ab..6ce76b7318 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/MailSenderServiceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/MailSenderServiceTest.java @@ -45,7 +45,7 @@ public void before() { @Test public void testSend() throws Exception { - User user = new User(); + User user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setUsername(RECIPIENT); user.setEmail(RECIPIENT); user.setPassword(""); diff --git a/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java index 338d63a7ec..f7268677ce 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/auth/service/TokenServiceTest.java @@ -40,7 +40,7 @@ public void cleanUp() { @Test public void removeExpired() throws Exception { - User expired = new User(); + User expired = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); expired.setUsername("test1@test.com"); expired.setEmail("test1@test.com"); expired.setPassword("password"); @@ -49,7 +49,7 @@ public void removeExpired() throws Exception { expired.setState(UserState.INACTIVE); userService.saveUser(expired, null); - User expired2 = new User(); + User expired2 = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); expired2.setUsername("test2@test.com"); expired2.setEmail("test2@test.com"); expired2.setPassword("password"); @@ -64,7 +64,7 @@ public void removeExpired() throws Exception { @Test public void authorizeToken() throws Exception { - User expired = new User(); + User expired = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); expired.setToken("token3"); expired.setUsername("test3@test.com"); expired.setEmail("test3@test.com"); diff --git a/application-engine/src/test/java/com/netgrif/application/engine/workflow/WorkflowMvcPerformanceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/workflow/WorkflowMvcPerformanceTest.java index b952430ff4..5795f069b8 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/workflow/WorkflowMvcPerformanceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/workflow/WorkflowMvcPerformanceTest.java @@ -85,7 +85,7 @@ public void beforeEach() throws IOException, MissingPetriNetMetaDataException { .apply(springSecurity()) .build(); - User user = new User(); + User user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setFirstName("Firstname"); user.setLastName("Lastname"); user.setUsername("username1"); diff --git a/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/AbstractAuthorizationServiceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/AbstractAuthorizationServiceTest.java index e2b9f2757f..b55fd5706a 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/AbstractAuthorizationServiceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/AbstractAuthorizationServiceTest.java @@ -47,7 +47,7 @@ public void getAggregatePermissions() { roles.add(new com.netgrif.application.engine.adapter.spring.petrinet.domain.roles.ProcessRole()); roles.add(new com.netgrif.application.engine.adapter.spring.petrinet.domain.roles.ProcessRole()); - AbstractUser user = new User(); + AbstractUser user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.addProcessRole(roles.get(0)); user.addProcessRole(roles.get(1)); diff --git a/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/TaskServiceTest.java b/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/TaskServiceTest.java index 046bf7fd11..6635e9cc7b 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/TaskServiceTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/workflow/service/TaskServiceTest.java @@ -117,7 +117,7 @@ public void resetArcTest() throws TransitionNotExecutableException, MissingPetri .color("color") .author(loggedUser) .build()); - User user = new User(); + User user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setFirstName("name"); user.setPassword("password"); user.setLastName("surname"); diff --git a/application-engine/src/test/java/com/netgrif/application/engine/workflow/web/VariableArcsTest.java b/application-engine/src/test/java/com/netgrif/application/engine/workflow/web/VariableArcsTest.java index a1f61c2029..32b354eab6 100644 --- a/application-engine/src/test/java/com/netgrif/application/engine/workflow/web/VariableArcsTest.java +++ b/application-engine/src/test/java/com/netgrif/application/engine/workflow/web/VariableArcsTest.java @@ -122,7 +122,7 @@ public void before() throws Exception { assert outcome.getNet() != null; PetriNet net = outcome.getNet(); this.loaded = service.getPetriNet(net.getStringId()); - User user = new User(); + User user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setFirstName("Test"); user.setLastName("Test"); diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Group.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Group.java index 5c14ba51de..7c7ba44f1e 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Group.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Group.java @@ -16,7 +16,7 @@ */ @Getter @QueryEntity -public class Group extends AbstractActor implements Serializable { +public abstract class Group extends AbstractActor implements Serializable { /** * The unique identifier of the group. diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/User.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/User.java index be637542de..61e8a0e8cf 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/User.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/User.java @@ -26,7 +26,7 @@ @QueryEntity @AllArgsConstructor @EqualsAndHashCode(callSuper = false) -public class User extends AbstractUser implements Serializable { +public abstract class User extends AbstractUser implements Serializable { /** * Flag indicating whether the user's email has been verified diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java index c641917e0c..6bc8619d3e 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java @@ -3,13 +3,16 @@ import com.netgrif.application.engine.objects.auth.domain.AbstractUser; import com.netgrif.application.engine.objects.auth.domain.Attribute; import com.netgrif.application.engine.objects.auth.domain.Authority; +import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; import lombok.Data; import org.bson.types.ObjectId; +import org.springframework.data.annotation.Transient; import java.time.Duration; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Set; /** * Represents an anonymous user in the system, extending the {@link AbstractUser} class. diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/Group.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/Group.java new file mode 100644 index 0000000000..8123a21b43 --- /dev/null +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/Group.java @@ -0,0 +1,35 @@ +package com.netgrif.application.engine.adapter.spring.auth.domain; + +import com.netgrif.application.engine.objects.auth.domain.Authority; +import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; +import org.bson.types.ObjectId; +import org.springframework.data.annotation.Transient; + +import java.util.Set; + +public class Group extends com.netgrif.application.engine.objects.auth.domain.Group { + + protected Group() { + super(); + } + + public Group(ObjectId id) { + super(id); + } + + public Group(String identifier, String realmId) { + super(identifier, realmId); + } + + @Override + @Transient + public Set getProcessRoles() { + return super.getProcessRoles(); + } + + @Override + @Transient + public Set getAuthoritySet() { + return super.getAuthoritySet(); + } +} diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/User.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/User.java new file mode 100644 index 0000000000..6109c46421 --- /dev/null +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/User.java @@ -0,0 +1,32 @@ +package com.netgrif.application.engine.adapter.spring.auth.domain; + + +import com.netgrif.application.engine.objects.auth.domain.Authority; +import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; +import org.bson.types.ObjectId; +import org.springframework.data.annotation.Transient; + +import java.util.Set; + +public class User extends com.netgrif.application.engine.objects.auth.domain.User { + + public User() { + super(); + } + + public User(ObjectId id) { + super(id); + } + + @Override + @Transient + public Set getProcessRoles() { + return super.getProcessRoles(); + } + + @Override + @Transient + public Set getAuthoritySet() { + return super.getAuthoritySet(); + } +} diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/GroupServiceImpl.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/GroupServiceImpl.java index b13df2a032..3584c1cc29 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/GroupServiceImpl.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/GroupServiceImpl.java @@ -176,7 +176,7 @@ public Group create(AbstractUser groupOwner) { @Override public Group create(String identifier, String title, AbstractUser groupOwner) { log.info("Creating default group for user: [{}]", groupOwner.getStringId()); - Group group = new Group(identifier, groupOwner.getRealmId()); + Group group = new com.netgrif.application.engine.adapter.spring.auth.domain.Group(identifier, groupOwner.getRealmId()); group.setOwnerId(groupOwner.getStringId()); group.setOwnerUsername(groupOwner.getUsername()); group.setDisplayName(title); diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java index 7a35d67771..7899955100 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserServiceImpl.java @@ -572,7 +572,7 @@ public void removeRoleOfDeletedPetriNet(Set petriNetRoles) { public AbstractUser createSystemUser() { User system = (User) findByEmail(UserConstants.SYSTEM_USER_EMAIL, null); if (system == null) { - system = new User(); + system = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); system.setUsername(UserConstants.SYSTEM_USER_EMAIL); system.setEmail(UserConstants.SYSTEM_USER_EMAIL); system.setPassword("n/a"); @@ -620,7 +620,7 @@ public Page search(Predicate predicate, Pageable pageable, String realmId) protected User initializeNewUser(String username, String email, String firstName, String lastName, String password, String realmId) { log.trace("Initializing new user [{}] in realm [{}]", username, realmId); - User user = new User(); + User user = new com.netgrif.application.engine.adapter.spring.auth.domain.User(); user.setRealmId(realmId); user.setUsername(username); user.setEmail(email); From e3f0867609000540f9abe8d992022792e3e6a518 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Mon, 4 May 2026 11:22:35 +0200 Subject: [PATCH 4/9] [NAE-2418] Verify @Transient handling across persistence layers in nae-spring-core-adapter Refactored `AbstractActor` to manage roles and authorities with additional `processRoleIds` and `authorityIds` fields for better flexibility. Updated related services, repositories, and XML test resources to align with the modified structure. Introduced `UserMongoEventListener` to resolve roles and authorities from IDs after data loading. --- .../petrinet/service/ProcessRoleService.java | 18 ++--- .../resources/petriNets/function_test.xml | 2 +- .../resources/petriNets/function_test_v2.xml | 2 +- .../objects/auth/domain/AbstractActor.java | 70 ++++++++++++++++++- .../auth/service/UserMongoEventListener.java | 33 +++++++++ .../auth/repository/UserRepository.java | 2 +- 6 files changed, 111 insertions(+), 16 deletions(-) create mode 100644 nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java index e61ebf9c30..db773a30c5 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/ProcessRoleService.java @@ -5,12 +5,9 @@ import com.netgrif.application.engine.adapter.spring.petrinet.domain.roles.RoleReferencedException; import com.netgrif.application.engine.adapter.spring.utils.PaginationProperties; import com.netgrif.application.engine.auth.service.GroupService; -import com.netgrif.application.engine.objects.auth.domain.AbstractUser; +import com.netgrif.application.engine.objects.auth.domain.*; import com.netgrif.application.engine.auth.service.RealmService; -import com.netgrif.application.engine.objects.auth.domain.Group; -import com.netgrif.application.engine.objects.auth.domain.LoggedUser; import com.netgrif.application.engine.auth.service.UserService; -import com.netgrif.application.engine.objects.auth.domain.Realm; import com.netgrif.application.engine.objects.event.events.user.UserRoleChangeEvent; import com.netgrif.application.engine.objects.importer.model.EventPhaseType; import com.netgrif.application.engine.objects.petrinet.domain.PetriNet; @@ -121,30 +118,29 @@ public void deleteAll() { @Override public void assignRolesToUser(AbstractUser user, Collection processResourceIds, LoggedUser loggedUser) { - assignRolesToActor(user.getProcessRoles(), processResourceIds); + assignRolesToActor(user, processResourceIds); saveUserAndReloadContext(user, loggedUser); } @Override public void assignRolesToGroup(Group group, Collection requestedRolesIds) { - assignRolesToActor(group.getProcessRoles(), requestedRolesIds); + assignRolesToActor(group, requestedRolesIds); groupService.save(group); } - protected void assignRolesToActor(Collection oldActorRoles, Collection requestedRolesIds) { + protected void assignRolesToActor(AbstractActor abstractActor, Collection requestedRolesIds) { List requestedRoles = this.findByIds(requestedRolesIds.stream().map(ProcessResourceId::toString).collect(Collectors.toSet())); if (requestedRoles.isEmpty() && !requestedRolesIds.isEmpty()) throw new IllegalArgumentException("No process roles found."); if (requestedRoles.size() != requestedRolesIds.size()) throw new IllegalArgumentException("Not all process roles were found!"); - Set userOldRoles = new HashSet<>(oldActorRoles); + Set userOldRoles = new HashSet<>(abstractActor.getProcessRoles()); Set rolesNewToUser = getRolesNewToActor(userOldRoles, requestedRoles); Set rolesRemovedFromUser = getRolesRemovedFromActor(userOldRoles, requestedRoles); - - oldActorRoles.clear(); - oldActorRoles.addAll(updateRequestedRoles(userOldRoles, rolesNewToUser, rolesRemovedFromUser)); + abstractActor.clearProcessRoles(); + abstractActor.addAllProcessRoles(updateRequestedRoles(userOldRoles, rolesNewToUser, rolesRemovedFromUser)); } protected void saveUserAndReloadContext(AbstractUser user, LoggedUser loggedUser) { diff --git a/application-engine/src/test/resources/petriNets/function_test.xml b/application-engine/src/test/resources/petriNets/function_test.xml index 52e7c18007..aff03bf578 100644 --- a/application-engine/src/test/resources/petriNets/function_test.xml +++ b/application-engine/src/test/resources/petriNets/function_test.xml @@ -118,7 +118,7 @@ Boolean false - def user = new com.netgrif.application.engine.objects.auth.domain.User() + def user = new com.netgrif.application.engine.adapter.spring.auth.domain.User() user.username = "test@test.com" user.email = "test@test.com" user.password = "password" diff --git a/application-engine/src/test/resources/petriNets/function_test_v2.xml b/application-engine/src/test/resources/petriNets/function_test_v2.xml index 7acf802264..8dad17c823 100644 --- a/application-engine/src/test/resources/petriNets/function_test_v2.xml +++ b/application-engine/src/test/resources/petriNets/function_test_v2.xml @@ -99,7 +99,7 @@ Boolean false - def user = new com.netgrif.application.engine.objects.auth.domain.User() + def user = new com.netgrif.application.engine.adapter.spring.auth.domain.User() user.username = "test@test.com" user.email = "test@test.com" user.password = "password" diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java index 2b844d7d0e..a526137501 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java @@ -34,9 +34,13 @@ public abstract class AbstractActor implements Serializable { /** Map of actor's attributes with their values and requirement status */ protected Map> attributes = new HashMap<>(); + protected Set authorityIds = new HashSet<>(); + /** Set of authorities (permissions) assigned to this actor */ protected Set authoritySet = new HashSet<>(); + protected Set processRoleIds = new HashSet<>(); + /** Set of process-specific roles assigned to this actor */ protected Set processRoles = new HashSet<>(); @@ -184,11 +188,16 @@ public boolean validateRequiredAttributes() { return true; } + public void setAuthorityIds(Set authorityIds) { + this.authorityIds = authorityIds == null ? new HashSet<>() : new HashSet<>(authorityIds); + } + /** * Sets the authority set with a defensive copy. * @param authoritySet set of authorities to set, null creates empty set */ public void setAuthoritySet(Set authoritySet) { + this.authorityIds = authoritySet == null ? new HashSet<>() : new HashSet<>(authoritySet.stream().map(Authority::getStringId).toList()); this.authoritySet = authoritySet == null ? new HashSet<>() : new HashSet<>(authoritySet); } @@ -197,9 +206,13 @@ public void setAuthoritySet(Set authoritySet) { * @param authority the authority to add */ public void addAuthority(Authority authority) { + if (this.authorityIds == null) { + this.authorityIds = new HashSet<>(); + } if (this.authoritySet == null) { this.authoritySet = new HashSet<>(); } + this.authorityIds.add(authority.getStringId()); this.authoritySet.add(authority); } @@ -208,6 +221,11 @@ public void addAuthority(Authority authority) { * @param authority the authority to remove */ public void removeAuthority(Authority authority) { + if (this.authorityIds == null) { + this.authorityIds = new HashSet<>(); + } else { + this.authorityIds.remove(authority.getStringId()); + } if (this.authoritySet == null) { this.authoritySet = new HashSet<>(); } else if (!this.authoritySet.remove(authority)) { @@ -222,35 +240,65 @@ public void removeAuthority(Authority authority) { public void removeAuthorityByName(String name) { if (this.authoritySet == null) { this.authoritySet = new HashSet<>(); - } else { - this.authoritySet.removeIf(it -> it.getName().equals(name)); + } else { + Authority authority = authoritySet.stream().filter(it -> it.getName().equals(name)).findFirst().orElse(null); + if (authority != null) { + this.authorityIds.remove(authority.getStringId()); + this.authoritySet.remove(authority); + } } } + public void setProcessRoleIds(Set processRoleIds) { + this.processRoleIds = processRoleIds == null ? new HashSet<>() : new HashSet<>(processRoleIds);; + } + /** * Sets the process roles with a defensive copy. * @param processRoleSet set of process roles to set, null creates empty set */ public void setProcessRoles(Set processRoleSet) { this.processRoles = processRoleSet == null ? new HashSet<>() : new HashSet<>(processRoleSet); + this.processRoleIds = processRoleSet == null ? new HashSet<>() : new HashSet<>(processRoleSet.stream().map(ProcessRole::getStringId).toList()); } /** * Adds a process role to the actor. + * t * @param role the process role to add */ public void addProcessRole(ProcessRole role) { + if (this.processRoleIds == null) { + this.processRoleIds = new HashSet<>(); + } if (this.processRoles == null) { this.processRoles = new HashSet<>(); } + this.processRoleIds.add(role.getStringId()); this.processRoles.add(role); } + public void addAllProcessRoles(Set roles) { + if (this.processRoleIds == null) { + this.processRoleIds = new HashSet<>(); + } + if (this.processRoles == null) { + this.processRoles = new HashSet<>(); + } + this.processRoleIds.addAll(roles.stream().map(ProcessRole::getStringId).toList()); + this.processRoles.addAll(roles); + } + /** * Removes a process role from the actor. * @param role the process role to remove */ public void removeProcessRole(ProcessRole role) { + if (this.processRoleIds == null) { + this.processRoleIds = new HashSet<>(); + } else { + this.processRoleIds.remove(role.getStringId()); + } if (this.processRoles == null) { this.processRoles = new HashSet<>(); } else if (!this.processRoles.remove(role)) { @@ -263,6 +311,11 @@ public void removeProcessRole(ProcessRole role) { * @param id ID of the process role to remove */ public void removeProcessRoleById(String id) { + if (this.processRoleIds == null) { + this.processRoleIds = new HashSet<>(); + } else { + this.processRoleIds.remove(id); + } if (this.processRoles == null) { this.processRoles = new HashSet<>(); } else { @@ -270,6 +323,19 @@ public void removeProcessRoleById(String id) { } } + public void clearProcessRoles() { + if (this.processRoleIds == null) { + this.processRoleIds = new HashSet<>(); + } else { + this.processRoleIds.clear(); + } + if (this.processRoles == null) { + this.processRoles = new HashSet<>(); + } else { + this.processRoles.clear(); + } + } + /** * Sets the group IDs with a defensive copy. * @param groupIds set of group IDs to set, null creates empty set diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java new file mode 100644 index 0000000000..659bb20ff4 --- /dev/null +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java @@ -0,0 +1,33 @@ +package com.netgrif.application.engine.auth.service; + +import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; +import com.netgrif.application.engine.objects.auth.domain.AbstractActor; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; +import org.springframework.data.mongodb.core.mapping.event.AfterConvertEvent; +import org.springframework.data.mongodb.core.mapping.event.AfterLoadEvent; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +public class UserMongoEventListener extends AbstractMongoEventListener { + + private final ProcessRoleService processRoleService; + + private final AuthorityService authorityService; + + @Override + public void onAfterLoad(AfterLoadEvent event) { + log.trace("User loaded: {}", event.getSource()); + log.trace("Resolving process roles of user with id: {}", event.getSource()); + } + + @Override + public void onAfterConvert(AfterConvertEvent event) { + AbstractActor actor = event.getSource(); + actor.getProcessRoleIds().forEach(processRoleId -> actor.getProcessRoles().add(processRoleService.findById(processRoleId))); + actor.getAuthorityIds().forEach(authorityId -> actor.getAuthoritySet().add(authorityService.getOne(authorityId))); + } +} diff --git a/nae-user-common/src/main/java/com/netgrif/application/engine/auth/repository/UserRepository.java b/nae-user-common/src/main/java/com/netgrif/application/engine/auth/repository/UserRepository.java index c7e6e85d7d..f0c5627d32 100644 --- a/nae-user-common/src/main/java/com/netgrif/application/engine/auth/repository/UserRepository.java +++ b/nae-user-common/src/main/java/com/netgrif/application/engine/auth/repository/UserRepository.java @@ -202,7 +202,7 @@ default Page findDistinctByStateAndProcessRoles__idIn(UserState state, Col */ default Page findAllByProcessRoles__idIn(Collection rolesId, Pageable pageable, MongoTemplate mongoTemplate, String collection) { Query query = Query.query( - Criteria.where("processRoles._id").in(rolesId)); + Criteria.where("processRoleIds").in(rolesId.stream().map(ProcessResourceId::toString).toList())); return resolveUserPage(pageable, mongoTemplate, collection, query); } From ae51eb276c2e35f1acefa63d0c8c8e2fda8f5421 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Mon, 4 May 2026 13:41:50 +0200 Subject: [PATCH 5/9] [NAE-2418] Verify @Transient handling across persistence layers in nae-spring-core-adapter Replaced explicit imports with wildcard in `AbstractActor` for conciseness. Also adjusted the `addAllProcessRoles` method to use a more general `Collection` type for improved flexibility in handling process roles. --- .../engine/objects/auth/domain/AbstractActor.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java index a526137501..5c2f5271a1 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java @@ -9,10 +9,7 @@ import org.bson.types.ObjectId; import java.io.Serializable; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Abstract base class for actors in the system representing entities with authentication and authorization capabilities. @@ -278,7 +275,7 @@ public void addProcessRole(ProcessRole role) { this.processRoles.add(role); } - public void addAllProcessRoles(Set roles) { + public void addAllProcessRoles(Collection roles) { if (this.processRoleIds == null) { this.processRoleIds = new HashSet<>(); } From 9d9812d6d532f1bbd90738561409f0e59c989396 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Mon, 4 May 2026 15:20:47 +0200 Subject: [PATCH 6/9] [NAE-2418] Verify @Transient handling across persistence layers - updated according to PR --- .../service/PetriNetEventHandler.java | 7 ------- .../objects/auth/domain/AbstractActor.java | 18 +++++++++-------- .../spring/auth/domain/AnonymousUser.java | 3 --- .../spring/petrinet/domain/arcs/Arc.java | 2 +- .../petrinet/domain/arcs/InhibitorArc.java | 2 +- .../spring/petrinet/domain/arcs/ReadArc.java | 2 +- .../spring/petrinet/domain/arcs/ResetArc.java | 2 +- .../auth/service/UserMongoEventListener.java | 20 +++++++++++++++---- 8 files changed, 30 insertions(+), 26 deletions(-) diff --git a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java index 70ab83999c..c0130e5752 100644 --- a/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java +++ b/application-engine/src/main/java/com/netgrif/application/engine/petrinet/service/PetriNetEventHandler.java @@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; import org.springframework.data.mongodb.core.mapping.event.AfterDeleteEvent; -import org.springframework.data.mongodb.core.mapping.event.AfterLoadEvent; import org.springframework.stereotype.Component; @Slf4j @@ -17,12 +16,6 @@ public class PetriNetEventHandler extends AbstractMongoEventListener { @Autowired private IElasticPetriNetService service; - - @Override - public void onAfterLoad(AfterLoadEvent event) { - - } - @Override public void onAfterDelete(AfterDeleteEvent event) { Document document = event.getDocument(); diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java index 5c2f5271a1..b8a7fff630 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java @@ -10,6 +10,7 @@ import java.io.Serializable; import java.util.*; +import java.util.stream.Collectors; /** * Abstract base class for actors in the system representing entities with authentication and authorization capabilities. @@ -187,6 +188,7 @@ public boolean validateRequiredAttributes() { public void setAuthorityIds(Set authorityIds) { this.authorityIds = authorityIds == null ? new HashSet<>() : new HashSet<>(authorityIds); + this.authoritySet = new HashSet<>(); } /** @@ -194,7 +196,7 @@ public void setAuthorityIds(Set authorityIds) { * @param authoritySet set of authorities to set, null creates empty set */ public void setAuthoritySet(Set authoritySet) { - this.authorityIds = authoritySet == null ? new HashSet<>() : new HashSet<>(authoritySet.stream().map(Authority::getStringId).toList()); + this.authorityIds = authoritySet == null ? new HashSet<>() : authoritySet.stream().map(Authority::getStringId).collect(Collectors.toSet()); this.authoritySet = authoritySet == null ? new HashSet<>() : new HashSet<>(authoritySet); } @@ -238,16 +240,17 @@ public void removeAuthorityByName(String name) { if (this.authoritySet == null) { this.authoritySet = new HashSet<>(); } else { - Authority authority = authoritySet.stream().filter(it -> it.getName().equals(name)).findFirst().orElse(null); - if (authority != null) { - this.authorityIds.remove(authority.getStringId()); - this.authoritySet.remove(authority); + Optional authorityOpt = authoritySet.stream().filter(it -> it.getName().equals(name)).findFirst(); + if (authorityOpt.isPresent()) { + this.authorityIds.remove(authorityOpt.get().getStringId()); + this.authoritySet.remove(authorityOpt.get()); } } } public void setProcessRoleIds(Set processRoleIds) { - this.processRoleIds = processRoleIds == null ? new HashSet<>() : new HashSet<>(processRoleIds);; + this.processRoleIds = processRoleIds == null ? new HashSet<>() : new HashSet<>(processRoleIds); + this.processRoles = new HashSet<>(); } /** @@ -255,13 +258,12 @@ public void setProcessRoleIds(Set processRoleIds) { * @param processRoleSet set of process roles to set, null creates empty set */ public void setProcessRoles(Set processRoleSet) { + this.processRoleIds = processRoleSet == null ? new HashSet<>() : processRoleSet.stream().map(ProcessRole::getStringId).collect(Collectors.toSet()); this.processRoles = processRoleSet == null ? new HashSet<>() : new HashSet<>(processRoleSet); - this.processRoleIds = processRoleSet == null ? new HashSet<>() : new HashSet<>(processRoleSet.stream().map(ProcessRole::getStringId).toList()); } /** * Adds a process role to the actor. - * t * @param role the process role to add */ public void addProcessRole(ProcessRole role) { diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java index 6bc8619d3e..c641917e0c 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/auth/domain/AnonymousUser.java @@ -3,16 +3,13 @@ import com.netgrif.application.engine.objects.auth.domain.AbstractUser; import com.netgrif.application.engine.objects.auth.domain.Attribute; import com.netgrif.application.engine.objects.auth.domain.Authority; -import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; import lombok.Data; import org.bson.types.ObjectId; -import org.springframework.data.annotation.Transient; import java.time.Duration; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Set; /** * Represents an anonymous user in the system, extending the {@link AbstractUser} class. diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java index 7a025ed220..e3228ba682 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java @@ -9,7 +9,7 @@ public Arc() { super(); } - public Arc(Arc arc) { + public Arc(com.netgrif.application.engine.objects.petrinet.domain.arcs.Arc arc) { super(arc); } diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java index 1ff9c8e8e8..58d53d3051 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java @@ -9,7 +9,7 @@ public InhibitorArc() { super(); } - public InhibitorArc(InhibitorArc arc) { + public InhibitorArc(com.netgrif.application.engine.objects.petrinet.domain.arcs.InhibitorArc arc) { super(arc); } diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java index f947819874..5d7cdca99c 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java @@ -9,7 +9,7 @@ public ReadArc() { super(); } - public ReadArc(ReadArc readArc) { + public ReadArc(com.netgrif.application.engine.objects.petrinet.domain.arcs.ReadArc readArc) { super(readArc); } diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java index bed1966139..c29034ac87 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java @@ -9,7 +9,7 @@ public ResetArc() { super(); } - public ResetArc(ResetArc arc) { + public ResetArc(com.netgrif.application.engine.objects.petrinet.domain.arcs.ResetArc arc) { super(arc); } diff --git a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java index 659bb20ff4..adf46087f5 100644 --- a/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java +++ b/nae-user-ce/src/main/java/com/netgrif/application/engine/auth/service/UserMongoEventListener.java @@ -2,6 +2,8 @@ import com.netgrif.application.engine.adapter.spring.petrinet.service.ProcessRoleService; import com.netgrif.application.engine.objects.auth.domain.AbstractActor; +import com.netgrif.application.engine.objects.auth.domain.Authority; +import com.netgrif.application.engine.objects.petrinet.domain.roles.ProcessRole; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener; @@ -20,14 +22,24 @@ public class UserMongoEventListener extends AbstractMongoEventListener event) { - log.trace("User loaded: {}", event.getSource()); - log.trace("Resolving process roles of user with id: {}", event.getSource()); + log.trace("User loaded: {}", event.getSource().get("id")); + log.trace("Resolving process roles of user with username: {}", event.getSource().get("id")); } @Override public void onAfterConvert(AfterConvertEvent event) { AbstractActor actor = event.getSource(); - actor.getProcessRoleIds().forEach(processRoleId -> actor.getProcessRoles().add(processRoleService.findById(processRoleId))); - actor.getAuthorityIds().forEach(authorityId -> actor.getAuthoritySet().add(authorityService.getOne(authorityId))); + actor.getProcessRoleIds().forEach(processRoleId -> { + ProcessRole role = processRoleService.findById(processRoleId); + if (role != null) { + actor.addProcessRole(role); + } + }); + actor.getAuthorityIds().forEach(authorityId -> { + Authority authority = authorityService.getOne(authorityId); + if (authority != null) { + actor.addAuthority(authority); + } + }); } } From 56994731a601c5a29d583f25b4e32f67a1132cb9 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Tue, 5 May 2026 09:15:20 +0200 Subject: [PATCH 7/9] Refactor DataGroup constructor to use fully qualified name Adjusted the constructor to reference DataGroup with its fully qualified name. This change resolves ambiguity and ensures clarity when dealing with similarly named classes in different packages. --- .../engine/adapter/spring/workflow/domain/DataGroup.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java index 0db0d2510e..01c96740e6 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/workflow/domain/DataGroup.java @@ -10,7 +10,7 @@ public DataGroup() { super(); } - public DataGroup(DataGroup group) { + public DataGroup(com.netgrif.application.engine.objects.petrinet.domain.DataGroup group) { super(group); } From d9eb0289224539cf1d38a5836edecc50beaf981d Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Tue, 5 May 2026 09:19:59 +0200 Subject: [PATCH 8/9] Prevent null inputs in authority and process role methods Add null checks to safeguard against potential NullPointerExceptions in methods handling authorities and process roles. This ensures better stability and avoids unexpected crashes when null values are passed as arguments. --- .../engine/objects/auth/domain/AbstractActor.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java index b8a7fff630..543ccebec1 100644 --- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java +++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/AbstractActor.java @@ -205,6 +205,9 @@ public void setAuthoritySet(Set authoritySet) { * @param authority the authority to add */ public void addAuthority(Authority authority) { + if (authority == null) { + return; + } if (this.authorityIds == null) { this.authorityIds = new HashSet<>(); } @@ -220,6 +223,9 @@ public void addAuthority(Authority authority) { * @param authority the authority to remove */ public void removeAuthority(Authority authority) { + if (authority == null) { + return; + } if (this.authorityIds == null) { this.authorityIds = new HashSet<>(); } else { @@ -267,6 +273,9 @@ public void setProcessRoles(Set processRoleSet) { * @param role the process role to add */ public void addProcessRole(ProcessRole role) { + if (role == null) { + return; + } if (this.processRoleIds == null) { this.processRoleIds = new HashSet<>(); } @@ -278,6 +287,9 @@ public void addProcessRole(ProcessRole role) { } public void addAllProcessRoles(Collection roles) { + if (roles == null || roles.isEmpty()) { + return; + } if (this.processRoleIds == null) { this.processRoleIds = new HashSet<>(); } @@ -293,6 +305,9 @@ public void addAllProcessRoles(Collection roles) { * @param role the process role to remove */ public void removeProcessRole(ProcessRole role) { + if (role == null) { + return; + } if (this.processRoleIds == null) { this.processRoleIds = new HashSet<>(); } else { From cb781fcc6528362d330b47e0df22ebd8590ade94 Mon Sep 17 00:00:00 2001 From: renczesstefan Date: Tue, 5 May 2026 09:35:25 +0200 Subject: [PATCH 9/9] Add copy constructors to Arc classes Introduced copy constructors for `Arc`, `ReadArc`, `ResetArc`, and `InhibitorArc` classes to allow object duplication. This enhances flexibility and simplifies operations involving the creation of identical arc instances. --- .../engine/adapter/spring/petrinet/domain/arcs/Arc.java | 4 ++++ .../adapter/spring/petrinet/domain/arcs/InhibitorArc.java | 4 ++++ .../engine/adapter/spring/petrinet/domain/arcs/ReadArc.java | 4 ++++ .../engine/adapter/spring/petrinet/domain/arcs/ResetArc.java | 4 ++++ 4 files changed, 16 insertions(+) diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java index e3228ba682..566c361d53 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/Arc.java @@ -13,6 +13,10 @@ public Arc(com.netgrif.application.engine.objects.petrinet.domain.arcs.Arc arc) super(arc); } + public Arc(Arc arc) { + super(arc); + } + public Arc(Node source, Node destination, int multiplicity) { super(source, destination, multiplicity); } diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java index 58d53d3051..ed19f644df 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/InhibitorArc.java @@ -13,6 +13,10 @@ public InhibitorArc(com.netgrif.application.engine.objects.petrinet.domain.arcs. super(arc); } + public InhibitorArc(InhibitorArc arc) { + super(arc); + } + @Override @Transient public Node getDestination() { diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java index 5d7cdca99c..d7b78ae4cd 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ReadArc.java @@ -13,6 +13,10 @@ public ReadArc(com.netgrif.application.engine.objects.petrinet.domain.arcs.ReadA super(readArc); } + public ReadArc(ReadArc readArc) { + super(readArc); + } + @Override @Transient public Node getDestination() { diff --git a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java index c29034ac87..d749b3c88a 100644 --- a/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java +++ b/nae-spring-core-adapter/src/main/java/com/netgrif/application/engine/adapter/spring/petrinet/domain/arcs/ResetArc.java @@ -13,6 +13,10 @@ public ResetArc(com.netgrif.application.engine.objects.petrinet.domain.arcs.Rese super(arc); } + public ResetArc(ResetArc arc) { + super(arc); + } + @Override @Transient public Node getDestination() {