| DebugWriter.java |
1 /**
2 * QJ-Pro is a static code analyzer for Java.
3 * Copyright (c) 2004, http://qjpro.sourceforge.net
4 *
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License as published by the
7 * Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT
11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
12 * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more
13 * details.
14 *
15 * You should have received a copy of the GNU General Public License along with
16 * this program; if not, write to the Free Software Foundation, Inc.,
17 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18 */
19 package com.qasystems.debug;
20
21 import com.qasystems.qstudio.java.Version;
22
23 import java.io.PrintStream;
24 import java.io.PrintWriter;
25
26 /**
27 * This class implements a writer specialized in printing debug information.
28 * Each write action has a verbose level. If this level is smaller or equal to
29 * the maximum verbose level, then the output is written.
30 *
31 * @author Sweder Schellens
32 * @version %full_filespec: DebugWriter.java,12:java:1 %
33 */
34 public class DebugWriter {
35 /** Write nothing */
36 public final static int VERBOSE_NOTHING = 0;
37
38 /** Write exception stack traces only */
39 public final static int VERBOSE_EXCEPTIONS = 1;
40
41 /** Write anything */
42 public final static int VERBOSE_ANYTHING = 2;
43 private int maxVerboseLevel =VERBOSE_ANYTHING ;
44 //Version.isDevelopment() ? VERBOSE_ANYTHING : VERBOSE_NOTHING;
45 private PrintWriter outWriter = null;
46 private PrintStream outStream = null;
47
48 /**
49 * Default constructor for writing to standard error.
50 */
51 public DebugWriter() {
52 super();
53 }
54
55 /**
56 * Default constructor for writing via a print writer.
57 *
58 * @param out the print writer
59 */
60 public DebugWriter(PrintWriter out) {
61 this();
62 setOutWriter(out);
63 }
64
65 /**
66 * Default constructor for writing via a print stream.
67 *
68 * @param out the print stream
69 */
70 public DebugWriter(PrintStream out) {
71 this();
72 setOutStream(out);
73 }
74
75 /**
76 * Write an exception's stack trace with level VERBOSE_EXCEPTIONS.
77 *
78 * @param ex the throwable object
79 * @param source the object that caught the exception
80 */
81 public void writeException(Throwable ex, Object source) {
82 writeException(ex, source, VERBOSE_EXCEPTIONS);
83 }
84
85 /**
86 * Write an exception's stack trace with given level.
87 *
88 * @param ex the throwable object
89 * @param source the object that caught the exception
90 * @param level the verbose level
91 */
92 public void writeException(Throwable ex, Object source, int level) {
93 writeMessage(ex.getClass().getName() + " in class " + source, level);
94
95 if (level <= maxVerboseLevel) {
96 if (outWriter != null) {
97 ex.printStackTrace(outWriter);
98 } else if (outStream != null) {
99 ex.printStackTrace(outStream);
100 } else {
101 ex.printStackTrace();
102 }
103 }
104 }
105
106 /**
107 * Write a message with level VERBOSE_ANYTHING.
108 *
109 * @param msg the message
110 */
111 public void writeMessage(String msg) {
112 writeMessage(msg, VERBOSE_ANYTHING);
113 }
114
115 /**
116 * Write a message with given level.
117 *
118 * @param msg the message
119 * @param level the verbose level
120 */
121 public void writeMessage(String msg, int level) {
122 if (level <= maxVerboseLevel) {
123 if (outWriter != null) {
124 outWriter.println(msg);
125 } else if (outStream != null) {
126 outStream.println(msg);
127 } else {
128 System.err.println(msg);
129 }
130 }
131 }
132
133 /**
134 * Returns <class_name>@<object_hashcode>.</tt>.
135 *
136 * @return the string
137 */
138 public String toString() {
139 return (getClass().getName() + "@" + Integer.toHexString(hashCode()));
140 }
141
142 /**
143 * Sets the maximum verbose level.
144 *
145 * @param level the maximum verbose level
146 */
147 public synchronized void setMaxVerboseLevel(int newMaxVerboseLevel) {
148 maxVerboseLevel = newMaxVerboseLevel;
149 }
150
151 /**
152 * Gets the maximum verbose level.
153 *
154 * @return the maximum verbose level
155 */
156 public int getMaxVerboseLevel() {
157 return maxVerboseLevel;
158 }
159
160 private synchronized void setOutWriter(PrintWriter newOutWriter) {
161 outWriter = newOutWriter;
162 }
163
164 private synchronized PrintWriter getOutWriter() {
165 return outWriter;
166 }
167
168 private synchronized void setOutStream(PrintStream newOutStream) {
169 outStream = newOutStream;
170 }
171
172 private synchronized PrintStream getOutStream() {
173 return outStream;
174 }
175 }
176