View Javadoc
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 }