git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@936382 13f79535-47bb-0310-9956-ffa450edef68master
@@ -141,6 +141,9 @@ Other changes: | |||
* <mappedresources> supports new attributes enablemultiplemappings | |||
and cache. | |||
* Added the augment task to manipulate existing references via Ant's basic | |||
introspection mechanisms. | |||
Changes from Ant 1.8.0RC1 TO Ant 1.8.0 | |||
====================================== | |||
@@ -0,0 +1,83 @@ | |||
<!-- | |||
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 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> | |||
<fileset id="input-fs" dir="${basedir}" /> | |||
</pre> | |||
<pre> | |||
<augment id="input-fs" excludes="foo" /> | |||
</pre> | |||
<p>Modifies the <code>excludes</code> attribute of <code>input-fs</code>.</p> | |||
<pre> | |||
<augment id="input-fs"> | |||
<filename name="bar" /> | |||
</augment> | |||
</pre> | |||
<p>Adds a <code>filename</code> selector to <code>input-fs</code>.</p> | |||
</body> | |||
</html> |
@@ -41,6 +41,7 @@ | |||
<li><a href="CoreTasks/antversion.html">AntVersion</a></li> | |||
<li><a href="CoreTasks/apply.html">Apply/<i>ExecOn</i></a></li> | |||
<li><a href="CoreTasks/apt.html">Apt</a></li> | |||
<li><a href="CoreTasks/augment.html">Augment</a></li> | |||
<li><a href="CoreTasks/available.html">Available</a></li> | |||
<li><a href="CoreTasks/basename.html">Basename</a></li> | |||
<li><a href="CoreTasks/buildnumber.html">BuildNumber</a></li> | |||
@@ -0,0 +1,72 @@ | |||
/* | |||
* 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. | |||
* | |||
*/ | |||
package org.apache.tools.ant.taskdefs; | |||
import org.apache.tools.ant.RuntimeConfigurable; | |||
import org.apache.tools.ant.Task; | |||
import org.apache.tools.ant.TypeAdapter; | |||
/** | |||
* Ant task to dynamically augment a previously declared reference. | |||
* @since Ant 1.8.1 | |||
*/ | |||
public class AugmentReference extends Task implements TypeAdapter { | |||
private String id; | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
public void checkProxyClass(Class proxyClass) { | |||
} | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
public synchronized Object getProxy() { | |||
if (getProject() == null) { | |||
throw new IllegalStateException(getTaskName() + "Project owner unset"); | |||
} | |||
hijackId(); | |||
if (getProject().hasReference(id)) { | |||
Object result = getProject().getReference(id); | |||
log("project reference " + id + "=" + String.valueOf(result)); | |||
return result; | |||
} | |||
throw new IllegalStateException("Unknown reference \"" + id + "\""); | |||
} | |||
/** | |||
* {@inheritDoc} | |||
*/ | |||
public void setProxy(Object o) { | |||
throw new UnsupportedOperationException(); | |||
} | |||
private synchronized void hijackId() { | |||
if (id == null) { | |||
RuntimeConfigurable wrapper = getWrapper(); | |||
id = wrapper.getId(); | |||
if (id == null) { | |||
throw new IllegalStateException(getTaskName() + " attribute 'id' unset"); | |||
} | |||
wrapper.setAttribute("id", null); | |||
wrapper.removeAttribute("id"); | |||
wrapper.setElementTag("augmented reference \"" + id + "\""); | |||
} | |||
} | |||
} |
@@ -20,6 +20,7 @@ antstructure=org.apache.tools.ant.taskdefs.AntStructure | |||
antversion=org.apache.tools.ant.taskdefs.condition.AntVersion | |||
apply=org.apache.tools.ant.taskdefs.Transform | |||
apt=org.apache.tools.ant.taskdefs.Apt | |||
augment=org.apache.tools.ant.taskdefs.AugmentReference | |||
available=org.apache.tools.ant.taskdefs.Available | |||
basename=org.apache.tools.ant.taskdefs.Basename | |||
buildnumber=org.apache.tools.ant.taskdefs.BuildNumber | |||
@@ -0,0 +1,74 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<!-- | |||
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. | |||
--> | |||
<project name="augment-test" default="antunit" xmlns:au="antlib:org.apache.ant.antunit"> | |||
<import file="../antunit-base.xml"/> | |||
<target name="setUp"> | |||
<mkdir dir="${input}" /> | |||
<touch> | |||
<filelist id="filelist" dir="${input}" files="foo,bar,baz" /> | |||
</touch> | |||
<fileset id="input-fs" dir="${input}" /> | |||
<au:assertTrue> | |||
<resourcecount refid="input-fs" count="3" /> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test-augment-attribute" depends="setUp"> | |||
<augment id="input-fs" excludes="foo" /> | |||
<au:assertTrue> | |||
<resourcecount refid="input-fs" count="2" /> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test-augment-element" depends="setUp"> | |||
<augment id="input-fs"> | |||
<filename name="bar" /> | |||
</augment> | |||
<au:assertTrue> | |||
<resourcecount refid="input-fs" count="1" /> | |||
</au:assertTrue> | |||
</target> | |||
<target name="test-noref"> | |||
<au:expectfailure expectedMessage="Unknown reference "nosuchreference""> | |||
<augment id="nosuchreference" /> | |||
</au:expectfailure> | |||
</target> | |||
<target name="test-id-not-set"> | |||
<au:expectfailure expectedMessage="augment attribute 'id' unset"> | |||
<augment foo="bar" /> | |||
</au:expectfailure> | |||
</target> | |||
<target name="test-illegal-attribute" depends="setUp"> | |||
<au:expectfailure expectedMessage="augmented reference "input-fs" doesn't support the "filesetwillmostlikelyneversupportthisattribute" attribute"> | |||
<augment id="input-fs" filesetwillmostlikelyneversupportthisattribute="blah" /> | |||
</au:expectfailure> | |||
</target> | |||
<target name="test-illegal-element" depends="setUp"> | |||
<au:expectfailure expectedMessage="augmented reference "input-fs" doesn't support the nested "filesetwillmostlikelyneversupportthiselement" element"> | |||
<augment id="input-fs"> | |||
<filesetwillmostlikelyneversupportthiselement /> | |||
</augment> | |||
</au:expectfailure> | |||
</target> | |||
</project> |