first commit
This commit is contained in:
177
hrmsEjb/jxl/biff/drawing/ObjRecord.java
Normal file
177
hrmsEjb/jxl/biff/drawing/ObjRecord.java
Normal file
@@ -0,0 +1,177 @@
|
||||
package jxl.biff.drawing;
|
||||
|
||||
import common.Assert;
|
||||
import common.Logger;
|
||||
import jxl.biff.IntegerHelper;
|
||||
import jxl.biff.Type;
|
||||
import jxl.biff.WritableRecordData;
|
||||
import jxl.read.biff.Record;
|
||||
|
||||
public class ObjRecord extends WritableRecordData {
|
||||
private static final Logger logger = Logger.getLogger(ObjRecord.class);
|
||||
|
||||
private ObjType type;
|
||||
|
||||
private boolean read;
|
||||
|
||||
private int objectId;
|
||||
|
||||
private static final class ObjType {
|
||||
public int value;
|
||||
|
||||
public String desc;
|
||||
|
||||
private static ObjType[] types = new ObjType[0];
|
||||
|
||||
ObjType(int v, String d) {
|
||||
this.value = v;
|
||||
this.desc = d;
|
||||
ObjType[] oldtypes = types;
|
||||
types = new ObjType[types.length + 1];
|
||||
System.arraycopy(oldtypes, 0, types, 0, oldtypes.length);
|
||||
types[oldtypes.length] = this;
|
||||
}
|
||||
|
||||
public String toString() {
|
||||
return this.desc;
|
||||
}
|
||||
|
||||
public static ObjType getType(int val) {
|
||||
ObjType retval = ObjRecord.UNKNOWN;
|
||||
for (int i = 0; i < types.length && retval == ObjRecord.UNKNOWN; i++) {
|
||||
if ((types[i]).value == val)
|
||||
retval = types[i];
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
}
|
||||
|
||||
public static final ObjType TBD2 = new ObjType(1, "TBD2");
|
||||
|
||||
public static final ObjType TBD = new ObjType(2, "TBD");
|
||||
|
||||
public static final ObjType CHART = new ObjType(5, "Chart");
|
||||
|
||||
public static final ObjType TEXT = new ObjType(6, "Text");
|
||||
|
||||
public static final ObjType BUTTON = new ObjType(7, "Button");
|
||||
|
||||
public static final ObjType PICTURE = new ObjType(8, "Picture");
|
||||
|
||||
public static final ObjType CHECKBOX = new ObjType(14, "Checkbox");
|
||||
|
||||
public static final ObjType OPTION = new ObjType(12, "Option");
|
||||
|
||||
public static final ObjType EDITBOX = new ObjType(13, "Edit Box");
|
||||
|
||||
public static final ObjType LABEL = new ObjType(14, "Label");
|
||||
|
||||
public static final ObjType DIALOGUEBOX = new ObjType(15, "Dialogue Box");
|
||||
|
||||
public static final ObjType LISTBOX = new ObjType(18, "List Box");
|
||||
|
||||
public static final ObjType GROUPBOX = new ObjType(19, "Group Box");
|
||||
|
||||
public static final ObjType COMBOBOX = new ObjType(20, "Combo Box");
|
||||
|
||||
public static final ObjType MSOFFICEDRAWING = new ObjType(30, "MS Office Drawing");
|
||||
|
||||
public static final ObjType FORMCONTROL = new ObjType(20, "Form Combo Box");
|
||||
|
||||
public static final ObjType EXCELNOTE = new ObjType(25, "Excel Note");
|
||||
|
||||
public static final ObjType UNKNOWN = new ObjType(255, "Unknown");
|
||||
|
||||
private static final int COMMON_DATA_LENGTH = 22;
|
||||
|
||||
private static final int CLIPBOARD_FORMAT_LENGTH = 6;
|
||||
|
||||
private static final int PICTURE_OPTION_LENGTH = 6;
|
||||
|
||||
private static final int NOTE_STRUCTURE_LENGTH = 26;
|
||||
|
||||
private static final int END_LENGTH = 4;
|
||||
|
||||
public ObjRecord(Record t) {
|
||||
super(t);
|
||||
byte[] data = t.getData();
|
||||
int objtype = IntegerHelper.getInt(data[4], data[5]);
|
||||
this.read = true;
|
||||
this.type = ObjType.getType(objtype);
|
||||
if (this.type == UNKNOWN)
|
||||
logger.warn("unknown object type code " + objtype);
|
||||
this.objectId = IntegerHelper.getInt(data[6], data[7]);
|
||||
}
|
||||
|
||||
ObjRecord(int objId, ObjType t) {
|
||||
super(Type.OBJ);
|
||||
this.objectId = objId;
|
||||
this.type = t;
|
||||
}
|
||||
|
||||
public byte[] getData() {
|
||||
if (this.read)
|
||||
return getRecord().getData();
|
||||
if (this.type == PICTURE || this.type == CHART)
|
||||
return getPictureData();
|
||||
if (this.type == EXCELNOTE)
|
||||
return getNoteData();
|
||||
Assert.verify(false);
|
||||
return null;
|
||||
}
|
||||
|
||||
private byte[] getPictureData() {
|
||||
int dataLength = 38;
|
||||
int pos = 0;
|
||||
byte[] data = new byte[dataLength];
|
||||
IntegerHelper.getTwoBytes(21, data, pos);
|
||||
IntegerHelper.getTwoBytes(18, data, pos + 2);
|
||||
IntegerHelper.getTwoBytes(this.type.value, data, pos + 4);
|
||||
IntegerHelper.getTwoBytes(this.objectId, data, pos + 6);
|
||||
IntegerHelper.getTwoBytes(24593, data, pos + 8);
|
||||
pos += 22;
|
||||
IntegerHelper.getTwoBytes(7, data, pos);
|
||||
IntegerHelper.getTwoBytes(2, data, pos + 2);
|
||||
IntegerHelper.getTwoBytes(65535, data, pos + 4);
|
||||
pos += 6;
|
||||
IntegerHelper.getTwoBytes(8, data, pos);
|
||||
IntegerHelper.getTwoBytes(2, data, pos + 2);
|
||||
IntegerHelper.getTwoBytes(1, data, pos + 4);
|
||||
pos += 6;
|
||||
IntegerHelper.getTwoBytes(0, data, pos);
|
||||
IntegerHelper.getTwoBytes(0, data, pos + 2);
|
||||
pos += 4;
|
||||
return data;
|
||||
}
|
||||
|
||||
private byte[] getNoteData() {
|
||||
int dataLength = 52;
|
||||
int pos = 0;
|
||||
byte[] data = new byte[dataLength];
|
||||
IntegerHelper.getTwoBytes(21, data, pos);
|
||||
IntegerHelper.getTwoBytes(18, data, pos + 2);
|
||||
IntegerHelper.getTwoBytes(this.type.value, data, pos + 4);
|
||||
IntegerHelper.getTwoBytes(this.objectId, data, pos + 6);
|
||||
IntegerHelper.getTwoBytes(16401, data, pos + 8);
|
||||
pos += 22;
|
||||
IntegerHelper.getTwoBytes(13, data, pos);
|
||||
IntegerHelper.getTwoBytes(22, data, pos + 2);
|
||||
pos += 26;
|
||||
IntegerHelper.getTwoBytes(0, data, pos);
|
||||
IntegerHelper.getTwoBytes(0, data, pos + 2);
|
||||
pos += 4;
|
||||
return data;
|
||||
}
|
||||
|
||||
public Record getRecord() {
|
||||
return super.getRecord();
|
||||
}
|
||||
|
||||
public ObjType getType() {
|
||||
return this.type;
|
||||
}
|
||||
|
||||
int getObjectId() {
|
||||
return this.objectId;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user