Author: mbenson
Date: Wed Sep 27 15:37:01 2006
New Revision: 450611
URL: http://svn.apache.org/viewvc?view=rev&rev=450611
Log:
add the <tokens> resource collection; tokenizers graduate to free-standing types
Added:
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Tokens.java
(with props)
ant/core/trunk/src/tests/antunit/types/resources/tokens-test.xml (with
props)
ant/core/trunk/src/tests/antunit/types/resources/utf-16.in (with props)
Modified:
ant/core/trunk/WHATSNEW
ant/core/trunk/docs/manual/CoreTypes/resources.html
ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties
Modified: ant/core/trunk/WHATSNEW
URL:
http://svn.apache.org/viewvc/ant/core/trunk/WHATSNEW?view=diff&rev=450611&r1=450610&r2=450611
==============================================================================
--- ant/core/trunk/WHATSNEW (original)
+++ ant/core/trunk/WHATSNEW Wed Sep 27 15:37:01 2006
@@ -36,6 +36,9 @@
* Extending JAR-Task for SPI. Bugzilla report 31520.
+* Added <tokens> resource collection for convenient creation of string
+ resources from other resources' content. Inspired by Bugzilla 40504.
+
Changes from Ant 1.7.0Beta1 to Ant 1.7.0Beta2
=============================================
Modified: ant/core/trunk/docs/manual/CoreTypes/resources.html
URL:
http://svn.apache.org/viewvc/ant/core/trunk/docs/manual/CoreTypes/resources.html?view=diff&rev=450611&r1=450610&r2=450611
==============================================================================
--- ant/core/trunk/docs/manual/CoreTypes/resources.html (original)
+++ ant/core/trunk/docs/manual/CoreTypes/resources.html Wed Sep 27 15:37:01 2006
@@ -317,6 +317,8 @@
<li><a href="#sort">sort</a> - sorted resource collection</li>
<li><a href="#first">first</a> - first <i>n</i> resources from a
nested collection</li>
+ <li><a href="#tokens">tokens</a> - <a href="#string">string</a> tokens
+ gathered from a nested collection</li>
<li><a href="#union">union</a> - set union of nested resource
collections</li>
<li><a href="#intersect">intersect</a> - set intersection
of nested resource collections</li>
@@ -715,6 +717,36 @@
<td valign="top">count</td>
<td valign="top">The number of resources to include</td>
<td valign="top" align="center">No, default 1</td>
+ </tr>
+ <tr>
+ <td valign="top">cache</td>
+ <td valign="top">Whether to cache results; disabling
+ may seriously impact performance</td>
+ <td valign="top" align="center">No, default <i>true</i></td>
+ </tr>
+ </table>
+ <h4>Parameters specified as nested elements</h4>
+ <p>A single resource collection is required.</p>
+</blockquote>
+
+<h4><a name="tokens">tokens</a></h4>
+<p>Includes the <a href="#string">string</a> tokens gathered from a nested
+ resource collection. Uses the same tokenizers supported by the
+<a href="filterchain.html#tokenfilter">TokenFilter</a>. Hint: imaginative
+ use of this resource collection can implement equivalents for such Unix
+ functions as <code>sort</code>, <code>grep -c</code>, <code>wc</code> and
+ <code>wc -l</code>.</p>
+<blockquote>
+ <table border="1" cellpadding="2" cellspacing="0">
+ <tr>
+ <td valign="top"><b>Attribute</b></td>
+ <td valign="top"><b>Description</b></td>
+ <td align="center" valign="top"><b>Required</b></td>
+ </tr>
+ <tr>
+ <td valign="top">encoding</td>
+ <td valign="top">The encoding of the nested resources</td>
+ <td valign="top" align="center">No, default is platform default</td>
</tr>
<tr>
<td valign="top">cache</td>
Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties?view=diff&rev=450611&r1=450610&r2=450611
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties
(original)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties Wed
Sep 27 15:37:01 2006
@@ -56,6 +56,7 @@
resources=org.apache.tools.ant.types.resources.Resources
first=org.apache.tools.ant.types.resources.First
tarfileset=org.apache.tools.ant.types.TarFileSet
+tokens=org.apache.tools.ant.types.resources.Tokens
#Resources (single-element ResourceCollections):
resource=org.apache.tools.ant.types.Resource
@@ -68,3 +69,8 @@
gzipresource=org.apache.tools.ant.types.resources.GZipResource
bzip2resource=org.apache.tools.ant.types.resources.BZip2Resource
javaresource=org.apache.tools.ant.types.resources.JavaResource
+
+#tokenizer implementations
+linetokenizer=org.apache.tools.ant.util.LineTokenizer
+stringtokenizer=org.apache.tools.ant.util.StringTokenizer
+filetokenizer=org.apache.tools.ant.util.FileTokenizer
Added: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Tokens.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Tokens.java?view=auto&rev=450611
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Tokens.java
(added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Tokens.java
Wed Sep 27 15:37:01 2006
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+package org.apache.tools.ant.types.resources;
+
+import java.io.InputStreamReader;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.util.Stack;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.types.DataType;
+import org.apache.tools.ant.types.ResourceCollection;
+import org.apache.tools.ant.types.resources.StringResource;
+import org.apache.tools.ant.util.ConcatResourceInputStream;
+import org.apache.tools.ant.util.LineTokenizer;
+import org.apache.tools.ant.util.Tokenizer;
+
+/**
+ * ResourceCollection consisting of StringResources gathered from tokenizing
+ * another ResourceCollection with a Tokenizer implementation.
+ * @since Ant 1.7
+ */
+public class Tokens extends BaseResourceCollectionWrapper {
+
+ private Tokenizer tokenizer;
+ private String encoding;
+
+ /**
+ * Sort the contained elements.
+ * @return a Collection of Resources.
+ */
+ protected synchronized Collection getCollection() {
+ ResourceCollection rc = getResourceCollection();
+ if (rc.size() == 0) {
+ return Collections.EMPTY_SET;
+ }
+ if (tokenizer == null) {
+ tokenizer = new LineTokenizer();
+ }
+ ConcatResourceInputStream cat = new ConcatResourceInputStream(rc);
+ cat.setManagingComponent(this);
+
+ InputStreamReader rdr = null;
+ if (encoding == null) {
+ rdr = new InputStreamReader(cat);
+ } else {
+ try {
+ rdr = new InputStreamReader(cat, encoding);
+ } catch (UnsupportedEncodingException e) {
+ throw new BuildException(e);
+ }
+ }
+ ArrayList result = new ArrayList();
+ try {
+ for (String s = tokenizer.getToken(rdr); s != null; s =
tokenizer.getToken(rdr)) {
+ result.add(new StringResource(s));
+ }
+ } catch (IOException e) {
+ throw new BuildException("Error reading tokens", e);
+ }
+ return result;
+ }
+
+ /**
+ * Set the encoding used to create the tokens.
+ * @param encoding the encoding to use.
+ */
+ public synchronized void setEncoding(String encoding) {
+ this.encoding = encoding;
+ }
+
+ /**
+ * Add the nested Tokenizer to this Tokens ResourceCollection.
+ * A LineTokenizer will be used by default.
+ * @param tokenizer the tokenizer to add.
+ */
+ public synchronized void add(Tokenizer tokenizer) {
+ if (isReference()) {
+ throw noChildrenAllowed();
+ }
+ if (this.tokenizer != null) {
+ throw new BuildException("Only one nested tokenizer allowed.");
+ }
+ this.tokenizer = tokenizer;
+ }
+
+ /**
+ * Overrides the BaseResourceCollectionContainer version
+ * to check the nested Tokenizer.
+ * @param stk the stack of data types to use (recursively).
+ * @param p the project to use to dereference the references.
+ * @throws BuildException on error.
+ */
+ protected synchronized void dieOnCircularReference(Stack stk, Project p)
+ throws BuildException {
+ if (isChecked()) {
+ return;
+ }
+ if (isReference()) {
+ super.dieOnCircularReference(stk, p);
+ } else {
+ if (tokenizer instanceof DataType) {
+ stk.push(tokenizer);
+ invokeCircularReferenceCheck((DataType) tokenizer, stk, p);
+ }
+ setChecked(true);
+ }
+ }
+
+}
Propchange:
ant/core/trunk/src/main/org/apache/tools/ant/types/resources/Tokens.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: ant/core/trunk/src/tests/antunit/types/resources/tokens-test.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/types/resources/tokens-test.xml?view=auto&rev=450611
==============================================================================
--- ant/core/trunk/src/tests/antunit/types/resources/tokens-test.xml (added)
+++ ant/core/trunk/src/tests/antunit/types/resources/tokens-test.xml Wed Sep 27
15:37:01 2006
@@ -0,0 +1,111 @@
+<project name="test-tokens" default="antunit"
+ xmlns:au="antlib:org.apache.ant.antunit">
+
+ <property name="eol" value="${line.separator}" />
+
+ <target name="antunit">
+ <au:antunit>
+ <au:plainlistener />
+ <file file="${ant.file}" />
+ </au:antunit>
+ </target>
+
+ <target name="testLines">
+ <au:assertTrue>
+ <resourcecount count="0">
+ <difference>
+ <tokens>
+ <string value="foo${eol}bar${eol}baz" />
+ </tokens>
+ <resources>
+ <string value="foo" />
+ <string value="bar" />
+ <string value="baz" />
+ </resources>
+ </difference>
+ </resourcecount>
+ </au:assertTrue>
+ </target>
+
+ <target name="testExplicitLines">
+ <au:assertTrue>
+ <resourcecount count="0">
+ <difference>
+ <tokens>
+ <string value="foo${eol}bar${eol}baz" />
+ <linetokenizer />
+ </tokens>
+ <resources>
+ <string value="foo" />
+ <string value="bar" />
+ <string value="baz" />
+ </resources>
+ </difference>
+ </resourcecount>
+ </au:assertTrue>
+ </target>
+
+ <target name="testFileTokenizer">
+ <au:assertTrue>
+ <resourcecount count="1">
+ <tokens>
+ <resources>
+ <string value="foo${eol}bar${eol}baz" />
+ <file file="${ant.file}" />
+ </resources>
+ <filetokenizer />
+ </tokens>
+ </resourcecount>
+ </au:assertTrue>
+ </target>
+
+ <target name="testStringTokenizer">
+ <au:assertTrue>
+ <resourcecount count="0">
+ <difference>
+ <tokens>
+ <string value="foo bar baz " />
+ <stringtokenizer />
+ </tokens>
+ <resources>
+ <string value="foo" />
+ <string value="bar" />
+ <string value="baz" />
+ </resources>
+ </difference>
+ </resourcecount>
+ </au:assertTrue>
+ </target>
+
+ <target name="testEncoding">
+ <au:assertTrue>
+ <resourcecount count="0">
+ <difference>
+ <tokens encoding="utf-16">
+ <file file="utf-16.in" />
+ </tokens>
+ <resources>
+ <string value="foo" />
+ <string value="bar" />
+ <string value="baz" />
+ </resources>
+ </difference>
+ </resourcecount>
+ </au:assertTrue>
+ </target>
+
+ <target name="testSort">
+ <pathconvert property="sorted" pathsep="${eol}">
+ <sort>
+ <tokens>
+ <string value="foo bar etc baz" />
+ <stringtokenizer />
+ </tokens>
+ </sort>
+ </pathconvert>
+ <au:assertTrue>
+ <equals arg1="bar${eol}baz${eol}etc${eol}foo" arg2="${sorted}" />
+ </au:assertTrue>
+ </target>
+
+</project>
Propchange: ant/core/trunk/src/tests/antunit/types/resources/tokens-test.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: ant/core/trunk/src/tests/antunit/types/resources/utf-16.in
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/antunit/types/resources/utf-16.in?view=auto&rev=450611
==============================================================================
Binary file - no diff available.
Propchange: ant/core/trunk/src/tests/antunit/types/resources/utf-16.in
------------------------------------------------------------------------------
svn:executable = *
Propchange: ant/core/trunk/src/tests/antunit/types/resources/utf-16.in
------------------------------------------------------------------------------
svn:mime-type = application/octet-stream
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]