From c6091024864e0fc9069683534370306838eb371a Mon Sep 17 00:00:00 2001
From: Sven Gothel <sgothel@jausoft.com>
Date: Tue, 29 Nov 2011 05:23:41 +0100
Subject: JarUtil (Fix Bug 522): Handle case where given URL doesn't contain
 any '/' (eg. Eclipse 'rsrc:' case)

- Use ':' as 'path' delimiter in case no path via '/' is given.

+++

Manual tested w/ Eclipse:

Preparations:
===============

1) Set up a vanilla eclipse (3.7.0) workspace

2) Add the JOGL User Library:
  - Window.Preference
   - Java.Build_Path.User_Libraries:
     + JOGL
        + gluegen-rt.jar
        + jogl.all.jar
        + gluegen-rt-natives-linux-amd64.jar
        + jogl-all-natives-linux-amd64.jar

        You may add all other native JARs here.
        Note that these are not required in the CLASSPATH by JOGL,
        however, they are required by Eclipse to export your project as a Runnable JAR File.

3) New test project
  -  Right-click your project in the Package Explorer and click "Properties".
       - Select "Java Build Path" and click the "Libraries" tab.
          + JOGL
  - Add some simple code ..
  - Run as Java Application ..

Test-1:
=========

Export
  - Right-click your project in the Package Explorer and click "Export"
    - Select Java.Runnable_JAR_file
      + Launch configuration
      + some destination path
      + Library handling:
        Copy required libraries into a sub-folder next to the generated JAR

Result: Works!

./lala01.jar
./lala01_lib/jogl.all.jar
./lala01_lib/jogl-all-natives-linux-amd64.jar
./lala01_lib/... etc ..

Test-2:
=========

Export
  - Right-click your project in the Package Explorer and click "Export"
    - Select Java.Runnable_JAR_file
      + Launch configuration
      + some destination path
      + Library handling:
        Package required libraries into generated JAR

Result: Works!

./lala02.jar:
  Manifest-Version: 1.0
  Rsrc-Class-Path: ./ gluegen-rt-natives-linux-amd64.jar gluegen-rt.jar
                      jogl-all-natives-linux-amd64.jar jogl.all.jar
  Class-Path: .
  Rsrc-Main-Class: Test01
  Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
---
 src/java/com/jogamp/common/util/JarUtil.java | 16 +++++++++++-----
 1 file changed, 11 insertions(+), 5 deletions(-)

(limited to 'src/java')

diff --git a/src/java/com/jogamp/common/util/JarUtil.java b/src/java/com/jogamp/common/util/JarUtil.java
index 517ac1a..4beda94 100644
--- a/src/java/com/jogamp/common/util/JarUtil.java
+++ b/src/java/com/jogamp/common/util/JarUtil.java
@@ -208,13 +208,19 @@ public class JarUtil {
             System.out.println("getURLDirname "+aURL+", extForm: "+urlS);
         }
         // from 
-        //   file:/some/path/gluegen-rt.jar
+        //   file:/some/path/gluegen-rt.jar  _or_ rsrc:gluegen-rt.jar
         // to
-        //   file:/some/path/
+        //   file:/some/path/                _or_ rsrc:
         int idx = urlS.lastIndexOf('/');
-        if (0 <= idx) {
-        	urlS = urlS.substring(0, idx+1); // exclude jar name, include terminal '/'
-        }        
+        if(0 > idx) {
+            // no abs-path, check for protocol terminator ':'
+            idx = urlS.lastIndexOf(':');
+            if(0 > idx) {
+                throw new IllegalArgumentException("URL does not contain protocol terminator ':', in <"+aURL.toExternalForm()+">, got <"+urlS+">");
+            }
+        }
+        urlS = urlS.substring(0, idx+1); // exclude jar name, include terminal '/' or ':'        
+        
         if(DEBUG) {
             System.out.println("getJarURLDirname res: "+urlS);
         }        
-- 
cgit v1.2.3