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()); | ||||