mirror of https://github.com/apache/poi.git
Bit of refactoring - move child records into parent RecordContainer
class, so we can then have more generic child record modification code git-svn-id: https://svn.apache.org/repos/asf/jakarta/poi/trunk@353790 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
78936d9397
commit
f73f0dff67
|
@ -135,6 +135,9 @@ public class TextRun
|
|||
throw new IllegalArgumentException("Supplied RichTextRun wasn't from this TextRun");
|
||||
}
|
||||
|
||||
// Ensure a StyleTextPropAtom is present, adding if required
|
||||
ensureStyleAtomPresent();
|
||||
|
||||
// Update the text length for its Paragraph and Character stylings
|
||||
LinkedList pStyles = _styleAtom.getParagraphStyles();
|
||||
LinkedList cStyles = _styleAtom.getCharacterStyles();
|
||||
|
@ -191,6 +194,27 @@ public class TextRun
|
|||
_rtRuns[0] = new RichTextRun(this,0,s.length());
|
||||
}
|
||||
|
||||
/**
|
||||
* Ensure a StyleTextPropAtom is present for this run,
|
||||
* by adding if required
|
||||
*/
|
||||
private synchronized void ensureStyleAtomPresent() {
|
||||
if(_styleAtom != null) {
|
||||
// All there
|
||||
return;
|
||||
}
|
||||
|
||||
// Create a new one
|
||||
_styleAtom = new StyleTextPropAtom(0);
|
||||
|
||||
// Use the TextHeader atom to get at the parent
|
||||
RecordContainer runAtomsParent = _headerAtom.getParentRecord();
|
||||
|
||||
// Add the new StyleTextPropAtom after the TextCharsAtom / TextBytesAtom
|
||||
Record addAfter = _byteAtom;
|
||||
if(_byteAtom == null) { addAfter = _charAtom; }
|
||||
runAtomsParent.addChildAfter(_styleAtom, addAfter);
|
||||
}
|
||||
|
||||
// Accesser methods follow
|
||||
|
||||
|
|
|
@ -37,7 +37,6 @@ import java.io.ByteArrayOutputStream;
|
|||
|
||||
public class DummyPositionSensitiveRecordWithChildren extends PositionDependentRecordContainer
|
||||
{
|
||||
private Record[] _children;
|
||||
private byte[] _header;
|
||||
private long _type;
|
||||
|
||||
|
@ -60,11 +59,6 @@ public class DummyPositionSensitiveRecordWithChildren extends PositionDependentR
|
|||
*/
|
||||
public long getRecordType() { return _type; }
|
||||
|
||||
/**
|
||||
* Return any children
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* Write the contents of the record back, so it can be written
|
||||
* to disk
|
||||
|
|
|
@ -33,7 +33,6 @@ import java.io.ByteArrayOutputStream;
|
|||
|
||||
public class DummyRecordWithChildren extends RecordContainer
|
||||
{
|
||||
private Record[] _children;
|
||||
private byte[] _header;
|
||||
private long _type;
|
||||
|
||||
|
@ -55,11 +54,6 @@ public class DummyRecordWithChildren extends RecordContainer
|
|||
*/
|
||||
public long getRecordType() { return _type; }
|
||||
|
||||
/**
|
||||
* Return any children
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* Write the contents of the record back, so it can be written
|
||||
* to disk
|
||||
|
|
|
@ -37,7 +37,6 @@ import java.io.ByteArrayOutputStream;
|
|||
public class EscherTextboxWrapper extends RecordContainer
|
||||
{
|
||||
private EscherTextboxRecord _escherRecord;
|
||||
private Record[] _children;
|
||||
private long _type;
|
||||
|
||||
/**
|
||||
|
@ -63,11 +62,6 @@ public class EscherTextboxWrapper extends RecordContainer
|
|||
*/
|
||||
public long getRecordType() { return _type; }
|
||||
|
||||
/**
|
||||
* Return any children
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* Stores the data for the child records back into the Escher layer.
|
||||
* Doesn't actually do the writing out, that's left to the Escher
|
||||
|
|
|
@ -30,7 +30,6 @@ import java.util.*;
|
|||
|
||||
public class FontCollection extends RecordContainer {
|
||||
private List fonts;
|
||||
private Record[] _children;
|
||||
private byte[] _header;
|
||||
|
||||
protected FontCollection(byte[] source, int start, int len) {
|
||||
|
@ -48,14 +47,13 @@ public class FontCollection extends RecordContainer {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Return the type, which is 2005
|
||||
*/
|
||||
public long getRecordType() {
|
||||
return RecordTypes.FontCollection.typeID;
|
||||
}
|
||||
|
||||
public Record[] getChildRecords() {
|
||||
return _children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Write the contents of the record back, so it can be written
|
||||
* to disk
|
||||
|
|
|
@ -32,7 +32,6 @@ import java.io.ByteArrayOutputStream;
|
|||
|
||||
public class Notes extends PositionDependentRecordContainer
|
||||
{
|
||||
private Record[] _children;
|
||||
private byte[] _header;
|
||||
private static long _type = 1008l;
|
||||
|
||||
|
@ -80,11 +79,6 @@ public class Notes extends PositionDependentRecordContainer
|
|||
*/
|
||||
public long getRecordType() { return _type; }
|
||||
|
||||
/**
|
||||
* Return any children
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* Write the contents of the record back, so it can be written
|
||||
* to disk
|
||||
|
|
|
@ -34,6 +34,13 @@ import java.io.ByteArrayOutputStream;
|
|||
|
||||
public abstract class RecordContainer extends Record
|
||||
{
|
||||
protected Record[] _children;
|
||||
|
||||
/**
|
||||
* Return any children
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* We're not an atom
|
||||
*/
|
||||
|
@ -50,6 +57,34 @@ public abstract class RecordContainer extends Record
|
|||
return r;
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds the given Child Record after the supplied record
|
||||
* @param newChild
|
||||
* @param after
|
||||
*/
|
||||
public synchronized void addChildAfter(Record newChild, Record after) {
|
||||
boolean added = false;
|
||||
Record[] newChildren = new Record[_children.length+1];
|
||||
for(int i=0; i<_children.length; i++) {
|
||||
int newPos = i;
|
||||
if(added) { newPos++; }
|
||||
|
||||
newChildren[newPos] = _children[i];
|
||||
if(_children[i].equals(after)) {
|
||||
// Found one to add after
|
||||
added = true;
|
||||
newPos++;
|
||||
newChildren[newPos] = newChild;
|
||||
}
|
||||
}
|
||||
|
||||
if(added) {
|
||||
_children = newChildren;
|
||||
} else {
|
||||
throw new IllegalArgumentException("Asked to add a new child after another record, but that record wasn't one of our children!");
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Write out our header, and our children.
|
||||
* @param headerA the first byte of the header
|
||||
|
|
|
@ -32,7 +32,6 @@ import java.io.ByteArrayOutputStream;
|
|||
|
||||
public class Slide extends PositionDependentRecordContainer
|
||||
{
|
||||
private Record[] _children;
|
||||
private byte[] _header;
|
||||
private static long _type = 1006l;
|
||||
|
||||
|
@ -80,11 +79,6 @@ public class Slide extends PositionDependentRecordContainer
|
|||
*/
|
||||
public long getRecordType() { return _type; }
|
||||
|
||||
/**
|
||||
* Return any children
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* Write the contents of the record back, so it can be written
|
||||
* to disk
|
||||
|
|
|
@ -49,7 +49,6 @@ import java.util.Vector;
|
|||
// For now, pretend to be an atom
|
||||
public class SlideListWithText extends RecordContainer
|
||||
{
|
||||
private Record[] _children;
|
||||
private byte[] _header;
|
||||
private static long _type = 4080;
|
||||
|
||||
|
@ -109,11 +108,6 @@ public class SlideListWithText extends RecordContainer
|
|||
*/
|
||||
public long getRecordType() { return _type; }
|
||||
|
||||
/**
|
||||
* We're pretending to be an atom, so return null
|
||||
*/
|
||||
public Record[] getChildRecords() { return _children; }
|
||||
|
||||
/**
|
||||
* Write the contents of the record back, so it can be written
|
||||
* to disk
|
||||
|
|
Loading…
Reference in New Issue