<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You under the Apache License, Version 2.0
   (the "License"); you may not use this file except in compliance with
   the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->
<html>

<head>
<meta http-equiv="Content-Language" content="en-us">
<link rel="stylesheet" type="text/css" href="../stylesheets/style.css">
<title>Augment Task</title>
</head>

<body>

<h2>Augment</h2>

<h3>Description</h3>
<p>Modify an existing reference by adding nested elements or (re-)assigning properties
mapped as XML attributes. This is an unusual task that makes use of Ant's internal
processing mechanisms to reload a previously declared reference by means of the 'id'
attribute, then treats the declared <code>augment</code> element as though it were the
original element.
<b>Since Apache Ant 1.8.1</b></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">id</td>
    <td valign="top">The id of the reference to augment. If no such reference has
      been declared a <code>BuildException</code> is generated.</td>
    <td valign="top" align="center">Yes</td>
  </tr>
</table>
<p>
Additional permissible attributes are dependent on the reference to be modified.
</p>

<h3>Parameters specified as nested elements</h3>

<p>
Permissible nested elements are dependent on the reference to be modified.
</p>

<h3>Examples</h3>

Given
<pre>
  &lt;fileset id="input-fs" dir="${basedir}" /&gt;
</pre>

<pre>
  &lt;augment id="input-fs" excludes="foo" /&gt;
</pre>

<p>Modifies the <code>excludes</code> attribute of <code>input-fs</code>.</p>

<pre>
  &lt;augment id="input-fs"&gt;
    &lt;filename name="bar" /&gt;
  &lt;/augment&gt;
</pre>

<p>Adds a <code>filename</code> selector to <code>input-fs</code>.</p>

</body>
</html>
