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 }