Lines 17-23
Link Here
|
17 |
package org.apache.catalina.util; |
17 |
package org.apache.catalina.util; |
18 |
|
18 |
|
19 |
import java.util.ArrayList; |
19 |
import java.util.ArrayList; |
|
|
20 |
import java.util.HashSet; |
20 |
import java.util.Iterator; |
21 |
import java.util.Iterator; |
|
|
22 |
import java.util.Objects; |
23 |
import java.util.Set; |
21 |
import java.util.jar.Attributes; |
24 |
import java.util.jar.Attributes; |
22 |
import java.util.jar.Manifest; |
25 |
import java.util.jar.Manifest; |
23 |
|
26 |
|
Lines 37-44
Link Here
|
37 |
public static final int WAR = 2; |
40 |
public static final int WAR = 2; |
38 |
public static final int APPLICATION = 3; |
41 |
public static final int APPLICATION = 3; |
39 |
|
42 |
|
40 |
private ArrayList<Extension> availableExtensions = null; |
43 |
private Set<Extension> availableExtensions = null; |
41 |
private ArrayList<Extension> requiredExtensions = null; |
44 |
private Set<Extension> requiredExtensions = null; |
42 |
|
45 |
|
43 |
private final String resourceName; |
46 |
private final String resourceName; |
44 |
private final int resourceType; |
47 |
private final int resourceType; |
Lines 64-70
Link Here
|
64 |
* |
67 |
* |
65 |
* @return List of available extensions |
68 |
* @return List of available extensions |
66 |
*/ |
69 |
*/ |
67 |
public ArrayList<Extension> getAvailableExtensions() { |
70 |
public Set<Extension> getAvailableExtensions() { |
68 |
return availableExtensions; |
71 |
return availableExtensions; |
69 |
} |
72 |
} |
70 |
|
73 |
|
Lines 73-79
Link Here
|
73 |
* |
76 |
* |
74 |
* @return List of required extensions |
77 |
* @return List of required extensions |
75 |
*/ |
78 |
*/ |
76 |
public ArrayList<Extension> getRequiredExtensions() { |
79 |
public Set<Extension> getRequiredExtensions() { |
77 |
return requiredExtensions; |
80 |
return requiredExtensions; |
78 |
} |
81 |
} |
79 |
|
82 |
|
Lines 136-142
Link Here
|
136 |
return (sb.toString()); |
139 |
return (sb.toString()); |
137 |
} |
140 |
} |
138 |
|
141 |
|
|
|
142 |
@Override |
143 |
public boolean equals(Object o) { |
144 |
if (this == o) return true; |
145 |
if (!(o instanceof ManifestResource)) return false; |
146 |
ManifestResource that = (ManifestResource) o; |
147 |
return Objects.equals(availableExtensions, that.availableExtensions) && |
148 |
Objects.equals(requiredExtensions, that.requiredExtensions) && |
149 |
Objects.equals(resourceName, that.resourceName) && |
150 |
resourceType == that.resourceType; |
151 |
} |
139 |
|
152 |
|
|
|
153 |
@Override |
154 |
public int hashCode() { |
155 |
return Objects.hash(availableExtensions, requiredExtensions, resourceName, resourceType); |
156 |
} |
157 |
|
158 |
|
140 |
// -------------------------------------------------------- Private Methods |
159 |
// -------------------------------------------------------- Private Methods |
141 |
|
160 |
|
142 |
private void processManifest(Manifest manifest) { |
161 |
private void processManifest(Manifest manifest) { |
Lines 154-160
Link Here
|
154 |
* @return List of required extensions, or null if the application |
173 |
* @return List of required extensions, or null if the application |
155 |
* does not require any extensions |
174 |
* does not require any extensions |
156 |
*/ |
175 |
*/ |
157 |
private ArrayList<Extension> getRequiredExtensions(Manifest manifest) { |
176 |
private Set<Extension> getRequiredExtensions(Manifest manifest) { |
158 |
|
177 |
|
159 |
Attributes attributes = manifest.getMainAttributes(); |
178 |
Attributes attributes = manifest.getMainAttributes(); |
160 |
String names = attributes.getValue("Extension-List"); |
179 |
String names = attributes.getValue("Extension-List"); |
Lines 161-167
Link Here
|
161 |
if (names == null) |
180 |
if (names == null) |
162 |
return null; |
181 |
return null; |
163 |
|
182 |
|
164 |
ArrayList<Extension> extensionList = new ArrayList<>(); |
183 |
Set<Extension> extensionList = new HashSet<>(); |
165 |
names += " "; |
184 |
names += " "; |
166 |
|
185 |
|
167 |
while (true) { |
186 |
while (true) { |
Lines 201-207
Link Here
|
201 |
* @return List of available extensions, or null if the web application |
220 |
* @return List of available extensions, or null if the web application |
202 |
* does not bundle any extensions |
221 |
* does not bundle any extensions |
203 |
*/ |
222 |
*/ |
204 |
private ArrayList<Extension> getAvailableExtensions(Manifest manifest) { |
223 |
private Set<Extension> getAvailableExtensions(Manifest manifest) { |
205 |
|
224 |
|
206 |
Attributes attributes = manifest.getMainAttributes(); |
225 |
Attributes attributes = manifest.getMainAttributes(); |
207 |
String name = attributes.getValue("Extension-Name"); |
226 |
String name = attributes.getValue("Extension-Name"); |
Lines 208-214
Link Here
|
208 |
if (name == null) |
227 |
if (name == null) |
209 |
return null; |
228 |
return null; |
210 |
|
229 |
|
211 |
ArrayList<Extension> extensionList = new ArrayList<>(); |
230 |
Set<Extension> extensionList = new HashSet<>(); |
212 |
|
231 |
|
213 |
Extension extension = new Extension(); |
232 |
Extension extension = new Extension(); |
214 |
extension.setExtensionName(name); |
233 |
extension.setExtensionName(name); |