Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   * Copyright 1&1 Internet AG, http://www.1and1.org
   *
   * This program is free software; you can redistribute it and/or modify
   * it under the terms of the GNU Lesser General Public License as published by
   * the Free Software Foundation; either version 2 of the License,
   * or (at your option) any later version.
   *
   * This program 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 for more details.
  *
  * You should have received a copy of the GNU Lesser General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.sf.beezle.sushi.util;
 
 
 import java.io.Writer;
 import java.util.List;

Readable object output. Implementation uses metadata, but that's hidden from the caller.
 
 public class Dump {
     public static final int DEFAULT_DEPTH = 2;
 
     public static String dump(Object obj) {
         return dump(obj);
     }
 
     public static String dump(Object objint maxDepth) {
         StringWriter dest;
         
         dest = new StringWriter();
         try {
             dump(new World(), objdestmaxDepth);
         } catch (IOException e) {
             throw new RuntimeException("unexected world exception from StringWriter: " + e.getMessage(), e);
         }
         return dest.toString();
     }
 
     public static void dump(Object objNode destthrows IOException {
         dump(objdest);
     }
     
     public static void dump(Object objNode destint maxDepththrows IOException {
         Writer writer;
 
         writer = dest.createWriter();
         dump(dest.getWorld(), objwritermaxDepth);
         writer.close();
     }
 
     public static void dump(World worldObject objWriter destint maxDepththrows IOException {
         new Dump(new ReflectSchema(world), destmaxDepth).run(obj);
     }
 
     private final Schema metadata;
     private final Writer dest;
     private final int maxDepth;
     private final List<Objectstack;
     
     public Dump(Schema metadataWriter dest) {
         this(metadatadest.);
     }
     
     public Dump(Schema metadataWriter destint maxDepth) {
         this. = metadata;
         this. = dest;
         this. = maxDepth;
         this. = new ArrayList<Object>();
     }
     
     public void run(Object objthrows IOException {
         if (.size() != 0) {
             throw new IllegalStateException();
         }
         run(nullobj);
         if (.size() != 0) {
             throw new IllegalStateException();
         }
     }
     
     public void run(String nameObject objthrows IOException {
         run(name.type(obj == null ? . : obj.getClass()), obj);
     }
    private void run(String nameType typeObject objthrows IOException {
        if (type instanceof SimpleType) {
            header(objnametoDump((SimpleTypetypeobj), false);
        } else {
            if (header(objnametype.getName(), true)) {
                fields((ComplexTypetypeobj);
                pop();
            }
        }
    }

    
Override this for custom formats
    protected String toDump(SimpleType simpleTypeObject obj) {
        Class<?> type;
        
        type = simpleType.getType();
        if (type == String.class) {
            return '"' + ((Stringobj) + '"'
        } else if (type == Character.class) {
            return "'" + obj + "'";
        } else {
            return simpleType.valueToString(obj);
        }
    }
    private void pop() {
        .remove(.size() - 1);
    }
    
    private boolean header(Object objString nameString valueboolean hasBodythrows IOException {
        int depth;
        
        depth = .size();
        for (int i = 0; i < depthi++) {
            .write("  ");
        }
        if (name != null) {
            .write(name);
            .write(": ");
        }
        .write(value);
        if (!hasBody) {
            .write('\n');
            return false;
        }
        if (depth >= ) {
            .write(" [...]\n");
            return false;
        }
        for (Object s : ) {
            if (obj == s) {
                .write(" [" + obj.hashCode() + "]\n");
                return false;
            }
        }
        .write('\n');
        .add(obj);
        return true;
    }
    //-- "body" methods 
    
    public void fields(ComplexType typeObject objthrows IOException {
        String name;
        int idx;
        
        for (Item<?> item : type.items()) {
            idx = 0;
            for (Object child : item.get(obj)) {
                name = item.getName();
                if (item.getCardinality(). > 1) {
                    name = name + '[' + idx++ + ']';
                }
                run(namechild);
            }
        }
    }
New to GrepCode? Check out our FAQ X