summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/com/vaadin/terminal/DeploymentConfiguration.java10
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java16
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java12
-rw-r--r--src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java22
-rw-r--r--src/com/vaadin/terminal/gwt/server/VaadinContext.java46
-rw-r--r--src/com/vaadin/terminal/gwt/server/VaadinContextEvent.java19
-rw-r--r--src/com/vaadin/terminal/gwt/server/VaadinContextListener.java13
7 files changed, 136 insertions, 2 deletions
diff --git a/src/com/vaadin/terminal/DeploymentConfiguration.java b/src/com/vaadin/terminal/DeploymentConfiguration.java
index ddb42349d8..160350ca24 100644
--- a/src/com/vaadin/terminal/DeploymentConfiguration.java
+++ b/src/com/vaadin/terminal/DeploymentConfiguration.java
@@ -5,11 +5,15 @@
package com.vaadin.terminal;
import java.io.Serializable;
+import java.util.Iterator;
import java.util.Properties;
import javax.portlet.PortletContext;
import javax.servlet.ServletContext;
+import com.vaadin.terminal.gwt.server.VaadinContext;
+import com.vaadin.terminal.gwt.server.VaadinContextListener;
+
/**
* Provide deployment specific settings that are required outside terminal
* specific code.
@@ -110,4 +114,10 @@ public interface DeploymentConfiguration extends Serializable {
* @return properties for the application.
*/
public Properties getInitParameters();
+
+ public Iterator<VaadinContextListener> getContextListeners();
+
+ public VaadinContext getVaadinContext();
+
+ public void setVaadinContext(VaadinContext vaadinContext);
}
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
index 363f7e4869..bb4e8ba0a7 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationPortlet.java
@@ -290,6 +290,9 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
}
};
+ private final VaadinContext vaadinContext = new VaadinContext(
+ getDeploymentConfiguration());
+
@Override
public void init(PortletConfig config) throws PortletException {
super.init(config);
@@ -315,6 +318,15 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
checkProductionMode();
checkCrossSiteProtection();
+
+ vaadinContext.init();
+ }
+
+ @Override
+ public void destroy() {
+ super.destroy();
+
+ vaadinContext.destroy();
}
private void checkCrossSiteProtection() {
@@ -787,8 +799,8 @@ public abstract class AbstractApplicationPortlet extends GenericPortlet
application.setLocale(locale);
// No application URL when running inside a portlet
application.start(new ApplicationStartEvent(null,
- getDeploymentConfiguration().getInitParameters(),
- context, isProductionMode()));
+ getDeploymentConfiguration().getInitParameters(), context,
+ isProductionMode()));
}
}
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
index a0e807801e..c2e1d2d3e7 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractApplicationServlet.java
@@ -128,6 +128,9 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
}
};
+ private final VaadinContext vaadinContext = new VaadinContext(
+ getDeploymentConfiguration());
+
/**
* Called by the servlet container to indicate to a servlet that the servlet
* is being placed into service.
@@ -166,6 +169,15 @@ public abstract class AbstractApplicationServlet extends HttpServlet implements
checkProductionMode();
checkCrossSiteProtection();
checkResourceCacheTime();
+
+ vaadinContext.init();
+ }
+
+ @Override
+ public void destroy() {
+ super.destroy();
+
+ vaadinContext.destroy();
}
private void checkCrossSiteProtection() {
diff --git a/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java b/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java
index 1ac090ad76..47bf5ecc60 100644
--- a/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java
+++ b/src/com/vaadin/terminal/gwt/server/AbstractDeploymentConfiguration.java
@@ -5,7 +5,9 @@
package com.vaadin.terminal.gwt.server;
import java.lang.reflect.Constructor;
+import java.util.Iterator;
import java.util.Properties;
+import java.util.ServiceLoader;
import com.vaadin.terminal.DeploymentConfiguration;
@@ -14,6 +16,7 @@ public abstract class AbstractDeploymentConfiguration implements
private final Class<?> systemPropertyBaseClass;
private final Properties applicationProperties = new Properties();
+ private VaadinContext vaadinContext;
public AbstractDeploymentConfiguration(Class<?> systemPropertyBaseClass) {
this.systemPropertyBaseClass = systemPropertyBaseClass;
@@ -118,4 +121,23 @@ public abstract class AbstractDeploymentConfiguration implements
public Properties getInitParameters() {
return applicationProperties;
}
+
+ @Override
+ public Iterator<VaadinContextListener> getContextListeners() {
+ // Called once for init and once for destroy, so it's probably not worth
+ // the effort caching the ServiceLoader instance
+ ServiceLoader<VaadinContextListener> contextListenerLoader = ServiceLoader
+ .load(VaadinContextListener.class, getClassLoader());
+ return contextListenerLoader.iterator();
+ }
+
+ @Override
+ public void setVaadinContext(VaadinContext vaadinContext) {
+ this.vaadinContext = vaadinContext;
+ }
+
+ @Override
+ public VaadinContext getVaadinContext() {
+ return vaadinContext;
+ }
}
diff --git a/src/com/vaadin/terminal/gwt/server/VaadinContext.java b/src/com/vaadin/terminal/gwt/server/VaadinContext.java
new file mode 100644
index 0000000000..b55809a9da
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/server/VaadinContext.java
@@ -0,0 +1,46 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.server;
+
+import java.util.Iterator;
+
+import com.vaadin.event.EventRouter;
+import com.vaadin.terminal.DeploymentConfiguration;
+
+public class VaadinContext {
+ private final DeploymentConfiguration deploymentConfiguration;
+
+ private final EventRouter eventRouter = new EventRouter();
+
+ public VaadinContext(DeploymentConfiguration deploymentConfiguration) {
+ this.deploymentConfiguration = deploymentConfiguration;
+ deploymentConfiguration.setVaadinContext(this);
+ }
+
+ public DeploymentConfiguration getDeploymentConfiguration() {
+ return deploymentConfiguration;
+ }
+
+ public void init() {
+ VaadinContextEvent event = new VaadinContextEvent(this);
+ Iterator<VaadinContextListener> listeners = deploymentConfiguration
+ .getContextListeners();
+ while (listeners.hasNext()) {
+ VaadinContextListener listener = listeners.next();
+ listener.contextCreated(event);
+ }
+ }
+
+ public void destroy() {
+ VaadinContextEvent event = new VaadinContextEvent(this);
+ Iterator<VaadinContextListener> listeners = deploymentConfiguration
+ .getContextListeners();
+ while (listeners.hasNext()) {
+ VaadinContextListener listener = listeners.next();
+ listener.contextDestoryed(event);
+ }
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/server/VaadinContextEvent.java b/src/com/vaadin/terminal/gwt/server/VaadinContextEvent.java
new file mode 100644
index 0000000000..239490433c
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/server/VaadinContextEvent.java
@@ -0,0 +1,19 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.server;
+
+import java.util.EventObject;
+
+public class VaadinContextEvent extends EventObject {
+
+ public VaadinContextEvent(VaadinContext source) {
+ super(source);
+ }
+
+ public VaadinContext getVaadinContext() {
+ return (VaadinContext) getSource();
+ }
+
+}
diff --git a/src/com/vaadin/terminal/gwt/server/VaadinContextListener.java b/src/com/vaadin/terminal/gwt/server/VaadinContextListener.java
new file mode 100644
index 0000000000..5e379d9b91
--- /dev/null
+++ b/src/com/vaadin/terminal/gwt/server/VaadinContextListener.java
@@ -0,0 +1,13 @@
+/*
+@VaadinApache2LicenseForJavaFiles@
+ */
+
+package com.vaadin.terminal.gwt.server;
+
+import java.util.EventListener;
+
+public interface VaadinContextListener extends EventListener {
+ public void contextCreated(VaadinContextEvent event);
+
+ public void contextDestoryed(VaadinContextEvent event);
+}