You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by st...@apache.org on 2007/04/27 16:37:57 UTC

svn commit: r533121 - in /ant/core/trunk: ./ docs/manual/OptionalTasks/ src/main/org/apache/tools/ant/taskdefs/optional/script/ src/main/org/apache/tools/ant/util/ src/tests/antunit/taskdefs/optional/script/

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


Re: svn commit: r533121 - in /ant/core/trunk: ./ docs/manual/OptionalTasks/ src/main/org/apache/tools/ant/taskdefs/optional/script/ src/main/org/apache/tools/ant/util/ src/tests/antunit/taskdefs/optional/script/

Posted by Matt Benson <gu...@yahoo.com>.
--- Steve Loughran <st...@apache.org> wrote:

> Matt Benson wrote:
> > 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
> 
> oh, the basic code was easy. testing javascript, now
> that was hard, then 
> there was adjusting <string> so that I could write
> scripts inside it. 
> All the heavy lifting is done for me in the resource
> classes.
> 

Yeah, by "weight" I just meant it's a great example of
how much can be accomplished here.

-Matt

>
---------------------------------------------------------------------
> 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


Re: svn commit: r533121 - in /ant/core/trunk: ./ docs/manual/OptionalTasks/ src/main/org/apache/tools/ant/taskdefs/optional/script/ src/main/org/apache/tools/ant/util/ src/tests/antunit/taskdefs/optional/script/

Posted by Steve Loughran <st...@apache.org>.
Matt Benson wrote:
> 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

oh, the basic code was easy. testing javascript, now that was hard, then 
there was adjusting <string> so that I could write scripts inside it. 
All the heavy lifting is done for me in the resource classes.

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Re: svn commit: r533121 - in /ant/core/trunk: ./ docs/manual/OptionalTasks/ src/main/org/apache/tools/ant/taskdefs/optional/script/ src/main/org/apache/tools/ant/util/ src/tests/antunit/taskdefs/optional/script/

Posted by Matt Benson <gu...@yahoo.com>.
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