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 }