org.apache.derby.iapi.services.info
Class ProductVersionHolder

java.lang.Object
  extended byorg.apache.derby.iapi.services.info.ProductVersionHolder
All Implemented Interfaces:
java.security.PrivilegedAction

public final class ProductVersionHolder
extends java.lang.Object
implements java.security.PrivilegedAction

Class to hold a cloudscape Product version. This class includes the following product version features.

  1. Save the product version information this holds as a String. We call the string a 'product version string'.
  2. Construct a ProductVersionHolder from a valid 'product version string'.
  3. Determine if two product versions are feature compatible. This means products of these versions may interoperate with ***NO*** compatibility problems.
  4. Determine if two product versions are the same. This is a stronger test than the test for feature compatibility.
Cloudscape 5.1 and older versions used the majorVersion, minorVersion, maintVersion versions directly. That is a three part version number, majorVersion.minorVersion.maintVersion, e.g. 5.1.21. For Cloudscape 5.2 onwards a four part name is required. majorVersion.minorVersion.fixPack.bugVersion e.g. 5.2.1.2 This follows the IBM standard and allows us to state that a fix pack will be 5.2.3 without worrying about how many maintence fixes there are between fix packs. We implement this using the existing format of ProductVersionHolder to reduce disruption to the code, however we make the maintVersion encode the {fixPack.bugVersion}. Since the maintVersion is represented by a int (2G values) we have plenty of room for encoding. If we assign a given majorVersion.minorVersion.fixPack a 10 year life, then we about the maximum number of individual releases it can have is 10 years * 365 days/year = 3650. Thus with the pre 5.2 scheme we would not expect a 5.1.x to have an x > 3650 (approximately). Usually the rate of point releases has been much less than one per day, 5.1.31 is released about 225 days after GA which makes around a point release every 7 days. But in the encoding we need to be conservative. With fix packs the maximum is about 2 per year and fix packs are only made to the current release, thus with a yearly minor release cycle we would imagine only 2 fixpacks per major.minor. However like other IBM products or release cycle may be extended thus we can expect up to a handful of fix packs. Thus we might imagine releases like 5.2.0.12 5.2.0.234 5.2.1.34 5.2.4.2445 but highly unlikey to have 5.2.2.59321 5.2.23.1 The encoding number must continue to increase so that the encodedMaintB > encodedMaintA if (fixPackB > fixPackA) || ((fixPackB == fixPackA) && (bugB > bugA)) Selected encoding encodedMaint = (fixPack * 1,000,000) + (bugVersion); Handles many many fixpacks and upto one million bug fixes per fix pack and remains somewhat human readable. Special fix packs fixpack == 0 = alpha (version off main codeline) fixpack == 1 = first release of major.minor (may be marked with beta) fixpack == 2 = first fix pack (displayed as 1) The drdaMaintVersion is sent in the Network Server PRDID. It never displays but may be used by the client for version specific behaviour. It should be reset to 0 with each minor release. The product version string has the form:
  productVendorName - ProductName - majorVersion.minorVersion.maintVersion [beta] - (buildNumber)

  


Field Summary
private static java.lang.String ALPHA
           
private static int BAD_NUMBER
           
private static java.lang.String BETA
           
private  java.lang.String buildNumber
           
private  int drdaMaintVersion
           
private  java.lang.Boolean isBeta
           
private static int MAINT_ENCODING
           
private  int maintVersion
           
private  int majorVersion
           
private  int minorVersion
           
private  java.lang.String productGenus
           
private  java.lang.String productName
           
private  java.lang.String productTechnologyName
           
private  java.lang.String productVendorName
           
 
Constructor Summary
private ProductVersionHolder()
           
private ProductVersionHolder(java.lang.String productVendorName, java.lang.String productName, java.lang.String productTechnologyName, int majorVersion, int minorVersion, int maintVersion, int drdaMaintVersion, java.lang.String buildNumber, java.lang.Boolean isBeta)
          Create a ProductVersionHolder Please see the documentation for the varient of getProductVesionHolder that takes the same parameters as this for a description of the parameters.
 
