You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by da...@apache.org on 2021/05/24 14:23:38 UTC

[isis] 01/05: ISIS-2614: converts api.ApplicationRole from interface to an abstract class

This is an automated email from the ASF dual-hosted git repository.

danhaywood pushed a commit to branch ISIS-2614
in repository https://gitbox.apache.org/repos/asf/isis.git

commit b3b6f6942001e08e1058849533e776d0b7167b25
Author: danhaywood <da...@haywood-associates.co.uk>
AuthorDate: Mon May 24 14:24:21 2021 +0100

    ISIS-2614: converts api.ApplicationRole from interface to an abstract class
---
 .../dom/ApplicationPermissionRepository.java       |  2 +
 .../secman/api/role/dom/ApplicationRole.java       | 98 ++++++++++++++++------
 .../role/dom/ApplicationRole.layout.fallback.xml   |  0
 .../secman/jdo/role/dom/ApplicationRole.java       | 47 +----------
 .../role/dom/ApplicationRole.layout.fallback.xml   | 67 ---------------
 .../secman/jpa/role/dom/ApplicationRole.java       | 57 ++-----------
 6 files changed, 85 insertions(+), 186 deletions(-)

diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermissionRepository.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermissionRepository.java
index 043dbea..8066f82 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermissionRepository.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/dom/ApplicationPermissionRepository.java
@@ -87,4 +87,6 @@ public interface ApplicationPermissionRepository {
             String featureFqn);
 
     List<ApplicationPermission> findByUser(ApplicationUser applicationUser);
+
+    List<ApplicationPermission> findByRole(ApplicationRole applicationRole);
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java
index e2a972c..1d4b7ed 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.java
@@ -22,9 +22,12 @@ import java.lang.annotation.ElementType;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
 import java.lang.annotation.Target;
+import java.util.Comparator;
 import java.util.List;
 import java.util.Set;
 
+import javax.inject.Inject;
+
 import org.apache.isis.applib.annotation.Collection;
 import org.apache.isis.applib.annotation.CollectionLayout;
 import org.apache.isis.applib.annotation.DomainObject;
@@ -34,8 +37,13 @@ import org.apache.isis.applib.annotation.Parameter;
 import org.apache.isis.applib.annotation.ParameterLayout;
 import org.apache.isis.applib.annotation.Property;
 import org.apache.isis.applib.annotation.PropertyLayout;
