modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
| 11 --
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
| 22 ++--
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
| 3
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
| 21 +++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
| 41 ++++++++-
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
| 45 ++++++----
modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
| 30 +++++-
modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
| 6 -
8 files changed, 133 insertions(+), 46 deletions(-)
New commits:
commit 297cc733d3b5567a444131892c4766d6852fa80e
Author: Joseph Marques <joseph(a)redhat.com>
Date: Tue Oct 5 01:22:58 2010 -0400
add todos for future infrastructure work
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
index a779117..d0760d2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
@@ -139,9 +139,15 @@ public class GWTServiceLookup {
public static class SessionRpcRequestBuilder extends RpcRequestBuilder {
+ private static int RPC_TIMEOUT = 10000;
+
@Override
- protected void doFinish(RequestBuilder rb) {
- super.doFinish(rb);
+ protected RequestBuilder doCreate(String serviceEntryPoint) {
+ RequestBuilder rb = super.doCreate(serviceEntryPoint);
+
+ // TODO: alter callback handlers to capture timeout failure and retry (at
least once)
+ // to add resilience to gwt service calls
+ rb.setTimeoutMillis(RPC_TIMEOUT);
// TODO Don't use the expensive determineName except in dev mode
rb.setCallback(new MonitoringRequestCallback(determineName(),
rb.getCallback()));
@@ -155,6 +161,8 @@ public class GWTServiceLookup {
.error("SessionRpcRequestBuilder constructed without a value for
"
+ UserSessionManager.SESSION_NAME);
}
+
+ return rb;
}
public String determineName() {
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
index c9da68a..364140f 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
@@ -19,6 +19,7 @@
package org.rhq.enterprise.gui.coregui.server.gwt;
import java.io.IOException;
+import java.util.Enumeration;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
@@ -49,6 +50,9 @@ public abstract class AbstractGWTServiceImpl extends
RemoteServiceServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
+ if (Log.isTraceEnabled()) {
+ printHeaders(req);
+ }
String sid = req.getHeader(UserSessionManager.SESSION_NAME);
if (sid != null) {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
@@ -62,8 +66,22 @@ public abstract class AbstractGWTServiceImpl extends
RemoteServiceServlet {
Log.error("Failed to validate request: sessionId missing,
requestURL=" + req.getRequestURL());
}
+ // TODO: only execute this if the session lookup was successful, otherwise fail
in some deterministic fashion
+ // alter callback handlers to capture expected failure and retry (at least
once)
+ // to add resilience to gwt service calls
long id = HibernatePerformanceMonitor.get().start();
super.service(req, resp);
HibernatePerformanceMonitor.get().stop(id, "GWT Service Request");
}
+
+ @SuppressWarnings("unchecked")
+ private void printHeaders(HttpServletRequest req) {
+ // TODO: figure out why SESSION_NAME header and other GWT-specific headers are
missing occasionally
+ // seems to only happen on polling for recent alerts when there is no user
activity for a few minutes
+ Enumeration<String> headerNames = req.getHeaderNames();
+ Log.trace(req.getRequestURL().toString());
+ while (headerNames.hasMoreElements()) {
+ Log.trace(" " + headerNames.nextElement());
+ }
+ }
}
commit 83c0317378f20d3a9aa1bf92bcf645a771a41e84
Author: Joseph Marques <joseph(a)redhat.com>
Date: Mon Oct 4 23:29:01 2010 -0400
fix z-index so log_DivLogger can be used if developers so choose
diff --git a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
index 85d1b83..54cc3a9 100644
--- a/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
+++ b/modules/enterprise/gui/coregui/src/main/webapp/CoreGUI.css
@@ -317,11 +317,9 @@ a:hover {
-moz-box-sizing: border-box;
overflow: hidden;
cursor: auto;
- z-index: 9999999;
}
.gwtMenu, .gwt-MenuBarPopup, .gwt-MenuPopup {
- z-index: 9999999;
background-color: white;
}
@@ -387,3 +385,7 @@ a:hover {
background-color: #FF6666; /* slightly darker light red */
border-color: #EE1111; /* slightly darker medium red */
}
+
+.log-panel {
+ z-index: 9999999 !important;
+}
commit 84ae15fae55dbaf217217cb4bb1c0edc58c4c907
Author: Joseph Marques <joseph(a)redhat.com>
Date: Mon Oct 4 17:41:07 2010 -0400
better logging around request-response workflow and user session management
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
index ecbd719..65faa6d 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/UserSessionManager.java
@@ -56,7 +56,7 @@ import
org.rhq.enterprise.gui.coregui.client.util.preferences.UserPreferences;
public class UserSessionManager {
private static int SESSION_TIMEOUT = 29 * 60 * 1000; // 29 mins, just shorter than
the 30-min web session timeout
- private static int LOGOUT_DELAY = 15 * 1000; // wait 15 seconds for in-flight
requests to complete before logout
+ private static int LOGOUT_DELAY = 5 * 1000; // wait 5 seconds for in-flight requests
to complete before logout
public static final String SESSION_NAME = "RHQ_Sesssion";
private static Subject sessionSubject;
@@ -88,7 +88,7 @@ public class UserSessionManager {
try {
b.setCallback(new RequestCallback() {
public void onResponseReceived(final Request request, final Response
response) {
- com.allen_sauer.gwt.log.client.Log.info("response text = "
+ response.getText());
+ Log.info("response text = " + response.getText());
String sessionIdString = response.getText();
if (sessionIdString != null && sessionIdString.length() >
0) {
@@ -96,20 +96,20 @@ public class UserSessionManager {
final int subjectId = Integer.parseInt(parts[0]);
final String sessionId = parts[1]; // not null
final long lastAccess = Long.parseLong(parts[2]);
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-subjectId: " +
subjectId);
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-sessionId: " +
sessionId);
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-lastAccess: " +
lastAccess);
+ Log.info("sessionAccess-subjectId: " + subjectId);
+ Log.info("sessionAccess-sessionId: " + sessionId);
+ Log.info("sessionAccess-lastAccess: " + lastAccess);
String previousSessionId = getPreviousSessionId(); // may be null
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-previousSessionId: " +
previousSessionId);
+ Log.info("sessionAccess-previousSessionId: " +
previousSessionId);
if (previousSessionId == null ||
previousSessionId.equals(sessionId) == false) {
// persist sessionId if different from previously saved
sessionId
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-savingSessionId: " +
sessionId);
+ Log.info("sessionAccess-savingSessionId: " +
sessionId);
saveSessionId(sessionId);
// new sessions get the full 29 minutes to expire
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-schedulingSessionTimeout:
" + SESSION_TIMEOUT);
+ Log.info("sessionAccess-schedulingSessionTimeout: "
+ SESSION_TIMEOUT);
sessionTimer.schedule(SESSION_TIMEOUT);
} else {
@@ -124,7 +124,7 @@ public class UserSessionManager {
expiryMillis = SESSION_TIMEOUT; // guarantees maximum is
29 minutes
}
-
com.allen_sauer.gwt.log.client.Log.info("sessionAccess-reschedulingSessionTimeout:
" + expiryMillis);
+ Log.info("sessionAccess-reschedulingSessionTimeout:
" + expiryMillis);
sessionTimer.schedule((int) expiryMillis);
}
@@ -143,7 +143,7 @@ public class UserSessionManager {
public void onFailure(Throwable caught) {
CoreGUI.getErrorHandler().handleError(
"UserSessionManager: Failed to load
user's subject", caught);
- com.allen_sauer.gwt.log.client.Log.info("Failed
to load user's subject");
+ Log.info("Failed to load user's
subject");
new LoginView().showLoginDialog();
}
@@ -260,10 +260,12 @@ public class UserSessionManager {
public static String getSessionId() {
if (sessionSubject == null) {
+ Log.error("UserSessionManager: sessionSubject is null");
return null;
}
Integer sessionId = sessionSubject.getSessionId();
if (sessionId == null) {
+ Log.error("UserSessionManager: sessionId is null");
return null;
}
return sessionId.toString();
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
index 4a9c639..a779117 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/gwt/GWTServiceLookup.java
@@ -18,6 +18,7 @@
*/
package org.rhq.enterprise.gui.coregui.client.gwt;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.http.client.RequestBuilder;
import com.google.gwt.user.client.rpc.RpcRequestBuilder;
import com.google.gwt.user.client.rpc.ServiceDefTarget;
@@ -139,11 +140,6 @@ public class GWTServiceLookup {
public static class SessionRpcRequestBuilder extends RpcRequestBuilder {
@Override
- protected void doSetRequestData(RequestBuilder rb, String data) {
- super.doSetRequestData(rb, data); // TODO: Implement this method.
- }
-
- @Override
protected void doFinish(RequestBuilder rb) {
super.doFinish(rb);
@@ -152,7 +148,12 @@ public class GWTServiceLookup {
String sessionId = UserSessionManager.getSessionId();
if (sessionId != null) {
+ Log.info("SessionRpcRequestBuilder is adding sessionId to request:
" + sessionId);
rb.setHeader(UserSessionManager.SESSION_NAME, sessionId);
+ } else {
+ Log
+ .error("SessionRpcRequestBuilder constructed without a value for
"
+ + UserSessionManager.SESSION_NAME);
}
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
index ae1e85b..c9da68a 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/server/gwt/AbstractGWTServiceImpl.java
@@ -24,6 +24,7 @@ import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import com.allen_sauer.gwt.log.client.Log;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import org.rhq.core.domain.auth.Subject;
@@ -34,9 +35,12 @@ import org.rhq.enterprise.server.util.LookupUtil;
/**
* @author Greg Hinkle
+ * @author Joseph Marques
*/
public abstract class AbstractGWTServiceImpl extends RemoteServiceServlet {
+ private static final long serialVersionUID = 1L;
+
private ThreadLocal<Subject> sessionSubject = new
ThreadLocal<Subject>();
protected Subject getSessionSubject() {
@@ -46,20 +50,20 @@ public abstract class AbstractGWTServiceImpl extends
RemoteServiceServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException {
String sid = req.getHeader(UserSessionManager.SESSION_NAME);
- Subject subject = null;
if (sid != null) {
SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager();
try {
- subject = subjectManager.getSubjectBySessionId(Integer.parseInt(sid));
+ Subject subject =
subjectManager.getSubjectBySessionId(Integer.parseInt(sid));
+ sessionSubject.set(subject);
} catch (Exception e) {
- throw new RuntimeException("Failed to validate session", e);
+ Log.error("Failed to validate request: sessionId was '" +
sid + "', requestURL=" + req.getRequestURL());
}
+ } else {
+ Log.error("Failed to validate request: sessionId missing,
requestURL=" + req.getRequestURL());
}
- sessionSubject.set(subject);
long id = HibernatePerformanceMonitor.get().start();
super.service(req, resp);
HibernatePerformanceMonitor.get().stop(id, "GWT Service Request");
}
-
}
commit 34d44ee66ec927b1dbb1d96fc15de3250622e7e4
Author: Joseph Marques <joseph(a)redhat.com>
Date: Mon Oct 4 14:07:42 2010 -0400
remove duplicate servlet definitions, alphabetize the rest
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
index c486f1d..ecfac0b 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/CoreGUI.gwt.xml
@@ -80,8 +80,11 @@
<servlet path="/AuthorizationGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.AuthorizationGWTServiceImpl"/>
<servlet path="/AvailabilityGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.AvailabilityGWTServiceImpl"/>
<servlet path="/BundleGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.BundleGWTServiceImpl"/>
+ <servlet path="/ClusterGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.ClusterGWTServiceImpl"/>
<servlet path="/ConfigurationGwtService"
class="org.rhq.enterprise.gui.coregui.server.gwt.ConfigurationGWTServiceImpl"/>
<servlet path="/ContentGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.ContentGWTServiceImpl"/>
+ <servlet path="/DashboardGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.DashboardGWTServiceImpl"/>
+ <servlet path="/EventGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.EventGWTServiceImpl"/>
<servlet path="/MeasurementDataGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.MeasurementDataGWTServiceImpl"/>
<servlet path="/OperationGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.OperationGWTServiceImpl"/>
<servlet path="/RemoteInstallGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.RemoteInstallGWTServiceImpl"/>
@@ -95,11 +98,5 @@
<servlet path="/SubjectGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.SubjectGWTServiceImpl"/>
<servlet path="/SystemGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.SystemGWTServiceImpl"/>
<servlet path="/TagGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.TagGWTServiceImpl"/>
- <servlet path="/RemoteInstallGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.RemoteInstallGWTServiceImpl"/>
- <servlet path="/RepoGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.RepoGWTServiceImpl"/>
- <servlet path="/ContentGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.ContentGWTServiceImpl"/>
- <servlet path="/DashboardGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.DashboardGWTServiceImpl"/>
- <servlet path="/EventGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.EventGWTServiceImpl"/>
- <servlet path="/ClusterGWTService"
class="org.rhq.enterprise.gui.coregui.server.gwt.ClusterGWTServiceImpl"/>
-</module>
\ No newline at end of file
+</module>
commit 01bb66ff5713c644f2f7bb4d46763a0866276eb5
Author: Joseph Marques <joseph(a)redhat.com>
Date: Mon Oct 4 14:03:50 2010 -0400
show as much detail in the message center as possible
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
index 34e343e..e62b908 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/bundle/create/BundleUploadDataStep.java
@@ -204,8 +204,7 @@ public class BundleUploadDataStep extends AbstractWizardStep {
uploadForm.addFormSubmitFailedHandler(new FormSubmitFailedHandler() {
public void onFormSubmitFailed(FormSubmitFailedEvent event) {
allFilesStatus.put(uploadForm.getName(), Boolean.FALSE);
- CoreGUI.getMessageCenter().notify(
- new Message("Failed to upload file", null,
Message.Severity.Error));
+ CoreGUI.getMessageCenter().notify(new Message("Failed to upload
file", Message.Severity.Error));
}
});
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
index 49bb67e..1b97a65 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/ErrorHandler.java
@@ -18,11 +18,14 @@
*/
package org.rhq.enterprise.gui.coregui.client.util;
+import java.util.ArrayList;
+
import org.rhq.enterprise.gui.coregui.client.CoreGUI;
import org.rhq.enterprise.gui.coregui.client.util.message.Message;
/**
* @author Greg Hinkle
+ * @author Joseph Marques
*/
public class ErrorHandler {
public void handleError(String message) {
@@ -30,7 +33,7 @@ public class ErrorHandler {
}
public void handleError(String message, Throwable t) {
- Message errorMessage = new Message(message, (t == null) ? null : t.toString(),
Message.Severity.Fatal);
+ Message errorMessage = new Message(message, t, Message.Severity.Fatal);
CoreGUI.getMessageCenter().notify(errorMessage);
if (t != null) {
@@ -38,4 +41,40 @@ public class ErrorHandler {
t.printStackTrace();
}
}
+
+ public static String getAllMessages(Throwable t) {
+ StringBuffer results = new StringBuffer();
+
+ if (t != null) {
+ String[] msgs = getAllMessagesArray(t);
+ results.append(msgs[0]);
+
+ String indent = " ";
+ for (int i = 1; i < msgs.length; i++) {
+ results.append("\n").append(indent);
+ results.append(msgs[i]);
+ indent = indent + " ";
+ }
+ } else {
+ results.append(">> exception was null <<");
+ }
+
+ return results.toString();
+ }
+
+ public static String[] getAllMessagesArray(Throwable t) {
+ ArrayList<String> list = new ArrayList<String>();
+
+ if (t != null) {
+ list.add(t.getClass().getName() + ":" + t.getMessage());
+
+ while ((t.getCause() != null) && (t != t.getCause())) {
+ t = t.getCause();
+
+ list.add(t.getClass().getName() + ":" + t.getMessage());
+ }
+ }
+
+ return list.toArray(new String[list.size()]);
+ }
}
diff --git
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
index 3a0b464..a9e94c2 100644
---
a/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
+++
b/modules/enterprise/gui/coregui/src/main/java/org/rhq/enterprise/gui/coregui/client/util/message/Message.java
@@ -21,13 +21,14 @@ package org.rhq.enterprise.gui.coregui.client.util.message;
import java.util.Date;
import java.util.EnumSet;
+import org.rhq.enterprise.gui.coregui.client.util.ErrorHandler;
+
/**
* A message to be displayed to the user in one or more places.
*
* @author Greg Hinkle
* @author Ian Springer
*/
-@SuppressWarnings({"UnnecessarySemicolon"})
public class Message {
protected String conciseMessage;
protected String detailedMessage;
@@ -36,21 +37,30 @@ public class Message {
protected EnumSet<Option> options;
// TODO: Add Debug severity?
- public enum Severity { Info, Warning, Error, Fatal };
- public enum Option { Transient, Sticky, BackgroundJobResult };
+ public enum Severity {
+ Info, Warning, Error, Fatal
+ };
+
+ public enum Option {
+ Transient, Sticky, BackgroundJobResult
+ };
public Message(String conciseMessage) {
- this(conciseMessage, (Severity)null);
+ this(conciseMessage, (Severity) null);
}
public Message(String conciseMessage, Severity severity) {
- this(conciseMessage, null, severity);
+ this(conciseMessage, (String) null, severity);
}
public Message(String conciseMessage, String detailedMessage) {
this(conciseMessage, detailedMessage, null);
}
+ public Message(String conciseMessage, Throwable details) {
+ this(conciseMessage, details, null);
+ }
+
public Message(String conciseMessage, EnumSet<Option> options) {
this(conciseMessage, null, options);
}
@@ -59,8 +69,16 @@ public class Message {
this(conciseMessage, detailedMessage, severity, null);
}
+ public Message(String conciseMessage, Throwable details, Severity severity) {
+ this(conciseMessage, details, severity, null);
+ }
+
public Message(String conciseMessage, Severity severity, EnumSet<Option>
options) {
- this(conciseMessage, null, severity, options);
+ this(conciseMessage, (String) null, severity, options);
+ }
+
+ public Message(String conciseMessage, Throwable details, Severity severity,
EnumSet<Option> options) {
+ this(conciseMessage, ErrorHandler.getAllMessages(details), severity, options);
}
public Message(String conciseMessage, String detailedMessage, Severity severity,
EnumSet<Option> options) {
@@ -97,15 +115,14 @@ public class Message {
public boolean isBackgroundJobResult() {
return options.contains(Option.BackgroundJobResult);
}
-
+
@Override
public String toString() {
- return "Message{" +
- "conciseMessage='" + this.conciseMessage + '\'' +
- ", detailedMessage='" + this.detailedMessage + '\''
+
- ", fired=" + this.fired +
- ", severity=" + this.severity +
- ", options=" + this.options +
- '}';
+ return "Message{" //
+ + "conciseMessage='" + this.conciseMessage + '\''
//
+ + ", detailedMessage='" + this.detailedMessage +
'\'' //
+ + ", fired=" + this.fired //
+ + ", severity=" + this.severity //
+ + ", options=" + this.options + '}';
}
}