+ * -- SETTER -- + * Sets the factory used for creating LoggedUser instances. + * + * @param f the LoggedUserFactory implementation to be used */ - private static LoggedUserFactory factory = () -> { + @Setter + private static LoggedUserFactory loggedUserFactory = () -> { throw new IllegalStateException("No LoggedUserFactory configured"); }; + + /** + * Factory for creating new AbstractUser instances. + * Default implementation throws IllegalStateException if no factory is configured. + * The lambda expression provides a no-op factory that throws an exception to indicate + * that no valid UserFactory has been set. + *
+ * -- SETTER --
+ * Sets the factory used for creating AbstractUser instances.
+ **/
+ @Setter
+ private static UserFactory userFactory = () -> {
+ throw new IllegalStateException("No UserFactory configured");
+ };
+
/**
* Functional interface defining a factory method for creating new LoggedUser instances.
*/
@@ -29,12 +54,27 @@ public interface LoggedUserFactory {
LoggedUser create();
}
- /**
- * Sets the factory used for creating LoggedUser instances.
- * @param f the LoggedUserFactory implementation to be used
- */
- public static void setLoggedUserFactory(LoggedUserFactory f) {
- factory = f;
+ @FunctionalInterface
+ public interface UserFactory {
+ /**
+ * Creates a new AbstractUser instance.
+ * @return newly created AbstractUser instance
+ */
+ AbstractUser create();
+
+
+ /**
+ * Creates a new AbstractUser instance based on the provided LoggedUser instance.
+ * By default, this method throws an IllegalStateException, and must be explicitly
+ * implemented by the concrete UserFactory implementation.
+ *
+ * @param loggedUser the LoggedUser containing user details
+ * @return newly created AbstractUser instance representing the same user
+ * @throws IllegalStateException if the method is not implemented
+ */
+ default AbstractUser create(LoggedUser loggedUser) {
+ throw new IllegalStateException("Method is not implemented");
+ }
}
/**
@@ -43,7 +83,7 @@ public static void setLoggedUserFactory(LoggedUserFactory f) {
* @return new LoggedUser instance with copied user data
*/
public static LoggedUser toLoggedUser(AbstractUser user) {
- LoggedUser loggedUser = factory.create();
+ LoggedUser loggedUser = loggedUserFactory.create();
loggedUser.setId(user.getStringId());
loggedUser.setRealmId(user.getRealmId());
loggedUser.setUsername(user.getUsername());
@@ -58,6 +98,28 @@ public static LoggedUser toLoggedUser(AbstractUser user) {
return loggedUser;
}
+ /**
+ * Converts a LoggedUser into an AbstractUser by copying all relevant user information.
+ *
+ * @param loggedUser the LoggedUser to transform
+ * @return a new AbstractUser instance with copied user data
+ */
+ public static AbstractUser toUser(LoggedUser loggedUser) {
+ AbstractUser user = userFactory.create(loggedUser);
+ user.setId(loggedUser.getStringId());
+ user.setRealmId(loggedUser.getRealmId());
+ user.setUsername(loggedUser.getUsername());
+ user.setEmail(loggedUser.getEmail());
+ user.setFirstName(loggedUser.getFirstName());
+ user.setMiddleName(loggedUser.getMiddleName());
+ user.setLastName(loggedUser.getLastName());
+ user.setAuthoritySet(loggedUser.getAuthoritySet());
+ user.setProcessRoles(loggedUser.getProcessRoles());
+ user.setAttributes(loggedUser.getAttributes());
+ user.setGroupIds(loggedUser.getGroupIds());
+ return user;
+ }
+
/**
* Transforms an AbstractUser into a LoggedUser with additional session-related information.
* @param user the AbstractUser to transform
diff --git a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Authority.java b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Authority.java
index 353764085c7..c60f9f9a3ab 100644
--- a/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Authority.java
+++ b/nae-object-library/src/main/java/com/netgrif/application/engine/objects/auth/domain/Authority.java
@@ -42,7 +42,7 @@ public abstract class Authority implements Serializable {
/**
* Constant representing the anonymous user role.
*/
- public static final String anonymous = "ANONYMOUS_USER";
+ public static final String anonymous = "ANONYMOUS";
/**
* MongoDB ObjectId of the authority.
diff --git a/nae-spring-core-adapter/pom.xml b/nae-spring-core-adapter/pom.xml
index 283ab6a5ac5..a17a561b5f5 100644
--- a/nae-spring-core-adapter/pom.xml
+++ b/nae-spring-core-adapter/pom.xml
@@ -89,6 +89,22 @@