Method Summary
static java.lang.String fullVersionString(int major, int minor, int maint, boolean isBeta, java.lang.String build)
           
 java.lang.String getBuildNumber()
          Return the build number for this product.
 int getBuildNumberAsInt()
          Return the build number as an integer if possible, mapping from the SVN number.
 int getDrdaMaintVersion()
          Return the drda protocol maintenance version for this minor release.
 int getFixPackVersion()
          Return the fix pack version from the maintence encoding.
 int getMaintVersion()
          Return the encoded maintainence version number.
 int getMajorVersion()
          Return the major version number.
 int getMinorVersion()
          Return the minor version number.
 java.lang.String getProductName()
          Return the external product name.
 java.lang.String getProductTechnologyName()
           
 java.lang.String getProductVendorName()
          Return the product vendor name.
static ProductVersionHolder getProductVersionHolder(java.util.Properties p)
          Get a ProductVersionHolder based on the information in the Properties object provided.
static ProductVersionHolder getProductVersionHolder(java.lang.String productVendorName, java.lang.String productName, java.lang.String productTechnologyName, int majorVersion, int minorVersion, int maintVersion, int drdaMaintVersion, java.lang.String buildNumber, java.lang.Boolean isBeta)
          Create a valid ProductVersionHolder.
static ProductVersionHolder getProductVersionHolderFromMyEnv(java.io.InputStream propertiesStream)
          Load the version info from the already opened properties files.
static ProductVersionHolder getProductVersionHolderFromMyEnv(java.lang.String productGenus)
          Get a ProductVersionHolder for a product of a given genus, that is available in the caller's environment.
 java.lang.String getSimpleVersionString()
          Return the feature version string, ie. major.minor.
 java.lang.String getVersionBuildString(boolean withBuild)
          Returns a short-hand value for the product version string.
 boolean isAlpha()
          Return true if this is a alpha product.
 boolean isBeta()
          Return true if this is a beta product.
private  java.util.Properties loadProperties(java.lang.String productGenus)
           
private static int parseInt(java.lang.String s)
          Parse a string containing a non-negative integer.
 java.lang.Object run()
           
static java.lang.String simpleVersionString(int major, int minor, boolean isBeta)
          Convert a major and minor number with beta status into a string.
 java.lang.String toString()
          Return a string representation of this ProductVersion.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

BAD_NUMBER

private static final int BAD_NUMBER
See Also:
Constant Field Values

ALPHA

private static final java.lang.String ALPHA
See Also:
Constant Field Values

BETA

private static final java.lang.String BETA
See Also:
Constant Field Values

MAINT_ENCODING

private static final int MAINT_ENCODING
See Also:
Constant Field Values

productVendorName

private java.lang.String productVendorName

productName

private java.lang.String productName

productTechnologyName

private java.lang.String productTechnologyName

majorVersion

private int majorVersion

minorVersion

private int minorVersion

maintVersion

private int maintVersion

drdaMaintVersion

private int drdaMaintVersion

buildNumber

private java.lang.String buildNumber

isBeta

private java.lang.Boolean isBeta

productGenus

private java.lang.String productGenus
Constructor Detail

ProductVersionHolder

private ProductVersionHolder()

ProductVersionHolder

private ProductVersionHolder(java.lang.String productVendorName,
                             java.lang.String productName,
                             java.lang.String productTechnologyName,
                             int majorVersion,
                             int minorVersion,
                             int maintVersion,
                             int drdaMaintVersion,
                             java.lang.String buildNumber,
                             java.lang.Boolean isBeta)
Create a ProductVersionHolder

Please see the documentation for the varient of getProductVesionHolder that takes the same parameters as this for a description of the parameters.

Method Detail

getProductVersionHolder

public static ProductVersionHolder getProductVersionHolder(java.lang.String productVendorName,
                                                           java.lang.String productName,
                                                           java.lang.String productTechnologyName,
                                                           int majorVersion,
                                                           int minorVersion,
                                                           int maintVersion,
                                                           int drdaMaintVersion,
                                                           java.lang.String buildNumber,
                                                           java.lang.Boolean isBeta)
Create a valid ProductVersionHolder. If any of the parameters provided is invalid, this returns null.

Parameters:
productName - The name of the product. productName.length() must be greater than 0. The syntax for a product name is 'productGenus[:productSpecies]'.
majorVersion - The most significant portion of a 3 part product version. Must be non-negative.
minorVersion - The second portion of a 3 part product version. Must be non-negative.
maintVersion - The least significant portion of a 3 part product version. Must be non-negative.
drdaMaintVersion - The protocol modification number for minor release.
buildNumber - The buildNumber for a product.
isBeta - true iff the product is beta.
Returns:
A valid ProductVersionHolder of null if any of the parameters provided are not valid.

