FileDocCategorySizeDatePackage
VersionInfo.javaAPI DocAndroid 1.5 API11238Wed May 06 22:41:10 BST 2009org.apache.http.util

VersionInfo

public class VersionInfo extends Object
Provides access to version information for HTTP components. Instances of this class provide version information for a single module or informal unit, as explained here. Static methods are used to extract version information from property files that are automatically packaged with HTTP component release JARs.
All available version information is provided in strings, where the string format is informal and subject to change without notice. Version information is provided for debugging output and interpretation by humans, not for automated processing in applications.
author
Oleg Kalnichevski
author
and others

Fields Summary
public static final String
UNAVAILABLE
A string constant for unavailable information.
public static final String
VERSION_PROPERTY_FILE
The filename of the version information files.
public static final String
PROPERTY_MODULE
public static final String
PROPERTY_RELEASE
public static final String
PROPERTY_TIMESTAMP
private final String
infoPackage
The package that contains the version information.
private final String
infoModule
The module from the version info.
private final String
infoRelease
The release from the version info.
private final String
infoTimestamp
The timestamp from the version info.
private final String
infoClassloader
The classloader from which the version info was obtained.
Constructors Summary
protected VersionInfo(String pckg, String module, String release, String time, String clsldr)
Instantiates version information.

param
pckg the package
param
module the module, or null
param
release the release, or null
param
time the build time, or null
param
clsldr the class loader, or null



                                                            
        
                                
        if (pckg == null) {
            throw new IllegalArgumentException
                ("Package identifier must not be null.");
        }

        infoPackage     = pckg;
        infoModule      = (module  != null) ? module  : UNAVAILABLE;
        infoRelease     = (release != null) ? release : UNAVAILABLE;
        infoTimestamp   = (time    != null) ? time    : UNAVAILABLE;
        infoClassloader = (clsldr  != null) ? clsldr  : UNAVAILABLE;
    
Methods Summary
protected static final org.apache.http.util.VersionInfofromMap(java.lang.String pckg, java.util.Map info, java.lang.ClassLoader clsldr)
Instantiates version information from properties.

param
pckg the package for the version information
param
info the map from string keys to string values, for example {@link java.util.Properties}
param
clsldr the classloader, or null
return
the version information

        if (pckg == null) {
            throw new IllegalArgumentException
                ("Package identifier must not be null.");
        }

        String module = null;
        String release = null;
        String timestamp = null;

        if (info != null) {
            module = (String) info.get(PROPERTY_MODULE);
            if ((module != null) && (module.length() < 1))
                module = null;

            release = (String) info.get(PROPERTY_RELEASE);
            if ((release != null) && ((release.length() < 1) ||
                                      (release.equals("${pom.version}"))))
                release = null;

            timestamp = (String) info.get(PROPERTY_TIMESTAMP);
            if ((timestamp != null) &&
                ((timestamp.length() < 1) ||
                 (timestamp.equals("${mvn.timestamp}")))
                )
                timestamp = null;
        } // if info

        String clsldrstr = null;
        if (clsldr != null)
            clsldrstr = clsldr.toString();

        return new VersionInfo(pckg, module, release, timestamp, clsldrstr);
    
public final java.lang.StringgetClassloader()
Obtains the classloader used to read the version information. This is just the toString output of the classloader, since the version information should not keep a reference to the classloader itself. That could prevent garbage collection.

return
the classloader description, never null

        return infoClassloader;
    
public final java.lang.StringgetModule()
Obtains the name of the versioned module or informal unit. This data is read from the version information for the package.

return
the module name, never null

        return infoModule;
    
public final java.lang.StringgetPackage()
Obtains the package name. The package name identifies the module or informal unit.

return
the package name, never null

        return infoPackage;
    
public final java.lang.StringgetRelease()
Obtains the release of the versioned module or informal unit. This data is read from the version information for the package.

return
the release version, never null

        return infoRelease;
    
public final java.lang.StringgetTimestamp()
Obtains the timestamp of the versioned module or informal unit. This data is read from the version information for the package.

return
the timestamp, never null

        return infoTimestamp;
    
public static final org.apache.http.util.VersionInfo[]loadVersionInfo(java.lang.String[] pckgs, java.lang.ClassLoader clsldr)
Loads version information for a list of packages.

param
pckgs the packages for which to load version info
param
clsldr the classloader to load from, or null for the thread context classloader
return
the version information for all packages found, never null

        if (pckgs == null) {
            throw new IllegalArgumentException
                ("Package identifier list must not be null.");
        }

        ArrayList vil = new ArrayList(pckgs.length);
        for (int i=0; i<pckgs.length; i++) {
            VersionInfo vi = loadVersionInfo(pckgs[i], clsldr);
            if (vi != null)
                vil.add(vi);
        }

        return (VersionInfo[]) vil.toArray(new VersionInfo[vil.size()]);
    
public static final org.apache.http.util.VersionInfoloadVersionInfo(java.lang.String pckg, java.lang.ClassLoader clsldr)
Loads version information for a package.

param
pckg the package for which to load version information, for example "org.apache.http". The package name should NOT end with a dot.
param
clsldr the classloader to load from, or null for the thread context classloader
return
the version information for the argument package, or null if not available

        if (pckg == null) {
            throw new IllegalArgumentException
                ("Package identifier must not be null.");
        }

        if (clsldr == null)
            clsldr = Thread.currentThread().getContextClassLoader();

        Properties vip = null; // version info properties, if available
        try {
            // org.apache.http      becomes
            // org/apache/http/version.properties
            InputStream is = clsldr.getResourceAsStream
                (pckg.replace('.", '/") + "/" + VERSION_PROPERTY_FILE);
            if (is != null) {
                try {
                    Properties props = new Properties();
                    props.load(is);
                    vip = props;
                } finally {
                    is.close();
                }
            }
        } catch (IOException ex) {
            // shamelessly munch this exception
        }

        VersionInfo result = null;
        if (vip != null)
            result = fromMap(pckg, vip, clsldr);

        return result;
    
public java.lang.StringtoString()
Provides the version information in human-readable format.

return
a string holding this version information

        StringBuffer sb = new StringBuffer
            (20 + infoPackage.length() + infoModule.length() +
             infoRelease.length() + infoTimestamp.length() +
             infoClassloader.length());

        sb.append("VersionInfo(")
            .append(infoPackage).append(':").append(infoModule);

        // If version info is missing, a single "UNAVAILABLE" for the module
        // is sufficient. Everything else just clutters the output.
        if (!UNAVAILABLE.equals(infoRelease))
            sb.append(':").append(infoRelease);
        if (!UNAVAILABLE.equals(infoTimestamp))
            sb.append(':").append(infoTimestamp);

        sb.append(')");

        if (!UNAVAILABLE.equals(infoClassloader))
            sb.append('@").append(infoClassloader);

        return sb.toString();