aboutsummaryrefslogtreecommitdiffstats
path: root/src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2012-03-17 21:15:49 +0100
committerSven Gothel <[email protected]>2012-03-17 21:15:49 +0100
commit235f8b1cbff8ed13071d5c19c0be492c0b25cb78 (patch)
tree659845e16bd69372bc7ddc3a42b3aa7130d18df5 /src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java
parent0cfc7847c58b51c9a26b50d905b592d1fc4c8578 (diff)
Add 'asset' URLConnection; IOUtil uses URLConnection / incr. effeciency; Android ClassLoaderUtil cleanup;
- Add 'asset' URLConnection - Please read API doc 'PiggybackURLConnection' and 'AssetURLConnection' - Solves generic resource handling where platform locations may differ, ie ClassLoader lookup on Android in the 'assets/' subfolder. - New Android 'AssetDexClassLoader' uses 'assets/' folder for findResource(..) - aapt.signed (our APK ant task) - uses 'assets/' folder - adds the 'assetsdir' attribute allowing to copy other assets into the APK - IOUtil uses URLConnection / incr. effeciency - using URLConnection on all getResource(..) since URL is connected anyways for validation and URLConnection can be used by caller right away - String getRelativeOf(URL, String) -> URL getRelativeOf(URL, String) - preserves scheme, authority, etc - simple parentOf handling, more efficient - reusing new 'asset' protocol impl. - Android ClassLoaderUtil cleanup; - Use createClassLoader(..) impl for build-in static jogamp and user APKs, which removes code redundancy Tests: New code path, especially 'assets' are covered by new unit tests, no regressions on Linux.
Diffstat (limited to 'src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java')
-rw-r--r--src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java b/src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java
new file mode 100644
index 0000000..79d7f71
--- /dev/null
+++ b/src/java/com/jogamp/common/net/GenericURLStreamHandlerFactory.java
@@ -0,0 +1,66 @@
+package com.jogamp.common.net;
+
+import java.net.URL;
+import java.net.URLStreamHandler;
+import java.net.URLStreamHandlerFactory;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.util.HashMap;
+import java.util.Map;
+
+public class GenericURLStreamHandlerFactory implements URLStreamHandlerFactory {
+ private static GenericURLStreamHandlerFactory factory = null;
+
+ private final Map<String, URLStreamHandler> protocolHandlers;
+
+ private GenericURLStreamHandlerFactory() {
+ protocolHandlers = new HashMap<String, URLStreamHandler>();
+ }
+
+ /**
+ * Sets the <code>handler</code> for <code>protocol</code>.
+ *
+ * @return the previous set <code>handler</code>, or null if none was set.
+ */
+ public synchronized final URLStreamHandler setHandler(String protocol, URLStreamHandler handler) {
+ return protocolHandlers.put(protocol, handler);
+ }
+
+ /**
+ * Returns the <code>protocol</code> handler previously set via {@link #setHandler(String, URLStreamHandler)},
+ * or null if none was set.
+ */
+ public synchronized final URLStreamHandler getHandler(String protocol) {
+ return protocolHandlers.get(protocol);
+ }
+
+ @Override
+ public synchronized final URLStreamHandler createURLStreamHandler(String protocol) {
+ return getHandler(protocol);
+ }
+
+ /**
+ * Returns the singleton instance of the registered GenericURLStreamHandlerFactory
+ * or null if registration was not successful.
+ * <p>
+ * Registration is only performed once.
+ * </p>
+ */
+ public synchronized static GenericURLStreamHandlerFactory register() {
+ if(null == factory) {
+ factory = AccessController.doPrivileged(new PrivilegedAction<GenericURLStreamHandlerFactory>() {
+ public GenericURLStreamHandlerFactory run() {
+ boolean ok = false;
+ GenericURLStreamHandlerFactory f = new GenericURLStreamHandlerFactory();
+ try {
+ URL.setURLStreamHandlerFactory(f);
+ ok = true;
+ } catch (Throwable e) {
+ System.err.println("GenericURLStreamHandlerFactory: Setting URLStreamHandlerFactory failed: "+e.getMessage());
+ }
+ return ok ? f : null;
+ } } );
+ }
+ return factory;
+ }
+}