View Javadoc

1   package org.eparapher.rcp.views;
2   
3   import java.io.BufferedReader;
4   import java.io.InputStream;
5   import java.io.InputStreamReader;
6   import java.io.PrintStream;
7   import java.net.URL;
8   
9   import org.apache.log4j.Logger;
10  import org.apache.log4j.PropertyConfigurator;
11  import org.eclipse.core.runtime.Platform;
12  import org.eclipse.jface.resource.ImageDescriptor;
13  import org.eclipse.swt.SWT;
14  import org.eclipse.swt.widgets.Display;
15  import org.eclipse.ui.console.ConsolePlugin;
16  import org.eclipse.ui.console.IConsole;
17  import org.eclipse.ui.console.MessageConsole;
18  import org.eclipse.ui.console.MessageConsoleStream;
19  import org.eparapher.rcp.Application;
20  import org.eparapher.rcp.tools.GUIIcons;
21  
22  
23  public class DebugConsoleView extends MessageConsole {
24  
25  	private static Logger log = Logger.getLogger(DebugConsoleView.class);
26  
27  	private MessageConsoleStream outMessageStream;
28  	private MessageConsoleStream errMessageStream;
29  
30  	/*
31  	 * Default Constructor
32  	 * Redirect JVM Standard output and error output
33  	 */
34      public DebugConsoleView() {
35  
36          super(Application.PLUGIN_ID + " Debug Console", ImageDescriptor.createFromImage(GUIIcons.VIEW_CONSOLE_ICON) );
37  
38          initStreams();
39  
40          try {
41          	//Redirect the std and err output
42              System.setOut(getOutputStream());
43              System.setErr(getErrorOutputStream());
44  
45              //Reload Log4J Configuration
46      		URL log4JConfig= Platform.getBundle( Application.PLUGIN_ID ).getResource( "log4j.properties" );
47  			PropertyConfigurator.configure( log4JConfig );
48  
49  		} catch (SecurityException e) {
50  			System.err.println("Cannot redirect stdout and stderr to eParapher Console");
51  		}
52          
53          ConsolePlugin.getDefault().getConsoleManager().addConsoles( new IConsole[] { this } );
54      }
55  
56      
57      public DebugConsoleView(String mName, InputStream min, InputStream merr) {
58          super(mName, ImageDescriptor.createFromImage(GUIIcons.VIEW_CONSOLE_ICON) );
59          initStreams();
60          StreamGobbler err = new StreamGobbler(merr);
61          StreamGobbler out = new StreamGobbler(min);
62          err.start();
63          out.start();
64          ConsolePlugin.getDefault().getConsoleManager().addConsoles( new IConsole[] { this } );
65      }
66  
67      private void initStreams() {
68          outMessageStream = newMessageStream();
69          Display d = Display.getCurrent();
70          outMessageStream.setColor(d.getSystemColor(SWT.COLOR_BLUE));
71          errMessageStream = newMessageStream();
72          errMessageStream.setColor(d.getSystemColor(SWT.COLOR_RED));
73      }
74  
75      public PrintStream getOutputStream() {
76      	return new PrintStream(outMessageStream);
77      }
78      public PrintStream getErrorOutputStream() {
79      	return new PrintStream(errMessageStream);
80      }
81      
82   /**
83    * A Thread to get Output from External Process
84    */
85   public static class StreamGobbler extends Thread {
86     InputStream is;
87  
88     StreamGobbler(InputStream is) {
89       this.is = is;
90     }
91  
92     public void run() {
93       try {
94         InputStreamReader isr = new InputStreamReader(is);
95         BufferedReader br = new BufferedReader(isr);
96         String line = null; 	    
97         while ((line = br.readLine()) != null)
98        	 System.out.println(line);
99         br.close();
100      } catch (Throwable ioe) {
101        ioe.printStackTrace();
102      }
103    }
104  }
105 
106 }