summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2011-04-22 05:38:28 +0200
committerSven Gothel <[email protected]>2011-06-08 04:33:46 +0200
commit32f2f322b1fafa77c1f7f977152f39202ffec7f7 (patch)
tree5320fc84e12e596ecca8c113e8c641872c37dc33
parentdcc1ca29d27e0637ef03e0ef0177ea3e6435c073 (diff)
Fix/Add: Locator (Handle JarURLConnection and ..)
new: 'public static String getRelativeOf(URL baseLocation, String relativeFile)', capable of handling a JAR file/url. Using File based relative locator, allowing better utilization in code: old public static String getRelativeOf(String absoluteFileLocation, String relativeFile) new public static String getRelativeOf(File baseLocation, String relativeFile)
-rw-r--r--src/jogl/classes/com/jogamp/opengl/util/Locator.java75
1 files changed, 59 insertions, 16 deletions
diff --git a/src/jogl/classes/com/jogamp/opengl/util/Locator.java b/src/jogl/classes/com/jogamp/opengl/util/Locator.java
index 291cd77..0176b57 100644
--- a/src/jogl/classes/com/jogamp/opengl/util/Locator.java
+++ b/src/jogl/classes/com/jogamp/opengl/util/Locator.java
@@ -49,6 +49,9 @@ public class Locator {
* @see #getResource(String, ClassLoader)
*/
public static URL getResource(Class context, String path) {
+ if(null == path) {
+ return null;
+ }
ClassLoader contextCL = (null!=context)?context.getClassLoader():null;
URL url = getResource(path, contextCL);
if (url == null && null!=context) {
@@ -73,24 +76,36 @@ public class Locator {
* @see File#File(String)
*/
public static URL getResource(String path, ClassLoader cl) {
+ if(null == path) {
+ return null;
+ }
URL url = null;
if (cl != null) {
url = cl.getResource(path);
- } else {
+ if(!urlExists(url)) {
+ url = null;
+ }
+ }
+ if(null == url) {
url = ClassLoader.getSystemResource(path);
+ if(!urlExists(url)) {
+ url = null;
+ }
}
- if(!urlExists(url)) {
- url = null;
+ if(null == url) {
try {
url = new URL(path);
+ if(!urlExists(url)) {
+ url = null;
+ }
} catch (MalformedURLException e) { }
}
- if(!urlExists(url)) {
- url = null;
+ if(null == url) {
try {
File file = new File(path);
if(file.exists()) {
url = file.toURL();
+ } else {
}
} catch (MalformedURLException e) {}
}
@@ -98,25 +113,53 @@ public class Locator {
}
/**
- * Generates a path for the 'relativeFile' relative to the 'absoluteFileLocation'
+ * Generates a path for the 'relativeFile' relative to the 'baseLocation'.
+ *
+ * @param baseLocation denotes a directory
+ * @param relativeFile denotes a relative file to the baseLocation
*/
- public static String getRelativeOf(String absoluteFileLocation, String relativeFile) {
- File file = new File(absoluteFileLocation);
- file = file.getParentFile();
- while (file != null && relativeFile.startsWith("../")) {
- file = file.getParentFile();
+ public static String getRelativeOf(File baseLocation, String relativeFile) {
+ if(null == relativeFile) {
+ return null;
+ }
+
+ while (baseLocation != null && relativeFile.startsWith("../")) {
+ baseLocation = baseLocation.getParentFile();
relativeFile = relativeFile.substring(3);
}
- if (file != null) {
- String res = new File(file, relativeFile).getPath();
+ if (baseLocation != null) {
+ final File file = new File(baseLocation, relativeFile);
// Handle things on Windows
- return res.replace('\\', '/');
- } else {
- return relativeFile;
+ return file.getPath().replace('\\', '/');
}
+ return null;
}
/**
+ * Generates a path for the 'relativeFile' relative to the 'baseLocation'.
+ *
+ * @param baseLocation denotes a URL to a file
+ * @param relativeFile denotes a relative file to the baseLocation's parent directory
+ */
+ public static String getRelativeOf(URL baseLocation, String relativeFile) {
+ String urlPath = baseLocation.getPath();
+
+ if ( baseLocation.toString().startsWith("jar") ) {
+ JarURLConnection jarConnection;
+ try {
+ jarConnection = (JarURLConnection) baseLocation.openConnection();
+ urlPath = jarConnection.getEntryName();
+ } catch (IOException e) {
+ e.printStackTrace();
+ return null;
+ }
+ }
+
+ // Try relative path first
+ return getRelativeOf(new File(urlPath).getParentFile(), relativeFile);
+ }
+
+ /**
* Returns true, if the url exists,
* trying to open a connection.
*/