diff options
Diffstat (limited to 'src')
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); +} |