View Javadoc

1   package org.ehoffman.testing.module.webapp;
2   
3   import java.net.URL;
4   import java.util.HashMap;
5   import java.util.Map;
6   
7   import org.ehoffman.module.Module;
8   import org.ehoffman.webapp.invoker.ApplicationUtil;
9   
10  public abstract class WebAppModule implements Module<Application> {
11  
12    private static Map<Class<? extends WebAppModule>, JettyApplication> jettyApplicationMap = new HashMap<Class<? extends WebAppModule>, WebAppModule.JettyApplication>();
13  
14    public abstract String getWebAppName();
15  
16    @Override
17    public String getModuleType() {
18      return getWebAppName();
19    }
20  
21    @Override
22    public Class<? extends Application> getTargetClass() {
23      return Application.class;
24    }
25  
26    @Override
27    public Map<String, Class<?>> getDependencyDefinition() {
28      return null;
29    }
30  
31    private static class JettyApplication implements Application {
32      private final org.ehoffman.webapp.invoker.Application application;
33  
34      protected JettyApplication(org.ehoffman.webapp.invoker.Application application){
35        this.application = application;
36        this.application.start();
37      }
38  
39      @Override
40      public URL getSecureRootUrl() {
41        return this.application.getSecureRootUrl();
42      }
43  
44      @Override
45      public URL getDefaultRootUrl() {
46        return this.application.getDefaultRootUrl();
47      }
48  
49      @Override
50      public String getName() {
51        return this.application.getContextRoot();
52      }
53  
54      public void shutdown(){
55        this.application.shutdown();
56      }
57  
58    }
59  
60    @Override
61    public Application create(Map<String, ?> dependencies) {
62      JettyApplication jettyApplication = new JettyApplication(ApplicationUtil.discoverApplicationByName(getWebAppName()));
63      jettyApplicationMap.put(this.getClass(), jettyApplication);
64      return jettyApplication;
65    }
66  
67    @Override
68    public void destroy() {
69      JettyApplication application =jettyApplicationMap.get(this.getClass());
70      if (application != null){
71        application.shutdown();
72      }
73    }
74  
75  }