View Javadoc

1   package com.atlassian.plugin.servlet.descriptors;
2   
3   import java.util.ArrayList;
4   import java.util.Collections;
5   import java.util.HashMap;
6   import java.util.LinkedList;
7   import java.util.List;
8   import java.util.Map;
9   
10  import javax.servlet.http.HttpServlet;
11  
12  import com.atlassian.plugin.Plugin;
13  import com.atlassian.plugin.module.PrefixDelegatingModuleFactory;
14  import com.atlassian.plugin.module.ModuleFactory;
15  import com.atlassian.plugin.module.PrefixModuleFactory;
16  import com.atlassian.plugin.servlet.ObjectFactories;
17  import com.atlassian.plugin.servlet.ObjectFactory;
18  import com.atlassian.plugin.servlet.PluginBuilder;
19  import com.atlassian.plugin.servlet.ServletModuleManager;
20  import com.mockobjects.dynamic.Mock;
21  
22  public class ServletModuleDescriptorBuilder
23  {
24      private Plugin plugin = new PluginBuilder().build();
25      private String key = "test.servlet";
26      private List<String> paths = new LinkedList<String>();
27      private ServletModuleManager servletModuleManager = (ServletModuleManager) new Mock(ServletModuleManager.class).proxy();
28      private Map<String, String> initParams = new HashMap<String, String>();
29      private ObjectFactory<HttpServlet> servletFactory;
30  
31      public ServletModuleDescriptorBuilder with(Plugin plugin)
32      {
33          this.plugin = plugin;
34          return this;
35      }
36      
37      public ServletModuleDescriptorBuilder withKey(String key)
38      {
39          this.key = key;
40          return this;
41      }
42  
43      public ServletModuleDescriptorBuilder with(final HttpServlet servlet)
44      {
45          this.servletFactory = ObjectFactories.createSingleton(servlet);
46          return this;
47      }
48  
49      public ServletModuleDescriptorBuilder withFactory(ObjectFactory<HttpServlet> servlet)
50      {
51          this.servletFactory = servlet;
52          return this;
53      }
54  
55      public ServletModuleDescriptorBuilder withPath(String path)
56      {
57          paths.add(path);
58          return this;
59      }
60  
61      public ServletModuleDescriptorBuilder with(ServletModuleManager servletModuleManager)
62      {
63          this.servletModuleManager = servletModuleManager;
64          return this;
65      }
66      
67      public ServletModuleDescriptorBuilder withInitParam(String name, String value)
68      {
69          initParams.put(name, value);
70          return this;
71      }
72  
73      public ServletModuleDescriptor build()
74      {
75          Descriptor d = new Descriptor(plugin, key, servletFactory, immutableList(paths), immutableMap(initParams),
76                  servletModuleManager, new PrefixDelegatingModuleFactory(Collections.<PrefixModuleFactory>emptySet()));
77          plugin.addModuleDescriptor(d);
78          return d;
79      }
80      
81      static <K, V> Map<K, V> immutableMap(Map<K, V> initParams)
82      {
83          return Collections.unmodifiableMap(new HashMap<K, V>(initParams));
84      }
85  
86      <T> List<T> immutableList(List<T> list)
87      {
88          List<T> copy = new ArrayList<T>(list.size());
89          copy.addAll(list);
90          return Collections.unmodifiableList(copy);
91      }
92      
93      static final class Descriptor extends ServletModuleDescriptor
94      {
95          final String key;
96          final ObjectFactory<HttpServlet> servletFactory;
97          final List<String> paths;
98          final ServletModuleManager servletModuleManager;
99          final Map<String, String> initParams;
100         
101         public Descriptor(
102             Plugin plugin,
103             String key,
104             ObjectFactory<HttpServlet> servletFactory,
105             List<String> paths,
106             Map<String, String> initParams,
107             ServletModuleManager servletModuleManager,
108             ModuleFactory moduleFactory)
109         {
110             super(moduleFactory, servletModuleManager);
111             this.plugin = plugin;
112             this.key = key;
113             this.servletFactory = servletFactory;
114             this.paths = paths;
115             this.initParams = initParams;
116             this.servletModuleManager = servletModuleManager;
117         }
118 
119         @Override
120         public Plugin getPlugin()
121         {
122             return plugin;
123         }
124         
125         @Override
126         public String getCompleteKey()
127         {
128             return getPluginKey() + ":" + key;
129         }
130 
131         @Override
132         public String getKey()
133         {
134             return key;
135         }
136 
137         @Override
138         public HttpServlet getModule()
139         {
140             return servletFactory.create();
141         }
142 
143 
144         @Override
145         public List<String> getPaths()
146         {
147             return paths;
148         }
149         
150         @Override
151         public Map<String, String> getInitParams()
152         {
153             return initParams;
154         }
155 
156     }
157 
158 }