git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@272545 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -141,7 +141,7 @@ Other changes: | |||||
| * New tasks <bzip2> and <bunzip2> to pack and unpack files using the | * New tasks <bzip2> and <bunzip2> to pack and unpack files using the | ||||
| BZip2 alogrithm. | BZip2 alogrithm. | ||||
| * New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, <input>, | |||||
| * New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, | |||||
| <manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>, <dirname>, | <manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>, <dirname>, | ||||
| <concat>. | <concat>. | ||||
| @@ -329,6 +329,14 @@ Other changes: | |||||
| to the formatters (instead of sending it to the formatters | to the formatters (instead of sending it to the formatters | ||||
| exclusively). | exclusively). | ||||
| * Ant has now a pluggable way to prompt users for input, which is used | |||||
| by the new <input> task. IDE integrators can provide an | |||||
| implementation of the InputHandler interface to decouple Ant's input | |||||
| from the console. An implementation that gets its input from a file | |||||
| for unattended builds is part of Ant's distribution. | |||||
| For more details see docs/manual/inputhandler.html. | |||||
| Changes from Ant 1.4 to Ant 1.4.1 | Changes from Ant 1.4 to Ant 1.4.1 | ||||
| =========================================== | =========================================== | ||||
| @@ -9,19 +9,23 @@ | |||||
| <h2><a name="input">Input</a></h2> | <h2><a name="input">Input</a></h2> | ||||
| <h3>Description</h3> | <h3>Description</h3> | ||||
| <p>Allows user interaction during the build process by displaying a message and | |||||
| reading a line of input from the console (System.in). The user will need to press | |||||
| the Return key. | |||||
| </p> | |||||
| <p>The message displayed can be set via the message attribute | |||||
| or as character data nested into the element.</p> | |||||
| <p>Optinonally a set of valid imput arguments can be defined via the validargs | |||||
| attribute. Input task will require the user to reenter values until the entered | |||||
| value matches one of the predefined.</p> | |||||
| <p>Optionally a property can be created from the value entered by the user. This | |||||
| property can then be used during the following build run. Input behaves according | |||||
| to <a href="property.html">property task</a> which means that existing properties | |||||
| cannot be overriden.</p> | |||||
| <p>Allows user interaction during the build process by prompting for | |||||
| input. To do so, it uses the configured | |||||
| <a href="../inputhandler.html">InputHandler</a>.</p> | |||||
| <p>The prompt can be set via the message attribute or as character | |||||
| data nested into the element.</p> | |||||
| <p>Optinonally a set of valid imput arguments can be defined via the | |||||
| validargs attribute. Input task will no accept value that don't match | |||||
| one of the predefined.</p> | |||||
| <p>Optionally a property can be created from the value entered by the | |||||
| user. This property can then be used during the following build | |||||
| run. Input behaves according to <a href="property.html">property | |||||
| task</a> which means that existing properties cannot be overriden.</p> | |||||
| <h3>Parameters</h3> | <h3>Parameters</h3> | ||||
| <table border="1" cellpadding="2" cellspacing="0"> | <table border="1" cellpadding="2" cellspacing="0"> | ||||
| <tr> | <tr> | ||||
| @@ -31,37 +35,44 @@ cannot be overriden.</p> | |||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">message</td> | <td valign="top">message</td> | ||||
| <td valign="top">the Message which gets displayed to the user during the build run.</td> | |||||
| <td valign="top">the Message which gets displayed to the user | |||||
| during the build run.</td> | |||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">validargs</td> | <td valign="top">validargs</td> | ||||
| <td valign="top">comma separated String containing valid input arguments. If set, | |||||
| input task will reject any input not defined here and input task will | |||||
| require the user to reenter arguments until the entered one matches one of the | |||||
| predefined. Validargs are compared case sensitive. If you want 'a' and 'A' to | |||||
| be accepted you will need to define both arguments within validargs.</td> | |||||
| <td valign="top">comma separated String containing valid input | |||||
| arguments. If set, input task will reject any input not defined | |||||
| here. Validargs are compared case sensitive. If you want 'a' and | |||||
| 'A' to be accepted you will need to define both arguments within | |||||
| validargs.</td> | |||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| <tr> | <tr> | ||||
| <td valign="top">addproperty</td> | <td valign="top">addproperty</td> | ||||
| <td valign="top">the name of a property to be created from input. Behaviour is equal | |||||
| to <a href="property.html">property task</a> which means that existing properties | |||||
| cannot be overriden.</td> | |||||
| <td valign="top">the name of a property to be created from | |||||
| input. Behaviour is equal to <a href="property.html">property | |||||
| task</a> which means that existing properties cannot be | |||||
| overriden.</td> | |||||
| <td valign="top" align="center">No</td> | <td valign="top" align="center">No</td> | ||||
| </tr> | </tr> | ||||
| </table> | </table> | ||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <pre> <input/></pre> | <pre> <input/></pre> | ||||
| <p>Will pause the build run until return key is pressed.</p> | |||||
| <p>Will pause the build run until return key is pressed when using the | |||||
| <a href="../inputhandler.html#defaulthandler">default | |||||
| InputHandler</a>, the concrete behavior is defined by the InputHandler | |||||
| implementation you use.</p> | |||||
| <pre> <input>Press Return key to continue...</input></pre> | <pre> <input>Press Return key to continue...</input></pre> | ||||
| <p>Will display the message "Press Return key to continue..." and pause | |||||
| the build run until return key is pressed.</p> | |||||
| <p>Will display the message "Press Return key to | |||||
| continue..." and pause the build run until return key is pressed | |||||
| (again, the concrete behavior is implementation dependent).</p> | |||||
| <pre> <input | <pre> <input | ||||
| message="Press Return key to continue..." | message="Press Return key to continue..." | ||||
| /></pre> | /></pre> | ||||
| <p>Will display the message "Press Return key to continue..." and pause | |||||
| the build run until return key is pressed.</p> | |||||
| <p>Will display the message "Press Return key to | |||||
| continue..." and pause the build run until return key is pressed | |||||
| (see above).</p> | |||||
| <pre> | <pre> | ||||
| <input | <input | ||||
| message="All data is going to be deleted from DB continue (y/n)?" | message="All data is going to be deleted from DB continue (y/n)?" | ||||
| @@ -73,9 +84,10 @@ the build run until return key is pressed.</p> | |||||
| </condition> | </condition> | ||||
| <fail if="do.abort">Build aborted by user.</fail> | <fail if="do.abort">Build aborted by user.</fail> | ||||
| </pre> | </pre> | ||||
| <p>Will display the message "All data is going to be deleted from DB continue | |||||
| (y/n)?" and require 'y+retrun key' to continue build or 'n+return key' | |||||
| to exit build with following message "Build aborted by user.".</p> | |||||
| <p>Will display the message "All data is going to be deleted from | |||||
| DB continue (y/n)?" and require 'y' to continue build or 'n' to | |||||
| exit build with following message "Build aborted by | |||||
| user.".</p> | |||||
| <pre> <input | <pre> <input | ||||
| message="Please enter db-username:" | message="Please enter db-username:" | ||||
| addproperty="db.user" | addproperty="db.user" | ||||
| @@ -84,7 +96,7 @@ to exit build with following message "Build aborted by user.".</p> | |||||
| property <code>db.user</code> to the value entered by the user.</p> | property <code>db.user</code> to the value entered by the user.</p> | ||||
| <hr> | <hr> | ||||
| <p align="center">Copyright © 2001 Apache Software Foundation. All rights | |||||
| <p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights | |||||
| Reserved.</p> | Reserved.</p> | ||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -15,6 +15,7 @@ | |||||
| <a href="develop.html#writingowntask">Writing Your Own Task</a><br> | <a href="develop.html#writingowntask">Writing Your Own Task</a><br> | ||||
| <a href="develop.html#buildevents">Build Events</a><br> | <a href="develop.html#buildevents">Build Events</a><br> | ||||
| <a href="develop.html#integration">Source-code Integration</a><br> | <a href="develop.html#integration">Source-code Integration</a><br> | ||||
| <a href="inputhandler.html">InputHandler</a><br> | |||||
| </body> | </body> | ||||
| </html> | </html> | ||||
| @@ -0,0 +1,89 @@ | |||||
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> | |||||
| <html> | |||||
| <head> | |||||
| <meta http-equiv="Content-Language" content="en-us"> | |||||
| <title>InputHandler</title> | |||||
| </head> | |||||
| <body> | |||||
| <h1>InputHandler</h1> | |||||
| <h2>Overview</h2> | |||||
| <p>When a task wants to prompt a user for input, it doesn't simply | |||||
| read the input from the console as this would make it impossible to | |||||
| embed Ant in an IDE. Instead it asks an implementation of the | |||||
| <code>org.apache.tools.ant.input.InputHandler</code> interface to | |||||
| prompt the user and hand the user input back to the task.</p> | |||||
| <p>To do this, the task creates an <code>InputRequest</code> object | |||||
| and passes it to the <code>InputHandler</code> Such an | |||||
| <code>InputRequest</code> may know whether a given user input is valid | |||||
| and the <code>InputHandler</code> is supposed to reject all invalid | |||||
| input.</p> | |||||
| <p>Exactly one <code>InputHandler</code> instance is associated with | |||||
| every Ant process, users can specify the implementation using the | |||||
| <code>-inputhandler</code> command line switch.</p> | |||||
| <h2>InputHandler</h2> | |||||
| <p>The <code>InputHandler</code> interface contains exactly one | |||||
| method</p> | |||||
| <pre> | |||||
| void handleInput(InputRequest request) | |||||
| throws org.apache.tools.ant.BuildException; | |||||
| </pre> | |||||
| <p>with some pre- and postconditions. The main postcondition is that | |||||
| this method must not return unless the <code>request</code> considers | |||||
| the user input valid, it is allowed to throw an exception in this | |||||
| situation.</p> | |||||
| <p>Ant comes with two built-in implementations of this interface:</p> | |||||
| <h3><a name="defaulthandler">DefaultInputHandler</a></h3> | |||||
| <p>This is the implementation you get, when you don't use the | |||||
| <code>-inputhandler</code> command line switch at all. This | |||||
| implementation will print the prompt encapsulated in the | |||||
| <code>request</code> object to Ant's logging system and re-prompt for | |||||
| input until the user enters something that is considered valid input | |||||
| by the <code>request</code> object. Input will be read from the | |||||
| console and the user will need to press the Return key.</p> | |||||
| <h3>PropertyFileInputHandler</h3> | |||||
| <p>This implementation is useful if you want to run unattended build | |||||
| processes. It reads all input from a properties file and makes the | |||||
| build fail if it cannot find valid input in this file. The name of | |||||
| the properties file must be specified in the Java system property | |||||
| <code>ant.input.properties</code>.</p> | |||||
| <p>The prompt encapsulated in a <code>request</code> will be used as | |||||
| the key when looking up the input inside the properties file. If no | |||||
| input can be found, the input is considered invalid and an exception | |||||
| will be thrown.</p> | |||||
| <p><strong>Note</strong> that <code>ant.input.properties</code> must | |||||
| be a Java system property, not an Ant property. I.e. you cannot | |||||
| define it as a simple parameter to <code>ant</code>, but you can | |||||
| define it inside the <code>ANT_OPTS</code> environment variable.</p> | |||||
| <h2>InputRequest</h2> | |||||
| <p>Instances of <code>org.apache.tools.ant.input.InputRequest</code> | |||||
| encapsulate the information necessary to ask a user for input and | |||||
| validate this input.</p> | |||||
| <p>The instances of <code>InputRequest</code> itself will accept any | |||||
| input, but subclasses may use stricter validations. | |||||
| <code>org.apache.tools.ant.input.MultipleChoiceInputRequest</code> | |||||
| should be used if the user input must be part of a predefined set of | |||||
| choices.</p> | |||||
| <hr> | |||||
| <p align="center">Copyright © 2002 Apache Software Foundation. All rights | |||||
| Reserved.</p> | |||||
| </html> | |||||
| @@ -76,12 +76,15 @@ Options: | |||||
| -D<property>=<value> use value for given property | -D<property>=<value> use value for given property | ||||
| -propertyfile <name> load all properties from file with -D | -propertyfile <name> load all properties from file with -D | ||||
| properties taking precedence | properties taking precedence | ||||
| -inputhandler <class> the class which will handle input requests | |||||
| -find <file> search for buildfile towards the root of the | -find <file> search for buildfile towards the root of the | ||||
| filesystem and use it | filesystem and use it | ||||
| </pre> | </pre> | ||||
| <p>For more information about <code>-logger</code> and | <p>For more information about <code>-logger</code> and | ||||
| <code>-listener</code> see the section <a | <code>-listener</code> see the section <a | ||||
| href="listeners.html">Loggers & Listeners</a> | href="listeners.html">Loggers & Listeners</a> | ||||
| <p>For more information about <code>-inputhandler</code> see the | |||||
| section <a href="inputhandler.html">InputHandler</a> | |||||
| <h3>Examples</h3> | <h3>Examples</h3> | ||||
| <blockquote> | <blockquote> | ||||
| <pre>ant</pre> | <pre>ant</pre> | ||||
| @@ -740,6 +740,7 @@ public class Main { | |||||
| msg.append(" -D<property>=<value> use value for given property" + lSep); | msg.append(" -D<property>=<value> use value for given property" + lSep); | ||||
| msg.append(" -propertyfile <name> load all properties from file with -D" + lSep); | msg.append(" -propertyfile <name> load all properties from file with -D" + lSep); | ||||
| msg.append(" properties taking precedence" + lSep); | msg.append(" properties taking precedence" + lSep); | ||||
| msg.append(" -inputhandler <class> the class which will handle input requests" + lSep); | |||||
| msg.append(" -find <file> search for buildfile towards the root of the" + lSep); | msg.append(" -find <file> search for buildfile towards the root of the" + lSep); | ||||
| msg.append(" filesystem and use it" + lSep); | msg.append(" filesystem and use it" + lSep); | ||||
| System.out.println(msg.toString()); | System.out.println(msg.toString()); | ||||