FileDocCategorySizeDatePackage
PropertyFile.javaAPI DocApache Ant 1.7023231Wed Dec 13 06:16:18 GMT 2006org.apache.tools.ant.taskdefs.optional

PropertyFile

public class PropertyFile extends org.apache.tools.ant.Task
Modifies settings in a property file.

The following is an example of its usage:

    <target name="setState">
      <property
        name="header"
        value="##Generated file - do not modify!"/>
        <propertyfile file="apropfile.properties" comment="${header}">
        <entry key="product.version.major" type="int" value="5"/>
        <entry key="product.version.minor" type="int" value="0"/>
        <entry key="product.build.major" type="int" value="0" />
        <entry key="product.build.minor" type="int" operation="+" />
        <entry key="product.build.date" type="date" value="now" />
        <entry key="intSet" type="int" operation="=" value="681"/>
        <entry key="intDec" type="int" operation="-"/>
        <entry key="StringEquals" type="string" value="testValue"/>
        </propertyfile>
      </target>

    The <propertyfile> task must have:

    • file
    Other parameters are:
    • comment, key, operation, type and value (the final four being eliminated shortly)
    The <entry> task must have:
    • key
    Other parameters are:
    • operation
    • type
    • value
    • default
    • unit
    If type is unspecified, it defaults to string Parameter values:
    • operation:
      • "=" (set -- default)
      • "-" (dec)
      • "+" (inc)
      • type:
        • "int"
        • "date"
        • "string"
    • value:
      • holds the default value, if the property was not found in property file
      • "now" In case of type "date", the value "now" will be replaced by the current date/time and used even if a valid date was found in the property file.
      String property types can only use the "=" operation. Int property types can only use the "=", "-" or "+" operations.

      The message property is used for the property file header, with "\\" being a newline delimiter character.

Fields Summary
private String
comment
private Properties
properties
private File
propertyfile
private Vector
entries
Constructors Summary
Methods Summary
private booleancheckParam(java.io.File param)

        return !(param == null);
    
private voidcheckParameters()

        if (!checkParam(propertyfile)) {
            throw new BuildException("file token must not be null.", getLocation());
        }
    
public org.apache.tools.ant.taskdefs.optional.PropertyFile$EntrycreateEntry()
The entry nested element.

return
an entry nested element to be configured.

        Entry e = new Entry();
        entries.addElement(e);
        return e;
    
public voidexecute()
Execute the task.

throws
BuildException on error.


    /* ========================================================================
    *
    * Constructors
    */

    /* ========================================================================
    *
    * Methods
    */

                
         
        checkParameters();
        readFile();
        executeOperation();
        writeFile();
    
private voidexecuteOperation()

        for (Enumeration e = entries.elements(); e.hasMoreElements();) {
            Entry entry = (Entry) e.nextElement();
            entry.executeOn(properties);
        }
    
private voidreadFile()

        // Create the PropertyFile
        properties = new Properties();
        try {
            if (propertyfile.exists()) {
                log("Updating property file: "
                    + propertyfile.getAbsolutePath());
                FileInputStream fis = null;
                try {
                    fis = new FileInputStream(propertyfile);
                    BufferedInputStream bis = new BufferedInputStream(fis);
                    properties.load(bis);
                } finally {
                    if (fis != null) {
                        fis.close();
                    }
                }
            } else {
                log("Creating new property file: "
                    + propertyfile.getAbsolutePath());
                FileOutputStream out = null;
                try {
                    out = new FileOutputStream(propertyfile.getAbsolutePath());
                    out.flush();
                } finally {
                    if (out != null) {
                        out.close();
                    }
                }
            }
        } catch (IOException ioe) {
            throw new BuildException(ioe.toString());
        }
    
public voidsetComment(java.lang.String hdr)
optional header comment for the file

param
hdr the string to use for the comment.

        comment = hdr;
    
public voidsetFile(java.io.File file)
Location of the property file to be edited; required.

param
file the property file.

        propertyfile = file;
    
private voidwriteFile()

        BufferedOutputStream bos = null;
        try {
            bos = new BufferedOutputStream(new FileOutputStream(propertyfile));
            properties.store(bos, comment);
        } catch (IOException ioe) {
            throw new BuildException(ioe, getLocation());
        } finally {
            FileUtils.close(bos);
        }