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]