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


The following commit(s) were added to refs/heads/master by this push:
     new 7f91912  ISIS-1955: replaces render template for tickets by 
programmatic markup assembly
7f91912 is described below

commit 7f919124e4f42a20d8b82e3ac8f2580a591e7916
Author: Andi Huber <ahu...@apache.org>
AuthorDate: Mon May 28 11:53:40 2018 +0200

    ISIS-1955: replaces render template for tickets by programmatic markup
    assembly
    
    also makes Ticket an interface
    
    Task-Url: https://issues.apache.org/jira/browse/ISIS-1955
---
 .../error/{Ticket.java => SimpleTicket.java}       | 70 +++++++++-------------
 .../apache/isis/applib/services/error/Ticket.java  | 70 +++-------------------
 .../components/scalars/markup/MarkupComponent.java | 28 ++++++---
 .../viewer/wicket/ui/errors/ExceptionModel.java    |  4 +-
 .../wicket/ui/errors/ExceptionStackTracePanel.html |  8 +--
 .../wicket/ui/errors/ExceptionStackTracePanel.java | 57 +++++++-----------
 6 files changed, 79 insertions(+), 158 deletions(-)

diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java 
b/core/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java
similarity index 68%
copy from 
core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java
copy to 
core/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java
index dbbddd3..dc46358 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/services/error/SimpleTicket.java
@@ -20,6 +20,8 @@ package org.apache.isis.applib.services.error;
 
 import java.io.Serializable;
 
+import org.apache.isis.commons.internal.base._NullSafe;
+
 /**
  * Response from the {@link ErrorReportingService}, containing information to 
show to the end-user.
  *
@@ -31,7 +33,7 @@ import java.io.Serializable;
  *     </ul>
  * </p>
  */
