/*************************************** * * * JBoss: The OpenSource J2EE WebOS * * * * Distributable under LGPL license. * * See terms of license at gnu.org. * * * ***************************************/ package org.jboss; import java.io.IOException; import java.io.InputStream; import java.util.Collections; import java.util.Map; import java.util.Properties; import java.util.Date; /** * Provides access to JBoss version (and build) properties. * * @author Jason Dillon * @version $Revision: 1.1 $ */ public final class Version { public final static String VERSION_MAJOR = "version.major"; public final static String VERSION_MINOR = "version.minor"; public final static String VERSION_REVISION = "version.revision"; public final static String VERSION_TAG = "version.tag"; public final static String VERSION_NAME = "version.name"; public final static String BUILD_NUMBER = "build.number"; public final static String BUILD_ID = "build.id"; public final static String BUILD_DATE = "build.day"; /** * The single instance. */ private static Version instance = null; /** * The version properties. */ private Properties props; /** * Do not allow direct public construction. */ private Version() { props = loadProperties(); } /** * Get the single Version instance. * * @return The single Version instance. */ public static Version getInstance() { if (instance == null) { instance = new Version(); } return instance; } /** * Returns an unmodifiable map of version properties. * * @return An unmodifiable map of version properties. */ public Map getProperties() { return Collections.unmodifiableMap(props); } /** * Returns the value for the given property name. * * @param name - The name of the property. * @return The property value or null if the property is not set. */ public String getProperty(final String name) { return props.getProperty(name); } /** * Returns the major number of the version. * * @return The major number of the version. */ public int getMajor() { return getIntProperty(VERSION_MAJOR); } /** * Returns the minor number of the version. * * @return The minor number of the version. */ public int getMinor() { return getIntProperty(VERSION_MINOR); } /** * Returns the revision number of the version. * * @return The revision number of the version. */ public int getRevision() { return getIntProperty(VERSION_REVISION); } /** * Returns the tag of the version. * * @return The tag of the version. */ public String getTag() { return props.getProperty(VERSION_TAG); } /** * Returns the name number of the version. * * @return The name of the version. */ public String getName() { return props.getProperty(VERSION_NAME); } /** * Returns the build identifier for this version. * * @return The build identifier for this version. */ public String getBuildID() { return props.getProperty(BUILD_ID); } /** * Returns the build number for this version. * * @return The build number for this version. */ public String getBuildNumber() { return props.getProperty(BUILD_NUMBER); } /** * Returns the build date for this version. * * @return The build date for this version. */ public String getBuildDate() { return props.getProperty(BUILD_DATE); } /** * Returns the version information as a string. * * @return Basic information as a string. */ public String toString() { StringBuffer buff = new StringBuffer(); buff.append(getMajor()).append("."); buff.append(getMinor()).append("."); buff.append(getRevision()).append(getTag()); buff.append("(").append(getBuildID()).append(")"); return buff.toString(); } /** * Returns a property value as an int. * * @param name - The name of the property. * @return The property value, or -1 if there was a problem converting * it to an int. */ private int getIntProperty(final String name) { try { return Integer.valueOf(props.getProperty(name)).intValue(); } catch (Exception e) { return -1; } } /** * Returns a property value as a long. * * @param name - The name of the property. * @return The property value, or -1 if there was a problem converting * it to an long. */ private long getLongProperty(final String name) { try { return Long.valueOf(props.getProperty(name)).longValue(); } catch (Exception e) { return -1; } } /** * Load the version properties from a resource. */ private Properties loadProperties() { props = new Properties(); try { InputStream in = Version.class.getResourceAsStream("/org/jboss/version.properties"); props.load(in); in.close(); } catch (IOException e) { throw new Error("Missing version.properties"); } return props; } }