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("   ") // 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) {