Modified:
trunk/src/com/dmdirc/plugins/PluginClassLoader.java
trunk/src/com/dmdirc/util/resourcemanager/FileResourceManager.java
trunk/src/com/dmdirc/util/resourcemanager/ResourceManager.java
trunk/src/com/dmdirc/util/resourcemanager/ZipResourceManager.java
Log:
Add getResourceURL method to resource manager Implement findResource(s) in plugin classloader
Git-version: 0.6.3m2-374-g176f979
Modified: trunk/src/com/dmdirc/plugins/PluginClassLoader.java
===================================================================
--- trunk/src/com/dmdirc/plugins/PluginClassLoader.java 2010-01-24 21:40:04 UTC (rev 5831)
+++ trunk/src/com/dmdirc/plugins/PluginClassLoader.java 2010-01-24 21:41:05 UTC (rev 5832)
@@ -25,6 +25,9 @@
import com.dmdirc.util.resourcemanager.ResourceManager;
import java.io.IOException;
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.Vector;
public class PluginClassLoader extends ClassLoader {
@@ -59,7 +62,7 @@
* @return A classloader configured with this one as its parent
*/
public PluginClassLoader getSubClassLoader(final PluginInfo info) {
- return (new PluginClassLoader(info, this));
+ return new PluginClassLoader(info, this);
}
/**
@@ -84,8 +87,8 @@
public boolean isClassLoaded(final String name, final boolean checkGlobal) {
// Don't duplicate a class
final Class existing = findLoadedClass(name);
- final boolean gcl = (checkGlobal) ? GlobalClassLoader.getGlobalClassLoader().isClassLoaded(name) : false;
- return (existing != null || gcl);
+ final boolean gcl = checkGlobal ? GlobalClassLoader.getGlobalClassLoader().isClassLoaded(name) : false;
+ return existing != null || gcl;
}
/**
@@ -171,4 +174,50 @@
return loadedClass;
}
+ /**
+ * {@inheritDoc}
+ *
+ * @since 0.6.3
+ */
+ @Override
+ protected URL findResource(final String name) {
+ try {
+ final ResourceManager res = pluginInfo.getResourceManager();
+ final URL url = res.getResourceURL(name);
+
+ if (url != null) {
+ return url;
+ }
+ } catch (IOException ioe) {
+ // Do nothing, fall through
+ }
+
+ return super.findResource(name);
+ }
+
+ /**
+ * {@inheritDoc}
+ *
+ * @since 0.6.3
+ */
+ @Override
+ protected Enumeration<URL> findResources(final String name) throws IOException {
+ final URL resource = findResource(name);
+ final Vector<URL> resources = new Vector<URL>(); // URG
+
+ if (resource != null) {
+ resources.add(resource);
+ }
+
+ final Enumeration<URL> urls = super.findResources(name);
+
+ while (urls.hasMoreElements()) { // More URG
+ resources.add(urls.nextElement());
+ }
+
+ return resources.elements();
+ }
+
+
+
}
Modified: trunk/src/com/dmdirc/util/resourcemanager/FileResourceManager.java
===================================================================
--- trunk/src/com/dmdirc/util/resourcemanager/FileResourceManager.java 2010-01-24 21:40:04 UTC (rev 5831)
+++ trunk/src/com/dmdirc/util/resourcemanager/FileResourceManager.java 2010-01-24 21:41:05 UTC (rev 5832)
@@ -29,6 +29,8 @@
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
@@ -127,6 +129,16 @@
return null;
}
}
+
+ /** {@inheritDoc} */
+ @Override
+ public URL getResourceURL(final String resource) throws MalformedURLException {
+ if (resourceExists(resource)) {
+ return new File(basePath, resource).toURI().toURL();
+ } else {
+ return null;
+ }
+ }
/** {@inheritDoc} */
@Override
Modified: trunk/src/com/dmdirc/util/resourcemanager/ResourceManager.java
===================================================================
--- trunk/src/com/dmdirc/util/resourcemanager/ResourceManager.java 2010-01-24 21:40:04 UTC (rev 5831)
+++ trunk/src/com/dmdirc/util/resourcemanager/ResourceManager.java 2010-01-24 21:41:05 UTC (rev 5832)
@@ -31,6 +31,8 @@
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -264,6 +266,16 @@
* @return InputStream for the resource, or null if not found
*/
public abstract InputStream getResourceInputStream(final String resource);
+
+ /**
+ * Gets an URL for the specified resource.
+ *
+ * @param resource Name of the resource to return
+ * @return A URL for the resource, or null if not found
+ * @throws MalformedURLException If the URL created is malformed
+ * @since 0.6.3
+ */
+ public abstract URL getResourceURL(final String resource) throws MalformedURLException;
/**
* Gets a Map of byte[]s of the resources ending with the specified
Modified: trunk/src/com/dmdirc/util/resourcemanager/ZipResourceManager.java
===================================================================
--- trunk/src/com/dmdirc/util/resourcemanager/ZipResourceManager.java 2010-01-24 21:40:04 UTC (rev 5831)
+++ trunk/src/com/dmdirc/util/resourcemanager/ZipResourceManager.java 2010-01-24 21:41:05 UTC (rev 5832)
@@ -27,6 +27,8 @@
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.net.MalformedURLException;
+import java.net.URL;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
@@ -122,7 +124,6 @@
@Override
public InputStream getResourceInputStream(final String resource) {
final ZipEntry zipEntry = zipFile.getEntry(resource);
-
if (zipEntry == null) {
return null;
}
@@ -134,6 +135,16 @@
}
}
+
+ /** {@inheritDoc} */
+ @Override
+ public URL getResourceURL(final String resource) throws MalformedURLException {
+ if (resourceExists(resource)) {
+ return new URL("jar:" + zipFile.getName() + "!" + resource);
+ } else {
+ return null;
+ }
+ }
/** {@inheritDoc} */
@Override