From: Sergey Vladimirov Date: Sat, 16 Jul 2011 08:16:00 +0000 (+0000) Subject: format and sort members X-Git-Tag: REL_3_8_BETA4~174 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=efe669435044e2a481d78e9173cc6d59c33499b2;p=poi.git format and sort members git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1147378 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/scratchpad/src/org/apache/poi/hwpf/model/ListLevel.java b/src/scratchpad/src/org/apache/poi/hwpf/model/ListLevel.java index cb04af184d..0eb594cbc2 100644 --- a/src/scratchpad/src/org/apache/poi/hwpf/model/ListLevel.java +++ b/src/scratchpad/src/org/apache/poi/hwpf/model/ListLevel.java @@ -23,247 +23,255 @@ import org.apache.poi.util.BitField; import org.apache.poi.util.LittleEndian; /** - * + * "List LeVeL (on File) (LVLF)" + * + * See page 170 for details. */ public final class ListLevel { - private static final int RGBXCH_NUMS_SIZE = 9; - - private int _iStartAt; - private byte _nfc; - private byte _info; - private static BitField _jc; - private static BitField _fLegal; - private static BitField _fNoRestart; - private static BitField _fPrev; - private static BitField _fPrevSpace; - private static BitField _fWord6; - private byte[] _rgbxchNums; - private byte _ixchFollow; - private int _dxaSpace; - private int _dxaIndent; - private int _cbGrpprlChpx; - private int _cbGrpprlPapx; - private short _reserved; - private byte[] _grpprlPapx; - private byte[] _grpprlChpx; - private char[] _numberText=null; - - public ListLevel(int startAt, int numberFormatCode, int alignment, - byte[] numberProperties, byte[] entryProperties, - String numberText) - { - _iStartAt = startAt; - _nfc = (byte)numberFormatCode; - _jc.setValue(_info, alignment); - _grpprlChpx = numberProperties; - _grpprlPapx = entryProperties; - _numberText = numberText.toCharArray(); - } - - public ListLevel(int level, boolean numbered) - { - _iStartAt = 1; - _grpprlPapx = new byte[0]; - _grpprlChpx = new byte[0]; - _numberText = new char[0]; - _rgbxchNums = new byte[RGBXCH_NUMS_SIZE]; - - if (numbered) + private static final int RGBXCH_NUMS_SIZE = 9; + + private int _iStartAt; + private byte _nfc; + private byte _info; + /* */private static BitField _jc; + /* */private static BitField _fLegal; + /* */private static BitField _fNoRestart; + /* */private static BitField _fPrev; + /* */private static BitField _fPrevSpace; + /* */private static BitField _fWord6; + private byte[] _rgbxchNums; + private byte _ixchFollow; + private int _dxaSpace; + private int _dxaIndent; + private int _cbGrpprlChpx; + private int _cbGrpprlPapx; + private short _reserved; + private byte[] _grpprlPapx; + private byte[] _grpprlChpx; + private char[] _numberText = null; + + public ListLevel( final byte[] buf, final int originalOffset ) { - _rgbxchNums[0] = 1; - _numberText = new char[]{(char)level, '.'}; + int offset = originalOffset; + + _iStartAt = LittleEndian.getInt( buf, offset ); + offset += LittleEndian.INT_SIZE; + _nfc = buf[offset++]; + _info = buf[offset++]; + + _rgbxchNums = new byte[RGBXCH_NUMS_SIZE]; + System.arraycopy( buf, offset, _rgbxchNums, 0, RGBXCH_NUMS_SIZE ); + offset += RGBXCH_NUMS_SIZE; + + _ixchFollow = buf[offset++]; + _dxaSpace = LittleEndian.getInt( buf, offset ); + offset += LittleEndian.INT_SIZE; + _dxaIndent = LittleEndian.getInt( buf, offset ); + offset += LittleEndian.INT_SIZE; + _cbGrpprlChpx = LittleEndian.getUnsignedByte( buf, offset++ ); + _cbGrpprlPapx = LittleEndian.getUnsignedByte( buf, offset++ ); + _reserved = LittleEndian.getShort( buf, offset ); + offset += LittleEndian.SHORT_SIZE; + + _grpprlPapx = new byte[_cbGrpprlPapx]; + _grpprlChpx = new byte[_cbGrpprlChpx]; + System.arraycopy( buf, offset, _grpprlPapx, 0, _cbGrpprlPapx ); + offset += _cbGrpprlPapx; + System.arraycopy( buf, offset, _grpprlChpx, 0, _cbGrpprlChpx ); + offset += _cbGrpprlChpx; + + int numberTextLength = LittleEndian.getShort( buf, offset ); + /* sometimes numberTextLength<0 */ + /* by derjohng */ + if ( numberTextLength > 0 ) + { + _numberText = new char[numberTextLength]; + offset += LittleEndian.SHORT_SIZE; + for ( int x = 0; x < numberTextLength; x++ ) + { + _numberText[x] = (char) LittleEndian.getShort( buf, offset ); + offset += LittleEndian.SHORT_SIZE; + } + } + + } + + public ListLevel( int level, boolean numbered ) + { + _iStartAt = 1; + _grpprlPapx = new byte[0]; + _grpprlChpx = new byte[0]; + _numberText = new char[0]; + _rgbxchNums = new byte[RGBXCH_NUMS_SIZE]; + + if ( numbered ) + { + _rgbxchNums[0] = 1; + _numberText = new char[] { (char) level, '.' }; + } + else + { + _numberText = new char[] { '\u2022' }; + } } - else + + public ListLevel( int startAt, int numberFormatCode, int alignment, + byte[] numberProperties, byte[] entryProperties, String numberText ) { - _numberText = new char[]{'\u2022'}; + _iStartAt = startAt; + _nfc = (byte) numberFormatCode; + _jc.setValue( _info, alignment ); + _grpprlChpx = numberProperties; + _grpprlPapx = entryProperties; + _numberText = numberText.toCharArray(); } - } - - public ListLevel(byte[] buf, int offset) - { - _iStartAt = LittleEndian.getInt(buf, offset); - offset += LittleEndian.INT_SIZE; - _nfc = buf[offset++]; - _info = buf[offset++]; - - _rgbxchNums = new byte[RGBXCH_NUMS_SIZE]; - System.arraycopy(buf, offset, _rgbxchNums, 0, RGBXCH_NUMS_SIZE); - offset += RGBXCH_NUMS_SIZE; - - _ixchFollow = buf[offset++]; - _dxaSpace = LittleEndian.getInt(buf, offset); - offset += LittleEndian.INT_SIZE; - _dxaIndent = LittleEndian.getInt(buf, offset); - offset += LittleEndian.INT_SIZE; - _cbGrpprlChpx = LittleEndian.getUnsignedByte(buf, offset++); - _cbGrpprlPapx = LittleEndian.getUnsignedByte(buf, offset++); - _reserved = LittleEndian.getShort(buf, offset); - offset += LittleEndian.SHORT_SIZE; - - _grpprlPapx = new byte[_cbGrpprlPapx]; - _grpprlChpx = new byte[_cbGrpprlChpx]; - System.arraycopy(buf, offset, _grpprlPapx, 0, _cbGrpprlPapx); - offset += _cbGrpprlPapx; - System.arraycopy(buf, offset, _grpprlChpx, 0, _cbGrpprlChpx); - offset += _cbGrpprlChpx; - - int numberTextLength = LittleEndian.getShort(buf, offset); - /* sometimes numberTextLength<0 */ - /* by derjohng */ - if (numberTextLength>0) + + public boolean equals( Object obj ) { - _numberText = new char[numberTextLength]; - offset += LittleEndian.SHORT_SIZE; - for (int x = 0; x < numberTextLength; x++) + if ( obj == null ) + return false; + + ListLevel lvl = (ListLevel) obj; + return _cbGrpprlChpx == lvl._cbGrpprlChpx + && lvl._cbGrpprlPapx == _cbGrpprlPapx + && lvl._dxaIndent == _dxaIndent && lvl._dxaSpace == _dxaSpace + && Arrays.equals( lvl._grpprlChpx, _grpprlChpx ) + && Arrays.equals( lvl._grpprlPapx, _grpprlPapx ) + && lvl._info == _info && lvl._iStartAt == _iStartAt + && lvl._ixchFollow == _ixchFollow && lvl._nfc == _nfc + && Arrays.equals( lvl._numberText, _numberText ) + && Arrays.equals( lvl._rgbxchNums, _rgbxchNums ) + && lvl._reserved == _reserved; + } + + /** + * "Alignment (left, right, or centered) of the paragraph number." + */ + public int getAlignment() + { + return _jc.getValue( _info ); + } + + public byte[] getLevelProperties() + { + return _grpprlPapx; + } + + /** + * "Number format code (see anld.nfc for a list of options)" + */ + public int getNumberFormat() + { + return _nfc; + } + + public String getNumberText() + { + if ( _numberText == null ) + return null; + + return new String( _numberText ); + } + + public int getSizeInBytes() + { + int result = 6 // int byte byte + + RGBXCH_NUMS_SIZE + 13 // byte int int byte byte short + + _cbGrpprlChpx + _cbGrpprlPapx + 2; // numberText length + if ( _numberText != null ) { - _numberText[x] = (char)LittleEndian.getShort(buf, offset); - offset += LittleEndian.SHORT_SIZE; + result += _numberText.length * LittleEndian.SHORT_SIZE; } + return result; } - } - - public int getStartAt() - { - return _iStartAt; - } - - public int getNumberFormat() - { - return _nfc; - } - - public int getAlignment() - { - return _jc.getValue(_info); - } - - public String getNumberText() - { - if (_numberText != null) - return new String(_numberText); - else - return null; - } - - /** - * "The type of character following the number text for the paragraph: 0 == tab, 1 == space, 2 == nothing." - */ - public byte getTypeOfCharFollowingTheNumber() - { - return this._ixchFollow; - } - - public void setStartAt(int startAt) - { - _iStartAt = startAt; - } - - public void setNumberFormat(int numberFormatCode) - { - _nfc = (byte)numberFormatCode; - } - - public void setAlignment(int alignment) - { - _jc.setValue(_info, alignment); - } - - public void setTypeOfCharFollowingTheNumber( byte value ) - { - this._ixchFollow = value; - } - - public void setNumberProperties(byte[] grpprl) - { - _grpprlChpx = grpprl; - - } - - public void setLevelProperties(byte[] grpprl) - { - _grpprlPapx = grpprl; - } - - public byte[] getLevelProperties() - { - return _grpprlPapx; - } - - public boolean equals(Object obj) - { - if (obj == null) + public int getStartAt() { - return false; + return _iStartAt; } - ListLevel lvl = (ListLevel)obj; - return _cbGrpprlChpx == lvl._cbGrpprlChpx && lvl._cbGrpprlPapx == _cbGrpprlPapx && - lvl._dxaIndent == _dxaIndent && lvl._dxaSpace == _dxaSpace && - Arrays.equals(lvl._grpprlChpx, _grpprlChpx) && - Arrays.equals(lvl._grpprlPapx, _grpprlPapx) && - lvl._info == _info && lvl._iStartAt == _iStartAt && - lvl._ixchFollow == _ixchFollow && lvl._nfc == _nfc && - Arrays.equals(lvl._numberText, _numberText) && - Arrays.equals(lvl._rgbxchNums, _rgbxchNums) && - lvl._reserved == _reserved; - - - } - public byte[] toByteArray() - { - byte[] buf = new byte[getSizeInBytes()]; - int offset = 0; - LittleEndian.putInt(buf, offset, _iStartAt); - offset += LittleEndian.INT_SIZE; - buf[offset++] = _nfc; - buf[offset++] = _info; - System.arraycopy(_rgbxchNums, 0, buf, offset, RGBXCH_NUMS_SIZE); - offset += RGBXCH_NUMS_SIZE; - buf[offset++] = _ixchFollow; - LittleEndian.putInt(buf, offset, _dxaSpace); - offset += LittleEndian.INT_SIZE; - LittleEndian.putInt(buf, offset, _dxaIndent); - offset += LittleEndian.INT_SIZE; - - buf[offset++] = (byte)_cbGrpprlChpx; - buf[offset++] = (byte)_cbGrpprlPapx; - LittleEndian.putShort(buf, offset, _reserved); - offset += LittleEndian.SHORT_SIZE; - - System.arraycopy(_grpprlPapx, 0, buf, offset, _cbGrpprlPapx); - offset += _cbGrpprlPapx; - System.arraycopy(_grpprlChpx, 0, buf, offset, _cbGrpprlChpx); - offset += _cbGrpprlChpx; - - if (_numberText == null) { - // TODO - write junit to test this flow - LittleEndian.putUShort(buf, offset, 0); - } else { - LittleEndian.putUShort(buf, offset, _numberText.length); - offset += LittleEndian.SHORT_SIZE; - for (int x = 0; x < _numberText.length; x++) - { - LittleEndian.putUShort(buf, offset, _numberText[x]); - offset += LittleEndian.SHORT_SIZE; - } + /** + * "The type of character following the number text for the paragraph: 0 == tab, 1 == space, 2 == nothing." + */ + public byte getTypeOfCharFollowingTheNumber() + { + return this._ixchFollow; + } + + public void setAlignment( int alignment ) + { + _jc.setValue( _info, alignment ); + } + + public void setLevelProperties( byte[] grpprl ) + { + _grpprlPapx = grpprl; + } + + public void setNumberFormat( int numberFormatCode ) + { + _nfc = (byte) numberFormatCode; + } + + public void setNumberProperties( byte[] grpprl ) + { + _grpprlChpx = grpprl; + } - return buf; - } - public int getSizeInBytes() - { - int result = - 6 // int byte byte - + RGBXCH_NUMS_SIZE - + 13 // byte int int byte byte short - + _cbGrpprlChpx - + _cbGrpprlPapx - + 2; // numberText length - if (_numberText != null) { - result += _numberText.length * LittleEndian.SHORT_SIZE; + + public void setStartAt( int startAt ) + { + _iStartAt = startAt; + } + + public void setTypeOfCharFollowingTheNumber( byte value ) + { + this._ixchFollow = value; + } + + public byte[] toByteArray() + { + byte[] buf = new byte[getSizeInBytes()]; + int offset = 0; + LittleEndian.putInt( buf, offset, _iStartAt ); + offset += LittleEndian.INT_SIZE; + buf[offset++] = _nfc; + buf[offset++] = _info; + System.arraycopy( _rgbxchNums, 0, buf, offset, RGBXCH_NUMS_SIZE ); + offset += RGBXCH_NUMS_SIZE; + buf[offset++] = _ixchFollow; + LittleEndian.putInt( buf, offset, _dxaSpace ); + offset += LittleEndian.INT_SIZE; + LittleEndian.putInt( buf, offset, _dxaIndent ); + offset += LittleEndian.INT_SIZE; + + buf[offset++] = (byte) _cbGrpprlChpx; + buf[offset++] = (byte) _cbGrpprlPapx; + LittleEndian.putShort( buf, offset, _reserved ); + offset += LittleEndian.SHORT_SIZE; + + System.arraycopy( _grpprlPapx, 0, buf, offset, _cbGrpprlPapx ); + offset += _cbGrpprlPapx; + System.arraycopy( _grpprlChpx, 0, buf, offset, _cbGrpprlChpx ); + offset += _cbGrpprlChpx; + + if ( _numberText == null ) + { + // TODO - write junit to test this flow + LittleEndian.putUShort( buf, offset, 0 ); + } + else + { + LittleEndian.putUShort( buf, offset, _numberText.length ); + offset += LittleEndian.SHORT_SIZE; + for ( int x = 0; x < _numberText.length; x++ ) + { + LittleEndian.putUShort( buf, offset, _numberText[x] ); + offset += LittleEndian.SHORT_SIZE; + } + } + return buf; } - return result; - } }