aboutsummaryrefslogtreecommitdiffstats
path: root/src/com/itmill/toolkit/terminal/ajax/AjaxApplicationContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/itmill/toolkit/terminal/ajax/AjaxApplicationContext.java')
-rw-r--r--src/com/itmill/toolkit/terminal/ajax/AjaxApplicationContext.java204
1 files changed, 204 insertions, 0 deletions
diff --git a/src/com/itmill/toolkit/terminal/ajax/AjaxApplicationContext.java b/src/com/itmill/toolkit/terminal/ajax/AjaxApplicationContext.java
new file mode 100644
index 0000000000..26e6565fff
--- /dev/null
+++ b/src/com/itmill/toolkit/terminal/ajax/AjaxApplicationContext.java
@@ -0,0 +1,204 @@
+/* *************************************************************************
+
+ IT Mill Toolkit
+
+ Development of Browser User Intarfaces Made Easy
+
+ 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
+
+ *************************************************************************
+
+ 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.ajax;
+
+import java.io.File;
+import java.net.URL;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.Locale;
+import java.util.Properties;
+import java.util.WeakHashMap;
+
+import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+
+import com.itmill.toolkit.Application;
+import com.itmill.toolkit.service.ApplicationContext;
+
+/** Application context for ajax applications.
+ *
+ * @author IT Mill Ltd, Joonas Lehtinen
+ * @version @VERSION@
+ * @since 3.1
+ */
+public class AjaxApplicationContext implements ApplicationContext {
+
+ private LinkedList applications = new LinkedList();
+
+ private ServletContext servletContext;
+
+ private LinkedList transactionListeners = new LinkedList();
+
+ private WeakHashMap applicationToManagerMap = new WeakHashMap();
+
+ AjaxApplicationContext(ServletContext servletContext) {
+ this.servletContext = servletContext;
+ }
+
+ ApplicationManager getApplicationManager(Application application) {
+ ApplicationManager vm = (ApplicationManager) applicationToManagerMap
+ .get(application);
+ if (vm == null) {
+ vm = new ApplicationManager(application);
+ applicationToManagerMap.put(application, vm);
+ }
+ return vm;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.itmill.toolkit.service.ApplicationContext#getBaseDirectory()
+ */
+ public File getBaseDirectory() {
+
+ String path = servletContext.getRealPath("/");
+ if (path == null)
+ return null;
+ return new File(path);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.itmill.toolkit.service.ApplicationContext#getApplications()
+ */
+ public Collection getApplications() {
+ return Collections.unmodifiableCollection(applications);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.itmill.toolkit.service.ApplicationContext#addTransactionListener(com.itmill.toolkit.service.ApplicationContext.TransactionListener)
+ */
+ public void addTransactionListener(TransactionListener listener) {
+ transactionListeners.add(listener);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see com.itmill.toolkit.service.ApplicationContext#removeTransactionListener(com.itmill.toolkit.service.ApplicationContext.TransactionListener)
+ */
+ public void removeTransactionListener(TransactionListener listener) {
+ transactionListeners.remove(listener);
+ }
+
+ /**
+ * Create a new application.
+ *
+ * @return New application instance
+ */
+ Application createApplication(Class applicationClass, URL applicationUrl,
+ Locale locale, Properties applicationStartProperties)
+ throws InstantiationException, IllegalAccessException {
+
+ Application application = null;
+
+ // Create new application and start it
+ try {
+ application = (Application) applicationClass.newInstance();
+ applications.add(application);
+ application.setLocale(locale);
+
+ getApplicationManager(application).takeControl();
+
+ application.start(applicationUrl, applicationStartProperties, this);
+
+ } catch (IllegalAccessException e) {
+ Log.error("Illegal access to application class "
+ + applicationClass.getName());
+ throw e;
+ } catch (InstantiationException e) {
+ Log.error("Failed to instantiate application class: "
+ + applicationClass.getName());
+ throw e;
+ }
+
+ return application;
+ }
+
+ void removeApplication(Application application) {
+ applications.remove(application);
+ }
+
+ Application getApplication(URL applicationUrl, String servletPath) {
+ // Search for the application (using the application URI) from the list
+ Application application = null;
+ for (Iterator i = applications.iterator(); i.hasNext()
+ && application == null;) {
+ Application a = (Application) i.next();
+ String aPath = a.getURL().getPath();
+ if (servletPath.length() < aPath.length())
+ servletPath += "/";
+ if (servletPath.equals(aPath))
+ application = a;
+ }
+
+ // Remove stopped application from the list
+ if (application != null && !application.isRunning()) {
+ applications.remove(application);
+ application = null;
+ }
+
+ return application;
+ }
+
+ /** Notify transaction start */
+ protected void startTransaction(Application application, HttpServletRequest request) {
+ if (this.transactionListeners == null) return;
+ for (Iterator i = this.transactionListeners.iterator(); i.hasNext();) {
+ ((ApplicationContext.TransactionListener)i.next()).transactionStart(application,request);
+ }
+ }
+
+ /** Notify transaction end */
+ protected void endTransaction(Application application, HttpServletRequest request) {
+ if (this.transactionListeners == null) return;
+ for (Iterator i = this.transactionListeners.iterator(); i.hasNext();) {
+ ((ApplicationContext.TransactionListener)i.next()).transactionEnd(application,request);
+ }
+ }
+
+ /** Closes this application context and all applications bound to it.
+ *
+ */
+ public void close() {
+ for (Iterator i = this.applications.iterator(); i.hasNext();) {
+ Application app = (Application) i.next();
+ app.close();
+ }
+
+ }
+
+}