diff options
| author | Joshua Rahm <joshua.rahm@colorado.edu> | 2015-01-30 17:11:48 -0700 |
|---|---|---|
| committer | Joshua Rahm <joshua.rahm@colorado.edu> | 2015-01-30 17:11:48 -0700 |
| commit | 1c5e38fe69ac8a6decbdd8abe93112f4e3369315 (patch) | |
| tree | 926cef8cb76d46862ed2c4ec7028720611e47476 /src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java | |
| download | Modulus3D-1c5e38fe69ac8a6decbdd8abe93112f4e3369315.tar.gz Modulus3D-1c5e38fe69ac8a6decbdd8abe93112f4e3369315.tar.bz2 Modulus3D-1c5e38fe69ac8a6decbdd8abe93112f4e3369315.zip | |
added source
Diffstat (limited to 'src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java')
| -rw-r--r-- | src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java b/src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java new file mode 100644 index 0000000..9cddcf9 --- /dev/null +++ b/src/org/eclipse/jdt/internal/jarinjarloader/JarRsrcLoader.java @@ -0,0 +1,104 @@ +/* */ package org.eclipse.jdt.internal.jarinjarloader; +/* */ +/* */ import java.io.IOException; +/* */ import java.io.InputStream; +/* */ import java.io.PrintStream; +/* */ import java.lang.reflect.InvocationTargetException; +/* */ import java.lang.reflect.Method; +/* */ import java.net.URL; +/* */ import java.net.URLClassLoader; +/* */ import java.util.ArrayList; +/* */ import java.util.Enumeration; +/* */ import java.util.List; +/* */ import java.util.jar.Attributes; +/* */ import java.util.jar.Manifest; +/* */ +/* */ public class JarRsrcLoader +/* */ { +/* */ public static void main(String[] args) +/* */ throws ClassNotFoundException, IllegalArgumentException, IllegalAccessException, InvocationTargetException, SecurityException, NoSuchMethodException, IOException +/* */ { +/* 41 */ ManifestInfo mi = getManifestInfo(); +/* 42 */ ClassLoader cl = Thread.currentThread().getContextClassLoader(); +/* 43 */ URL.setURLStreamHandlerFactory(new RsrcURLStreamHandlerFactory(cl)); +/* 44 */ URL[] rsrcUrls = new URL[mi.rsrcClassPath.length]; +/* 45 */ for (int i = 0; i < mi.rsrcClassPath.length; i++) { +/* 46 */ String rsrcPath = mi.rsrcClassPath[i]; +/* 47 */ if (rsrcPath.endsWith("/")) +/* 48 */ rsrcUrls[i] = new URL("rsrc:" + rsrcPath); +/* */ else +/* 50 */ rsrcUrls[i] = new URL("jar:rsrc:" + rsrcPath + "!/"); +/* */ } +/* 52 */ ClassLoader jceClassLoader = new URLClassLoader(rsrcUrls, null); +/* 53 */ Thread.currentThread().setContextClassLoader(jceClassLoader); +/* 54 */ Class c = Class.forName(mi.rsrcMainClass, true, jceClassLoader); +/* 55 */ Method main = c.getMethod("main", new Class[] { args.getClass() }); +/* 56 */ main.invoke(null, new Object[] { args }); +/* */ } +/* */ +/* */ private static ManifestInfo getManifestInfo() throws IOException +/* */ { +/* 61 */ Enumeration resEnum = Thread.currentThread().getContextClassLoader().getResources("META-INF/MANIFEST.MF"); +/* 62 */ while (resEnum.hasMoreElements()) { +/* */ try { +/* 64 */ URL url = (URL)resEnum.nextElement(); +/* 65 */ InputStream is = url.openStream(); +/* 66 */ if (is != null) { +/* 67 */ ManifestInfo result = new ManifestInfo(null); +/* 68 */ Manifest manifest = new Manifest(is); +/* 69 */ Attributes mainAttribs = manifest.getMainAttributes(); +/* 70 */ result.rsrcMainClass = mainAttribs.getValue("Rsrc-Main-Class"); +/* 71 */ String rsrcCP = mainAttribs.getValue("Rsrc-Class-Path"); +/* 72 */ if (rsrcCP == null) +/* 73 */ rsrcCP = ""; +/* 74 */ result.rsrcClassPath = splitSpaces(rsrcCP); +/* 75 */ if ((result.rsrcMainClass != null) && (!result.rsrcMainClass.trim().equals(""))) +/* 76 */ return result; +/* */ } +/* */ } +/* */ catch (Exception localException) +/* */ { +/* */ } +/* */ } +/* 83 */ System.err.println("Missing attributes for RsrcLoader in Manifest (Rsrc-Main-Class, Rsrc-Class-Path)"); +/* 84 */ return null; +/* */ } +/* */ +/* */ private static String[] splitSpaces(String line) +/* */ { +/* 95 */ if (line == null) +/* 96 */ return null; +/* 97 */ List result = new ArrayList(); +/* 98 */ int firstPos = 0; +/* 99 */ while (firstPos < line.length()) { +/* 100 */ int lastPos = line.indexOf(' ', firstPos); +/* 101 */ if (lastPos == -1) +/* 102 */ lastPos = line.length(); +/* 103 */ if (lastPos > firstPos) { +/* 104 */ result.add(line.substring(firstPos, lastPos)); +/* */ } +/* 106 */ firstPos = lastPos + 1; +/* */ } +/* 108 */ return (String[])result.toArray(new String[result.size()]); +/* */ } +/* */ +/* */ private static class ManifestInfo +/* */ { +/* */ String rsrcMainClass; +/* */ String[] rsrcClassPath; +/* */ +/* */ private ManifestInfo() +/* */ { +/* */ } +/* */ +/* */ ManifestInfo(ManifestInfo paramManifestInfo) +/* */ { +/* 35 */ this(); +/* */ } +/* */ } +/* */ } + +/* Location: Modulus.jar + * Qualified Name: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader + * JD-Core Version: 0.6.2 + */
\ No newline at end of file |