@@ -190,12 +190,11 @@ public final class Extension {
if (null == manifest) {
if (null == manifest) {
return new Extension[0];
return new Extension[0];
}
}
return Stream
.concat(Optional.ofNullable(manifest.getMainAttributes())
.map(Stream::of).orElse(Stream.empty()),
return Stream.concat(Optional.ofNullable(manifest.getMainAttributes())
.map(Stream::of).orElse(Stream.empty()),
manifest.getEntries().values().stream())
manifest.getEntries().values().stream())
.map(attrs -> getExtension("", attrs)).filter(Objects::nonNull)
.toArray(Extension[]::new);
.map(attrs -> getExtension("", attrs)).filter(Objects::nonNull)
.toArray(Extension[]::new);
}
}
/**
/**
@@ -255,15 +254,13 @@ public final class Extension {
specificationVendor);
specificationVendor);
}
}
final DeweyDecimal specificationVersion
= extension.getSpecificationVersion();
final DeweyDecimal specificationVersion = extension.getSpecificationVersion();
if (null != specificationVersion) {
if (null != specificationVersion) {
attributes.putValue(prefix + SPECIFICATION_VERSION,
attributes.putValue(prefix + SPECIFICATION_VERSION,
specificationVersion.toString());
specificationVersion.toString());
}
}
final String implementationVendorID
= extension.getImplementationVendorID();
final String implementationVendorID = extension.getImplementationVendorID();
if (null != implementationVendorID) {
if (null != implementationVendorID) {
attributes.putValue(prefix + IMPLEMENTATION_VENDOR_ID,
attributes.putValue(prefix + IMPLEMENTATION_VENDOR_ID,
implementationVendorID);
implementationVendorID);
@@ -275,8 +272,7 @@ public final class Extension {
implementationVendor);
implementationVendor);
}
}
final DeweyDecimal implementationVersion
= extension.getImplementationVersion();
final DeweyDecimal implementationVersion = extension.getImplementationVersion();
if (null != implementationVersion) {
if (null != implementationVersion) {
attributes.putValue(prefix + IMPLEMENTATION_VERSION,
attributes.putValue(prefix + IMPLEMENTATION_VERSION,
implementationVersion.toString());
implementationVersion.toString());
@@ -314,8 +310,7 @@ public final class Extension {
if (null != specificationVersion) {
if (null != specificationVersion) {
try {
try {
this.specificationVersion
= new DeweyDecimal(specificationVersion);
this.specificationVersion = new DeweyDecimal(specificationVersion);
} catch (final NumberFormatException nfe) {
} catch (final NumberFormatException nfe) {
final String error = "Bad specification version format '"
final String error = "Bad specification version format '"
+ specificationVersion + "' in '" + extensionName
+ specificationVersion + "' in '" + extensionName
@@ -423,33 +418,24 @@ public final class Extension {
}
}
// Available specification version must be >= required
// Available specification version must be >= required
final DeweyDecimal requiredSpecificationVersion
= required.getSpecificationVersion();
if (null != requiredSpecificationVersion) {
if (null == specificationVersion
|| !isCompatible(specificationVersion, requiredSpecificationVersion)) {
return REQUIRE_SPECIFICATION_UPGRADE;
}
final DeweyDecimal requiredSpecificationVersion = required.getSpecificationVersion();
if (null != requiredSpecificationVersion && (null == specificationVersion
|| !isCompatible(specificationVersion, requiredSpecificationVersion))) {
return REQUIRE_SPECIFICATION_UPGRADE;
}
}
// Implementation Vendor ID must match
// Implementation Vendor ID must match
final String requiredImplementationVendorID
= required.getImplementationVendorID();
if (null != requiredImplementationVendorID) {
if (null == implementationVendorID
|| !implementationVendorID.equals(requiredImplementationVendorID)) {
return REQUIRE_VENDOR_SWITCH;
}
final String requiredImplementationVendorID = required.getImplementationVendorID();
if (null != requiredImplementationVendorID && (null == implementationVendorID
|| !implementationVendorID.equals(requiredImplementationVendorID))) {
return REQUIRE_VENDOR_SWITCH;
}
}
// Implementation version must be >= required
// Implementation version must be >= required
final DeweyDecimal requiredImplementationVersion
= required.getImplementationVersion();
if (null != requiredImplementationVersion) {
if (null == implementationVersion
|| !isCompatible(implementationVersion, requiredImplementationVersion)) {
return REQUIRE_IMPLEMENTATION_UPGRADE;
}
final DeweyDecimal requiredImplementationVersion = required.getImplementationVersion();
if (null != requiredImplementationVersion && (null == implementationVersion
|| !isCompatible(implementationVersion, requiredImplementationVersion))) {
return REQUIRE_IMPLEMENTATION_UPGRADE;
}
}
// This available optional package satisfies the requirements
// This available optional package satisfies the requirements
@@ -516,8 +502,7 @@ public final class Extension {
* @param first First version number (dotted decimal)
* @param first First version number (dotted decimal)
* @param second Second version number (dotted decimal)
* @param second Second version number (dotted decimal)
*/
*/
private boolean isCompatible(final DeweyDecimal first,
final DeweyDecimal second) {
private boolean isCompatible(final DeweyDecimal first, final DeweyDecimal second) {
return first.isGreaterThanOrEqual(second);
return first.isGreaterThanOrEqual(second);
}
}
@@ -530,8 +515,7 @@ public final class Extension {
* EXTENSION_LIST or OPTIONAL_EXTENSION_LIST)
* EXTENSION_LIST or OPTIONAL_EXTENSION_LIST)
* @return the list of listed extensions
* @return the list of listed extensions
*/
*/
private static Extension[] getListed(final Manifest manifest,
final Attributes.Name listKey) {
private static Extension[] getListed(final Manifest manifest, final Attributes.Name listKey) {
final List<Extension> results = new ArrayList<>();
final List<Extension> results = new ArrayList<>();
final Attributes mainAttributes = manifest.getMainAttributes();
final Attributes mainAttributes = manifest.getMainAttributes();
@@ -576,8 +560,7 @@ public final class Extension {
* @param onToken the token
* @param onToken the token
* @return the resultant array
* @return the resultant array
*/
*/
private static String[] split(final String string,
final String onToken) {
private static String[] split(final String string, final String onToken) {
final StringTokenizer tokenizer = new StringTokenizer(string, onToken);
final StringTokenizer tokenizer = new StringTokenizer(string, onToken);
final String[] result = new String[tokenizer.countTokens()];
final String[] result = new String[tokenizer.countTokens()];
@@ -600,8 +583,7 @@ public final class Extension {
* @param attributes Attributes to searched
* @param attributes Attributes to searched
* @return the new Extension object, or null
* @return the new Extension object, or null
*/
*/
private static Extension getExtension(final String prefix,
final Attributes attributes) {
private static Extension getExtension(final String prefix, final Attributes attributes) {
//WARNING: We trim the values of all the attributes because
//WARNING: We trim the values of all the attributes because
//Some extension declarations are badly defined (ie have spaces
//Some extension declarations are badly defined (ie have spaces
//after version or vendorID)
//after version or vendorID)