You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/09/17 08:32:51 UTC

[isis] branch master updated (d08018d -> 39033dc)

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

ahuber pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git.


    from d08018d  ISIS-2430: minor: comments
     new 7a4948e  ISIS-2432: SecMan Entities: move title() methods from concrete classes to api
     new 39033dc  ISIS-2432: fixes TitleFacet precedence:

The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java | 70 ++++++++++++++--------
 .../api/permission/ApplicationPermission.java      | 52 ++++++++++++++++
 .../secman/api/role/ApplicationRole.java           |  8 +++
 .../secman/api/tenancy/ApplicationTenancy.java     |  4 ++
 .../secman/api/user/ApplicationUser.java           | 12 ++++
 .../jdo/dom/permission/ApplicationPermission.java  | 46 --------------
 .../secman/jdo/dom/role/ApplicationRole.java       |  9 ---
 .../secman/jdo/dom/tenancy/ApplicationTenancy.java |  1 -
 .../secman/jdo/dom/user/ApplicationUser.java       | 14 -----
 9 files changed, 122 insertions(+), 94 deletions(-)


[isis] 02/02: ISIS-2432: fixes TitleFacet precedence:

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 39033dcd23342cfadff47f48257433243b831b37
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 17 10:32:35 2020 +0200

    ISIS-2432: fixes TitleFacet precedence:
    
    according to our docs, title() methods should take precedence over
    TitleUiEvents
---
 ...ainObjectLayoutAnnotationUsingTitleUiEvent.java | 70 ++++++++++++++--------
 1 file changed, 46 insertions(+), 24 deletions(-)

diff --git a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
index 3eecf50..8cd4d4f 100644
--- a/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
+++ b/core/metamodel/src/main/java/org/apache/isis/core/metamodel/facets/object/domainobjectlayout/TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent.java
@@ -38,6 +38,8 @@ import org.apache.isis.core.metamodel.spec.ManagedObject;
 import org.apache.isis.core.metamodel.spec.ObjectSpecification;
 import org.apache.isis.core.metamodel.util.EventUtil;
 
+import lombok.val;
+
 public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends TitleFacetAbstract {
 
     public static Facet create(
@@ -46,24 +48,26 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
             final IsisConfiguration configuration,
             final FacetHolder facetHolder) {
 
+        val isPostForDefault = configuration
+                .getApplib()
+                .getAnnotation()
+                .getDomainObjectLayout()
+                .getTitleUiEvent()
+                .isPostForDefault();
+        
         return domainObjectLayoutIfAny
                 .map(DomainObjectLayout::titleUiEvent)
                 .filter(titleUiEvent -> EventUtil.eventTypeIsPostable(
                         titleUiEvent,
                         TitleUiEvent.Noop.class,
                         TitleUiEvent.Default.class,
-                        configuration.getApplib().getAnnotation().getDomainObjectLayout().getTitleUiEvent().isPostForDefault()))
+                        isPostForDefault))
                 .map(titleUiEventClass -> {
-                    final String translationContext;
-                    if(facetHolder instanceof ObjectSpecification) {
-                        final ObjectSpecification facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
-                        translationContext = facetHolderAsSpec.getCorrespondingClass().getCanonicalName();    
-                    } else {
-                        translationContext = null;
-                    }
-
                     return new TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent(
-                            titleUiEventClass, translationContext, metamodelEventService, facetHolder);
+                            titleUiEventClass, 
+                            translationContextFor(facetHolder), 
+                            metamodelEventService, 
+                            facetHolder);
                 })
                 .orElse(null);
     }
@@ -91,6 +95,13 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
         if(owningAdapter == null) {
             return null;
         }
+        
+        val underlyingTitleFacet = underlyingTitleFacet();
+        if(underlyingTitleFacet != null) {
+            // underlyingTitleFacet always takes precedence
+            return underlyingTitleFacet.title(owningAdapter);
+        }
+        
 
         final TitleUiEvent<Object> titleUiEvent = newTitleUiEvent(owningAdapter);
 
@@ -100,19 +111,33 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
         if(translatedTitle != null) {
             return translatedTitle.translate(translationService, translationContext);
         }
-        final String title = titleUiEvent.getTitle();
-
-        if(title == null) {
-            // ie no subscribers out there...
-            final Facet underlyingFacet = getUnderlyingFacet();
-            if(underlyingFacet instanceof TitleFacet) {
-                final TitleFacet underlyingTitleFacet = (TitleFacet) underlyingFacet;
-                return underlyingTitleFacet.title(owningAdapter);
-            }
+        return titleUiEvent.getTitle();
+    }
+    
+    @Override 
+    public void appendAttributesTo(final Map<String, Object> attributeMap) {
+        super.appendAttributesTo(attributeMap);
+        attributeMap.put("titleUiEventClass", titleUiEventClass);
+    }
+    
+    // -- HELPER
+    
+    private TitleFacet underlyingTitleFacet() {
+        val underlyingFacet = getUnderlyingFacet();
+        if(underlyingFacet instanceof TitleFacet) {
+            return (TitleFacet) underlyingFacet;
         }
-        return title;
+        return null;
     }
 
