svn commit: r417033 - /jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java

[email protected]
Newsgroups gmane.comp.jakarta.bcel.devel
Message-ID <[email protected]>
Author: dbrosius
Date: Sun Jun 25 10:18:37 2006
New Revision: 417033

URL: http://svn.apache.org/viewvc?rev=417033&view=rev
Log:
Enhancement 39855 by Len Trigg: [PATCH] Add support for getResource and getResourceAsStream to ClassPath

Modified:
    jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java

Modified: jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java
URL: http://svn.apache.org/viewvc/jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java?rev=417033&r1=417032&r2=417033&view=diff
==============================================================================
--- jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java (original)
+++ jakarta/bcel/trunk/src/main/java/org/apache/bcel/util/ClassPath.java Sun Jun 25 10:18:37 2006
@@ -23,6 +23,8 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.Serializable;
+import java.net.MalformedURLException;
+import java.net.URL;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
@@ -185,6 +187,33 @@
         return getClassFile(name, suffix).getInputStream();
     }
 
+    /**
+     * @param name fully qualified resource name, e.g. java/lang/String.class
+     * @return InputStream supplying the resource, or null if no resource with that name.
+     */
+    public InputStream getResourceAsStream(String name) {
+        for (int i = 0; i < paths.length; i++) {
+            InputStream is;
+            if ((is = paths[i].getResourceAsStream(name)) != null) {
+                return is;
+            }
+        }
+        return null;
+    }
+    
+    /**
+     * @param name fully qualified resource name, e.g. java/lang/String.class
+     * @return URL supplying the resource, or null if no resource with that name.
+     */
+    public URL getResource(String name) {
+        for (int i = 0; i < paths.length; i++) {
+            URL url;
+            if ((url = paths[i].getResource(name)) != null) {
+                return url;
+            }
+        }
+        return null;
+    }
 
     /**
      * @param name fully qualified file name, e.g. java/lang/String
@@ -270,6 +299,8 @@
     private static abstract class PathEntry implements Serializable {
 
         abstract ClassFile getClassFile( String name, String suffix ) throws IOException;
+        abstract URL getResource(String name);
+        abstract InputStream getResourceAsStream(String name);
     }
 
     /** Contains information about file/ZIP entry of the Java class.
@@ -311,6 +342,25 @@
             dir = d;
         }
 
+        URL getResource(String name) {
+            // Resource specification uses '/' whatever the platform
+            final File file = new File(dir + File.separatorChar + name.replace('/', File.separatorChar));
+            try {
+                return file.exists() ? file.toURL() : null;
+            } catch (MalformedURLException e) {
+               return null;
+            }
+        }
+        
+        InputStream getResourceAsStream(String name) {
+            // Resource specification uses '/' whatever the platform
+            final File file = new File(dir + File.separatorChar + name.replace('/', File.separatorChar));
+            try {
+               return file.exists() ? new FileInputStream(file) : null;
+            } catch (IOException e) {
+               return null;
+            }
+        }
 
         ClassFile getClassFile( String name, String suffix ) throws IOException {
             final File file = new File(dir + File.separatorChar
@@ -362,10 +412,31 @@
             zip = z;
         }
 
-
+        URL getResource(String name) {
+            final ZipEntry entry = zip.getEntry(name);
+            try {
+                return (entry != null) ? new URL("jar:file:" + zip.getName() + "!/" + name) : null;
+            } catch (MalformedURLException e) {
+                return null;
+           }
+        }
+        
+        InputStream getResourceAsStream(String name) {
+            final ZipEntry entry = zip.getEntry(name);
+            try {
+                return (entry != null) ? zip.getInputStream(entry) : null;
+            } catch (IOException e) {
+                return null;
+            }
+        }
+        	
         ClassFile getClassFile( String name, String suffix ) throws IOException {
             final ZipEntry entry = zip.getEntry(name.replace('.', '/') + suffix);
-            return (entry != null) ? new ClassFile() {
+            
+            if (entry == null)
+            	return null;
+            
+            return new ClassFile() {
 
                 public InputStream getInputStream() throws IOException {
                     return zip.getInputStream(entry);
@@ -390,7 +461,7 @@
                 public String getBase() {
                     return zip.getName();
                 }
-            } : null;
+            };
         }
     }
 }
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.