/*
* $RCSfile: VersionInfo.java,v $
*
* Copyright 2004-2008 Sun Microsystems, Inc. All Rights Reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License version 2 only, as
* published by the Free Software Foundation. Sun designates this
* particular file as subject to the "Classpath" exception as provided
* by Sun in the LICENSE file that accompanied this code.
*
* This code 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 General Public License
* version 2 for more details (a copy is included in the LICENSE file that
* accompanied this code).
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work; if not, write to the Free Software Foundation,
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
*
* Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
* CA 95054 USA or visit www.sun.com if you need additional information or
* have any questions.
*
* $Revision: 1.10 $
* $Date: 2008/02/28 20:17:15 $
* $State: Exp $
*/
package javax.media.j3d;
/**
* The VersionInfo class contains strings that describe the implementation
* and specification version of the javax.media.j3d pacakge. These strings
* are made available as properties obtained from the VirtualUniverse class.
*
* <h4>NOTE TO DEVELOPERS:</h4>
*
* <p>
* Developers are strongly encouraged to do the following whenever they
* modify the 3D graphics API for the Java platform:
*
* <ol>
* <li>The VENDOR_DEVELOPER string should be modified to
* indicate the name of the individuals or organizations who have
* modified the source code.</li>
*
* <li>The VERSION_DEV_STRING may be modified to indicate
* additional information about the particular build, but this is
* not required.</li>
*
* <li>The strings denoted as being unmodifiable should <i>not</i> be
* modified.</li>
* </ol>
*
* <p>
* The tags of the form @STRING@ are populated by ant when the project is built
*
* @see VirtualUniverse#getProperties
*/
class VersionInfo extends Object {
/**
* Developer who has modified the 3D graphics API for the Java platform.
* This string should be modified to indicate the name of the
* individual(s) or organization(s) who modified the code.
*/
private static final String VENDOR_DEVELOPER = null;
/**
* An optional string appended to the end of the version string,
* after the time stamp. A space will be automatically prepended
* to this string. This string should be null if no dev string is
* desired.
*/
private static final String VERSION_DEV_STRING = null;
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// END OF DEVELOPER-MODIFIABLE PARAMETERS
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// -------------------------------------------------------------------
// The following set of constants should not be modified by developers.
// -------------------------------------------------------------------
/**
* Constant that indicates whether or not this is a debug build.
*/
static final boolean isDebug = @IS_DEBUG@;
/**
* This static final variable is used to enable debugging and
* assertion checking during the development phase of a particular
* version of 3D graphics API for the Java platform. It is disabled
* for "opt" production builds (beta, release candidate, fcs, and
* patch builds). It is enabled for all "debug" builds and for daily
* and stable "opt" builds.
*
* <p>
* This parameter is controlled by ant via the build.xml file. The
* default value is true.
*/
static final boolean isDevPhase = @IS_DEV_PHASE@;
/**
* This static final variable is used indicate a production
* (beta, release candidate, fcs, or patch) build.
* <p>
* This parameter is controlled by ant via the build.xml file. The
* default value is false.
*/
static final boolean isProduction = @IS_PRODUCTION@;
/**
* If this flag is set to true, the verbose buildtime string
* will be appended to the version string)
* <p>
* This parameter is controlled by ant via the build.xml file. The
* default value is true.
*/
private static final boolean useVerboseBuildTime = @USE_VERBOSE_BUILDTIME@;
/**
* String identifying the type of build, one of:
* "daily", "stable", "beta", "fcs", or "patch". The default value
* is "daily".
*/
private static final String BUILD_TYPE = "@BUILD_TYPE@";
/**
* String identifying the build number in the format
* "buildNN", where "NN" is the sequential build number, for
* example, build47. This string contain only letters and
* numbers, It must not contain any other characters or spaces.
*
* For production builds, this string appears parenthetically,
* after the first space.
*/
private static final String VERSION_BUILD = "@VERSION_BUILD@";
/**
* String identifying the particular build of the 3D API, for
* example, "-beta1", "-build47", "-rc1", "_01", etc. Note that
* this includes the leading dash or underscore. It will typically
* be empty for FCS builds. This string may only contain letters,
* numbers, periods, dashes, or underscores. It must not contain
* any other characters or spaces.
*
* This us used as part of the j3d.version that appears before the
* optional first space.
*/
private static final String VERSION_SUFFIX = "@VERSION_SUFFIX@";
/**
* Date stamp
*
* This is only used for daily builds.
*/
private static final String BUILDTIME = "@BUILDTIME@";
/**
* Specification version (major and minor version only). This
* string must not be modified by developers.
*/
private static final String SPECIFICATION_VERSION = "1.5";
/**
* Specification vendor.
*/
private static final String SPECIFICATION_VENDOR = "@SPEC_VENDOR@";
/**
* Primary implementation vendor.
*/
private static final String VENDOR_PRIMARY = "@IMPL_VENDOR@";
/**
* Base version number. This is the major.minor.subminor version
* number. Version qualifiers are specified separately. The
* major and minor version <i>must</i> be the same as the specification
* version.
*/
private static final String VERSION_BASE = "@VERSION_BASE@";
/**
* Boolean flag indicating that the version of the 3D API is
* experimental. This must <i>not</i> be modified by developers.
* All non-official builds <i>must</i> contain the string
* <code>"experimental"</code> as part of the release name that
* appears before the optional first space.
*/
private static final boolean isExperimental = !isProduction;
/**
* The composite version string. This is composed in the static
* initializer for this class.
*/
private static final String VERSION;
/**
* The composite vendor string. This is composed in the static
* initializer for this class.
*/
private static final String VENDOR;
/**
* Verbose time and date stamp appended to the end of the version string.
* This is appended to the version string
* after the build identifier (and after the first space, which
* will automatically be added) and before the optional dev
* string. This string is only used for non-fcs builds.
*/
private static final String BUILDTIME_VERBOSE = "@BUILDTIME_VERBOSE@";
private static boolean isNonEmpty(String str) {
if ((str == null) || (str.length() == 0)) {
return false;
}
else {
return true;
}
}
// The static initializer composes the version and vendor strings
static {
final boolean isPatchBuild = BUILD_TYPE.equals("patch");
final boolean isFcsBuild = BUILD_TYPE.equals("fcs");
final boolean isBetaBuild = BUILD_TYPE.equals("beta");
final boolean isStableBuild = BUILD_TYPE.equals("stable");
final boolean isDailyBuild = BUILD_TYPE.equals("daily");
// Assign the vendor by concatenating primary and developer
// vendor strings
String tmpVendor = VENDOR_PRIMARY;
if (isNonEmpty(VENDOR_DEVELOPER)) {
tmpVendor += " & " + VENDOR_DEVELOPER;
}
String tmpVersion = VERSION_BASE;
if (isNonEmpty(VERSION_SUFFIX)) {
if (isPatchBuild) {
tmpVersion += "_";
}
else {
tmpVersion += "-";
}
tmpVersion += VERSION_SUFFIX;
}
if (isDailyBuild && isNonEmpty(BUILDTIME)) {
tmpVersion += "-" + BUILDTIME;
}
if (isExperimental) {
tmpVersion += "-experimental";
}
// Append the optional fields that follow the first space
if (isProduction) {
if (isFcsBuild) {
tmpVersion += " fcs";
}
else if (isPatchBuild) {
tmpVersion += " fcs+patch";
}
if (isNonEmpty(VERSION_BUILD)) {
tmpVersion += " (" + VERSION_BUILD + ")";
}
}
if (useVerboseBuildTime && isNonEmpty(BUILDTIME_VERBOSE)) {
tmpVersion += " " + BUILDTIME_VERBOSE;
}
if (isNonEmpty(VERSION_DEV_STRING)) {
tmpVersion += " " + VERSION_DEV_STRING;
}
VERSION = tmpVersion;
VENDOR = tmpVendor;
}
/**
* Returns the specification version string.
* @return the specification version string
*/
static String getSpecificationVersion() {
return SPECIFICATION_VERSION;
}
/**
* Returns the specification vendor string.
* @return the specification vendor string
*/
static String getSpecificationVendor() {
return SPECIFICATION_VENDOR;
}
/**
* Returns the implementation version string.
* @return the implementation version string
*/
static String getVersion() {
return VERSION;
}
/**
* Returns the implementation vendor string.
* @return the implementation vendor string
*/
static String getVendor() {
return VENDOR;
}
}