oh, ok.  That takes care of David's needs,
I would think.

Cheers,
Magesh

----- Original Message -----
From: "peter reilly" <[EMAIL PROTECTED]>
To: "Ant Developers List" <[EMAIL PROTECTED]>
Sent: Wednesday, May 28, 2003 7:38 AM
Subject: Re: copy task addition


I do not think this is a good idea. It will
add @property@ to ${property} as a way
for dealing with properties.

This could be a custom filter or nearly
the same behaviour could be achieved by
using replaceregex and expandproperties:

      <filterchain>
        <replaceregex pattern="@([EMAIL PROTECTED])@" replace="${\1}" 
flags="g"/>
        <expandproperties/>
      </filterchain>

(when I fix the bug with regex handling of $)

Peter

On Wednesday 28 May 2003 12:22, Magesh Umasankar wrote:
> I will take a look at commiting it in the next few days...
>
> ----- Original Message -----
> From: David Kavanagh
> To: Ant Developers List
> Sent: Wednesday, May 28, 2003 1:52 AM
> Subject: Re: copy task addition
>
>
> OK, so I made a FilterProperties class that does the token filtering like
I
> wanted. I've attached the code for that class and the diff for the
> FilterChain.java file.
> In the <copy> task, you can now use
>
> <filterchain>
>     <filterproperties/>
> </filterchain>
>
> and filter for tokens of the form @token@ based on the project properties.
> As a refresher, I needed this because I wanted to read properties from
> ${user.dir} and ${base.dir} and use the same @token@ notation.
> What's the chance this could be added to the next release. It is pretty
> harmless.
>
> David
>
> Stefan Bodewig wrote:
>
> On Tue, 27 May 2003, David Kavanagh <[EMAIL PROTECTED]> wrote:
>
>
> My stuff must function differently,
>
>
> <expandproperties/> will replace ${foo} style constructs while you
> need to replace @foo@ IIUC.
>
>
> but I can see that implementing it as a filterchain option would be
> better than the attribute I chose to use.
>
>
> Yes, I think so.
>
> Stefan
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
>
>
>
>
> /*
>  * The Apache Software License, Version 1.1
>  *
>  * Copyright (c) 2002 The Apache Software Foundation.  All rights
>  * reserved.
>  *
>  * Redistribution and use in source and binary forms, with or without
>  * modification, are permitted provided that the following conditions
>  * are met:
>  *
>  * 1. Redistributions of source code must retain the above copyright
>  *    notice, this list of conditions and the following disclaimer.
>  *
>  * 2. Redistributions in binary form must reproduce the above copyright
>  *    notice, this list of conditions and the following disclaimer in
>  *    the documentation and/or other materials provided with the
>  *    distribution.
>  *
>  * 3. The end-user documentation included with the redistribution, if
>  *    any, must include the following acknowlegement:
>  *       "This product includes software developed by the
>  *        Apache Software Foundation (http://www.apache.org/)."
>  *    Alternately, this acknowlegement may appear in the software itself,
>  *    if and wherever such third-party acknowlegements normally appear.
>  *
>  * 4. The names "Ant" and "Apache Software
>  *    Foundation" must not be used to endorse or promote products derived
>  *    from this software without prior written permission. For written
>  *    permission, please contact [EMAIL PROTECTED]
>  *
>  * 5. Products derived from this software may not be called "Apache"
>  *    nor may "Apache" appear in their names without prior written
>  *    permission of the Apache Group.
>  *
>  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
>  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
>  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
>  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
>  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
>  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
>  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
>  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
>  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
>  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
>  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
>  * SUCH DAMAGE.
>  * ====================================================================
>  *
>  * This software consists of voluntary contributions made by many
>  * individuals on behalf of the Apache Software Foundation.  For more
>  * information on the Apache Software Foundation, please see
>  * <http://www.apache.org/>.
>  */
> package org.apache.tools.ant.filters;
>
> import java.io.IOException;
> import java.io.Reader;
> import java.util.Iterator;
> import java.util.Hashtable;
>
> import org.apache.tools.ant.Project;
> import org.apache.tools.ant.types.FilterSet;
>
> /**
>  * Expands Ant properties, if any, in the data. Derived from
> ExpandProperties,
>  * but uses FilterSet token ('@').
>  * <p>
>  * Example:<br>
>  * <pre>&lt;filterproperties/&gt;</pre>
>  * Or:
>  * <pre>&lt;filterreader
>
classname=&quot;org.apache.tools.ant.filters.FilterProperties&quot;/&gt;</p
>r e>
>  *
>  * @author David Kavanagh
>  * @author Magesh Umasankar
>  */
> public final class FilterProperties
>     extends BaseFilterReader
>     implements ChainableReader {
>     /** Data that must be read from, if not null. */
>     private String queuedData = null;
> private FilterSet props;
> private boolean inited = false;
>
>     /**
>      * Constructor for "dummy" instances.
>      *
>      * @see BaseFilterReader#BaseFilterReader()
>      */
>     public FilterProperties() {
>         super();
>     }
>
>     /**
>      * Creates a new filtered reader.
>      *
>      * @param in A Reader object providing the underlying stream.
>      *           Must not be <code>null</code>.
>      */
>     public FilterProperties(final Reader in) {
>         super(in);
>     }
>
>     /**
>      * Returns the next character in the filtered stream. The original
>      * stream is first read in fully, and the Ant properties are expanded.
>      * The results of this expansion are then queued so they can be read
>      * character-by-character.
>      *
>      * @return the next character in the resulting stream, or -1
>      * if the end of the resulting stream has been reached
>      *
>      * @exception IOException if the underlying stream throws an
> IOException * during reading
>      */
>     public final int read() throws IOException {
> if (!inited)
> init();
>
>         int ch = -1;
>
>         if (queuedData != null && queuedData.length() == 0) {
>             queuedData = null;
>         }
>
>         if (queuedData != null) {
>             ch = queuedData.charAt(0);
>             queuedData = queuedData.substring(1);
>             if (queuedData.length() == 0) {
>                 queuedData = null;
>             }
>         } else {
>             queuedData = readFully();
>             if (queuedData == null) {
>                 ch = -1;
>             } else {
>                 queuedData = props.replaceTokens(queuedData);
>                 return read();
>             }
>         }
>         return ch;
>     }
>
>     /**
>      * Creates a new FilterProperties filter using the passed in
>      * Reader for instantiation.
>      *
>      * @param rdr A Reader object providing the underlying stream.
>      *            Must not be <code>null</code>.
>      *
>      * @return a new filter based on this configuration, but filtering
>      *         the specified reader
>      */
>     public final Reader chain(final Reader rdr) {
>         FilterProperties newFilter = new FilterProperties(rdr);
>         newFilter.setProject(getProject());
>         return newFilter;
>     }
>
> /**
> * Sets up a filter set based on project properties.
> */
> private void init() {
> synchronized(this) {
> this.props = new FilterSet();
> Hashtable projectProps = getProject().getProperties();
> Iterator iter = projectProps.keySet().iterator();
> while (iter.hasNext()) {
> String name = (String)iter.next();
> this.props.addFilter(name, (String)projectProps.get(name));
> }
> this.inited = true;
> }
> }
> }
>
>
>
>
> *** FilterChain.java.orig Wed May 28 01:25:08 2003
> --- FilterChain.java Wed May 28 01:25:34 2003
> ***************
> *** 58,63 ****
> --- 58,64 ----
>   import org.apache.tools.ant.BuildException;
>   import org.apache.tools.ant.filters.ClassConstants;
>   import org.apache.tools.ant.filters.ExpandProperties;
> + import org.apache.tools.ant.filters.FilterProperties;
>   import org.apache.tools.ant.filters.HeadFilter;
>   import org.apache.tools.ant.filters.LineContains;
>   import org.apache.tools.ant.filters.LineContainsRegExp;
> ***************
> *** 94,99 ****
> --- 95,104 ----
>           filterReaders.addElement(expandProperties);
>       }
>
> +     public final void addFilterProperties(final FilterProperties
> filterProperties) {
> +         filterReaders.addElement(filterProperties);
> +     }
> +
>       public final void addHeadFilter(final HeadFilter headFilter) {
>           filterReaders.addElement(headFilter);
>       }
>
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Reply via email to