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 2019/10/29 06:49:35 UTC

[isis] branch v2 updated: ISIS-2158: several fixes

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

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


The following commit(s) were added to refs/heads/v2 by this push:
     new 7abd609  ISIS-2158: several fixes
7abd609 is described below

commit 7abd6093634a2b5442abd0e68bd27a43928c4d74
Author: Andi Huber <ah...@apache.org>
AuthorDate: Tue Oct 29 07:49:18 2019 +0100

    ISIS-2158: several fixes
    
    - wicket-ui: on page-timeout redirect to home-page with message
    - fixes HiddenFacet, to not cause alias collisions
---
 .../isis/commons/internal/collections/_Maps.java   | 10 +++++--
 .../facets/members/hidden/HiddenFacetAbstract.java | 19 ++++++++++++-
 .../wicket/viewer/IsisWicketApplication.java       |  1 -
 .../IsisWicketApplication_newPageFactory.java      |  7 +++--
 .../registries/pages/PageClassListDefault.java     |  1 +
 ...ageClassListDefault_RegistrationAndCaching.java |  2 ++
 .../isis/viewer/wicket/model/models/PageType.java  |  1 +
 .../isis/viewer/wicket/ui/errors/JGrowlUtil.java   | 33 ++++++++++++++++++----
 .../isis/viewer/wicket/ui/pages/home/HomePage.java |  7 +++++
 9 files changed, 68 insertions(+), 13 deletions(-)

