View Javadoc

1   package com.atlassian.plugin.servlet.descriptors;
2   
3   import com.atlassian.plugin.Plugin;
4   import com.atlassian.plugin.module.PrefixDelegatingModuleFactory;
5   import com.atlassian.plugin.module.ModuleFactory;
6   import com.atlassian.plugin.module.PrefixModuleFactory;
7   import com.atlassian.plugin.servlet.ObjectFactories;
8   import com.atlassian.plugin.servlet.ObjectFactory;
9   import com.atlassian.plugin.servlet.PluginBuilder;
10  import com.atlassian.plugin.servlet.ServletModuleManager;
11  import com.atlassian.plugin.servlet.filter.FilterDispatcherCondition;
12  import com.atlassian.plugin.servlet.filter.FilterLocation;
13  import com.mockobjects.dynamic.Mock;
14  
15  import java.util.Collections;
16  import java.util.HashSet;
17  import java.util.LinkedList;
18  import java.util.List;
19  import java.util.Set;
20  import javax.servlet.Filter;
21  
22  import static com.atlassian.plugin.servlet.filter.FilterDispatcherCondition.REQUEST;
23  import static com.atlassian.plugin.servlet.filter.FilterTestUtils.immutableList;
24  
25  public class ServletFilterModuleDescriptorBuilder
26  {
27      private Plugin plugin = new PluginBuilder().build();
28      private String key = "test.servlet.context.listener";
29      private ObjectFactory<Filter> filterFactory;
30      private FilterLocation location = FilterLocation.BEFORE_DISPATCH;
31      private int weight = 100;
32      private List<String> paths = new LinkedList<String>();
33      private ServletModuleManager servletModuleManager = (ServletModuleManager) new Mock(ServletModuleManager.class).proxy();
34      private Set<FilterDispatcherCondition> dispatchers = new HashSet<FilterDispatcherCondition>();
35  
36      public ServletFilterModuleDescriptorBuilder with(Plugin plugin)
37      {
38          this.plugin = plugin;
39          return this;
40      }
41  
42      public ServletFilterModuleDescriptorBuilder withKey(String key)
43      {
44          this.key = key;
45          return this;
46      }
47  
48      public ServletFilterModuleDescriptorBuilder with(Filter filter)
49      {
50          this.filterFactory = ObjectFactories.createSingleton(filter);
51          return this;
52      }
53  
54      public ServletFilterModuleDescriptorBuilder withPath(String path)
55      {
56          paths.add(path);
57          return this;
58      }
59  
60      public ServletFilterModuleDescriptorBuilder with(ServletModuleManager servletModuleManager)
61      {
62          this.servletModuleManager = servletModuleManager;
63          return this;
64      }
65  
66      public ServletFilterModuleDescriptorBuilder at(FilterLocation location)
67      {
68          this.location = location;
69          return this;
70      }
71  
72      public ServletFilterModuleDescriptorBuilder withWeight(int weight)
73      {
74          this.weight = weight;
75          return this;
76      }
77  
78      public ServletFilterModuleDescriptorBuilder withFactory(ObjectFactory<Filter> mutable)
79      {
80          this.filterFactory = mutable;
81          return this;
82      }
83  
84      public ServletFilterModuleDescriptorBuilder withDispatcher(FilterDispatcherCondition dispatcher) {
85          dispatchers.add(dispatcher);
86          return this;
87      }
88  
89      public ServletFilterModuleDescriptor build()
90      {
91          return new Descriptor(plugin, key, filterFactory, location, weight, immutableList(paths), servletModuleManager,
92                  new PrefixDelegatingModuleFactory(Collections.<PrefixModuleFactory>emptySet()), dispatchers);
93      }
94  
95      static final class Descriptor extends ServletFilterModuleDescriptor
96      {
97          final String key;
98          final ObjectFactory<Filter> filterFactory;
99          final List<String> paths;
100         final FilterLocation location;
101         final int weight;
102         final ServletModuleManager servletModuleManager;
103         final Set<FilterDispatcherCondition> dispatchers;
104 
105         public Descriptor(
106             Plugin plugin,
107             String key,
108             ObjectFactory<Filter> filterFactory,
109             FilterLocation location,
110             int weight,
111             List<String> paths,
112             ServletModuleManager servletModuleManager,
113             ModuleFactory moduleFactory,
114             Set<FilterDispatcherCondition> dispatchers)
115         {
116             super(moduleFactory, servletModuleManager);
117             this.plugin = plugin;
118             this.key = key;
119             this.filterFactory = filterFactory;
120             this.location = location;
121             this.weight = weight;
122             this.paths = paths;
123             this.servletModuleManager = servletModuleManager;
124             this.dispatchers = dispatchers;
125             if (dispatchers.isEmpty()) { // PLUG-530 - set of dispatcherConditions defaults to {REQUEST}
126                 dispatchers.add(REQUEST);
127             }
128         }
129 
130         @Override
131         public Plugin getPlugin()
132         {
133             return plugin;
134         }
135 
136         @Override
137         public String getCompleteKey()
138         {
139             return getPluginKey() + ":" + key;
140         }
141 
142         @Override
143         public String getKey()
144         {
145             return key;
146         }
147 
148         @Override
149         public Filter getModule()
150         {
151             return filterFactory.create();
152         }
153 
154         @Override
155         public FilterLocation getLocation()
156         {
157             return location;
158         }
159 
160         @Override
161         public int getWeight()
162         {
163             return weight;
164         }
165 
166         @Override
167         public List<String> getPaths()
168         {
169             return paths;
170         }
171 
172         @Override
173         public Set<FilterDispatcherCondition> getDispatcherConditions()
174         {
175             return dispatchers;
176         }
177     }
178 
179 }