1 package org.opensync.engine.admin.gui;
2
3 import java.awt.BorderLayout;
4 import java.awt.Color;
5 import java.io.PrintWriter;
6
7 import javax.swing.JPanel;
8 import javax.swing.JScrollPane;
9 import javax.swing.JTextPane;
10 import javax.swing.text.DefaultStyledDocument;
11 import javax.swing.text.Style;
12 import javax.swing.text.StyleConstants;
13 import javax.swing.text.StyleContext;
14
15 import org.apache.log4j.Category;
16 import org.opensync.engine.server.Log;
17
18 /***
19 *
20 * @version 1.0
21 * @author SOFTMED
22 *
23 */
24
25 public class LogTextPnl extends PrintWriter{
26 JScrollPane scrollPane = new JScrollPane();
27 JPanel panel = new JPanel();
28 StyleContext styleContext = new StyleContext();
29 DefaultStyledDocument document;
30 JTextPane textPane = new JTextPane();
31 Style defaultStyle;
32 Style styleWarning;
33 Style styleError;
34 private int rollWindow;
35
36 /***
37 * @param log ?category? ?out?
38 * @param category
39 * @param rollWindow
40 */
41 public LogTextPnl(Log log,Category category,int rollWindow) {
42 super(System.err);
43 this.rollWindow = rollWindow;
44 init();
45 log.addWriter(this,category);
46 }
47 /***
48 * @param log ?category?
49 * @param category ?pattern?
50 * @param pattern
51 * @param rollWindow
52 */
53 public LogTextPnl(Log log,Category category,String pattern,int rollWindow) {
54 super(System.err);
55 this.rollWindow = rollWindow;
56 init();
57 log.addWriter(this,category,pattern);
58 }
59 /****/
60 protected void init(){
61 scrollPane.setAutoscrolls(true);
62 panel.setLayout(new BorderLayout());
63 panel.add(scrollPane,BorderLayout.CENTER);
64 textPane.setEditable(false);
65 textPane.setAutoscrolls(true);
66 scrollPane.getViewport().add(textPane,null);
67 defaultStyle = styleContext.addStyle("Default", null);
68 StyleConstants.setForeground(defaultStyle, Color.black);
69 StyleConstants.setFontFamily(defaultStyle, "Dialog");
70
71 styleWarning = styleContext.addStyle("Warning", null);
72 StyleConstants.setForeground(styleWarning,new Color(255,100,50));
73 StyleConstants.setFontFamily(styleWarning, "Dialog");
74
75 styleError = styleContext.addStyle("Error", null);
76 StyleConstants.setForeground(styleError,Color.red);
77 StyleConstants.setFontFamily(styleError, "Dialog");
78 createDocument();
79 }
80 /****/
81 protected void createDocument(){
82 document = new DefaultStyledDocument(styleContext);
83 document.setLogicalStyle(0, defaultStyle);
84 textPane.setDocument(document);
85 }
86 /****/
87 public JPanel getPanel() {
88 return panel;
89 }
90 /***
91 * @param parm1
92 */
93 public void write(char[] parm1){
94 addMessage("" + parm1);
95 }
96 /***
97 * @param c
98 */
99 public void write(int c){
100 addMessage("" + c);
101 }
102 /***
103 * @param parm1
104 * @param parm2
105 * @param parm3
106 */
107 public void write(char[] parm1, int parm2, int parm3){
108 addMessage(new String(parm1).substring(parm2,parm2 + parm3));
109 }
110 /***
111 * @param str
112 * @param off
113 * @param len
114 */
115 public void write(String str, int off, int len) {
116 addMessage(str.substring(off,off + len));
117 }
118 /***
119 * @param str
120 */
121 public void write(String str){
122 addMessage(str);
123 }
124 /***
125 * @param msg
126 */
127 public void addMessage(String msg){
128 int pos = document.getLength();
129 try {
130 if(pos > (1024 * (rollWindow == 0 ? 1 : rollWindow))){
131 createDocument();
132 pos = 0;
133 }
134 if(msg.indexOf("WARN") != -1){
135 document.insertString(pos,msg,styleWarning);
136 }
137 else if(msg.indexOf("ERROR") != -1){
138 document.insertString(pos,msg,styleError);
139 }
140 else if(msg.indexOf("FATAL") != -1){
141 document.insertString(pos,msg,styleError);
142 }
143 else{
144 document.insertString(pos,msg,defaultStyle);
145 }
146 textPane.setCaretPosition(pos + msg.length());
147 }
148 catch (Exception ex) {
149 ex.printStackTrace();
150 }
151 }
152 /***
153 * @param rollWindow
154 */
155 public void setRollWindow(int rollWindow) {
156 this.rollWindow = rollWindow;
157 }
158 }
159
160
161