+    private static String translationContextFor(final FacetHolder facetHolder) {
+        if(facetHolder instanceof ObjectSpecification) {
+            val facetHolderAsSpec = (ObjectSpecification) facetHolder; // bit naughty...
+            return facetHolderAsSpec.getCorrespondingClass().getCanonicalName();    
+        } 
+        return null;
+    }
+    
     private TitleUiEvent<Object> newTitleUiEvent(final ManagedObject owningAdapter) {
         final Object domainObject = owningAdapter.getPojo();
         return newTitleUiEvent(domainObject);
@@ -128,8 +153,5 @@ public class TitleFacetViaDomainObjectLayoutAnnotationUsingTitleUiEvent extends
         }
     }
 
-    @Override public void appendAttributesTo(final Map<String, Object> attributeMap) {
-        super.appendAttributesTo(attributeMap);
-        attributeMap.put("titleUiEventClass", titleUiEventClass);
-    }
+
 }


[isis] 01/02: ISIS-2432: SecMan Entities: move title() methods from concrete classes to api

Posted by ah...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git

commit 7a4948e3754096ddd679d7c940f565074b43ba94
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Sep 17 09:18:50 2020 +0200

    ISIS-2432: SecMan Entities: move title() methods from concrete classes
    to api
---
 .../api/permission/ApplicationPermission.java      | 52 ++++++++++++++++++++++
 .../secman/api/role/ApplicationRole.java           |  8 ++++
 .../secman/api/tenancy/ApplicationTenancy.java     |  4 ++
 .../secman/api/user/ApplicationUser.java           | 12 +++++
 .../jdo/dom/permission/ApplicationPermission.java  | 46 -------------------
 .../secman/jdo/dom/role/ApplicationRole.java       |  9 ----
 .../secman/jdo/dom/tenancy/ApplicationTenancy.java |  1 -
 .../secman/jdo/dom/user/ApplicationUser.java       | 14 ------
 8 files changed, 76 insertions(+), 70 deletions(-)

diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
index f2bc566..a03ddb2 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/permission/ApplicationPermission.java
@@ -18,10 +18,16 @@
  */
 package org.apache.isis.extensions.secman.api.permission;
 
+import java.util.Optional;
+
+import org.apache.isis.applib.annotation.Programmatic;
+import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureId;
 import org.apache.isis.core.metamodel.services.appfeat.ApplicationFeatureType;
 import org.apache.isis.extensions.secman.api.IsisModuleExtSecmanApi;
 import org.apache.isis.extensions.secman.api.role.ApplicationRole;
 