getProductVersionHolderFromMyEnv

public static ProductVersionHolder getProductVersionHolderFromMyEnv(java.lang.String productGenus)
Get a ProductVersionHolder for a product of a given genus, that is available in the caller's environment. Even though this uses a priv bock, it may stil fail when the jar the version is being fetched from, is different to the one that loaded this class, AND the jars are in different security contexts.

Parameters:
productGenus - The genus for the product.
Returns:
The ProductVersionHolder or null if a product with the given genus is not available in the caller's environment.

getProductVersionHolderFromMyEnv

public static ProductVersionHolder getProductVersionHolderFromMyEnv(java.io.InputStream propertiesStream)
Load the version info from the already opened properties files. We need to do this because if the jar files (e.g. db2jtools and db2j) are in different security contexts (entries in the policy files) then we cannot load the version information for one of them correctly. This is because the this class will either have been loaded from only one of the jars and hence can only access the resource in its own jar. By making code specific to the jar open the resource we are guaranteed it will work.


getProductVersionHolder

public static ProductVersionHolder getProductVersionHolder(java.util.Properties p)
Get a ProductVersionHolder based on the information in the Properties object provided.

Parameters:
p - The properties object that holds the productVersion information.
Returns:
The ProductVersionHolder or null if a product with the given genus is not available in the caller's environment.

getProductVendorName

public java.lang.String getProductVendorName()
Return the product vendor name.


getProductName

public java.lang.String getProductName()
Return the external product name.


getProductTechnologyName

public java.lang.String getProductTechnologyName()

getMajorVersion

public int getMajorVersion()
Return the major version number.


getMinorVersion

public int getMinorVersion()
Return the minor version number.


getMaintVersion

public int getMaintVersion()
Return the encoded maintainence version number.


getDrdaMaintVersion

public int getDrdaMaintVersion()
Return the drda protocol maintenance version for this minor release. Starts at 0 for each minor release and only incremented when client behaviour changes based on the server version.


getFixPackVersion

public int getFixPackVersion()
Return the fix pack version from the maintence encoding.


isBeta

public boolean isBeta()
Return true if this is a beta product.


isAlpha

public boolean isAlpha()
Return true if this is a alpha product.


getBuildNumber

public java.lang.String getBuildNumber()
Return the build number for this product.


getBuildNumberAsInt

public int getBuildNumberAsInt()
Return the build number as an integer if possible, mapping from the SVN number. nnnnn -> returns nnnnn nnnnnM -> returns -nnnnn indicates a modified code base nnnnn:mmmmm -> returns -nnnnn anything else -> returns -1


parseInt

private static int parseInt(java.lang.String s)
Parse a string containing a non-negative integer. Return a negative integer is the String is invalid.

Parameters:
s - A string with a non-negative integer (a sequence of decimal digits.)
Returns:
the integer or a negative number if s is invalid.

toString

public java.lang.String toString()
Return a string representation of this ProductVersion. The difference between this and createProductVersionString, is that this method retruns a String when this ProductVersionHolder holds invalid version information.


getSimpleVersionString

public java.lang.String getSimpleVersionString()
Return the feature version string, ie. major.minor. (e.g. 5.2)


simpleVersionString

public static java.lang.String simpleVersionString(int major,
                                                   int minor,
                                                   boolean isBeta)
Convert a major and minor number with beta status into a string.


fullVersionString

public static java.lang.String fullVersionString(int major,
                                                 int minor,
                                                 int maint,
                                                 boolean isBeta,
                                                 java.lang.String build)

getVersionBuildString

public java.lang.String getVersionBuildString(boolean withBuild)
Returns a short-hand value for the product version string. Used by Sysinfo. Includes the optional designation


run

public java.lang.Object run()
Specified by:
run in interface java.security.PrivilegedAction

loadProperties

private java.util.Properties loadProperties(java.lang.String productGenus)

Built on Tue 2006-10-10 19:23:47+0200, from revision exported

Apache Derby V10.1 Engine Documentation - Copyright © 1997,2005 The Apache Software Foundation or its licensors, as applicable.