diff options
author | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2006-12-28 09:58:31 +0000 |
---|---|---|
committer | Joonas Lehtinen <joonas.lehtinen@itmill.com> | 2006-12-28 09:58:31 +0000 |
commit | ebdd400b3f961a4e8ba8f36ac96d4f333d41bf30 (patch) | |
tree | 13818e8f712b44f71907bd29405a6f7b5300f1a0 | |
parent | f902b20c22485fd2371b5b2e2aacba4bcae850d8 (diff) | |
download | vaadin-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.java | 182 |
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()); } } |