# HG changeset patch # User Tom Rodriguez # Date 1422402454 28800 # Node ID 43baadc1913ab9c0f2efe4fb26aa31dc304ccce0 # Parent 479d2d030bf38f3c5d9b898dfcedf1df5161b38c Automatically install Batik for SVG export in IGV diff -r 479d2d030bf3 -r 43baadc1913a mx/mx_graal.py --- a/mx/mx_graal.py Tue Jan 27 14:54:07 2015 -0800 +++ b/mx/mx_graal.py Tue Jan 27 15:47:34 2015 -0800 @@ -1726,6 +1726,8 @@ if not exists(nbplatform): mx.logv('[This execution may take a while as the NetBeans platform needs to be downloaded]') + # make the jar for Batik 1.7 available. + env['IGV_BATIK_JAR'] = mx.library('BATIK').get_path(True) if mx.run(['ant', '-f', mx._cygpathU2W(join(_graal_home, 'src', 'share', 'tools', 'IdealGraphVisualizer', 'build.xml')), '-l', mx._cygpathU2W(fp.name), 'run'], env=env, nonZeroIsFatal=False): mx.abort("IGV ant build & launch failed. Check '" + logFile + "'. You can also try to delete 'src/share/tools/IdealGraphVisualizer/nbplatform'.") diff -r 479d2d030bf3 -r 43baadc1913a mx/suite.py --- a/mx/suite.py Tue Jan 27 14:54:07 2015 -0800 +++ b/mx/suite.py Tue Jan 27 15:47:34 2015 -0800 @@ -176,8 +176,14 @@ "sha1" : "f44bffaf237305512002303a306fc5ce3fa63f76", "urls" : ["http://lafo.ssw.uni-linz.ac.at/jmh/jmh-runner-1.4.2.jar"], "annotationProcessor" : "true" + }, + + "BATIK" : { + "path" : "lib/batik-all-1.7.jar", + "sha1" : "122b87ca88e41a415cf8b523fd3d03b4325134a3", + "urls" : ["http://lafo.ssw.uni-linz.ac.at/graal-external-deps/batik-all-1.7.jar"], } - }, +}, "jrelibraries" : { "JFR" : { diff -r 479d2d030bf3 -r 43baadc1913a src/share/tools/IdealGraphVisualizer/BatikSVGProxy/src/com/sun/hotspot/igv/svg/BatikSVG.java --- a/src/share/tools/IdealGraphVisualizer/BatikSVGProxy/src/com/sun/hotspot/igv/svg/BatikSVG.java Tue Jan 27 14:54:07 2015 -0800 +++ b/src/share/tools/IdealGraphVisualizer/BatikSVGProxy/src/com/sun/hotspot/igv/svg/BatikSVG.java Tue Jan 27 15:47:34 2015 -0800 @@ -25,9 +25,13 @@ import java.awt.Graphics2D; import java.io.Writer; +import java.io.File; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; import org.w3c.dom.DOMImplementation; /** @@ -53,7 +57,13 @@ public static Graphics2D createGraphicsObject() { try { if (SVGGraphics2DConstructor == null) { - ClassLoader cl = BatikSVG.class.getClassLoader(); + String batikJar = System.getenv().get("IGV_BATIK_JAR"); + if (batikJar == null) { + return null; + } + // Load batik in it's own class loader since some it's support jars interfere with the JDK + URL url = new File(batikJar).toURI().toURL(); + ClassLoader cl = new URLClassLoader(new URL[] { url }); Class classGenericDOMImplementation = cl.loadClass("org.apache.batik.dom.GenericDOMImplementation"); Class classSVGGeneratorContext = cl.loadClass("org.apache.batik.svggen.SVGGeneratorContext"); classSVGGraphics2D = cl.loadClass("org.apache.batik.svggen.SVGGraphics2D"); @@ -79,6 +89,8 @@ return null; } catch (InstantiationException e) { return null; + } catch (MalformedURLException e) { + return null; } }