You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by Martin Holst Swende <ma...@msc.se> on 2008/12/18 10:16:21 UTC
New iterating task
Hi all,
I have a little utility-task that I wrote because I did not find any
better alternative - but maybe I missed something obvious. So I thought
I would contribute it, if there is any interest.
Anyway, it is a kind of file iterator meant to be used on tasks that are
not written to handle multiple files. Also a few other uses, such as
manipulating and/or preserve paths and filenames in the process . Here
is how I use it :
<taskdef resource="antutilstasks" classpath="jar/antutils.jar" />
<target name="testiterate">
<iterate target="myecho">
<fileset dir="." includes="**\*.java" />
<param name="test" value="Works fine" />
</iterate>
</target>
<target name="myecho">
<echo>
Dir : ${dir}
Path : ${path}
Filename:${filename}
Extension:${extension}
Extra-param: ${test}
</echo>
</target>
What it does is, for each entry in the fileset, it calls the target
(myecho), and sets these properties : dir, path, filename, extension and
any supplied extra parameters. It just lists files, so far.
The fully qualified path is created in this manner :
dir + path + filename + "." + extension
One way of using it is if I have a dir-structure, say a photoalbum,
where thumbnails have already been generated in the same structure. If I
want to copy all thumbnails, but keep their directory structure, normal
file-copy will not suffice (since it will copy all to same directory).
But I can do this :
<target name="copythumbs">
<iterate target="mycopy">
<fileset dir="photos" includes="**\*_thumb.jpeg" />
</iterate>
</target>
<target name="mycopy">
<copy file="${dir}${path}${filename}.${extension}"
todir="thumbs/${path}"/>
</target>
The todir will retain path, and copy files into e.g
"thumbs/2008/01/21/img01_thumb.jpg" .
And if I have a task that scales images, I could set it up like this :
<target name="createthumbs">
<iterate target="mythumbgenerator">
<fileset dir="photos" includes="**\*.jpeg" />
<param name="size" value="100x100" />
</iterate>
</target>
<target name="mythumbgenerator">
<rescale file="${dir}${path}${filename}.${extension}"
outfile="thumbs/${path}${filename}_thumb.${extension}" size="${size}"/>
</target>
This way, I can iterate a task not built for it (in this case "rescale")
and be pretty flexible with the input parameters to that task.
So, have I re-invented the wheel?
Regards,
Martin Holst Swende
--
Martin Holst Swende ................. MSC Konsult AB
tel: +46(0)70 9519098 ............... Vasagatan 52
martin.holst_swende@msc.se .......... 111 20 Stockholm
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: New iterating task
Posted by Jeffrey E Care <ca...@us.ibm.com>.
Martin Holst Swende <ma...@msc.se> wrote on 12/18/2008
04:16:21 AM:
> Anyway, it is a kind of file iterator meant to be used on tasks that are
> not written to handle multiple files. Also a few other uses, such as
> manipulating and/or preserve paths and filenames in the process . Here
> is how I use it :
You'd have better luck trying to get this incorporated into Antcontrib.
Re: AW: AW: New iterating task
Posted by Martin Holst Swende <ma...@msc.se>.
That was a nice one! That one should definitely exist as well - if it
does not already exist (?) maybe I'll implement that if time permits.
Regarding getting it into antcontrib instead - that was my intention
from the beginning, guess I chose the wrong mailing list? Apologies...
/Martin
Jan.Materne@rzf.fin-nrw.de wrote:
> Ok, but these property names are fixed. What about
> <property name="dir" value="someValue"/>
> <iterate ...>
>
> The file informations could also retrieved via <basename> and <dirname>. Together with <antcontrib:var name="..." unset="true"/> these properties could be eliminated during each loop.
>
> Your task is more comfortable to use if you need the file information. But I think it should be more generic and support resource collections. Maybe only file resources. The use of a <sequential> container is also more performant than reusing <ant> or <antcall>.
> <iterate>
> <!-- Resource Collection to iterate -->
> <path ... />
> <!-- Use java.io.File methods -->
> <param name="parent" method="getParent()"/>
> <param name="name" method="getName()"/>
> <!-- Use org.apache.tools.ant.types.resources.FileResource -->
> <param name="size" method="getSize()"/>
> <sequential>
> <echo>
> The size of file '@{name}' in directory '@{parent}' is @{size} Bytes.
> </echo>
> <sequential>
> </iterate>
>
>
> http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java
> http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileProvider.java
>
>
>
> Jan
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: Martin Holst Swende [mailto:martin.holst_swende@msc.se]
>> Gesendet: Donnerstag, 18. Dezember 2008 12:45
>> An: Ant Developers List
>> Betreff: Re: AW: New iterating task
>>
>> Yes, it does.
>>
>> However, the foreach-task, to my understanding, cannot as
>> easily be used
>> in the examples I provided, since it does not provide parametrized
>> file-information (basedir, path, name and extension). Otherwise, it is
>> very similar.
>>
>> /Martin
>>
>> Jan.Materne@rzf.fin-nrw.de wrote:
>>
>>> Sound very like <antcontrib:foreach> ...
>>>
>>> Jan
>>>
>>>
>>>
>>>> -----Ursprüngliche Nachricht-----
>>>> Von: Martin Holst Swende [mailto:martin.holst_swende@msc.se]
>>>> Gesendet: Donnerstag, 18. Dezember 2008 10:16
>>>> An: Ant Developers List
>>>> Betreff: New iterating task
>>>>
>>>> Hi all,
>>>>
>>>> I have a little utility-task that I wrote because I did not
>>>>
>> find any
>>
>>>> better alternative - but maybe I missed something obvious. So
>>>> I thought
>>>> I would contribute it, if there is any interest.
>>>>
>>>> Anyway, it is a kind of file iterator meant to be used on
>>>> tasks that are
>>>> not written to handle multiple files. Also a few other
>>>>
>> uses, such as
>>
>>>> manipulating and/or preserve paths and filenames in the
>>>>
>> process . Here
>>
>>>> is how I use it :
>>>>
>>>> <taskdef resource="antutilstasks" classpath="jar/antutils.jar" />
>>>>
>>>> <target name="testiterate">
>>>> <iterate target="myecho">
>>>> <fileset dir="." includes="**\*.java" />
>>>> <param name="test" value="Works fine" />
>>>> </iterate>
>>>> </target>
>>>>
>>>> <target name="myecho">
>>>> <echo>
>>>> Dir : ${dir}
>>>> Path : ${path}
>>>> Filename:${filename}
>>>> Extension:${extension}
>>>> Extra-param: ${test}
>>>> </echo>
>>>> </target>
>>>>
>>>>
>>>> What it does is, for each entry in the fileset, it calls the target
>>>> (myecho), and sets these properties : dir, path, filename,
>>>> extension and
>>>> any supplied extra parameters. It just lists files, so far.
>>>>
>>>> The fully qualified path is created in this manner :
>>>>
>>>> dir + path + filename + "." + extension
>>>>
>>>>
>>>> One way of using it is if I have a dir-structure, say a photoalbum,
>>>> where thumbnails have already been generated in the same
>>>> structure. If I
>>>> want to copy all thumbnails, but keep their directory
>>>> structure, normal
>>>> file-copy will not suffice (since it will copy all to same
>>>>
>> directory).
>>
>>>> But I can do this :
>>>>
>>>> <target name="copythumbs">
>>>> <iterate target="mycopy">
>>>> <fileset dir="photos" includes="**\*_thumb.jpeg" />
>>>> </iterate>
>>>> </target>
>>>> <target name="mycopy">
>>>> <copy file="${dir}${path}${filename}.${extension}"
>>>> todir="thumbs/${path}"/>
>>>> </target>
>>>>
>>>> The todir will retain path, and copy files into e.g
>>>> "thumbs/2008/01/21/img01_thumb.jpg" .
>>>>
>>>> And if I have a task that scales images, I could set it up
>>>>
>> like this :
>>
>>>> <target name="createthumbs">
>>>> <iterate target="mythumbgenerator">
>>>> <fileset dir="photos" includes="**\*.jpeg" />
>>>> <param name="size" value="100x100" />
>>>> </iterate>
>>>> </target>
>>>> <target name="mythumbgenerator">
>>>> <rescale file="${dir}${path}${filename}.${extension}"
>>>> outfile="thumbs/${path}${filename}_thumb.${extension}"
>>>>
>> size="${size}"/>
>>
>>>> </target>
>>>>
>>>> This way, I can iterate a task not built for it (in this case
>>>> "rescale")
>>>> and be pretty flexible with the input parameters to that task.
>>>>
>>>> So, have I re-invented the wheel?
>>>>
>>>> Regards,
>>>> Martin Holst Swende
>>>>
>>>> --
>>>> Martin Holst Swende ................. MSC Konsult AB
>>>> tel: +46(0)70 9519098 ............... Vasagatan 52
>>>> martin.holst_swende@msc.se .......... 111 20 Stockholm
>>>>
>>>>
>>>>
>>>>
>>>>
>> ---------------------------------------------------------------------
>>
>>>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>>>> For additional commands, e-mail: dev-help@ant.apache.org
>>>>
>>>>
>>>>
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: dev-help@ant.apache.org
>>>
>>>
>>>
>> --
>> Martin Holst Swende ................. MSC Konsult AB
>> tel: +46(0)70 9519098 ............... Vasagatan 52
>> martin.holst_swende@msc.se .......... 111 20 Stockholm
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>> For additional commands, e-mail: dev-help@ant.apache.org
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org
>
>
--
Martin Holst Swende ................. MSC Konsult AB
tel: +46(0)70 9519098 ............... Vasagatan 52
martin.holst_swende@msc.se .......... 111 20 Stockholm
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
AW: AW: New iterating task
Posted by Ja...@rzf.fin-nrw.de.
Ok, but these property names are fixed. What about
<property name="dir" value="someValue"/>
<iterate ...>
The file informations could also retrieved via <basename> and <dirname>. Together with <antcontrib:var name="..." unset="true"/> these properties could be eliminated during each loop.
Your task is more comfortable to use if you need the file information. But I think it should be more generic and support resource collections. Maybe only file resources. The use of a <sequential> container is also more performant than reusing <ant> or <antcall>.
<iterate>
<!-- Resource Collection to iterate -->
<path ... />
<!-- Use java.io.File methods -->
<param name="parent" method="getParent()"/>
<param name="name" method="getName()"/>
<!-- Use org.apache.tools.ant.types.resources.FileResource -->
<param name="size" method="getSize()"/>
<sequential>
<echo>
The size of file '@{name}' in directory '@{parent}' is @{size} Bytes.
</echo>
<sequential>
</iterate>
http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileResource.java
http://svn.apache.org/repos/asf/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/FileProvider.java
Jan
>-----Ursprüngliche Nachricht-----
>Von: Martin Holst Swende [mailto:martin.holst_swende@msc.se]
>Gesendet: Donnerstag, 18. Dezember 2008 12:45
>An: Ant Developers List
>Betreff: Re: AW: New iterating task
>
>Yes, it does.
>
>However, the foreach-task, to my understanding, cannot as
>easily be used
>in the examples I provided, since it does not provide parametrized
>file-information (basedir, path, name and extension). Otherwise, it is
>very similar.
>
>/Martin
>
>Jan.Materne@rzf.fin-nrw.de wrote:
>> Sound very like <antcontrib:foreach> ...
>>
>> Jan
>>
>>
>>> -----Ursprüngliche Nachricht-----
>>> Von: Martin Holst Swende [mailto:martin.holst_swende@msc.se]
>>> Gesendet: Donnerstag, 18. Dezember 2008 10:16
>>> An: Ant Developers List
>>> Betreff: New iterating task
>>>
>>> Hi all,
>>>
>>> I have a little utility-task that I wrote because I did not
>find any
>>> better alternative - but maybe I missed something obvious. So
>>> I thought
>>> I would contribute it, if there is any interest.
>>>
>>> Anyway, it is a kind of file iterator meant to be used on
>>> tasks that are
>>> not written to handle multiple files. Also a few other
>uses, such as
>>> manipulating and/or preserve paths and filenames in the
>process . Here
>>> is how I use it :
>>>
>>> <taskdef resource="antutilstasks" classpath="jar/antutils.jar" />
>>>
>>> <target name="testiterate">
>>> <iterate target="myecho">
>>> <fileset dir="." includes="**\*.java" />
>>> <param name="test" value="Works fine" />
>>> </iterate>
>>> </target>
>>>
>>> <target name="myecho">
>>> <echo>
>>> Dir : ${dir}
>>> Path : ${path}
>>> Filename:${filename}
>>> Extension:${extension}
>>> Extra-param: ${test}
>>> </echo>
>>> </target>
>>>
>>>
>>> What it does is, for each entry in the fileset, it calls the target
>>> (myecho), and sets these properties : dir, path, filename,
>>> extension and
>>> any supplied extra parameters. It just lists files, so far.
>>>
>>> The fully qualified path is created in this manner :
>>>
>>> dir + path + filename + "." + extension
>>>
>>>
>>> One way of using it is if I have a dir-structure, say a photoalbum,
>>> where thumbnails have already been generated in the same
>>> structure. If I
>>> want to copy all thumbnails, but keep their directory
>>> structure, normal
>>> file-copy will not suffice (since it will copy all to same
>directory).
>>> But I can do this :
>>>
>>> <target name="copythumbs">
>>> <iterate target="mycopy">
>>> <fileset dir="photos" includes="**\*_thumb.jpeg" />
>>> </iterate>
>>> </target>
>>> <target name="mycopy">
>>> <copy file="${dir}${path}${filename}.${extension}"
>>> todir="thumbs/${path}"/>
>>> </target>
>>>
>>> The todir will retain path, and copy files into e.g
>>> "thumbs/2008/01/21/img01_thumb.jpg" .
>>>
>>> And if I have a task that scales images, I could set it up
>like this :
>>>
>>> <target name="createthumbs">
>>> <iterate target="mythumbgenerator">
>>> <fileset dir="photos" includes="**\*.jpeg" />
>>> <param name="size" value="100x100" />
>>> </iterate>
>>> </target>
>>> <target name="mythumbgenerator">
>>> <rescale file="${dir}${path}${filename}.${extension}"
>>> outfile="thumbs/${path}${filename}_thumb.${extension}"
>size="${size}"/>
>>> </target>
>>>
>>> This way, I can iterate a task not built for it (in this case
>>> "rescale")
>>> and be pretty flexible with the input parameters to that task.
>>>
>>> So, have I re-invented the wheel?
>>>
>>> Regards,
>>> Martin Holst Swende
>>>
>>> --
>>> Martin Holst Swende ................. MSC Konsult AB
>>> tel: +46(0)70 9519098 ............... Vasagatan 52
>>> martin.holst_swende@msc.se .......... 111 20 Stockholm
>>>
>>>
>>>
>>>
>---------------------------------------------------------------------
>>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>>> For additional commands, e-mail: dev-help@ant.apache.org
>>>
>>>
>>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>> For additional commands, e-mail: dev-help@ant.apache.org
>>
>>
>
>
>--
>Martin Holst Swende ................. MSC Konsult AB
>tel: +46(0)70 9519098 ............... Vasagatan 52
>martin.holst_swende@msc.se .......... 111 20 Stockholm
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>For additional commands, e-mail: dev-help@ant.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
Re: AW: New iterating task
Posted by Martin Holst Swende <ma...@msc.se>.
Yes, it does.
However, the foreach-task, to my understanding, cannot as easily be used
in the examples I provided, since it does not provide parametrized
file-information (basedir, path, name and extension). Otherwise, it is
very similar.
/Martin
Jan.Materne@rzf.fin-nrw.de wrote:
> Sound very like <antcontrib:foreach> ...
>
> Jan
>
>
>> -----Ursprüngliche Nachricht-----
>> Von: Martin Holst Swende [mailto:martin.holst_swende@msc.se]
>> Gesendet: Donnerstag, 18. Dezember 2008 10:16
>> An: Ant Developers List
>> Betreff: New iterating task
>>
>> Hi all,
>>
>> I have a little utility-task that I wrote because I did not find any
>> better alternative - but maybe I missed something obvious. So
>> I thought
>> I would contribute it, if there is any interest.
>>
>> Anyway, it is a kind of file iterator meant to be used on
>> tasks that are
>> not written to handle multiple files. Also a few other uses, such as
>> manipulating and/or preserve paths and filenames in the process . Here
>> is how I use it :
>>
>> <taskdef resource="antutilstasks" classpath="jar/antutils.jar" />
>>
>> <target name="testiterate">
>> <iterate target="myecho">
>> <fileset dir="." includes="**\*.java" />
>> <param name="test" value="Works fine" />
>> </iterate>
>> </target>
>>
>> <target name="myecho">
>> <echo>
>> Dir : ${dir}
>> Path : ${path}
>> Filename:${filename}
>> Extension:${extension}
>> Extra-param: ${test}
>> </echo>
>> </target>
>>
>>
>> What it does is, for each entry in the fileset, it calls the target
>> (myecho), and sets these properties : dir, path, filename,
>> extension and
>> any supplied extra parameters. It just lists files, so far.
>>
>> The fully qualified path is created in this manner :
>>
>> dir + path + filename + "." + extension
>>
>>
>> One way of using it is if I have a dir-structure, say a photoalbum,
>> where thumbnails have already been generated in the same
>> structure. If I
>> want to copy all thumbnails, but keep their directory
>> structure, normal
>> file-copy will not suffice (since it will copy all to same directory).
>> But I can do this :
>>
>> <target name="copythumbs">
>> <iterate target="mycopy">
>> <fileset dir="photos" includes="**\*_thumb.jpeg" />
>> </iterate>
>> </target>
>> <target name="mycopy">
>> <copy file="${dir}${path}${filename}.${extension}"
>> todir="thumbs/${path}"/>
>> </target>
>>
>> The todir will retain path, and copy files into e.g
>> "thumbs/2008/01/21/img01_thumb.jpg" .
>>
>> And if I have a task that scales images, I could set it up like this :
>>
>> <target name="createthumbs">
>> <iterate target="mythumbgenerator">
>> <fileset dir="photos" includes="**\*.jpeg" />
>> <param name="size" value="100x100" />
>> </iterate>
>> </target>
>> <target name="mythumbgenerator">
>> <rescale file="${dir}${path}${filename}.${extension}"
>> outfile="thumbs/${path}${filename}_thumb.${extension}" size="${size}"/>
>> </target>
>>
>> This way, I can iterate a task not built for it (in this case
>> "rescale")
>> and be pretty flexible with the input parameters to that task.
>>
>> So, have I re-invented the wheel?
>>
>> Regards,
>> Martin Holst Swende
>>
>> --
>> Martin Holst Swende ................. MSC Konsult AB
>> tel: +46(0)70 9519098 ............... Vasagatan 52
>> martin.holst_swende@msc.se .......... 111 20 Stockholm
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>> For additional commands, e-mail: dev-help@ant.apache.org
>>
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
> For additional commands, e-mail: dev-help@ant.apache.org
>
>
--
Martin Holst Swende ................. MSC Konsult AB
tel: +46(0)70 9519098 ............... Vasagatan 52
martin.holst_swende@msc.se .......... 111 20 Stockholm
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org
AW: New iterating task
Posted by Ja...@rzf.fin-nrw.de.
Sound very like <antcontrib:foreach> ...
Jan
>-----Ursprüngliche Nachricht-----
>Von: Martin Holst Swende [mailto:martin.holst_swende@msc.se]
>Gesendet: Donnerstag, 18. Dezember 2008 10:16
>An: Ant Developers List
>Betreff: New iterating task
>
>Hi all,
>
>I have a little utility-task that I wrote because I did not find any
>better alternative - but maybe I missed something obvious. So
>I thought
>I would contribute it, if there is any interest.
>
>Anyway, it is a kind of file iterator meant to be used on
>tasks that are
>not written to handle multiple files. Also a few other uses, such as
>manipulating and/or preserve paths and filenames in the process . Here
>is how I use it :
>
> <taskdef resource="antutilstasks" classpath="jar/antutils.jar" />
>
> <target name="testiterate">
> <iterate target="myecho">
> <fileset dir="." includes="**\*.java" />
> <param name="test" value="Works fine" />
> </iterate>
> </target>
>
> <target name="myecho">
> <echo>
> Dir : ${dir}
> Path : ${path}
> Filename:${filename}
> Extension:${extension}
> Extra-param: ${test}
> </echo>
> </target>
>
>
>What it does is, for each entry in the fileset, it calls the target
>(myecho), and sets these properties : dir, path, filename,
>extension and
>any supplied extra parameters. It just lists files, so far.
>
>The fully qualified path is created in this manner :
>
>dir + path + filename + "." + extension
>
>
>One way of using it is if I have a dir-structure, say a photoalbum,
>where thumbnails have already been generated in the same
>structure. If I
>want to copy all thumbnails, but keep their directory
>structure, normal
>file-copy will not suffice (since it will copy all to same directory).
>But I can do this :
>
> <target name="copythumbs">
> <iterate target="mycopy">
> <fileset dir="photos" includes="**\*_thumb.jpeg" />
> </iterate>
> </target>
> <target name="mycopy">
> <copy file="${dir}${path}${filename}.${extension}"
>todir="thumbs/${path}"/>
> </target>
>
>The todir will retain path, and copy files into e.g
>"thumbs/2008/01/21/img01_thumb.jpg" .
>
>And if I have a task that scales images, I could set it up like this :
>
> <target name="createthumbs">
> <iterate target="mythumbgenerator">
> <fileset dir="photos" includes="**\*.jpeg" />
> <param name="size" value="100x100" />
> </iterate>
> </target>
> <target name="mythumbgenerator">
> <rescale file="${dir}${path}${filename}.${extension}"
>outfile="thumbs/${path}${filename}_thumb.${extension}" size="${size}"/>
> </target>
>
>This way, I can iterate a task not built for it (in this case
>"rescale")
>and be pretty flexible with the input parameters to that task.
>
>So, have I re-invented the wheel?
>
>Regards,
>Martin Holst Swende
>
>--
>Martin Holst Swende ................. MSC Konsult AB
>tel: +46(0)70 9519098 ............... Vasagatan 52
>martin.holst_swende@msc.se .......... 111 20 Stockholm
>
>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
>For additional commands, e-mail: dev-help@ant.apache.org
>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org