src/share/classes/com/sun/corba/se/impl/orbutil/ObjectWriter.java

Thu, 31 Aug 2017 18:10:36 +0800

author
aoqi
date
Thu, 31 Aug 2017 18:10:36 +0800
changeset 748
6845b95cba6b
parent 158
91006f157c46
parent 0
7ef37b2cdcad
permissions
-rw-r--r--

merge

     1 /*
     2  * Copyright (c) 2002, Oracle and/or its affiliates. All rights reserved.
     3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
     4  *
     5  * This code is free software; you can redistribute it and/or modify it
     6  * under the terms of the GNU General Public License version 2 only, as
     7  * published by the Free Software Foundation.  Oracle designates this
     8  * particular file as subject to the "Classpath" exception as provided
     9  * by Oracle in the LICENSE file that accompanied this code.
    10  *
    11  * This code is distributed in the hope that it will be useful, but WITHOUT
    12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
    13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
    14  * version 2 for more details (a copy is included in the LICENSE file that
    15  * accompanied this code).
    16  *
    17  * You should have received a copy of the GNU General Public License version
    18  * 2 along with this work; if not, write to the Free Software Foundation,
    19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
    20  *
    21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
    22  * or visit www.oracle.com if you need additional information or have any
    23  * questions.
    24  */
    26 package com.sun.corba.se.impl.orbutil ;
    28 import java.util.Arrays ;
    30 public abstract class ObjectWriter {
    31     public static ObjectWriter make( boolean isIndenting,
    32         int initialLevel, int increment )
    33     {
    34         if (isIndenting)
    35             return new IndentingObjectWriter( initialLevel, increment ) ;
    36         else
    37             return new SimpleObjectWriter() ;
    38     }
    40     public abstract void startObject( Object obj ) ;
    42     public abstract void startElement() ;
    44     public abstract void endElement() ;
    46     public abstract void endObject( String str ) ;
    48     public abstract void endObject() ;
    50     public String toString() { return result.toString() ; }
    52     public void append( boolean arg ) { result.append( arg ) ; }
    54     public void append( char arg ) { result.append( arg ) ; }
    56     public void append( short arg ) { result.append( arg ) ; }
    58     public void append( int arg ) { result.append( arg ) ; }
    60     public void append( long arg ) { result.append( arg ) ; }
    62     public void append( float arg ) { result.append( arg ) ; }
    64     public void append( double arg ) { result.append( arg ) ; }
    66     public void append( String arg ) { result.append( arg ) ; }
    68 //=================================================================================================
    69 // Implementation
    70 //=================================================================================================
    72     protected StringBuffer result ;
    74     protected ObjectWriter()
    75     {
    76         result = new StringBuffer() ;
    77     }
    79     protected void appendObjectHeader( Object obj )
    80     {
    81         result.append( obj.getClass().getName() ) ;
    82         result.append( "<" ) ;
    83         result.append( System.identityHashCode( obj ) ) ;
    84         result.append( ">" ) ;
    85         Class compClass = obj.getClass().getComponentType() ;
    87         if (compClass != null) {
    88             result.append( "[" ) ;
    89             if (compClass == boolean.class) {
    90                 boolean[] arr = (boolean[])obj ;
    91                 result.append( arr.length ) ;
    92                 result.append( "]" ) ;
    93             } else if (compClass == byte.class) {
    94                 byte[] arr = (byte[])obj ;
    95                 result.append( arr.length ) ;
    96                 result.append( "]" ) ;
    97             } else if (compClass == short.class) {
    98                 short[] arr = (short[])obj ;
    99                 result.append( arr.length ) ;
   100                 result.append( "]" ) ;
   101             } else if (compClass == int.class) {
   102                 int[] arr = (int[])obj ;
   103                 result.append( arr.length ) ;
   104                 result.append( "]" ) ;
   105             } else if (compClass == long.class) {
   106                 long[] arr = (long[])obj ;
   107                 result.append( arr.length ) ;
   108                 result.append( "]" ) ;
   109             } else if (compClass == char.class) {
   110                 char[] arr = (char[])obj ;
   111                 result.append( arr.length ) ;
   112                 result.append( "]" ) ;
   113             } else if (compClass == float.class) {
   114                 float[] arr = (float[])obj ;
   115                 result.append( arr.length ) ;
   116                 result.append( "]" ) ;
   117             } else if (compClass == double.class) {
   118                 double[] arr = (double[])obj ;
   119                 result.append( arr.length ) ;
   120                 result.append( "]" ) ;
   121             } else { // array of object
   122                 java.lang.Object[] arr = (java.lang.Object[])obj ;
   123                 result.append( arr.length ) ;
   124                 result.append( "]" ) ;
   125             }
   126         }
   128         result.append( "(" ) ;
   129     }
   131     /** Expected patterns:
   132     * startObject endObject( str )
   133     *   header( elem )\n
   134     * startObject ( startElement append* endElement ) * endObject
   135     *   header(\n
   136     *       append*\n *
   137     *   )\n
   138     */
   139     private static class IndentingObjectWriter extends ObjectWriter {
   140         private int level ;
   141         private int increment ;
   143         public IndentingObjectWriter( int initialLevel, int increment )
   144         {
   145             this.level = initialLevel ;
   146             this.increment = increment ;
   147             startLine() ;
   148         }
   150         private void startLine()
   151         {
   152             char[] fill = new char[ level * increment ] ;
   153             Arrays.fill( fill, ' ' ) ;
   154             result.append( fill ) ;
   155         }
   157         public void startObject( java.lang.Object obj )
   158         {
   159             appendObjectHeader( obj ) ;
   160             level++ ;
   161         }
   163         public void startElement()
   164         {
   165             result.append( "\n" ) ;
   166             startLine() ;
   167         }
   169         public void endElement()
   170         {
   171         }
   173         public void endObject( String str )
   174         {
   175             level-- ;
   176             result.append( str ) ;
   177             result.append( ")" ) ;
   178         }
   180         public void endObject( )
   181         {
   182             level-- ;
   183             result.append( "\n" ) ;
   184             startLine() ;
   185             result.append( ")" ) ;
   186         }
   187     }
   189     private static class SimpleObjectWriter extends ObjectWriter {
   190         public void startObject( java.lang.Object obj )
   191         {
   192             appendObjectHeader( obj ) ;
   193             result.append( " " ) ;
   194         }
   196         public void startElement()
   197         {
   198             result.append( " " ) ;
   199         }
   201         public void endObject( String str )
   202         {
   203             result.append( str ) ;
   204             result.append( ")" ) ;
   205         }
   207         public void endElement()
   208         {
   209         }
   211         public void endObject()
   212         {
   213             result.append( ")" ) ;
   214         }
   215     }
   216 }

mercurial