diff --git a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java
index ec032df..a2d5bab 100644
--- a/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java
+++ b/core/commons/src/main/java/org/apache/isis/commons/internal/collections/_Maps.java
@@ -273,9 +273,13 @@ public final class _Maps {
                 if(aliasKeys.isNotEmpty()) {
                     val keyPair = KeyPair.of(key, aliasKeys);
                     for(val aliasKey : aliasKeys) {
-                        val existing = pairByAliasKey.put(aliasKey, keyPair);
-                        if(existing!=null) {
-                            throw _Exceptions.illegalArgument("alias key collision %s", aliasKey);
+                        
+                        val existingKeyPair = pairByAliasKey.put(aliasKey, keyPair);
+                        if(existingKeyPair!=null) {
+                            
+                            throw _Exceptions.illegalArgument(
+                                    "alias key collision on alias %s: existing-key=%s, new-key=%s", 
+                                    aliasKey, existingKeyPair.key, keyPair.key);
                         }
                     }
                 }
diff --git a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/HiddenFacetAbstract.java b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/HiddenFacetAbstract.java
index 8931c8b..babab7c 100644
--- a/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/HiddenFacetAbstract.java
+++ b/core/metamodel/src/main/java/org/apache/isis/metamodel/facets/members/hidden/HiddenFacetAbstract.java
@@ -30,6 +30,8 @@ import org.apache.isis.metamodel.facets.all.hide.HiddenFacet;
 import org.apache.isis.metamodel.interactions.VisibilityContext;
 import org.apache.isis.metamodel.spec.ManagedObject;
 
+import lombok.val;
+
 /**
  * This implements {@link org.apache.isis.metamodel.facetapi.MultiTypedFacet} so that each concrete implementation
  * is added to the eventual {@link org.apache.isis.metamodel.facetapi.FacetHolder} twice: once under
@@ -55,7 +57,22 @@ public abstract class HiddenFacetAbstract extends WhereValueFacetAbstract implem
             FacetHolder holder) {
         
         super(facetType, holder, where);
-        super.setFacetAliasType(HiddenFacet.class);
+        
+        val toplevelFacet = this;
+        
+        super.addContributedFacet(new HiddenFacetAbstract(toplevelFacet) {
+            @Override
+            protected String hiddenReason(ManagedObject target, Where whereContext) {
+                return toplevelFacet.hiddenReason(target, whereContext);
+            }
+        });
+        
+        //super.setFacetAliasType(HiddenFacet.class);
+    }
+        
+    // to instantiate contributed facets
+    private HiddenFacetAbstract(HiddenFacetAbstract toplevelFacet) {
+        super(HiddenFacet.class, toplevelFacet.getFacetHolder(), toplevelFacet.where());
     }
 
     /**
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
index 15bd8c7..18920f2 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication.java
@@ -25,7 +25,6 @@ import java.util.ServiceLoader;
 import java.util.Set;
 import java.util.UUID;
 import java.util.function.Function;
-import java.util.function.Supplier;
 
 import javax.inject.Inject;
 
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java
index 569ca63..52f1ea8 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/IsisWicketApplication_newPageFactory.java
@@ -24,10 +24,11 @@ import org.apache.wicket.request.component.IRequestablePage;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
 import org.apache.isis.commons.internal.base._Casts;
-import org.apache.isis.commons.internal.exceptions._Exceptions;
+import org.apache.isis.viewer.wicket.model.models.PageType;
 import org.apache.isis.viewer.wicket.ui.pages.entity.EntityPage;
 
 import lombok.RequiredArgsConstructor;
+import lombok.val;
 
 /**
  * 
@@ -71,7 +72,9 @@ class IsisWicketApplication_newPageFactory {
             if(EntityPage.class.equals(pageClass)) {
                 //TODO whenever this happens we should redirect to home, 
                 // almost certainly the session has timed out
-                throw _Exceptions.unexpectedCodeReach();
+                
+                val pageTimeoutPageClass = holder.getPageClassRegistry().getPageClass(PageType.HOME_AFTER_PAGETIMEOUT);
+                return _Casts.uncheckedCast(delegate.newPage(pageTimeoutPageClass));
             }
             
             return delegate.newPage(pageClass);
diff --git a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
index d96289e..ecc2fbc 100644
--- a/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
+++ b/core/viewer-wicket/impl/src/main/java/org/apache/isis/viewer/wicket/viewer/registries/pages/PageClassListDefault.java
@@ -55,6 +55,7 @@ public class PageClassListDefault implements PageClassList {
         pageRegistry.registerPage(PageType.ABOUT, getAboutPageClass());
         pageRegistry.registerPage(PageType.ENTITY, getEntityPageClass());
         pageRegistry.registerPage(PageType.HOME, getHomePageClass());
+        pageRegistry.registerPage(PageType.HOME_AFTER_PAGETIMEOUT, getHomePageClass());
         pageRegistry.registerPage(PageType.ACTION_PROMPT, getActionPromptPageClass());
         pageRegistry.registerPage(PageType.STANDALONE_COLLECTION, getStandaloneCollectionPageClass());
         pageRegistry.registerPage(PageType.VALUE, getValuePageClass());
diff --git a/core/viewer-wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java b/core/viewer-wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
index ab55d1f..a15435a 100644
--- a/core/viewer-wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
+++ b/core/viewer-wicket/impl/src/test/java/org/apache/isis/viewer/wicket/viewer/pages/PageClassListDefault_RegistrationAndCaching.java
@@ -56,6 +56,8 @@ public class PageClassListDefault_RegistrationAndCaching {
     @Test
     public void canRegisterNewPageType() {
         class TestingActionPage extends ActionPromptPage {
+            private static final long serialVersionUID = 1L;
+
             TestingActionPage() {
                 super((ActionModel) null);
             }
diff --git a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
index 2ed0594..103d42e 100644
--- a/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
+++ b/core/viewer-wicket/model/src/main/java/org/apache/isis/viewer/wicket/model/models/PageType.java
@@ -35,6 +35,7 @@ public enum PageType {
     SIGN_UP_VERIFY,
     PASSWORD_RESET,
     HOME,
+    HOME_AFTER_PAGETIMEOUT,
     ABOUT,
     ENTITY,
     ACTION_PROMPT,
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
index 17ddc19..755f329 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/JGrowlUtil.java
@@ -22,36 +22,57 @@ import org.apache.wicket.util.string.Strings;
 
 import org.apache.isis.security.authentication.MessageBroker;
 
+import lombok.Getter;
+import lombok.RequiredArgsConstructor;
+
 public class JGrowlUtil {
 
     private JGrowlUtil(){}
+    
+    @RequiredArgsConstructor @Getter
+    static enum MessageSeverity {
+        INFO(3500),
+        WARNING(0), // sticky
+        DANGER(0) // sticky
+        ;
+        
+        private final int delayMillis; 
+        
+        public String cssClassSuffix() {
+            return name().toLowerCase();
+        }
+    }
 
     public static String asJGrowlCalls(final MessageBroker messageBroker) {
         final StringBuilder buf = new StringBuilder();
 
         for (String info : messageBroker.getMessages()) {
-            addJGrowlCall(info, "info", false, buf);
+            addJGrowlCall(info, MessageSeverity.INFO, buf);
         }
         for (String warning : messageBroker.getWarnings()) {
-            addJGrowlCall(warning, "warning", true, buf);
+            addJGrowlCall(warning, MessageSeverity.WARNING, buf);
         }
 
         final String error =  messageBroker.getApplicationError();
         if(error!=null) {
-            addJGrowlCall(error, "danger", true, buf);
+            addJGrowlCall(error, MessageSeverity.DANGER, buf);
         }
         return buf.toString();
     }
 
-    private static void addJGrowlCall(final String origMsg, final String cssClassSuffix, boolean sticky, final StringBuilder buf) {
+    public static void addJGrowlCall(
+            final String origMsg, 
+            final MessageSeverity severity, 
+            final StringBuilder buf) {
+        
         final CharSequence escapedMsg = escape(origMsg);
         buf.append("$.growl(\"")
         .append(escapedMsg)
         .append("&#160;&#160;&#160;") // add some space so that the dismiss icon (x) doesn't overlap with the text
         .append('"');
         buf.append(", {");
-        buf.append("type: \"").append(cssClassSuffix).append('"');
-        buf.append(", delay: " + (sticky ? "0" : "2000"));
+        buf.append("type: \"").append(severity.cssClassSuffix()).append('"');
+        buf.append(", delay: " + severity.delayMillis);
         buf.append(", placement: { from: 'top', align: 'right' }");
         buf.append(", offset: 50");
         buf.append('}');
diff --git a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
index 1793b90..07988e2 100644
--- a/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
+++ b/core/viewer-wicket/ui/src/main/java/org/apache/isis/viewer/wicket/ui/pages/home/HomePage.java
@@ -22,6 +22,7 @@ package org.apache.isis.viewer.wicket.ui.pages.home;
 import org.apache.wicket.authroles.authorization.strategies.role.annotations.AuthorizeInstantiation;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 
+import org.apache.isis.applib.services.message.MessageService;
 import org.apache.isis.runtime.system.session.IsisSession;
 import org.apache.isis.viewer.wicket.model.models.ActionModel;
 import org.apache.isis.viewer.wicket.model.models.EntityModel;
@@ -53,6 +54,12 @@ public class HomePage extends PageAbstract {
     }
 
     private void buildGui() {
+
+        if(super.getPageParameters() == null) {
+            super.getCommonContext().lookupServiceElseFail(MessageService.class)
+            .informUser("Page timeout");
+        }
+        
         val isisSession = IsisSession.currentOrElseNull();
         val homePageAction = isisSession.getHomePageAction();
         if(homePageAction != null) {