FileDocCategorySizeDatePackage
VSDDumper.javaAPI DocApache Poi 3.0.14668Tue Jun 26 23:08:00 BST 2007org.apache.poi.hdgf.dev

VSDDumper

public class VSDDumper extends Object
Developer helper class to dump out the pointer+stream structure of a Visio file

Fields Summary
Constructors Summary
Methods Summary
public static voiddumpStream(org.apache.poi.hdgf.streams.Stream stream, int indent)

		String ind = "";
		for(int i=0; i<indent; i++) {
			ind += "    ";
		}
		String ind2 = ind  + "    ";
		String ind3 = ind2 + "    ";
		
		
		Pointer ptr = stream.getPointer();
		System.out.println(ind + "Stream at\t" + ptr.getOffset() +
				" - " + Integer.toHexString(ptr.getOffset()));
		System.out.println(ind + "  Type is\t" + ptr.getType() +
				" - " + Integer.toHexString(ptr.getType()));
		System.out.println(ind + "  Format is\t" + ptr.getFormat() +
				" - " + Integer.toHexString(ptr.getFormat()));
		System.out.println(ind + "  Length is\t" + ptr.getLength() +
				" - " + Integer.toHexString(ptr.getLength()));
		if(ptr.destinationCompressed()) {
			int decompLen = stream._getContentsLength();
			System.out.println(ind + "  DC.Length is\t" + decompLen +
					" - " + Integer.toHexString(decompLen));
		}
		System.out.println(ind + "  Compressed is\t" + ptr.destinationCompressed());
		System.out.println(ind + "  Stream is\t" + stream.getClass().getName());
		
		byte[] db = stream._getStore()._getContents();
		String ds = "";
		if(db.length >= 8) {
			for(int i=0; i<8; i++) {
				if(i>0) ds += ", ";
				ds += db[i];
			}
		}
		System.out.println(ind + "  First few bytes are\t" + ds);
		
		if(stream instanceof PointerContainingStream) {
			PointerContainingStream pcs = (PointerContainingStream)stream;
			System.out.println(ind + "  Has " + 
					pcs.getPointedToStreams().length + " children:");
			
			for(int i=0; i<pcs.getPointedToStreams().length; i++) {
				dumpStream(pcs.getPointedToStreams()[i], (indent+1));
			}
		}
		if(stream instanceof ChunkStream) {
			ChunkStream cs = (ChunkStream)stream;
			System.out.println(ind + "  Has " + cs.getChunks().length +
					" chunks:");
			
			for(int i=0; i<cs.getChunks().length; i++) {
				Chunk chunk = cs.getChunks()[i];
				System.out.println(ind2 + "" + chunk.getName());
				System.out.println(ind2 + "  Length is " + chunk._getContents().length + " (" + Integer.toHexString(chunk._getContents().length) + ")");
				System.out.println(ind2 + "  OD Size is " + chunk.getOnDiskSize() + " (" + Integer.toHexString(chunk.getOnDiskSize()) + ")");
				System.out.println(ind2 + "  T / S is " + chunk.getTrailer() + " / " + chunk.getSeparator());
				System.out.println(ind2 + "  Holds " + chunk.getCommands().length + " commands");
				for(int j=0; j<chunk.getCommands().length; j++) {
					Command command = chunk.getCommands()[j];
					System.out.println(ind3 + "" + 
							command.getDefinition().getName() +
							" " + command.getValue()
					);
				}
			}
		}
	
public static voidmain(java.lang.String[] args)

		if(args.length == 0) {
			System.err.println("Use:");
			System.err.println("  VSDDumper <filename>");
			System.exit(1);
		}
		
		HDGFDiagram hdgf = new HDGFDiagram(
				new POIFSFileSystem(new FileInputStream(args[0]))
		);
		
		System.out.println("Opened " + args[0]);
		System.out.println("The document claims a size of " +
				hdgf.getDocumentSize() + "   (" + 
				Long.toHexString(hdgf.getDocumentSize()) + ")");
		System.out.println();
		
		dumpStream(hdgf.getTrailerStream(), 0);