+import org.apache.isis.applib.util.Equality;
+import org.apache.isis.applib.util.Hashing;
+import org.apache.isis.applib.util.ObjectContracts;
+import org.apache.isis.applib.util.ToString;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission;
+import org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermissionRepository;
 import org.apache.isis.extensions.secman.api.user.dom.ApplicationUser;
 
 /**
@@ -44,30 +52,29 @@ import org.apache.isis.extensions.secman.api.user.dom.ApplicationUser;
 @DomainObject(
         objectType = ApplicationRole.OBJECT_TYPE
 )
-public interface ApplicationRole extends Comparable<ApplicationRole> {
+public abstract class ApplicationRole implements Comparable<ApplicationRole> {
+
+    public static final String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationRole";
 
-    String OBJECT_TYPE = IsisModuleExtSecmanApi.NAMESPACE + ".ApplicationRole";
+    public static final String NAMED_QUERY_FIND_BY_NAME = "ApplicationRole.findByName";
+    public static final String NAMED_QUERY_FIND_BY_NAME_CONTAINING = "ApplicationRole.findByNameContaining";
 
-    String NAMED_QUERY_FIND_BY_NAME = "ApplicationRole.findByName";
-    String NAMED_QUERY_FIND_BY_NAME_CONTAINING = "ApplicationRole.findByNameContaining";
+    @Inject transient private ApplicationPermissionRepository applicationPermissionRepository;
 
 
     // -- EVENTS
 
-    abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationRole, T> {}
-    abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationRole, T> {}
+    public static abstract class PropertyDomainEvent<T> extends IsisModuleExtSecmanApi.PropertyDomainEvent<ApplicationRole, T> {}
+    public static abstract class CollectionDomainEvent<T> extends IsisModuleExtSecmanApi.CollectionDomainEvent<ApplicationRole, T> {}
 
 
     // -- MODEL
 
-    /**
-     * having a title() method (rather than using @Title annotation) is necessary as a workaround to be able to use
-     * wrapperFactory#unwrap(...) method, which is otherwise broken in Isis 1.6.0
-     */
-    default String title() {
+    public String title() {
         return getName();
     }
 
+
     // -- NAME
 
     @Property(
@@ -89,16 +96,16 @@ public interface ApplicationRole extends Comparable<ApplicationRole> {
     )
     @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
     @Retention(RetentionPolicy.RUNTIME)
-    @interface Name {
+    public @interface Name {
         int MAX_LENGTH = 120;
         int TYPICAL_LENGTH = 30;
 
-        class DomainEvent extends PropertyDomainEvent<String> {}
+        public static class DomainEvent extends PropertyDomainEvent<String> {}
     }
 
     @Name
-    String getName();
-    void setName(String name);
+    public abstract String getName();
+    public abstract void setName(String name);
 
 
     // -- DESCRIPTION
@@ -125,16 +132,16 @@ public interface ApplicationRole extends Comparable<ApplicationRole> {
     )
     @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
     @Retention(RetentionPolicy.RUNTIME)
-    @interface Description {
+    public @interface Description {
         int MAX_LENGTH = 254;
         int TYPICAL_LENGTH = 50;
 
-        class DomainEvent extends PropertyDomainEvent<String> {}
+        public class DomainEvent extends PropertyDomainEvent<String> {}
     }
 
     @Description
-    String getDescription();
-    void setDescription(String description);
+    public abstract String getDescription();
+    public abstract void setDescription(String description);
 
 
     // -- USERS
@@ -148,12 +155,12 @@ public interface ApplicationRole extends Comparable<ApplicationRole> {
     )
     @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
     @Retention(RetentionPolicy.RUNTIME)
-    @interface Users {
-        class DomainEvent extends CollectionDomainEvent<ApplicationUser> {}
+    public @interface Users {
+        public static class DomainEvent extends CollectionDomainEvent<ApplicationUser> {}
     }
 
     @Users
-    Set<ApplicationUser> getUsers();
+    public abstract Set<ApplicationUser> getUsers();
 
 
     // -- PERMISSIONS
@@ -168,11 +175,52 @@ public interface ApplicationRole extends Comparable<ApplicationRole> {
     )
     @Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.ANNOTATION_TYPE })
     @Retention(RetentionPolicy.RUNTIME)
-    @interface Permissions {
-        class DomainEvent extends CollectionDomainEvent<ApplicationPermission> {}
+    public @interface Permissions {
+        public static class DomainEvent extends CollectionDomainEvent<ApplicationPermission> {}
     }
 
+
+    // -- PERMISSIONS
+
     @Permissions
-    List<ApplicationPermission> getPermissions();
+    public List<org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission> getPermissions() {
+        return applicationPermissionRepository.findByRole(this);
+    }
+
+
+    // -- equals, hashCode, compareTo, toString
+
+    private static final Comparator<ApplicationRole> comparator =
+            Comparator.comparing(ApplicationRole::getName);
+
+    private static final Equality<ApplicationRole> equality =
+            ObjectContracts.checkEquals(ApplicationRole::getName);
+
+    private static final Hashing<ApplicationRole> hashing =
+            ObjectContracts.hashing(ApplicationRole::getName);
+
+    private static final ToString<ApplicationRole> toString =
+            ObjectContracts.toString("name", ApplicationRole::getName);
+
+
+    @Override
+    public int compareTo(final org.apache.isis.extensions.secman.api.role.dom.ApplicationRole other) {
+        return comparator.compare(this, (ApplicationRole)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);
+    }
 
 }
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.layout.fallback.xml b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.layout.fallback.xml
similarity index 100%
rename from extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.layout.fallback.xml
rename to extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/dom/ApplicationRole.layout.fallback.xml
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java
index f30fee0..84d6a82 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.java
@@ -84,11 +84,10 @@ import org.apache.isis.extensions.secman.jdo.permission.dom.ApplicationPermissio
         bookmarking = BookmarkPolicy.AS_ROOT
         )
 public class ApplicationRole
-    implements org.apache.isis.extensions.secman.api.role.dom.ApplicationRole {
+    extends org.apache.isis.extensions.secman.api.role.dom.ApplicationRole {
 
     protected final static String FQCN = "org.apache.isis.extensions.secman.jdo.role.dom.ApplicationRole";
 
-    @Inject private ApplicationPermissionRepository applicationPermissionRepository;
 
 
     // -- NAME
@@ -139,48 +138,4 @@ public class ApplicationRole
     }
 
 
-    // -- PERMISSIONS
-
-    @Override
-    @Permissions
-    public List<org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission> getPermissions() {
-        return applicationPermissionRepository.findByRole(this);
-    }
-
-
-    // -- equals, hashCode, compareTo, toString
-
-    private static final Comparator<ApplicationRole> comparator =
-            Comparator.comparing(ApplicationRole::getName);
-
-    private static final Equality<ApplicationRole> equality =
-            ObjectContracts.checkEquals(ApplicationRole::getName);
-
-    private static final Hashing<ApplicationRole> hashing =
-            ObjectContracts.hashing(ApplicationRole::getName);
-
-    private static final ToString<ApplicationRole> toString =
-            ObjectContracts.toString("name", ApplicationRole::getName);
-
-
-    @Override
-    public int compareTo(final org.apache.isis.extensions.secman.api.role.dom.ApplicationRole other) {
-        return comparator.compare(this, (ApplicationRole)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);
-    }
-
 }
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.layout.fallback.xml b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.layout.fallback.xml
deleted file mode 100644
index 6822413..0000000
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/role/dom/ApplicationRole.layout.fallback.xml
+++ /dev/null
@@ -1,67 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<!--
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
--->
-<bs3:grid
-        xsi:schemaLocation="http://isis.apache.org/applib/layout/component http://isis.apache.org/applib/layout/component/component.xsd   http://isis.apache.org/applib/layout/grid/bootstrap3 http://isis.apache.org/applib/layout/grid/bootstrap3/bootstrap3.xsd"
-        xmlns:bs3="http://isis.apache.org/applib/layout/grid/bootstrap3"
-        xmlns:cpt="http://isis.apache.org/applib/layout/component"
-        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
-    <bs3:row>
-        <bs3:col span="12" unreferencedActions="true">
-            <cpt:domainObject/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="4">
-            <bs3:tabGroup>
-                <bs3:tab name="Identity">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Identity" id="identity"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Other">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Other" id="other" unreferencedProperties="true"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-                <bs3:tab name="Metadata">
-                    <bs3:row>
-                        <bs3:col span="12">
-                            <cpt:fieldSet name="Metadata" id="metadata"/>
-                        </bs3:col>
-                    </bs3:row>
-                </bs3:tab>
-            </bs3:tabGroup>
-            <cpt:fieldSet name="Details" id="details"/>
-        </bs3:col>
-        <bs3:col span="8">
-            <cpt:collection id="permissions"/>
-            <cpt:collection id="users"/>
-        </bs3:col>
-    </bs3:row>
-    <bs3:row>
-        <bs3:col span="12">
-            <bs3:tabGroup unreferencedCollections="true"/>
-        </bs3:col>
-    </bs3:row>
-</bs3:grid>
diff --git a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java
index 0a58ea6..224c75f 100644
--- a/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jpa/src/main/java/org/apache/isis/extensions/secman/jpa/role/dom/ApplicationRole.java
@@ -34,6 +34,7 @@ import javax.persistence.NamedQueries;
 import javax.persistence.NamedQuery;
 import javax.persistence.Table;
 import javax.persistence.UniqueConstraint;
+import javax.persistence.Version;
 
 import org.apache.isis.applib.annotation.BookmarkPolicy;
 import org.apache.isis.applib.annotation.Bounding;
@@ -61,12 +62,12 @@ import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPoin
     @NamedQuery(
             name = org.apache.isis.extensions.secman.api.role.dom.ApplicationRole.NAMED_QUERY_FIND_BY_NAME,
             query = "SELECT r "
-                  + "FROM org.apache.isis.extensions.secman.jpa.role.dom.ApplicationRole r "
+                  + "FROM ApplicationRole r "
                   + "WHERE r.name = :name"),
     @NamedQuery(
             name = org.apache.isis.extensions.secman.api.role.dom.ApplicationRole.NAMED_QUERY_FIND_BY_NAME_CONTAINING,
             query = "SELECT r "
-                  + "FROM org.apache.isis.extensions.secman.jpa.role.dom.ApplicationRole r "
+                  + "FROM ApplicationRole r "
                   + "WHERE r.name LIKE :regex"),
 })
 @EntityListeners(JpaEntityInjectionPointResolver.class)
