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()) {
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 }