001 package edu.rice.cs.cunit.util;
002
003 import java.io.IOException;
004 import java.io.PrintStream;
005 import java.io.PrintWriter;
006 import java.io.FileWriter;
007 import java.util.Locale;
008 import java.util.HashMap;
009
010 /**
011 * Debug output.
012 *
013 * @author Mathias Ricken
014 */
015 public class Debug extends PrintStream {
016 private boolean _debug = false;
017 private int _dotCount = 0;
018 private int _lineCount = 0;
019 public enum LogTarget { NONE, MAIN, FILE, BOTH };
020 private HashMap<String, LogTarget> _debugLogs = new HashMap<String, LogTarget>();
021
022 public static final Debug out = new Debug(System.out);
023
024 private PrintStream _output;
025
026 public Debug(PrintStream output) {
027 super(System.out);
028 this._output = output;
029 }
030
031 public void dot() {
032 ++_dotCount;
033 if (_dotCount == 100) {
034 _dotCount = 0;
035 print(".");
036 ++_lineCount;
037 if (_lineCount == 78) {
038 _lineCount = 0;
039 println("");
040 }
041 }
042 }
043
044 public void endDot() {
045 if (_lineCount > 0) {
046 println("");
047 }
048 _dotCount = _lineCount = 0;
049 }
050
051 public static class ProgressCounter {
052 public int cur;
053 public int max;
054 public byte lastPercentage;
055
056 public ProgressCounter(int max) {
057 this.max = max;
058 this.cur = 0;
059 this.lastPercentage = 0;
060 }
061 }
062
063 public ProgressCounter initPC(int max) {
064 print(" 0%\r");
065 return new ProgressCounter(max);
066 }
067
068 public void incPC(ProgressCounter pc) {
069 ++pc.cur;
070 byte perc = (byte)(100.0f / ((float)pc.max) * pc.cur);
071 if (perc > pc.lastPercentage) {
072 pc.lastPercentage = perc;
073 format("%3d%%\r", new Object[]{perc});
074 }
075 }
076
077 public PrintStream getOutput() {
078 return _output;
079 }
080
081 public void setOutput(PrintStream output) {
082 this._output = output;
083 }
084
085 public boolean isDebug() {
086 return _debug;
087 }
088
089 public void setDebug(boolean debug) {
090 _debug = debug;
091 }
092
093 protected boolean debugOutput() {
094 return (_debug);
095 }
096
097 public void write(int b) {
098 if (debugOutput()) {
099 _output.write(b);
100 }
101 }
102
103 public void write(byte buf[], int off, int len) {
104 if (debugOutput()) {
105 _output.write(buf, off, len);
106 }
107 }
108
109 public void print(boolean b) {
110 if (debugOutput()) {
111 _output.print(b);
112 }
113 }
114
115 public void print(char c) {
116 if (debugOutput()) {
117 _output.print(c);
118 }
119 }
120
121 public void print(int i) {
122 if (debugOutput()) {
123 _output.print(i);
124 }
125 }
126
127 public void print(long l) {
128 if (debugOutput()) {
129 _output.print(l);
130 }
131 }
132
133 public void print(float f) {
134 if (debugOutput()) {
135 _output.print(f);
136 }
137 }
138
139 public void print(double d) {
140 if (debugOutput()) {
141 _output.print(d);
142 }
143 }
144
145 public void print(char s[]) {
146 if (debugOutput()) {
147 _output.print(s);
148 }
149 }
150
151 public void print(String s) {
152 if (debugOutput()) {
153 _output.print(s);
154 }
155 }
156
157 public void print(Object obj) {
158 if (debugOutput()) {
159 _output.print(obj);
160 }
161 }
162
163 public void println() {
164 if (debugOutput()) {
165 _output.println();
166 }
167 }
168
169 public void println(boolean x) {
170 if (debugOutput()) {
171 _output.println(x);
172 }
173 }
174
175 public void println(char x) {
176 if (debugOutput()) {
177 _output.println(x);
178 }
179 }
180
181 public void println(int x) {
182 if (debugOutput()) {
183 _output.println(x);
184 }
185 }
186
187 public void println(long x) {
188 if (debugOutput()) {
189 _output.println(x);
190 }
191 }
192
193 public void println(float x) {
194 if (debugOutput()) {
195 _output.println(x);
196 }
197 }
198
199 public void println(double x) {
200 if (debugOutput()) {
201 _output.println(x);
202 }
203 }
204
205 public void println(char x[]) {
206 if (debugOutput()) {
207 _output.println(x);
208 }
209 }
210
211 public void println(String x) {
212 if (debugOutput()) {
213 _output.println(x);
214 }
215 }
216
217 public void println(Object x) {
218 if (debugOutput()) {
219 _output.println(x);
220 }
221 }
222
223 public PrintStream printf(String format, Object... args) {
224 if (debugOutput()) {
225 _output.printf(format, args);
226 }
227 return this;
228 }
229
230 public PrintStream printf(Locale l, String format, Object... args) {
231 if (debugOutput()) {
232 _output.printf(l, format, args);
233 }
234 return this;
235 }
236
237 public PrintStream format(String format, Object... args) {
238 if (debugOutput()) {
239 _output.format(format, args);
240 }
241 return this;
242 }
243
244 public PrintStream format(Locale l, String format, Object... args) {
245 if (debugOutput()) {
246 _output.format(l, format, args);
247 }
248 return this;
249 }
250
251 public PrintStream append(CharSequence csq) {
252 if (debugOutput()) {
253 _output.append(csq);
254 }
255 return this;
256 }
257
258 public PrintStream append(char c) {
259 if (debugOutput()) {
260 _output.append(c);
261 }
262 return this;
263 }
264
265 public void write(byte b[]) throws IOException {
266 if (debugOutput()) {
267 _output.write(b);
268 }
269 }
270
271 /**
272 * Set the log target of the debug log with the specified name,
273 * @param logName name of the log
274 * @param target target of the log
275 */
276 public void setLogTarget(String logName, LogTarget target) {
277 _debugLogs.put(logName, target);
278 }
279
280 /**
281 * Return the log target of the specified debug log.
282 * @param logName name of the log
283 * @return log target
284 */
285 public LogTarget getLogTarget(String logName) {
286 LogTarget b = _debugLogs.get(logName);
287 return (b==null)?LogTarget.NONE:b;
288 }
289
290 protected boolean isFileEnabled(String logName) {
291 LogTarget b = getLogTarget(logName);
292 return (b==LogTarget.FILE) || (b==LogTarget.BOTH);
293 }
294
295 protected boolean isConsoleEnabled(String logName) {
296 LogTarget b = getLogTarget(logName);
297 return (b==LogTarget.MAIN) || (b==LogTarget.BOTH);
298 }
299
300 public void print(String logName, boolean b) {
301 if (debugOutput() && isConsoleEnabled(logName)) {
302 _output.print(b);
303 }
304 if (debugOutput() && isFileEnabled(logName)) {
305 try {
306 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
307 w.print(b);
308 w.close();
309 }
310 catch(IOException e) {}
311 }
312 }
313
314 public void print(String logName, char c) {
315 if (debugOutput() && isConsoleEnabled(logName)) {
316 _output.print(c);
317 }
318 if (debugOutput() && isFileEnabled(logName)) {
319 try {
320 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
321 w.print(c);
322 w.close();
323 }
324 catch(IOException e) {}
325 }
326 }
327
328 public void print(String logName, int i) {
329 if (debugOutput() && isConsoleEnabled(logName)) {
330 _output.print(i);
331 }
332 if (debugOutput() && isFileEnabled(logName)) {
333 try {
334 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
335 w.print(i);
336 w.close();
337 }
338 catch(IOException e) {}
339 }
340 }
341
342 public void print(String logName, long l) {
343 if (debugOutput() && isConsoleEnabled(logName)) {
344 _output.print(l);
345 }
346 if (debugOutput() && isFileEnabled(logName)) {
347 try {
348 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
349 w.print(l);
350 w.close();
351 }
352 catch(IOException e) {}
353 }
354 }
355
356 public void print(String logName, float f) {
357 if (debugOutput() && isConsoleEnabled(logName)) {
358 _output.print(f);
359 }
360 if (debugOutput() && isFileEnabled(logName)) {
361 try {
362 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
363 w.print(f);
364 w.close();
365 }
366 catch(IOException e) {}
367 }
368 }
369
370 public void print(String logName, double d) {
371 if (debugOutput() && isConsoleEnabled(logName)) {
372 _output.print(d);
373 }
374 if (debugOutput() && isFileEnabled(logName)) {
375 try {
376 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
377 w.print(d);
378 w.close();
379 }
380 catch(IOException e) {}
381 }
382 }
383
384 public void print(String logName, char s[]) {
385 if (debugOutput() && isConsoleEnabled(logName)) {
386 _output.print(s);
387 }
388 if (debugOutput() && isFileEnabled(logName)) {
389 try {
390 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
391 w.print(s);
392 w.close();
393 }
394 catch(IOException e) {}
395 }
396 }
397
398 public void print(String logName, String s) {
399 if (debugOutput() && isConsoleEnabled(logName)) {
400 _output.print(s);
401 }
402 if (debugOutput() && isFileEnabled(logName)) {
403 try {
404 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
405 w.print(s);
406 w.close();
407 }
408 catch(IOException e) {}
409 }
410 }
411
412 public void print(String logName, Object obj) {
413 if (debugOutput() && isConsoleEnabled(logName)) {
414 _output.print(obj);
415 }
416 if (debugOutput() && isFileEnabled(logName)) {
417 try {
418 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
419 w.print(obj);
420 w.close();
421 }
422 catch(IOException e) {}
423 }
424 }
425
426 public void println(String logName, boolean x) {
427 if (debugOutput() && isConsoleEnabled(logName)) {
428 _output.println(x);
429 }
430 if (debugOutput() && isFileEnabled(logName)) {
431 try {
432 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
433 w.println(x);
434 w.close();
435 }
436 catch(IOException e) {}
437 }
438 }
439
440 public void println(String logName, char x) {
441 if (debugOutput() && isConsoleEnabled(logName)) {
442 _output.println(x);
443 }
444 if (debugOutput() && isFileEnabled(logName)) {
445 try {
446 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
447 w.println(x);
448 w.close();
449 }
450 catch(IOException e) {}
451 }
452 }
453
454 public void println(String logName, int x) {
455 if (debugOutput() && isConsoleEnabled(logName)) {
456 _output.println(x);
457 }
458 if (debugOutput() && isFileEnabled(logName)) {
459 try {
460 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
461 w.println(x);
462 w.close();
463 }
464 catch(IOException e) {}
465 }
466 }
467
468 public void println(String logName, long x) {
469 if (debugOutput() && isConsoleEnabled(logName)) {
470 _output.println(x);
471 }
472 if (debugOutput() && isFileEnabled(logName)) {
473 try {
474 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
475 w.println(x);
476 w.close();
477 }
478 catch(IOException e) {}
479 }
480 }
481
482 public void println(String logName, float x) {
483 if (debugOutput() && isConsoleEnabled(logName)) {
484 _output.println(x);
485 }
486 if (debugOutput() && isFileEnabled(logName)) {
487 try {
488 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
489 w.println(x);
490 w.close();
491 }
492 catch(IOException e) {}
493 }
494 }
495
496 public void println(String logName, double x) {
497 if (debugOutput() && isConsoleEnabled(logName)) {
498 _output.println(x);
499 }
500 if (debugOutput() && isFileEnabled(logName)) {
501 try {
502 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
503 w.println(x);
504 w.close();
505 }
506 catch(IOException e) {}
507 }
508 }
509
510 public void println(String logName, char x[]) {
511 if (debugOutput() && isConsoleEnabled(logName)) {
512 _output.println(x);
513 }
514 if (debugOutput() && isFileEnabled(logName)) {
515 try {
516 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
517 w.println(x);
518 w.close();
519 }
520 catch(IOException e) {}
521 }
522 }
523
524 public void println(String logName, String x) {
525 if (debugOutput() && isConsoleEnabled(logName)) {
526 _output.println(x);
527 }
528 if (debugOutput() && isFileEnabled(logName)) {
529 try {
530 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
531 w.println(x);
532 w.close();
533 }
534 catch(IOException e) {}
535 }
536 }
537
538 public void println(String logName, Object x) {
539 if (debugOutput() && isConsoleEnabled(logName)) {
540 _output.println(x);
541 }
542 if (debugOutput() && isFileEnabled(logName)) {
543 try {
544 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"), true);
545 w.println(x);
546 w.close();
547 }
548 catch(IOException e) {}
549 }
550 }
551
552 public PrintStream printf(String logName, String format, Object... args) {
553 if (debugOutput() && isConsoleEnabled(logName)) {
554 _output.printf(format, args);
555 }
556 if (debugOutput() && isFileEnabled(logName)) {
557 try {
558 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"));
559 w.printf(format, args);
560 w.close();
561 }
562 catch(IOException e) {}
563 }
564 return this;
565 }
566
567 public PrintStream format(String logName, String format, Object... args) {
568 if (debugOutput() && isConsoleEnabled(logName)) {
569 _output.format(format, args);
570 }
571 if (debugOutput() && isFileEnabled(logName)) {
572 try {
573 PrintWriter w = new PrintWriter(new FileWriter(logName+".log"));
574 w.format(format, args);
575 w.close();
576 }
577 catch(IOException e) {}
578 }
579 return this;
580 }
581 }