ant-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bode...@apache.org
Subject svn commit: r349633 - in /ant/core/trunk: docs/manual/CoreTypes/ src/etc/testcases/types/resources/ src/main/org/apache/tools/ant/types/ src/main/org/apache/tools/ant/types/resources/ src/testcases/org/apache/tools/ant/types/resources/
Date Tue, 29 Nov 2005 04:38:53 GMT
Author: bodewig
Date: Mon Nov 28 20:38:42 2005
New Revision: 349633

URL: http://svn.apache.org/viewcvs?rev=349633&view=rev
Log:
new resource <javaresource> for stuff that can be loaded via a classloader

Added:
    ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml   (with props)
    ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java   (with
props)
    ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
  (with props)
Modified:
    ant/core/trunk/docs/manual/CoreTypes/resources.html
    ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties

Modified: ant/core/trunk/docs/manual/CoreTypes/resources.html
URL: http://svn.apache.org/viewcvs/ant/core/trunk/docs/manual/CoreTypes/resources.html?rev=349633&r1=349632&r2=349633&view=diff
==============================================================================
--- ant/core/trunk/docs/manual/CoreTypes/resources.html (original)
+++ ant/core/trunk/docs/manual/CoreTypes/resources.html Mon Nov 28 20:38:42 2005
@@ -22,14 +22,16 @@
 
 <ul>
   <li><a href="#basic">resource</a> - a basic resource.</li>
+  <li><a href="#bzip2resource">bzip2resource</a> - a BZip2 compressed resource.</li>
   <li><a href="#file">file</a> - a file.</li>
-  <li><a href="#tarentry">tarentry</a> - an entry in a tar file.</li>
-  <li><a href="#zipentry">zipentry</a> - an entry in a zip file.</li>
   <li><a href="#gzipresource">gzipresource</a> - a GZip compressed resource.</li>
-  <li><a href="#bzip2resource">bzip2resource</a> - a BZip2 compressed resource.</li>
-  <li><a href="#url">url</a> - a URL.</li>
-  <li><a href="#string">string</a> - a text string.</li>
+  <li><a href="#javaresource">javaresource</a> - a resource loadable
+        via a Java classloader.</li>
   <li><a href="#property">property</a> - an Ant property.</li>
+  <li><a href="#string">string</a> - a text string.</li>
+  <li><a href="#tarentry">tarentry</a> - an entry in a tar file.</li>
+  <li><a href="#url">url</a> - a URL.</li>
+  <li><a href="#zipentry">zipentry</a> - an entry in a zip file.</li>
 </ul>
 
 <h4><a name="basic">resource</a></h4>
@@ -98,6 +100,45 @@
   </tr>
 </table>
 
+<h4><a name="javaresource">javaresource</a></h4>
+
+<p>Represents a resource loadable via a Java classloader.</p>
+
+<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">name</td>
+    <td valign="top">The namer of the resource.</td>
+    <td align="center" valign="top">Yes</td>
+  </tr>
+  <tr>
+    <td valign="top">classpath</td>
+    <td valign="top">the classpath to use when looking up a resource.</td>
+    <td align="center" valign="top">No</td>
+  </tr>
+  <tr>
+    <td valign="top">classpathref</td>
+    <td valign="top">the classpath to use when looking up a resource,
+      given as <a href="../using.html#references">reference</a>
+      to a <code>&lt;path&gt;</code> defined elsewhere..</td>
+    <td align="center" valign="top">No</td>
+  </tr>
+  <tr>
+    <td valign="top">loaderRef</td>
+    <td valign="top">the name of the loader that is
+      used to load the resource, constructed from the specified classpath.</td>
+    <td align="center" valign="top">No</td>
+  </tr>
+</table>
+
+<p>The classpath can also be specified as nested classpath element,
+where <b>&lt;classpath&gt;</b> is a <a
+href="../using.html#path">path-like</a> structure.</p>
+
 <h4><a name="zipentry">zipentry</a></h4>
 
 <p>Represents an entry in a ZIP archive.  The archive can be specified
@@ -157,14 +198,14 @@
 
 <h4><a name="gzipresource">gzipresource</a></h4>
 
