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><filterproperties/></pre> > * Or: > * <pre><filterreader > classname="org.apache.tools.ant.filters.FilterProperties"/></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]