You can use a custom filter or use a reference - <filterchain id="filter.props"> <replaceregex pattern="@([EMAIL PROTECTED])@" replace="${\1}" flags="g"/> <expandproperties/> </filterchain>
<copy ...> <filterchain refid="filter.props"/> </copy> Peter On Wednesday 28 May 2003 14:27, David Kavanagh wrote: > 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" <[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] > > > > > > > >--------------------------------------------------------------------- > >To unsubscribe, e-mail: [EMAIL PROTECTED] > >For additional commands, e-mail: [EMAIL PROTECTED]