FileDocCategorySizeDatePackage
Extension.javaAPI DocGlassfish v2 API10925Fri May 04 22:32:30 BST 2007org.apache.catalina.util

Extension

public final class Extension extends Object
Utility class that represents either an available "Optional Package" (formerly known as "Standard Extension") as described in the manifest of a JAR file, or the requirement for such an optional package. It is used to support the requirements of the Servlet Specification, version 2.3, related to providing shared extensions to all webapps.

In addition, static utility methods are available to scan a manifest and return an array of either available or required optional modules documented in that manifest.

For more information about optional packages, see the document Optional Package Versioning in the documentation bundle for your Java2 Standard Edition package, in file guide/extensions/versioning.html.

author
Craig McClanahan
author
Justyna Horwat
author
Greg Murray
version
$Revision: 1.4 $ $Date: 2007/05/05 05:32:30 $

Fields Summary
private String
extensionName
The name of the optional package being made available, or required.
private String
implementationURL
The URL from which the most recent version of this optional package can be obtained if it is not already installed.
private String
implementationVendor
The name of the company or organization that produced this implementation of this optional package.
private String
implementationVendorId
The unique identifier of the company that produced the optional package contained in this JAR file.
private String
implementationVersion
The version number (dotted decimal notation) for this implementation of the optional package.
private String
specificationVendor
The name of the company or organization that originated the specification to which this optional package conforms.
private String
specificationVersion
The version number (dotted decimal notation) of the specification to which this optional package conforms.
private boolean
fulfilled
fulfilled is true if all the required extension dependencies have been satisfied
Constructors Summary
Methods Summary
public java.lang.StringgetExtensionName()

    

       
        return (this.extensionName);
    
public java.lang.StringgetImplementationURL()


       
        return (this.implementationURL);
    
public java.lang.StringgetImplementationVendor()


       
        return (this.implementationVendor);
    
public java.lang.StringgetImplementationVendorId()


       
        return (this.implementationVendorId);
    
public java.lang.StringgetImplementationVersion()


       
        return (this.implementationVersion);
    
public java.lang.StringgetSpecificationVendor()


       
        return (this.specificationVendor);
    
public java.lang.StringgetSpecificationVersion()


       
        return (this.specificationVersion);
    
public java.lang.StringgetUniqueId()
UniqueId created by combining the extension name and implementation version.

        return this.extensionName + this.implementationVersion;
    
public booleanisCompatibleWith(org.apache.catalina.util.Extension required)
Return true if the specified Extension (which represents an optional package required by this application) is satisfied by this Extension (which represents an optional package that is already installed. Otherwise, return false.

param
required Extension of the required optional package


        // Extension Name must match
        if (extensionName == null)
            return (false);
        if (!extensionName.equals(required.getExtensionName()))
            return (false);

        // Available specification version must be >= required
        if (!isNewer(specificationVersion, required.getSpecificationVersion()))
            return (false);

        // Implementation Vendor ID must match
        if (implementationVendorId == null)
            return (false);
        if (!implementationVendorId.equals(required.getImplementationVendorId()))
            return (false);

        // Implementation version must be >= required
        if (!isNewer(implementationVersion, required.getImplementationVersion()))
            return (false);

        // This available optional package satisfies the requirements
        return (true);

    
public booleanisFulfilled()

        return fulfilled;
    
private booleanisNewer(java.lang.String first, java.lang.String second)
Return true if the first version number is greater than or equal to the second; otherwise return false.

param
first First version number (dotted decimal)
param
second Second version number (dotted decimal)
exception
NumberFormatException on a malformed version number


        if ((first == null) || (second == null))
            return (false);
        if (first.equals(second))
            return (true);

        StringTokenizer fTok = new StringTokenizer(first, ".", true);
        StringTokenizer sTok = new StringTokenizer(second, ".", true);
        int fVersion = 0;
        int sVersion = 0;
        while (fTok.hasMoreTokens() || sTok.hasMoreTokens()) {
            if (fTok.hasMoreTokens())
                fVersion = Integer.parseInt(fTok.nextToken());
            else
                fVersion = 0;
            if (sTok.hasMoreTokens())
                sVersion = Integer.parseInt(sTok.nextToken());
            else
                sVersion = 0;
            if (fVersion < sVersion)
                return (false);
            else if (fVersion > sVersion)
                return (true);
            if (fTok.hasMoreTokens())   // Swallow the periods
                fTok.nextToken();
            if (sTok.hasMoreTokens())
                sTok.nextToken();
        }

        return (true);  // Exact match

    
public voidsetExtensionName(java.lang.String extensionName)

        if (extensionName != null) {
            this.extensionName = extensionName.trim();
        }
    
public voidsetFulfilled(boolean fulfilled)


        
        this.fulfilled = fulfilled;
    
public voidsetImplementationURL(java.lang.String implementationURL)

        this.implementationURL = implementationURL;
    
public voidsetImplementationVendor(java.lang.String implementationVendor)

        this.implementationVendor = implementationVendor;
    
public voidsetImplementationVendorId(java.lang.String implementationVendorId)

        this.implementationVendorId = implementationVendorId;
    
public voidsetImplementationVersion(java.lang.String implementationVersion)

        if (implementationVersion != null) {
            this.implementationVersion = implementationVersion.trim();
        }
    
public voidsetSpecificationVendor(java.lang.String specificationVendor)

        this.specificationVendor = specificationVendor;
    
public voidsetSpecificationVersion(java.lang.String specificationVersion)

        this.specificationVersion = specificationVersion;
    
public java.lang.StringtoString()
Return a String representation of this object.


        StringBuffer sb = new StringBuffer("Extension[");
        sb.append(extensionName);
        if (implementationURL != null) {
            sb.append(", implementationURL=");
            sb.append(implementationURL);
        }
        if (implementationVendor != null) {
            sb.append(", implementationVendor=");
            sb.append(implementationVendor);
        }
        if (implementationVendorId != null) {
            sb.append(", implementationVendorId=");
            sb.append(implementationVendorId);
        }
        if (implementationVersion != null) {
            sb.append(", implementationVersion=");
            sb.append(implementationVersion);
        }
        if (specificationVendor != null) {
            sb.append(", specificationVendor=");
            sb.append(specificationVendor);
        }
        if (specificationVersion != null) {
            sb.append(", specificationVersion=");
            sb.append(specificationVersion);
        }
        sb.append("]");
        return (sb.toString());