@@ -80,15 +81,17 @@ import org.apache.isis.persistence.jpa.applib.integration.JpaEntityInjectionPoin
         bookmarking = BookmarkPolicy.AS_ROOT
         )
 public class ApplicationRole
-    implements org.apache.isis.extensions.secman.api.role.dom.ApplicationRole {
+    extends org.apache.isis.extensions.secman.api.role.dom.ApplicationRole {
 
-    @Inject private transient ApplicationPermissionRepository applicationPermissionRepository;
 
 
     @Id
     @GeneratedValue
     private Long id;
 
+    @Version
+    private Long version;
+
 
     // -- NAME
 
@@ -104,6 +107,8 @@ public class ApplicationRole
     public void setName(String name) {
         this.name = name;
     }
+
+
     // -- DESCRIPTION
 
     @Column(nullable = true, length = Description.MAX_LENGTH)
@@ -137,48 +142,4 @@ public class ApplicationRole
     }
 
 
-    // -- PERMISSIONS
-
-    @Override
-    @Permissions
-    public List<org.apache.isis.extensions.secman.api.permission.dom.ApplicationPermission> getPermissions() {
-        return applicationPermissionRepository.findByRole(this);
-    }
-
-
-    // -- equals, hashCode, compareTo, toString
-
-    private static final Comparator<ApplicationRole> comparator =
-            Comparator.comparing(ApplicationRole::getName);
-
-    private static final Equality<ApplicationRole> equality =
-            ObjectContracts.checkEquals(ApplicationRole::getName);
-
-    private static final Hashing<ApplicationRole> hashing =
-            ObjectContracts.hashing(ApplicationRole::getName);
-
-    private static final ToString<ApplicationRole> toString =
-            ObjectContracts.toString("name", ApplicationRole::getName);
-
-
-    @Override
-    public int compareTo(final org.apache.isis.extensions.secman.api.role.dom.ApplicationRole other) {
-        return comparator.compare(this, (ApplicationRole)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);
-    }
-
 }