This is an automated email from the ASF dual-hosted git repository. ahuber pushed a commit to branch 3959-static.weaving in repository https://gitbox.apache.org/repos/asf/causeway.git
commit fd80f11a80fa31be7b87a5aaa9b0c5e7bd26fdb7 Author: andi-huber <[email protected]> AuthorDate: Wed Jan 28 17:12:52 2026 +0100 CAUSEWAY-3959: converts abstract ApplicationRole to an interface Task-Url: https://issues.apache.org/jira/browse/CAUSEWAY-3959 --- .../secman/applib/role/dom/ApplicationRole.java | 59 +++++----------------- .../secman/jpa/role/dom/ApplicationRole.java | 37 ++++++++++++-- 2 files changed, 44 insertions(+), 52 deletions(-) diff --git a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/dom/ApplicationRole.java b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/dom/ApplicationRole.java index 3577bb3fe16..53131cef71b 100644 --- a/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/dom/ApplicationRole.java +++ b/extensions/security/secman/applib/src/main/java/org/apache/causeway/extensions/secman/applib/role/dom/ApplicationRole.java @@ -26,13 +26,8 @@ import java.util.List; import java.util.Set; -import jakarta.inject.Inject; -import jakarta.inject.Named; - import org.apache.causeway.applib.annotation.Collection; import org.apache.causeway.applib.annotation.CollectionLayout; -import org.apache.causeway.applib.annotation.DomainObject; -import org.apache.causeway.applib.annotation.DomainObjectLayout; import org.apache.causeway.applib.annotation.Editing; import org.apache.causeway.applib.annotation.ObjectSupport; import org.apache.causeway.applib.annotation.Optionality; @@ -46,38 +41,23 @@ import org.apache.causeway.applib.util.ToString; import org.apache.causeway.extensions.secman.applib.CausewayModuleExtSecmanApplib; import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermission; -import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionRepository; import org.apache.causeway.extensions.secman.applib.user.dom.ApplicationUser; -import lombok.experimental.UtilityClass; - /** * @since 2.0 {@index} */ -@Named(ApplicationRole.LOGICAL_TYPE_NAME) -@DomainObject( - autoCompleteRepository = ApplicationRoleRepository.class, - autoCompleteMethod = "findMatching" - ) -@DomainObjectLayout( - titleUiEvent = ApplicationRole.TitleUiEvent.class, - iconUiEvent = ApplicationRole.IconUiEvent.class, - cssClassUiEvent = ApplicationRole.CssClassUiEvent.class, - layoutUiEvent = ApplicationRole.LayoutUiEvent.class -) -public abstract class ApplicationRole implements Comparable<ApplicationRole> { +public interface ApplicationRole extends Comparable<ApplicationRole> { public static final String LOGICAL_TYPE_NAME = CausewayModuleExtSecmanApplib.NAMESPACE + ".ApplicationRole"; public static final String SCHEMA = CausewayModuleExtSecmanApplib.SCHEMA; public static final String TABLE = "ApplicationRole"; - @UtilityClass - public static class Nq { + public static final class Nq { public static final String FIND_BY_NAME = LOGICAL_TYPE_NAME + ".findByName"; public static final String FIND_BY_NAME_CONTAINING = LOGICAL_TYPE_NAME + ".findByNameContaining"; } - @Inject transient private ApplicationPermissionRepository applicationPermissionRepository; + org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionRepository applicationPermissionRepository(); // -- UI & DOMAIN EVENTS @@ -91,7 +71,7 @@ public static abstract class CollectionDomainEvent<T> extends CausewayModuleExtS // -- MODEL - @ObjectSupport public String title() { + @ObjectSupport public default String title() { return getName(); } @@ -199,42 +179,27 @@ class DomainEvent extends CollectionDomainEvent<ApplicationPermission> {} // -- PERMISSIONS @Permissions - public List<org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermission> getPermissions() { - return applicationPermissionRepository.findByRole(this); + public default List<org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermission> getPermissions() { + return applicationPermissionRepository().findByRole(this); } // -- equals, hashCode, compareTo, toString - private static final Comparator<ApplicationRole> comparator = + static final Comparator<ApplicationRole> COMPARATOR = Comparator.comparing(ApplicationRole::getName); - private static final Equality<ApplicationRole> equality = + static final Equality<ApplicationRole> EQUALITY = ObjectContracts.checkEquals(ApplicationRole::getName); - private static final Hashing<ApplicationRole> hashing = + static final Hashing<ApplicationRole> HASHING = ObjectContracts.hashing(ApplicationRole::getName); - private static final ToString<ApplicationRole> toString = + static final ToString<ApplicationRole> TOSTRING = ObjectContracts.toString("name", ApplicationRole::getName); @Override - public int compareTo(final org.apache.causeway.extensions.secman.applib.role.dom.ApplicationRole other) { - return comparator.compare(this, other); - } - - @Override - public boolean equals(final Object obj) { - return equality.equals(this, obj); - } - - @Override - public int hashCode() { - return hashing.hashCode(this); - } - - @Override - public String toString() { - return toString.toString(this); + public default int compareTo(final org.apache.causeway.extensions.secman.applib.role.dom.ApplicationRole other) { + return COMPARATOR.compare(this, other); } } diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/causeway/extensions/secman/jpa/role/dom/ApplicationRole.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/causeway/extensions/secman/jpa/role/dom/ApplicationRole.java index c6f9b017e24..0121d401453 100644 --- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/causeway/extensions/secman/jpa/role/dom/ApplicationRole.java +++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/causeway/extensions/secman/jpa/role/dom/ApplicationRole.java @@ -21,6 +21,7 @@ import java.util.Set; import java.util.TreeSet; +import jakarta.inject.Inject; import jakarta.inject.Named; import jakarta.persistence.CascadeType; import jakarta.persistence.Column; @@ -40,14 +41,18 @@ import org.apache.causeway.applib.annotation.Bounding; import org.apache.causeway.applib.annotation.DomainObject; import org.apache.causeway.applib.annotation.DomainObjectLayout; +import org.apache.causeway.applib.annotation.Programmatic; import org.apache.causeway.applib.jaxb.PersistentEntityAdapter; import org.apache.causeway.commons.internal.base._Casts; +import org.apache.causeway.extensions.secman.applib.permission.dom.ApplicationPermissionRepository; import org.apache.causeway.extensions.secman.applib.role.dom.ApplicationRole.Nq; +import org.apache.causeway.extensions.secman.applib.role.dom.ApplicationRoleRepository; import org.apache.causeway.extensions.secman.jpa.user.dom.ApplicationUser; import org.apache.causeway.persistence.jpa.applib.integration.CausewayEntityListener; import lombok.Getter; import lombok.Setter; +import lombok.experimental.Accessors; @Entity @Table( @@ -74,13 +79,20 @@ @DomainObject( bounding = Bounding.BOUNDED, autoCompleteRepository = ApplicationRoleRepository.class, - autoCompleteMethod = "findMatching" - ) + autoCompleteMethod = "findMatching") @DomainObjectLayout( - bookmarking = BookmarkPolicy.AS_ROOT - ) + bookmarking = BookmarkPolicy.AS_ROOT, + titleUiEvent = ApplicationRole.TitleUiEvent.class, + iconUiEvent = ApplicationRole.IconUiEvent.class, + cssClassUiEvent = ApplicationRole.CssClassUiEvent.class, + layoutUiEvent = ApplicationRole.LayoutUiEvent.class) public class ApplicationRole - extends org.apache.causeway.extensions.secman.applib.role.dom.ApplicationRole { + implements org.apache.causeway.extensions.secman.applib.role.dom.ApplicationRole { + + @Inject + @Programmatic + @Getter(onMethod_ = {@Override}) @Accessors(fluent = true) + transient private ApplicationPermissionRepository applicationPermissionRepository; @Id @GeneratedValue @@ -113,4 +125,19 @@ public void addToUsers(final ApplicationUser applicationUser) { getUsers().add(applicationUser); } + @Override + public boolean equals(final Object obj) { + return EQUALITY.equals(this, obj); + } + + @Override + public int hashCode() { + return HASHING.hashCode(this); + } + + @Override + public String toString() { + return TOSTRING.toString(this); + } + }
