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
32
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
42 System.setOut(getOutputStream());
43 System.setErr(getErrorOutputStream());
44
45
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
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 }