ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/cms/source/server/uk/org/iscream/cms/server/core/loggers/SimpleSwingLogger.java
Revision: 1.12
Committed: Wed Feb 5 16:43:47 2003 UTC (21 years, 3 months ago) by tdb
Branch: MAIN
Changes since 1.11: +5 -5 lines
Log Message:
Changed the server to use the external util package. Quite a minor change,
but does affect a lot of files.

File Contents

# User Rev Content
1 tdb 1.10 /*
2     * i-scream central monitoring system
3 tdb 1.11 * http://www.i-scream.org.uk
4 tdb 1.10 * Copyright (C) 2000-2002 i-scream
5     *
6     * This program is free software; you can redistribute it and/or
7     * modify it under the terms of the GNU General Public License
8     * as published by the Free Software Foundation; either version 2
9     * of the License, or (at your option) any later version.
10     *
11     * This program is distributed in the hope that it will be useful,
12     * but WITHOUT ANY WARRANTY; without even the implied warranty of
13     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14     * GNU General Public License for more details.
15     *
16     * You should have received a copy of the GNU General Public License
17     * along with this program; if not, write to the Free Software
18     * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19     */
20    
21 ajm 1.1 //---PACKAGE DECLARATION---
22 tdb 1.9 package uk.org.iscream.cms.server.core.loggers;
23 ajm 1.1
24     //---IMPORTS---
25 tdb 1.12 import uk.org.iscream.cms.util.*;
26 tdb 1.9 import uk.org.iscream.cms.server.core.*;
27 ajm 1.1 import java.util.Date;
28     import java.text.DateFormat;
29     import java.util.Locale;
30     import javax.swing.*;
31 ajm 1.2 import javax.swing.border.*;
32     import java.awt.Color;
33 ajm 1.1
34     /**
35 ajm 1.5 * The SimpleSwingLogger is an implementation of the LoggerImpl defined
36 ajm 1.1 * in the associated interface. It's only purpose is to simply print
37     * all the logging information it receives to a window frame.
38     *
39     * All very simple really...
40     *
41 ajm 1.5 * This class does have the problem that if too many messages are
42     * entered into the text area, then it will fill the memory of
43     * the JVM. This MAY have been fixed by adding the setRows(int)
44     * in the write(string) method, however the Java API does not
45     * specify if this enforces the max rows, but I THINK it does.
46     *
47 tdb 1.10 * @author $Author: tdb $
48 tdb 1.12 * @version $Id: SimpleSwingLogger.java,v 1.11 2002/05/21 16:47:17 tdb Exp $
49 ajm 1.1 */
50 ajm 1.4 public class SimpleSwingLogger extends JFrame implements LoggerImpl {
51 ajm 1.1
52     //---FINAL ATTRIBUTES---
53    
54     /**
55     * The current CVS revision of this class
56     */
57 tdb 1.12 public final String REVISION = "$Revision: 1.11 $";
58 ajm 1.1
59 ajm 1.2 private final int width = 700;
60     private final int height = 400;
61    
62 ajm 1.1 //---STATIC METHODS---
63    
64     //---CONSTRUCTORS---
65    
66     /**
67 ajm 1.2 * Creates a new Simple Swing Logger.
68 ajm 1.1 */
69 ajm 1.2 public SimpleSwingLogger() {
70 tdb 1.9 _maxMessages = Integer.parseInt(System.getProperty("uk.org.iscream.cms.server.LoggerClass.SimpleSwingLogger.maxMessages"));
71 ajm 1.2 System.out.println(this.toString() + ": opening window");
72    
73     // set up the Frame
74     setTitle("I-Scream Logger");
75     setSize(width, height);
76     getContentPane().setBackground(Color.white);
77     setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE);
78     Box box = Box.createVerticalBox();
79    
80     // create the i-scream logo at the top
81 ajm 1.4 JLabel iscream = new JLabel(new ImageIcon("./uk/ac/ukc/iscream/core/loggers/i-scream.gif"));
82 ajm 1.3 JLabel comment = new JLabel(" I-Scream System Logging Console");
83     comment.setForeground( new Color(0, 0, 102));
84 ajm 1.2 iscream.setBackground(Color.white);
85 ajm 1.3 comment.setBackground(Color.white);
86 ajm 1.2 Box header = Box.createHorizontalBox();
87 ajm 1.3 header.add(comment);
88 ajm 1.2 header.add(Box.createHorizontalGlue());
89     header.add(iscream);
90    
91     // set up the text area
92     _textArea.setEditable(false);
93     JScrollPane text = new JScrollPane(_textArea);
94     text.setBorder(new TitledBorder(new LineBorder(new Color(0, 0, 102)), " Messages "));
95     text.setBackground(Color.white);
96    
97     // build the frame
98     box.add(header);
99     box.add(text);
100     getContentPane().add(box);
101    
102     // show the window
103     show();
104 ajm 1.5 write(toString(), Logger.SYSINIT, "started");
105 ajm 1.1 }
106    
107     //---PUBLIC METHODS---
108    
109     /**
110 tdb 1.7 * The write() method takes a line of text, pre-formatted
111     * and outputs it using a method defined by the actual
112     * implementation. The verbosity is given in case the
113     * implementation wishes to utilise it in the layout -
114     * eg. a different colour or font.
115     *
116     * This instance writes the line to a Swing based GUI
117     * logger.
118     *
119     * @param line A line of formatted text to be logged
120     * @param verbosity the verbosity of this message
121     */
122 tdb 1.6 public synchronized void write(String line, int verbosity) {
123     _textArea.insert(line + "\n",0);
124     _textArea.setRows(_maxMessages);
125 ajm 1.1 }
126    
127     /**
128     * Overrides the {@link java.lang.Object#toString() Object.toString()}
129     * method to provide clean logging (every class should have this).
130     *
131 tdb 1.12 * This uses the uk.org.iscream.cms.util.FormatName class
132 ajm 1.5 * to format the toString()
133     *
134 ajm 1.1 * @return the name of this class and its CVS revision
135     */
136     public String toString() {
137 ajm 1.5 return FormatName.getName(
138     _name,
139     getClass().getName(),
140     REVISION);
141 ajm 1.1 }
142 ajm 1.5
143 ajm 1.1 //---PRIVATE METHODS---
144    
145 tdb 1.7 /**
146     * This method is provided if this class wishes to log
147     * a message itself.
148     *
149     * @param source A String representation of the source
150     * @param verbosity the verbosity of this message
151     * @param message The message to log
152     */
153 tdb 1.6 private void write(String source, int verbosity, String message) {
154     write(FormatName.formatLogLine(source, verbosity, message), verbosity);
155 ajm 1.1 }
156    
157     //---ACCESSOR/MUTATOR METHODS---
158    
159 ajm 1.2 //---ATTRIBUTES---
160 ajm 1.1
161 ajm 1.2 /**
162     * A text area to write log messages to
163     */
164 ajm 1.1 private JTextArea _textArea = new JTextArea();
165 ajm 1.5
166     /**
167     * The maximum number of messages that can
168     * be displayed before bottom items are removed.
169     * This is needed to fix the memory overload problem
170     * that was seen when the GUI got too full!
171     */
172     private int _maxMessages;
173    
174     /**
175     * This is the friendly identifier of the
176     * component this class is running in.
177     * eg, a Filter may be called "filter1",
178     * If this class does not have an owning
179     * component, a name from the configuration
180     * can be placed here. This name could also
181     * be changed to null for utility classes.
182     */
183     private String _name = Core.NAME;
184 ajm 1.1
185     //---STATIC ATTRIBUTES---
186    
187 tdb 1.12 }