/** * Enable SLF4J logging using logback, in the context of ImageJ. * * This allows logging events to be echoed to the ImageJ status bar, * regardless of how the logging configuration file was set up. * * @param debug true if debug-level output should be shown * @return whether or not ImageJ log enabling was successful */ public static synchronized boolean enableIJLogging(boolean debug) { ReflectedUniverse r = new ReflectedUniverse(); try { r.exec("import loci.common.LogbackTools"); r.exec("import loci.plugins.util.IJStatusEchoer"); r.exec("appender = new IJStatusEchoer()"); r.setVar("debug", debug); r.exec("LogbackTools.enableIJLogging(debug, appender)"); } catch (ReflectException exc) { return false; } return true; }
@Override public void close(boolean fileOnly) throws IOException { try { if (r != null && r.getVar("openMovieFile") != null) { r.exec("openMovieFile.close()"); if (!fileOnly) { r.exec("m.disposeQTObject()"); r.exec("imageTrack.disposeQTObject()"); r.exec("QTSession.close()"); } } } catch (ReflectException e) { LOGGER.debug("Failed to close QuickTime session", e); } if (!fileOnly) { currentId = null; times = null; image = null; } }
/** * Sets the level of the root logger * * @param level A string indicating the desired level * (i.e.: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN). */ public static synchronized void setRootLevel(String level) { try { ReflectedUniverse r = new ReflectedUniverse(); r.exec("import org.apache.log4j.Level"); r.exec("import org.apache.log4j.Logger"); r.exec("root = Logger.getRootLogger()"); r.exec("root.setLevel(Level." + level + ")"); } catch (ReflectException exc) { return; } return; }
/** Gets width and height for the given PICT bytes. */ public Dimension getPictDimensions(byte[] bytes) throws FormatException, ReflectException { checkQTLibrary(); try { r.exec("QTSession.open()"); r.setVar("bytes", bytes); r.exec("pict = new Pict(bytes)"); r.exec("box = pict.getPictFrame()"); int width = ((Integer) r.exec("box.getWidth()")).intValue(); int height = ((Integer) r.exec("box.getHeight()")).intValue(); r.exec("QTSession.close()"); return new Dimension(width, height); } catch (ReflectException e) { r.exec("QTSession.close()"); throw new FormatException("PICT height determination failed", e); } }
r.exec("QTSession.open()"); width = img.getWidth(); height = img.getHeight(); r.setVar("path", currentId); r.setVar("width", (float) width); r.setVar("height", (float) height); r.exec("movFile = new QTFile(path)"); r.exec("kMoviePlayer = StdQTConstants.kMoviePlayer"); int resFlag = ((Integer) r.exec("StdQTConstants.createMovieFileDontCreateResFile")).intValue(); r.setVar("flags", resFlag); r.exec("movie = Movie.createMovieFile(movFile, kMoviePlayer, flags)"); r.setVar("timeScale", TIME_SCALE); r.setVar("zero", 0); r.setVar("zeroFloat", (float) 0); r.exec("videoTrack = movie.addTrack(width, height, zeroFloat)"); r.exec("videoMedia = new VideoMedia(videoTrack, timeScale)"); r.exec("videoMedia.beginEdits()"); r.setVar("width", width); r.setVar("height", height); r.exec("bounds = new QDRect(zero, zero, width, height)"); r.exec("gw = new QDGraphics(bounds)"); r.exec("pixMap = gw.getPixMap()"); r.exec("pixSize = pixMap.getPixelSize()"); r.setVar("codec", codec); r.setVar("quality", quality);
/** * Registers a variable of primitive type char in the universe. * * @param varName the name of the variable to assign * @param c the char value to assign to the variable */ public void setVar(String varName, char c) { setVar(varName, Character.valueOf(c)); }
/** * Allows exploration of a reflected universe in an interactive environment. * * @param args if non-empty, access modifiers will be ignored * @throws IOException if there is an error reading from stdin */ public static void main(String[] args) throws IOException { ReflectedUniverse r = new ReflectedUniverse(); System.out.println("Reflected universe test environment. " + "Type commands, or press ^D to quit."); if (args.length > 0) { r.setAccessibilityIgnored(true); System.out.println("Ignoring accessibility modifiers."); } BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Constants.ENCODING)); while (true) { System.out.print("> "); String line = in.readLine(); if (line == null) break; try { r.exec(line); } catch (ReflectException exc) { LOGGER.debug("Could not execute '{}'", line, exc); } } System.out.println(); }
setVar(varName, c); return null; result = getVar(command); if (target != null) setVar(target, result); return result; for (int i=0; i<len; i++) { String arg = st.nextToken().trim(); args[i] = getVar(arg); Object var = getVar(className); if (var == null) { throw new ReflectException("Class not found: " + className); boolean match = true; for (int j=0; j<params.length; j++) { if (!isInstance(params[j], args[j])) { match = false; break; String varName = command.substring(0, dot).trim(); String methodName = command.substring(dot + 1).trim(); Object var = getVar(varName); if (var == null) { throw new ReflectException("No such variable: " + varName); boolean match = true; for (int j=0; j<params.length; j++) {
/** Gets the QuickTime for Java version number. */ public String getQTVersion() { if (isJVM64Bit()) return "Not available"; else if (isQTExpired()) return "Expired"; else if (!canDoQT()) return "Missing"; else { try { String qtMajor = r.exec("QTSession.getMajorVersion()").toString(); String qtMinor = r.exec("QTSession.getMinorVersion()").toString(); return qtMajor + "." + qtMinor; } catch (Throwable t) { LOGGER.debug("Could not retrieve QuickTime for Java version", t); return "Error"; } } }
/** Gets width and height for the given PICT bytes. */ public Dimension getPictDimensions(byte[] bytes) throws FormatException, ReflectException { checkQTLibrary(); try { r.exec("QTSession.open()"); r.setVar("bytes", bytes); r.exec("pict = new Pict(bytes)"); r.exec("box = pict.getPictFrame()"); int width = ((Integer) r.exec("box.getWidth()")).intValue(); int height = ((Integer) r.exec("box.getHeight()")).intValue(); r.exec("QTSession.close()"); return new Dimension(width, height); } catch (ReflectException e) { r.exec("QTSession.close()"); throw new FormatException("PICT height determination failed", e); } }
r.exec("QTSession.open()"); width = img.getWidth(); height = img.getHeight(); r.setVar("path", currentId); r.setVar("width", (float) width); r.setVar("height", (float) height); r.exec("movFile = new QTFile(path)"); r.exec("kMoviePlayer = StdQTConstants.kMoviePlayer"); int resFlag = ((Integer) r.exec("StdQTConstants.createMovieFileDontCreateResFile")).intValue(); r.setVar("flags", resFlag); r.exec("movie = Movie.createMovieFile(movFile, kMoviePlayer, flags)"); r.setVar("timeScale", TIME_SCALE); r.setVar("zero", 0); r.setVar("zeroFloat", (float) 0); r.exec("videoTrack = movie.addTrack(width, height, zeroFloat)"); r.exec("videoMedia = new VideoMedia(videoTrack, timeScale)"); r.exec("videoMedia.beginEdits()"); r.setVar("width", width); r.setVar("height", height); r.exec("bounds = new QDRect(zero, zero, width, height)"); r.exec("gw = new QDGraphics(bounds)"); r.exec("pixMap = gw.getPixMap()"); r.exec("pixSize = pixMap.getPixelSize()"); r.setVar("codec", codec); r.setVar("quality", quality);
/** * Sets the level of the root logger * * @param level A string indicating the desired level * (i.e.: ALL, DEBUG, ERROR, FATAL, INFO, OFF, TRACE, WARN). */ public static synchronized void setRootLevel(String level) { try { ReflectedUniverse r = new ReflectedUniverse(); r.exec("import org.apache.log4j.Level"); r.exec("import org.apache.log4j.Logger"); r.exec("root = Logger.getRootLogger()"); r.exec("root.setLevel(Level." + level + ")"); } catch (ReflectException exc) { return; } return; }
/** * Registers a variable of primitive type double in the universe. * * @param varName the name of the variable to assign * @param d the double value to assign to the variable */ public void setVar(String varName, double d) { setVar(varName, new Double(d)); }
/** * Allows exploration of a reflected universe in an interactive environment. */ public static void main(String[] args) throws IOException { ReflectedUniverse r = new ReflectedUniverse(); System.out.println("Reflected universe test environment. " + "Type commands, or press ^D to quit."); if (args.length > 0) { r.setAccessibilityIgnored(true); System.out.println("Ignoring accessibility modifiers."); } BufferedReader in = new BufferedReader(new InputStreamReader(System.in, Constants.ENCODING)); while (true) { System.out.print("> "); String line = in.readLine(); if (line == null) break; try { r.exec(line); } catch (ReflectException exc) { LOGGER.debug("Could not execute '{}'", line, exc); } } System.out.println(); }
setVar(varName, c); return null; result = getVar(command); if (target != null) setVar(target, result); return result; for (int i=0; i<len; i++) { String arg = st.nextToken().trim(); args[i] = getVar(arg); Object var = getVar(className); if (var == null) { throw new ReflectException("Class not found: " + className); boolean match = true; for (int j=0; j<params.length; j++) { if (!isInstance(params[j], args[j])) { match = false; break; String varName = command.substring(0, dot).trim(); String methodName = command.substring(dot + 1).trim(); Object var = getVar(varName); if (var == null) { throw new ReflectException("No such variable: " + varName); boolean match = true; for (int j=0; j<params.length; j++) {
/** Gets the QuickTime for Java version number. */ public String getQTVersion() { if (isJVM64Bit()) return "Not available"; else if (isQTExpired()) return "Expired"; else if (!canDoQT()) return "Missing"; else { try { String qtMajor = r.exec("QTSession.getMajorVersion()").toString(); String qtMinor = r.exec("QTSession.getMinorVersion()").toString(); return qtMajor + "." + qtMinor; } catch (Throwable t) { LOGGER.debug("Could not retrieve QuickTime for Java version", t); return "Error"; } } }
/** * Enable SLF4J logging using logback, in the context of ImageJ. * * This allows logging events to be echoed to the ImageJ status bar, * regardless of how the logging configuration file was set up. * * @param debug true if debug-level output should be shown * @return whether or not ImageJ log enabling was successful */ public static synchronized boolean enableIJLogging(boolean debug) { ReflectedUniverse r = new ReflectedUniverse(); try { r.exec("import loci.common.LogbackTools"); r.exec("import loci.plugins.util.IJStatusEchoer"); r.exec("appender = new IJStatusEchoer()"); r.setVar("debug", debug); r.exec("LogbackTools.enableIJLogging(debug, appender)"); } catch (ReflectException exc) { return false; } return true; }
/** Obtains a BufferedImage from the given data source using JAI. */ protected BufferedImage openBufferedImage(int no) throws FormatException { r.setVar("no", no); RenderedImage img; try { r.exec("img = dec.decodeAsRenderedImage(no)"); img = (RenderedImage) r.exec("new NullOpImage(img, null, OpImage.OP_IO_BOUND, null)"); } catch (ReflectException exc) { throw new FormatException(exc); } return AWTImageTools.convertRenderedImage(img); }
r.exec("QTSession.open()"); r.setVar("path", file.getAbsolutePath()); r.exec("qtf = new QTFile(path)"); r.exec("openMovieFile = OpenMovieFile.asRead(qtf)"); r.exec("m = Movie.fromFile(openMovieFile)"); int numTracks = ((Integer) r.exec("m.getTrackCount()")).intValue(); int trackMostLikely = 0; int trackNum = 0; while (++trackNum <= numTracks && trackMostLikely == 0) { r.setVar("trackNum", trackNum); r.exec("imageTrack = m.getTrack(trackNum)"); r.exec("d = imageTrack.getSize()"); Integer w = (Integer) r.exec("d.getWidth()"); if (w.intValue() > 0) trackMostLikely = trackNum; r.setVar("trackMostLikely", trackMostLikely); r.exec("imageTrack = m.getTrack(trackMostLikely)"); r.exec("d = imageTrack.getSize()"); Integer w = (Integer) r.exec("d.getWidth()"); Integer h = (Integer) r.exec("d.getHeight()"); r.exec("moviePlayer = new MoviePlayer(m)"); r.setVar("dim", new Dimension(w.intValue(), h.intValue())); ImageProducer qtip = (ImageProducer) r.exec("qtip = new QTImageProducer(moviePlayer, dim)"); image = Toolkit.getDefaultToolkit().createImage(qtip);
/** * Checks whether the log4j framework was successfully enabled * * @return {@code true} if logging was successfully enabled */ public static synchronized boolean isEnabled() { try { ReflectedUniverse r = new ReflectedUniverse(); r.exec("import org.apache.log4j.Level"); r.exec("import org.apache.log4j.Logger"); r.exec("root = Logger.getRootLogger()"); Enumeration en = (Enumeration) r.exec("root.getAllAppenders()"); return en.hasMoreElements(); } catch (ReflectException exc) { return false; } }