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 | |||
BZip2 alogrithm. | |||
* New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, <input>, | |||
* New tasks <replaceregexp>, <checksum>, <translate>, <waitfor>, | |||
<manifest>, <vsscp>, <vssadd>, <vsscreate>, <splash>, <basename>, <dirname>, | |||
<concat>. | |||
@@ -329,6 +329,14 @@ Other changes: | |||
to the formatters (instead of sending it to the formatters | |||
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 | |||
=========================================== | |||
@@ -9,19 +9,23 @@ | |||
<h2><a name="input">Input</a></h2> | |||
<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> | |||
<table border="1" cellpadding="2" cellspacing="0"> | |||
<tr> | |||
@@ -31,37 +35,44 @@ cannot be overriden.</p> | |||
</tr> | |||
<tr> | |||
<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> | |||
</tr> | |||
<tr> | |||
<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> | |||
</tr> | |||
<tr> | |||
<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> | |||
</tr> | |||
</table> | |||
<h3>Examples</h3> | |||
<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> | |||
<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 | |||
message="Press Return key to continue..." | |||
/></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> | |||
<input | |||
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> | |||
<fail if="do.abort">Build aborted by user.</fail> | |||
</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 | |||
message="Please enter db-username:" | |||
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> | |||
<hr> | |||
<p align="center">Copyright © 2001 Apache Software Foundation. All rights | |||
<p align="center">Copyright © 2001-2002 Apache Software Foundation. All rights | |||
Reserved.</p> | |||
</body> | |||
</html> |
@@ -15,6 +15,7 @@ | |||
<a href="develop.html#writingowntask">Writing Your Own Task</a><br> | |||
<a href="develop.html#buildevents">Build Events</a><br> | |||
<a href="develop.html#integration">Source-code Integration</a><br> | |||
<a href="inputhandler.html">InputHandler</a><br> | |||
</body> | |||
</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 | |||
-propertyfile <name> load all properties from file with -D | |||
properties taking precedence | |||
-inputhandler <class> the class which will handle input requests | |||
-find <file> search for buildfile towards the root of the | |||
filesystem and use it | |||
</pre> | |||
<p>For more information about <code>-logger</code> and | |||
<code>-listener</code> see the section <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> | |||
<blockquote> | |||
<pre>ant</pre> | |||
@@ -740,6 +740,7 @@ public class Main { | |||
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(" 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(" filesystem and use it" + lSep); | |||
System.out.println(msg.toString()); | |||