ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Stuart Barlow <sbar...@peopledoc.com>
Subject increment task
Date Wed, 25 Oct 2000 09:49:26 GMT

When undertaking nightly builds we have found the need for a build number.
And we also wanted this to live in a java propery file so that ANT could 
make
use of it during the build.

Below is a simple task that increments a numeric property in a java property
file.

Thanks,
Stuart.


/**
* Allows a particular property in a Java property file to be incremented by
* one. Useful for build numbers that increase by one with each build.
*
* @author Stuart Barlow <a 
href="mailto:sbarlow@peopledoc.com">sbarlow@peopledoc.com</a>
* @author <a href="mailto:sbarlow@peopledoc.com">Stuart Barlow</a>
*/
public class IncrementProperty extends Task {

   private File src = null;
   private String property = null;

   /**
    * Do the execution.
    */
   public void execute() throws BuildException {

       if (property == null) {
           throw new BuildException("replace token must not be null", 
location);
       }

       log("Incrementing " + property + " in file: " + src);

       if (src != null) {
           processFile(src);
       }
   }

   /**
    * Perform the increment of a property value on the given file.
    *
    * The replacement is performed on a temporary file which then 
replaces the original file.
    *
    * @param src the source file
    */
   private void processFile(File src) throws BuildException {
       if (!src.exists()) {
           throw new BuildException("Increment: source file " + 
src.getPath() + " doesn't exist", location);
       }

       File temp = new File(src.getPath() + ".temp");

       if (temp.exists()) {
           throw new BuildException("Replace: temporary file " + 
temp.getPath() + " already exists", location);
       }

       Properties propFile = new Properties();

       try {
           // load in the property file
           FileInputStream in = new FileInputStream(src);
           propFile.load(in);
           in.close();
       } catch (IOException ioe) {
           ioe.printStackTrace();
           throw new BuildException(ioe, location);
       }

       try {
           // get the old value and set the new one.
           String strValue = propFile.getProperty(property);
           long longValue = Long.parseLong(strValue);
           longValue++;
           Long newIncrementedValue = new Long(longValue);
           propFile.setProperty(property, newIncrementedValue.toString());

           // write out the property file
           FileOutputStream out = new FileOutputStream(src);
           propFile.store(out, "Ant - written out by the task: 
IncrementProperty");
           out.close();
       } catch (Exception ex) {
           ex.printStackTrace();
           throw new BuildException(ex, location);
       }
   }

   /**
    * Set the source file.
    */
   public void setFile(File file) {
       this.src = file;
   }

   /**
    * Set the string token to replace.
    */
   public void setProperty(String property) {
       this.property = property;
   }
}


Mime
View raw message