I am staggering under the weight of this (in a good
way). It looks cool. :) This is exactly the type of
thing I had hoped would just occur to us after we got
the resources stuff in place. Great work, Steve. :)
-Matt
--- stevel@apache.org wrote:
> Author: stevel
> Date: Fri Apr 27 07:37:56 2007
> New Revision: 533121
>
> URL:
> http://svn.apache.org/viewvc?view=rev&rev=533121
> Log:
> Bug #41597; scriptdef should be resource-enabled.
>
> Added:
>
>
ant/core/trunk/src/tests/antunit/taskdefs/optional/script/
>
>
ant/core/trunk/src/tests/antunit/taskdefs/optional/script/scriptdef-test.xml
> Modified:
> ant/core/trunk/WHATSNEW
>
>
ant/core/trunk/docs/manual/OptionalTasks/scriptdef.html
>
>
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java
>
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerBase.java
>
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerHelper.java
>
> Modified: ant/core/trunk/WHATSNEW
> URL:
>
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=533121&r1=533120&r2=533121
>
==============================================================================
> --- ant/core/trunk/WHATSNEW (original)
> +++ ant/core/trunk/WHATSNEW Fri Apr 27 07:37:56 2007
> @@ -4,6 +4,11 @@
> Changes that could break older environments:
> -------------------------------------------
>
> +* String resources only have properties single
> expanded. If you relied on
> + <string> resources being expanded more than once,
> it no longer happens.
> + Bugzilla report 42277.
> +
> +
> Fixed bugs:
> -----------
> * Error in handling of some permissions, most
> notably the AllPermission on
> @@ -102,6 +107,11 @@
> * <manifest> checks for validity of attribute
> names.
>
> * JUnitVersionHelper.getTestCaseClassName is now
> public. Bugzilla 42231
> +
> +* <string> resource supports nested text. Bugzilla
> bug 42276
> +
> +* <scriptdef> now sources scripts from nested
> resources/resource collections. This lets you
> + define scripts in JARs, remote URLs, or any other
> supported resource. Bugzilla report 41597.
>
>
> Changes from Ant 1.6.5 to Ant 1.7.0
>
> Modified:
>
ant/core/trunk/docs/manual/OptionalTasks/scriptdef.html
> URL:
>
http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/OptionalTasks/scriptdef.html?view=diff&rev=533121&r1=533120&r2=533121
>
==============================================================================
> ---
>
ant/core/trunk/docs/manual/OptionalTasks/scriptdef.html
> (original)
> +++
>
ant/core/trunk/docs/manual/OptionalTasks/scriptdef.html
> Fri Apr 27 07:37:56 2007
> @@ -190,6 +190,13 @@
>
> <code>type="antlib:example.org:newtype"</code></td>
> <td valign="top" align="center">No</td>
> </tr>
> + <tr>
> + <td valign="top">any resource or resource
> collection</td>
> + <td valign="top">Since Ant1.7.1, this task can
> load scripts
> + from any resource supplied as a nested element.
> when </td>
> + <td valign="top" align="center">No</td>
> + </tr>
> +
> </table>
>
> <h4>classpath</h4>
> @@ -197,6 +204,7 @@
> See the <a
> href="../OptionalTasks/script.html">script</a> task
> for using this nested element.
> </p>
> +
>
> <h3>Examples</h3>
>
>
> Modified:
>
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java
> URL:
>
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java?view=diff&rev=533121&r1=533120&r2=533121
>
==============================================================================
> ---
>
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java
> (original)
> +++
>
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/script/ScriptDef.java
> Fri Apr 27 07:37:56 2007
> @@ -23,6 +23,8 @@
> import org.apache.tools.ant.MagicNames;
> import org.apache.tools.ant.BuildException;
> import org.apache.tools.ant.ProjectHelper;
> +import org.apache.tools.ant.types.Resource;
> +import
> org.apache.tools.ant.types.ResourceCollection;
> import org.apache.tools.ant.taskdefs.DefBase;
>
> import java.util.Map;
> @@ -250,25 +252,34 @@
> }
>
> // find the script repository - it is
> stored in the project
> + Map scriptRepository =
> lookupScriptRepository();
> + name =
> ProjectHelper.genComponentName(getURI(), name);
> + scriptRepository.put(name, this);
> + AntTypeDefinition def = new
> AntTypeDefinition();
> + def.setName(name);
> + def.setClass(ScriptDefBase.class);
> + ComponentHelper.getComponentHelper(
> +
> getProject()).addDataTypeDefinition(def);
> + }
> +
> + /**
> + * Find or create the script repository - it is
> stored in the project.
> + * This method is synchronized on the project
> under {@link MagicNames#SCRIPT_REPOSITORY}
> + * @return the current script repository
> registered as a refrence.
> + */
> + private Map lookupScriptRepository() {
> Map scriptRepository = null;
> Project p = getProject();
> synchronized (p) {
> scriptRepository =
> - (Map)
> p.getReference(MagicNames.SCRIPT_REPOSITORY);
> + (Map)
> p.getReference(MagicNames.SCRIPT_REPOSITORY);
> if (scriptRepository == null) {
> scriptRepository = new HashMap();
>
> p.addReference(MagicNames.SCRIPT_REPOSITORY,
> - scriptRepository);
> + scriptRepository);
> }
> }
> -
> - name =
> ProjectHelper.genComponentName(getURI(), name);
> - scriptRepository.put(name, this);
> - AntTypeDefinition def = new
> AntTypeDefinition();
> - def.setName(name);
> - def.setClass(ScriptDefBase.class);
> - ComponentHelper.getComponentHelper(
> -
> getProject()).addDataTypeDefinition(def);
> + return scriptRepository;
> }
>
> /**
> @@ -381,6 +392,15 @@
> */
> public void addText(String text) {
> helper.addText(text);
> + }
> +
> + /**
> + * Add any source resource.
> + * @since Ant1.7.1
> + * @param resource source of script
> + */
> + public void add(ResourceCollection resource) {
> + helper.add(resource);
> }
> }
>
>
> Modified:
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerBase.java
> URL:
>
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerBase.java?view=diff&rev=533121&r1=533120&r2=533121
>
==============================================================================
> ---
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerBase.java
> (original)
> +++
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerBase.java
> Fri Apr 27 07:37:56 2007
> @@ -21,10 +21,16 @@
> import java.io.File;
> import java.io.FileReader;
> import java.io.IOException;
> +import java.io.InputStream;
> +import java.io.Reader;
> +import java.io.FileNotFoundException;
> +import java.io.InputStreamReader;
>
> import org.apache.tools.ant.BuildException;
> import org.apache.tools.ant.ProjectComponent;
> import org.apache.tools.ant.Project;
> +import org.apache.tools.ant.types.Resource;
> +import
> org.apache.tools.ant.types.ResourceCollection;
>
> import java.util.Map;
> import java.util.HashMap;
> @@ -186,27 +192,76 @@
> * @param file the file containing the script
> source.
> */
> public void setSrc(File file) {
> + String filename = file.getPath();
> if (!file.exists()) {
> - throw new BuildException("file " +
> file.getPath() + " not found.");
> + throw new BuildException("file " +
> filename + " not found.");
> }
> + try {
> + readSource(new FileReader(file),
> filename);
> + } catch (FileNotFoundException e) {
> + //this can only happen if the file got
> deleted a short moment ago
> + throw new BuildException("file " +
> filename + " not found.");
> + }
> + }
> +
> + /**
> + * Read some source in from the given reader
> + * @param reader the reader; this is closed
> afterwards.
> + * @param name the name to use in error
> messages
> + */
> + private void readSource(Reader reader, String
> name) {
> BufferedReader in = null;
> try {
> - in = new BufferedReader(new
> FileReader(file));
> + in = new BufferedReader(reader);
> script += FileUtils.readFully(in);
> } catch (IOException ex) {
> - throw new BuildException(ex);
> + throw new BuildException("Failed to
> read "+ name,ex);
> } finally {
> FileUtils.close(in);
> }
> }
>
> +
> + /**
> + * Add a resource to the source list.
> + * @since Ant 1.7.1
> + * @param sourceResource the resource to load
> + * @throws BuildException if the resource
> cannot be read
> + */
> + public void loadResource(Resource
> sourceResource) {
> + String name =
> sourceResource.toLongString();
> + InputStream in = null;
> + try {
> + in = sourceResource.getInputStream();
> + } catch (IOException e) {
> + throw new BuildException("Failed to
> open "+name,e);
> + } catch (UnsupportedOperationException e) {
> + throw new BuildException("Failed to
> open " + name+ " -it is not readable",e);
> + }
> + readSource(new InputStreamReader(in),
> name);
> + }
> +
> + /**
> + * Add all resources in a resource collection
> to the source list.
> + * @since Ant 1.7.1
> + * @param collection the resource to load
> + * @throws BuildException if a resource cannot
> be read
> + */
> + public void loadResources(ResourceCollection
> collection) {
> + Iterator resources = collection.iterator();
> + while (resources.hasNext()) {
> + Resource resource = (Resource)
> resources.next();
> + loadResource(resource);
> + }
> + }
> +
> /**
> - * Set the script text.
> + * Set the script text. Properties in the text
> are not expanded!
> *
> * @param text a component of the script text
> to be added.
> */
> public void addText(String text) {
> - this.script += text;
> + script += text;
> }
>
> /**
>
> Modified:
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerHelper.java
> URL:
>
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerHelper.java?view=diff&rev=533121&r1=533120&r2=533121
>
==============================================================================
> ---
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerHelper.java
> (original)
> +++
>
ant/core/trunk/src/main/org/apache/tools/ant/util/ScriptRunnerHelper.java
> Fri Apr 27 07:37:56 2007
> @@ -21,6 +21,9 @@
> import org.apache.tools.ant.types.Path;
> import java.io.File;
> import org.apache.tools.ant.types.Reference;
> +import org.apache.tools.ant.types.Resource;
> +import
> org.apache.tools.ant.types.ResourceCollection;
> +import org.apache.tools.ant.types.resources.Union;
>
>
> /**
> @@ -36,6 +39,7 @@
> private boolean setBeans = true;
> private ProjectComponent projectComponent;
> private ClassLoader scriptLoader = null;
> + private Union resources=new Union();
>
> /**
> * Set the project component associated with
> this helper.
> @@ -57,6 +61,9 @@
> if (text != null) {
> runner.addText(text);
> }
> + if (resources !=null) {
> + runner.loadResources(resources);
> + }
> if (setBeans) {
>
> runner.bindToComponent(projectComponent);
> } else {
> @@ -187,5 +194,15 @@
> return new ScriptRunnerCreator(
>
> projectComponent.getProject()).createRunner(
> manager, language,
> generateClassLoader());
> + }
> +
> + /**
> + * Add any source resource.
> + *
> + * @param resource source of script
> + * @since Ant1.7.1
> + */
> + public void add(ResourceCollection resource) {
> + resources.add(resource);
> }
> }
>
> Added:
>
ant/core/trunk/src/tests/antunit/taskdefs/optional/script/scriptdef-test.xml
> URL:
>
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/taskdefs/optional/script/scriptdef-test.xml?view=auto&rev=533121
>
==============================================================================
> ---
>
ant/core/trunk/src/tests/antunit/taskdefs/optional/script/scriptdef-test.xml
> (added)
> +++
>
ant/core/trunk/src/tests/antunit/taskdefs/optional/script/scriptdef-test.xml
> Fri Apr 27 07:37:56 2007
> @@ -0,0 +1,99 @@
> +<project default="test"
> xmlns:au="antlib:org.apache.ant.antunit">
> +
> + <description>
> + In which we test interesting aspects of
> scripting.
> + The targeted language is javascript; this lets
> us run without
> + additions on Java6+.
> + </description>
> +
> + <target name="test">
> + <au:antunit>
> + <fileset file="${ant.file}"/>
> + <au:plainlistener/>
> + </au:antunit>
> + </target>
> +
> + <target name="tearDown">
> + </target>
> +
> + <property name="script.manager" value="auto" />
> +
> + <string id="script.code">
> + self.log("Ant version =${ant.version}");
> + project.setNewProperty("property","live");
> + </string>
> +
> + <presetdef name="js">
> + <scriptdef language="javascript"
> name="scripttest"
> + manager="${script.manager}">
> + <!-- optional property attribute-->
> + <attribute name="property" />
> + </scriptdef>
> + </presetdef>
> +
> + <property name="prop"
> + value='self.log("Ant version
>
=${ant.version}");project.setNewProperty("property","live");'
> />
> +
> +
> + <presetdef name="assertPropSet">
> + <au:assertPropertyEquals name="property"
> value="live" />
> + </presetdef>
> +
> +
> + <!--purely to test that everything works -->
> + <target name="testInline">
> + <js > self.log("Hello");</js>
> + <scripttest/>
> + </target>
> +
> +
> + <target name="testStringResource">
> + <js >
> + <string value='self.log("Ant version
> =${ant.version}");' />
> + </js>
> + <scripttest/>
> + </target>
> +
> +
> +
> + <target name="testStringResourceRef">
> + <js >
> + <string refid="script.code" />
> + </js>
> + <scripttest/>
> + <assertPropSet />
> + </target>
> +
> + <target name="testStringResourceInline">
> + <js >
> + <string >
> + self.log("Ant version =${ant.version}");
> + project.setNewProperty("property","live");
> + </string>
> + </js>
> + <scripttest/>
> + <assertPropSet />
> + </target>
> +
> +
> + <target name="testPropertyResource">
> + <js>
> + <propertyresource name="prop" />
> + </js>
> + <scripttest/>
> + <assertPropSet />
> + </target>
> +
> + <target name="testMixedResources">
> + <js >
> + <string refid="script.code" />
> + <propertyresource name="prop" />
> + <string >
> + project.setNewProperty("property2","live");
> + </string>
> + </js>
> + <scripttest/>
> + <assertPropSet name="property2" />
> + </target>
> +
> +</project>
>
>
>
>
---------------------------------------------------------------------
> To unsubscribe, e-mail:
> dev-unsubscribe@ant.apache.org
> For additional commands, e-mail:
> dev-help@ant.apache.org
>
>
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
|