first commit
This commit is contained in:
126
hrmsEjb/jxl/biff/drawing/Opt.java
Normal file
126
hrmsEjb/jxl/biff/drawing/Opt.java
Normal file
@@ -0,0 +1,126 @@
|
||||
package jxl.biff.drawing;
|
||||
|
||||
import common.Logger;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import jxl.biff.IntegerHelper;
|
||||
import jxl.biff.StringHelper;
|
||||
|
||||
class Opt extends EscherAtom {
|
||||
private static Logger logger = Logger.getLogger(Opt.class);
|
||||
|
||||
private byte[] data;
|
||||
|
||||
private int numProperties;
|
||||
|
||||
private ArrayList properties;
|
||||
|
||||
static final class Property {
|
||||
int id;
|
||||
|
||||
boolean blipId;
|
||||
|
||||
boolean complex;
|
||||
|
||||
int value;
|
||||
|
||||
String stringValue;
|
||||
|
||||
public Property(int i, boolean bl, boolean co, int v) {
|
||||
this.id = i;
|
||||
this.blipId = bl;
|
||||
this.complex = co;
|
||||
this.value = v;
|
||||
}
|
||||
|
||||
public Property(int i, boolean bl, boolean co, int v, String s) {
|
||||
this.id = i;
|
||||
this.blipId = bl;
|
||||
this.complex = co;
|
||||
this.value = v;
|
||||
this.stringValue = s;
|
||||
}
|
||||
}
|
||||
|
||||
public Opt(EscherRecordData erd) {
|
||||
super(erd);
|
||||
this.numProperties = getInstance();
|
||||
readProperties();
|
||||
}
|
||||
|
||||
private void readProperties() {
|
||||
this.properties = new ArrayList();
|
||||
int pos = 0;
|
||||
byte[] bytes = getBytes();
|
||||
for (int j = 0; j < this.numProperties; j++) {
|
||||
int val = IntegerHelper.getInt(bytes[pos], bytes[pos + 1]);
|
||||
int id = val & 0x3FFF;
|
||||
int value = IntegerHelper.getInt(bytes[pos + 2], bytes[pos + 3], bytes[pos + 4], bytes[pos + 5]);
|
||||
Property p = new Property(id, ((val & 0x4000) != 0), ((val & 0x8000) != 0), value);
|
||||
pos += 6;
|
||||
this.properties.add(p);
|
||||
}
|
||||
for (Iterator i = this.properties.iterator(); i.hasNext(); ) {
|
||||
Property p = i.next();
|
||||
if (p.complex) {
|
||||
p.stringValue = StringHelper.getUnicodeString(bytes, p.value / 2, pos);
|
||||
pos += p.value;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Opt() {
|
||||
super(EscherRecordType.OPT);
|
||||
this.properties = new ArrayList();
|
||||
setVersion(3);
|
||||
}
|
||||
|
||||
byte[] getData() {
|
||||
this.numProperties = this.properties.size();
|
||||
setInstance(this.numProperties);
|
||||
this.data = new byte[this.numProperties * 6];
|
||||
int pos = 0;
|
||||
for (Iterator iterator1 = this.properties.iterator(); iterator1.hasNext(); ) {
|
||||
Property p = iterator1.next();
|
||||
int val = p.id & 0x3FFF;
|
||||
if (p.blipId)
|
||||
val |= 0x4000;
|
||||
if (p.complex)
|
||||
val |= 0x8000;
|
||||
IntegerHelper.getTwoBytes(val, this.data, pos);
|
||||
IntegerHelper.getFourBytes(p.value, this.data, pos + 2);
|
||||
pos += 6;
|
||||
}
|
||||
for (Iterator i = this.properties.iterator(); i.hasNext(); ) {
|
||||
Property p = i.next();
|
||||
if (p.complex && p.stringValue != null) {
|
||||
byte[] newData = new byte[this.data.length + p.stringValue.length() * 2];
|
||||
System.arraycopy(this.data, 0, newData, 0, this.data.length);
|
||||
StringHelper.getUnicodeBytes(p.stringValue, newData, this.data.length);
|
||||
this.data = newData;
|
||||
}
|
||||
}
|
||||
return setHeaderData(this.data);
|
||||
}
|
||||
|
||||
void addProperty(int id, boolean blip, boolean complex, int val) {
|
||||
Property p = new Property(id, blip, complex, val);
|
||||
this.properties.add(p);
|
||||
}
|
||||
|
||||
void addProperty(int id, boolean blip, boolean complex, int val, String s) {
|
||||
Property p = new Property(id, blip, complex, val, s);
|
||||
this.properties.add(p);
|
||||
}
|
||||
|
||||
Property getProperty(int id) {
|
||||
boolean found = false;
|
||||
Property p = null;
|
||||
for (Iterator i = this.properties.iterator(); i.hasNext() && !found; ) {
|
||||
p = i.next();
|
||||
if (p.id == id)
|
||||
found = true;
|
||||
}
|
||||
return found ? p : null;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user