-<p>This is not a stand-alone reource, but a wrapper around another
+<p>This is not a stand-alone resource, but a wrapper around another
 resource providing compression of the resource's contents on the fly.
 A single element resource collection must be specified as a nested
 element.</p>
 
 <h4><a name="bzip2resource">bzip2resource</a></h4>
 
-<p>This is not a stand-alone reource, but a wrapper around another
+<p>This is not a stand-alone resource, but a wrapper around another
 resource providing compression of the resource's contents on the fly.
 A single element resource collection must be specified as a nested
 element.</p>

Added: ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml?rev=349633&view=auto
==============================================================================
--- ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml (added)
+++ ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml Mon Nov 28 20:38:42
2005
@@ -0,0 +1,7 @@
+<project>
+  <target name="loadManifest">
+    <loadresource property="manifest">
+      <javaresource name="META-INF/MANIFEST.MF"/>
+    </loadresource>
+  </target>
+</project>

Propchange: ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ant/core/trunk/src/etc/testcases/types/resources/javaresource.xml
------------------------------------------------------------------------------
    svn:executable = *

Modified: ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/types/defaults.properties?rev=349633&r1=349632&r2=349633&view=diff
==============================================================================
--- 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 Mon Nov 28 20:38:42
2005
@@ -67,3 +67,4 @@
 tarentry=org.apache.tools.ant.types.resources.TarResource
 gzipresource=org.apache.tools.ant.types.resources.GZipResource
 bzip2resource=org.apache.tools.ant.types.resources.BZip2Resource
+javaresource=org.apache.tools.ant.types.resources.JavaResource

