jxl.biff.drawing.EscherDisplay Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of jxl Show documentation
Show all versions of jxl Show documentation
JExcelApi is a java library which provides the ability to read, write, and modify Microsoft Excel spreadsheets.
The newest version!
/*********************************************************************
*
* Copyright (C) 2005 Andrew Khan
*
* This library 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.1 of the License, or (at your option) any later version.
*
* This library 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 library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
***************************************************************************/
package jxl.biff.drawing;
import java.io.BufferedWriter;
import java.io.IOException;
/**
* Class used to display a complete hierarchically organized Escher stream
* The whole thing is dumped to System.out
*
* This class is only used as a debugging tool
*/
public class EscherDisplay
{
/**
* The escher stream
*/
private EscherStream stream;
/**
* The writer
*/
private BufferedWriter writer;
/**
* Constructor
*
* @param s the stream
* @param bw the writer
*/
public EscherDisplay(EscherStream s, BufferedWriter bw)
{
stream = s;
writer = bw;
}
/**
* Display the formatted escher stream
*
* @exception IOException
*/
public void display() throws IOException
{
EscherRecordData er = new EscherRecordData(stream, 0);
EscherContainer ec = new EscherContainer(er);
displayContainer(ec, 0);
}
/**
* Displays the escher container as text
*
* @param ec the escher container
* @param level the indent level
* @exception IOException
*/
private void displayContainer(EscherContainer ec, int level)
throws IOException
{
displayRecord(ec, level);
// Display the contents of the container
level++;
EscherRecord[] children = ec.getChildren();
for (int i = 0; i < children.length; i++)
{
EscherRecord er = children[i];
if (er.getEscherData().isContainer())
{
displayContainer((EscherContainer) er, level);
}
else
{
displayRecord(er, level);
}
}
}
/**
* Displays an escher record
*
* @param er the record to display
* @param level the amount of indentation
* @exception IOException
*/
private void displayRecord(EscherRecord er, int level)
throws IOException
{
indent(level);
EscherRecordType type = er.getType();
// Display the code
writer.write(Integer.toString(type.getValue(), 16));
writer.write(" - ");
// Display the name
if (type == EscherRecordType.DGG_CONTAINER)
{
writer.write("Dgg Container");
writer.newLine();
}
else if (type == EscherRecordType.BSTORE_CONTAINER)
{
writer.write("BStore Container");
writer.newLine();
}
else if (type == EscherRecordType.DG_CONTAINER)
{
writer.write("Dg Container");
writer.newLine();
}
else if (type == EscherRecordType.SPGR_CONTAINER)
{
writer.write("Spgr Container");
writer.newLine();
}
else if (type == EscherRecordType.SP_CONTAINER)
{
writer.write("Sp Container");
writer.newLine();
}
else if (type == EscherRecordType.DGG)
{
writer.write("Dgg");
writer.newLine();
}
else if (type == EscherRecordType.BSE)
{
writer.write("Bse");
writer.newLine();
}
else if (type == EscherRecordType.DG)
{
Dg dg = new Dg(er.getEscherData());
writer.write("Dg: drawing id " + dg.getDrawingId() +
" shape count " + dg.getShapeCount());
writer.newLine();
}
else if (type == EscherRecordType.SPGR)
{
writer.write("Spgr");
writer.newLine();
}
else if (type == EscherRecordType.SP)
{
Sp sp = new Sp(er.getEscherData());
writer.write("Sp: shape id " + sp.getShapeId() +
" shape type " + sp.getShapeType());
writer.newLine();
}
else if (type == EscherRecordType.OPT)
{
Opt opt = new Opt(er.getEscherData());
Opt.Property p260 = opt.getProperty(260);
Opt.Property p261 = opt.getProperty(261);
writer.write("Opt (value, stringValue): ");
if (p260 != null)
{
writer.write("260: " +
p260.value + ", " +
p260.stringValue +
";");
}
if (p261 != null)
{
writer.write("261: " +
p261.value + ", " +
p261.stringValue +
";");
}
writer.newLine();
}
else if (type == EscherRecordType.CLIENT_ANCHOR)
{
writer.write("Client Anchor");
writer.newLine();
}
else if (type == EscherRecordType.CLIENT_DATA)
{
writer.write("Client Data");
writer.newLine();
}
else if (type == EscherRecordType.CLIENT_TEXT_BOX)
{
writer.write("Client Text Box");
writer.newLine();
}
else if (type == EscherRecordType.SPLIT_MENU_COLORS)
{
writer.write("Split Menu Colors");
writer.newLine();
}
else
{
writer.write("???");
writer.newLine();
}
}
/**
* Indents to the amount specified by the level
*
* @param level the level
* @exception IOException
*/
private void indent(int level) throws IOException
{
for (int i = 0; i < level * 2; i++)
{
writer.write(' ');
}
}
}