/*
* JBoss, Home of Professional Open Source.
* Copyright 2006, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.jboss;
import java.io.IOException;
import java.io.InputStream;
import java.util.Collections;
import java.util.Map;
import java.util.Properties;
/**
* Provides access to JBoss version (and build) properties.
*
* @author Jason Dillon
* @author Scott.Stark@jboss.org
* @author Dimitris Andreadis
* @version $Revision: 59329 $
*/
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 VERSION_CVSTAG = "version.cvstag";
public final static String BUILD_NUMBER = "build.number";
public final static String BUILD_ID = "build.id";
public final static String BUILD_DATE = "build.day";
public final static String BUILD_JVM_VERSION = "java.vm.version";
public final static String BUILD_JVM_VENDOR = "java.vendor";
public final static String BUILD_OS = "os.name";
public final static String BUILD_OS_ARCH = "os.arch";
public final static String BUILD_OS_VERSION = "os.version";
/**
* 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 CVS tag of the version.
*
* @return The CVS tag of the version.
*/
public String getCvsTag()
{
return props.getProperty(VERSION_CVSTAG);
}
/**
* 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 BUILD_JVM_VERSION (BUILD_JVM_VENDOR) which should look like:
* 1.4.2_05-b04 (Sun Microsystems Inc.)
* @return
*/
public String getBuildJVM()
{
String vm = props.getProperty(BUILD_JVM_VERSION);
String vendor = props.getProperty(BUILD_JVM_VENDOR);
return vm + '(' + vendor + ')';
}
/** Returns the BUILD_OS (BUILD_OS_ARCH,BUILD_OS_VERSION) which should look
* like:
* Windows XP (x86,5.1)
* Linux (i386,2.4.21-4.ELsmp)
* @return
*/
public String getBuildOS()
{
String os = props.getProperty(BUILD_OS);
String arch = props.getProperty(BUILD_OS_ARCH);
String version = props.getProperty(BUILD_OS_VERSION);
return os + '(' + arch +',' + version + ')';
}
/**
* Returns the full version number, e.g. 5.0.0.GA
*
* @return The full version number as string
*/
public String getVersionNumber()
{
StringBuffer buff = new StringBuffer();
buff.append(getMajor()).append(".");
buff.append(getMinor()).append(".");
buff.append(getRevision()).append(".");
buff.append(getTag());
return buff.toString();
}
/**
* Returns the version information as a string.
*
* @return Basic information as a string.
*/
public String toString()
{
StringBuffer buff = new StringBuffer();
buff.append(getVersionNumber());
buff.append(" (build: SVNTag=");
buff.append(getCvsTag());
buff.append(" date=");
buff.append(getBuildID());
buff.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;
}
}
/**
* 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;
}
}