]> source.dussan.org Git - vaadin-framework.git/commitdiff
Fixed bug #117
authorJoonas Lehtinen <joonas.lehtinen@itmill.com>
Thu, 28 Dec 2006 09:58:31 +0000 (09:58 +0000)
committerJoonas Lehtinen <joonas.lehtinen@itmill.com>
Thu, 28 Dec 2006 09:58:31 +0000 (09:58 +0000)
svn changeset:172/svn branch:toolkit

src/com/itmill/toolkit/terminal/web/WebApplicationContext.java

index 84bc60a6104dca04a459920cf76cd490464c8cd8..4d29e2e89f5a782b2783becfedd317b213c1223b 100644 (file)
@@ -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());
                }
        }