aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>2006-12-28 09:58:31 +0000
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>2006-12-28 09:58:31 +0000
commitebdd400b3f961a4e8ba8f36ac96d4f333d41bf30 (patch)
tree13818e8f712b44f71907bd29405a6f7b5300f1a0
parentf902b20c22485fd2371b5b2e2aacba4bcae850d8 (diff)
downloadvaadin-framework-ebdd400b3f961a4e8ba8f36ac96d4f333d41bf30.tar.gz
vaadin-framework-ebdd400b3f961a4e8ba8f36ac96d4f333d41bf30.zip
Fixed bug #117
svn changeset:172/svn branch:toolkit
-rw-r--r--src/com/itmill/toolkit/terminal/web/WebApplicationContext.java182
1 files changed, 119 insertions, 63 deletions
diff --git a/src/com/itmill/toolkit/terminal/web/WebApplicationContext.java b/src/com/itmill/toolkit/terminal/web/WebApplicationContext.java
index 84bc60a610..4d29e2e89f 100644
--- a/src/com/itmill/toolkit/terminal/web/WebApplicationContext.java
+++ b/src/com/itmill/toolkit/terminal/web/WebApplicationContext.java
@@ -1,34 +1,37 @@
/* *************************************************************************
- IT Mill Toolkit
+ IT Mill Toolkit
- Development of Browser User Intarfaces Made Easy
+ Development of Browser User Intarfaces Made Easy
- Copyright (C) 2000-2006 IT Mill Ltd
-
- *************************************************************************
+ Copyright (C) 2000-2006 IT Mill Ltd
+
+ *************************************************************************
- This product is distributed under commercial license that can be found
- from the product package on license/license.txt. Use of this product might
- require purchasing a commercial license from IT Mill Ltd. For guidelines
- on usage, see license/licensing-guidelines.html
+ This product is distributed under commercial license that can be found
+ from the product package on license/license.txt. Use of this product might
+ require purchasing a commercial license from IT Mill Ltd. For guidelines
+ on usage, see license/licensing-guidelines.html
- *************************************************************************
-
- For more information, contact:
-
- IT Mill Ltd phone: +358 2 4802 7180
- Ruukinkatu 2-4 fax: +358 2 4802 7181
- 20540, Turku email: info@itmill.com
- Finland company www: www.itmill.com
-
- Primary source for information and releases: www.itmill.com
+ *************************************************************************
+
+ For more information, contact:
+
+ IT Mill Ltd phone: +358 2 4802 7180
+ Ruukinkatu 2-4 fax: +358 2 4802 7181
+ 20540, Turku email: info@itmill.com
+ Finland company www: www.itmill.com
+
+ Primary source for information and releases: www.itmill.com
- ********************************************************************** */
+ ********************************************************************** */
package com.itmill.toolkit.terminal.web;
+import java.io.BufferedWriter;
import java.io.File;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
@@ -43,65 +46,78 @@ import com.itmill.toolkit.Application;
import com.itmill.toolkit.service.ApplicationContext;
import com.itmill.toolkit.ui.Window;
-/** Web application context for Millstone applications.
- *
+/**
+ * Web application context for Millstone applications.
+ *
* @author IT Mill Ltd.
- * @version @VERSION@
+ * @version
+ * @VERSION@
* @since 3.1
*/
public class WebApplicationContext implements ApplicationContext {
private List listeners;
+
private HttpSession session;
+
private WeakHashMap formActions = new WeakHashMap();
-
+
/** Create a new Web Application Context. */
WebApplicationContext(HttpSession session) {
this.session = session;
}
- /** Get the form action for given window.
+ /**
+ * Get the form action for given window.
*
* By default, this action is "", which preserves the current url. Commonly
* this is wanted to be set to <code>application.getUrl().toString()</code>
- * or <code>window.getUrl().toString()</code> in order to clean any
- * local links or parameters set from the action.
+ * or <code>window.getUrl().toString()</code> in order to clean any local
+ * links or parameters set from the action.
*
- * @param window Window for which the action is queried
+ * @param window
+ * Window for which the action is queried
* @return Action to be set into Form action attribute
- */
+ */
public String getWindowFormAction(Window window) {
String action = (String) formActions.get(window);
return action == null ? "" : action;
}
-
- /** Set the form action for given window.
+
+ /**
+ * Set the form action for given window.
*
* By default, this action is "", which preserves the current url. Commonly
* this is wanted to be set to <code>application.getUrl().toString()</code>
- * or <code>window.getUrl().toString()</code> in order to clean any
- * local links or parameters set from the action.
+ * or <code>window.getUrl().toString()</code> in order to clean any local
+ * links or parameters set from the action.
*
- * @param window Window for which the action is set
- * @param action New action for the window.
- */
+ * @param window
+ * Window for which the action is set
+ * @param action
+ * New action for the window.
+ */
public void setWindowFormAction(Window window, String action) {
- if (action == null || action == "")
+ if (action == null || action == "")
formActions.remove(window);
else
- formActions.put(window,action);
+ formActions.put(window, action);
}
-
- /* (non-Javadoc)
+
+ /*
+ * (non-Javadoc)
+ *
* @see com.itmill.toolkit.service.ApplicationContext#getBaseDirectory()
*/
public File getBaseDirectory() {
String realPath = session.getServletContext().getRealPath("/");
- if (realPath == null) return null;
+ if (realPath == null)
+ return null;
return new File(realPath);
}
- /** Get the http-session application is running in.
+ /**
+ * Get the http-session application is running in.
*
* @return HttpSession this application context resides in
*/
@@ -109,41 +125,51 @@ public class WebApplicationContext implements ApplicationContext {
return session;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.itmill.toolkit.service.ApplicationContext#getApplications()
*/
public Collection getApplications() {
- LinkedList applications =
- (LinkedList) session.getAttribute(
- ApplicationServlet.SESSION_ATTR_APPS);
+ LinkedList applications = (LinkedList) session
+ .getAttribute(ApplicationServlet.SESSION_ATTR_APPS);
- return Collections.unmodifiableCollection(
- applications == null ? (new LinkedList()) : applications);
+ return Collections
+ .unmodifiableCollection(applications == null ? (new LinkedList())
+ : applications);
}
-
- /** Get application context for HttpSession.
+
+ /**
+ * Get application context for HttpSession.
*
* @return application context for HttpSession.
*/
- static public WebApplicationContext getApplicationContext(HttpSession session) {
+ static public WebApplicationContext getApplicationContext(
+ HttpSession session) {
return new WebApplicationContext(session);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj) {
return session.equals(obj);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
return session.hashCode();
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.itmill.toolkit.service.ApplicationContext#addTransactionListener(com.itmill.toolkit.service.ApplicationContext.TransactionListener)
*/
public void addTransactionListener(TransactionListener listener) {
@@ -152,28 +178,58 @@ public class WebApplicationContext implements ApplicationContext {
this.listeners.add(listener);
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see com.itmill.toolkit.service.ApplicationContext#removeTransactionListener(com.itmill.toolkit.service.ApplicationContext.TransactionListener)
*/
public void removeTransactionListener(TransactionListener listener) {
if (this.listeners != null)
this.listeners.remove(listener);
-
+
}
/** Notify transaction start */
- protected void startTransaction(Application application, HttpServletRequest request) {
- if (this.listeners == null) return;
+ protected void startTransaction(Application application,
+ HttpServletRequest request) {
+ if (this.listeners == null)
+ return;
for (Iterator i = this.listeners.iterator(); i.hasNext();) {
- ((ApplicationContext.TransactionListener)i.next()).transactionStart(application,request);
+ ((ApplicationContext.TransactionListener) i.next())
+ .transactionStart(application, request);
}
}
/** Notify transaction end */
- protected void endTransaction(Application application, HttpServletRequest request) {
- if (this.listeners == null) return;
- for (Iterator i = this.listeners.iterator(); i.hasNext();) {
- ((ApplicationContext.TransactionListener)i.next()).transactionEnd(application,request);
+ protected void endTransaction(Application application,
+ HttpServletRequest request) {
+ if (this.listeners == null)
+ return;
+
+ LinkedList exceptions = null;
+ for (Iterator i = this.listeners.iterator(); i.hasNext();)
+ try {
+ ((ApplicationContext.TransactionListener) i.next())
+ .transactionEnd(application, request);
+ } catch (RuntimeException t) {
+ if (exceptions == null)
+ exceptions = new LinkedList();
+ exceptions.add(t);
+ }
+
+ // If any runtime exceptions occurred, throw a combined exception
+ if (exceptions != null) {
+ StringBuffer msg = new StringBuffer();
+ for (Iterator i = listeners.iterator(); i.hasNext();) {
+ RuntimeException e = (RuntimeException) i.next();
+ if (msg.length() == 0)
+ msg.append("\n\n--------------------------\n\n");
+ msg.append(e.getMessage() + "\n");
+ StringWriter trace = new StringWriter();
+ e.printStackTrace(new PrintWriter(trace,true));
+ msg.append(trace.toString());
+ }
+ throw new RuntimeException(msg.toString());
}
}