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]