diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/BookmarkFirstDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/model/BookmarkFirstDescriptor.java index a0eafbb129..617868be11 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/BookmarkFirstDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/BookmarkFirstDescriptor.java @@ -18,33 +18,34 @@ package org.apache.poi.hwpf.model; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.BKFAbstractType; import org.apache.poi.util.Internal; +import org.apache.poi.util.Removal; @Internal -public final class BookmarkFirstDescriptor extends BKFAbstractType implements - Cloneable -{ - public BookmarkFirstDescriptor() - { +public final class BookmarkFirstDescriptor extends BKFAbstractType implements Duplicatable { + public BookmarkFirstDescriptor() { } + + public BookmarkFirstDescriptor(BookmarkFirstDescriptor other) { + super(other); } - public BookmarkFirstDescriptor( byte[] data, int offset ) - { + public BookmarkFirstDescriptor( byte[] data, int offset ) { fillFields( data, offset ); } @Override - protected BookmarkFirstDescriptor clone() - { - try - { - return (BookmarkFirstDescriptor) super.clone(); - } - catch ( CloneNotSupportedException e ) - { - throw new RuntimeException( e ); - } + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + protected BookmarkFirstDescriptor clone() { + return copy(); + } + + @Override + public BookmarkFirstDescriptor copy() { + return new BookmarkFirstDescriptor(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/BytePropertyNode.java b/src/scratchpad/src/org/apache/poi/hwpf/model/BytePropertyNode.java index f0fe0711e7..9ad54d7d9c 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/BytePropertyNode.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/BytePropertyNode.java @@ -23,18 +23,22 @@ package org.apache.poi.hwpf.model; * still work despite that. * It handles the conversion as required between bytes * and characters. - * + * * @deprecated byte positions shall not be saved in memory */ @Deprecated -public abstract class BytePropertyNode> extends - PropertyNode -{ +public abstract class BytePropertyNode> extends PropertyNode { private final int startBytes; private final int endBytes; - public BytePropertyNode( int charStart, int charEnd, Object buf ) - { + protected BytePropertyNode( BytePropertyNode other ) { + super(other); + startBytes = other.startBytes; + endBytes = other.endBytes; + } + + + protected BytePropertyNode( int charStart, int charEnd, Object buf ) { super( charStart, charEnd, buf ); if ( charStart > charEnd ) diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/CHPBinTable.java b/src/scratchpad/src/org/apache/poi/hwpf/model/CHPBinTable.java index 5a5b5a5c10..0aff01bfac 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/CHPBinTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/CHPBinTable.java @@ -61,7 +61,7 @@ public class CHPBinTable /** * Constructor used to read a binTable in from a Word document. - * + * * @deprecated Use * {@link #CHPBinTable(byte[], byte[], int, int, CharIndexTranslator)} * instead @@ -81,7 +81,7 @@ public class CHPBinTable long start = System.currentTimeMillis(); /* * Page 35: - * + * * "Associated with each interval is a BTE. A BTE holds a four-byte PN * (page number) which identifies the FKP page in the file which * contains the formatting information for that interval. A CHPX FKP @@ -172,7 +172,7 @@ public class CHPBinTable } List oldChpxSortedByStartPos = new ArrayList<>(_textRuns); - oldChpxSortedByStartPos.sort(PropertyNode.StartComparator.instance); + oldChpxSortedByStartPos.sort(PropertyNode.StartComparator); logger.log( POILogger.DEBUG, "CHPX sorted by start position in ", Long.valueOf( System.currentTimeMillis() - start ), " ms" ); @@ -459,7 +459,7 @@ public class CHPBinTable /* * Page 35: - * + * * "Associated with each interval is a BTE. A BTE holds a four-byte PN * (page number) which identifies the FKP page in the file which * contains the formatting information for that interval. A CHPX FKP diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/CHPX.java b/src/scratchpad/src/org/apache/poi/hwpf/model/CHPX.java index ee928dfdf2..27d60ad833 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/CHPX.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/CHPX.java @@ -28,13 +28,15 @@ import org.apache.poi.util.Internal; * Make sure you call getStart() / getEnd() when you want characters * (normal use), but getStartByte() / getEndByte() when you're * reading in / writing out! - * - * @author Ryan Ackley */ @Internal @SuppressWarnings("deprecation") public final class CHPX extends BytePropertyNode { + public CHPX(CHPX other) { + super(other); + } + CHPX(int charStart, int charEnd, SprmBuffer buf) { super(charStart, charEnd, buf); } @@ -62,4 +64,9 @@ public final class CHPX extends BytePropertyNode { return "CHPX from " + getStart() + " to " + getEnd() + " (in bytes " + getStartBytes() + " to " + getEndBytes() + ")"; } + + @Override + public CHPX copy() { + return new CHPX(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/Colorref.java b/src/scratchpad/src/org/apache/poi/hwpf/model/Colorref.java index 95178c675a..6deb288ea5 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/Colorref.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/Colorref.java @@ -16,17 +16,17 @@ ==================================================================== */ package org.apache.poi.hwpf.model; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * 24-bit color structure - * - * @author Sergey Vladimirov (vlsergey {at} gmail {dot} com) */ @Internal -public class Colorref implements Cloneable -{ +public class Colorref implements Duplicatable { + public static Colorref valueOfIco( int ico ) { @@ -71,25 +71,33 @@ public class Colorref implements Cloneable private int value; - public Colorref() - { + public Colorref() { this.value = -1; } - public Colorref( byte[] data, int offset ) - { + public Colorref(Colorref other) { + value = other.value; + } + + public Colorref( byte[] data, int offset ) { this.value = LittleEndian.getInt( data, offset ); } - public Colorref( int value ) - { + public Colorref( int value ) { this.value = value; } @Override - public Colorref clone() throws CloneNotSupportedException - { - return (Colorref)super.clone(); + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public Colorref clone() { + return copy(); + } + + @Override + public Colorref copy() { + return new Colorref(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/FootnoteReferenceDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/model/FootnoteReferenceDescriptor.java index 3df6bd9d59..8d7d224593 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/FootnoteReferenceDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/FootnoteReferenceDescriptor.java @@ -18,33 +18,34 @@ package org.apache.poi.hwpf.model; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.FRDAbstractType; import org.apache.poi.util.Internal; +import org.apache.poi.util.Removal; @Internal -public final class FootnoteReferenceDescriptor extends FRDAbstractType - implements Cloneable -{ - public FootnoteReferenceDescriptor() - { +public final class FootnoteReferenceDescriptor extends FRDAbstractType implements Duplicatable { + public FootnoteReferenceDescriptor() { } + + public FootnoteReferenceDescriptor(FootnoteReferenceDescriptor other) { + super(other); } - public FootnoteReferenceDescriptor( byte[] data, int offset ) - { + public FootnoteReferenceDescriptor( byte[] data, int offset ) { fillFields( data, offset ); } @Override - protected FootnoteReferenceDescriptor clone() - { - try - { - return (FootnoteReferenceDescriptor) super.clone(); - } - catch ( CloneNotSupportedException e ) - { - throw new RuntimeException( e ); - } + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + protected FootnoteReferenceDescriptor clone() { + return copy(); + } + + @Override + public FootnoteReferenceDescriptor copy() { + return new FootnoteReferenceDescriptor(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/GenericPropertyNode.java b/src/scratchpad/src/org/apache/poi/hwpf/model/GenericPropertyNode.java index 806a7e7f02..802530745c 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/GenericPropertyNode.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/GenericPropertyNode.java @@ -20,11 +20,13 @@ package org.apache.poi.hwpf.model; import org.apache.poi.util.Internal; @Internal -public final class GenericPropertyNode - extends PropertyNode -{ - public GenericPropertyNode(int start, int end, byte[] buf) - { +public final class GenericPropertyNode extends PropertyNode { + + public GenericPropertyNode(GenericPropertyNode other) { + super(other); + } + + public GenericPropertyNode(int start, int end, byte[] buf) { super(start, end, buf); } @@ -44,4 +46,9 @@ public final class GenericPropertyNode + ( getBytes() != null ? getBytes().length + " byte(s)" : "null" ); } + + @Override + public GenericPropertyNode copy() { + return new GenericPropertyNode(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/Hyphenation.java b/src/scratchpad/src/org/apache/poi/hwpf/model/Hyphenation.java index 3987db9ea5..00c2b91558 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/Hyphenation.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/Hyphenation.java @@ -19,41 +19,41 @@ package org.apache.poi.hwpf.model; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.HRESIAbstractType; import org.apache.poi.hwpf.usermodel.CharacterProperties; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * Hyphenation. Substructure of the {@link CharacterProperties}. - * - * @author Sergey Vladimirov ( vlsergey {at} gmail {dot} com ) */ @Internal -public final class Hyphenation extends HRESIAbstractType implements Cloneable -{ - public Hyphenation() - { - super(); +public final class Hyphenation extends HRESIAbstractType implements Duplicatable { + public Hyphenation() {} + + public Hyphenation(Hyphenation other) { + super(other); } - public Hyphenation( short hres ) - { + public Hyphenation( short hres ) { byte[] data = new byte[2]; LittleEndian.putShort( data, 0, hres ); fillFields( data, 0 ); } - public Hyphenation clone() - { - try - { - return (Hyphenation) super.clone(); - } - catch ( CloneNotSupportedException e ) - { - throw new RuntimeException( e ); - } + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public Hyphenation clone() { + return copy(); + } + + @Override + public Hyphenation copy() { + return new Hyphenation(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/OldCHPBinTable.java b/src/scratchpad/src/org/apache/poi/hwpf/model/OldCHPBinTable.java index dc57b4c13b..04fdd322a2 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/OldCHPBinTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/OldCHPBinTable.java @@ -22,11 +22,11 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; /** - * This class holds all of the character formatting + * This class holds all of the character formatting * properties from Old (Word 6 / Word 95) documents. * Unlike with Word 97+, it all gets held in the * same stream. - * In common with the rest of the old support, it + * In common with the rest of the old support, it * is read only */ @Internal @@ -63,6 +63,6 @@ public final class OldCHPBinTable extends CHPBinTable _textRuns.add( chpx ); } } - _textRuns.sort(PropertyNode.StartComparator.instance); + _textRuns.sort(PropertyNode.StartComparator); } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java b/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java index df5d32d812..277440f24c 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/OldSectionTable.java @@ -22,11 +22,11 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; /** - * This class holds all of the section formatting + * This class holds all of the section formatting * properties from Old (Word 6 / Word 95) documents. * Unlike with Word 97+, it all gets held in the * same stream. - * In common with the rest of the old support, it + * In common with the rest of the old support, it * is read only */ @Internal @@ -79,6 +79,6 @@ public final class OldSectionTable extends SectionTable _sections.add( sepx ); } - _sections.sort(PropertyNode.StartComparator.instance); + _sections.sort(PropertyNode.StartComparator); } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java b/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java index df0104fe8a..1386b0af65 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/OldTextPiece.java @@ -34,6 +34,12 @@ public class OldTextPiece extends TextPiece { private final byte[] rawBytes; + public OldTextPiece(OldTextPiece other) { + super(other); + rawBytes = (other.rawBytes == null) ? null : other.rawBytes.clone(); + } + + /** * @param start Beginning offset in main document stream, in characters. * @param end Ending offset in main document stream, in characters. @@ -115,4 +121,8 @@ public class OldTextPiece extends TextPiece { + getPieceDescriptor() + ")"; } + @Override + public OldTextPiece copy() { + return new OldTextPiece(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PAPBinTable.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PAPBinTable.java index 3819d0331c..2c07b2e901 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/PAPBinTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PAPBinTable.java @@ -39,8 +39,6 @@ import org.apache.poi.util.POILogger; * This class represents the bin table of Word document but it also serves as a * holder for all of the paragraphs of document that have been loaded into * memory. - * - * @author Ryan Ackley */ @Internal public class PAPBinTable @@ -158,7 +156,7 @@ public class PAPBinTable } List oldPapxSortedByEndPos = new ArrayList<>(paragraphs); - oldPapxSortedByEndPos.sort(PropertyNode.EndComparator.instance); + oldPapxSortedByEndPos.sort(PropertyNode.EndComparator); logger.log( POILogger.DEBUG, "PAPX sorted by end position in ", Long.valueOf( System.currentTimeMillis() - start ), " ms" ); @@ -262,7 +260,7 @@ public class PAPBinTable continue; if ( sprmBuffer == null ) { - sprmBuffer = papx.getSprmBuf().clone(); + sprmBuffer = papx.getSprmBuf().copy(); } else { sprmBuffer.append( papx.getGrpprl(), 2 ); } @@ -299,7 +297,7 @@ public class PAPBinTable PAPX currentPap = _paragraphs.get(listIndex); if (currentPap != null && currentPap.getStart() < cpStart) { - SprmBuffer clonedBuf = currentPap.getSprmBuf().clone(); + SprmBuffer clonedBuf = currentPap.getSprmBuf().copy(); // Copy the properties of the one before to afterwards // Will go: @@ -389,7 +387,7 @@ public class PAPBinTable { PlexOfCps binTable = new PlexOfCps(4); - + // each FKP must start on a 512 byte page. int docOffset = wordDocumentStream.size(); int mod = docOffset % POIFSConstants.SMALLER_BIG_BLOCK_SIZE; @@ -398,21 +396,21 @@ public class PAPBinTable byte[] padding = new byte[POIFSConstants.SMALLER_BIG_BLOCK_SIZE - mod]; wordDocumentStream.write(padding); } - + // get the page number for the first fkp docOffset = wordDocumentStream.size(); int pageNum = docOffset/POIFSConstants.SMALLER_BIG_BLOCK_SIZE; - + // get the ending fc // int endingFc = _paragraphs.get(_paragraphs.size() - 1).getEnd(); // endingFc += fcMin; int endingFc = translator.getByteIndex( _paragraphs.get(_paragraphs.size() - 1 ).getEnd() ); - + ArrayList overflow = _paragraphs; do { PAPX startingProp = overflow.get(0); - + // int start = startingProp.getStart() + fcMin; int start = translator.getByteIndex( startingProp.getStart() ); @@ -429,11 +427,11 @@ public class PAPBinTable // end = overflow.get(0).getStart() + fcMin; end = translator.getByteIndex( overflow.get( 0 ).getStart() ); } - + byte[] intHolder = new byte[4]; LittleEndian.putInt(intHolder, 0, pageNum++); binTable.addProperty(new GenericPropertyNode(start, end, intHolder)); - + } while (overflow != null); tableStream.write(binTable.toByteArray()); diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PAPX.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PAPX.java index 34f72d2278..2825f45db4 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/PAPX.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PAPX.java @@ -31,8 +31,6 @@ import org.apache.poi.util.LittleEndian; * Make sure you call getStart() / getEnd() when you want characters * (normal use), but getStartByte() / getEndByte() when you're * reading in / writing out! - * - * @author Ryan Ackley */ @Internal @SuppressWarnings( "deprecation" ) @@ -40,6 +38,11 @@ public final class PAPX extends BytePropertyNode { private ParagraphHeight _phe; + public PAPX(PAPX other) { + super(other); + _phe = (other._phe == null) ? null : other._phe.copy(); + } + public PAPX( int charStart, int charEnd, byte[] papx, ParagraphHeight phe, byte[] dataStream ) { @@ -103,7 +106,7 @@ public final class PAPX extends BytePropertyNode { { if ( _buf == null ) return 0; - + byte[] buf = getGrpprl(); if (buf.length == 0) { @@ -129,7 +132,7 @@ public final class PAPX extends BytePropertyNode { // TODO Fix up for Word 6/95 return new ParagraphProperties(); } - + short istd = getIstd(); ParagraphProperties baseStyle = ss.getParagraphStyle(istd); return ParagraphSprmUncompressor.uncompressPAP(baseStyle, getGrpprl(), 2); @@ -156,4 +159,9 @@ public final class PAPX extends BytePropertyNode { return "PAPX from " + getStart() + " to " + getEnd() + " (in bytes " + getStartBytes() + " to " + getEndBytes() + ")"; } + + @Override + public PAPX copy() { + return new PAPX(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/ParagraphHeight.java b/src/scratchpad/src/org/apache/poi/hwpf/model/ParagraphHeight.java index 747d0c1375..83c2ccb221 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/ParagraphHeight.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/ParagraphHeight.java @@ -20,25 +20,35 @@ package org.apache.poi.hwpf.model; import java.io.IOException; import java.io.OutputStream; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; @Internal -public final class ParagraphHeight -{ +public final class ParagraphHeight implements Duplicatable { + private static final BitField fSpare = BitFieldFactory.getInstance(0x0001); + private static final BitField fUnk = BitFieldFactory.getInstance(0x0002); + private static final BitField fDiffLines = BitFieldFactory.getInstance(0x0004); + private static final BitField clMac = BitFieldFactory.getInstance(0xff00); + + private short infoField; - private BitField fSpare = BitFieldFactory.getInstance(0x0001); - private BitField fUnk = BitFieldFactory.getInstance(0x0002); - private BitField fDiffLines = BitFieldFactory.getInstance(0x0004); - private BitField clMac = BitFieldFactory.getInstance(0xff00); private short reserved; private int dxaCol; private int dymLineOrHeight; - public ParagraphHeight(byte[] buf, int offset) - { + public ParagraphHeight() {} + + public ParagraphHeight(ParagraphHeight other) { + infoField = other.infoField; + reserved = other.reserved; + dxaCol = other.dxaCol; + dymLineOrHeight = other.dymLineOrHeight; + } + + public ParagraphHeight(byte[] buf, int offset) { infoField = LittleEndian.getShort(buf, offset); offset += LittleEndian.SHORT_SIZE; reserved = LittleEndian.getShort(buf, offset); @@ -48,11 +58,6 @@ public final class ParagraphHeight dymLineOrHeight = LittleEndian.getInt(buf, offset); } - public ParagraphHeight() - { - - } - public void write(OutputStream out) throws IOException { @@ -89,4 +94,8 @@ public final class ParagraphHeight return 42; // any arbitrary constant will do } + @Override + public ParagraphHeight copy() { + return new ParagraphHeight(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java index 43c919554e..b34e2d1fbf 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PieceDescriptor.java @@ -20,18 +20,27 @@ package org.apache.poi.hwpf.model; import java.nio.charset.Charset; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.StringUtil; @Internal -public final class PieceDescriptor { +public final class PieceDescriptor implements Duplicatable { private final short descriptor; int fc; // used from the outside?!? private final PropertyModifier prm; private final boolean unicode; private final Charset charset; + public PieceDescriptor(PieceDescriptor other) { + descriptor = other.descriptor; + fc = other.fc; + prm = (other.prm == null) ? null : other.prm.copy(); + unicode = other.unicode; + charset = other.charset; + } + public PieceDescriptor(byte[] buf, int offset) { this(buf, offset, null); } @@ -155,4 +164,9 @@ public final class PieceDescriptor { + (isUnicode() ? "unicode" : "non-unicode") + "; prm: " + getPrm() + ")"; } + + @Override + public PieceDescriptor copy() { + return new PieceDescriptor(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyModifier.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyModifier.java index a87f33fea3..5cfc1e38fe 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyModifier.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyModifier.java @@ -18,43 +18,54 @@ package org.apache.poi.hwpf.model; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.BitField; import org.apache.poi.util.Internal; +import org.apache.poi.util.Removal; @Internal -public final class PropertyModifier implements Cloneable -{ +public final class PropertyModifier implements Duplicatable { /** *
  • "Set to 0 for variant 1"
  • "Set to 1 for variant 2" */ - private static BitField _fComplex = new BitField( 0x0001 ); + private static final BitField _fComplex = new BitField( 0x0001 ); /** * "Index to a grpprl stored in CLX portion of file" */ - private static BitField _figrpprl = new BitField( 0xfffe ); + private static final BitField _figrpprl = new BitField( 0xfffe ); /** * "Index to entry into rgsprmPrm" */ - private static BitField _fisprm = new BitField( 0x00fe ); + private static final BitField _fisprm = new BitField( 0x00fe ); /** * "sprm's operand" */ - private static BitField _fval = new BitField( 0xff00 ); + private static final BitField _fval = new BitField( 0xff00 ); private short value; - public PropertyModifier( short value ) - { + public PropertyModifier( short value ) { this.value = value; } + public PropertyModifier( PropertyModifier other ) { + value = other.value; + } + @Override - protected PropertyModifier clone() throws CloneNotSupportedException - { - return new PropertyModifier( value ); + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + protected PropertyModifier clone() { + return copy(); + } + + @Override + public PropertyModifier copy() { + return new PropertyModifier(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyNode.java b/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyNode.java index a776c7aa77..643571a396 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyNode.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/PropertyNode.java @@ -21,9 +21,11 @@ import java.util.Arrays; import java.util.Comparator; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.Internal; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; +import org.apache.poi.util.Removal; /** * Represents a lightweight node in the Trees used to store content @@ -31,35 +33,17 @@ import org.apache.poi.util.POILogger; * This only ever works in characters. For the few odd cases when * the start and end aren't in characters (eg PAPX and CHPX), use * {@link BytePropertyNode} between you and this. - * - * @author Ryan Ackley */ @Internal -public abstract class PropertyNode> implements Comparable, Cloneable { +public abstract class PropertyNode> implements Comparable, Duplicatable { - public static final class EndComparator implements - Comparator> { - public static final EndComparator instance = new EndComparator(); + public static final Comparator> EndComparator = Comparator.comparingInt(PropertyNode::getEnd); - public int compare(PropertyNode o1, PropertyNode o2) { - int thisVal = o1.getEnd(); - int anotherVal = o2.getEnd(); - return (Integer.compare(thisVal, anotherVal)); - } - } + public static final Comparator> StartComparator = Comparator.comparingInt(PropertyNode::getStart); - public static final class StartComparator implements - Comparator> { - public static final StartComparator instance = new StartComparator(); + private static final POILogger _logger = POILogFactory.getLogger(PropertyNode.class); - public int compare(PropertyNode o1, PropertyNode o2) { - int thisVal = o1.getStart(); - int anotherVal = o2.getStart(); - return (Integer.compare(thisVal, anotherVal)); - } - } - private final static POILogger _logger = POILogFactory.getLogger(PropertyNode.class); protected Object _buf; /** * The start, in characters @@ -70,6 +54,13 @@ public abstract class PropertyNode> implements Compara */ private int _cpEnd; + protected PropertyNode(PropertyNode other) { + // TODO: clone _buf? + _buf = other._buf; + _cpStart = other._cpStart; + _cpEnd = other._cpEnd; + } + /** * @param fcStart The start of the text for this property, in characters. @@ -118,9 +109,6 @@ public abstract class PropertyNode> implements Compara /** * Adjust for a deletion that can span multiple PropertyNodes. - * - * @param start - * @param length */ public void adjustForDelete(int start, int length) { int end = start + length; @@ -164,16 +152,21 @@ public abstract class PropertyNode> implements Compara return false; } - @SuppressWarnings("unchecked") - public T clone() throws CloneNotSupportedException { - return (T) super.clone(); + @Override + @Deprecated + @Removal(version = "5.0.0") + @SuppressWarnings({"unchecked","squid:S2975"}) + public T clone() { + return (T) copy(); } + @Override + public abstract PropertyNode copy(); + /** * Used for sorting in collections. */ public int compareTo(T o) { - int cpEnd = o.getEnd(); - return Integer.compare(_cpEnd, cpEnd); + return Integer.compare(_cpEnd, o.getEnd()); } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/SEPX.java b/src/scratchpad/src/org/apache/poi/hwpf/model/SEPX.java index b9bdff1afc..f9a5fd64c2 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/SEPX.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/SEPX.java @@ -24,13 +24,20 @@ import org.apache.poi.hwpf.usermodel.SectionProperties; import org.apache.poi.util.Internal; @Internal -public final class SEPX extends PropertyNode -{ +public final class SEPX extends PropertyNode { SectionProperties sectionProperties; SectionDescriptor _sed; + public SEPX( SEPX other ) { + super(other); + + sectionProperties = (other.sectionProperties == null) ? null : other.sectionProperties.copy(); + _sed = (other._sed == null) ? null : other._sed.copy(); + } + + public SEPX( SectionDescriptor sed, int start, int end, byte[] grpprl ) { super( start, end, new SprmBuffer( grpprl, 0 ) ); @@ -86,4 +93,9 @@ public final class SEPX extends PropertyNode { return "SEPX from " + getStart() + " to " + getEnd(); } + + @Override + public SEPX copy() { + return new SEPX(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/SectionDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/model/SectionDescriptor.java index fead9ebcc7..b5551d07ba 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/SectionDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/SectionDescriptor.java @@ -17,17 +17,17 @@ package org.apache.poi.hwpf.model; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; /** * Section Descriptor (SED) - * + * * See page 186 for details. */ @Internal -public final class SectionDescriptor -{ +public final class SectionDescriptor implements Duplicatable { /** * "Used internally by Word" @@ -40,7 +40,7 @@ public final class SectionDescriptor * to the standard SEP (see SEP definition)." */ private int fcSepx; - + /** * "Used internally by Word" */ @@ -52,8 +52,13 @@ public final class SectionDescriptor */ private int fcMpr; - public SectionDescriptor() - { + public SectionDescriptor() {} + + public SectionDescriptor(SectionDescriptor other) { + fn = other.fn; + fcSepx = other.fcSepx; + fnMpr = other.fnMpr; + fcMpr = other.fcMpr; } public SectionDescriptor(byte[] buf, int offset) @@ -90,7 +95,7 @@ public final class SectionDescriptor assert false : "hashCode not designed"; return 42; // any arbitrary constant will do } - + public byte[] toByteArray() { int offset = 0; @@ -113,4 +118,9 @@ public final class SectionDescriptor return "[SED] (fn: " + fn + "; fcSepx: " + fcSepx + "; fnMpr: " + fnMpr + "; fcMpr: " + fcMpr + ")"; } + + @Override + public SectionDescriptor copy() { + return new SectionDescriptor(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/SectionTable.java b/src/scratchpad/src/org/apache/poi/hwpf/model/SectionTable.java index 8cdb729ac8..23df32a6dc 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/SectionTable.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/SectionTable.java @@ -29,9 +29,6 @@ import org.apache.poi.util.LittleEndian; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; -/** - * @author Ryan Ackley - */ @Internal public class SectionTable { @@ -117,7 +114,7 @@ public class SectionTable } } - _sections.sort(PropertyNode.StartComparator.instance); + _sections.sort(PropertyNode.StartComparator); } public void adjustForInsert(int listIndex, int length) diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/SinglentonTextPiece.java b/src/scratchpad/src/org/apache/poi/hwpf/model/SinglentonTextPiece.java index 9388a1437a..6622cc7d10 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/SinglentonTextPiece.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/SinglentonTextPiece.java @@ -20,11 +20,12 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.StringUtil; @Internal -public class SinglentonTextPiece extends TextPiece -{ +public class SinglentonTextPiece extends TextPiece { + public SinglentonTextPiece(SinglentonTextPiece other) { + super(other); + } - public SinglentonTextPiece( StringBuilder buffer ) - { + public SinglentonTextPiece( StringBuilder buffer ) { super( 0, buffer.length(), StringUtil.getToUnicodeLE(buffer.toString()), new PieceDescriptor( new byte[8], 0 ) ); } @@ -62,4 +63,9 @@ public class SinglentonTextPiece extends TextPiece { return "SinglentonTextPiece (" + characterLength() + " chars)"; } + + @Override + public SinglentonTextPiece copy() { + return new SinglentonTextPiece(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/TabDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/model/TabDescriptor.java index 472b667b58..01c04b120e 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/TabDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/TabDescriptor.java @@ -16,23 +16,22 @@ ==================================================================== */ package org.apache.poi.hwpf.model; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.TBDAbstractType; import org.apache.poi.hwpf.usermodel.ParagraphProperties; /** * Tab descriptor. Part of {@link ParagraphProperties}. - * - * @author vlsergey */ -public class TabDescriptor extends TBDAbstractType -{ +public class TabDescriptor extends TBDAbstractType implements Duplicatable { - public TabDescriptor() - { + public TabDescriptor() {} + + public TabDescriptor(TabDescriptor other) { + super(other); } - public TabDescriptor( byte[] bytes, int offset ) - { + public TabDescriptor( byte[] bytes, int offset ) { fillFields( bytes, offset ); } @@ -43,4 +42,8 @@ public class TabDescriptor extends TBDAbstractType return buf; } + @Override + public TabDescriptor copy() { + return new TabDescriptor(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java b/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java index c4a13e4361..5c9fcf70d9 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/TextPiece.java @@ -29,8 +29,6 @@ import org.apache.poi.util.StringUtil; * Works in the character domain, not the byte domain, so you * need to have turned byte references into character * references before getting here. - * - * @author Ryan Ackley */ @Internal public class TextPiece extends PropertyNode { @@ -38,6 +36,12 @@ public class TextPiece extends PropertyNode { private PieceDescriptor _pd; + public TextPiece(TextPiece other) { + super(other); + _usesUnicode = other._usesUnicode; + _pd = (other._pd == null) ? null : other._pd.copy(); + } + /** * @param start Beginning offset in main document stream, in characters. * @param end Ending offset in main document stream, in characters. @@ -212,4 +216,8 @@ public class TextPiece extends PropertyNode { + getPieceDescriptor() + ")"; } + @Override + public TextPiece copy() { + return new TextPiece(this); + } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/BKFAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/BKFAbstractType.java index 20ab5ecb89..660f4f5824 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/BKFAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/BKFAbstractType.java @@ -26,26 +26,23 @@ import org.apache.poi.util.LittleEndian; *

    * Class and fields descriptions are quoted from Microsoft Office Word 97-2007 * Binary File Format (.doc) Specification - * - * NOTE: This source is automatically generated please do not modify this file. - * Either subclass or remove the record in src/types/definitions. - * - * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary - * File Format (.doc) Specification */ @Internal -public abstract class BKFAbstractType -{ +public abstract class BKFAbstractType { + + private static final BitField itcFirst = new BitField( 0x007F ); + private static final BitField fPub = new BitField( 0x0080 ); + private static final BitField itcLim = new BitField( 0x7F00 ); + private static final BitField fCol = new BitField( 0x8000 ); protected short field_1_ibkl; protected short field_2_bkf_flags; - /**/private static BitField itcFirst = new BitField( 0x007F ); - /**/private static BitField fPub = new BitField( 0x0080 ); - /**/private static BitField itcLim = new BitField( 0x7F00 ); - /**/private static BitField fCol = new BitField( 0x8000 ); - protected BKFAbstractType() - { + protected BKFAbstractType() {} + + protected BKFAbstractType(BKFAbstractType other) { + field_1_ibkl = other.field_1_ibkl; + field_2_bkf_flags = other.field_2_bkf_flags; } protected void fillFields( byte[] data, int offset ) @@ -189,4 +186,4 @@ public abstract class BKFAbstractType return fCol.isSet(field_2_bkf_flags); } -} // END OF CLASS +} \ No newline at end of file diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java index ae3fe81a7e..e18a3e724b 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/CHPAbstractType.java @@ -30,53 +30,111 @@ import org.apache.poi.util.Internal; /** * Character Properties. - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author S. Ryan Ackley */ +@SuppressWarnings("unused") @Internal -public abstract class CHPAbstractType -{ +public abstract class CHPAbstractType { + + private static final BitField fBold = new BitField(0x00000001); + private static final BitField fItalic = new BitField(0x00000002); + private static final BitField fRMarkDel = new BitField(0x00000004); + private static final BitField fOutline = new BitField(0x00000008); + private static final BitField fFldVanish = new BitField(0x00000010); + private static final BitField fSmallCaps = new BitField(0x00000020); + private static final BitField fCaps = new BitField(0x00000040); + private static final BitField fVanish = new BitField(0x00000080); + private static final BitField fRMark = new BitField(0x00000100); + private static final BitField fSpec = new BitField(0x00000200); + private static final BitField fStrike = new BitField(0x00000400); + private static final BitField fObj = new BitField(0x00000800); + private static final BitField fShadow = new BitField(0x00001000); + private static final BitField fLowerCase = new BitField(0x00002000); + private static final BitField fData = new BitField(0x00004000); + private static final BitField fOle2 = new BitField(0x00008000); + private static final BitField fEmboss = new BitField(0x00010000); + private static final BitField fImprint = new BitField(0x00020000); + private static final BitField fDStrike = new BitField(0x00040000); + private static final BitField fUsePgsuSettings = new BitField(0x00080000); + private static final BitField fBoldBi = new BitField(0x00100000); + private static final BitField fComplexScripts = new BitField(0x00100000); + private static final BitField fItalicBi = new BitField(0x00200000); + private static final BitField fBiDi = new BitField(0x00400000); + private static final BitField fIcoBi = new BitField(0x00800000); + private static final BitField fNonGlyph = new BitField(0x01000000); + private static final BitField fBoldOther = new BitField(0x02000000); + private static final BitField fItalicOther = new BitField(0x04000000); + private static final BitField fNoProof = new BitField(0x08000000); + private static final BitField fWebHidden = new BitField(0x10000000); + private static final BitField fFitText = new BitField(0x20000000); + private static final BitField fCalc = new BitField(0x40000000); + private static final BitField fFmtLineProp = new BitField(0x80000000); + + protected static final byte SFXTTEXT_NO = 0; + protected static final byte SFXTTEXT_LAS_VEGAS_LIGHTS = 1; + protected static final byte SFXTTEXT_BACKGROUND_BLINK = 2; + protected static final byte SFXTTEXT_SPARKLE_TEXT = 3; + protected static final byte SFXTTEXT_MARCHING_ANTS = 4; + protected static final byte SFXTTEXT_MARCHING_RED_ANTS = 5; + protected static final byte SFXTTEXT_SHIMMER = 6; + + protected static final byte KCD_NON = 0; + protected static final byte KCD_DOT = 1; + protected static final byte KCD_COMMA = 2; + protected static final byte KCD_CIRCLE = 3; + protected static final byte KCD_UNDER_DOT = 4; + + protected static final byte KUL_NONE = 0; + protected static final byte KUL_SINGLE = 1; + protected static final byte KUL_BY_WORD = 2; + protected static final byte KUL_DOUBLE = 3; + protected static final byte KUL_DOTTED = 4; + protected static final byte KUL_HIDDEN = 5; + protected static final byte KUL_THICK = 6; + protected static final byte KUL_DASH = 7; + protected static final byte KUL_DOT = 8; + protected static final byte KUL_DOT_DASH = 9; + protected static final byte KUL_DOT_DOT_DASH = 10; + protected static final byte KUL_WAVE = 11; + protected static final byte KUL_DOTTED_HEAVY = 20; + protected static final byte KUL_DASHED_HEAVY = 23; + protected static final byte KUL_DOT_DASH_HEAVY = 25; + protected static final byte KUL_DOT_DOT_DASH_HEAVY = 26; + protected static final byte KUL_WAVE_HEAVY = 27; + protected static final byte KUL_DASH_LONG = 39; + protected static final byte KUL_WAVE_DOUBLE = 43; + protected static final byte KUL_DASH_LONG_HEAVY = 55; + + protected static final byte ISS_NONE = 0; + protected static final byte ISS_SUPERSCRIPTED = 1; + protected static final byte ISS_SUBSCRIPTED = 2; + + private static final BitField itypFELayout = new BitField(0x00ff); + private static final BitField fTNY = new BitField(0x0100); + private static final BitField fWarichu = new BitField(0x0200); + private static final BitField fKumimoji = new BitField(0x0400); + private static final BitField fRuby = new BitField(0x0800); + private static final BitField fLSFitText = new BitField(0x1000); + private static final BitField spare = new BitField(0xe000); + + private static final BitField iWarichuBracket = new BitField(0x07); + private static final BitField fWarichuNoOpenBracket = new BitField(0x08); + private static final BitField fTNYCompress = new BitField(0x10); + private static final BitField fTNYFetchTxm = new BitField(0x20); + private static final BitField fCellFitText = new BitField(0x40); + private static final BitField unused = new BitField(0x80); + + private static final BitField icoHighlight = new BitField(0x001f); + private static final BitField fHighlight = new BitField(0x0020); + + private static final BitField fChsDiff = new BitField(0x0001); + private static final BitField fMacChs = new BitField(0x0020); + + protected static final byte LBRCRJ_NONE = 0; + protected static final byte LBRCRJ_LEFT = 1; + protected static final byte LBRCRJ_RIGHT = 2; + protected static final byte LBRCRJ_BOTH = 3; protected int field_1_grpfChp; - /**/private static final BitField fBold = new BitField(0x00000001); - /**/private static final BitField fItalic = new BitField(0x00000002); - /**/private static final BitField fRMarkDel = new BitField(0x00000004); - /**/private static final BitField fOutline = new BitField(0x00000008); - /**/private static final BitField fFldVanish = new BitField(0x00000010); - /**/private static final BitField fSmallCaps = new BitField(0x00000020); - /**/private static final BitField fCaps = new BitField(0x00000040); - /**/private static final BitField fVanish = new BitField(0x00000080); - /**/private static final BitField fRMark = new BitField(0x00000100); - /**/private static final BitField fSpec = new BitField(0x00000200); - /**/private static final BitField fStrike = new BitField(0x00000400); - /**/private static final BitField fObj = new BitField(0x00000800); - /**/private static final BitField fShadow = new BitField(0x00001000); - /**/private static final BitField fLowerCase = new BitField(0x00002000); - /**/private static final BitField fData = new BitField(0x00004000); - /**/private static final BitField fOle2 = new BitField(0x00008000); - /**/private static final BitField fEmboss = new BitField(0x00010000); - /**/private static final BitField fImprint = new BitField(0x00020000); - /**/private static final BitField fDStrike = new BitField(0x00040000); - /**/private static final BitField fUsePgsuSettings = new BitField(0x00080000); - /**/private static final BitField fBoldBi = new BitField(0x00100000); - /**/private static final BitField fComplexScripts = new BitField(0x00100000); - /**/private static final BitField fItalicBi = new BitField(0x00200000); - /**/private static final BitField fBiDi = new BitField(0x00400000); - /**/private static final BitField fIcoBi = new BitField(0x00800000); - /**/private static final BitField fNonGlyph = new BitField(0x01000000); - /**/private static final BitField fBoldOther = new BitField(0x02000000); - /**/private static final BitField fItalicOther = new BitField(0x04000000); - /**/private static final BitField fNoProof = new BitField(0x08000000); - /**/private static final BitField fWebHidden = new BitField(0x10000000); - /**/private static final BitField fFitText = new BitField(0x20000000); - /**/private static final BitField fCalc = new BitField(0x40000000); - /**/private static final BitField fFmtLineProp = new BitField(0x80000000); protected int field_2_hps; protected int field_3_ftcAscii; protected int field_4_ftcFE; @@ -89,40 +147,12 @@ public abstract class CHPAbstractType protected int field_11_lidDefault; protected int field_12_lidFE; protected byte field_13_kcd; - /**/protected final static byte KCD_NON = 0; - /**/protected final static byte KCD_DOT = 1; - /**/protected final static byte KCD_COMMA = 2; - /**/protected final static byte KCD_CIRCLE = 3; - /**/protected final static byte KCD_UNDER_DOT = 4; protected boolean field_14_fUndetermine; protected byte field_15_iss; - /**/protected final static byte ISS_NONE = 0; - /**/protected final static byte ISS_SUPERSCRIPTED = 1; - /**/protected final static byte ISS_SUBSCRIPTED = 2; protected boolean field_16_fSpecSymbol; protected byte field_17_idct; protected byte field_18_idctHint; protected byte field_19_kul; - /**/protected final static byte KUL_NONE = 0; - /**/protected final static byte KUL_SINGLE = 1; - /**/protected final static byte KUL_BY_WORD = 2; - /**/protected final static byte KUL_DOUBLE = 3; - /**/protected final static byte KUL_DOTTED = 4; - /**/protected final static byte KUL_HIDDEN = 5; - /**/protected final static byte KUL_THICK = 6; - /**/protected final static byte KUL_DASH = 7; - /**/protected final static byte KUL_DOT = 8; - /**/protected final static byte KUL_DOT_DASH = 9; - /**/protected final static byte KUL_DOT_DOT_DASH = 10; - /**/protected final static byte KUL_WAVE = 11; - /**/protected final static byte KUL_DOTTED_HEAVY = 20; - /**/protected final static byte KUL_DASHED_HEAVY = 23; - /**/protected final static byte KUL_DOT_DASH_HEAVY = 25; - /**/protected final static byte KUL_DOT_DOT_DASH_HEAVY = 26; - /**/protected final static byte KUL_WAVE_HEAVY = 27; - /**/protected final static byte KUL_DASH_LONG = 39; - /**/protected final static byte KUL_WAVE_DOUBLE = 43; - /**/protected final static byte KUL_DASH_LONG_HEAVY = 55; protected Hyphenation field_20_hresi; protected int field_21_hpsKern; protected short field_22_hpsPos; @@ -130,30 +160,10 @@ public abstract class CHPAbstractType protected BorderCode field_24_brc; protected int field_25_ibstRMark; protected byte field_26_sfxtText; - /**/protected final static byte SFXTTEXT_NO = 0; - /**/protected final static byte SFXTTEXT_LAS_VEGAS_LIGHTS = 1; - /**/protected final static byte SFXTTEXT_BACKGROUND_BLINK = 2; - /**/protected final static byte SFXTTEXT_SPARKLE_TEXT = 3; - /**/protected final static byte SFXTTEXT_MARCHING_ANTS = 4; - /**/protected final static byte SFXTTEXT_MARCHING_RED_ANTS = 5; - /**/protected final static byte SFXTTEXT_SHIMMER = 6; protected boolean field_27_fDblBdr; protected boolean field_28_fBorderWS; protected short field_29_ufel; - /**/private static final BitField itypFELayout = new BitField(0x00ff); - /**/private static final BitField fTNY = new BitField(0x0100); - /**/private static final BitField fWarichu = new BitField(0x0200); - /**/private static final BitField fKumimoji = new BitField(0x0400); - /**/private static final BitField fRuby = new BitField(0x0800); - /**/private static final BitField fLSFitText = new BitField(0x1000); - /**/private static final BitField spare = new BitField(0xe000); protected byte field_30_copt; - /**/private static final BitField iWarichuBracket = new BitField(0x07); - /**/private static final BitField fWarichuNoOpenBracket = new BitField(0x08); - /**/private static final BitField fTNYCompress = new BitField(0x10); - /**/private static final BitField fTNYFetchTxm = new BitField(0x20); - /**/private static final BitField fCellFitText = new BitField(0x40); - /**/private static final BitField unused = new BitField(0x80); protected int field_31_hpsAsci; protected int field_32_hpsFE; protected int field_33_hpsBi; @@ -172,11 +182,7 @@ public abstract class CHPAbstractType protected int field_46_idslReasonDel; protected int field_47_cpg; protected short field_48_Highlight; - /**/private static final BitField icoHighlight = new BitField(0x001f); - /**/private static final BitField fHighlight = new BitField(0x0020); protected short field_49_CharsetFlags; - /**/private static final BitField fChsDiff = new BitField(0x0001); - /**/private static final BitField fMacChs = new BitField(0x0020); protected short field_50_chse; protected boolean field_51_fPropRMark; protected int field_52_ibstPropRMark; @@ -192,36 +198,101 @@ public abstract class CHPAbstractType protected byte[] field_62_xstDispFldRMark; protected int field_63_fcObjp; protected byte field_64_lbrCRJ; - /**/protected final static byte LBRCRJ_NONE = 0; - /**/protected final static byte LBRCRJ_LEFT = 1; - /**/protected final static byte LBRCRJ_RIGHT = 2; - /**/protected final static byte LBRCRJ_BOTH = 3; protected boolean field_65_fSpecVanish; protected boolean field_66_fHasOldProps; protected boolean field_67_fSdtVanish; protected int field_68_wCharScale; - protected CHPAbstractType() - { - this.field_2_hps = 20; - this.field_8_cv = new Colorref(); - this.field_11_lidDefault = 0x0400; - this.field_12_lidFE = 0x0400; - this.field_20_hresi = new Hyphenation(); - this.field_23_shd = new ShadingDescriptor(); - this.field_24_brc = new BorderCode(); - this.field_36_fcPic = -1; - this.field_40_hresiOld = new Hyphenation(); - this.field_42_dttmRMark = new DateAndTime(); - this.field_43_dttmRMarkDel = new DateAndTime(); - this.field_44_istd = 10; - this.field_53_dttmPropRMark = new DateAndTime(); - this.field_58_dttmConflict = new DateAndTime(); - this.field_61_dttmDispFldRMark = new DateAndTime(); - this.field_62_xstDispFldRMark = new byte[32]; - this.field_68_wCharScale = 100; + protected CHPAbstractType() { + field_2_hps = 20; + field_8_cv = new Colorref(); + field_11_lidDefault = 0x0400; + field_12_lidFE = 0x0400; + field_20_hresi = new Hyphenation(); + field_23_shd = new ShadingDescriptor(); + field_24_brc = new BorderCode(); + field_36_fcPic = -1; + field_40_hresiOld = new Hyphenation(); + field_42_dttmRMark = new DateAndTime(); + field_43_dttmRMarkDel = new DateAndTime(); + field_44_istd = 10; + field_53_dttmPropRMark = new DateAndTime(); + field_58_dttmConflict = new DateAndTime(); + field_61_dttmDispFldRMark = new DateAndTime(); + field_62_xstDispFldRMark = new byte[32]; + field_68_wCharScale = 100; } + protected CHPAbstractType(CHPAbstractType other) { + field_1_grpfChp = other.field_1_grpfChp; + field_2_hps = other.field_2_hps; + field_3_ftcAscii = other.field_3_ftcAscii; + field_4_ftcFE = other.field_4_ftcFE; + field_5_ftcOther = other.field_5_ftcOther; + field_6_ftcBi = other.field_6_ftcBi; + field_7_dxaSpace = other.field_7_dxaSpace; + field_8_cv = (other.field_8_cv == null) ? null : other.field_8_cv.copy(); + field_9_ico = other.field_9_ico; + field_10_pctCharWidth = other.field_10_pctCharWidth; + field_11_lidDefault = other.field_11_lidDefault; + field_12_lidFE = other.field_12_lidFE; + field_13_kcd = other.field_13_kcd; + field_14_fUndetermine = other.field_14_fUndetermine; + field_15_iss = other.field_15_iss; + field_16_fSpecSymbol = other.field_16_fSpecSymbol; + field_17_idct = other.field_17_idct; + field_18_idctHint = other.field_18_idctHint; + field_19_kul = other.field_19_kul; + field_20_hresi = (other.field_20_hresi == null) ? null : other.field_20_hresi.copy(); + field_21_hpsKern = other.field_21_hpsKern; + field_22_hpsPos = other.field_22_hpsPos; + field_23_shd = (other.field_23_shd == null) ? null : other.field_23_shd.copy(); + field_24_brc = (other.field_24_brc == null) ? null : other.field_24_brc.copy(); + field_25_ibstRMark = other.field_25_ibstRMark; + field_26_sfxtText = other.field_26_sfxtText; + field_27_fDblBdr = other.field_27_fDblBdr; + field_28_fBorderWS = other.field_28_fBorderWS; + field_29_ufel = other.field_29_ufel; + field_30_copt = other.field_30_copt; + field_31_hpsAsci = other.field_31_hpsAsci; + field_32_hpsFE = other.field_32_hpsFE; + field_33_hpsBi = other.field_33_hpsBi; + field_34_ftcSym = other.field_34_ftcSym; + field_35_xchSym = other.field_35_xchSym; + field_36_fcPic = other.field_36_fcPic; + field_37_fcObj = other.field_37_fcObj; + field_38_lTagObj = other.field_38_lTagObj; + field_39_fcData = other.field_39_fcData; + field_40_hresiOld = (other.field_40_hresiOld == null) ? null : other.field_40_hresiOld.copy(); + field_41_ibstRMarkDel = other.field_41_ibstRMarkDel; + field_42_dttmRMark = (other.field_42_dttmRMark == null) ? null : other.field_42_dttmRMark.copy(); + field_43_dttmRMarkDel = (other.field_43_dttmRMarkDel == null) ? null : other.field_43_dttmRMarkDel.copy(); + field_44_istd = other.field_44_istd; + field_45_idslRMReason = other.field_45_idslRMReason; + field_46_idslReasonDel = other.field_46_idslReasonDel; + field_47_cpg = other.field_47_cpg; + field_48_Highlight = other.field_48_Highlight; + field_49_CharsetFlags = other.field_49_CharsetFlags; + field_50_chse = other.field_50_chse; + field_51_fPropRMark = other.field_51_fPropRMark; + field_52_ibstPropRMark = other.field_52_ibstPropRMark; + field_53_dttmPropRMark = (other.field_53_dttmPropRMark == null) ? null : other.field_53_dttmPropRMark.copy(); + field_54_fConflictOrig = other.field_54_fConflictOrig; + field_55_fConflictOtherDel = other.field_55_fConflictOtherDel; + field_56_wConflict = other.field_56_wConflict; + field_57_IbstConflict = other.field_57_IbstConflict; + field_58_dttmConflict = (other.field_58_dttmConflict == null) ? null : other.field_58_dttmConflict.copy(); + field_59_fDispFldRMark = other.field_59_fDispFldRMark; + field_60_ibstDispFldRMark = other.field_60_ibstDispFldRMark; + field_61_dttmDispFldRMark = (other.field_61_dttmDispFldRMark == null) ? null : other.field_61_dttmDispFldRMark.copy(); + field_62_xstDispFldRMark = (other.field_62_xstDispFldRMark == null) ? null : other.field_62_xstDispFldRMark.clone(); + field_63_fcObjp = other.field_63_fcObjp; + field_64_lbrCRJ = other.field_64_lbrCRJ; + field_65_fSpecVanish = other.field_65_fSpecVanish; + field_66_fHasOldProps = other.field_66_fHasOldProps; + field_67_fSdtVanish = other.field_67_fSdtVanish; + field_68_wCharScale = other.field_68_wCharScale; + } @Override public boolean equals( Object obj ) diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/FRDAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/FRDAbstractType.java index 8ebaab7667..1c75451897 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/FRDAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/FRDAbstractType.java @@ -24,21 +24,16 @@ import org.apache.poi.util.LittleEndian; *

    * Class and fields descriptions are quoted from Microsoft Office Word 97-2007 * Binary File Format (.doc) Specification - * - * NOTE: This source is automatically generated please do not modify this file. - * Either subclass or remove the record in src/types/definitions. - * - * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary - * File Format (.doc) Specification */ @Internal -public abstract class FRDAbstractType -{ +public abstract class FRDAbstractType { protected short field_1_nAuto; - protected FRDAbstractType() - { + protected FRDAbstractType() {} + + protected FRDAbstractType(FRDAbstractType other) { + field_1_nAuto = other.field_1_nAuto; } protected void fillFields( byte[] data, int offset ) diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/HRESIAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/HRESIAbstractType.java index 0e9bd5fb63..d4e410e2a3 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/HRESIAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/HRESIAbstractType.java @@ -24,29 +24,25 @@ import org.apache.poi.util.Internal; *

    * Class and fields descriptions are quoted from Microsoft Office Word 97-2007 * Binary File Format (.doc) Specification - * - * NOTE: This source is automatically generated please do not modify this file. - * Either subclass or remove the record in src/types/definitions. - * - * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary - * File Format (.doc) Specification */ @Internal -public abstract class HRESIAbstractType -{ +public abstract class HRESIAbstractType { + public static final byte HRES_NO = 0; + public static final byte HRES_NORMAL = 1; + public static final byte HRES_ADD_LETTER_BEFORE = 2; + public static final byte HRES_CHANGE_LETTER_BEFORE = 3; + public static final byte HRES_DELETE_LETTER_BEFORE = 4; + public static final byte HRES_CHANGE_LETTER_AFTER = 5; + public static final byte HRES_DELETE_BEFORE_CHANGE_BEFORE = 6; protected byte field_1_hres; - /**/public final static byte HRES_NO = 0; - /**/public final static byte HRES_NORMAL = 1; - /**/public final static byte HRES_ADD_LETTER_BEFORE = 2; - /**/public final static byte HRES_CHANGE_LETTER_BEFORE = 3; - /**/public final static byte HRES_DELETE_LETTER_BEFORE = 4; - /**/public final static byte HRES_CHANGE_LETTER_AFTER = 5; - /**/public final static byte HRES_DELETE_BEFORE_CHANGE_BEFORE = 6; protected byte field_2_chHres; - protected HRESIAbstractType() - { + protected HRESIAbstractType() {} + + protected HRESIAbstractType(HRESIAbstractType other) { + field_1_hres = other.field_1_hres; + field_2_chHres = other.field_2_chHres; } protected void fillFields( byte[] data, int offset ) @@ -85,7 +81,7 @@ public abstract class HRESIAbstractType /** * Hyphenation rule. * - * @return One of + * @return One of *

  • {@link #HRES_NO} *
  • {@link #HRES_NORMAL} *
  • {@link #HRES_ADD_LETTER_BEFORE} @@ -103,7 +99,7 @@ public abstract class HRESIAbstractType * Hyphenation rule. * * @param field_1_hres - * One of + * One of *
  • {@link #HRES_NO} *
  • {@link #HRES_NORMAL} *
  • {@link #HRES_ADD_LETTER_BEFORE} diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/PAPAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/PAPAbstractType.java index 1363a837a1..220a6aff63 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/PAPAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/PAPAbstractType.java @@ -19,6 +19,7 @@ package org.apache.poi.hwpf.model.types; import java.util.Arrays; +import java.util.stream.Stream; import org.apache.poi.hwpf.model.TabDescriptor; import org.apache.poi.hwpf.usermodel.BorderCode; @@ -31,18 +32,34 @@ import org.apache.poi.util.Internal; /** * Paragraph Properties. - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author S. Ryan Ackley */ +@SuppressWarnings("unused") @Internal -public abstract class PAPAbstractType -{ +public abstract class PAPAbstractType { + + protected static final byte BRCL_SINGLE = 0; + protected static final byte BRCL_THICK = 1; + protected static final byte BRCL_DOUBLE = 2; + protected static final byte BRCL_SHADOW = 3; + + protected static final byte BRCP_NONE = 0; + protected static final byte BRCP_BORDER_ABOVE = 1; + protected static final byte BRCP_BORDER_BELOW = 2; + protected static final byte BRCP_BOX_AROUND = 15; + protected static final byte BRCP_BAR_TO_LEFT_OF_PARAGRAPH = 16; + + protected static final boolean FMINHEIGHT_EXACT = false; + protected static final boolean FMINHEIGHT_AT_LEAST = true; + + protected static final byte WALIGNFONT_HANGING = 0; + protected static final byte WALIGNFONT_CENTERED = 1; + protected static final byte WALIGNFONT_ROMAN = 2; + protected static final byte WALIGNFONT_VARIABLE = 3; + protected static final byte WALIGNFONT_AUTO = 4; + + private static final BitField fVertical = new BitField(0x0001); + private static final BitField fBackward = new BitField(0x0002); + private static final BitField fRotateFont = new BitField(0x0004); protected int field_1_istd; protected boolean field_2_fSideBySide; @@ -50,16 +67,7 @@ public abstract class PAPAbstractType protected boolean field_4_fKeepFollow; protected boolean field_5_fPageBreakBefore; protected byte field_6_brcl; - /**/protected final static byte BRCL_SINGLE = 0; - /**/protected final static byte BRCL_THICK = 1; - /**/protected final static byte BRCL_DOUBLE = 2; - /**/protected final static byte BRCL_SHADOW = 3; protected byte field_7_brcp; - /**/protected final static byte BRCP_NONE = 0; - /**/protected final static byte BRCP_BORDER_ABOVE = 1; - /**/protected final static byte BRCP_BORDER_BELOW = 2; - /**/protected final static byte BRCP_BOX_AROUND = 15; - /**/protected final static byte BRCP_BAR_TO_LEFT_OF_PARAGRAPH = 16; protected byte field_8_ilvl; protected int field_9_ilfo; protected boolean field_10_fNoLnn; @@ -80,8 +88,6 @@ public abstract class PAPAbstractType protected boolean field_25_fNoAutoHyph; protected int field_26_dyaHeight; protected boolean field_27_fMinHeight; - /**/protected final static boolean FMINHEIGHT_EXACT = false; - /**/protected final static boolean FMINHEIGHT_AT_LEAST = true; protected DropCapSpecifier field_28_dcs; protected int field_29_dyaFromText; protected int field_30_dxaFromText; @@ -94,15 +100,7 @@ public abstract class PAPAbstractType protected boolean field_37_fAutoSpaceDE; protected boolean field_38_fAutoSpaceDN; protected int field_39_wAlignFont; - /**/protected final static byte WALIGNFONT_HANGING = 0; - /**/protected final static byte WALIGNFONT_CENTERED = 1; - /**/protected final static byte WALIGNFONT_ROMAN = 2; - /**/protected final static byte WALIGNFONT_VARIABLE = 3; - /**/protected final static byte WALIGNFONT_AUTO = 4; protected short field_40_fontAlign; - /**/private static BitField fVertical = new BitField(0x0001); - /**/private static BitField fBackward = new BitField(0x0002); - /**/private static BitField fRotateFont = new BitField(0x0004); protected byte field_41_lvl; protected boolean field_42_fBiDi; protected boolean field_43_fNumRMIns; @@ -143,29 +141,111 @@ public abstract class PAPAbstractType protected long field_78_ipgp; protected long field_79_rsid; - protected PAPAbstractType() - { - this.field_11_lspd = new LineSpacingDescriptor(); - this.field_11_lspd = new LineSpacingDescriptor(); - this.field_28_dcs = new DropCapSpecifier(); - this.field_32_fWidowControl = true; - this.field_41_lvl = 9; - this.field_60_brcTop = new BorderCode(); - this.field_61_brcLeft = new BorderCode(); - this.field_62_brcBottom = new BorderCode(); - this.field_63_brcRight = new BorderCode(); - this.field_64_brcBetween = new BorderCode(); - this.field_65_brcBar = new BorderCode(); - this.field_66_shd = new ShadingDescriptor(); - this.field_67_anld = new byte[0]; - this.field_68_phe = new byte[0]; - this.field_71_dttmPropRMark = new DateAndTime(); - this.field_73_rgdxaTab = new int[0]; - this.field_74_rgtbd = new TabDescriptor[0]; - this.field_75_numrm = new byte[0]; - this.field_76_ptap = new byte[0]; + protected PAPAbstractType() { + field_11_lspd = new LineSpacingDescriptor(); + field_11_lspd = new LineSpacingDescriptor(); + field_28_dcs = new DropCapSpecifier(); + field_32_fWidowControl = true; + field_41_lvl = 9; + field_60_brcTop = new BorderCode(); + field_61_brcLeft = new BorderCode(); + field_62_brcBottom = new BorderCode(); + field_63_brcRight = new BorderCode(); + field_64_brcBetween = new BorderCode(); + field_65_brcBar = new BorderCode(); + field_66_shd = new ShadingDescriptor(); + field_67_anld = new byte[0]; + field_68_phe = new byte[0]; + field_71_dttmPropRMark = new DateAndTime(); + field_73_rgdxaTab = new int[0]; + field_74_rgtbd = new TabDescriptor[0]; + field_75_numrm = new byte[0]; + field_76_ptap = new byte[0]; } + protected PAPAbstractType(PAPAbstractType other) { + field_1_istd = other.field_1_istd; + field_2_fSideBySide = other.field_2_fSideBySide; + field_3_fKeep = other.field_3_fKeep; + field_4_fKeepFollow = other.field_4_fKeepFollow; + field_5_fPageBreakBefore = other.field_5_fPageBreakBefore; + field_6_brcl = other.field_6_brcl; + field_7_brcp = other.field_7_brcp; + field_8_ilvl = other.field_8_ilvl; + field_9_ilfo = other.field_9_ilfo; + field_10_fNoLnn = other.field_10_fNoLnn; + field_11_lspd = (other.field_11_lspd == null) ? null : other.field_11_lspd.copy(); + field_12_dyaBefore = other.field_12_dyaBefore; + field_13_dyaAfter = other.field_13_dyaAfter; + field_14_fInTable = other.field_14_fInTable; + field_15_finTableW97 = other.field_15_finTableW97; + field_16_fTtp = other.field_16_fTtp; + field_17_dxaAbs = other.field_17_dxaAbs; + field_18_dyaAbs = other.field_18_dyaAbs; + field_19_dxaWidth = other.field_19_dxaWidth; + field_20_fBrLnAbove = other.field_20_fBrLnAbove; + field_21_fBrLnBelow = other.field_21_fBrLnBelow; + field_22_pcVert = other.field_22_pcVert; + field_23_pcHorz = other.field_23_pcHorz; + field_24_wr = other.field_24_wr; + field_25_fNoAutoHyph = other.field_25_fNoAutoHyph; + field_26_dyaHeight = other.field_26_dyaHeight; + field_27_fMinHeight = other.field_27_fMinHeight; + field_28_dcs = (other.field_28_dcs == null) ? null : other.field_28_dcs.copy(); + field_29_dyaFromText = other.field_29_dyaFromText; + field_30_dxaFromText = other.field_30_dxaFromText; + field_31_fLocked = other.field_31_fLocked; + field_32_fWidowControl = other.field_32_fWidowControl; + field_33_fKinsoku = other.field_33_fKinsoku; + field_34_fWordWrap = other.field_34_fWordWrap; + field_35_fOverflowPunct = other.field_35_fOverflowPunct; + field_36_fTopLinePunct = other.field_36_fTopLinePunct; + field_37_fAutoSpaceDE = other.field_37_fAutoSpaceDE; + field_38_fAutoSpaceDN = other.field_38_fAutoSpaceDN; + field_39_wAlignFont = other.field_39_wAlignFont; + field_40_fontAlign = other.field_40_fontAlign; + field_41_lvl = other.field_41_lvl; + field_42_fBiDi = other.field_42_fBiDi; + field_43_fNumRMIns = other.field_43_fNumRMIns; + field_44_fCrLf = other.field_44_fCrLf; + field_45_fUsePgsuSettings = other.field_45_fUsePgsuSettings; + field_46_fAdjustRight = other.field_46_fAdjustRight; + field_47_itap = other.field_47_itap; + field_48_fInnerTableCell = other.field_48_fInnerTableCell; + field_49_fOpenTch = other.field_49_fOpenTch; + field_50_fTtpEmbedded = other.field_50_fTtpEmbedded; + field_51_dxcRight = other.field_51_dxcRight; + field_52_dxcLeft = other.field_52_dxcLeft; + field_53_dxcLeft1 = other.field_53_dxcLeft1; + field_54_fDyaBeforeAuto = other.field_54_fDyaBeforeAuto; + field_55_fDyaAfterAuto = other.field_55_fDyaAfterAuto; + field_56_dxaRight = other.field_56_dxaRight; + field_57_dxaLeft = other.field_57_dxaLeft; + field_58_dxaLeft1 = other.field_58_dxaLeft1; + field_59_jc = other.field_59_jc; + field_60_brcTop = (other.field_60_brcTop == null) ? null : other.field_60_brcTop.copy(); + field_61_brcLeft = (other.field_61_brcLeft == null) ? null : other.field_61_brcLeft.copy(); + field_62_brcBottom = (other.field_62_brcBottom == null) ? null : other.field_62_brcBottom.copy(); + field_63_brcRight = (other.field_63_brcRight == null) ? null : other.field_63_brcRight.copy(); + field_64_brcBetween = (other.field_64_brcBetween == null) ? null : other.field_64_brcBetween.copy(); + field_65_brcBar = (other.field_65_brcBar == null) ? null : other.field_65_brcBar.copy(); + field_66_shd = (other.field_66_shd == null) ? null : other.field_66_shd.copy(); + field_67_anld = (other.field_67_anld == null) ? null : other.field_67_anld.clone(); + field_68_phe = (other.field_68_phe == null) ? null : other.field_68_phe.clone(); + field_69_fPropRMark = other.field_69_fPropRMark; + field_70_ibstPropRMark = other.field_70_ibstPropRMark; + field_71_dttmPropRMark = (other.field_71_dttmPropRMark == null) ? null : other.field_71_dttmPropRMark.copy(); + field_72_itbdMac = other.field_72_itbdMac; + field_73_rgdxaTab = (other.field_73_rgdxaTab == null) ? null : other.field_73_rgdxaTab.clone(); + field_74_rgtbd = (other.field_74_rgtbd == null) ? null + : Stream.of(other.field_74_rgtbd).map(TabDescriptor::copy).toArray(TabDescriptor[]::new); + field_75_numrm = (other.field_75_numrm == null) ? null : other.field_75_numrm.clone(); + field_76_ptap = (other.field_76_ptap == null) ? null : other.field_76_ptap.clone(); + field_77_fNoAllowOverlap = other.field_77_fNoAllowOverlap; + field_78_ipgp = other.field_78_ipgp; + field_79_rsid = other.field_79_rsid; + + } public String toString() { @@ -430,7 +510,7 @@ public abstract class PAPAbstractType /** * Border line style. * - * @return One of + * @return One of *

  • {@link #BRCL_SINGLE} *
  • {@link #BRCL_THICK} *
  • {@link #BRCL_DOUBLE} @@ -446,7 +526,7 @@ public abstract class PAPAbstractType * Border line style. * * @param field_6_brcl - * One of + * One of *
  • {@link #BRCL_SINGLE} *
  • {@link #BRCL_THICK} *
  • {@link #BRCL_DOUBLE} @@ -461,7 +541,7 @@ public abstract class PAPAbstractType /** * Rectangle border codes. * - * @return One of + * @return One of *
  • {@link #BRCP_NONE} *
  • {@link #BRCP_BORDER_ABOVE} *
  • {@link #BRCP_BORDER_BELOW} @@ -478,7 +558,7 @@ public abstract class PAPAbstractType * Rectangle border codes. * * @param field_7_brcp - * One of + * One of *
  • {@link #BRCP_NONE} *
  • {@link #BRCP_BORDER_ABOVE} *
  • {@link #BRCP_BORDER_BELOW} @@ -512,23 +592,23 @@ public abstract class PAPAbstractType /** * "A 16-bit signed integer value that is used to determine which list * contains the paragraph. This value MUST be one of the following: - * + * * 0x0000 -- This paragraph is not in a list, and any list formatting on the * paragraph is removed. - * + * * 0x0001 - 0x07FE -- The value is a 1-based index into PlfLfo.rgLfo. The * LFO at this index defines the list that this paragraph is in. - * + * * 0xF801 -- This paragraph is not in a list. - * + * * 0xF802 - 0xFFFF -- The value is the negation of a 1-based index into * PlfLfo.rgLfo. The LFO at this index defines the list that this paragraph * is in. The logical left indentation (see sprmPDxaLeft) and the logical * left first line indentation (see sprmPDxaLeft1) of the paragraph MUST be * preserved despite any list formatting. - * + * * By default, a paragraph is not in a list." - * + * * Quote from [MS-DOC] -- v20110315, page 125 */ @Internal @@ -540,22 +620,22 @@ public abstract class PAPAbstractType /** * "A 16-bit signed integer value that is used to determine which list * contains the paragraph. This value MUST be one of the following: - * + * * 0x0000 -- This paragraph is not in a list, and any list formatting on the * paragraph is removed. - * + * * 0x0001 - 0x07FE -- The value is a 1-based index into PlfLfo.rgLfo. The * LFO at this index defines the list that this paragraph is in. - * + * * 0xF801 -- This paragraph is not in a list. - * + * * 0xF802 - 0xFFFF -- The value is the negation of a 1-based index into * PlfLfo.rgLfo. The LFO at this index defines the list that this paragraph * is in. The logical left indentation (see sprmPDxaLeft) and the logical * left first line indentation (see sprmPDxaLeft1) of the paragraph MUST be * preserved despite any list formatting. By default, a paragraph is not in * a list." - * + * * Quote from [MS-DOC] -- v20110315, page 125 */ @Internal @@ -873,7 +953,7 @@ public abstract class PAPAbstractType /** * Minimum height is exact or auto. * - * @return One of + * @return One of *
  • {@link #FMINHEIGHT_EXACT} *
  • {@link #FMINHEIGHT_AT_LEAST} */ @@ -887,7 +967,7 @@ public abstract class PAPAbstractType * Minimum height is exact or auto. * * @param field_27_fMinHeight - * One of + * One of *
  • {@link #FMINHEIGHT_EXACT} *
  • {@link #FMINHEIGHT_AT_LEAST} */ @@ -1098,7 +1178,7 @@ public abstract class PAPAbstractType /** * Get the wAlignFont field for the PAP record. * - * @return One of + * @return One of *
  • {@link #WALIGNFONT_HANGING} *
  • {@link #WALIGNFONT_CENTERED} *
  • {@link #WALIGNFONT_ROMAN} @@ -1115,7 +1195,7 @@ public abstract class PAPAbstractType * Set the wAlignFont field for the PAP record. * * @param field_39_wAlignFont - * One of + * One of *
  • {@link #WALIGNFONT_HANGING} *
  • {@link #WALIGNFONT_CENTERED} *
  • {@link #WALIGNFONT_ROMAN} @@ -1850,7 +1930,7 @@ public abstract class PAPAbstractType /** * Sets the fVertical field value. - * + * */ @Internal public void setFVertical( boolean value ) @@ -1859,7 +1939,7 @@ public abstract class PAPAbstractType } /** - * + * * @return the fVertical field value. */ @Internal @@ -1870,7 +1950,7 @@ public abstract class PAPAbstractType /** * Sets the fBackward field value. - * + * */ @Internal public void setFBackward( boolean value ) @@ -1879,7 +1959,7 @@ public abstract class PAPAbstractType } /** - * + * * @return the fBackward field value. */ @Internal @@ -1890,7 +1970,7 @@ public abstract class PAPAbstractType /** * Sets the fRotateFont field value. - * + * */ @Internal public void setFRotateFont( boolean value ) @@ -1899,7 +1979,7 @@ public abstract class PAPAbstractType } /** - * + * * @return the fRotateFont field value. */ @Internal diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/SEPAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/SEPAbstractType.java index c2f0f9ce70..f74a1afab4 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/SEPAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/SEPAbstractType.java @@ -26,39 +26,40 @@ import org.apache.poi.util.Internal; /** * Section Properties. - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/records/definitions. - * - * @author S. Ryan Ackley */ @Internal -public abstract class SEPAbstractType -{ +public abstract class SEPAbstractType { + + /** No break */ + public static final byte BKC_NO_BREAK = 0; + /** New column */ + public static final byte BKC_NEW_COLUMN = 1; + /** New page */ + public static final byte BKC_NEW_PAGE = 2; + /** Even page */ + public static final byte BKC_EVEN_PAGE = 3; + /** Odd page */ + public static final byte BKC_ODD_PAGE = 4; + + /** Arabic */ + public static final byte NFCPGN_ARABIC = 0; + /** Roman (upper case) */ + public static final byte NFCPGN_ROMAN_UPPER_CASE = 1; + /** Roman (lower case) */ + public static final byte NFCPGN_ROMAN_LOWER_CASE = 2; + /** Letter (upper case) */ + public static final byte NFCPGN_LETTER_UPPER_CASE = 3; + /** Letter (lower case) */ + public static final byte NFCPGN_LETTER_LOWER_CASE = 4; + + public static final boolean DMORIENTPAGE_LANDSCAPE = false; + public static final boolean DMORIENTPAGE_PORTRAIT = true; + protected byte field_1_bkc; - /** No break */ - /**/public final static byte BKC_NO_BREAK = 0; - /** New column */ - /**/public final static byte BKC_NEW_COLUMN = 1; - /** New page */ - /**/public final static byte BKC_NEW_PAGE = 2; - /** Even page */ - /**/public final static byte BKC_EVEN_PAGE = 3; - /** Odd page */ - /**/public final static byte BKC_ODD_PAGE = 4; protected boolean field_2_fTitlePage; protected boolean field_3_fAutoPgn; protected byte field_4_nfcPgn; - /** Arabic */ - /**/public final static byte NFCPGN_ARABIC = 0; - /** Roman (upper case) */ - /**/public final static byte NFCPGN_ROMAN_UPPER_CASE = 1; - /** Roman (lower case) */ - /**/public final static byte NFCPGN_ROMAN_LOWER_CASE = 2; - /** Letter (upper case) */ - /**/public final static byte NFCPGN_LETTER_UPPER_CASE = 3; - /** Letter (lower case) */ - /**/public final static byte NFCPGN_LETTER_LOWER_CASE = 4; protected boolean field_5_fUnlocked; protected byte field_6_cnsPgn; protected boolean field_7_fPgnRestart; @@ -86,8 +87,6 @@ public abstract class SEPAbstractType protected int field_29_clm; protected int field_30_unused2; protected boolean field_31_dmOrientPage; - /**/public final static boolean DMORIENTPAGE_LANDSCAPE = false; - /**/public final static boolean DMORIENTPAGE_PORTRAIT = true; protected byte field_32_iHeadingPgn; protected int field_33_pgnStart; protected int field_34_lnnMin; @@ -117,8 +116,7 @@ public abstract class SEPAbstractType protected short field_58_unused6; protected byte[] field_59_olstAnm; - protected SEPAbstractType() - { + protected SEPAbstractType() { this.field_1_bkc = 2; this.field_8_fEndNote = true; this.field_13_dxaPgn = 720; @@ -139,6 +137,68 @@ public abstract class SEPAbstractType this.field_53_dxaColumns = 720; } + protected SEPAbstractType(SEPAbstractType other) { + field_1_bkc = other.field_1_bkc; + field_2_fTitlePage = other.field_2_fTitlePage; + field_3_fAutoPgn = other.field_3_fAutoPgn; + field_4_nfcPgn = other.field_4_nfcPgn; + field_5_fUnlocked = other.field_5_fUnlocked; + field_6_cnsPgn = other.field_6_cnsPgn; + field_7_fPgnRestart = other.field_7_fPgnRestart; + field_8_fEndNote = other.field_8_fEndNote; + field_9_lnc = other.field_9_lnc; + field_10_grpfIhdt = other.field_10_grpfIhdt; + field_11_nLnnMod = other.field_11_nLnnMod; + field_12_dxaLnn = other.field_12_dxaLnn; + field_13_dxaPgn = other.field_13_dxaPgn; + field_14_dyaPgn = other.field_14_dyaPgn; + field_15_fLBetween = other.field_15_fLBetween; + field_16_vjc = other.field_16_vjc; + field_17_dmBinFirst = other.field_17_dmBinFirst; + field_18_dmBinOther = other.field_18_dmBinOther; + field_19_dmPaperReq = other.field_19_dmPaperReq; + field_20_brcTop = (other.field_20_brcTop == null) ? null : other.field_20_brcTop.copy(); + field_21_brcLeft = (other.field_21_brcLeft == null) ? null : other.field_21_brcLeft.copy(); + field_22_brcBottom = (other.field_22_brcBottom == null) ? null : other.field_22_brcBottom.copy(); + field_23_brcRight = (other.field_23_brcRight == null) ? null : other.field_23_brcRight.copy(); + field_24_fPropMark = other.field_24_fPropMark; + field_25_ibstPropRMark = other.field_25_ibstPropRMark; + field_26_dttmPropRMark = (other.field_26_dttmPropRMark == null) ? null : other.field_26_dttmPropRMark.copy(); + field_27_dxtCharSpace = other.field_27_dxtCharSpace; + field_28_dyaLinePitch = other.field_28_dyaLinePitch; + field_29_clm = other.field_29_clm; + field_30_unused2 = other.field_30_unused2; + field_31_dmOrientPage = other.field_31_dmOrientPage; + field_32_iHeadingPgn = other.field_32_iHeadingPgn; + field_33_pgnStart = other.field_33_pgnStart; + field_34_lnnMin = other.field_34_lnnMin; + field_35_wTextFlow = other.field_35_wTextFlow; + field_36_unused3 = other.field_36_unused3; + field_37_pgbProp = other.field_37_pgbProp; + field_38_unused4 = other.field_38_unused4; + field_39_xaPage = other.field_39_xaPage; + field_40_yaPage = other.field_40_yaPage; + field_41_xaPageNUp = other.field_41_xaPageNUp; + field_42_yaPageNUp = other.field_42_yaPageNUp; + field_43_dxaLeft = other.field_43_dxaLeft; + field_44_dxaRight = other.field_44_dxaRight; + field_45_dyaTop = other.field_45_dyaTop; + field_46_dyaBottom = other.field_46_dyaBottom; + field_47_dzaGutter = other.field_47_dzaGutter; + field_48_dyaHdrTop = other.field_48_dyaHdrTop; + field_49_dyaHdrBottom = other.field_49_dyaHdrBottom; + field_50_ccolM1 = other.field_50_ccolM1; + field_51_fEvenlySpaced = other.field_51_fEvenlySpaced; + field_52_unused5 = other.field_52_unused5; + field_53_dxaColumns = other.field_53_dxaColumns; + field_54_rgdxaColumn = (other.field_54_rgdxaColumn == null) ? null : other.field_54_rgdxaColumn.clone(); + field_55_dxaColumnWidth = other.field_55_dxaColumnWidth; + field_56_dmOrientFirst = other.field_56_dmOrientFirst; + field_57_fLayout = other.field_57_fLayout; + field_58_unused6 = other.field_58_unused6; + field_59_olstAnm = (other.field_59_olstAnm == null) ? null : other.field_59_olstAnm.clone(); + } + public String toString() { @@ -270,7 +330,7 @@ public abstract class SEPAbstractType /** * Break code. * - * @return One of + * @return One of *
  • {@link #BKC_NO_BREAK} *
  • {@link #BKC_NEW_COLUMN} *
  • {@link #BKC_NEW_PAGE} @@ -286,7 +346,7 @@ public abstract class SEPAbstractType * Break code. * * @param field_1_bkc - * One of + * One of *
  • {@link #BKC_NO_BREAK} *
  • {@link #BKC_NEW_COLUMN} *
  • {@link #BKC_NEW_PAGE} @@ -333,7 +393,7 @@ public abstract class SEPAbstractType /** * Page number format code. * - * @return One of + * @return One of *
  • {@link #NFCPGN_ARABIC} *
  • {@link #NFCPGN_ROMAN_UPPER_CASE} *
  • {@link #NFCPGN_ROMAN_LOWER_CASE} @@ -349,7 +409,7 @@ public abstract class SEPAbstractType * Page number format code. * * @param field_4_nfcPgn - * One of + * One of *
  • {@link #NFCPGN_ARABIC} *
  • {@link #NFCPGN_ROMAN_UPPER_CASE} *
  • {@link #NFCPGN_ROMAN_LOWER_CASE} @@ -780,7 +840,7 @@ public abstract class SEPAbstractType /** * Get the dmOrientPage field for the SEP record. * - * @return One of + * @return One of *
  • {@link #DMORIENTPAGE_LANDSCAPE} *
  • {@link #DMORIENTPAGE_PORTRAIT} */ @@ -793,7 +853,7 @@ public abstract class SEPAbstractType * Set the dmOrientPage field for the SEP record. * * @param field_31_dmOrientPage - * One of + * One of *
  • {@link #DMORIENTPAGE_LANDSCAPE} *
  • {@link #DMORIENTPAGE_PORTRAIT} */ @@ -1250,4 +1310,4 @@ public abstract class SEPAbstractType this.field_59_olstAnm = field_59_olstAnm; } -} // END OF CLASS +} diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java index 9c5f28d164..985ddbe633 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHD80AbstractType.java @@ -24,32 +24,24 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; /** - * The Shd80 structure specifies the colors and pattern that are used for background - shading. As an exception to the constraints that are specified by Ico and Ipat, a Shd80 can - be set to Shd80Nil and specifies that no shading is applied.

    Class and fields - descriptions are quoted from Word (.doc) Binary File Format by Microsoft Corporation - - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author Sergey Vladimirov; according to Word (.doc) Binary File Format by Microsoft Corporation. - + * The Shd80 structure specifies the colors and pattern that are used for background shading. + * As an exception to the constraints that are specified by Ico and Ipat, + * a Shd80 can be set to Shd80Nil and specifies that no shading is applied. */ +@SuppressWarnings("unused") @Internal -public abstract class SHD80AbstractType -{ +public abstract class SHD80AbstractType { + + private static final BitField icoFore = new BitField(0x001F); + private static final BitField icoBack = new BitField(0x03E0); + private static final BitField ipat = new BitField(0xFC00); protected short field_1_value; - /**/private static final BitField icoFore = new BitField(0x001F); - /**/private static final BitField icoBack = new BitField(0x03E0); - /**/private static final BitField ipat = new BitField(0xFC00); - protected SHD80AbstractType() - { + protected SHD80AbstractType() { } + + protected SHD80AbstractType(SHD80AbstractType other) { + field_1_value = other.field_1_value; } protected void fillFields( byte[] data, int offset ) @@ -189,4 +181,4 @@ public abstract class SHD80AbstractType return ( byte )ipat.getValue(field_1_value); } -} // END OF CLASS +} diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java index 4865f676f6..c31f5a9a93 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/SHDAbstractType.java @@ -25,32 +25,24 @@ import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; /** - * The Shd structure specifies the colors and pattern that are used for background shading.

    Class - and - fields descriptions are quoted from Word (.doc) Binary File Format by Microsoft Corporation - - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author Sergey Vladimirov; according to Word (.doc) Binary File Format by Microsoft Corporation. - + * The Shd structure specifies the colors and pattern that are used for background shading. */ @Internal -public abstract class SHDAbstractType -{ +public abstract class SHDAbstractType { protected Colorref field_1_cvFore; protected Colorref field_2_cvBack; protected int field_3_ipat; - protected SHDAbstractType() - { - this.field_1_cvFore = new Colorref(); - this.field_2_cvBack = new Colorref(); + protected SHDAbstractType() { + field_1_cvFore = new Colorref(); + field_2_cvBack = new Colorref(); + } + + protected SHDAbstractType(SHDAbstractType other) { + field_1_cvFore = (other.field_1_cvFore == null) ? null : other.field_1_cvFore.copy(); + field_2_cvBack = (other.field_2_cvBack == null) ? null : other.field_2_cvBack.copy(); + field_3_ipat = other.field_3_ipat; } protected void fillFields( byte[] data, int offset ) @@ -175,4 +167,4 @@ public abstract class SHDAbstractType this.field_3_ipat = field_3_ipat; } -} // END OF CLASS +} diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TAPAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TAPAbstractType.java index d295f420f9..ffed2cbcc1 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TAPAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TAPAbstractType.java @@ -19,6 +19,7 @@ package org.apache.poi.hwpf.model.types; import java.util.Arrays; +import java.util.stream.Stream; import org.apache.poi.hwpf.usermodel.BorderCode; import org.apache.poi.hwpf.usermodel.ShadingDescriptor; @@ -28,21 +29,39 @@ import org.apache.poi.util.BitField; import org.apache.poi.util.Internal; /** - * Table Properties. Properties descriptions quoted from official 97-2007 binary file - format specification. - - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author S. Ryan Ackley + * Table Properties */ +@SuppressWarnings("unused") @Internal -public abstract class TAPAbstractType -{ +public abstract class TAPAbstractType { + private static final BitField fAutofit = new BitField(0x00000001); + private static final BitField fKeepFollow = new BitField(0x00000002); + private static final BitField ftsWidth = new BitField(0x0000001c); + private static final BitField ftsWidthIndent = new BitField(0x000000e0); + private static final BitField ftsWidthBefore = new BitField(0x00000700); + private static final BitField ftsWidthAfter = new BitField(0x00003800); + private static final BitField fNeverBeenAutofit = new BitField(0x00004000); + private static final BitField fInvalAutofit = new BitField(0x00008000); + private static final BitField widthAndFitsFlags_empty1 = new BitField(0x00070000); + private static final BitField fVert = new BitField(0x00080000); + private static final BitField pcVert = new BitField(0x00300000); + private static final BitField pcHorz = new BitField(0x00c00000); + private static final BitField widthAndFitsFlags_empty2 = new BitField(0xff000000); + + private static final BitField fFirstRow = new BitField(0x0001); + private static final BitField fLastRow = new BitField(0x0002); + private static final BitField fOutline = new BitField(0x0004); + private static final BitField fOrigWordTableRules = new BitField(0x0008); + private static final BitField fCellSpacing = new BitField(0x0010); + private static final BitField grpfTap_unused = new BitField(0xffe0); + + private static final BitField fWrapToWwd = new BitField(0x0001); + private static final BitField fNotPageView = new BitField(0x0002); + private static final BitField viewFlags_unused1 = new BitField(0x0004); + private static final BitField fWebView = new BitField(0x0008); + private static final BitField fAdjusted = new BitField(0x0010); + private static final BitField viewFlags_unused2 = new BitField(0xffe0); + protected short field_1_istd; protected short field_2_jc; @@ -57,19 +76,6 @@ public abstract class TAPAbstractType protected short field_11_wWidthBefore; protected short field_12_wWidthAfter; protected int field_13_widthAndFitsFlags; - /**/private static BitField fAutofit = new BitField(0x00000001); - /**/private static BitField fKeepFollow = new BitField(0x00000002); - /**/private static BitField ftsWidth = new BitField(0x0000001c); - /**/private static BitField ftsWidthIndent = new BitField(0x000000e0); - /**/private static BitField ftsWidthBefore = new BitField(0x00000700); - /**/private static BitField ftsWidthAfter = new BitField(0x00003800); - /**/private static BitField fNeverBeenAutofit = new BitField(0x00004000); - /**/private static BitField fInvalAutofit = new BitField(0x00008000); - /**/private static BitField widthAndFitsFlags_empty1 = new BitField(0x00070000); - /**/private static BitField fVert = new BitField(0x00080000); - /**/private static BitField pcVert = new BitField(0x00300000); - /**/private static BitField pcHorz = new BitField(0x00c00000); - /**/private static BitField widthAndFitsFlags_empty2 = new BitField(0xff000000); protected int field_14_dxaAbs; protected int field_15_dyaAbs; protected int field_16_dxaFromText; @@ -82,12 +88,6 @@ public abstract class TAPAbstractType protected byte field_23_fSpare; protected int field_24_grpfTap; protected int field_25_internalFlags; - /**/private static BitField fFirstRow = new BitField(0x0001); - /**/private static BitField fLastRow = new BitField(0x0002); - /**/private static BitField fOutline = new BitField(0x0004); - /**/private static BitField fOrigWordTableRules = new BitField(0x0008); - /**/private static BitField fCellSpacing = new BitField(0x0010); - /**/private static BitField grpfTap_unused = new BitField(0xffe0); protected short field_26_itcMac; protected int field_27_dxaAdjust; protected int field_28_dxaWebView; @@ -95,12 +95,6 @@ public abstract class TAPAbstractType protected int field_30_dxaColWidthWwd; protected short field_31_pctWwd; protected int field_32_viewFlags; - /**/private static BitField fWrapToWwd = new BitField(0x0001); - /**/private static BitField fNotPageView = new BitField(0x0002); - /**/private static BitField viewFlags_unused1 = new BitField(0x0004); - /**/private static BitField fWebView = new BitField(0x0008); - /**/private static BitField fAdjusted = new BitField(0x0010); - /**/private static BitField viewFlags_unused2 = new BitField(0xffe0); protected short[] field_33_rgdxaCenter; protected short[] field_34_rgdxaCenterPrint; protected ShadingDescriptor field_35_shdTable; @@ -151,8 +145,7 @@ public abstract class TAPAbstractType protected BorderCode field_80_rgbrcInsideDefault_0; protected BorderCode field_81_rgbrcInsideDefault_1; - protected TAPAbstractType() - { + protected TAPAbstractType() { this.field_8_tlp = new TableAutoformatLookSpecifier(); this.field_33_rgdxaCenter = new short[0]; this.field_34_rgdxaCenterPrint = new short[0]; @@ -169,6 +162,91 @@ public abstract class TAPAbstractType this.field_81_rgbrcInsideDefault_1 = new BorderCode(); } + protected TAPAbstractType(TAPAbstractType other) { + field_1_istd = other.field_1_istd; + field_2_jc = other.field_2_jc; + field_3_dxaGapHalf = other.field_3_dxaGapHalf; + field_4_dyaRowHeight = other.field_4_dyaRowHeight; + field_5_fCantSplit = other.field_5_fCantSplit; + field_6_fCantSplit90 = other.field_6_fCantSplit90; + field_7_fTableHeader = other.field_7_fTableHeader; + field_8_tlp = (other.field_8_tlp == null) ? null : other.field_8_tlp.copy(); + field_9_wWidth = other.field_9_wWidth; + field_10_wWidthIndent = other.field_10_wWidthIndent; + field_11_wWidthBefore = other.field_11_wWidthBefore; + field_12_wWidthAfter = other.field_12_wWidthAfter; + field_13_widthAndFitsFlags = other.field_13_widthAndFitsFlags; + field_14_dxaAbs = other.field_14_dxaAbs; + field_15_dyaAbs = other.field_15_dyaAbs; + field_16_dxaFromText = other.field_16_dxaFromText; + field_17_dyaFromText = other.field_17_dyaFromText; + field_18_dxaFromTextRight = other.field_18_dxaFromTextRight; + field_19_dyaFromTextBottom = other.field_19_dyaFromTextBottom; + field_20_fBiDi = other.field_20_fBiDi; + field_21_fRTL = other.field_21_fRTL; + field_22_fNoAllowOverlap = other.field_22_fNoAllowOverlap; + field_23_fSpare = other.field_23_fSpare; + field_24_grpfTap = other.field_24_grpfTap; + field_25_internalFlags = other.field_25_internalFlags; + field_26_itcMac = other.field_26_itcMac; + field_27_dxaAdjust = other.field_27_dxaAdjust; + field_28_dxaWebView = other.field_28_dxaWebView; + field_29_dxaRTEWrapWidth = other.field_29_dxaRTEWrapWidth; + field_30_dxaColWidthWwd = other.field_30_dxaColWidthWwd; + field_31_pctWwd = other.field_31_pctWwd; + field_32_viewFlags = other.field_32_viewFlags; + field_33_rgdxaCenter = (other.field_33_rgdxaCenter == null) ? null : other.field_33_rgdxaCenter.clone(); + field_34_rgdxaCenterPrint = (other.field_34_rgdxaCenterPrint == null) ? null : other.field_34_rgdxaCenterPrint.clone(); + field_35_shdTable = (other.field_35_shdTable == null) ? null : other.field_35_shdTable.copy(); + field_36_brcBottom = (other.field_36_brcBottom == null) ? null : other.field_36_brcBottom.copy(); + field_37_brcTop = (other.field_37_brcTop == null) ? null : other.field_37_brcTop.copy(); + field_38_brcLeft = (other.field_38_brcLeft == null) ? null : other.field_38_brcLeft.copy(); + field_39_brcRight = (other.field_39_brcRight == null) ? null : other.field_39_brcRight.copy(); + field_40_brcVertical = (other.field_40_brcVertical == null) ? null : other.field_40_brcVertical.copy(); + field_41_brcHorizontal = (other.field_41_brcHorizontal == null) ? null : other.field_41_brcHorizontal.copy(); + field_42_wCellPaddingDefaultTop = other.field_42_wCellPaddingDefaultTop; + field_43_wCellPaddingDefaultLeft = other.field_43_wCellPaddingDefaultLeft; + field_44_wCellPaddingDefaultBottom = other.field_44_wCellPaddingDefaultBottom; + field_45_wCellPaddingDefaultRight = other.field_45_wCellPaddingDefaultRight; + field_46_ftsCellPaddingDefaultTop = other.field_46_ftsCellPaddingDefaultTop; + field_47_ftsCellPaddingDefaultLeft = other.field_47_ftsCellPaddingDefaultLeft; + field_48_ftsCellPaddingDefaultBottom = other.field_48_ftsCellPaddingDefaultBottom; + field_49_ftsCellPaddingDefaultRight = other.field_49_ftsCellPaddingDefaultRight; + field_50_wCellSpacingDefaultTop = other.field_50_wCellSpacingDefaultTop; + field_51_wCellSpacingDefaultLeft = other.field_51_wCellSpacingDefaultLeft; + field_52_wCellSpacingDefaultBottom = other.field_52_wCellSpacingDefaultBottom; + field_53_wCellSpacingDefaultRight = other.field_53_wCellSpacingDefaultRight; + field_54_ftsCellSpacingDefaultTop = other.field_54_ftsCellSpacingDefaultTop; + field_55_ftsCellSpacingDefaultLeft = other.field_55_ftsCellSpacingDefaultLeft; + field_56_ftsCellSpacingDefaultBottom = other.field_56_ftsCellSpacingDefaultBottom; + field_57_ftsCellSpacingDefaultRight = other.field_57_ftsCellSpacingDefaultRight; + field_58_wCellPaddingOuterTop = other.field_58_wCellPaddingOuterTop; + field_59_wCellPaddingOuterLeft = other.field_59_wCellPaddingOuterLeft; + field_60_wCellPaddingOuterBottom = other.field_60_wCellPaddingOuterBottom; + field_61_wCellPaddingOuterRight = other.field_61_wCellPaddingOuterRight; + field_62_ftsCellPaddingOuterTop = other.field_62_ftsCellPaddingOuterTop; + field_63_ftsCellPaddingOuterLeft = other.field_63_ftsCellPaddingOuterLeft; + field_64_ftsCellPaddingOuterBottom = other.field_64_ftsCellPaddingOuterBottom; + field_65_ftsCellPaddingOuterRight = other.field_65_ftsCellPaddingOuterRight; + field_66_wCellSpacingOuterTop = other.field_66_wCellSpacingOuterTop; + field_67_wCellSpacingOuterLeft = other.field_67_wCellSpacingOuterLeft; + field_68_wCellSpacingOuterBottom = other.field_68_wCellSpacingOuterBottom; + field_69_wCellSpacingOuterRight = other.field_69_wCellSpacingOuterRight; + field_70_ftsCellSpacingOuterTop = other.field_70_ftsCellSpacingOuterTop; + field_71_ftsCellSpacingOuterLeft = other.field_71_ftsCellSpacingOuterLeft; + field_72_ftsCellSpacingOuterBottom = other.field_72_ftsCellSpacingOuterBottom; + field_73_ftsCellSpacingOuterRight = other.field_73_ftsCellSpacingOuterRight; + field_74_rgtc = (other.field_74_rgtc == null) ? null + : Stream.of(other.field_74_rgtc).map(TableCellDescriptor::copy).toArray(TableCellDescriptor[]::new); + field_75_rgshd = (other.field_75_rgshd == null) ? null + : Stream.of(other.field_75_rgshd).map(ShadingDescriptor::copy).toArray(ShadingDescriptor[]::new); + field_76_fPropRMark = other.field_76_fPropRMark; + field_77_fHasOldProps = other.field_77_fHasOldProps; + field_78_cHorzBands = other.field_78_cHorzBands; + field_79_cVertBands = other.field_79_cVertBands; + field_80_rgbrcInsideDefault_0 = (other.field_80_rgbrcInsideDefault_0 == null) ? null : other.field_80_rgbrcInsideDefault_0.copy(); + field_81_rgbrcInsideDefault_1 = (other.field_81_rgbrcInsideDefault_1 == null) ? null : other.field_81_rgbrcInsideDefault_1.copy(); + } public String toString() { diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TBDAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TBDAbstractType.java index 2d11178d71..f167ebf398 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TBDAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TBDAbstractType.java @@ -22,33 +22,23 @@ import org.apache.poi.util.BitField; import org.apache.poi.util.Internal; /** - * The TBD is a substructure of the PAP.

    Class and fields descriptions are quoted from - Microsoft Office Word 97-2007 Binary File Format - - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary File Format - Specification [*.doc] - + * The TBD is a substructure of the PAP. */ @Internal -public abstract class TBDAbstractType -{ +public abstract class TBDAbstractType { + private static final BitField jc = new BitField(0x07); + private static final BitField tlc = new BitField(0x38); + private static final BitField reserved = new BitField(0xc0); protected byte field_1_value; - /**/private static BitField jc = new BitField(0x07); - /**/private static BitField tlc = new BitField(0x38); - /**/private static BitField reserved = new BitField(0xc0); - protected TBDAbstractType() - { + protected TBDAbstractType() { } + + protected TBDAbstractType(TBDAbstractType other) { + field_1_value = other.field_1_value; } + protected void fillFields( byte[] data, int offset ) { field_1_value = data[ 0x0 + offset ]; @@ -141,7 +131,7 @@ public abstract class TBDAbstractType /** * Sets the reserved field value. - * + * */ @Internal public void setReserved( byte value ) @@ -150,7 +140,7 @@ public abstract class TBDAbstractType } /** - * + * * @return the reserved field value. */ @Internal diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TCAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TCAbstractType.java index a87165316b..e02d6a1939 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TCAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TCAbstractType.java @@ -18,39 +18,30 @@ package org.apache.poi.hwpf.model.types; -import org.apache.poi.hwpf.usermodel.*; -import org.apache.poi.util.*; +import org.apache.poi.hwpf.usermodel.BorderCode; +import org.apache.poi.hwpf.usermodel.ShadingDescriptor; +import org.apache.poi.util.BitField; +import org.apache.poi.util.Internal; /** * Table Cell Descriptor. - *

    - * NOTE: This source is automatically generated please do not modify this file. Either subclass or - * remove the record in src/types/definitions. - *

    - * This class is internal. It content or properties may change without notice - * due to changes in our knowledge of internal Microsoft Word binary structures. - - * @author S. Ryan Ackley. Field descriptions are quoted from Microsoft Office Word 97-2007 Binary - File Format (.doc) Specification - */ @Internal -public abstract class TCAbstractType -{ +public abstract class TCAbstractType { + private static final BitField fFirstMerged = new BitField(0x0001); + private static final BitField fMerged = new BitField(0x0002); + private static final BitField fVertical = new BitField(0x0004); + private static final BitField fBackward = new BitField(0x0008); + private static final BitField fRotateFont = new BitField(0x0010); + private static final BitField fVertMerge = new BitField(0x0020); + private static final BitField fVertRestart = new BitField(0x0040); + private static final BitField vertAlign = new BitField(0x0180); + private static final BitField ftsWidth = new BitField(0x0E00); + private static final BitField fFitText = new BitField(0x1000); + private static final BitField fNoWrap = new BitField(0x2000); + private static final BitField fUnused = new BitField(0xC000); protected short field_1_rgf; - /**/private static BitField fFirstMerged = new BitField(0x0001); - /**/private static BitField fMerged = new BitField(0x0002); - /**/private static BitField fVertical = new BitField(0x0004); - /**/private static BitField fBackward = new BitField(0x0008); - /**/private static BitField fRotateFont = new BitField(0x0010); - /**/private static BitField fVertMerge = new BitField(0x0020); - /**/private static BitField fVertRestart = new BitField(0x0040); - /**/private static BitField vertAlign = new BitField(0x0180); - /**/private static BitField ftsWidth = new BitField(0x0E00); - /**/private static BitField fFitText = new BitField(0x1000); - /**/private static BitField fNoWrap = new BitField(0x2000); - /**/private static BitField fUnused = new BitField(0xC000); protected short field_2_wWidth; protected ShadingDescriptor field_3_shd; protected short field_4_wCellPaddingLeft; @@ -74,8 +65,7 @@ public abstract class TCAbstractType protected BorderCode field_22_brcBottom; protected BorderCode field_23_brcRight; - protected TCAbstractType() - { + protected TCAbstractType() { this.field_3_shd = new ShadingDescriptor(); this.field_20_brcTop = new BorderCode(); this.field_21_brcLeft = new BorderCode(); @@ -83,6 +73,31 @@ public abstract class TCAbstractType this.field_23_brcRight = new BorderCode(); } + protected TCAbstractType(TCAbstractType other) { + field_1_rgf = other.field_1_rgf; + field_2_wWidth = other.field_2_wWidth; + field_3_shd = (other.field_3_shd == null) ? null : other.field_3_shd.copy(); + field_4_wCellPaddingLeft = other.field_4_wCellPaddingLeft; + field_5_wCellPaddingTop = other.field_5_wCellPaddingTop; + field_6_wCellPaddingBottom = other.field_6_wCellPaddingBottom; + field_7_wCellPaddingRight = other.field_7_wCellPaddingRight; + field_8_ftsCellPaddingLeft = other.field_8_ftsCellPaddingLeft; + field_9_ftsCellPaddingTop = other.field_9_ftsCellPaddingTop; + field_10_ftsCellPaddingBottom = other.field_10_ftsCellPaddingBottom; + field_11_ftsCellPaddingRight = other.field_11_ftsCellPaddingRight; + field_12_wCellSpacingLeft = other.field_12_wCellSpacingLeft; + field_13_wCellSpacingTop = other.field_13_wCellSpacingTop; + field_14_wCellSpacingBottom = other.field_14_wCellSpacingBottom; + field_15_wCellSpacingRight = other.field_15_wCellSpacingRight; + field_16_ftsCellSpacingLeft = other.field_16_ftsCellSpacingLeft; + field_17_ftsCellSpacingTop = other.field_17_ftsCellSpacingTop; + field_18_ftsCellSpacingBottom = other.field_18_ftsCellSpacingBottom; + field_19_ftsCellSpacingRight = other.field_19_ftsCellSpacingRight; + field_20_brcTop = (other.field_20_brcTop == null) ? null : other.field_20_brcTop.copy(); + field_21_brcLeft = (other.field_21_brcLeft == null) ? null : other.field_21_brcLeft.copy(); + field_22_brcBottom = (other.field_22_brcBottom == null) ? null : other.field_22_brcBottom.copy(); + field_23_brcRight = (other.field_23_brcRight == null) ? null : other.field_23_brcRight.copy(); + } public String toString() { diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TLPAbstractType.java b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TLPAbstractType.java index 08a2caceef..6d0e426989 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/types/TLPAbstractType.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/types/TLPAbstractType.java @@ -23,22 +23,10 @@ import org.apache.poi.util.LittleEndian; /** * Table Autoformat Look sPecifier (TLP). - *

    - * Class and fields descriptions are quoted from Microsoft Office Word 97-2007 - * Binary File Format - * - * NOTE: This source is automatically generated please do not modify this file. - * Either subclass or remove the record in src/records/definitions. - * - * @author Sergey Vladimirov; according to Microsoft Office Word 97-2007 Binary - * File Format Specification [*.doc] */ +@SuppressWarnings("unused") @Internal -public abstract class TLPAbstractType -{ - - protected short field_1_itl; - protected byte field_2_tlp_flags; +public abstract class TLPAbstractType { private static final BitField fBorders = new BitField( 0x0001 ); private static final BitField fShading = new BitField( 0x0002 ); private static final BitField fFont = new BitField( 0x0004 ); @@ -47,9 +35,14 @@ public abstract class TLPAbstractType private static final BitField fHdrRows = new BitField( 0x0020 ); private static final BitField fLastRow = new BitField( 0x0040 ); - public TLPAbstractType() - { + protected short field_1_itl; + protected byte field_2_tlp_flags; + public TLPAbstractType() {} + + public TLPAbstractType(TLPAbstractType other) { + field_1_itl = other.field_1_itl; + field_2_tlp_flags = other.field_2_tlp_flags; } protected void fillFields( byte[] data, int offset ) @@ -132,7 +125,7 @@ public abstract class TLPAbstractType /** * When == 1, use the border properties from the selected table look - * + * * @return the fBorders field value. */ public boolean isFBorders() @@ -154,7 +147,7 @@ public abstract class TLPAbstractType /** * When == 1, use the shading properties from the selected table look - * + * * @return the fShading field value. */ public boolean isFShading() @@ -175,7 +168,7 @@ public abstract class TLPAbstractType /** * When == 1, use the font from the selected table look - * + * * @return the fFont field value. */ public boolean isFFont() @@ -196,7 +189,7 @@ public abstract class TLPAbstractType /** * When == 1, use the color from the selected table look - * + * * @return the fColor field value. */ public boolean isFColor() @@ -218,7 +211,7 @@ public abstract class TLPAbstractType /** * When == 1, do best fit from the selected table look - * + * * @return the fBestFit field value. */ public boolean isFBestFit() @@ -241,7 +234,7 @@ public abstract class TLPAbstractType /** * When == 1, apply properties from the selected table look to the header * rows in the table - * + * * @return the fHdrRows field value. */ public boolean isFHdrRows() @@ -264,7 +257,7 @@ public abstract class TLPAbstractType /** * When == 1, apply properties from the selected table look to the last row * in the table - * + * * @return the fLastRow field value. */ public boolean isFLastRow() diff --git a/src/scratchpad/src/org/apache/poi/hwpf/sprm/ParagraphSprmUncompressor.java b/src/scratchpad/src/org/apache/poi/hwpf/sprm/ParagraphSprmUncompressor.java index 768ad5ffd2..3fec02b9b5 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/sprm/ParagraphSprmUncompressor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/sprm/ParagraphSprmUncompressor.java @@ -51,15 +51,7 @@ public final class ParagraphSprmUncompressor byte[] grpprl, int offset) { - ParagraphProperties newProperties = null; - try - { - newProperties = (ParagraphProperties) parent.clone(); - } - catch (CloneNotSupportedException cnse) - { - throw new RuntimeException("There is no way this exception should happen!!"); - } + ParagraphProperties newProperties = parent.copy(); SprmIterator sprmIt = new SprmIterator(grpprl, offset); while (sprmIt.hasNext()) @@ -338,8 +330,8 @@ public final class ParagraphSprmUncompressor newPAP.setDttmPropRMark (new DateAndTime(varParam, offset + 3)); break; case 0x40: - // This condition commented out, as Word seems to set outline levels even for - // paragraph with other styles than Heading 1..9, even though specification + // This condition commented out, as Word seems to set outline levels even for + // paragraph with other styles than Heading 1..9, even though specification // does not say so. See bug 49820 for discussion. //if (newPAP.getIstd () < 1 && newPAP.getIstd () > 9) { @@ -347,7 +339,7 @@ public final class ParagraphSprmUncompressor } break; case 0x41: - // sprmPFBiDi + // sprmPFBiDi newPAP.setFBiDi(sprm.getOperand() != 0); break; case 0x43: @@ -413,11 +405,11 @@ public final class ParagraphSprmUncompressor newPAP.setDxaLeft1( sprm.getOperand() ); break; case 0x61: - // sprmPJc + // sprmPJc newPAP.setJustificationLogical((byte) sprm.getOperand()); break; case 0x67: - // sprmPRsid -- 0x6467 + // sprmPRsid -- 0x6467 newPAP.setRsid( sprm.getOperand() ); break; default: @@ -458,7 +450,7 @@ public final class ParagraphSprmUncompressor tabPositions = new int[tabMap.size()]; tabDescriptors = new TabDescriptor[tabPositions.length]; - + List list = new ArrayList<>(tabMap.keySet()); Collections.sort(list); diff --git a/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmBuffer.java b/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmBuffer.java index c79c1fdd8a..be028da98e 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmBuffer.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/sprm/SprmBuffer.java @@ -19,12 +19,14 @@ package org.apache.poi.hwpf.sprm; import java.util.Arrays; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.IOUtils; import org.apache.poi.util.Internal; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; @Internal -public final class SprmBuffer implements Cloneable { +public final class SprmBuffer implements Duplicatable { //arbitrarily selected; may need to increase private static final int MAX_RECORD_LENGTH = 100_000; @@ -35,6 +37,13 @@ public final class SprmBuffer implements Cloneable { private final int _sprmsStartOffset; + public SprmBuffer(SprmBuffer other) { + _buf = (other._buf == null) ? null : other._buf.clone(); + _istd = other._istd; + _offset = other._offset; + _sprmsStartOffset = other._sprmsStartOffset; + } + public SprmBuffer(byte[] buf, boolean istd, int sprmsStartOffset) { _offset = buf.length; _buf = buf; @@ -97,15 +106,17 @@ public final class SprmBuffer implements Cloneable { _offset += grpprl.length - offset; } + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") public SprmBuffer clone() { - try { - SprmBuffer retVal = (SprmBuffer) super.clone(); - retVal._buf = new byte[_buf.length]; - System.arraycopy(_buf, 0, retVal._buf, 0, _buf.length); - return retVal; - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } + return copy(); + } + + @Override + public SprmBuffer copy() { + return new SprmBuffer(this); } private void ensureCapacity(int addition) { @@ -215,4 +226,6 @@ public final class SprmBuffer implements Cloneable { } return stringBuilder.toString(); } + + } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BookmarksImpl.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BookmarksImpl.java index 9c0652f378..7c9d7ad9d7 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BookmarksImpl.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BookmarksImpl.java @@ -243,7 +243,7 @@ public class BookmarksImpl implements Bookmarks indices[counter++] = entry.getKey().intValue(); List updated = new ArrayList<>( entry.getValue()); - updated.sort(PropertyNode.EndComparator.instance); + updated.sort(PropertyNode.EndComparator); entry.setValue( updated ); } Arrays.sort( indices ); diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BorderCode.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BorderCode.java index 595dd532a6..4895196f42 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BorderCode.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/BorderCode.java @@ -17,31 +17,36 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * Mapping class for BRC80 structure (Border Code for Word 97) - * - *

    Comments are copied out from the binary format specification. */ -public final class BorderCode implements Cloneable { - - public static final int SIZE = 4; - - private short _info; +public final class BorderCode implements Duplicatable { + + public static final int SIZE = 4; + private static final BitField _dptLineWidth = BitFieldFactory.getInstance(0x00ff); private static final BitField _brcType = BitFieldFactory.getInstance(0xff00); - - private short _info2; + private static final BitField _ico = BitFieldFactory.getInstance(0x00ff); private static final BitField _dptSpace = BitFieldFactory.getInstance(0x1f00); private static final BitField _fShadow = BitFieldFactory.getInstance(0x2000); private static final BitField _fFrame = BitFieldFactory.getInstance(0x4000); - - public BorderCode() - { + + private short _info; + private short _info2; + + + public BorderCode() {} + + public BorderCode(BorderCode other) { + _info = other._info; + _info2 = other._info2; } public BorderCode(byte[] buf, int offset) @@ -81,20 +86,27 @@ public final class BorderCode implements Cloneable { assert false : "hashCode not designed"; return 42; // any arbitrary constant will do } - - public Object clone() - throws CloneNotSupportedException - { - return super.clone(); + + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public BorderCode clone() { + return copy(); } - + + @Override + public BorderCode copy() { + return new BorderCode(this); + } + /** * Width of a single line in 1/8 pt, max of 32 pt. */ public int getLineWidth() { return _dptLineWidth.getShortValue(_info); } - + /** * @param lineWidth the width of the line to set */ @@ -136,11 +148,11 @@ public final class BorderCode implements Cloneable { public int getBorderType() { return _brcType.getShortValue(_info); } - + public void setBorderType(int borderType) { _info = _brcType.setShortValue(_info, (short)borderType); } - + /** * Color: *

      @@ -166,26 +178,26 @@ public final class BorderCode implements Cloneable { public short getColor() { return _ico.getShortValue(_info2); } - + public void setColor(short color) { _info2 = _ico.setShortValue(_info2, color); } - + /** * Width of space to maintain between border and text within border. - * + * *

      Must be 0 when BRC is a substructure of TC. - * + * *

      Stored in points. */ public int getSpace() { return _dptSpace.getShortValue(_info2); } - + public void setSpace(int space) { _info2 = (short)_dptSpace.setValue(_info2, space); } - + /** * When true, border is drawn with shadow * Must be false when BRC is a substructure of the TC. @@ -193,18 +205,18 @@ public final class BorderCode implements Cloneable { public boolean isShadow() { return _fShadow.getValue(_info2) != 0; } - + public void setShadow(boolean shadow) { _info2 = (short)_fShadow.setValue(_info2, shadow ? 1 : 0); } - + /** * Don't reverse the border. */ public boolean isFrame() { return _fFrame.getValue(_info2) != 0; } - + public void setFrame(boolean frame) { _info2 = (short)_fFrame.setValue(_info2, frame ? 1 : 0); } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterProperties.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterProperties.java index 3c5e25fb6b..3c444cd52c 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterProperties.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterProperties.java @@ -17,80 +17,81 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.Colorref; import org.apache.poi.hwpf.model.types.CHPAbstractType; +import org.apache.poi.util.Removal; -/** - * @author Ryan Ackley - */ -public final class CharacterProperties - extends CHPAbstractType implements Cloneable -{ - public final static short SPRM_FRMARKDEL = (short)0x0800; - public final static short SPRM_FRMARK = 0x0801; - public final static short SPRM_FFLDVANISH = 0x0802; - public final static short SPRM_PICLOCATION = 0x6A03; - public final static short SPRM_IBSTRMARK = 0x4804; - public final static short SPRM_DTTMRMARK = 0x6805; - public final static short SPRM_FDATA = 0x0806; - public final static short SPRM_SYMBOL = 0x6A09; - public final static short SPRM_FOLE2 = 0x080A; - public final static short SPRM_HIGHLIGHT = 0x2A0C; - public final static short SPRM_OBJLOCATION = 0x680E; - public final static short SPRM_ISTD = 0x4A30; - public final static short SPRM_FBOLD = 0x0835; - public final static short SPRM_FITALIC = 0x0836; - public final static short SPRM_FSTRIKE = 0x0837; - public final static short SPRM_FOUTLINE = 0x0838; - public final static short SPRM_FSHADOW = 0x0839; - public final static short SPRM_FSMALLCAPS = 0x083A; - public final static short SPRM_FCAPS = 0x083B; - public final static short SPRM_FVANISH = 0x083C; - public final static short SPRM_KUL = 0x2A3E; - public final static short SPRM_DXASPACE = (short)0x8840; - public final static short SPRM_LID = 0x4A41; - public final static short SPRM_ICO = 0x2A42; - public final static short SPRM_HPS = 0x4A43; - public final static short SPRM_HPSPOS = 0x4845; - public final static short SPRM_ISS = 0x2A48; - public final static short SPRM_HPSKERN = 0x484B; - public final static short SPRM_YSRI = 0x484E; - public final static short SPRM_RGFTCASCII = 0x4A4F; - public final static short SPRM_RGFTCFAREAST = 0x4A50; - public final static short SPRM_RGFTCNOTFAREAST = 0x4A51; - public final static short SPRM_CHARSCALE = 0x4852; - public final static short SPRM_FDSTRIKE = 0x2A53; - public final static short SPRM_FIMPRINT = 0x0854; - public final static short SPRM_FSPEC = 0x0855; - public final static short SPRM_FOBJ = 0x0856; - public final static short SPRM_PROPRMARK = (short)0xCA57; - public final static short SPRM_FEMBOSS = 0x0858; - public final static short SPRM_SFXTEXT = 0x2859; +@SuppressWarnings("unused") +public final class CharacterProperties extends CHPAbstractType implements Duplicatable { + public static final short SPRM_FRMARKDEL = (short)0x0800; + public static final short SPRM_FRMARK = 0x0801; + public static final short SPRM_FFLDVANISH = 0x0802; + public static final short SPRM_PICLOCATION = 0x6A03; + public static final short SPRM_IBSTRMARK = 0x4804; + public static final short SPRM_DTTMRMARK = 0x6805; + public static final short SPRM_FDATA = 0x0806; + public static final short SPRM_SYMBOL = 0x6A09; + public static final short SPRM_FOLE2 = 0x080A; + public static final short SPRM_HIGHLIGHT = 0x2A0C; + public static final short SPRM_OBJLOCATION = 0x680E; + public static final short SPRM_ISTD = 0x4A30; + public static final short SPRM_FBOLD = 0x0835; + public static final short SPRM_FITALIC = 0x0836; + public static final short SPRM_FSTRIKE = 0x0837; + public static final short SPRM_FOUTLINE = 0x0838; + public static final short SPRM_FSHADOW = 0x0839; + public static final short SPRM_FSMALLCAPS = 0x083A; + public static final short SPRM_FCAPS = 0x083B; + public static final short SPRM_FVANISH = 0x083C; + public static final short SPRM_KUL = 0x2A3E; + public static final short SPRM_DXASPACE = (short)0x8840; + public static final short SPRM_LID = 0x4A41; + public static final short SPRM_ICO = 0x2A42; + public static final short SPRM_HPS = 0x4A43; + public static final short SPRM_HPSPOS = 0x4845; + public static final short SPRM_ISS = 0x2A48; + public static final short SPRM_HPSKERN = 0x484B; + public static final short SPRM_YSRI = 0x484E; + public static final short SPRM_RGFTCASCII = 0x4A4F; + public static final short SPRM_RGFTCFAREAST = 0x4A50; + public static final short SPRM_RGFTCNOTFAREAST = 0x4A51; + public static final short SPRM_CHARSCALE = 0x4852; + public static final short SPRM_FDSTRIKE = 0x2A53; + public static final short SPRM_FIMPRINT = 0x0854; + public static final short SPRM_FSPEC = 0x0855; + public static final short SPRM_FOBJ = 0x0856; + public static final short SPRM_PROPRMARK = (short)0xCA57; + public static final short SPRM_FEMBOSS = 0x0858; + public static final short SPRM_SFXTEXT = 0x2859; /* * Microsoft Office Word 97-2007 Binary File Format (.doc) Specification; * Page 60 of 210 */ - public final static short SPRM_DISPFLDRMARK = (short)0xCA62; - public final static short SPRM_IBSTRMARKDEL = 0x4863; - public final static short SPRM_DTTMRMARKDEL = 0x6864; - public final static short SPRM_BRC = 0x6865; - public final static short SPRM_SHD = 0x4866; - public final static short SPRM_IDSIRMARKDEL = 0x4867; - public final static short SPRM_CPG = 0x486B; - public final static short SPRM_NONFELID = 0x486D; - public final static short SPRM_FELID = 0x486E; - public final static short SPRM_IDCTHINT = 0x286F; + public static final short SPRM_DISPFLDRMARK = (short)0xCA62; + public static final short SPRM_IBSTRMARKDEL = 0x4863; + public static final short SPRM_DTTMRMARKDEL = 0x6864; + public static final short SPRM_BRC = 0x6865; + public static final short SPRM_SHD = 0x4866; + public static final short SPRM_IDSIRMARKDEL = 0x4867; + public static final short SPRM_CPG = 0x486B; + public static final short SPRM_NONFELID = 0x486D; + public static final short SPRM_FELID = 0x486E; + public static final short SPRM_IDCTHINT = 0x286F; /** * change chp.cv */ - public final static short SPRM_CCV = 0x6870; + public static final short SPRM_CCV = 0x6870; - public CharacterProperties() - { + public CharacterProperties() { setFUsePgsuSettings( true ); setXstDispFldRMark( new byte[36] ); } + public CharacterProperties(CharacterProperties other) { + super(other); + } + public boolean isMarkedDeleted() { return isFRMarkDel(); @@ -370,27 +371,16 @@ public final class CharacterProperties setCv( new Colorref( colour24 & 0xFFFFFF ) ); } - public CharacterProperties clone() - { - try - { - CharacterProperties cp = (CharacterProperties) super.clone(); + @Override + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public CharacterProperties clone() { + return copy(); + } - cp.setCv( getCv().clone() ); - cp.setDttmRMark( (DateAndTime) getDttmRMark().clone() ); - cp.setDttmRMarkDel( (DateAndTime) getDttmRMarkDel().clone() ); - cp.setDttmPropRMark( (DateAndTime) getDttmPropRMark().clone() ); - cp.setDttmDispFldRMark( (DateAndTime) getDttmDispFldRMark().clone() ); - cp.setXstDispFldRMark( getXstDispFldRMark().clone() ); - cp.setShd( getShd().clone() ); - cp.setBrc( (BorderCode) getBrc().clone() ); - - return cp; - } - catch ( CloneNotSupportedException exc ) - { - throw new UnsupportedOperationException( - "Impossible CloneNotSupportedException occured", exc ); - } + @Override + public CharacterProperties copy() { + return new CharacterProperties(this); } } diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java index a657163e94..3553015364 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/CharacterRun.java @@ -17,6 +17,7 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.HWPFDocument; import org.apache.poi.hwpf.HWPFOldDocument; import org.apache.poi.hwpf.model.CHPX; @@ -25,63 +26,62 @@ import org.apache.poi.hwpf.model.Ffn; import org.apache.poi.hwpf.model.NilPICFAndBinData; import org.apache.poi.hwpf.model.StyleSheet; import org.apache.poi.hwpf.sprm.SprmBuffer; +import org.apache.poi.util.Removal; /** * This class represents a run of text that share common properties. */ -public final class CharacterRun extends Range - implements Cloneable, org.apache.poi.wp.usermodel.CharacterRun -{ - public final static short SPRM_FRMARKDEL = (short)0x0800; - public final static short SPRM_FRMARK = 0x0801; - public final static short SPRM_FFLDVANISH = 0x0802; - public final static short SPRM_PICLOCATION = 0x6A03; - public final static short SPRM_IBSTRMARK = 0x4804; - public final static short SPRM_DTTMRMARK = 0x6805; - public final static short SPRM_FDATA = 0x0806; - public final static short SPRM_SYMBOL = 0x6A09; - public final static short SPRM_FOLE2 = 0x080A; - public final static short SPRM_HIGHLIGHT = 0x2A0C; - public final static short SPRM_OBJLOCATION = 0x680E; - public final static short SPRM_ISTD = 0x4A30; - public final static short SPRM_FBOLD = 0x0835; - public final static short SPRM_FITALIC = 0x0836; - public final static short SPRM_FSTRIKE = 0x0837; - public final static short SPRM_FOUTLINE = 0x0838; - public final static short SPRM_FSHADOW = 0x0839; - public final static short SPRM_FSMALLCAPS = 0x083A; - public final static short SPRM_FCAPS = 0x083B; - public final static short SPRM_FVANISH = 0x083C; - public final static short SPRM_KUL = 0x2A3E; - public final static short SPRM_DXASPACE = (short)0x8840; - public final static short SPRM_LID = 0x4A41; - public final static short SPRM_ICO = 0x2A42; - public final static short SPRM_HPS = 0x4A43; - public final static short SPRM_HPSPOS = 0x4845; - public final static short SPRM_ISS = 0x2A48; - public final static short SPRM_HPSKERN = 0x484B; - public final static short SPRM_YSRI = 0x484E; - public final static short SPRM_RGFTCASCII = 0x4A4F; - public final static short SPRM_RGFTCFAREAST = 0x4A50; - public final static short SPRM_RGFTCNOTFAREAST = 0x4A51; - public final static short SPRM_CHARSCALE = 0x4852; - public final static short SPRM_FDSTRIKE = 0x2A53; - public final static short SPRM_FIMPRINT = 0x0854; - public final static short SPRM_FSPEC = 0x0855; - public final static short SPRM_FOBJ = 0x0856; - public final static short SPRM_PROPRMARK = (short)0xCA57; - public final static short SPRM_FEMBOSS = 0x0858; - public final static short SPRM_SFXTEXT = 0x2859; - public final static short SPRM_DISPFLDRMARK = (short)0xCA62; - public final static short SPRM_IBSTRMARKDEL = 0x4863; - public final static short SPRM_DTTMRMARKDEL = 0x6864; - public final static short SPRM_BRC = 0x6865; - public final static short SPRM_SHD = 0x4866; - public final static short SPRM_IDSIRMARKDEL = 0x4867; - public final static short SPRM_CPG = 0x486B; - public final static short SPRM_NONFELID = 0x486D; - public final static short SPRM_FELID = 0x486E; - public final static short SPRM_IDCTHINT = 0x286F; +public final class CharacterRun extends Range implements Duplicatable, org.apache.poi.wp.usermodel.CharacterRun { + public static final short SPRM_FRMARKDEL = (short)0x0800; + public static final short SPRM_FRMARK = 0x0801; + public static final short SPRM_FFLDVANISH = 0x0802; + public static final short SPRM_PICLOCATION = 0x6A03; + public static final short SPRM_IBSTRMARK = 0x4804; + public static final short SPRM_DTTMRMARK = 0x6805; + public static final short SPRM_FDATA = 0x0806; + public static final short SPRM_SYMBOL = 0x6A09; + public static final short SPRM_FOLE2 = 0x080A; + public static final short SPRM_HIGHLIGHT = 0x2A0C; + public static final short SPRM_OBJLOCATION = 0x680E; + public static final short SPRM_ISTD = 0x4A30; + public static final short SPRM_FBOLD = 0x0835; + public static final short SPRM_FITALIC = 0x0836; + public static final short SPRM_FSTRIKE = 0x0837; + public static final short SPRM_FOUTLINE = 0x0838; + public static final short SPRM_FSHADOW = 0x0839; + public static final short SPRM_FSMALLCAPS = 0x083A; + public static final short SPRM_FCAPS = 0x083B; + public static final short SPRM_FVANISH = 0x083C; + public static final short SPRM_KUL = 0x2A3E; + public static final short SPRM_DXASPACE = (short)0x8840; + public static final short SPRM_LID = 0x4A41; + public static final short SPRM_ICO = 0x2A42; + public static final short SPRM_HPS = 0x4A43; + public static final short SPRM_HPSPOS = 0x4845; + public static final short SPRM_ISS = 0x2A48; + public static final short SPRM_HPSKERN = 0x484B; + public static final short SPRM_YSRI = 0x484E; + public static final short SPRM_RGFTCASCII = 0x4A4F; + public static final short SPRM_RGFTCFAREAST = 0x4A50; + public static final short SPRM_RGFTCNOTFAREAST = 0x4A51; + public static final short SPRM_CHARSCALE = 0x4852; + public static final short SPRM_FDSTRIKE = 0x2A53; + public static final short SPRM_FIMPRINT = 0x0854; + public static final short SPRM_FSPEC = 0x0855; + public static final short SPRM_FOBJ = 0x0856; + public static final short SPRM_PROPRMARK = (short)0xCA57; + public static final short SPRM_FEMBOSS = 0x0858; + public static final short SPRM_SFXTEXT = 0x2859; + public static final short SPRM_DISPFLDRMARK = (short)0xCA62; + public static final short SPRM_IBSTRMARKDEL = 0x4863; + public static final short SPRM_DTTMRMARKDEL = 0x6864; + public static final short SPRM_BRC = 0x6865; + public static final short SPRM_SHD = 0x4866; + public static final short SPRM_IDSIRMARKDEL = 0x4867; + public static final short SPRM_CPG = 0x486B; + public static final short SPRM_NONFELID = 0x486D; + public static final short SPRM_FELID = 0x486E; + public static final short SPRM_IDCTHINT = 0x286F; protected short _istd; protected SprmBuffer _chpx; @@ -102,6 +102,13 @@ public final class CharacterRun extends Range _istd = istd; } + CharacterRun(CharacterRun other) { + super(other); + _istd = other._istd; + _chpx = (other._chpx == null) ? null : other._chpx.copy(); + _props = (other._props == null) ? null : other._props.copy(); + } + /** * Here for runtime type determination using a switch statement convenient. * @@ -551,23 +558,20 @@ public final class CharacterRun extends Range * Used to create a deep copy of this object. * * @return A deep copy. - * @throws CloneNotSupportedException never */ - public Object clone() - throws CloneNotSupportedException - { - CharacterRun cp = (CharacterRun)super.clone(); - cp._props.setDttmRMark((DateAndTime)_props.getDttmRMark().clone()); - cp._props.setDttmRMarkDel((DateAndTime)_props.getDttmRMarkDel().clone()); - cp._props.setDttmPropRMark((DateAndTime)_props.getDttmPropRMark().clone()); - cp._props.setDttmDispFldRMark((DateAndTime)_props.getDttmDispFldRMark(). - clone()); - cp._props.setXstDispFldRMark(_props.getXstDispFldRMark().clone()); - cp._props.setShd(_props.getShd().clone()); - - return cp; + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public CharacterRun clone() { + return copy(); } - + + @Override + public CharacterRun copy() { + return new CharacterRun(this); + } + /** * Returns true, if the CharacterRun is a special character run containing a symbol, otherwise false. * @@ -582,7 +586,7 @@ public final class CharacterRun extends Range /** * Returns the symbol character, if this is a symbol character run. - * + * * @see #isSymbol() * @throws IllegalStateException If this is not a symbol character run: call {@link #isSymbol()} first. */ @@ -596,7 +600,7 @@ public final class CharacterRun extends Range /** * Returns the symbol font, if this is a symbol character run. Might return null, if the font index is not found in the font table. - * + * * @see #isSymbol() * @throws IllegalStateException If this is not a symbol character run: call {@link #isSymbol()} first. */ @@ -605,7 +609,7 @@ public final class CharacterRun extends Range if (isSymbol()) { if (_doc.getFontTable() == null) return null; - + // Fetch all font names Ffn[] fontNames = _doc.getFontTable().getFontNames(); @@ -617,7 +621,7 @@ public final class CharacterRun extends Range } else throw new IllegalStateException("Not a symbol CharacterRun"); } - + public BorderCode getBorder() { return _props.getBrc(); } @@ -625,7 +629,7 @@ public final class CharacterRun extends Range public int getLanguageCode() { return _props.getLidDefault(); } - + /** *

      Returns the index of the base style which applies to * this Run. Details of the style can be looked up @@ -639,10 +643,10 @@ public final class CharacterRun extends Range public short getStyleIndex() { return _istd; } - + public String toString() { String text = text(); - return "CharacterRun of " + text.length() + " characters - " + text; + return "CharacterRun of " + text.length() + " characters - " + text; } public String[] getDropDownListValues() diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java index cd8572eca9..871ffa3cd2 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DateAndTime.java @@ -19,39 +19,40 @@ package org.apache.poi.hwpf.usermodel; import java.util.Calendar; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LocaleUtil; +import org.apache.poi.util.Removal; /** * This class is used to represent a date and time in a Word document. - * - * @author Ryan Ackley */ -public final class DateAndTime - implements Cloneable -{ +public final class DateAndTime implements Duplicatable { public static final int SIZE = 4; - private short _info; private static final BitField _minutes = BitFieldFactory.getInstance(0x3f); private static final BitField _hours = BitFieldFactory.getInstance(0x7c0); private static final BitField _dom = BitFieldFactory.getInstance(0xf800); - private short _info2; private static final BitField _months = BitFieldFactory.getInstance(0xf); private static final BitField _years = BitFieldFactory.getInstance(0x1ff0); // private static final BitField _weekday = BitFieldFactory.getInstance(0xe000); - public DateAndTime() - { - } + private short _info; + private short _info2; + + public DateAndTime() {} + + public DateAndTime(DateAndTime other) { + _info = other._info; + _info2 = other._info2; + } + + public DateAndTime(byte[] buf, int offset) { + _info = LittleEndian.getShort(buf, offset); + _info2 = LittleEndian.getShort(buf, offset + LittleEndian.SHORT_SIZE); + } - public DateAndTime(byte[] buf, int offset) - { - _info = LittleEndian.getShort(buf, offset); - _info2 = LittleEndian.getShort(buf, offset + LittleEndian.SHORT_SIZE); - } - public Calendar getDate() { // TODO Discover if the timezone is stored somewhere else or not return LocaleUtil.getLocaleCalendar( @@ -83,12 +84,19 @@ public final class DateAndTime assert false : "hashCode not designed"; return 42; // any arbitrary constant will do } - - public Object clone() - throws CloneNotSupportedException - { - return super.clone(); - } + + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public DateAndTime clone() { + return copy(); + } + + @Override + public DateAndTime copy() { + return new DateAndTime(this); + } public boolean isEmpty() { diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DropCapSpecifier.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DropCapSpecifier.java index a735435388..f391bb887f 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DropCapSpecifier.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/DropCapSpecifier.java @@ -17,42 +17,50 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * This data structure is used by a paragraph to determine how it should drop * its first letter. I think its the visual effect that will show a giant first * letter to a paragraph. I've seen this used in the first paragraph of a book - * - * @author Ryan Ackley */ -public final class DropCapSpecifier implements Cloneable -{ - private short _fdct; - private static BitField _lines = BitFieldFactory.getInstance( 0xf8 ); - private static BitField _type = BitFieldFactory.getInstance( 0x07 ); +public final class DropCapSpecifier implements Duplicatable { + private static final BitField _lines = BitFieldFactory.getInstance( 0xf8 ); + private static final BitField _type = BitFieldFactory.getInstance( 0x07 ); - public DropCapSpecifier() - { - this._fdct = 0; + private short _fdct; + + public DropCapSpecifier() { + _fdct = 0; } - public DropCapSpecifier( byte[] buf, int offset ) - { + public DropCapSpecifier(DropCapSpecifier other) { + _fdct = other._fdct; + } + + public DropCapSpecifier( byte[] buf, int offset ) { this( LittleEndian.getShort( buf, offset ) ); } - public DropCapSpecifier( short fdct ) - { + public DropCapSpecifier( short fdct ) { this._fdct = fdct; } @Override - public DropCapSpecifier clone() - { - return new DropCapSpecifier( _fdct ); + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public DropCapSpecifier clone() { + return copy(); + } + + @Override + public DropCapSpecifier copy() { + return new DropCapSpecifier(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/LineSpacingDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/LineSpacingDescriptor.java index 6e6b8020ad..09a8590658 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/LineSpacingDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/LineSpacingDescriptor.java @@ -17,36 +17,44 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; /** * This class is used to determine line spacing for a paragraph. - * - * @author Ryan Ackley */ -public final class LineSpacingDescriptor - implements Cloneable -{ +public final class LineSpacingDescriptor implements Duplicatable { short _dyaLine; short _fMultiLinespace; - public LineSpacingDescriptor() - { - //see page 181 + public LineSpacingDescriptor() { _dyaLine = 240; _fMultiLinespace = 1; } - public LineSpacingDescriptor(byte[] buf, int offset) - { + public LineSpacingDescriptor(LineSpacingDescriptor other) { + _dyaLine = other._dyaLine; + _fMultiLinespace = other._fMultiLinespace; + } + + + public LineSpacingDescriptor(byte[] buf, int offset) { _dyaLine = LittleEndian.getShort(buf, offset); _fMultiLinespace = LittleEndian.getShort(buf, offset + LittleEndian.SHORT_SIZE); } - public Object clone() - throws CloneNotSupportedException - { - return super.clone(); + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public LineSpacingDescriptor clone() { + return copy(); + } + + @Override + public LineSpacingDescriptor copy() { + return new LineSpacingDescriptor(this); } public void setMultiLinespace(short fMultiLinespace) @@ -71,7 +79,7 @@ public final class LineSpacingDescriptor { _dyaLine = dyaLine; } - + @Override public boolean equals(Object o) { @@ -86,7 +94,7 @@ public final class LineSpacingDescriptor assert false : "hashCode not designed"; return 42; // any arbitrary constant will do } - + public boolean isEmpty() { return _dyaLine == 0 && _fMultiLinespace == 0; diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Paragraph.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Paragraph.java index 5ad0873ba0..7eb961c44e 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Paragraph.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Paragraph.java @@ -19,6 +19,7 @@ package org.apache.poi.hwpf.usermodel; import java.util.NoSuchElementException; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.HWPFDocumentCore; import org.apache.poi.hwpf.model.LFO; import org.apache.poi.hwpf.model.ListLevel; @@ -31,67 +32,68 @@ import org.apache.poi.hwpf.sprm.TableSprmCompressor; import org.apache.poi.util.Internal; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; +import org.apache.poi.util.Removal; -public class Paragraph extends Range implements Cloneable { - private final static POILogger log = POILogFactory.getLogger( Paragraph.class ); +public class Paragraph extends Range implements Duplicatable { + private static final POILogger log = POILogFactory.getLogger( Paragraph.class ); - public final static short SPRM_JC = 0x2403; - public final static short SPRM_FSIDEBYSIDE = 0x2404; - public final static short SPRM_FKEEP = 0x2405; - public final static short SPRM_FKEEPFOLLOW = 0x2406; - public final static short SPRM_FPAGEBREAKBEFORE = 0x2407; - public final static short SPRM_BRCL = 0x2408; - public final static short SPRM_BRCP = 0x2409; - public final static short SPRM_ILVL = 0x260A; - public final static short SPRM_ILFO = 0x460B; - public final static short SPRM_FNOLINENUMB = 0x240C; - public final static short SPRM_CHGTABSPAPX = (short)0xC60D; - public final static short SPRM_DXARIGHT = (short)0x840E; - public final static short SPRM_DXALEFT = (short)0x840F; - public final static short SPRM_DXALEFT1 = (short)0x8411; - public final static short SPRM_DYALINE = 0x6412; - public final static short SPRM_DYABEFORE = (short)0xA413; - public final static short SPRM_DYAAFTER = (short)0xA414; - public final static short SPRM_CHGTABS = (short)0xC615; - public final static short SPRM_FINTABLE = 0x2416; - public final static short SPRM_FTTP = 0x2417; - public final static short SPRM_DXAABS = (short)0x8418; - public final static short SPRM_DYAABS = (short)0x8419; - public final static short SPRM_DXAWIDTH = (short)0x841A; - public final static short SPRM_PC = 0x261B; - public final static short SPRM_WR = 0x2423; - public final static short SPRM_BRCTOP = 0x6424; - public final static short SPRM_BRCLEFT = 0x6425; - public final static short SPRM_BRCBOTTOM = 0x6426; - public final static short SPRM_BRCRIGHT = 0x6427; - public final static short SPRM_BRCBAR = 0x6629; - public final static short SPRM_FNOAUTOHYPH = 0x242A; - public final static short SPRM_WHEIGHTABS = 0x442B; - public final static short SPRM_DCS = 0x442C; - public final static short SPRM_SHD80 = 0x442D; - public final static short SPRM_SHD = (short)0xC64D; - public final static short SPRM_DYAFROMTEXT = (short)0x842E; - public final static short SPRM_DXAFROMTEXT = (short)0x842F; - public final static short SPRM_FLOCKED = 0x2430; - public final static short SPRM_FWIDOWCONTROL = 0x2431; - public final static short SPRM_RULER = (short)0xC632; - public final static short SPRM_FKINSOKU = 0x2433; - public final static short SPRM_FWORDWRAP = 0x2434; - public final static short SPRM_FOVERFLOWPUNCT = 0x2435; - public final static short SPRM_FTOPLINEPUNCT = 0x2436; - public final static short SPRM_AUTOSPACEDE = 0x2437; - public final static short SPRM_AUTOSPACEDN = 0x2438; - public final static short SPRM_WALIGNFONT = 0x4439; - public final static short SPRM_FRAMETEXTFLOW = 0x443A; - public final static short SPRM_ANLD = (short)0xC63E; - public final static short SPRM_PROPRMARK = (short)0xC63F; - public final static short SPRM_OUTLVL = 0x2640; - public final static short SPRM_FBIDI = 0x2441; - public final static short SPRM_FNUMRMLNS = 0x2443; - public final static short SPRM_CRLF = 0x2444; - public final static short SPRM_NUMRM = (short)0xC645; - public final static short SPRM_USEPGSUSETTINGS = 0x2447; - public final static short SPRM_FADJUSTRIGHT = 0x2448; + public static final short SPRM_JC = 0x2403; + public static final short SPRM_FSIDEBYSIDE = 0x2404; + public static final short SPRM_FKEEP = 0x2405; + public static final short SPRM_FKEEPFOLLOW = 0x2406; + public static final short SPRM_FPAGEBREAKBEFORE = 0x2407; + public static final short SPRM_BRCL = 0x2408; + public static final short SPRM_BRCP = 0x2409; + public static final short SPRM_ILVL = 0x260A; + public static final short SPRM_ILFO = 0x460B; + public static final short SPRM_FNOLINENUMB = 0x240C; + public static final short SPRM_CHGTABSPAPX = (short)0xC60D; + public static final short SPRM_DXARIGHT = (short)0x840E; + public static final short SPRM_DXALEFT = (short)0x840F; + public static final short SPRM_DXALEFT1 = (short)0x8411; + public static final short SPRM_DYALINE = 0x6412; + public static final short SPRM_DYABEFORE = (short)0xA413; + public static final short SPRM_DYAAFTER = (short)0xA414; + public static final short SPRM_CHGTABS = (short)0xC615; + public static final short SPRM_FINTABLE = 0x2416; + public static final short SPRM_FTTP = 0x2417; + public static final short SPRM_DXAABS = (short)0x8418; + public static final short SPRM_DYAABS = (short)0x8419; + public static final short SPRM_DXAWIDTH = (short)0x841A; + public static final short SPRM_PC = 0x261B; + public static final short SPRM_WR = 0x2423; + public static final short SPRM_BRCTOP = 0x6424; + public static final short SPRM_BRCLEFT = 0x6425; + public static final short SPRM_BRCBOTTOM = 0x6426; + public static final short SPRM_BRCRIGHT = 0x6427; + public static final short SPRM_BRCBAR = 0x6629; + public static final short SPRM_FNOAUTOHYPH = 0x242A; + public static final short SPRM_WHEIGHTABS = 0x442B; + public static final short SPRM_DCS = 0x442C; + public static final short SPRM_SHD80 = 0x442D; + public static final short SPRM_SHD = (short)0xC64D; + public static final short SPRM_DYAFROMTEXT = (short)0x842E; + public static final short SPRM_DXAFROMTEXT = (short)0x842F; + public static final short SPRM_FLOCKED = 0x2430; + public static final short SPRM_FWIDOWCONTROL = 0x2431; + public static final short SPRM_RULER = (short)0xC632; + public static final short SPRM_FKINSOKU = 0x2433; + public static final short SPRM_FWORDWRAP = 0x2434; + public static final short SPRM_FOVERFLOWPUNCT = 0x2435; + public static final short SPRM_FTOPLINEPUNCT = 0x2436; + public static final short SPRM_AUTOSPACEDE = 0x2437; + public static final short SPRM_AUTOSPACEDN = 0x2438; + public static final short SPRM_WALIGNFONT = 0x4439; + public static final short SPRM_FRAMETEXTFLOW = 0x443A; + public static final short SPRM_ANLD = (short)0xC63E; + public static final short SPRM_PROPRMARK = (short)0xC63F; + public static final short SPRM_OUTLVL = 0x2640; + public static final short SPRM_FBIDI = 0x2441; + public static final short SPRM_FNUMRMLNS = 0x2443; + public static final short SPRM_CRLF = 0x2444; + public static final short SPRM_NUMRM = (short)0xC645; + public static final short SPRM_USEPGSUSETTINGS = 0x2447; + public static final short SPRM_FADJUSTRIGHT = 0x2448; @Internal public static Paragraph newParagraph( Range parent, PAPX papx ) @@ -169,11 +171,18 @@ public class Paragraph extends Range implements Cloneable { _istd = papx.getIstd(); } + Paragraph(Paragraph other) { + super(other); + _istd = other._istd; + _props = (other._props == null) ? null : other._props.copy(); + _papx = (other._papx == null) ? null : other._papx.copy(); + } + /** * Returns the index of the style which applies to this * Paragraph. Details of the style can be looked up * from the {@link StyleSheet}, via - * {@link StyleSheet#getStyleDescription(int)} + * {@link StyleSheet#getStyleDescription(int)} */ public short getStyleIndex() { @@ -540,7 +549,7 @@ public class Paragraph extends Range implements Cloneable { /** * Returns number of tabs stops defined for paragraph. Must be >= 0 and <= * 64. - * + * * @return number of tabs stops defined for paragraph. Must be >= 0 and <= * 64 */ @@ -551,7 +560,7 @@ public class Paragraph extends Range implements Cloneable { /** * Returns array of positions of itbdMac tab stops - * + * * @return array of positions of itbdMac tab stops */ public int[] getTabStopsPositions() @@ -576,24 +585,24 @@ public class Paragraph extends Range implements Cloneable { /** * Clone the ParagraphProperties object associated with this - * Paragraph, so that you can apply the same properties to + * Paragraph, so that you can apply the same properties to * another Paragraph. */ public ParagraphProperties cloneProperties() { - try { - return (ParagraphProperties)_props.clone(); - } catch (Exception e) { - throw new RuntimeException(e); - } + return _props.copy(); } - public Object clone() throws CloneNotSupportedException - { - Paragraph p = (Paragraph)super.clone(); - p._props = (ParagraphProperties)_props.clone(); - //p._baseStyle = _baseStyle; - p._papx = new SprmBuffer(0); - return p; + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public Paragraph clone() { + return copy(); + } + + @Override + public Paragraph copy() { + return new Paragraph(this); } private short getFrameTextFlow() diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ParagraphProperties.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ParagraphProperties.java index 6b2fdfc6d0..b335fc85a9 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ParagraphProperties.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ParagraphProperties.java @@ -17,35 +17,36 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.PAPAbstractType; +import org.apache.poi.util.Removal; -public final class ParagraphProperties extends PAPAbstractType implements - Cloneable -{ +@SuppressWarnings("unused") +public final class ParagraphProperties extends PAPAbstractType implements Duplicatable { private boolean jcLogical; - public ParagraphProperties() - { - setAnld( new byte[84] ); - setPhe( new byte[12] ); + public ParagraphProperties() { + setAnld(new byte[84]); + setPhe(new byte[12]); } - public Object clone() throws CloneNotSupportedException - { - ParagraphProperties pp = (ParagraphProperties) super.clone(); - pp.setAnld( getAnld().clone() ); - pp.setBrcTop( (BorderCode) getBrcTop().clone() ); - pp.setBrcLeft( (BorderCode) getBrcLeft().clone() ); - pp.setBrcBottom( (BorderCode) getBrcBottom().clone() ); - pp.setBrcRight( (BorderCode) getBrcRight().clone() ); - pp.setBrcBetween( (BorderCode) getBrcBetween().clone() ); - pp.setBrcBar( (BorderCode) getBrcBar().clone() ); - pp.setDcs( getDcs().clone() ); - pp.setLspd( (LineSpacingDescriptor) getLspd().clone() ); - pp.setShd( getShd().clone() ); - pp.setPhe( getPhe().clone() ); - return pp; + public ParagraphProperties(ParagraphProperties other) { + super(other); + jcLogical = other.jcLogical; + } + + @Override + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public ParagraphProperties clone() { + return copy(); + } + + @Override + public ParagraphProperties copy() { + return new ParagraphProperties(this); } public BorderCode getBarBorder() @@ -92,12 +93,12 @@ public final class ParagraphProperties extends PAPAbstractType implements switch ( getJc() ) { - case 0: - return 2; - case 2: - return 0; - default: - return getJc(); + case 0: + return 2; + case 2: + return 0; + default: + return getJc(); } } @@ -332,3 +333,4 @@ public final class ParagraphProperties extends PAPAbstractType implements } } + diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java index 1a346fb536..d2e0c2fc7f 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Range.java @@ -17,6 +17,8 @@ package org.apache.poi.hwpf.usermodel; +import static java.util.stream.Collectors.toList; + import java.util.List; import org.apache.poi.hwpf.HWPFDocument; @@ -47,49 +49,47 @@ import org.apache.poi.util.POILogger; * Ranges are only valid if there hasn't been an insert in a prior Range since * the Range's creation. Once an element (text, paragraph, etc.) has been * inserted into a Range, subsequent Ranges become unstable. - * - * @author Ryan Ackley */ -public class Range { // TODO -instantiable superclass +public class Range { + + private static final POILogger logger = POILogFactory.getLogger( Range.class ); - private POILogger logger = POILogFactory.getLogger( Range.class ); - /** * @deprecated POI 3.8 beta 5 */ @Deprecated public static final int TYPE_PARAGRAPH = 0; - + /** * @deprecated POI 3.8 beta 5 */ @Deprecated public static final int TYPE_CHARACTER = 1; - + /** * @deprecated POI 3.8 beta 5 */ @Deprecated public static final int TYPE_SECTION = 2; - + /** * @deprecated POI 3.8 beta 5 */ @Deprecated public static final int TYPE_TEXT = 3; - + /** * @deprecated POI 3.8 beta 5 */ @Deprecated public static final int TYPE_LISTENTRY = 4; - + /** * @deprecated POI 3.8 beta 5 */ @Deprecated public static final int TYPE_TABLE = 5; - + /** * @deprecated POI 3.8 beta 5 */ @@ -145,18 +145,15 @@ public class Range { // TODO -instantiable superclass protected int _charEnd; protected StringBuilder _text; - + /** * Used to construct a Range from a document. This is generally used to * create a Range that spans the whole document, or at least one whole part * of the document (eg main text, header, comment) * - * @param start - * Starting character offset of the range. - * @param end - * Ending character offset of the range. - * @param doc - * The HWPFDocument the range is based on. + * @param start Starting character offset of the range. + * @param end Ending character offset of the range. + * @param doc The HWPFDocument the range is based on. */ public Range(int start, int end, HWPFDocumentCore doc) { _start = start; @@ -174,12 +171,9 @@ public class Range { // TODO -instantiable superclass /** * Used to create Ranges that are children of other Ranges. * - * @param start - * Starting character offset of the range. - * @param end - * Ending character offset of the range. - * @param parent - * The parent this range belongs to. + * @param start Starting character offset of the range. + * @param end Ending character offset of the range. + * @param parent The parent this range belongs to. */ protected Range(int start, int end, Range parent) { _start = start; @@ -195,6 +189,26 @@ public class Range { // TODO -instantiable superclass sanityCheck(); } + protected Range(Range other) { + _parent = other._parent; + _start = other._start; + _end = other._end; + _doc = other._doc; + _sectionRangeFound = other._sectionRangeFound; + _sections = (other._sections == null) ? null : other._sections.stream().map(SEPX::copy).collect(toList()); + _sectionStart = other._sectionStart; + _sectionEnd = other._sectionEnd; + _parRangeFound = other._parRangeFound; + _paragraphs = (other._paragraphs == null) ? null : other._paragraphs.stream().map(PAPX::copy).collect(toList()); + _parStart = other._parStart; + _parEnd = other._parEnd; + _charRangeFound = other._charRangeFound; + _characters = (other._characters == null) ? null : other._characters.stream().map(CHPX::copy).collect(toList()); + _charStart = other._charStart; + _charEnd = other._charEnd; + _text = (other._text == null) ? null : new StringBuilder(other._text); + } + /** * Ensures that the start and end were were given are actually valid, to @@ -305,7 +319,7 @@ public class Range { // TODO -instantiable superclass /** * Inserts text into the front of this range. - * + * * @param text * The text to insert * @return The character run that text was inserted into. @@ -335,7 +349,7 @@ public class Range { // TODO -instantiable superclass /** * Inserts text onto the end of this range - * + * * @param text * The text to insert * @return The character run the text was inserted into. @@ -569,7 +583,7 @@ public class Range { // TODO -instantiable superclass /** * Inserts a simple table into the beginning of this range. - * + * * @param columns * The number of columns * @param rows @@ -582,7 +596,7 @@ public class Range { // TODO -instantiable superclass parProps.setItap( 1 ); final int oldEnd = this._end; - + for ( int x = 0; x < rows; x++ ) { Paragraph cell = this.insertBefore( parProps, StyleSheet.NIL_STYLE ); @@ -602,11 +616,11 @@ public class Range { // TODO -instantiable superclass return new Table( _start, _start + diff, this, 1 ); } - + /** * Replace range text with new one, adding it to the range and deleting * original text from document - * + * * @param newText * The text to be replaced with * @param addAfter @@ -941,7 +955,7 @@ public class Range { // TODO -instantiable superclass /** * Used to find the list indexes of a particular property. - * + * * @param rpl * A list of property nodes. * @param start @@ -988,7 +1002,7 @@ public class Range { // TODO -instantiable superclass */ private int[] findRange(List> rpl, int min, int start, int end) { int x = min; - + if ( rpl.size() == min ) return new int[] { min, min }; @@ -1043,9 +1057,9 @@ public class Range { // TODO -instantiable superclass /** * Adjust the value of the various FIB character count fields, eg * FIB.CCPText after an insert or a delete... - * + * * Works on all CCP fields from this range onwards - * + * * @param adjustment * The (signed) value that should be added to the FIB CCP fields */ diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Section.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Section.java index 71ab5017e0..89b0846659 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Section.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/Section.java @@ -17,17 +17,21 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.HWPFOldDocument; import org.apache.poi.hwpf.model.SEPX; +import org.apache.poi.util.Removal; -public final class Section extends Range -{ - private SectionProperties _props; +public final class Section extends Range implements Duplicatable { + private final SectionProperties _props; - public Section( SEPX sepx, Range parent ) - { - super( Math.max( parent._start, sepx.getStart() ), Math.min( - parent._end, sepx.getEnd() ), parent ); + public Section(Section other) { + super(other); + _props = other._props.copy(); + } + + public Section( SEPX sepx, Range parent ) { + super( Math.max( parent._start, sepx.getStart() ), Math.min(parent._end, sepx.getEnd() ), parent ); // XXX: temporary workaround for old Word95 document if ( parent.getDocument() instanceof HWPFOldDocument ) @@ -36,11 +40,17 @@ public final class Section extends Range _props = sepx.getSectionProperties(); } - public Object clone() throws CloneNotSupportedException - { - Section s = (Section) super.clone(); - s._props = (SectionProperties) _props.clone(); - return s; + @Override + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public Section clone() { + return copy(); + } + + @Override + public Section copy() { + return new Section(this); } /** @@ -99,7 +109,7 @@ public final class Section extends Range * Set the height of the bottom margin in twips. In the AbstractWordUtils class, a constant * is defined that indicates how many twips there are per inch and it can be used in setting * the margins width a little like this; - * + * * section.setMarginBottom( (int) 1.5 * AbstractWordUtils.TWIPS_PER_INCH ); * * @param marginWidth A primitive int whose value will indciate how high the margin should @@ -114,7 +124,7 @@ public final class Section extends Range * Set the width of the left hand margin in twips. In the AbstractWordUtils class, a constant * is defined that indicates how many twips there are per inch and it can be used in setting * the margins width a little like this; - * + * * section.setMarginLeft( (int) 1.5 * AbstractWordUtils.TWIPS_PER_INCH ); * * @param marginWidth A primitive int whose value will indciate how high the margin should @@ -129,7 +139,7 @@ public final class Section extends Range * Set the width of the right hand margin in twips. In the AbstractWordUtils class, a constant * is defined that indicates how many twips there are per inch and it can be used in setting * the margins width a little like this; - * + * * section.setMarginRight( (int) 1.5 * AbstractWordUtils.TWIPS_PER_INCH ); * * @param marginWidth A primitive int whose value will indciate how high the margin should @@ -144,7 +154,7 @@ public final class Section extends Range * Set the height of the top margin in twips. In the AbstractWordUtils class, a constant * is defined that indicates how many twips there are per inch and it can be used in setting * the margins width a little like this; - * + * * section.setMarginTop( (int) 1.5 * AbstractWordUtils.TWIPS_PER_INCH ); * * @param marginWidth A primitive int whose value will indciate how high the margin should @@ -181,7 +191,7 @@ public final class Section extends Range public int getFootnoteNumberingOffset() { return _props.getNFtn(); } - + /** * Get the numbering format of embedded footnotes * @@ -192,7 +202,7 @@ public final class Section extends Range public int getFootnoteNumberingFormat() { return _props.getNfcFtnRef(); } - + /** * Get the endnote restart qualifier * @@ -203,18 +213,18 @@ public final class Section extends Range * * * @return an Rnc, as decribed above, specifying when and where endnote numbering restarts - */ + */ public short getEndnoteRestartQualifier() { return _props.getRncEdn(); } - + /** * @return an offset to be added to endnote numbers */ public int getEndnoteNumberingOffset() { return _props.getNEdn(); } - + /** * Get the numbering format of embedded endnotes * diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/SectionProperties.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/SectionProperties.java index 1159228110..1eeb47a511 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/SectionProperties.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/SectionProperties.java @@ -17,20 +17,22 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.SEPAbstractType; +import org.apache.poi.util.Removal; -public final class SectionProperties extends SEPAbstractType implements Cloneable -{ +public final class SectionProperties extends SEPAbstractType implements Duplicatable { private short field_60_rncftn; private short field_61_rncedn; private int field_62_nftn; + // initialize with default value; msonfcArabic @SuppressWarnings("RedundantFieldInitialization") - private int field_63_nfcftnref = 0x00; // initialize with default value; msonfcArabic + private int field_63_nfcftnref = 0x00; private int field_64_nedn; - private int field_65_nfcednref = 0x02; // initialize with default value; msonfcLCRoman + // initialize with default value; msonfcLCRoman + private int field_65_nfcednref = 0x02; - public SectionProperties() - { + public SectionProperties() { field_20_brcTop = new BorderCode(); field_21_brcLeft = new BorderCode(); field_22_brcBottom = new BorderCode(); @@ -38,29 +40,38 @@ public final class SectionProperties extends SEPAbstractType implements Cloneabl field_26_dttmPropRMark = new DateAndTime(); } - @Override - public Object clone() throws CloneNotSupportedException - { - SectionProperties copy = (SectionProperties) super.clone(); - copy.field_20_brcTop = (BorderCode) field_20_brcTop.clone(); - copy.field_21_brcLeft = (BorderCode) field_21_brcLeft.clone(); - copy.field_22_brcBottom = (BorderCode) field_22_brcBottom.clone(); - copy.field_23_brcRight = (BorderCode) field_23_brcRight.clone(); - copy.field_26_dttmPropRMark = (DateAndTime) field_26_dttmPropRMark - .clone(); - - return copy; + public SectionProperties(SectionProperties other) { + super(other); + field_60_rncftn = other.field_60_rncftn; + field_61_rncedn = other.field_61_rncedn; + field_62_nftn = other.field_62_nftn; + field_63_nfcftnref = other.field_63_nfcftnref; + field_64_nedn = other.field_64_nedn; + field_65_nfcednref = other.field_65_nfcednref; } - + + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public SectionProperties clone() { + return copy(); + } + + @Override + public SectionProperties copy() { + return new SectionProperties(this); + } + /** * sprmSRncFtn, [MS-DOC], 20140721, 2.6.4 - * + * * @param field_60_rncftn unsigned 8-bit integer specifying the footnote numbering restart condition */ public void setRncFtn(final short field_60_rncftn) { this.field_60_rncftn = field_60_rncftn; } - + /** * @see #setRncFtn(short) * @return an Rnc value specifying when and where footnote numbering restarts @@ -68,16 +79,16 @@ public final class SectionProperties extends SEPAbstractType implements Cloneabl public short getRncFtn() { return this.field_60_rncftn; } - + /** * sprmSRncEdn, [MS-DOC], 20140721, 2.6.4 - * + * * @param field_61_rncedn unsigned 8-bit integer specifying the endnote numbering restart condition */ public void setRncEdn(final short field_61_rncedn) { this.field_61_rncedn = field_61_rncedn; } - + /** * @see #setRncEdn(short) * @return an Rnc value specifying when and where endnote numbering restarts @@ -85,16 +96,16 @@ public final class SectionProperties extends SEPAbstractType implements Cloneabl public short getRncEdn() { return this.field_61_rncedn; } - + /** * sprmSNftn, [MS-DOC], v20140721, 2.6.4 - * + * * @param field_62_nftn a number specifying the offset to add to footnote numbers */ public void setNFtn(final int field_62_nftn) { this.field_62_nftn = field_62_nftn; } - + /** * @see #setNFtn(int) * @return a 16-bit integer specifying the offset to add to footnote numbering @@ -102,34 +113,34 @@ public final class SectionProperties extends SEPAbstractType implements Cloneabl public int getNFtn() { return this.field_62_nftn; } - + /** * sprmSNfcFtnRef, [MS-DOC], v20140721 - * + * * @param field_63_nfcftnref an Nfc specifying the numbering format for footnotes */ public void setNfcFtnRef(final int field_63_nfcftnref) { this.field_63_nfcftnref = field_63_nfcftnref; } - + /** - * + * * @see #setNfcFtnRef(int) * @return a 16-bit integer with an Nfc specifying the numbering format for footnotes */ public int getNfcFtnRef() { return this.field_63_nfcftnref; } - + /** * sprmSNEdn, [MS-DOC], v20140721, 2.6.4 - * + * * @param field_64_nedn a number specifying the offset to add to footnote numbers */ public void setNEdn(final int field_64_nedn) { this.field_64_nedn = field_64_nedn; } - + /** * @see #setNEdn(int) * @return a 16-bit integer specifying the offset to add to endnote numbering @@ -137,18 +148,18 @@ public final class SectionProperties extends SEPAbstractType implements Cloneabl public int getNEdn() { return this.field_64_nedn; } - + /** * sprmSNfcEdnRef, [MS-DOC], v20140721 - * + * * @param field_65_nfcednref an Nfc specifying the numbering format for endnotes */ public void setNfcEdnRef(final int field_65_nfcednref) { this.field_65_nfcednref = field_65_nfcednref; } - + /** - * + * * @see #setNfcEdnRef(int) * @return a 16-bit integer with an Nfc specifying the numbering format for endnotes */ diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor.java index e15cd7d5db..85e2d1c233 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor.java @@ -17,30 +17,36 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.SHDAbstractType; +import org.apache.poi.util.Removal; /** * The SHD is a substructure of the CHP, PAP, and TC for Word 2000. - * - * @author vlsergey */ -public final class ShadingDescriptor extends SHDAbstractType implements - Cloneable -{ +public final class ShadingDescriptor extends SHDAbstractType implements Duplicatable { - public ShadingDescriptor() - { + public ShadingDescriptor() {} + + public ShadingDescriptor(ShadingDescriptor other) { + super(other); } - public ShadingDescriptor( byte[] buf, int offset ) - { - super(); + public ShadingDescriptor( byte[] buf, int offset ) { fillFields( buf, offset ); } - public ShadingDescriptor clone() throws CloneNotSupportedException - { - return (ShadingDescriptor) super.clone(); + @Override + @SuppressWarnings("squid:S2975") + @Deprecated + @Removal(version = "5.0.0") + public ShadingDescriptor clone() { + return copy(); + } + + @Override + public ShadingDescriptor copy() { + return new ShadingDescriptor(this); } public boolean isEmpty() diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor80.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor80.java index 40a6fac3fe..e40e499b21 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor80.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/ShadingDescriptor80.java @@ -17,36 +17,42 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.Colorref; - import org.apache.poi.hwpf.model.types.SHD80AbstractType; +import org.apache.poi.util.Removal; /** * The SHD80 is a substructure of the CHP and PAP, and TC for Word 97. */ -public final class ShadingDescriptor80 extends SHD80AbstractType implements - Cloneable -{ +@SuppressWarnings("unused") +public final class ShadingDescriptor80 extends SHD80AbstractType implements Duplicatable { - public ShadingDescriptor80() - { + public ShadingDescriptor80() {} + + public ShadingDescriptor80(ShadingDescriptor80 other) { + super(other); } - public ShadingDescriptor80( byte[] buf, int offset ) - { - super(); + public ShadingDescriptor80( byte[] buf, int offset ) { fillFields( buf, offset ); } - public ShadingDescriptor80( short value ) - { - super(); + public ShadingDescriptor80( short value ) { field_1_value = value; } - public ShadingDescriptor80 clone() throws CloneNotSupportedException - { - return (ShadingDescriptor80) super.clone(); + @Override + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public ShadingDescriptor80 clone() { + return copy(); + } + + @Override + public ShadingDescriptor80 copy() { + return new ShadingDescriptor80(this); } public boolean isEmpty() diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableAutoformatLookSpecifier.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableAutoformatLookSpecifier.java index d99c2ac53f..305ee149a6 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableAutoformatLookSpecifier.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableAutoformatLookSpecifier.java @@ -18,35 +18,34 @@ package org.apache.poi.hwpf.usermodel; import java.util.Objects; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.TLPAbstractType; +import org.apache.poi.util.Removal; -public class TableAutoformatLookSpecifier extends TLPAbstractType implements - Cloneable -{ +public class TableAutoformatLookSpecifier extends TLPAbstractType implements Duplicatable { public static final int SIZE = 4; - public TableAutoformatLookSpecifier() - { - super(); + public TableAutoformatLookSpecifier() {} + + public TableAutoformatLookSpecifier(TableAutoformatLookSpecifier other) { + super(other); } - public TableAutoformatLookSpecifier( byte[] data, int offset ) - { - super(); + public TableAutoformatLookSpecifier( byte[] data, int offset ) { fillFields( data, offset ); } @Override - public TableAutoformatLookSpecifier clone() - { - try - { - return (TableAutoformatLookSpecifier) super.clone(); - } - catch ( CloneNotSupportedException e ) - { - throw new Error( e.getMessage(), e ); - } + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public TableAutoformatLookSpecifier clone() { + return copy(); + } + + @Override + public TableAutoformatLookSpecifier copy() { + return new TableAutoformatLookSpecifier(this); } @Override diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableCellDescriptor.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableCellDescriptor.java index 4d01ec8911..ad31a92361 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableCellDescriptor.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableCellDescriptor.java @@ -17,16 +17,18 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.TCAbstractType; import org.apache.poi.util.LittleEndian; +import org.apache.poi.util.Removal; -public final class TableCellDescriptor extends TCAbstractType implements - Cloneable -{ +public final class TableCellDescriptor extends TCAbstractType implements Duplicatable { public static final int SIZE = 20; - public TableCellDescriptor() - { + public TableCellDescriptor() {} + + public TableCellDescriptor(TableCellDescriptor other) { + super(other); } protected void fillFields(byte[] data, int offset) @@ -49,16 +51,17 @@ public final class TableCellDescriptor extends TCAbstractType implements getBrcRight().serialize(data, 0x10 + offset); } - public Object clone() - throws CloneNotSupportedException - { - TableCellDescriptor tc = (TableCellDescriptor)super.clone(); - tc.setShd( getShd().clone() ); - tc.setBrcTop((BorderCode)getBrcTop().clone()); - tc.setBrcLeft((BorderCode)getBrcLeft().clone()); - tc.setBrcBottom((BorderCode)getBrcBottom().clone()); - tc.setBrcRight((BorderCode)getBrcRight().clone()); - return tc; + @Override + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public TableCellDescriptor clone() { + return copy(); + } + + @Override + public TableCellDescriptor copy() { + return new TableCellDescriptor(this); } public static TableCellDescriptor convertBytesToTC(byte[] buf, int offset) diff --git a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableProperties.java b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableProperties.java index 001b3cfb29..999d2a9e58 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableProperties.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/usermodel/TableProperties.java @@ -17,33 +17,34 @@ package org.apache.poi.hwpf.usermodel; +import org.apache.poi.common.Duplicatable; import org.apache.poi.hwpf.model.types.TAPAbstractType; +import org.apache.poi.util.Removal; -public final class TableProperties extends TAPAbstractType implements Cloneable -{ +public final class TableProperties extends TAPAbstractType implements Duplicatable { - public TableProperties() - { - setTlp( new TableAutoformatLookSpecifier() ); - setShdTable( new ShadingDescriptor() ); - setBrcBottom( new BorderCode() ); - setBrcHorizontal( new BorderCode() ); - setBrcLeft( new BorderCode() ); - setBrcRight( new BorderCode() ); - setBrcTop( new BorderCode() ); - setBrcVertical( new BorderCode() ); - setRgbrcInsideDefault_0( new BorderCode() ); - setRgbrcInsideDefault_1( new BorderCode() ); - setRgdxaCenter( new short[0] ); - setRgdxaCenterPrint( new short[0] ); - setRgshd( new ShadingDescriptor[0] ); - setRgtc( new TableCellDescriptor[0] ); + public TableProperties() { + setTlp(new TableAutoformatLookSpecifier()); + setShdTable(new ShadingDescriptor()); + setBrcBottom(new BorderCode()); + setBrcHorizontal(new BorderCode()); + setBrcLeft(new BorderCode()); + setBrcRight(new BorderCode()); + setBrcTop(new BorderCode()); + setBrcVertical(new BorderCode()); + setRgbrcInsideDefault_0(new BorderCode()); + setRgbrcInsideDefault_1(new BorderCode()); + setRgdxaCenter(new short[0]); + setRgdxaCenterPrint(new short[0]); + setRgshd(new ShadingDescriptor[0]); + setRgtc(new TableCellDescriptor[0]); } - public TableProperties( short columns ) - { - this(); + public TableProperties(TableProperties other) { + super(other); + } + public TableProperties( short columns ) { setItcMac( columns ); setRgshd( new ShadingDescriptor[columns] ); @@ -63,40 +64,16 @@ public final class TableProperties extends TAPAbstractType implements Cloneable setRgdxaCenterPrint( new short[columns] ); } - public Object clone() throws CloneNotSupportedException - { - TableProperties tap = (TableProperties) super.clone(); - - tap.setTlp( getTlp().clone() ); - tap.setRgshd( new ShadingDescriptor[getRgshd().length] ); - for ( int x = 0; x < getRgshd().length; x++ ) - { - tap.getRgshd()[x] = getRgshd()[x].clone(); - } - - tap.setBrcBottom( (BorderCode) getBrcBottom().clone() ); - tap.setBrcHorizontal( (BorderCode) getBrcHorizontal().clone() ); - tap.setBrcLeft( (BorderCode) getBrcLeft().clone() ); - tap.setBrcRight( (BorderCode) getBrcRight().clone() ); - tap.setBrcTop( (BorderCode) getBrcTop().clone() ); - tap.setBrcVertical( (BorderCode) getBrcVertical().clone() ); - - tap.setShdTable( getShdTable().clone() ); - - tap.setRgbrcInsideDefault_0( (BorderCode) getRgbrcInsideDefault_0() - .clone() ); - tap.setRgbrcInsideDefault_1( (BorderCode) getRgbrcInsideDefault_1() - .clone() ); - - tap.setRgdxaCenter( getRgdxaCenter().clone() ); - tap.setRgdxaCenterPrint( getRgdxaCenterPrint().clone() ); - - tap.setRgtc( new TableCellDescriptor[getRgtc().length] ); - for ( int x = 0; x < getRgtc().length; x++ ) - { - tap.getRgtc()[x] = (TableCellDescriptor) getRgtc()[x].clone(); - } - return tap; + @Override + @SuppressWarnings({"squid:S2975", "MethodDoesntCallSuperMethod"}) + @Deprecated + @Removal(version = "5.0.0") + public TableProperties clone() { + return copy(); } + @Override + public TableProperties copy() { + return new TableProperties(this); + } }