+import lombok.val;
+
 public interface ApplicationPermission {
     
     // -- DOMAIN EVENTS
@@ -39,6 +45,44 @@ public interface ApplicationPermission {
     
     // -- 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() {
+        val buf = new StringBuilder();
+        buf.append(getRole().getName()).append(":")  // admin:
+        .append(" ").append(getRule().toString()) // Allow|Veto
+        .append(" ").append(getMode().toString()) // Viewing|Changing
+        .append(" of ");
+
+        createFeatureId()
+        .ifPresent(featureId->{
+            
+            switch (featureId.getType()) {
+            case PACKAGE:
+                buf.append(getFeatureFqn());              // com.mycompany
+                break;
+            case CLASS:
+                // abbreviate if required because otherwise title overflows on action prompt.
+                if(getFeatureFqn().length() < 30) {
+                    buf.append(getFeatureFqn());          // com.mycompany.Bar
+                } else {
+                    buf.append(featureId.getClassName()); // Bar
+                }
+                break;
+            case MEMBER:
+                buf.append(featureId.getClassName())
+                .append("#")
+                .append(featureId.getMemberName());   // com.mycompany.Bar#foo
+                break;
+            }
+            
+        });
+        
+        return buf.toString();
+    }
+    
     ApplicationFeatureType getFeatureType();
 
     String getFeatureFqn();
@@ -52,5 +96,13 @@ public interface ApplicationPermission {
     ApplicationRole getRole();
     void setRole(ApplicationRole applicationRole);
     
+    // -- HELPER
+    
+    @Programmatic
+    default Optional<ApplicationFeatureId> createFeatureId() {
+        return Optional.of(getFeatureType())
+                .map(featureType -> ApplicationFeatureId.newFeature(featureType, getFeatureFqn()));
+    }
+    
 
 }
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java
index 92cb103..890156e 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/role/ApplicationRole.java
@@ -48,6 +48,14 @@ public interface ApplicationRole {
     
     // -- 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() {
+        return getName();
+    }
+    
     String getName();
     void setName(String name);
     
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java
index 6a94fbe..591c7da 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/tenancy/ApplicationTenancy.java
@@ -42,6 +42,10 @@ public interface ApplicationTenancy {
     
     // -- MODEL
     
+    default String title() {
+        return getName();
+    }
+    
     public String getPath();
 
     public String getName();
diff --git a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java
index c846e3e..c27a06a 100644
--- a/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java
+++ b/extensions/security/secman/api/src/main/java/org/apache/isis/extensions/secman/api/user/ApplicationUser.java
@@ -64,6 +64,18 @@ public interface ApplicationUser extends HasUsername, HasAtPath {
 
     // -- 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() {
+        return getName();
+    }
+
+    default String iconName() {
+        return getStatus().isEnabled() ? "enabled" : "disabled"; 
+    }
+    
     String getName();
 
     String getEncryptedPassword();
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
index 3dcc37e..ad24fbc 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/permission/ApplicationPermission.java
@@ -149,45 +149,6 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
 
     private static final int TYPICAL_LENGTH_TYPE = 7;  // ApplicationFeatureType.PACKAGE is longest
 
-    // -- identification
-    /**
-     * 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
-     */
-    public String title() {
-        final StringBuilder buf = new StringBuilder();
-        buf.append(getRole().getName()).append(":")  // admin:
-        .append(" ").append(getRule().toString()) // Allow|Veto
-        .append(" ").append(getMode().toString()) // Viewing|Changing
-        .append(" of ");
-
-        createFeatureId()
-        .ifPresent(featureId->{
-            
-            switch (featureId.getType()) {
-            case PACKAGE:
-                buf.append(getFeatureFqn());              // com.mycompany
-                break;
-            case CLASS:
-                // abbreviate if required because otherwise title overflows on action prompt.
-                if(getFeatureFqn().length() < 30) {
-                    buf.append(getFeatureFqn());          // com.mycompany.Bar
-                } else {
-                    buf.append(featureId.getClassName()); // Bar
-                }
-                break;
-            case MEMBER:
-                buf.append(featureId.getClassName())
-                .append("#")
-                .append(featureId.getMemberName());   // com.mycompany.Bar#foo
-                break;
-            }
-            
-        });
-        
-        return buf.toString();
-    }
-
 
     // -- role (property)
 
@@ -242,18 +203,11 @@ public class ApplicationPermission implements org.apache.isis.extensions.secman.
 
     // -- featureId (derived property)
 
-    private Optional<ApplicationFeatureId> createFeatureId() {
-        return Optional.of(getFeatureType())
-                .map(featureType -> ApplicationFeatureId.newFeature(featureType, getFeatureFqn()));
-    }
-    
     private Optional<ApplicationFeature> getFeature() {
         return createFeatureId()
                 .map(featureId -> applicationFeatureRepository.findFeature(featureId));
     }
 
-
-
     // region > type (derived, memberType of associated feature)
 
     public static class TypeDomainEvent extends PropertyDomainEvent<String> {}
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
index d7a366d..182cbf3 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/role/ApplicationRole.java
@@ -93,15 +93,6 @@ implements org.apache.isis.extensions.secman.api.role.ApplicationRole, Comparabl
     @Inject private ApplicationFeatureRepository applicationFeatureRepository;
     @Inject private ApplicationPermissionRepository applicationPermissionRepository;
     
-    // -- identification
-    /**
-     * 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
-     */
-    public String title() {
-        return getName();
-    }
-
     // -- name (property)
 
     public static class NameDomainEvent extends PropertyDomainEvent<String> {}
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java
index 99f6ab4..fd60f3b 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/tenancy/ApplicationTenancy.java
@@ -93,7 +93,6 @@ org.apache.isis.extensions.secman.api.tenancy.ApplicationTenancy {
     public static class NameDomainEvent extends PropertyDomainEvent<String> {}
 
     @javax.jdo.annotations.Column(allowsNull="false", length = MAX_LENGTH_NAME)
-    @Title
     @Property(
             domainEvent = NameDomainEvent.class,
             editing = Editing.DISABLED
diff --git a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
index 70bccee..0e0daca 100644
--- a/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
+++ b/extensions/security/secman/persistence-jdo/src/main/java/org/apache/isis/extensions/secman/jdo/dom/user/ApplicationUser.java
@@ -138,20 +138,6 @@ org.apache.isis.extensions.secman.api.user.ApplicationUser {
      */
     @Inject private PermissionsEvaluationService permissionsEvaluationService;
     @Inject private SecurityModuleConfig configBean;
-    
-    // -- identification
-
-    /**
-     * 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
-     */
-    public String title() {
-        return getName();
-    }
-
-    public String iconName() {
-        return getStatus().isEnabled() ? "enabled" : "disabled"; 
-    }
 
     // -- name (derived property)