1 9 10 package org.nanocontainer.webcontainer.groovy; 11 12 import groovy.util.NodeBuilder; 13 14 import java.util.Map ; 15 16 import org.mortbay.jetty.servlet.FilterHolder; 17 import org.mortbay.jetty.servlet.ServletHolder; 18 import org.nanocontainer.webcontainer.PicoContextHandler; 19 import org.nanocontainer.webcontainer.groovy.adapters.WaffleAdapter; 20 import org.picocontainer.MutablePicoContainer; 21 22 import javax.servlet.Servlet ; 23 24 public class ContextBuilder extends NodeBuilder { 25 private final MutablePicoContainer parentContainer; 26 private final PicoContextHandler context; 27 28 public ContextBuilder(MutablePicoContainer parentContainer, PicoContextHandler context) { 29 this.parentContainer = parentContainer; 30 this.context = context; 31 } 32 protected Object createNode(Object name, Map map) { 33 if (name.equals("filter")) { 34 return makeFilter(map); 35 } else if (name.equals("servlet")) { 36 return makeServlet(map); 37 } else if (name.equals("listener")) { 38 return makeListener(map); 39 } else if (name.equals("staticContent")) { 40 setStaticContent(map); 41 return null; 42 } else if (name.equals("waffleApp")) { 43 return new WaffleAdapter(context, parentContainer, map).getNodeBuilder(); 44 } 45 46 return null; 47 } 48 49 private void setStaticContent(Map map) { 50 51 if (map.containsKey("welcomePage")) { 52 context.setStaticContext((String ) map.remove("path"), (String ) map.remove("welcomePage")); 53 } else { 54 context.setStaticContext((String ) map.remove("path")); 55 56 } 57 58 } 59 60 private Object makeListener(Map map) { 61 return context.addListener((Class ) map.remove("class")); 62 } 63 64 private Object makeServlet(Map map) { 65 66 67 if (map.containsKey("class")) { 68 ServletHolder servlet = context.addServletWithMapping( 69 (Class ) map.remove("class"), 70 (String ) map.remove("path")); 71 return new ServletHolderBuilder(servlet); 72 } else { 73 Servlet servlet = (Servlet ) map.remove("instance"); 74 context.addServletWithMapping( 75 servlet, 76 (String ) map.remove("path")); 77 return servlet; 78 } 79 80 } 81 82 private Object makeFilter(Map map) { 83 FilterHolder filter = context.addFilterWithMapping( 84 (Class ) map.remove("class"), 85 (String ) map.remove("path"), 86 extractDispatchers(map)); 87 FilterHolderBuilder builder = new FilterHolderBuilder(filter); 88 return builder; 89 } 90 91 private int extractDispatchers(Map map) { 92 Object dispatchers = map.remove("dispatchers"); 93 if ( dispatchers != null ){ 94 return ((Integer ) dispatchers).intValue(); 95 } 96 return 0; 98 } 99 100 } | Popular Tags |