From 235f8b1cbff8ed13071d5c19c0be492c0b25cb78 Mon Sep 17 00:00:00 2001 From: Sven Gothel Date: Sat, 17 Mar 2012 21:15:49 +0100 Subject: 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. --- .../jogamp/common/net/AssetURLConnectionBase.java | 61 ++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 src/junit/com/jogamp/common/net/AssetURLConnectionBase.java (limited to 'src/junit/com/jogamp/common/net/AssetURLConnectionBase.java') diff --git a/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java b/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java new file mode 100644 index 0000000..80f9bd4 --- /dev/null +++ b/src/junit/com/jogamp/common/net/AssetURLConnectionBase.java @@ -0,0 +1,61 @@ +package com.jogamp.common.net; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.JarURLConnection; +import java.net.URLConnection; + +import org.junit.Assert; + +import com.jogamp.common.os.AndroidVersion; +import com.jogamp.common.util.IOUtil; +import com.jogamp.junit.util.JunitTracer; + +public abstract class AssetURLConnectionBase extends JunitTracer { + + /** In gluegen-rt.jar */ + protected static final String test_asset_rt_url = "asset:gluegen/info.txt"; + protected static final String test_asset_rt_entry = "gluegen/info.txt"; + + protected static final String test_asset_rt2_url = "asset:/gluegen/info.txt"; + + /** In gluegen.test.jar */ + protected static final String test_asset_test1_url = "asset:gluegen-test/info.txt"; + protected static final String test_asset_test1_entry = "gluegen-test/info.txt"; + protected static final String test_asset_test2_rel = "data/AssetURLConnectionTest.txt"; + protected static final String test_asset_test2a_url = "asset:com/jogamp/common/net/data/AssetURLConnectionTest.txt"; + protected static final String test_asset_test2b_url = "asset:/com/jogamp/common/net/data/AssetURLConnectionTest.txt"; + protected static final String test_asset_test2_entry = "com/jogamp/common/net/data/AssetURLConnectionTest.txt"; + protected static final String test_asset_test3_rel = "RelativeData.txt"; + protected static final String test_asset_test3a_url = "asset:com/jogamp/common/net/data/RelativeData.txt"; + protected static final String test_asset_test3b_url = "asset:/com/jogamp/common/net/data/RelativeData.txt"; + protected static final String test_asset_test3_entry = "com/jogamp/common/net/data/RelativeData.txt"; + + protected static void testAssetConnection(URLConnection c, String entry_name) throws IOException { + Assert.assertNotNull(c); + if(c instanceof AssetURLConnection) { + final AssetURLConnection ac = (AssetURLConnection) c; + Assert.assertEquals(entry_name, ac.getEntryName()); + } else if(c instanceof JarURLConnection) { + final JarURLConnection jc = (JarURLConnection) c; + if(AndroidVersion.isAvailable) { + Assert.assertEquals("assets/"+entry_name, jc.getEntryName()); + } else { + Assert.assertEquals(entry_name, jc.getEntryName()); + } + } + + final BufferedReader reader = new BufferedReader(new InputStreamReader(c.getInputStream())); + try { + String line = null; + int l = 0; + while ((line = reader.readLine()) != null) { + System.err.println(c.getURL()+":"+l+"> "+line); + l++; + } + } finally { + IOUtil.close(reader, false); + } + } +} \ No newline at end of file -- cgit v1.2.3