/* * Copyright (c) 2012 European Synchrotron Radiation Facility, * Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package fable.python.jep; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import org.eclipse.swt.widgets.Display; import fable.framework.views.FableMessageConsole; /** * Redirect a file to System.out and/or FableMessageConsole. This class is used * to listen to python stdout. A current console must be created as output * message are redirect in FableMessageConsole. The class has setter methods to * select outputting to System.out and/or FableMessageConsole. * * @author GOETZ SUCHET * */ public class StdoutRead extends Thread { String outputMessage; BufferedReader outputread; public boolean stopped = false; private boolean outputSystemOut = false; private boolean outputFableConsole = true; public long lasttime; private String file = ""; public StdoutRead(String filename) { try { lasttime = 0; file = filename; outputread = new BufferedReader(new FileReader(filename)); } catch (FileNotFoundException e) { System.out.println("failed to open file " + file + " because " + e.getMessage()); } } public void run() { ///while (!stopped) { while (!stopped || outputMessage != null) { try { outputMessage = outputread.readLine(); while (outputMessage == null && !stopped) { /* give the cpu a break ! */ try { Thread.sleep(100); } catch (InterruptedException e) { // TODO Auto-generated catch block // FIXME e.printStackTrace(); } outputMessage = outputread.readLine(); } if (outputMessage != null) { lasttime = System.currentTimeMillis(); if (outputSystemOut) System.out.println(outputMessage); if (outputFableConsole) { if (!Display.getDefault().isDisposed()) { Display.getDefault().syncExec(new Runnable() { public void run() { if (FableMessageConsole.console != null) { FableMessageConsole.console .displayOut(outputMessage); } else { System.out.println(outputMessage); } } }); } } } } catch (IOException e) { if (FableMessageConsole.console != null) { FableMessageConsole.console.displayIn(outputMessage); FableMessageConsole.console.displayIn(e.getMessage()); } else { System.out.println(outputMessage); System.out.println(e.getMessage()); } } } } /** * set the flag to output to System.out to true or false * * @param value * - true (output to System.out) or false (do not output to * System.out) */ public void setOutputToSystemOut(boolean value) { outputSystemOut = value; } /** * set the flag to output to System.out to true or false * * @param value * - true (output to FableMessageConsole) or false (do not output * to FableMessageConsole) */ public void setOutputToFableConsole(boolean value) { outputFableConsole = value; } }