-public class Ticket implements Serializable {
+public class SimpleTicket implements Ticket {
 
        private static final long serialVersionUID = 4900947111894407314L;
        
@@ -41,16 +43,11 @@ public class Ticket implements Serializable {
     private final StackTracePolicy stackTracePolicy;
     private final String kittenUrl;
 
-    public enum StackTracePolicy {
-        SHOW,
-        HIDE
-    }
-
-    public Ticket(final String reference, final String userMessage, final 
String details) {
+    public SimpleTicket(final String reference, final String userMessage, 
final String details) {
         this(reference, userMessage, details, StackTracePolicy.HIDE);
     }
 
-    public Ticket(
+    public SimpleTicket(
             final String reference,
             final String userMessage,
             final String details,
@@ -58,7 +55,7 @@ public class Ticket implements Serializable {
         this(reference, userMessage, details, stackTracePolicy, null);
     }
 
-    public Ticket(
+    public SimpleTicket(
             final String reference,
             final String userMessage,
             final String details,
@@ -66,7 +63,7 @@ public class Ticket implements Serializable {
         this(reference, userMessage, details, StackTracePolicy.HIDE, 
kittenUrl);
     }
 
-    public Ticket(
+    public SimpleTicket(
             final String reference,
             final String userMessage,
             final String details,
@@ -79,49 +76,22 @@ public class Ticket implements Serializable {
         this.kittenUrl = kittenUrl;
     }
 
-    /**
-     * A unique identifier that the end-user can use to track any follow-up 
from this error.
-     *
-     * <p>
-     *     For example, an implementation might automatically log an issue in 
a bug tracking system such as JIRA, in
-     *     which case the {@link #getReference() reference} would be the JIRA 
issue number <tt>XXX-1234</tt>.
-     * </p>
-     */
+    @Override
     public String getReference() {
         return reference;
     }
 
-    /**
-     * Message to display to the user.
-     *
-     * <p>
-     *     Typically this message should be short, one line long.
-     * </p>
-     */
+    @Override
     public String getUserMessage() {
         return userMessage;
     }
 
-    /**
-     * Optional additional details to show to the end-user.
-     *
-     * <p>
-     *     For example, these might include text on how to recover from the 
error, or workarounds, or just further
-     *     details on contacting the help desk if the issue is severe and 
requires immediate attention.
-     * </p>
-     */
+    @Override
     public String getDetails() {
         return details;
     }
 
-    /**
-     * Whether the stack trace for the exception should be displayed or be 
hidden.
-     *
-     * <p>
-     *     The default is to hide it on the basis that the reporting service 
will have reported the stack trace to
-     *     the support team, meaning there's no need to expose this info to 
the end-user.
-     * </p>
-     */
+    @Override
     public StackTracePolicy getStackTracePolicy() {
         return stackTracePolicy;
     }
@@ -136,4 +106,22 @@ public class Ticket implements Serializable {
     public String getKittenUrl() {
         return kittenUrl;
     }
+
+    @Override
+       public String getMarkup() {
+ 
+       return
+       "<p>" + 
+       "    <h3>" + getDetails() + "</h3>" +
+       (_NullSafe.isEmpty(getKittenUrl()) ? "" : "<img src=\"" + 
getKittenUrl() + "\"></img>") +
+       "</p>" + 
+               (_NullSafe.isEmpty(getReference()) ? "" : 
+                       "<p><h4>Please quote reference: <span>" + 
getReference() + "</span></h4></p>")
+       ;
+               
+       }
+    
+    
+    
+    
 }
diff --git 
a/core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java 
b/core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java
index dbbddd3..23f6c78 100644
--- 
a/core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java
+++ 
b/core/applib/src/main/java/org/apache/isis/applib/services/error/Ticket.java
@@ -31,54 +31,13 @@ import java.io.Serializable;
  *     </ul>
  * </p>
  */
-public class Ticket implements Serializable {
-
-       private static final long serialVersionUID = 4900947111894407314L;
-       
-       private final String reference;
-    private final String userMessage;
-    private final String details;
-    private final StackTracePolicy stackTracePolicy;
-    private final String kittenUrl;
+public interface Ticket extends Serializable {
 
     public enum StackTracePolicy {
         SHOW,
         HIDE
     }
 
-    public Ticket(final String reference, final String userMessage, final 
String details) {
-        this(reference, userMessage, details, StackTracePolicy.HIDE);
-    }
-
-    public Ticket(
-            final String reference,
-            final String userMessage,
-            final String details,
-            final StackTracePolicy stackTracePolicy) {
-        this(reference, userMessage, details, stackTracePolicy, null);
-    }
-
-    public Ticket(
-            final String reference,
-            final String userMessage,
-            final String details,
-            final String kittenUrl) {
-        this(reference, userMessage, details, StackTracePolicy.HIDE, 
kittenUrl);
-    }
-
-    public Ticket(
-            final String reference,
-            final String userMessage,
-            final String details,
-            final StackTracePolicy stackTracePolicy,
-            final String kittenUrl) {
-        this.reference = reference;
-        this.userMessage = userMessage;
-        this.details = details;
-        this.stackTracePolicy = stackTracePolicy;
-        this.kittenUrl = kittenUrl;
-    }
-
     /**
      * A unique identifier that the end-user can use to track any follow-up 
from this error.
      *
@@ -87,9 +46,7 @@ public class Ticket implements Serializable {
      *     which case the {@link #getReference() reference} would be the JIRA 
issue number <tt>XXX-1234</tt>.
      * </p>
      */
-    public String getReference() {
-        return reference;
-    }
+    public String getReference();
 
     /**
      * Message to display to the user.
@@ -98,9 +55,7 @@ public class Ticket implements Serializable {
      *     Typically this message should be short, one line long.
      * </p>
      */
-    public String getUserMessage() {
-        return userMessage;
-    }
+    public String getUserMessage();
 
     /**
      * Optional additional details to show to the end-user.
@@ -110,9 +65,7 @@ public class Ticket implements Serializable {
      *     details on contacting the help desk if the issue is severe and 
requires immediate attention.
      * </p>
      */
-    public String getDetails() {
-        return details;
-    }
+    public String getDetails();
 
     /**
      * Whether the stack trace for the exception should be displayed or be 
hidden.
@@ -122,18 +75,11 @@ public class Ticket implements Serializable {
      *     the support team, meaning there's no need to expose this info to 
the end-user.
      * </p>
      */
-    public StackTracePolicy getStackTracePolicy() {
-        return stackTracePolicy;
-    }
+    public StackTracePolicy getStackTracePolicy();
+
 
     /**
-     * If specified, is the external URL of an image to display to the end 
user.
-     *
-     * <p>
-     *     Not necessarily of a kitten, but something by way of an apology.
-     * </p>
+     * Returns a Html representation of this ticket.
      */
-    public String getKittenUrl() {
-        return kittenUrl;
-    }
+       public String getMarkup();
 }
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
index 31ab585..0716d22 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/components/scalars/markup/MarkupComponent.java
@@ -37,8 +37,7 @@ public class MarkupComponent extends WebComponent {
 
        @Override
        public void onComponentTagBody(final MarkupStream markupStream, final 
ComponentTag openTag){
-               final ObjectAdapter objAdapter = (ObjectAdapter) 
getDefaultModelObject();
-               replaceComponentTagBody(markupStream, openTag, 
extractHtmlOrElse(objAdapter, ""));
+               replaceComponentTagBody(markupStream, openTag, 
extractHtmlOrElse(getDefaultModelObject(), ""));
        }
 
        @Override
@@ -49,17 +48,28 @@ public class MarkupComponent extends WebComponent {
        
        // -- HELPER
        
-       private CharSequence extractHtmlOrElse(ObjectAdapter objAdapter, final 
String fallback) {
+       private CharSequence extractHtmlOrElse(Object modelObject, final String 
fallback) {
                
-               if(objAdapter==null || objAdapter.getObject()==null)
+               if(modelObject==null) {
                        return fallback;
+               }
                
-               final Object value = objAdapter.getObject();
+               if(modelObject instanceof ObjectAdapter) {
+                       
+                       final ObjectAdapter objAdapter = (ObjectAdapter) 
modelObject;
+                       
+                       if(objAdapter.getObject()==null)
+                               return fallback;
+                       
+                       final Object value = objAdapter.getObject();
+                       
+                       if(!(value instanceof Markup))
+                               return fallback;
+                       
+                       return ((Markup)value).asString();      
+               }
                
-               if(!(value instanceof Markup))
-                       return fallback;
-               
-               return ((Markup)value).asString();
+               return modelObject.toString();
                
        }
 }
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
index 3e14faa..561a514 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionModel.java
@@ -28,6 +28,7 @@ import com.google.common.collect.Lists;
 import org.apache.isis.applib.NonRecoverableException;
 import org.apache.isis.applib.services.error.ErrorReportingService;
 import org.apache.isis.applib.services.error.Ticket;
+import org.apache.isis.commons.internal.base._Casts;
 import org.apache.isis.core.metamodel.spec.feature.ObjectMember;
 import org.apache.isis.viewer.wicket.model.models.ModelAbstract;
 
@@ -90,7 +91,7 @@ public class ExceptionModel extends 
ModelAbstract<List<StackTraceDetail>> {
         final List<Throwable> causalChain = Throwables.getCausalChain(ex);
         for (Throwable cause : causalChain) {
             if(exType.isAssignableFrom(cause.getClass())) {
-                return (T)cause;
+                return _Casts.uncheckedCast(cause);
             }
         }
         return null;
@@ -162,7 +163,6 @@ public class ExceptionModel extends 
ModelAbstract<List<StackTraceDetail>> {
         List<List<StackTraceDetail>> stackTraces = Lists.newArrayList();
 
         List<Throwable> causalChain = Throwables.getCausalChain(ex);
-        boolean firstTime = true;
         for(Throwable cause: causalChain) {
             List<StackTraceDetail> stackTrace = Lists.newArrayList();
             append(cause, stackTrace);
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
index 3b75912..37b27ea 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.html
@@ -33,13 +33,7 @@
                                 <span wicket:id="mainMessage">[main message 
text]</span>
                             </h2>
                         </div>
-                        <div class="panel-body" wicket:id="ticketDetailsDiv">
-                            <h3 wicket:id="ticketDetails">[ticket details]</h3>
-                            <img wicket:id="kittens"></img>
-                        </div>
-                        <div class="panel-body" wicket:id="ticketReferenceDiv">
-                            <h4>Please quote reference: <span 
wicket:id="ticketReference">[ticket reference]</span></h4>
-                        </div>
+                        <div class="panel-body" 
wicket:id="ticketMarkup">[ticket details]</div>
                         <div class="panel-body">
                             <div class="form-group">
                                 <button type="submit" 
wicket:id="continueButton" class="btn btn-primary">Continue</button>
diff --git 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
index 2e5d1de..28b6df3 100644
--- 
a/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
+++ 
b/core/viewer-wicket-ui/src/main/java/org/apache/isis/viewer/wicket/ui/errors/ExceptionStackTracePanel.java
@@ -19,6 +19,16 @@
 
 package org.apache.isis.viewer.wicket.ui.errors;
 
+import org.apache.isis.applib.services.error.Ticket;
+import org.apache.isis.viewer.wicket.model.models.EntityModel;
+import org.apache.isis.viewer.wicket.model.models.PageType;
+import 
org.apache.isis.viewer.wicket.ui.components.scalars.markup.MarkupComponent;
+import 
org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
+import 
org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider;
+import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
+import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
+import org.apache.isis.viewer.wicket.ui.util.Components;
+import org.apache.isis.viewer.wicket.ui.util.Links;
 import org.apache.wicket.AttributeModifier;
 import org.apache.wicket.MarkupContainer;
 import org.apache.wicket.Page;
@@ -28,47 +38,33 @@ import 
org.apache.wicket.markup.head.JavaScriptReferenceHeaderItem;
 import org.apache.wicket.markup.html.WebComponent;
 import org.apache.wicket.markup.html.WebMarkupContainer;
 import org.apache.wicket.markup.html.basic.Label;
-import org.apache.wicket.markup.html.basic.MultiLineLabel;
 import org.apache.wicket.markup.html.link.AbstractLink;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.Model;
 import org.apache.wicket.request.mapper.parameter.PageParameters;
 import org.apache.wicket.request.resource.JavaScriptResourceReference;
 
-import org.apache.isis.applib.services.error.Ticket;
-import org.apache.isis.viewer.wicket.model.models.EntityModel;
-import org.apache.isis.viewer.wicket.model.models.PageType;
-import 
org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModel;
-import 
org.apache.isis.viewer.wicket.ui.components.widgets.breadcrumbs.BreadcrumbModelProvider;
-import org.apache.isis.viewer.wicket.ui.pages.PageClassRegistry;
-import org.apache.isis.viewer.wicket.ui.pages.home.HomePage;
-import org.apache.isis.viewer.wicket.ui.util.Components;
-import org.apache.isis.viewer.wicket.ui.util.Links;
-
 public class ExceptionStackTracePanel extends Panel {
 
     private static final long serialVersionUID = 1L;
 
     private static final String ID_MAIN_MESSAGE = "mainMessage";
 
-    private static final String ID_TICKET_DETAILS_DIV = "ticketDetailsDiv";
-    private static final String ID_TICKET_DETAILS = "ticketDetails";
-
-    private static final String ID_TICKET_REFERENCE_DIV = "ticketReferenceDiv";
-    private static final String ID_TICKET_REFERENCE = "ticketReference";
-
     private static final String ID_EXCEPTION_DETAIL_DIV = "exceptionDetailDiv";
+    
+    private static final String ID_TICKET_MARKUP = "ticketMarkup";
 
     private static final String ID_STACK_TRACE_ELEMENT = "stackTraceElement";
     private static final String ID_LINE = "stackTraceElementLine";
 
     private static final JavaScriptResourceReference DIV_TOGGLE_JS = new 
JavaScriptResourceReference(ExceptionStackTracePanel.class, "div-toggle.js");
 
-    private static final String ID_KITTENS_IMAGE = "kittens";
 
     public class ExternalImageUrl extends WebComponent {
 
-        public ExternalImageUrl(String id, String imageUrl) {
+               private static final long serialVersionUID = 
-3556235292216447710L;
+
+               public ExternalImageUrl(String id, String imageUrl) {
             super(id);
             add(new AttributeModifier("src", new Model<>(imageUrl)));
             setVisible(!(imageUrl==null || imageUrl.equals("")));
@@ -96,25 +92,12 @@ public class ExceptionStackTracePanel extends Panel {
         // label.setEscapeModelStrings(false);
         add(label);
 
-        final String ticketDetail = ticket != null ? ticket.getDetails(): null;
-        if(ticketDetail == null) {
-            Components.permanentlyHide(this, ID_TICKET_DETAILS_DIV);
-        } else {
-            final WebMarkupContainer panel = new 
WebMarkupContainer(ID_TICKET_DETAILS_DIV);
-            final MultiLineLabel details = new 
MultiLineLabel(ID_TICKET_DETAILS, Model.of(ticketDetail));
-            panel.add(details);
-            panel.add(new ExternalImageUrl(ID_KITTENS_IMAGE, 
ticket.getKittenUrl()));
-            add(panel);
-        }
-
-        final String ticketReference = ticket != null ? ticket.getReference(): 
null;
-        if(ticketReference == null) {
-            Components.permanentlyHide(this, ID_TICKET_REFERENCE_DIV);
+        
+        final String ticketMarkup = ticket != null ? ticket.getMarkup(): null;
+        if(ticketMarkup == null) {
+               Components.permanentlyHide(this, ID_TICKET_MARKUP);
         } else {
-            final WebMarkupContainer panel = new 
WebMarkupContainer(ID_TICKET_REFERENCE_DIV);
-            final Label reference = new Label(ID_TICKET_REFERENCE, 
Model.of(ticketReference));
-            panel.add(reference);
-            add(panel);
+               add(new MarkupComponent(ID_TICKET_MARKUP, 
Model.of(ticket.getMarkup())));
         }
 
         final boolean suppressExceptionDetail =

-- 
To stop receiving notification emails like this one, please contact
ahu...@apache.org.

Reply via email to