1 package com.atlassian.plugin.main;
2
3 import static java.util.Collections.unmodifiableList;
4 import static java.util.Collections.unmodifiableMap;
5
6 import com.atlassian.plugin.osgi.container.PackageScannerConfiguration;
7 import com.atlassian.plugin.osgi.container.impl.DefaultPackageScannerConfiguration;
8
9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.HashMap;
12 import java.util.List;
13 import java.util.Map;
14
15 import javax.servlet.ServletContext;
16
17
18
19
20
21
22
23
24
25 public class PackageScannerConfigurationBuilder
26 {
27
28
29
30
31 public static PackageScannerConfigurationBuilder packageScannerConfiguration()
32 {
33 return new PackageScannerConfigurationBuilder();
34 }
35
36 private String hostVersion;
37 private final List<String> jarIncludes = new ArrayList<String>();
38 private final List<String> jarExcludes = new ArrayList<String>();
39 private final List<String> packageIncludes = new ArrayList<String>();
40 private final List<String> packageExcludes = new ArrayList<String>();
41 private final Map<String, String> packageVersions = new HashMap<String, String>();
42 private ServletContext servletContext;
43
44
45
46
47 public PackageScannerConfigurationBuilder()
48 {
49 copy(new DefaultPackageScannerConfiguration());
50 }
51
52
53
54
55
56
57 public PackageScannerConfigurationBuilder(final PackageScannerConfiguration packageScannerConfiguration)
58 {
59 copy(packageScannerConfiguration);
60 }
61
62 private void copy(final PackageScannerConfiguration config)
63 {
64 hostVersion = config.getCurrentHostVersion();
65 packageIncludes.addAll(config.getPackageIncludes());
66 packageExcludes.addAll(config.getPackageExcludes());
67 jarIncludes.addAll(config.getJarIncludes());
68 jarExcludes.addAll(config.getJarExcludes());
69 packageVersions.putAll(config.getPackageVersions());
70 servletContext = config.getServletContext();
71 }
72
73
74
75
76
77
78
79
80 public PackageScannerConfigurationBuilder hostVersion(final String... pkgs)
81 {
82 packageIncludes.addAll(Arrays.asList(pkgs));
83 return this;
84 }
85
86
87
88
89
90
91
92
93 public PackageScannerConfigurationBuilder servletContext(final ServletContext servletContext)
94 {
95 this.servletContext = servletContext;
96 return this;
97 }
98
99
100
101
102
103
104
105
106 public PackageScannerConfigurationBuilder packagesToInclude(final String... pkgs)
107 {
108 packageIncludes.addAll(Arrays.asList(pkgs));
109 return this;
110 }
111
112
113
114
115
116
117
118
119 public PackageScannerConfigurationBuilder packagesToExclude(final String... pkgs)
120 {
121 packageExcludes.addAll(Arrays.asList(pkgs));
122 return this;
123 }
124
125
126
127
128
129
130
131
132
133 public PackageScannerConfigurationBuilder packagesVersions(final Map<String, String> packageToVersion)
134 {
135 packageVersions.putAll(packageToVersion);
136 return this;
137 }
138
139
140
141
142
143
144
145
146 public PackageScannerConfigurationBuilder jarsToInclude(final String... jars)
147 {
148 jarIncludes.addAll(Arrays.asList(jars));
149 return this;
150 }
151
152
153
154
155
156
157
158
159 public PackageScannerConfigurationBuilder jarsToExclude(final String... jars)
160 {
161 jarExcludes.addAll(Arrays.asList(jars));
162 return this;
163 }
164
165
166
167
168
169
170
171 public PackageScannerConfiguration build()
172 {
173 return new ImmutablePackageScannerConfiguration(this);
174 }
175
176
177
178
179
180
181
182
183
184 private static final class ImmutablePackageScannerConfiguration implements PackageScannerConfiguration
185 {
186 private final String hostVersion;
187 private final List<String> jarIncludes;
188 private final List<String> jarExcludes;
189 private final List<String> packageIncludes;
190 private final List<String> packageExcludes;
191 private final Map<String, String> packageVersions;
192 private final ServletContext servletContext;
193
194 ImmutablePackageScannerConfiguration(final PackageScannerConfigurationBuilder builder)
195 {
196 hostVersion = builder.hostVersion;
197 jarIncludes = unmodifiableList(new ArrayList<String>(builder.jarIncludes));
198 jarExcludes = unmodifiableList(new ArrayList<String>(builder.jarExcludes));
199 packageIncludes = unmodifiableList(new ArrayList<String>(builder.packageIncludes));
200 packageExcludes = unmodifiableList(new ArrayList<String>(builder.packageExcludes));
201 packageVersions = unmodifiableMap(new HashMap<String, String>(builder.packageVersions));
202 servletContext = builder.servletContext;
203 }
204
205 public List<String> getJarIncludes()
206 {
207 return jarIncludes;
208 }
209
210 public List<String> getJarExcludes()
211 {
212 return jarExcludes;
213 }
214
215 public List<String> getPackageIncludes()
216 {
217 return packageIncludes;
218 }
219
220 public List<String> getPackageExcludes()
221 {
222 return packageExcludes;
223 }
224
225 public Map<String, String> getPackageVersions()
226 {
227 return packageVersions;
228 }
229
230 public String getCurrentHostVersion()
231 {
232 return hostVersion;
233 }
234
235 public ServletContext getServletContext()
236 {
237 return servletContext;
238 }
239 }
240 }