diff --git a/docs/manual/CoreTypes/resources.html b/docs/manual/CoreTypes/resources.html index b0923387c..6d12b2e45 100644 --- a/docs/manual/CoreTypes/resources.html +++ b/docs/manual/CoreTypes/resources.html @@ -22,14 +22,16 @@ explicit use beginning in Ant 1.7.
Represents a resource loadable via a Java classloader.
+ +Attribute | +Description | +Required | +
name | +The namer of the resource. | +Yes | +
classpath | +the classpath to use when looking up a resource. | +No | +
classpathref | +the classpath to use when looking up a resource,
+ given as reference
+ to a <path> defined elsewhere.. |
+ No | +
loaderRef | +the name of the loader that is + used to load the resource, constructed from the specified classpath. | +No | +
The classpath can also be specified as nested classpath element, +where <classpath> is a path-like structure.
+Represents an entry in a ZIP archive. The archive can be specified @@ -157,14 +198,14 @@ collection.
This is not a stand-alone reource, but a wrapper around another +
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.
This is not a stand-alone reource, but a wrapper around another +
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.
diff --git a/src/etc/testcases/types/resources/javaresource.xml b/src/etc/testcases/types/resources/javaresource.xml new file mode 100755 index 000000000..cf89eab70 --- /dev/null +++ b/src/etc/testcases/types/resources/javaresource.xml @@ -0,0 +1,7 @@ +LoadProperties
.
+ * @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);
+ }
+
+}
diff --git a/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java b/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
new file mode 100755
index 000000000..25b8af301
--- /dev/null
+++ b/src/testcases/org/apache/tools/ant/types/resources/JavaResourceTest.java
@@ -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