ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ste...@apache.org
Subject cvs commit: jakarta-ant/docs/manual optionaltasklist.html tasksoverview.html
Date Fri, 22 Feb 2002 08:29:37 GMT
stevel      02/02/22 00:29:37

  Modified:    src/main/org/apache/tools/ant/taskdefs defaults.properties
               docs/manual optionaltasklist.html tasksoverview.html
  Added:       docs/manual/OptionalTasks echoproperties.html
               src/main/org/apache/tools/ant/taskdefs/optional
                        EchoProperties.java
               src/etc/testcases/taskdefs/optional echoproperties.xml
               src/testcases/org/apache/tools/ant/taskdefs/optional
                        EchoPropertiesTest.java
  Log:
  Utility task to list all your current properties along with unit tests, as written by Matt
Albrecht . Added a prefix to save a subset of the properties for the very silly. Left it in
optional.jar although it has no dependencies.
  
  Revision  Changes    Path
  1.109     +1 -0      jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties
  
  Index: defaults.properties
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/src/main/org/apache/tools/ant/taskdefs/defaults.properties,v
  retrieving revision 1.108
  retrieving revision 1.109
  diff -u -r1.108 -r1.109
  --- defaults.properties	5 Feb 2002 09:32:47 -0000	1.108
  +++ defaults.properties	22 Feb 2002 08:29:37 -0000	1.109
  @@ -139,6 +139,7 @@
   soscheckin=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckin
   soscheckout=org.apache.tools.ant.taskdefs.optional.sos.SOSCheckout
   soslabel=org.apache.tools.ant.taskdefs.optional.sos.SOSLabel
  +echoproperties=org.apache.tools.ant.taskdefs.optional.EchoProperties
   
   # deprecated ant tasks (kept for back compatibility)
   starteam=org.apache.tools.ant.taskdefs.optional.scm.AntStarTeamCheckOut
  
  
  
  1.1                  jakarta-ant/docs/manual/OptionalTasks/echoproperties.html
  
  Index: echoproperties.html
  ===================================================================
  <html>
  
  <head>
  <meta http-equiv="Content-Language" content="en-us">
  <title>Echoproperties Task</title>
  </head>
  
  <body>
  
  <h2><a name="echoproperties">echoproperties</a></h2>
  <h3>Description</h3>
  <p>Displays all the current properties in the project.  The output can be
  sent to a file if desired. You can also specify a subset of properties
  to save by naming a prefix: only properties starting with this
  prefix will be saved. This task can be used as a somewhat contrived
  means of returning data from an <tt>&lt;ant&gt;</tt> invocation,
  but is really for debugging build files.</p>
  <h3>Parameters</h3>
  <table border="1" cellpadding="2" cellspacing="0">
    <tr>
      <td valign="top"><b>Attribute</b></td>
      <td valign="top"><b>Description</b></td>
      <td align="center" valign="top"><b>Required</b></td>
    </tr>
    <tr>
      <td valign="top">destfile</td>
      <td valign="top">If specified, the value indicates the name of the
      file to send the output of the statement to.  The generated output file
      is compatible for loading by any Java application as a property file.
      If not specified, then the output will go to the Ant log.</td>
      <td valign="top" align="center">No</td>
    </tr>
    <tr>
      <td valign="top">prefix</td>
      <td valign="top">
          a prefix which is used to filter the properties
          only those properties starting with this prefix will be echoed.
          <P>
      </td>
      <td valign="top" align="center">No</td>
    </tr>
    
    
     
    <tr>
      <td valign="top">failonerror</td>
      <td valign="top">By default, the "failonerror" attribute is enabled.
      If an error occurs while writing the properties to a file, and this
      attribute is enabled, then a BuildException will be thrown, causing the
      build to fail.  If disabled, then IO errors will be reported as a log
      statement, and the build will continue without failure from this task.</td>
      <td valign="top" align="center">No</td>
    </tr>
  </table>
  <h3>Examples</h3>
  <blockquote><pre>
    &lt;echoproperties /&gt;
  </pre></blockquote>
  <p>Report the current properties to the log.</p>
  <blockquote><pre>
    &lt;echoproperties destfile="my.properties" /&gt;
  </pre></blockquote>
  <p>Report the current properties to the file "my.properties", and will
  fail the build if the file could not be created or written to.</p>
  <blockquote><pre>
    &lt;echoproperties destfile="my.properties" failonerror="false" /&gt;
  </pre></blockquote>
  <p>Report the current properties to the file "my.properties", and will
  log a message if the file could not be created or written to, but will still
  allow the build to continue.</p>
  <blockquote><pre>
    &lt;echoproperties prefix="java."/&gt;
  </pre></blockquote>
  <p>List all properties beginning with "java."</p>
  
  <hr>
  <p align="center">Copyright &copy; 2002 Apache Software Foundation. All rights
  Reserved.</p>
  
  </body>
  </html>
  
  
  
  
  1.1                  jakarta-ant/src/main/org/apache/tools/ant/taskdefs/optional/EchoProperties.java
  
  Index: EchoProperties.java
  ===================================================================
  /*
   *  The Apache Software License, Version 1.1
   *
   *  Copyright (c) 2000 The Apache Software Foundation.  All rights
   *  reserved.
   *
   *  Redistribution and use in source and binary forms, with or without
   *  modification, are permitted provided that the following conditions
   *  are met:
   *
   *  1. Redistributions of source code must retain the above copyright
   *  notice, this list of conditions and the following disclaimer.
   *
   *  2. Redistributions in binary form must reproduce the above copyright
   *  notice, this list of conditions and the following disclaimer in
   *  the documentation and/or other materials provided with the
   *  distribution.
   *
   *  3. The end-user documentation included with the redistribution, if
   *  any, must include the following acknowlegement:
   *  "This product includes software developed by the
   *  Apache Software Foundation (http://www.apache.org/)."
   *  Alternately, this acknowlegement may appear in the software itself,
   *  if and wherever such third-party acknowlegements normally appear.
   *
   *  4. The names "The Jakarta Project", "Ant", and "Apache Software
   *  Foundation" must not be used to endorse or promote products derived
   *  from this software without prior written permission. For written
   *  permission, please contact apache@apache.org.
   *
   *  5. Products derived from this software may not be called "Apache"
   *  nor may "Apache" appear in their names without prior written
   *  permission of the Apache Group.
   *
   *  THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   *  WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   *  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   *  DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   *  ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   *  USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   *  ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   *  OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   *  OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   *  SUCH DAMAGE.
   *  ====================================================================
   *
   *  This software consists of voluntary contributions made by many
   *  individuals on behalf of the Apache Software Foundation.  For more
   *  information on the Apache Software Foundation, please see
   *  <http://www.apache.org/>.
   */
  package org.apache.tools.ant.taskdefs.optional;
  
  import org.apache.tools.ant.Project;
  import org.apache.tools.ant.Task;
  import org.apache.tools.ant.BuildException;
  
  import java.util.Properties;
  import java.util.Hashtable;
  import java.util.Enumeration;
  
  import java.io.ByteArrayOutputStream;
  import java.io.OutputStream;
  import java.io.File;
  import java.io.IOException;
  import java.io.FileOutputStream;
  
  /**
   *  Displays all the current properties in the build. The output can be sent to
   *  a file if desired. <P>
   *
   *  Attribute "destfile" defines a file to send the properties to. This can be
   *  processed as a standard property file later. <P>
   *
   *  Attribute "prefix" defines a prefix which is used to filter the properties
   *  only those properties starting with this prefix will be echoed. <P>
   *
   *  By default, the "failonerror" attribute is enabled. If an error occurs while
   *  writing the properties to a file, and this attribute is enabled, then a
   *  BuildException will be thrown. If disabled, then IO errors will be reported
   *  as a log statement, but no error will be thrown. <P>
   *
   *  Examples: <pre>
   *  &lt;echoproperties  /&gt;
   * </pre> Report the current properties to the log. <P>
   *
   *  <pre>
   *  &lt;echoproperties destfile="my.properties" /&gt;
   * </pre> Report the current properties to the file "my.properties", and will
   *  fail the build if the file could not be created or written to. <P>
   *
   *  <pre>
   *  &lt;echoproperties destfile="my.properties" failonerror="false"
   *      prefix="ant" /&gt;
   * </pre> Report all properties beginning with 'ant' to the file
   *  "my.properties", and will log a message if the file could not be created or
   *  written to, but will still allow the build to continue.
   *
   *@author     Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">
   *      groboclown@users.sourceforge.net</a>
   *@created    17-Jan-2002
   *@since      Ant 1.5
   */
  public class EchoProperties extends Task {
  
      /**
       *  File object pointing to the output file. If this is null, then we output
       *  to the project log, not to a file.
       */
      private File destfile = null;
  
      /**
       *  If this is true, then errors generated during file output will become
       *  build errors, and if false, then such errors will be logged, but not
       *  thrown.
       */
      private boolean failonerror = true;
  
      /**
       *  prefix string controls which properties to save
       */
      private String prefix = null;
  
  
      /**
       * set a file to use for the output
       */
      public void setDestfile(File destfile) {
          this.destfile = destfile;
      }
  
  
      /**
       *@param  failonerror  <tt>true</tt> if IO exceptions are reported as build
       *      exceptions, or <tt>false</tt> if IO exceptions are ignored.
       */
      public void setFailOnError(boolean failonerror) {
          this.failonerror = failonerror;
      }
  
  
      /**
       *@param  prefix  The new prefix value
       */
      public void setPrefix(String prefix) {
          this.prefix = prefix;
      }
  
  
      /**
       *  Run the task.
       *
       *@exception  BuildException  trouble, probably file IO
       */
      public void execute() throws BuildException {
          //copy the properties file
          Hashtable allProps = project.getProperties();
  
          try {
              if (destfile == null) {
                  ByteArrayOutputStream baos = new ByteArrayOutputStream();
                  saveProperties(allProps, baos);
                  log(baos.toString(), Project.MSG_INFO);
              } else {
                  OutputStream os = new FileOutputStream(this.destfile);
                  saveProperties(allProps, os);
              }
          } catch (IOException ioe) {
              String message =
                      "Destfile " + destfile + " could not be written to.";
              if (failonerror) {
                  throw new BuildException(message, ioe,
                          location);
              } else {
                  log(message, Project.MSG_INFO);
              }
          }
      }
  
  
      /**
       *  Send the key/value pairs in the hashtable to the given output stream.
       *  The output stream will be closed when this method returns.
       *
       *@param  allProps         propfile to save
       *@param  os               output stream
       *@exception  IOException  trouble
       */
      protected void saveProperties(Hashtable allProps, OutputStream os)
               throws IOException {
          Properties props = new Properties();
          Enumeration enum = allProps.keys();
          while (enum.hasMoreElements()) {
              String name = (String) enum.nextElement();
                  String value = (String) allProps.get(name);
              if (prefix == null || name.indexOf(prefix) == 0 ) {
                  props.setProperty(name, value);
              }
          }
          try {
              props.store(os, "Ant properties");
          } finally {
              os.close();
          }
      }
  }
  
  
  
  
  1.1                  jakarta-ant/src/etc/testcases/taskdefs/optional/echoproperties.xml
  
  Index: echoproperties.xml
  ===================================================================
  <project name="test" default="def" basedir=".">
  
    <target name="def">
    </target>
  
    <target name="setup">
      <property name="a.set" value="true" />
      <property name="b.set" value="false" />
    </target>
  
    <target name="testEchoToLog" depends="setup">
      <echoproperties />
    </target>
  
    <target name="testEchoToBadFile" depends="setup">
      <echoproperties destfile="." />
    </target>
  
    <target name="testEchoToBadFileFail" depends="setup">
      <echoproperties destfile="." failonerror="yes" />
    </target>
  
    <target name="testEchoToBadFileNoFail" depends="setup">
      <echoproperties destfile="." failonerror="no" />
    </target>
  
    <target name="testEchoToGoodFile" depends="setup">
      <echoproperties destfile="test.properties" />
    </target>
  
    <target name="testEchoToGoodFileFail" depends="setup">
      <echoproperties destfile="test.properties" failonerror="yes" />
    </target>
  
    <target name="testEchoToGoodFileNoFail" depends="setup">
      <echoproperties destfile="test.properties" failonerror="no" />
    </target>
  
    <target name="testEchoPrefix" depends="setup">
      <echoproperties destfile="test-prefix.properties" prefix="a." />
    </target>
  
    <target name="cleanup">
      <delete file="test.properties" failonerror="no" />
      <delete file="test-prefix.properties" failonerror="no" />
    </target>
  
  </project>
  
  
  
  
  1.1                  jakarta-ant/src/testcases/org/apache/tools/ant/taskdefs/optional/EchoPropertiesTest.java
  
  Index: EchoPropertiesTest.java
  ===================================================================
  /*
   * The Apache Software License, Version 1.1
   *
   * Copyright (c) 2000-2002 The Apache Software Foundation.  All rights
   * reserved.
   *
   * Redistribution and use in source and binary forms, with or without
   * modification, are permitted provided that the following conditions
   * are met:
   *
   * 1. Redistributions of source code must retain the above copyright
   *    notice, this list of conditions and the following disclaimer.
   *
   * 2. Redistributions in binary form must reproduce the above copyright
   *    notice, this list of conditions and the following disclaimer in
   *    the documentation and/or other materials provided with the
   *    distribution.
   *
   * 3. The end-user documentation included with the redistribution, if
   *    any, must include the following acknowlegement:
   *       "This product includes software developed by the
   *        Apache Software Foundation (http://www.apache.org/)."
   *    Alternately, this acknowlegement may appear in the software itself,
   *    if and wherever such third-party acknowlegements normally appear.
   *
   * 4. The names "The Jakarta Project", "Ant", and "Apache Software
   *    Foundation" must not be used to endorse or promote products derived
   *    from this software without prior written permission. For written
   *    permission, please contact apache@apache.org.
   *
   * 5. Products derived from this software may not be called "Apache"
   *    nor may "Apache" appear in their names without prior written
   *    permission of the Apache Group.
   *
   * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
   * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
   * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
   * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
   * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
   * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
   * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
   * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
   * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
   * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
   * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
   * SUCH DAMAGE.
   * ====================================================================
   *
   * This software consists of voluntary contributions made by many
   * individuals on behalf of the Apache Software Foundation.  For more
   * information on the Apache Software Foundation, please see
   * <http://www.apache.org/>.
   */
  
  package org.apache.tools.ant.taskdefs.optional;
  
  import org.apache.tools.ant.BuildFileTest;
  
  import java.io.*;
  import java.util.Properties;
  
  /**
   * Tests the EchoProperties task.
   *
   * @author    Matt Albrecht <a href="mailto:groboclown@users.sourceforge.net">groboclown@users.sourceforge.net</a>
   * @created   17-Jan-2002
   * @since     Ant 1.5
   */
  public class EchoPropertiesTest extends BuildFileTest {
  
      private final static String TASKDEFS_DIR = "src/etc/testcases/taskdefs/optional/";
      private static final String GOOD_OUTFILE = "test.properties";
      private static final String PREFIX_OUTFILE = "test-prefix.properties";
      private static final String BAD_OUTFILE = ".";
  
      public EchoPropertiesTest(String name) {
          super(name);
      }
  
      public void setUp() {
          configureProject(TASKDEFS_DIR + "echoproperties.xml");
          project.setProperty( "test.property", "is set" );
      }
  
      public void tearDown() {
          executeTarget("cleanup");
      }
      
      
      public void testEchoToLog() {
          executeTarget( "testEchoToLog" );
          String out = getLog();
          assertTrue(
              "Did not output testEchoToLog.",
              out.indexOf( "test.property=is set" ) >= 0 );
      }
      
      
      public void testEchoToBadFile() {
          expectBuildExceptionContaining( "testEchoToBadFile",
              "outfile is not writeable",
              "Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
      }
      
      
      public void testEchoToBadFileFail() {
          expectBuildExceptionContaining( "testEchoToBadFileFail",
              "outfile is not writeable",
              "Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
      }
      
      
      public void testEchoToBadFileNoFail() {
          expectLog( "testEchoToBadFileNoFail",
              "Destfile "+toAbsolute(BAD_OUTFILE)+" could not be written to." );
      }
      
      
      public void testEchoToGoodFile() throws Exception {
          executeTarget( "testEchoToGoodFile" );
          assertGoodFile();
      }
      
      
      public void testEchoToGoodFileFail() throws Exception {
          executeTarget( "testEchoToGoodFileFail" );
          assertGoodFile();
      }
      
      
      public void testEchoToGoodFileNoFail() throws Exception {
          executeTarget( "testEchoToGoodFileNoFail" );
          assertGoodFile();
      }
  
  
      public void testEchoPrefix() throws Exception {
          executeTarget( "testEchoPrefix" );
          Properties props=loadPropFile(PREFIX_OUTFILE);
  //        props.list(System.out);
          assertEquals("prefix didn't include 'a.set' property","true",props.getProperty("a.set"));
          assertNull("prefix failed to filter out property 'b.set'",
                     props.getProperty("b.set"));
      }
  
      protected Properties loadPropFile(String relativeFilename)
              throws IOException {
          File f = createRelativeFile( relativeFilename );
          Properties props=new Properties();
          InputStream in=null;
          try  {
              in=new BufferedInputStream(new FileInputStream(f));
              props.load(in);
          } finally {
              if(in!=null) {
                  try { in.close(); } catch(IOException e) {}
              }
          }
          return props;
      }
  
      protected void assertGoodFile() throws Exception {
          File f = createRelativeFile( GOOD_OUTFILE );
          assertTrue(
              "Did not create "+f.getAbsolutePath(),
              f.exists() );
          Properties props=loadPropFile(GOOD_OUTFILE);
          props.list(System.out);
          assertEquals("test property not found ",
                       "is set",props.getProperty("test.property"));
  /*
          // read in the file
          FileReader fr = new FileReader( f );
          try {
              BufferedReader br = new BufferedReader( fr );
              String read = null;
              while ( (read = br.readLine()) != null)
              {
                  if (read.indexOf("test.property=is set") >= 0)
                  {
                      // found the property we set - it's good.
                      return;
                  }
              }
              fail( "did not encounter set property in generated file." );
          } finally {
              try { fr.close(); } catch(IOException e) {}
          }
  */
      }
  
  
      protected String toAbsolute( String filename ) {
          return createRelativeFile( filename ).getAbsolutePath();
      }
  
  
      protected File createRelativeFile( String filename ) {
          if (filename.equals( "." )) {
              return getProjectDir();
          }
          // else
          return new File( getProjectDir(), filename );
      }
  }
  
  
  
  
  1.26      +1 -0      jakarta-ant/docs/manual/optionaltasklist.html
  
  Index: optionaltasklist.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/optionaltasklist.html,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- optionaltasklist.html	20 Feb 2002 01:16:20 -0000	1.25
  +++ optionaltasklist.html	22 Feb 2002 08:29:37 -0000	1.26
  @@ -20,6 +20,7 @@
   <a href="OptionalTasks/ccm.html">Continuus/Synergy Tasks</a><br>
   <a href="OptionalTasks/depend.html">Depend</a><br>
   <a href="OptionalTasks/ejb.html">EJB Tasks</a><br>
  +<a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
   <a href="OptionalTasks/ftp.html">FTP</a><br>
   <a href="OptionalTasks/icontract.html">IContract</a><br>
   <a href="OptionalTasks/javacc.html">JavaCC</a><br>
  
  
  
  1.3       +7 -0      jakarta-ant/docs/manual/tasksoverview.html
  
  Index: tasksoverview.html
  ===================================================================
  RCS file: /home/cvs/jakarta-ant/docs/manual/tasksoverview.html,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- tasksoverview.html	20 Feb 2002 01:44:53 -0000	1.2
  +++ tasksoverview.html	22 Feb 2002 08:29:37 -0000	1.3
  @@ -820,6 +820,13 @@
        generalization of <a href="CoreTasks/available.html">Available</a> and
        <a href="CoreTasks/uptodate.html">Uptodate</a>.</p></td>
     </tr>
  +  <tr valign="top">
  +    <td nowrap>
  +    <a href="OptionalTasks/echoproperties.html">Echoproperties</a><br>
  +
  +    </td>
  +    <td><p>Lists the current properties</p></td>
  +  </tr>
   
     <tr valign="top">
       <td nowrap><a href="CoreTasks/loadfile.html">LoadFile</a></td>
  
  
  

--
To unsubscribe, e-mail:   <mailto:ant-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:ant-dev-help@jakarta.apache.org>


Mime
View raw message