Added: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java?rev=349633&view=auto
==============================================================================
--- ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java (added)
+++ ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java Mon Nov
28 20:38:42 2005
@@ -0,0 +1,210 @@
+/*
+ * Copyright 2005 The Apache Software Foundation
+ *
+ *  Licensed 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.IOException;
+import java.io.InputStream;
+
+import org.apache.tools.ant.util.FileUtils;
+import org.apache.tools.ant.types.Path;
+import org.apache.tools.ant.types.Resource;
+import org.apache.tools.ant.types.Reference;
+
+/**
+ * A Resource representation of something loadable via a Java classloader.
+ * @since Ant 1.7
+ */
+public class JavaResource extends Resource {
+
+    private Path classpath;
+    private Reference loader;
+
+    /**
+     * Default constructor.
+     */
+    public JavaResource() {
+    }
+
+    /**
+     * Construct a new JavaResource using the specified name and
+     * classpath.
+     *
+     * @param name   the resource name.
+     * @param path   the classpath.
+     */
+    public JavaResource(String name, Path path) {
+        setName(name);
+        classpath = path;
+    }
+
+    /**
+     * Set the classpath to use when looking up a resource.
+     * @param classpath to add to any existing classpath
+     */
+    public void setClasspath(Path classpath) {
+        checkAttributesAllowed();
+        if (this.classpath == null) {
+            this.classpath = classpath;
+        } else {
+            this.classpath.append(classpath);
+        }
+    }
+
+    /**
+     * Add a classpath to use when looking up a resource.
+     * @return The classpath to be configured
+     */
+    public Path createClasspath() {
+        checkChildrenAllowed();
+        if (this.classpath == null) {
+            this.classpath = new Path(getProject());
+        }
+        return this.classpath.createPath();
+    }
+
+    /**
+     * Set the classpath to use when looking up a resource,
+     * given as reference to a &lt;path&gt; defined elsewhere
+     * @param r The reference value
+     */
+    public void setClasspathRef(Reference r) {
+        checkAttributesAllowed();
+        createClasspath().setRefid(r);
+    }
+
+    /**
+     * get the classpath used by this <code>LoadProperties</code>.
+     * @return The classpath
+     */
+    public Path getClasspath() {
+        return isReference()
+            ? ((JavaResource) getCheckedRef()).getClasspath() : classpath;
+    }
+
+    /**
+     * Use the reference to locate the loader. If the loader is not
+     * found, taskdef will use the specified classpath and register it
+     * with the specified name.
+     *
+     * This allow multiple taskdef/typedef to use the same class loader,
+     * so they can be used together. It eliminate the need to
+     * put them in the CLASSPATH.
+     *
+     * @param r the reference to locate the loader.
+     */
+    public void setLoaderRef(Reference r) {
+        checkAttributesAllowed();
+        loader = r;
+    }
+
+    /**
+     * Overrides the super version.
+     * @param r the Reference to set.
+     */
+    public void setRefid(Reference r) {
+        if (loader != null || classpath != null) {
+            throw tooManyAttributes();
+        }
+        super.setRefid(r);
+    }
+
+    /**
+     * Learn whether this file exists.
+     * @return true if this resource exists.
+     */
+    public boolean isExists() {
+        InputStream is = null;
+        try {
+            return isReference() ? ((Resource) getCheckedRef()).isExists()
+                : (is = getInputStream()) != null;
+        } catch (IOException ex) {
+            return false;
+        } finally {
+            FileUtils.close(is);
+        }
+    }
+
+    /**
+     * Return an InputStream for reading the contents of this Resource.
+     * @return an InputStream object.
+     * @throws IOException if an error occurs.
+     */
+    public InputStream getInputStream() throws IOException {
+        if (isReference()) {
+            return ((Resource) getCheckedRef()).getInputStream();
+        }
+        ClassLoader cl = null;
+        if (loader != null) {
+            cl = (ClassLoader) loader.getReferencedObject();
+        }
+        if (cl == null) {
+            if (getClasspath() != null) {
+                cl = getProject().createClassLoader(classpath);
+            } else {
+                cl = JavaResource.class.getClassLoader();
+            }
+            if (loader != null && cl != null) {
+                getProject().addReference(loader.getRefId(), cl);
+            }
+        }
+
+        return cl == null ? ClassLoader.getSystemResourceAsStream(getName())
+            : cl.getResourceAsStream(getName());
+    }
+
+    /**
+     * Compare this JavaResource to another Resource.
+     * @param another the other Resource against which to compare.
+     * @return a negative integer, zero, or a positive integer as this
+     * JavaResource is less than, equal to, or greater than the
+     * specified Resource.
+     */
+    public int compareTo(Object another) {
+        if (isReference()) {
+            return ((Comparable) getCheckedRef()).compareTo(another);
+        }
+        if (another.getClass().equals(getClass())) {
+            JavaResource otherjr = (JavaResource) another;
+            if (!getName().equals(otherjr.getName())) {
+                return getName().compareTo(otherjr.getName());
+            }
+            if (loader != otherjr.loader) {
+                if (loader == null) {
+                    return -1;
+                }
+                if (otherjr.loader == null) {
+                    return 1;
+                }
+                return loader.getRefId().compareTo(otherjr.loader.getRefId());
+            }
+            Path p = getClasspath();
+            Path op = otherjr.getClasspath();
+            if (p != op) {
+                if (p == null) {
+                    return -1;
+                }
+                if (op == null) {
+                    return 1;
+                }
+                return p.toString().compareTo(op.toString());
+            }
+            return 0;
+        }
+        return super.compareTo(another);
+    }
+
+}

Propchange: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ant/core/trunk/src/main/org/apache/tools/ant/types/resources/JavaResource.java
------------------------------------------------------------------------------
    svn:executable = *

Added: ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
URL: http://svn.apache.org/viewcvs/ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java?rev=349633&view=auto
==============================================================================
--- ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
(added)
+++ ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
Mon Nov 28 20:38:42 2005
@@ -0,0 +1,40 @@
+/*
+ * Copyright  2005 The Apache Software Foundation
+ *
+ *  Licensed 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 org.apache.tools.ant.BuildFileTest;
+
+public class JavaResourceTest extends BuildFileTest {
+
+    public JavaResourceTest(String name) {
+        super(name);
+    }
+
+    public void setUp() {
+        configureProject("src/etc/testcases/types/resources/javaresource.xml");
+    }
+
+    public void testLoadManifest() {
+        executeTarget("loadManifest");
+        assertNotNull(getProject().getProperty("manifest"));
+
+        // this actually relies on the first manifest being found on
+        // the classpath (probably rt.jar's) being valid
+        assertTrue(getProject().getProperty("manifest")
+                   .startsWith("Manifest-Version:"));
+    }
+}
\ No newline at end of file

Propchange: ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: ant/core/trunk/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
------------------------------------------------------------------------------
    svn:executable = *



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@ant.apache.org
For additional commands, e-mail: dev-help@ant.apache.org


Mime
View raw message