Files
HRMS/hrmsEjb/jxl/biff/drawing/Chart.java
2025-07-28 13:56:49 +05:30

112 lines
3.4 KiB
Java

package jxl.biff.drawing;
import common.Assert;
import common.Logger;
import jxl.WorkbookSettings;
import jxl.biff.ByteData;
import jxl.biff.IndexMapping;
import jxl.biff.IntegerHelper;
import jxl.biff.Type;
import jxl.read.biff.File;
public class Chart implements ByteData, EscherStream {
private static final Logger logger = Logger.getLogger(Chart.class);
private MsoDrawingRecord msoDrawingRecord;
private ObjRecord objRecord;
private int startpos;
private int endpos;
private File file;
private DrawingData drawingData;
private int drawingNumber;
private byte[] data;
private boolean initialized;
private WorkbookSettings workbookSettings;
public Chart(MsoDrawingRecord mso, ObjRecord obj, DrawingData dd, int sp, int ep, File f, WorkbookSettings ws) {
this.msoDrawingRecord = mso;
this.objRecord = obj;
this.startpos = sp;
this.endpos = ep;
this.file = f;
this.workbookSettings = ws;
if (this.msoDrawingRecord != null) {
this.drawingData = dd;
this.drawingData.addData(this.msoDrawingRecord.getRecord().getData());
this.drawingNumber = this.drawingData.getNumDrawings() - 1;
}
this.initialized = false;
Assert.verify(((mso != null && obj != null) || (mso == null && obj == null)));
}
public byte[] getBytes() {
if (!this.initialized)
initialize();
return this.data;
}
public byte[] getData() {
return this.msoDrawingRecord.getRecord().getData();
}
private void initialize() {
this.data = this.file.read(this.startpos, this.endpos - this.startpos);
this.initialized = true;
}
public void rationalize(IndexMapping xfMapping, IndexMapping fontMapping, IndexMapping formatMapping) {
if (!this.initialized)
initialize();
int pos = 0;
int code = 0;
int length = 0;
Type type = null;
while (pos < this.data.length) {
code = IntegerHelper.getInt(this.data[pos], this.data[pos + 1]);
length = IntegerHelper.getInt(this.data[pos + 2], this.data[pos + 3]);
type = Type.getType(code);
if (type == Type.FONTX) {
int fontind = IntegerHelper.getInt(this.data[pos + 4], this.data[pos + 5]);
IntegerHelper.getTwoBytes(fontMapping.getNewIndex(fontind), this.data, pos + 4);
} else if (type == Type.FBI) {
int fontind = IntegerHelper.getInt(this.data[pos + 12], this.data[pos + 13]);
IntegerHelper.getTwoBytes(fontMapping.getNewIndex(fontind), this.data, pos + 12);
} else if (type == Type.IFMT) {
int formind = IntegerHelper.getInt(this.data[pos + 4], this.data[pos + 5]);
IntegerHelper.getTwoBytes(formatMapping.getNewIndex(formind), this.data, pos + 4);
} else if (type == Type.ALRUNS) {
int numRuns = IntegerHelper.getInt(this.data[pos + 4], this.data[pos + 5]);
int fontPos = pos + 6;
for (int i = 0; i < numRuns; i++) {
int fontind = IntegerHelper.getInt(this.data[fontPos + 2], this.data[fontPos + 3]);
IntegerHelper.getTwoBytes(fontMapping.getNewIndex(fontind), this.data, fontPos + 2);
fontPos += 4;
}
}
pos += length + 4;
}
}
EscherContainer getSpContainer() {
EscherContainer spContainer = this.drawingData.getSpContainer(this.drawingNumber);
return spContainer;
}
MsoDrawingRecord getMsoDrawingRecord() {
return this.msoDrawingRecord;
}
ObjRecord getObjRecord() {
return this.objRecord;
}
}