KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > nanocontainer > webcontainer > groovy > ContextBuilder


1 /*****************************************************************************
2  * Copyright (C) NanoContainer Organization. All rights reserved. *
3  * ------------------------------------------------------------------------- *
4  * The software in this package is published under the terms of the BSD *
5  * style license a copy of which has been included with this distribution in *
6  * the LICENSE.txt file. *
7  * *
8  *****************************************************************************/

9
10 package org.nanocontainer.webcontainer.groovy;
11
12 import groovy.util.NodeBuilder;
13
14 import java.util.Map JavaDoc;
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 JavaDoc;
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 JavaDoc createNode(Object JavaDoc name, Map JavaDoc 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 JavaDoc map) {
50
51         if (map.containsKey("welcomePage")) {
52             context.setStaticContext((String JavaDoc) map.remove("path"), (String JavaDoc) map.remove("welcomePage"));
53         } else {
54             context.setStaticContext((String JavaDoc) map.remove("path"));
55
56         }
57
58     }
59
60     private Object JavaDoc makeListener(Map JavaDoc map) {
61         return context.addListener((Class JavaDoc) map.remove("class"));
62     }
63
64     private Object JavaDoc makeServlet(Map JavaDoc map) {
65
66
67         if (map.containsKey("class")) {
68             ServletHolder servlet = context.addServletWithMapping(
69                     (Class JavaDoc) map.remove("class"),
70                     (String JavaDoc) map.remove("path"));
71             return new ServletHolderBuilder(servlet);
72         } else {
73             Servlet JavaDoc servlet = (Servlet JavaDoc) map.remove("instance");
74             context.addServletWithMapping(
75                     servlet,
76                     (String JavaDoc) map.remove("path"));
77             return servlet;
78         }
79
80     }
81
82     private Object JavaDoc makeFilter(Map JavaDoc map) {
83         FilterHolder filter = context.addFilterWithMapping(
84                 (Class JavaDoc) map.remove("class"),
85                 (String JavaDoc) map.remove("path"),
86                 extractDispatchers(map));
87         FilterHolderBuilder builder = new FilterHolderBuilder(filter);
88         return builder;
89     }
90
91     private int extractDispatchers(Map JavaDoc map) {
92         Object JavaDoc dispatchers = map.remove("dispatchers");
93         if ( dispatchers != null ){
94           return ((Integer JavaDoc) dispatchers).intValue();
95         }
96         // default value
97
return 0;
98     }
99
100     }
Popular Tags