summaryrefslogtreecommitdiff
path: root/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java
diff options
context:
space:
mode:
Diffstat (limited to 'xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java')
-rw-r--r--xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java339
1 files changed, 339 insertions, 0 deletions
diff --git a/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java b/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java
new file mode 100644
index 000000000000..8b9f06eb4e86
--- /dev/null
+++ b/xmerge/source/xmerge/java/org/openoffice/xmerge/util/Debug.java
@@ -0,0 +1,339 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2000, 2010 Oracle and/or its affiliates.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+package org.openoffice.xmerge.util;
+
+import java.io.BufferedWriter;
+import java.io.IOException;
+import java.io.FileWriter;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.PrintWriter;
+import java.io.Writer;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.Calendar;
+import java.util.Properties;
+
+/**
+ * This class is used for logging debug messages.
+ * Currently, there are three types of logging: {@link #INFO},
+ * {@link #TRACE} & {@link #ERROR}. Use the Debug.properties
+ * file to set or unset each type. Also use Debug.properties
+ * to set the writer to either <code>System.out</code>,
+ * <code>System.err</code>, or to a file.
+ *
+ * @author Herbie Ong
+ */
+public final class Debug {
+
+ /** Informational messages. */
+ public final static int INFO = 0x0001;
+ /** Error messages. */
+ public final static int ERROR = 0x0002;
+ /** Trace messages. */
+ public final static int TRACE = 0x0004;
+
+ /** To set a flag. */
+ public final static boolean SET = true;
+ /** To unset a flag. */
+ public final static boolean UNSET = false;
+
+ private static int flags = 0;
+ private static PrintWriter writer = null;
+
+ static {
+
+ try {
+
+ Class c = new Debug().getClass();
+ InputStream is = c.getResourceAsStream("Debug.properties");
+ Properties props = new Properties();
+ props.load(is);
+
+ String info = props.getProperty("debug.info", "false");
+ info = info.toLowerCase();
+
+ if (info.equals("true")) {
+ setFlags(Debug.INFO, Debug.SET);
+ }
+
+ String trace = props.getProperty("debug.trace", "false");
+ trace = trace.toLowerCase();
+
+ if (trace.equals("true")) {
+ setFlags(Debug.TRACE, Debug.SET);
+ }
+
+ String error = props.getProperty("debug.error", "false");
+ error = error.toLowerCase();
+
+ if (error.equals("true")) {
+ setFlags(Debug.ERROR, Debug.SET);
+ }
+
+ String w = props.getProperty("debug.output", "System.out");
+ setOutput(w);
+
+ } catch (Throwable ex) {
+
+ ex.printStackTrace(System.err);
+ }
+ }
+
+
+ /**
+ * Private constructor so as not to allow any instances
+ * of this class. This serves as a singleton class.
+ */
+ private Debug() {
+ }
+
+
+ /**
+ * Set the output to the specified argument.
+ * This method is only used internally to prevent
+ * invalid string parameters.
+ *
+ * @param str Output specifier.
+ */
+ private static void setOutput(String str) {
+
+ if (writer == null) {
+
+ if (str.equals("System.out")) {
+
+ setOutput(System.out);
+
+ } else if (str.equals("System.err")) {
+
+ setOutput(System.err);
+
+ } else {
+
+ try {
+
+ setOutput(new FileWriter(str));
+
+ } catch (IOException e) {
+
+ e.printStackTrace(System.err);
+ }
+ }
+ }
+ }
+
+
+ /**
+ * Set the output to an <code>OutputStream</code> object.
+ *
+ * @param stream OutputStream object.
+ */
+ private static void setOutput(OutputStream stream) {
+
+ setOutput(new OutputStreamWriter(stream));
+ }
+
+
+ /**
+ * Set the <code>Writer</code> object to manage the output.
+ *
+ * @param w <code>Writer</code> object to write out.
+ */
+ private static void setOutput(Writer w) {
+
+ if (writer != null) {
+
+ writer.close();
+ }
+
+ writer = new PrintWriter(new BufferedWriter(w), true);
+ }
+
+
+ /**
+ * <p>
+ * This method sets the levels for debugging logs.
+ * Example calls:
+ * </p>
+ *
+ * <blockquote><pre><code>
+ * Debug.setFlags( Debug.INFO, Debug.SET )
+ * Debug.setFlags( Debug.TRACE, Debug.SET )
+ * Debug.setFlags( Debug.INFO | Debug.TRACE, Debug.SET )
+ * Debug.setFlags( Debug.ERROR, Debug.UNSET )
+ * </code></pre></blockquote>
+ *
+ * @param f Debug flag
+ * @param set Use Debug.SET to set, and Debug.UNSET to unset
+ * the given flag.
+ */
+ private static void setFlags(int f, boolean set) {
+
+ if (set) {
+ flags |= f;
+ } else {
+ flags &= ~f;
+ }
+ }
+
+
+ /**
+ * Prints out information regarding platform.
+ */
+ public static void logSystemInfo() {
+
+ if (writer != null) {
+
+ writer.println();
+ writer.println("Platform Information:");
+ writer.println("OS : " + System.getProperty("os.name"));
+ writer.println("Version : " + System.getProperty("os.version"));
+ writer.println("Platform : " + System.getProperty("os.arch"));
+ writer.println("JDK Version : " + System.getProperty("java.version"));
+ writer.println("JDK Vendor : " + System.getProperty("java.vendor"));
+ writer.println();
+ }
+ }
+
+
+ /**
+ * Prints out timestamp.
+ */
+ public static void logTime() {
+
+ if (writer != null) {
+
+ Date time = Calendar.getInstance().getTime();
+ DateFormat dt = DateFormat.getDateTimeInstance(DateFormat.FULL, DateFormat.FULL);
+ writer.println(dt.format(time));
+ }
+ }
+
+
+ /**
+ * Checks if flag is set.
+ *
+ * @return true if info logging is on, otherwise false
+ */
+ public static boolean isFlagSet(int f) {
+
+ return ((flags & f) != 0);
+ }
+
+
+ /**
+ * <p>Log message based on the flag type.</p>
+ *
+ * <p>Example 1:</p>
+ *
+ * <blockquote><pre><code>
+ * Debug.log(Debug.INFO, "info string here");
+ * </code></pre></blockquote>
+ *
+ * <p>This logs the message during runtime if
+ * <code>debug.info</code> in the properties file is
+ * set to true.</p>
+ *
+ * <p>Example 2:</p>
+ *
+ * <blockquote><pre><code>
+ * Debug.log(Debug.INFO | Debug.TRACE, "info string here");
+ * </code></pre></blockquote>
+ *
+ * <p>This logs the message during runtime if debug.info or debug.trace
+ * in the properties file is set to true.</p>
+ *
+ * @param int Log type, one of the Debug constants
+ * {@link #INFO}, {@link #TRACE}, {@link #ERROR}
+ * or a combination of which or'ed together.
+ * @param msg The message.
+ */
+ public static void log(int flag, String msg) {
+
+ if (isFlagSet(flag)) {
+
+ if (writer != null) {
+
+ writer.println(msg);
+ }
+ }
+ }
+
+
+ /**
+ * Log message based on flag type plus print out stack trace
+ * of the exception passed in. Refer to the other log method
+ * for description.
+ *
+ * @param int Log type, one of the Debug constants
+ * {@link #INFO}, {@link #TRACE}, {@link #ERROR}
+ * or a combination of which or'ed together.
+ * @param msg The message.
+ * @param e Throwable object.
+ */
+ public static void log(int flag, String msg, Throwable e) {
+
+ if (isFlagSet(flag)) {
+
+ if (writer != null) {
+
+ writer.println(msg);
+ if (e != null)
+ e.printStackTrace(writer);
+ }
+ }
+ }
+
+
+ /**
+ * Converts the given bytes to a <code>String</code> of
+ * Hex digits.
+ *
+ * @param bytes <code>byte</code> array.
+ *
+ * @return Hex representation in a <code>String</code>.
+ */
+ public static String byteArrayToHexString(byte bytes[]) {
+
+ StringBuffer buff = new StringBuffer();
+
+ for (int i = 0; i < bytes.length; i++) {
+
+ int ch = ((int) bytes[i] & 0xff);
+ String str = Integer.toHexString(ch);
+ if (str.length() < 2)
+ buff.append('0');
+ buff.append(str);
+ buff.append(' ');
+ }
+
+ return buff.toString();
+ }
+}
+