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