make/corba/src/classes/build/tools/logutil/IndentingPrintWriter.java
changeset 47216 71c04702a3d5
parent 23067 7b20ffccad89
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/make/corba/src/classes/build/tools/logutil/IndentingPrintWriter.java	Tue Sep 12 19:03:39 2017 +0200
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2003, 2009, Oracle and/or its affiliates. All rights reserved.
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * This code is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU General Public License version 2 only, as
+ * published by the Free Software Foundation.  Oracle designates this
+ * particular file as subject to the "Classpath" exception as provided
+ * by Oracle in the LICENSE file that accompanied this code.
+ *
+ * This code 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 General Public License
+ * version 2 for more details (a copy is included in the LICENSE file that
+ * accompanied this code).
+ *
+ * You should have received a copy of the GNU General Public License version
+ * 2 along with this work; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
+ *
+ * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
+ * or visit www.oracle.com if you need additional information or have any
+ * questions.
+ */
+
+package build.tools.logutil;
+
+import java.io.PrintWriter ;
+import java.io.Writer ;
+import java.io.OutputStream ;
+import java.io.BufferedWriter ;
+import java.io.OutputStreamWriter ;
+import java.util.StringTokenizer ;
+
+public class IndentingPrintWriter extends PrintWriter {
+    private int level = 0 ;
+    private int indentWidth = 4 ;
+    private String indentString = "" ;
+
+    public void printMsg( String msg, Object... data )
+    {
+        // System.out.println( "printMsg called with msg=" + msg + " data=" + data ) ;
+        StringTokenizer st = new StringTokenizer( msg, "@", true ) ;
+        StringBuffer result = new StringBuffer() ;
+        String token = null ;
+        int pos = 0;
+
+        while (st.hasMoreTokens()) {
+            token = st.nextToken() ;
+            if (token.equals("@")) {
+                if (pos < data.length) {
+                    result.append( data[pos] );
+                    ++pos;
+                } else {
+                    throw new Error( "List too short for message" ) ;
+                }
+            } else {
+                result.append( token ) ;
+            }
+        }
+
+        // System.out.println( "Printing result " + result + " to file" ) ;
+        print( result ) ;
+        println() ;
+    }
+
+    public IndentingPrintWriter (Writer out) {
+        super( out, true ) ;
+        // System.out.println( "Constructing a new IndentingPrintWriter with Writer " + out ) ;
+    }
+
+    public IndentingPrintWriter(Writer out, boolean autoFlush) {
+        super( out, autoFlush ) ;
+        // System.out.println( "Constructing a new IndentingPrintWriter with Writer " + out ) ;
+    }
+
+    public IndentingPrintWriter(OutputStream out) {
+        super(out, true);
+        // System.out.println( "Constructing a new IndentingPrintWriter with OutputStream " + out ) ;
+    }
+
+    public IndentingPrintWriter(OutputStream out, boolean autoFlush) {
+        super(new BufferedWriter(new OutputStreamWriter(out)), autoFlush);
+        // System.out.println( "Constructing a new IndentingPrintWriter with OutputStream " + out ) ;
+    }
+
+    public void setIndentWidth( int indentWidth )
+    {
+        this.indentWidth = indentWidth ;
+        updateIndentString() ;
+    }
+
+    public void indent()
+    {
+        level++ ;
+        updateIndentString() ;
+    }
+
+    public void undent()
+    {
+        if (level > 0) {
+            level-- ;
+            updateIndentString() ;
+        }
+    }
+
+    private void updateIndentString()
+    {
+        int size = level * indentWidth ;
+        StringBuffer sbuf = new StringBuffer( size ) ;
+        for (int ctr = 0; ctr<size; ctr++ )
+            sbuf.append( " " ) ;
+        indentString = sbuf.toString() ;
+    }
+
+    // overridden from PrintWriter
+    public void println()
+    {
+        super.println() ;
+
+        print( indentString ) ;
+    }
+}