From: <jbo...@li...> - 2005-12-31 17:01:29
|
Author: rem...@jb... Date: 2005-12-31 12:01:25 -0500 (Sat, 31 Dec 2005) New Revision: 1968 Modified: trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/Extension.java trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ExtensionValidator.java trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ManifestResource.java Log: - Patch for 37854. Modified: trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/Extension.java =================================================================== --- trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/Extension.java 2005-12-31 17:00:32 UTC (rev 1967) +++ trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/Extension.java 2005-12-31 17:01:25 UTC (rev 1968) @@ -40,7 +40,7 @@ * @author Craig McClanahan * @author Justyna Horwat * @author Greg Murray - * @version $Revision: 302726 $ $Date: 2004-02-27 15:59:07 +0100 (ven., 27 févr. 2004) $ + * @version $Revision: 360278 $ $Date: 2005-12-31 14:26:41 +0100 (sam., 31 déc. 2005) $ */ public final class Extension { @@ -64,14 +64,6 @@ } /** - * UniqueId created by combining the extension name and implementation - * version. - */ - public String getUniqueId() { - return this.extensionName + this.implementationVersion; - } - - /** * The URL from which the most recent version of this optional package * can be obtained if it is not already installed. */ @@ -194,19 +186,28 @@ if (!extensionName.equals(required.getExtensionName())) return (false); - // Available specification version must be >= required - if (!isNewer(specificationVersion, required.getSpecificationVersion())) - return (false); + // If specified, available specification version must be >= required + if (required.getSpecificationVersion() != null) { + if (!isNewer(specificationVersion, + required.getSpecificationVersion())) + return (false); + } - // Implementation Vendor ID must match - if (implementationVendorId == null) - return (false); - if (!implementationVendorId.equals(required.getImplementationVendorId())) - return (false); + // If specified, Implementation Vendor ID must match + if (required.getImplementationVendorId() != null) { + if (implementationVendorId == null) + return (false); + if (!implementationVendorId.equals(required + .getImplementationVendorId())) + return (false); + } - // Implementation version must be >= required - if (!isNewer(implementationVersion, required.getImplementationVersion())) - return (false); + // If specified, Implementation version must be >= required + if (required.getImplementationVersion() != null) { + if (!isNewer(implementationVersion, + required.getImplementationVersion())) + return (false); + } // This available optional package satisfies the requirements return (true); Modified: trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ExtensionValidator.java =================================================================== --- trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ExtensionValidator.java 2005-12-31 17:00:32 UTC (rev 1967) +++ trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ExtensionValidator.java 2005-12-31 17:01:25 UTC (rev 1968) @@ -21,10 +21,8 @@ import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; -import java.util.HashMap; import java.util.Iterator; import java.util.NoSuchElementException; -import java.util.ResourceBundle; import java.util.StringTokenizer; import java.util.jar.JarInputStream; import java.util.jar.Manifest; @@ -48,7 +46,7 @@ * * @author Greg Murray * @author Justyna Horwat - * @version $Revision: 302840 $ $Date: 2004-04-16 13:01:11 +0200 (ven., 16 avr. 2004) $ + * @version $Revision: 360278 $ $Date: 2005-12-31 14:26:41 +0100 (sam., 31 déc. 2005) $ * */ public final class ExtensionValidator { @@ -62,9 +60,8 @@ private static StringManager sm = StringManager.getManager("org.apache.catalina.util"); - private static HashMap containerAvailableExtensions = null; + private static ArrayList containerAvailableExtensions = null; private static ArrayList containerManifestResources = new ArrayList(); - private static ResourceBundle messages = null; // ----------------------------------------------------- Static Initializer @@ -136,7 +133,6 @@ String appName = context.getPath(); ArrayList appManifestResources = new ArrayList(); - ManifestResource appManifestResource = null; // If the application context is null it does not exist and // therefore is not valid if (dirContext == null) return false; @@ -246,7 +242,7 @@ ArrayList resources) { boolean passes = true; int failureCount = 0; - HashMap availableExtensions = null; + ArrayList availableExtensions = null; Iterator it = resources.iterator(); while (it.hasNext()) { @@ -258,38 +254,46 @@ // build the list of available extensions if necessary if (availableExtensions == null) { - availableExtensions = buildAvailableExtensionsMap(resources); + availableExtensions = buildAvailableExtensionsList(resources); } // load the container level resource map if it has not been built // yet if (containerAvailableExtensions == null) { containerAvailableExtensions - = buildAvailableExtensionsMap(containerManifestResources); + = buildAvailableExtensionsList(containerManifestResources); } // iterate through the list of required extensions Iterator rit = requiredList.iterator(); while (rit.hasNext()) { + boolean found = false; Extension requiredExt = (Extension)rit.next(); - String extId = requiredExt.getUniqueId(); // check the applicaion itself for the extension - if (availableExtensions != null - && availableExtensions.containsKey(extId)) { - Extension targetExt = (Extension) - availableExtensions.get(extId); - if (targetExt.isCompatibleWith(requiredExt)) { - requiredExt.setFulfilled(true); - } + if (availableExtensions != null) { + Iterator ait = availableExtensions.iterator(); + while (ait.hasNext()) { + Extension targetExt = (Extension) ait.next(); + if (targetExt.isCompatibleWith(requiredExt)) { + requiredExt.setFulfilled(true); + found = true; + break; + } + } + } // check the container level list for the extension - } else if (containerAvailableExtensions != null - && containerAvailableExtensions.containsKey(extId)) { - Extension targetExt = (Extension) - containerAvailableExtensions.get(extId); - if (targetExt.isCompatibleWith(requiredExt)) { - requiredExt.setFulfilled(true); - } - } else { + if (!found && containerAvailableExtensions != null) { + Iterator cit = containerAvailableExtensions.iterator(); + while (cit.hasNext()) { + Extension targetExt = (Extension) cit.next(); + if (targetExt.isCompatibleWith(requiredExt)) { + requiredExt.setFulfilled(true); + found = true; + break; + } + } + } + if (!found) { // Failure log.info(sm.getString( "extensionValidator.extension-not-found-error", @@ -327,29 +331,29 @@ * * @return HashMap Map of available extensions */ - private static HashMap buildAvailableExtensionsMap(ArrayList resources) { + private static ArrayList buildAvailableExtensionsList(ArrayList resources) { - HashMap availableMap = null; + ArrayList availableList = null; Iterator it = resources.iterator(); while (it.hasNext()) { ManifestResource mre = (ManifestResource)it.next(); - HashMap map = mre.getAvailableExtensions(); - if (map != null) { - Iterator values = map.values().iterator(); + ArrayList list = mre.getAvailableExtensions(); + if (list != null) { + Iterator values = list.iterator(); while (values.hasNext()) { Extension ext = (Extension) values.next(); - if (availableMap == null) { - availableMap = new HashMap(); - availableMap.put(ext.getUniqueId(), ext); - } else if (!availableMap.containsKey(ext.getUniqueId())) { - availableMap.put(ext.getUniqueId(), ext); + if (availableList == null) { + availableList = new ArrayList(); + availableList.add(ext); + } else { + availableList.add(ext); } } } } - return availableMap; + return availableList; } /** Modified: trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ManifestResource.java =================================================================== --- trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ManifestResource.java 2005-12-31 17:00:32 UTC (rev 1967) +++ trunk/labs/jbossweb/src/share/classes/org/apache/catalina/util/ManifestResource.java 2005-12-31 17:01:25 UTC (rev 1968) @@ -15,7 +15,6 @@ */ package org.apache.catalina.util; -import java.util.HashMap; import java.util.Iterator; import java.util.jar.Manifest; import java.util.jar.Attributes; @@ -27,7 +26,7 @@ * * @author Greg Murray * @author Justyna Horwat - * @version $Revision: 302726 $ $Date: 2004-02-27 15:59:07 +0100 (ven., 27 févr. 2004) $ + * @version $Revision: 360278 $ $Date: 2005-12-31 14:26:41 +0100 (sam., 31 déc. 2005) $ * */ public class ManifestResource { @@ -39,7 +38,7 @@ public static final int WAR = 2; public static final int APPLICATION = 3; - private HashMap availableExtensions = null; + private ArrayList availableExtensions = null; private ArrayList requiredExtensions = null; private String resourceName = null; @@ -62,11 +61,11 @@ } /** - * Gets the map of available extensions + * Gets the list of available extensions * - * @return Map of available extensions + * @return List of available extensions */ - public HashMap getAvailableExtensions() { + public ArrayList getAvailableExtensions() { return availableExtensions; } @@ -110,19 +109,6 @@ } /** - * Convienience method to check if this <code>ManifestResource</code> - * has an extension available. - * - * @param key extension identifier - * - * @return true if extension available - */ - public boolean containsExtension(String key) { - return (availableExtensions != null) ? - availableExtensions.containsKey(key) : false; - } - - /** * Returns <code>true</code> if all required extension dependencies * have been meet for this <code>ManifestResource</code> object. * @@ -222,17 +208,17 @@ * * @param manifest Manifest to be parsed * - * @return Map of available extensions, or null if the web application + * @return List of available extensions, or null if the web application * does not bundle any extensions */ - private HashMap getAvailableExtensions(Manifest manifest) { + private ArrayList getAvailableExtensions(Manifest manifest) { Attributes attributes = manifest.getMainAttributes(); String name = attributes.getValue("Extension-Name"); if (name == null) return null; - HashMap extensionMap = new HashMap(); + ArrayList extensionList = new ArrayList(); Extension extension = new Extension(); extension.setExtensionName(name); @@ -247,11 +233,9 @@ extension.setSpecificationVersion( attributes.getValue("Specification-Version")); - if (!extensionMap.containsKey(extension.getUniqueId())) { - extensionMap.put(extension.getUniqueId(), extension); - } + extensionList.add(extension); - return extensionMap; + return extensionList; } } |