Преглед изворни кода

Fixed bug #117

svn changeset:172/svn branch:toolkit
tags/6.7.0.beta1
Joonas Lehtinen пре 17 година
родитељ
комит
ebdd400b3f
1 измењених фајлова са 119 додато и 63 уклоњено
  1. 119
    63
      src/com/itmill/toolkit/terminal/web/WebApplicationContext.java

+ 119
- 63
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());
}
}


Loading…
Откажи
Сачувај