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