/* * This file or a portion of this file is licensed under the terms of * the Globus Toolkit Public License, found in file GTPL, or at * http://www.globus.org/toolkit/download/license.html. This notice must * appear in redistributions of this file, with or without modification. * * Redistributions of this Software, with or without modification, must * reproduce the GTPL in: (1) the Software, or (2) the Documentation or * some other similar material which is provided with the Software (if * any). * * Copyright 1999-2004 University of Chicago and The University of * Southern California. All rights reserved. */ package edu.isi.pegasus.common.util; import java.io.*; import java.util.Properties; /** * This class solely defines the version numbers of PEGASUS. The template * file will be substituted by ant during the built process to compile * in the built timestamp.<p> * * When using the class, the methods for the version number digits * will always return an integer. In order to obtain the full version * number, including any "release candidate" suffices, please prefer * the <code>toString</code> method over combining the separate version * integers yourself. * * @author Karan Vahi * @author Jens-S. Vöckler * @author Gideon Juve */ public class Version { /** * Basename of the build stamp file. */ public static final String STAMP_FILENAME = "stamp"; private Properties props = new Properties(); public Version() { try { props.load(Version.class.getClassLoader().getResourceAsStream("pegasus.build.properties")); } catch (IOException ioe) { throw new RuntimeException("Unable to load pegasus build properties", ioe); } } /** * @deprecated Just create a new instance */ public static Version instance() { return new Version(); } public String toString() { return getVersion(); } /** * @return The pegasus version */ public String getVersion() { return props.getProperty("pegasus.build.version"); } private String[] splitVersion() { return getVersion().split("[.]"); } /** * @return Major version number */ public String getMajor() { return splitVersion()[0]; } /** * @return Minor version number */ public String getMinor() { return splitVersion()[1]; } /** * @return Patch version number plus other tags */ public String getPatch() { return splitVersion()[2]; } /** * @return the formatted time stamp of the build. * @deprecated Use getTimestamp() instead */ public String determineBuilt() { return getTimestamp(); } /** * @return the build timestamp */ public String getTimestamp() { return props.getProperty("pegasus.build.timestamp"); } /** * Determines the build platform. * @return an identifier for the build platform. * @deprecated Used getPlatform() instead */ public String determinePlatform() { return getPlatform(); } /** * @return The build platform */ public String getPlatform() { return props.getProperty("pegasus.build.platform"); } /** * @return The Git hash that this version of Pegasus was built from */ public String getGitHash() { return props.getProperty("pegasus.build.git.hash"); } /** * Determines the built and architecture of the installation. These * are usually separated by a linear white-space. * * @return the formatted time stamp of the built, if available, and an * identifier for the architecture. An string indicating that the * build is unknown is returned on failure. */ public String determineInstalled() { String result = "unknown unknown"; String pegasushome = System.getProperty( "pegasus.home" ); if ( pegasushome != null ) { try { File stampfile = new File( pegasushome, STAMP_FILENAME ); if ( stampfile.canRead() ) { BufferedReader br = new BufferedReader( new FileReader(stampfile) ); String built = br.readLine(); br.close(); if ( built != null && built.length() > 0 ) result = built; } } catch ( IOException ioe ) { // ignore } } return result; } /** * Determines, if the compiled version and the installed version * match. The match is done by comparing the timestamps and * architectures. * * @return true, if versions match, false otherwise. */ public boolean matches() { String s[] = determineInstalled().split("\\s+"); return ( s.length >= 2 && s[0].equalsIgnoreCase( determineBuilt() ) && s[1].equalsIgnoreCase( determinePlatform() ) ); } }