ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From David Kavanagh <...@dotech.com>
Subject Re: copy task addition
Date Wed, 28 May 2003 13:27:27 GMT
Thanks for trying. The below starts getting a bit verbose in the 
build.xml. All I'm trying to do is use the existing filtering (using the 
<filter> tag) with the project properties. I could easily add another 
mode to the <filter> tag that would make use of the project properties. 
I can understand not wanting to confuse the <filterchain> by building in 
different ways to accomplish the same thing.
How about I provide for something like this.
<copy ...>
    <filter projectprops="true"/>
     ....
</copy>
I could implement this as easily as the other two mechanisms.

David

PS. I hate to seem like I'm stuck on this, but we have 7 projects on a 
tight schedule who use the @token@ in a bunch of files. I'm trying to 
provide a mechanism that we can go foward with that would keep a bunch 
of people from having to switch over our tokenized files.

Magesh Umasankar wrote:

>oh, ok.  That takes care of David's needs,
>I would think.
>
>Cheers,
>Magesh
>
>----- Original Message -----
>From: "peter reilly" <peter.reilly@corvil.com>
>To: "Ant Developers List" <dev@ant.apache.org>
>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="@([^@]*)@" 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 <dak@dotech.com> 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: dev-unsubscribe@ant.apache.org
>>For additional commands, e-mail: dev-help@ant.apache.org
>>
>>
>>
>>
>>
>>
>>/*
>> * 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 apache@apache.org.
>> *
>> * 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: 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
>>    
>>
>
>
>---------------------------------------------------------------------
>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
>  
>


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message