/** * Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved. * Licensed under the terms of the Eclipse Public License (EPL). * Please see the license.txt included with this distribution for details. * Any modifications to this file must keep this entire header intact. */ package org.python.pydev.jython; import java.io.IOException; import java.io.OutputStream; import java.net.MalformedURLException; import org.eclipse.core.runtime.Preferences; import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.ui.console.IOConsoleOutputStream; import org.python.pydev.core.callbacks.ICallback0; import org.python.pydev.jython.ui.JyScriptingPreferencesPage; /** * This class is used so that we can control the output of the script. */ public class ScriptOutput extends OutputStream { /** * Indicates whether we should write to the console or not */ private boolean writeToConsole; /** * Stream to the console we want to write */ private ICallback0<IOConsoleOutputStream> out; /** * Constructor - the user is able to define whether he wants to write to the console or not. * * @param color the color of the output written */ public ScriptOutput(ICallback0<IOConsoleOutputStream> outputStream, boolean writeToConsole) { this.writeToConsole = writeToConsole; out = outputStream; } /** * Constructor - Uses the properties from the JyScriptingPreferencesPage to know if we should write to * the console or not * * @param color the color of the output written */ public ScriptOutput(ICallback0<IOConsoleOutputStream> outputStream) { this(outputStream, JyScriptingPreferencesPage.getShowScriptingOutput()); IPropertyChangeListener listener = new Preferences.IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { writeToConsole = JyScriptingPreferencesPage.getShowScriptingOutput(); } }; JythonPlugin.getDefault().getPluginPreferences().addPropertyChangeListener(listener); } /** * OutputStream interface */ @Override public void write(int b) throws IOException { if (writeToConsole) { IOConsoleOutputStream out = getOutputStream(); out.write(b); } } /** * @return the output stream to use */ private IOConsoleOutputStream getOutputStream() throws MalformedURLException { return out.call(); } }