From: Josh Micich Date: Tue, 19 May 2009 19:21:12 +0000 (+0000) Subject: Changed CRLF to LF in poi/ddf, Minor fixes for compiler warnings, and formatting X-Git-Tag: REL_3_5_BETA6~21 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=4f6af6045aa829b1fdf27352673c12130e9c0c08;p=poi.git Changed CRLF to LF in poi/ddf, Minor fixes for compiler warnings, and formatting git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@776424 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/ddf/DefaultEscherRecordFactory.java b/src/java/org/apache/poi/ddf/DefaultEscherRecordFactory.java index f1d051d7be..57e8c6d32b 100644 --- a/src/java/org/apache/poi/ddf/DefaultEscherRecordFactory.java +++ b/src/java/org/apache/poi/ddf/DefaultEscherRecordFactory.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,10 +14,8 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - -package org.apache.poi.ddf; -import org.apache.poi.util.RecordFormatException; +package org.apache.poi.ddf; import java.lang.reflect.Constructor; import java.util.HashMap; @@ -32,21 +29,19 @@ import java.util.Map; * * @see EscherRecordFactory */ -public class DefaultEscherRecordFactory - implements EscherRecordFactory -{ - private static Class[] escherRecordClasses = { +public class DefaultEscherRecordFactory implements EscherRecordFactory { + private static Class[] escherRecordClasses = { EscherBSERecord.class, EscherOptRecord.class, EscherClientAnchorRecord.class, EscherDgRecord.class, EscherSpgrRecord.class, EscherSpRecord.class, EscherClientDataRecord.class, EscherDggRecord.class, EscherSplitMenuColorsRecord.class, EscherChildAnchorRecord.class, EscherTextboxRecord.class }; - private static Map recordsMap = recordsToMap( escherRecordClasses ); + private static Map> recordsMap = recordsToMap( escherRecordClasses ); /** * Creates an instance of the escher record factory */ - public DefaultEscherRecordFactory() - { + public DefaultEscherRecordFactory() { + // no instance initialisation } /** @@ -57,14 +52,13 @@ public class DefaultEscherRecordFactory * @param offset The starting offset into the byte array * @return The generated escher record */ - public EscherRecord createRecord( byte[] data, int offset ) - { + public EscherRecord createRecord(byte[] data, int offset) { EscherRecord.EscherRecordHeader header = EscherRecord.EscherRecordHeader.readHeader( data, offset ); - // Options of 0x000F means container record - // However, EscherTextboxRecord are containers of records for the - // host application, not of other Escher records, so treat them - // differently + // Options of 0x000F means container record + // However, EscherTextboxRecord are containers of records for the + // host application, not of other Escher records, so treat them + // differently if ( ( header.getOptions() & (short) 0x000F ) == (short) 0x000F && header.getRecordId() != EscherTextboxRecord.RECORD_ID ) { EscherContainerRecord r = new EscherContainerRecord(); @@ -72,8 +66,9 @@ public class DefaultEscherRecordFactory r.setOptions( header.getOptions() ); return r; } - else if ( header.getRecordId() >= EscherBlipRecord.RECORD_ID_START && header.getRecordId() <= EscherBlipRecord.RECORD_ID_END ) - { + + if (header.getRecordId() >= EscherBlipRecord.RECORD_ID_START + && header.getRecordId() <= EscherBlipRecord.RECORD_ID_END) { EscherBlipRecord r; if (header.getRecordId() == EscherBitmapBlip.RECORD_ID_DIB || header.getRecordId() == EscherBitmapBlip.RECORD_ID_JPEG || @@ -86,70 +81,62 @@ public class DefaultEscherRecordFactory header.getRecordId() == EscherMetafileBlip.RECORD_ID_PICT) { r = new EscherMetafileBlip(); - } - else - { + } else { r = new EscherBlipRecord(); } r.setRecordId( header.getRecordId() ); r.setOptions( header.getOptions() ); return r; } - else - { - Constructor recordConstructor = (Constructor) recordsMap.get( new Short( header.getRecordId() ) ); - EscherRecord escherRecord = null; - if ( recordConstructor != null ) - { - try - { - escherRecord = (EscherRecord) recordConstructor.newInstance( new Object[]{} ); - escherRecord.setRecordId( header.getRecordId() ); - escherRecord.setOptions( header.getOptions() ); - } - catch ( Exception e ) - { - escherRecord = null; - } - } - return escherRecord == null ? new UnknownEscherRecord() : escherRecord; + + Constructor recordConstructor = recordsMap.get(new Short(header.getRecordId())); + EscherRecord escherRecord = null; + if (recordConstructor == null) { + return new UnknownEscherRecord(); + } + try { + escherRecord = recordConstructor.newInstance(new Object[] {}); + } catch (Exception e) { + return new UnknownEscherRecord(); } + escherRecord.setRecordId(header.getRecordId()); + escherRecord.setOptions(header.getOptions()); + return escherRecord; } /** * Converts from a list of classes into a map that contains the record id as the key and * the Constructor in the value part of the map. It does this by using reflection to look up * the RECORD_ID field then using reflection again to find a reference to the constructor. - * - * @param records The records to convert + * + * @param recClasses The records to convert * @return The map containing the id/constructor pairs. */ - private static Map recordsToMap( Class[] records ) - { - Map result = new HashMap(); - Constructor constructor; - - for ( int i = 0; i < records.length; i++ ) - { - Class record = null; - short sid = 0; + private static Map> recordsToMap(Class[] recClasses) { + Map> result = new HashMap>(); + final Class[] EMPTY_CLASS_ARRAY = new Class[0]; - record = records[i]; - try - { - sid = record.getField( "RECORD_ID" ).getShort( null ); - constructor = record.getConstructor( new Class[] - { - } ); + for (int i = 0; i < recClasses.length; i++) { + @SuppressWarnings("unchecked") + Class recCls = (Class) recClasses[i]; + short sid; + try { + sid = recCls.getField("RECORD_ID").getShort(null); + } catch (IllegalArgumentException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } catch (NoSuchFieldException e) { + throw new RuntimeException(e); } - catch ( Exception illegalArgumentException ) - { - throw new RecordFormatException( - "Unable to determine record types" ); + Constructor constructor; + try { + constructor = recCls.getConstructor( EMPTY_CLASS_ARRAY ); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); } - result.put( new Short( sid ), constructor ); + result.put(new Short(sid), constructor); } return result; } - } diff --git a/src/java/org/apache/poi/ddf/EscherArrayProperty.java b/src/java/org/apache/poi/ddf/EscherArrayProperty.java index aea3262bb8..e3ad88a071 100644 --- a/src/java/org/apache/poi/ddf/EscherArrayProperty.java +++ b/src/java/org/apache/poi/ddf/EscherArrayProperty.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.LittleEndian; @@ -27,13 +26,11 @@ import org.apache.poi.util.HexDump; * * @author Glen Stampoultzis (glens at superlinksoftware.com) */ -public class EscherArrayProperty - extends EscherComplexProperty -{ - /** - * The size of the header that goes at the - * start of the array, before the data - */ +public final class EscherArrayProperty extends EscherComplexProperty { + /** + * The size of the header that goes at the + * start of the array, before the data + */ private static final int FIXED_SIZE = 3 * 2; /** * Normally, the size recorded in the simple data (for the complex @@ -47,112 +44,95 @@ public class EscherArrayProperty */ private boolean emptyComplexPart = false; - public EscherArrayProperty( short id, byte[] complexData ) - { - super( id, checkComplexData(complexData) ); + public EscherArrayProperty(short id, byte[] complexData) { + super(id, checkComplexData(complexData)); emptyComplexPart = complexData.length == 0; } - public EscherArrayProperty( short propertyNumber, boolean isBlipId, byte[] complexData ) - { - super( propertyNumber, isBlipId, checkComplexData(complexData) ); + public EscherArrayProperty(short propertyNumber, boolean isBlipId, byte[] complexData) { + super(propertyNumber, isBlipId, checkComplexData(complexData)); } - private static byte[] checkComplexData( byte[] complexData ) - { - if (complexData == null || complexData.length == 0) - complexData = new byte[6]; + private static byte[] checkComplexData(byte[] complexData) { + if (complexData == null || complexData.length == 0) { + return new byte[6]; + } return complexData; } - public int getNumberOfElementsInArray() - { - return LittleEndian.getUShort( complexData, 0 ); + public int getNumberOfElementsInArray() { + return LittleEndian.getUShort(_complexData, 0); } - public void setNumberOfElementsInArray( int numberOfElements ) - { + public void setNumberOfElementsInArray(int numberOfElements) { int expectedArraySize = numberOfElements * getActualSizeOfElements(getSizeOfElements()) + FIXED_SIZE; - if ( expectedArraySize != complexData.length ) - { + if (expectedArraySize != _complexData.length) { byte[] newArray = new byte[expectedArraySize]; - System.arraycopy( complexData, 0, newArray, 0, complexData.length ); - complexData = newArray; + System.arraycopy(_complexData, 0, newArray, 0, _complexData.length); + _complexData = newArray; } - LittleEndian.putShort( complexData, 0, (short) numberOfElements ); + LittleEndian.putShort(_complexData, 0, (short) numberOfElements); } - public int getNumberOfElementsInMemory() - { - return LittleEndian.getUShort( complexData, 2 ); + public int getNumberOfElementsInMemory() { + return LittleEndian.getUShort(_complexData, 2); } - public void setNumberOfElementsInMemory( int numberOfElements ) - { + public void setNumberOfElementsInMemory(int numberOfElements) { int expectedArraySize = numberOfElements * getActualSizeOfElements(getSizeOfElements()) + FIXED_SIZE; - if ( expectedArraySize != complexData.length ) - { + if (expectedArraySize != _complexData.length) { byte[] newArray = new byte[expectedArraySize]; - System.arraycopy( complexData, 0, newArray, 0, expectedArraySize ); - complexData = newArray; + System.arraycopy(_complexData, 0, newArray, 0, expectedArraySize); + _complexData = newArray; } - LittleEndian.putShort( complexData, 2, (short) numberOfElements ); + LittleEndian.putShort(_complexData, 2, (short) numberOfElements); } - public short getSizeOfElements() - { - return LittleEndian.getShort( complexData, 4 ); + public short getSizeOfElements() { + return LittleEndian.getShort( _complexData, 4 ); } - public void setSizeOfElements( int sizeOfElements ) - { - LittleEndian.putShort( complexData, 4, (short) sizeOfElements ); + public void setSizeOfElements(int sizeOfElements) { + LittleEndian.putShort( _complexData, 4, (short) sizeOfElements ); int expectedArraySize = getNumberOfElementsInArray() * getActualSizeOfElements(getSizeOfElements()) + FIXED_SIZE; - if ( expectedArraySize != complexData.length ) - { + if (expectedArraySize != _complexData.length) { // Keep just the first 6 bytes. The rest is no good to us anyway. byte[] newArray = new byte[expectedArraySize]; - System.arraycopy( complexData, 0, newArray, 0, 6 ); - complexData = newArray; + System.arraycopy( _complexData, 0, newArray, 0, 6 ); + _complexData = newArray; } } - public byte[] getElement( int index ) - { + public byte[] getElement(int index) { int actualSize = getActualSizeOfElements(getSizeOfElements()); byte[] result = new byte[actualSize]; - System.arraycopy(complexData, FIXED_SIZE + index * actualSize, result, 0, result.length ); + System.arraycopy(_complexData, FIXED_SIZE + index * actualSize, result, 0, result.length ); return result; } - public void setElement( int index, byte[] element ) - { + public void setElement(int index, byte[] element) { int actualSize = getActualSizeOfElements(getSizeOfElements()); - System.arraycopy( element, 0, complexData, FIXED_SIZE + index * actualSize, actualSize); + System.arraycopy( element, 0, _complexData, FIXED_SIZE + index * actualSize, actualSize); } - public String toString() - { - String nl = System.getProperty("line.separator"); - + public String toString() { StringBuffer results = new StringBuffer(); - results.append(" {EscherArrayProperty:" + nl); - results.append(" Num Elements: " + getNumberOfElementsInArray() + nl); - results.append(" Num Elements In Memory: " + getNumberOfElementsInMemory() + nl); - results.append(" Size of elements: " + getSizeOfElements() + nl); - for (int i = 0; i < getNumberOfElementsInArray(); i++) - { - results.append(" Element " + i + ": " + HexDump.toHex(getElement(i)) + nl); + results.append(" {EscherArrayProperty:" + '\n'); + results.append(" Num Elements: " + getNumberOfElementsInArray() + '\n'); + results.append(" Num Elements In Memory: " + getNumberOfElementsInMemory() + '\n'); + results.append(" Size of elements: " + getSizeOfElements() + '\n'); + for (int i = 0; i < getNumberOfElementsInArray(); i++) { + results.append(" Element " + i + ": " + HexDump.toHex(getElement(i)) + '\n'); } - results.append("}" + nl); + results.append("}" + '\n'); return "propNum: " + getPropertyNumber() + ", propName: " + EscherProperties.getPropertyName( getPropertyNumber() ) + ", complex: " + isComplex() + ", blipId: " + isBlipId() - + ", data: " + nl + results.toString(); + + ", data: " + '\n' + results.toString(); } /** @@ -165,38 +145,36 @@ public class EscherArrayProperty * @param offset The offset into the array to start reading from. * @return the number of bytes used by this complex property. */ - public int setArrayData( byte[] data, int offset ) - { + public int setArrayData(byte[] data, int offset) { if (emptyComplexPart){ - complexData = new byte[0]; + _complexData = new byte[0]; } else { short numElements = LittleEndian.getShort(data, offset); - short numReserved = LittleEndian.getShort(data, offset + 2); + LittleEndian.getShort(data, offset + 2); // numReserved short sizeOfElements = LittleEndian.getShort(data, offset + 4); int arraySize = getActualSizeOfElements(sizeOfElements) * numElements; - if (arraySize == complexData.length) { + if (arraySize == _complexData.length) { // The stored data size in the simple block excludes the header size - complexData = new byte[arraySize + 6]; + _complexData = new byte[arraySize + 6]; sizeIncludesHeaderSize = false; } - System.arraycopy(data, offset, complexData, 0, complexData.length ); + System.arraycopy(data, offset, _complexData, 0, _complexData.length ); } - return complexData.length; + return _complexData.length; } /** * Serializes the simple part of this property. ie the first 6 bytes. - * - * Needs special code to handle the case when the size doesn't + * + * Needs special code to handle the case when the size doesn't * include the size of the header block */ - public int serializeSimplePart( byte[] data, int pos ) - { + public int serializeSimplePart(byte[] data, int pos) { LittleEndian.putShort(data, pos, getId()); - int recordSize = complexData.length; + int recordSize = _complexData.length; if(!sizeIncludesHeaderSize) { - recordSize -= 6; + recordSize -= 6; } LittleEndian.putInt(data, pos + 2, recordSize); return 6; @@ -206,12 +184,10 @@ public class EscherArrayProperty * Sometimes the element size is stored as a negative number. We * negate it and shift it to get the real value. */ - public static int getActualSizeOfElements(short sizeOfElements) - { - if (sizeOfElements < 0) + public static int getActualSizeOfElements(short sizeOfElements) { + if (sizeOfElements < 0) { return (short) ( ( -sizeOfElements ) >> 2 ); - else - return sizeOfElements; + } + return sizeOfElements; } - } diff --git a/src/java/org/apache/poi/ddf/EscherBSERecord.java b/src/java/org/apache/poi/ddf/EscherBSERecord.java index a1c52b4d48..cfe4fe1028 100644 --- a/src/java/org/apache/poi/ddf/EscherBSERecord.java +++ b/src/java/org/apache/poi/ddf/EscherBSERecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,14 +14,12 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndian; -import java.io.ByteArrayOutputStream; - /** * The BSE record is related closely to the EscherBlipRecord and stores * extra information about the blip. A blip record is actually stored inside @@ -31,9 +28,7 @@ import java.io.ByteArrayOutputStream; * @author Glen Stampoultzis * @see EscherBlipRecord */ -public class EscherBSERecord - extends EscherRecord -{ +public final class EscherBSERecord extends EscherRecord { public static final short RECORD_ID = (short) 0xF007; public static final String RECORD_DESCRIPTION = "MsofbtBSE"; @@ -59,20 +54,9 @@ public class EscherBSERecord private byte field_11_unused3; private EscherBlipRecord field_12_blipRecord; - private byte[] remainingData; + private byte[] _remainingData; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, - EscherRecordFactory recordFactory - ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; field_1_blipTypeWin32 = data[pos]; @@ -87,53 +71,33 @@ public class EscherBSERecord field_10_unused2 = data[pos + 34]; field_11_unused3 = data[pos + 35]; bytesRemaining -= 36; - + int bytesRead = 0; if (bytesRemaining > 0) { - // Some older escher formats skip this last record + // Some older escher formats skip this last record field_12_blipRecord = (EscherBlipRecord) recordFactory.createRecord( data, pos + 36 ); bytesRead = field_12_blipRecord.fillFields( data, pos + 36, recordFactory ); } pos += 36 + bytesRead; bytesRemaining -= bytesRead; -// if (field_1_blipTypeWin32 == BT_PNG) -// { -// byte[] uid = new byte[16]; -// System.arraycopy( data, pos + 36, uid, 0, 16 ); -// byte[] puid = new byte[16]; -// System.arraycopy( data, pos + 52, puid, 0, 16 ); -// byte tag = data[pos+68]; -// System.out.println( HexDump.dump( data, 0, 0 ) ); -// byte[] pngBytes = EscherBlipRecord.decompress( data, pos+69, bytesRemaining); -// } - - remainingData = new byte[bytesRemaining]; - System.arraycopy( data, pos, remainingData, 0, bytesRemaining ); + + _remainingData = new byte[bytesRemaining]; + System.arraycopy( data, pos, _remainingData, 0, bytesRemaining ); return bytesRemaining + 8 + 36 + (field_12_blipRecord == null ? 0 : field_12_blipRecord.getRecordSize()) ; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * @see NullEscherSerializationListener - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize( offset, getRecordId(), this ); - if (remainingData == null) - remainingData = new byte[0]; + if (_remainingData == null) + _remainingData = new byte[0]; LittleEndian.putShort( data, offset, getOptions() ); LittleEndian.putShort( data, offset + 2, getRecordId() ); - if (remainingData == null) remainingData = new byte[0]; + if (_remainingData == null) _remainingData = new byte[0]; int blipSize = field_12_blipRecord == null ? 0 : field_12_blipRecord.getRecordSize(); - int remainingBytes = remainingData.length + 36 + blipSize; + int remainingBytes = _remainingData.length + 36 + blipSize; LittleEndian.putInt( data, offset + 4, remainingBytes ); data[offset + 8] = field_1_blipTypeWin32; @@ -153,39 +117,29 @@ public class EscherBSERecord { bytesWritten = field_12_blipRecord.serialize( offset + 44, data, new NullEscherSerializationListener() ); } - if (remainingData == null) - remainingData = new byte[0]; - System.arraycopy( remainingData, 0, data, offset + 44 + bytesWritten, remainingData.length ); - int pos = offset + 8 + 36 + remainingData.length + bytesWritten; + if (_remainingData == null) + _remainingData = new byte[0]; + System.arraycopy( _remainingData, 0, data, offset + 44 + bytesWritten, _remainingData.length ); + int pos = offset + 8 + 36 + _remainingData.length + bytesWritten; listener.afterRecordSerialize(pos, getRecordId(), pos - offset, this); return pos - offset; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ - public int getRecordSize() - { - int field_12_size = 0; - if(field_12_blipRecord != null) { - field_12_size = field_12_blipRecord.getRecordSize(); - } - int remaining_size = 0; - if(remainingData != null) { - remaining_size = remainingData.length; - } + public int getRecordSize() { + int field_12_size = 0; + if(field_12_blipRecord != null) { + field_12_size = field_12_blipRecord.getRecordSize(); + } + int remaining_size = 0; + if(_remainingData != null) { + remaining_size = _remainingData.length; + } return 8 + 1 + 1 + 16 + 2 + 4 + 4 + 4 + 1 + 1 + 1 + 1 + field_12_size + remaining_size; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "BSE"; } @@ -193,260 +147,205 @@ public class EscherBSERecord * The expected blip type under windows (failure to match this blip type will result in * Excel converting to this format). */ - public byte getBlipTypeWin32() - { + public byte getBlipTypeWin32() { return field_1_blipTypeWin32; } /** * Set the expected win32 blip type */ - public void setBlipTypeWin32( byte blipTypeWin32 ) - { - this.field_1_blipTypeWin32 = blipTypeWin32; + public void setBlipTypeWin32(byte blipTypeWin32) { + field_1_blipTypeWin32 = blipTypeWin32; } /** * The expected blip type under MacOS (failure to match this blip type will result in * Excel converting to this format). */ - public byte getBlipTypeMacOS() - { + public byte getBlipTypeMacOS() { return field_2_blipTypeMacOS; } /** * Set the expected MacOS blip type */ - public void setBlipTypeMacOS( byte blipTypeMacOS ) - { - this.field_2_blipTypeMacOS = blipTypeMacOS; + public void setBlipTypeMacOS(byte blipTypeMacOS) { + field_2_blipTypeMacOS = blipTypeMacOS; } /** * 16 byte MD4 checksum. */ - public byte[] getUid() - { + public byte[] getUid() { return field_3_uid; } /** * 16 byte MD4 checksum. */ - public void setUid( byte[] uid ) - { - this.field_3_uid = uid; + public void setUid(byte[] uid) { + field_3_uid = uid; } /** * unused */ - public short getTag() - { + public short getTag() { return field_4_tag; } /** * unused */ - public void setTag( short tag ) - { - this.field_4_tag = tag; + public void setTag(short tag) { + field_4_tag = tag; } /** * Blip size in stream. */ - public int getSize() - { + public int getSize() { return field_5_size; } /** * Blip size in stream. */ - public void setSize( int size ) - { - this.field_5_size = size; + public void setSize(int size) { + field_5_size = size; } /** * The reference count of this blip. */ - public int getRef() - { + public int getRef() { return field_6_ref; } /** * The reference count of this blip. */ - public void setRef( int ref ) - { - this.field_6_ref = ref; + public void setRef(int ref) { + field_6_ref = ref; } /** * File offset in the delay stream. */ - public int getOffset() - { + public int getOffset() { return field_7_offset; } /** * File offset in the delay stream. */ - public void setOffset( int offset ) - { - this.field_7_offset = offset; + public void setOffset(int offset) { + field_7_offset = offset; } /** * Defines the way this blip is used. */ - public byte getUsage() - { + public byte getUsage() { return field_8_usage; } /** * Defines the way this blip is used. */ - public void setUsage( byte usage ) - { - this.field_8_usage = usage; + public void setUsage(byte usage) { + field_8_usage = usage; } /** * The length in characters of the blip name. */ - public byte getName() - { + public byte getName() { return field_9_name; } /** * The length in characters of the blip name. */ - public void setName( byte name ) - { - this.field_9_name = name; + public void setName(byte name) { + field_9_name = name; } - public byte getUnused2() - { + public byte getUnused2() { return field_10_unused2; } - public void setUnused2( byte unused2 ) - { - this.field_10_unused2 = unused2; + public void setUnused2(byte unused2) { + field_10_unused2 = unused2; } - public byte getUnused3() - { + public byte getUnused3() { return field_11_unused3; } - public void setUnused3( byte unused3 ) - { - this.field_11_unused3 = unused3; + public void setUnused3(byte unused3) { + field_11_unused3 = unused3; } - public EscherBlipRecord getBlipRecord() - { + public EscherBlipRecord getBlipRecord() { return field_12_blipRecord; } - public void setBlipRecord( EscherBlipRecord field_12_blipRecord ) - { - this.field_12_blipRecord = field_12_blipRecord; + public void setBlipRecord(EscherBlipRecord blipRecord) { + field_12_blipRecord = blipRecord; } /** * Any remaining data in this record. */ - public byte[] getRemainingData() - { - return remainingData; + public byte[] getRemainingData() { + return _remainingData; } /** * Any remaining data in this record. */ - public void setRemainingData( byte[] remainingData ) - { - this.remainingData = remainingData; - } - - /** - * Calculate the string representation of this object - */ - public String toString() - { - String nl = System.getProperty( "line.separator" ); - - String extraData; - ByteArrayOutputStream b = new ByteArrayOutputStream(); - try - { - HexDump.dump( this.remainingData, 0, b, 0 ); - extraData = b.toString(); - } - catch ( Exception e ) - { - extraData = e.toString(); - } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex( RECORD_ID ) + nl + - " Options: 0x" + HexDump.toHex( getOptions() ) + nl + - " BlipTypeWin32: " + field_1_blipTypeWin32 + nl + - " BlipTypeMacOS: " + field_2_blipTypeMacOS + nl + - " SUID: " + HexDump.toHex(field_3_uid) + nl + - " Tag: " + field_4_tag + nl + - " Size: " + field_5_size + nl + - " Ref: " + field_6_ref + nl + - " Offset: " + field_7_offset + nl + - " Usage: " + field_8_usage + nl + - " Name: " + field_9_name + nl + - " Unused2: " + field_10_unused2 + nl + - " Unused3: " + field_11_unused3 + nl + - " blipRecord: " + field_12_blipRecord + nl + - " Extra Data:" + nl + extraData; + public void setRemainingData(byte[] remainingData) { + _remainingData = remainingData; + } + + public String toString() { + String extraData = HexDump.toHex(_remainingData, 32); + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex( RECORD_ID ) + '\n' + + " Options: 0x" + HexDump.toHex( getOptions() ) + '\n' + + " BlipTypeWin32: " + field_1_blipTypeWin32 + '\n' + + " BlipTypeMacOS: " + field_2_blipTypeMacOS + '\n' + + " SUID: " + HexDump.toHex(field_3_uid) + '\n' + + " Tag: " + field_4_tag + '\n' + + " Size: " + field_5_size + '\n' + + " Ref: " + field_6_ref + '\n' + + " Offset: " + field_7_offset + '\n' + + " Usage: " + field_8_usage + '\n' + + " Name: " + field_9_name + '\n' + + " Unused2: " + field_10_unused2 + '\n' + + " Unused3: " + field_11_unused3 + '\n' + + " blipRecord: " + field_12_blipRecord + '\n' + + " Extra Data:" + '\n' + extraData; } /** * Retrieve the string representation given a blip id. */ - public String getBlipType( byte b ) - { - switch ( b ) - { - case BT_ERROR: - return " ERROR"; - case BT_UNKNOWN: - return " UNKNOWN"; - case BT_EMF: - return " EMF"; - case BT_WMF: - return " WMF"; - case BT_PICT: - return " PICT"; - case BT_JPEG: - return " JPEG"; - case BT_PNG: - return " PNG"; - case BT_DIB: - return " DIB"; - default: - if ( b < 32 ) - return " NotKnown"; - else - return " Client"; + public static String getBlipType(byte b) { + switch (b) { + case BT_ERROR: return " ERROR"; + case BT_UNKNOWN: return " UNKNOWN"; + case BT_EMF: return " EMF"; + case BT_WMF: return " WMF"; + case BT_PICT: return " PICT"; + case BT_JPEG: return " JPEG"; + case BT_PNG: return " PNG"; + case BT_DIB: return " DIB"; } + if ( b < 32 ) { + return " NotKnown"; + } + return " Client"; } - - } diff --git a/src/java/org/apache/poi/ddf/EscherBitmapBlip.java b/src/java/org/apache/poi/ddf/EscherBitmapBlip.java index 6abc7b2792..defbc9cb3b 100644 --- a/src/java/org/apache/poi/ddf/EscherBitmapBlip.java +++ b/src/java/org/apache/poi/ddf/EscherBitmapBlip.java @@ -25,9 +25,7 @@ import java.io.ByteArrayOutputStream; * @author Glen Stampoultzis * @version $Id$ */ -public class EscherBitmapBlip - extends EscherBlipRecord -{ +public class EscherBitmapBlip extends EscherBlipRecord { public static final short RECORD_ID_JPEG = (short) 0xF018 + 5; public static final short RECORD_ID_PNG = (short) 0xF018 + 6; public static final short RECORD_ID_DIB = (short) 0xF018 + 7; @@ -37,17 +35,7 @@ public class EscherBitmapBlip private byte[] field_1_UID; private byte field_2_marker = (byte) 0xFF; - - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesAfterHeader = readHeader( data, offset ); int pos = offset + HEADER_SIZE; @@ -61,17 +49,6 @@ public class EscherBitmapBlip return bytesAfterHeader + HEADER_SIZE; } - /** - * Serializes the record to an existing byte array. - * - * @param offset the offset within the byte array - * @param data the data array to serialize to - * @param listener a listener for begin and end serialization events. This - * is useful because the serialization is - * hierarchical/recursive and sometimes you need to be able - * break into that. - * @return the number of bytes written. - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize(offset, getRecordId(), this); @@ -89,11 +66,6 @@ public class EscherBitmapBlip return HEADER_SIZE + 16 + 1 + field_pictureData.length; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + 16 + 1 + field_pictureData.length; @@ -141,5 +113,4 @@ public class EscherBitmapBlip " Marker: 0x" + HexDump.toHex( field_2_marker ) + nl + " Extra Data:" + nl + extraData; } - } diff --git a/src/java/org/apache/poi/ddf/EscherBlipRecord.java b/src/java/org/apache/poi/ddf/EscherBlipRecord.java index a7e7d84365..48c0c2b292 100644 --- a/src/java/org/apache/poi/ddf/EscherBlipRecord.java +++ b/src/java/org/apache/poi/ddf/EscherBlipRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,21 +14,16 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.HexDump; -import java.io.ByteArrayOutputStream; - /** * @author Glen Stampoultzis - * @version $Id$ */ -public class EscherBlipRecord - extends EscherRecord -{ +public class EscherBlipRecord extends EscherRecord { // TODO - instantiable superclass public static final short RECORD_ID_START = (short) 0xF018; public static final short RECORD_ID_END = (short) 0xF117; public static final String RECORD_DESCRIPTION = "msofbtBlip"; @@ -38,20 +32,10 @@ public class EscherBlipRecord protected byte[] field_pictureData; - public EscherBlipRecord() - { + public EscherBlipRecord() { } - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesAfterHeader = readHeader( data, offset ); int pos = offset + HEADER_SIZE; @@ -61,19 +45,7 @@ public class EscherBlipRecord return bytesAfterHeader + 8; } - /** - * Serializes the record to an existing byte array. - * - * @param offset the offset within the byte array - * @param data the data array to serialize to - * @param listener a listener for begin and end serialization events. This - * is useful because the serialization is - * hierarchical/recursive and sometimes you need to be able - * break into that. - * @return the number of bytes written. - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize(offset, getRecordId(), this); LittleEndian.putShort( data, offset, getOptions() ); @@ -85,53 +57,27 @@ public class EscherBlipRecord return field_pictureData.length + 4; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ - public int getRecordSize() - { + public int getRecordSize() { return field_pictureData.length + HEADER_SIZE; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Blip"; } - public byte[] getPicturedata() - { + public byte[] getPicturedata() { return field_pictureData; } - public void setPictureData(byte[] pictureData) - { + public void setPictureData(byte[] pictureData) { field_pictureData = pictureData; } - public String toString() - { - String nl = System.getProperty( "line.separator" ); - - String extraData; - ByteArrayOutputStream b = new ByteArrayOutputStream(); - try - { - HexDump.dump( this.field_pictureData, 0, b, 0 ); - extraData = b.toString(); - } - catch ( Exception e ) - { - extraData = e.toString(); - } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex( getRecordId() ) + nl + - " Options: 0x" + HexDump.toHex( getOptions() ) + nl + - " Extra Data:" + nl + extraData; - + public String toString() { + String extraData = HexDump.toHex(field_pictureData, 32); + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex( getRecordId() ) + '\n' + + " Options: 0x" + HexDump.toHex( getOptions() ) + '\n' + + " Extra Data:" + '\n' + extraData; } } diff --git a/src/java/org/apache/poi/ddf/EscherBlipWMFRecord.java b/src/java/org/apache/poi/ddf/EscherBlipWMFRecord.java index c307d2b0d5..f544dbe90c 100644 --- a/src/java/org/apache/poi/ddf/EscherBlipWMFRecord.java +++ b/src/java/org/apache/poi/ddf/EscherBlipWMFRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -58,19 +58,7 @@ public class EscherBlipWMFRecord private byte field_11_filter; private byte[] field_12_data; - - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, - EscherRecordFactory recordFactory - ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesAfterHeader = readHeader( data, offset ); int pos = offset + HEADER_SIZE; @@ -96,17 +84,6 @@ public class EscherBlipWMFRecord return HEADER_SIZE + size; } - - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * - * @see NullEscherSerializationListener - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize(offset, getRecordId(), this); @@ -134,21 +111,12 @@ public class EscherBlipWMFRecord return pos - offset; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 58 + field_12_data.length; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Blip"; } diff --git a/src/java/org/apache/poi/ddf/EscherBoolProperty.java b/src/java/org/apache/poi/ddf/EscherBoolProperty.java index ffd917e5ca..cf69299f66 100644 --- a/src/java/org/apache/poi/ddf/EscherBoolProperty.java +++ b/src/java/org/apache/poi/ddf/EscherBoolProperty.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** diff --git a/src/java/org/apache/poi/ddf/EscherChildAnchorRecord.java b/src/java/org/apache/poi/ddf/EscherChildAnchorRecord.java index f97448b65c..15f729298e 100644 --- a/src/java/org/apache/poi/ddf/EscherChildAnchorRecord.java +++ b/src/java/org/apache/poi/ddf/EscherChildAnchorRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -39,16 +39,7 @@ public class EscherChildAnchorRecord private int field_3_dx2; private int field_4_dy2; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; @@ -59,17 +50,7 @@ public class EscherChildAnchorRecord return 8 + size; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * @see NullEscherSerializationListener - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize( offset, getRecordId(), this ); int pos = offset; LittleEndian.putShort( data, pos, getOptions() ); pos += 2; @@ -84,32 +65,20 @@ public class EscherChildAnchorRecord return pos - offset; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + 4 * 4; } - /** - * The record id for the EscherChildAnchorRecord. - */ - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "ChildAnchor"; } + /** * The string representation of this record */ diff --git a/src/java/org/apache/poi/ddf/EscherClientAnchorRecord.java b/src/java/org/apache/poi/ddf/EscherClientAnchorRecord.java index ec3354c599..4f96247329 100644 --- a/src/java/org/apache/poi/ddf/EscherClientAnchorRecord.java +++ b/src/java/org/apache/poi/ddf/EscherClientAnchorRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -50,16 +50,7 @@ public class EscherClientAnchorRecord private byte[] remainingData; private boolean shortRecord = false; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; @@ -92,15 +83,6 @@ public class EscherClientAnchorRecord return 8 + size + bytesRemaining; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * @see NullEscherSerializationListener - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize( offset, getRecordId(), this ); @@ -128,29 +110,16 @@ public class EscherClientAnchorRecord return pos - offset; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + (shortRecord ? 8 : 18) + (remainingData == null ? 0 : remainingData.length); } - /** - * The record id for this record. - */ - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "ClientAnchor"; } diff --git a/src/java/org/apache/poi/ddf/EscherClientDataRecord.java b/src/java/org/apache/poi/ddf/EscherClientDataRecord.java index 92056334da..7dc9627122 100644 --- a/src/java/org/apache/poi/ddf/EscherClientDataRecord.java +++ b/src/java/org/apache/poi/ddf/EscherClientDataRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -37,16 +37,7 @@ public class EscherClientDataRecord private byte[] remainingData; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; remainingData = new byte[bytesRemaining]; @@ -54,17 +45,7 @@ public class EscherClientDataRecord return 8 + bytesRemaining; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * @see NullEscherSerializationListener - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize( offset, getRecordId(), this ); if (remainingData == null) remainingData = new byte[0]; @@ -78,29 +59,16 @@ public class EscherClientDataRecord return pos - offset; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + (remainingData == null ? 0 : remainingData.length); } - /** - * Returns the identifier of this record. - */ - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "ClientData"; } diff --git a/src/java/org/apache/poi/ddf/EscherComplexProperty.java b/src/java/org/apache/poi/ddf/EscherComplexProperty.java index 5f0fc7241e..fa822f7f49 100644 --- a/src/java/org/apache/poi/ddf/EscherComplexProperty.java +++ b/src/java/org/apache/poi/ddf/EscherComplexProperty.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,15 +14,13 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - -package org.apache.poi.ddf; -import org.apache.poi.util.LittleEndian; -import org.apache.poi.util.HexDump; +package org.apache.poi.ddf; import java.util.Arrays; -import java.io.ByteArrayOutputStream; -import java.io.IOException; + +import org.apache.poi.util.HexDump; +import org.apache.poi.util.LittleEndian; /** * A complex property differs from a simple property in that the data can not fit inside a 32 bit @@ -32,10 +29,9 @@ import java.io.IOException; * * @author Glen Stampoultzis */ -public class EscherComplexProperty - extends EscherProperty -{ - byte[] complexData = new byte[0]; +public class EscherComplexProperty extends EscherProperty { + // TODO - make private and final + protected byte[] _complexData; /** * Create a complex property using the property id and a byte array containing the complex @@ -45,10 +41,9 @@ public class EscherComplexProperty * indicating that this is a complex property. * @param complexData The value of this property. */ - public EscherComplexProperty( short id, byte[] complexData ) - { - super( id ); - this.complexData = complexData; + public EscherComplexProperty(short id, byte[] complexData) { + super(id); + _complexData = complexData; } /** @@ -59,19 +54,17 @@ public class EscherComplexProperty * @param isBlipId Whether this is a blip id. Should be false. * @param complexData The value of this complex property. */ - public EscherComplexProperty( short propertyNumber, boolean isBlipId, byte[] complexData ) - { - super( propertyNumber, true, isBlipId ); - this.complexData = complexData; + public EscherComplexProperty(short propertyNumber, boolean isBlipId, byte[] complexData) { + super(propertyNumber, true, isBlipId); + _complexData = complexData; } /** - * Serializes the simple part of this property. ie the first 6 bytes. + * Serializes the simple part of this property. i.e. the first 6 bytes. */ - public int serializeSimplePart( byte[] data, int pos ) - { + public int serializeSimplePart(byte[] data, int pos) { LittleEndian.putShort(data, pos, getId()); - LittleEndian.putInt(data, pos + 2, complexData.length); + LittleEndian.putInt(data, pos + 2, _complexData.length); return 6; } @@ -82,18 +75,16 @@ public class EscherComplexProperty * @param pos The offset within data to start serializing to. * @return The number of bytes serialized. */ - public int serializeComplexPart( byte[] data, int pos ) - { - System.arraycopy(complexData, 0, data, pos, complexData.length); - return complexData.length; + public int serializeComplexPart(byte[] data, int pos) { + System.arraycopy(_complexData, 0, data, pos, _complexData.length); + return _complexData.length; } /** * Get the complex data value. */ - public byte[] getComplexData() - { - return complexData; + public byte[] getComplexData() { + return _complexData; } /** @@ -102,63 +93,39 @@ public class EscherComplexProperty * @param o The object to compare to. * @return True if the objects are equal. */ - public boolean equals( Object o ) - { - if ( this == o ) return true; - if ( !( o instanceof EscherComplexProperty ) ) return false; + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof EscherComplexProperty)) { + return false; + } - final EscherComplexProperty escherComplexProperty = (EscherComplexProperty) o; + EscherComplexProperty escherComplexProperty = (EscherComplexProperty) o; - if ( !Arrays.equals( complexData, escherComplexProperty.complexData ) ) return false; + if ( !Arrays.equals( _complexData, escherComplexProperty._complexData ) ) return false; return true; } /** - * Caclulates the number of bytes required to serialize this property. + * Calculates the number of bytes required to serialize this property. * * @return Number of bytes */ - public int getPropertySize() - { - return 6 + complexData.length; + public int getPropertySize() { + return 6 + _complexData.length; } - /** - * Calculates a hashcode for this property. - */ - public int hashCode() - { + public int hashCode() { return getId() * 11; } /** * Retrieves the string representation for this property. */ - public String toString() - { - String dataStr; - ByteArrayOutputStream b = new ByteArrayOutputStream(); - try - { - HexDump.dump( this.complexData, 0, b, 0 ); - dataStr = b.toString(); - } - catch ( Exception e ) - { - dataStr = e.toString(); - } - finally - { - try - { - b.close(); - } - catch ( IOException e ) - { - e.printStackTrace(); - } - } + public String toString() { + String dataStr = HexDump.toHex( _complexData, 32); return "propNum: " + getPropertyNumber() + ", propName: " + EscherProperties.getPropertyName( getPropertyNumber() ) diff --git a/src/java/org/apache/poi/ddf/EscherDgRecord.java b/src/java/org/apache/poi/ddf/EscherDgRecord.java index 3cae99b996..a96bffa861 100644 --- a/src/java/org/apache/poi/ddf/EscherDgRecord.java +++ b/src/java/org/apache/poi/ddf/EscherDgRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -36,16 +36,7 @@ public class EscherDgRecord private int field_1_numShapes; private int field_2_lastMSOSPID; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; @@ -57,15 +48,6 @@ public class EscherDgRecord return getRecordSize(); } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * @see NullEscherSerializationListener - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize( offset, getRecordId(), this ); @@ -92,42 +74,23 @@ public class EscherDgRecord return 8 + 8; } - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Dg"; } /** * Returns the string representation of this record. */ - public String toString() - { - String nl = System.getProperty("line.separator"); - -// String extraData; -// ByteArrayOutputStream b = new ByteArrayOutputStream(); -// try -// { -// HexDump.dump(this.remainingData, 0, b, 0); -// extraData = b.toString(); -// } -// catch ( Exception e ) -// { -// extraData = "error"; -// } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex(RECORD_ID) + nl + - " Options: 0x" + HexDump.toHex(getOptions()) + nl + - " NumShapes: " + field_1_numShapes + nl + - " LastMSOSPID: " + field_2_lastMSOSPID + nl; + public String toString() { + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex(RECORD_ID) + '\n' + + " Options: 0x" + HexDump.toHex(getOptions()) + '\n' + + " NumShapes: " + field_1_numShapes + '\n' + + " LastMSOSPID: " + field_2_lastMSOSPID + '\n'; } diff --git a/src/java/org/apache/poi/ddf/EscherDggRecord.java b/src/java/org/apache/poi/ddf/EscherDggRecord.java index cc0d3aef8e..2266d127ae 100644 --- a/src/java/org/apache/poi/ddf/EscherDggRecord.java +++ b/src/java/org/apache/poi/ddf/EscherDggRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -27,9 +26,7 @@ import java.util.*; /** * This record defines the drawing groups used for a particular sheet. */ -public class EscherDggRecord - extends EscherRecord -{ +public final class EscherDggRecord extends EscherRecord { public static final short RECORD_ID = (short) 0xF006; public static final String RECORD_DESCRIPTION = "MsofbtDgg"; @@ -67,21 +64,12 @@ public class EscherDggRecord } } - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; field_1_shapeIdMax = LittleEndian.getInt( data, pos + size );size+=4; - int field_2_numIdClusters = LittleEndian.getInt( data, pos + size );size+=4; + LittleEndian.getInt( data, pos + size );size+=4; // field_2_numIdClusters field_3_numShapesSaved = LittleEndian.getInt( data, pos + size );size+=4; field_4_drawingsSaved = LittleEndian.getInt( data, pos + size );size+=4; field_5_fileIdClusters = new FileIdCluster[(bytesRemaining-size) / 8]; // Can't rely on field_2_numIdClusters @@ -97,18 +85,7 @@ public class EscherDggRecord return 8 + size + bytesRemaining; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * - * @see NullEscherSerializationListener - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize( offset, getRecordId(), this ); int pos = offset; @@ -121,8 +98,7 @@ public class EscherDggRecord LittleEndian.putInt( data, pos, getNumIdClusters() ); pos += 4; LittleEndian.putInt( data, pos, field_3_numShapesSaved ); pos += 4; LittleEndian.putInt( data, pos, field_4_drawingsSaved ); pos += 4; - for ( int i = 0; i < field_5_fileIdClusters.length; i++ ) - { + for (int i = 0; i < field_5_fileIdClusters.length; i++) { LittleEndian.putInt( data, pos, field_5_fileIdClusters[i].field_1_drawingGroupId ); pos += 4; LittleEndian.putInt( data, pos, field_5_fileIdClusters[i].field_2_numShapeIdsUsed ); pos += 4; } @@ -131,129 +107,94 @@ public class EscherDggRecord return getRecordSize(); } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ - public int getRecordSize() - { + public int getRecordSize() { return 8 + 16 + (8 * field_5_fileIdClusters.length); } - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Dgg"; } - public String toString() - { - String nl = System.getProperty("line.separator"); - -// String extraData; -// ByteArrayOutputStream b = new ByteArrayOutputStream(); -// try -// { -// HexDump.dump(this.remainingData, 0, b, 0); -// extraData = b.toString(); -// } -// catch ( Exception e ) -// { -// extraData = "error"; -// } + public String toString() { + StringBuffer field_5_string = new StringBuffer(); - for ( int i = 0; i < field_5_fileIdClusters.length; i++ ) - { + for (int i = 0; i < field_5_fileIdClusters.length; i++) { field_5_string.append(" DrawingGroupId").append(i+1).append(": "); field_5_string.append(field_5_fileIdClusters[i].field_1_drawingGroupId); - field_5_string.append(nl); + field_5_string.append('\n'); field_5_string.append(" NumShapeIdsUsed").append(i+1).append(": "); field_5_string.append(field_5_fileIdClusters[i].field_2_numShapeIdsUsed); - field_5_string.append(nl); + field_5_string.append('\n'); } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex(RECORD_ID) + nl + - " Options: 0x" + HexDump.toHex(getOptions()) + nl + - " ShapeIdMax: " + field_1_shapeIdMax + nl + - " NumIdClusters: " + getNumIdClusters() + nl + - " NumShapesSaved: " + field_3_numShapesSaved + nl + - " DrawingsSaved: " + field_4_drawingsSaved + nl + + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex(RECORD_ID) + '\n' + + " Options: 0x" + HexDump.toHex(getOptions()) + '\n' + + " ShapeIdMax: " + field_1_shapeIdMax + '\n' + + " NumIdClusters: " + getNumIdClusters() + '\n' + + " NumShapesSaved: " + field_3_numShapesSaved + '\n' + + " DrawingsSaved: " + field_4_drawingsSaved + '\n' + "" + field_5_string.toString(); } - public int getShapeIdMax() - { + public int getShapeIdMax() { return field_1_shapeIdMax; } /** * The maximum is actually the next available. shape id. */ - public void setShapeIdMax( int field_1_shapeIdMax ) - { - this.field_1_shapeIdMax = field_1_shapeIdMax; + public void setShapeIdMax(int shapeIdMax) { + this.field_1_shapeIdMax = shapeIdMax; } /** * Number of id clusters + 1 - */ - public int getNumIdClusters() - { + */ + public int getNumIdClusters() { return field_5_fileIdClusters.length + 1; } - public int getNumShapesSaved() - { + public int getNumShapesSaved() { return field_3_numShapesSaved; } - public void setNumShapesSaved( int field_3_numShapesSaved ) - { - this.field_3_numShapesSaved = field_3_numShapesSaved; + public void setNumShapesSaved(int numShapesSaved) { + this.field_3_numShapesSaved = numShapesSaved; } - public int getDrawingsSaved() - { + public int getDrawingsSaved() { return field_4_drawingsSaved; } - public void setDrawingsSaved( int field_4_drawingsSaved ) - { - this.field_4_drawingsSaved = field_4_drawingsSaved; + public void setDrawingsSaved(int drawingsSaved) { + this.field_4_drawingsSaved = drawingsSaved; } /** * @return The maximum drawing group ID */ - public int getMaxDrawingGroupId(){ + public int getMaxDrawingGroupId() { return maxDgId; } - public void setMaxDrawingGroupId(int id){ + public void setMaxDrawingGroupId(int id) { maxDgId = id; } - public FileIdCluster[] getFileIdClusters() - { + public FileIdCluster[] getFileIdClusters() { return field_5_fileIdClusters; } - public void setFileIdClusters( FileIdCluster[] field_5_fileIdClusters ) - { - this.field_5_fileIdClusters = field_5_fileIdClusters; + public void setFileIdClusters(FileIdCluster[] fileIdClusters) { + this.field_5_fileIdClusters = fileIdClusters; } - public void addCluster( int dgId, int numShapedUsed ) - { + public void addCluster(int dgId, int numShapedUsed) { addCluster(dgId, numShapedUsed, true); } @@ -265,25 +206,23 @@ public class EscherDggRecord * @param sort if true then sort clusters by drawing group id.( * In Excel the clusters are sorted but in PPT they are not) */ - public void addCluster( int dgId, int numShapedUsed, boolean sort ) - { - List clusters = new ArrayList(Arrays.asList(field_5_fileIdClusters)); + public void addCluster( int dgId, int numShapedUsed, boolean sort ) { + List clusters = new ArrayList(Arrays.asList(field_5_fileIdClusters)); clusters.add(new FileIdCluster(dgId, numShapedUsed)); - if(sort) Collections.sort(clusters, new Comparator() - { - public int compare( Object o1, Object o2 ) - { - FileIdCluster f1 = (FileIdCluster) o1; - FileIdCluster f2 = (FileIdCluster) o2; - if (f1.getDrawingGroupId() == f2.getDrawingGroupId()) - return 0; - if (f1.getDrawingGroupId() < f2.getDrawingGroupId()) - return -1; - else - return +1; - } - } ); + if(sort) Collections.sort(clusters, MY_COMP ); maxDgId = Math.min(maxDgId, dgId); - field_5_fileIdClusters = (FileIdCluster[]) clusters.toArray( new FileIdCluster[clusters.size()] ); + field_5_fileIdClusters = clusters.toArray( new FileIdCluster[clusters.size()] ); } + + private static final Comparator MY_COMP = new Comparator() { + public int compare(FileIdCluster f1, FileIdCluster f2) { + if (f1.getDrawingGroupId() == f2.getDrawingGroupId()) { + return 0; + } + if (f1.getDrawingGroupId() < f2.getDrawingGroupId()) { + return -1; + } + return +1; + } + }; } diff --git a/src/java/org/apache/poi/ddf/EscherDump.java b/src/java/org/apache/poi/ddf/EscherDump.java index 3e1d630cd9..17ac2db36c 100644 --- a/src/java/org/apache/poi/ddf/EscherDump.java +++ b/src/java/org/apache/poi/ddf/EscherDump.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - package org.apache.poi.ddf; @@ -34,11 +32,10 @@ import java.util.zip.InflaterInputStream; * * @author Glen Stampoultzis (glens at apache.org) */ -public class EscherDump -{ +public final class EscherDump { - public EscherDump() - { + public EscherDump() { + // } /** @@ -51,15 +48,14 @@ public class EscherDump * @param out The output stream to write the results to. * */ - public void dump( byte[] data, int offset, int size, PrintStream out ) throws IOException, LittleEndian.BufferUnderrunException - { + public void dump(byte[] data, int offset, int size, PrintStream out) { EscherRecordFactory recordFactory = new DefaultEscherRecordFactory(); int pos = offset; while ( pos < offset + size ) { EscherRecord r = recordFactory.createRecord(data, pos); int bytesRead = r.fillFields(data, pos, recordFactory ); - System.out.println( r.toString() ); + out.println( r.toString() ); pos += bytesRead; } } @@ -71,8 +67,8 @@ public class EscherDump * @param in An input stream to read from. * @param out An output stream to write to. */ - public void dumpOld( long maxLength, InputStream in, PrintStream out ) throws IOException, LittleEndian.BufferUnderrunException - { + public void dumpOld(long maxLength, InputStream in, PrintStream out) + throws IOException, LittleEndian.BufferUnderrunException { long remainingBytes = maxLength; short options; // 4 bits for the version and 12 bits for the instance short recordId; @@ -83,8 +79,7 @@ public class EscherDump boolean atEOF = false; - while ( !atEOF && ( remainingBytes > 0 ) ) - { + while (!atEOF && (remainingBytes > 0)) { stringBuf = new StringBuffer(); options = LittleEndian.readShort( in ); recordId = LittleEndian.readShort( in ); @@ -435,17 +430,14 @@ public class EscherDump * @param propertyId The property number for the name * @return A descriptive name. */ - private String propName( short propertyId ) - { - class PropName { - public PropName( int id, String name ) - { - this.id = id; - this.name = name; + private String propName(short propertyId) { + final class PropName { + final int _id; + final String _name; + public PropName(int id, String name) { + _id = id; + _name = name; } - - int id; - String name; } final PropName[] props = new PropName[] { @@ -725,11 +717,9 @@ public class EscherDump new PropName(959, "groupshape.print"), }; - for ( int i = 0; i < props.length; i++ ) - { - if (props[i].id == propertyId) - { - return props[i].name; + for (int i = 0; i < props.length; i++) { + if (props[i]._id == propertyId) { + return props[i]._name; } } @@ -742,32 +732,8 @@ public class EscherDump * @param b blip id * @return A description. */ - private String getBlipType( byte b ) - { - switch ( b ) - { - case 0: - return " ERROR"; - case 1: - return " UNKNOWN"; - case 2: - return " EMF"; - case 3: - return " WMF"; - case 4: - return " PICT"; - case 5: - return " JPEG"; - case 6: - return " PNG"; - case 7: - return " DIB"; - default: - if ( b < 32 ) - return " NotKnown"; - else - return " Client"; - } + private static String getBlipType(byte b) { + return EscherBSERecord.getBlipType(b); } /** @@ -810,8 +776,7 @@ public class EscherDump /** * A simple test stub. */ - public static void main( String[] args ) throws IOException - { + public static void main( String[] args ) { String dump = "0F 00 00 F0 89 07 00 00 00 00 06 F0 18 00 00 00 " + "05 04 00 00 02 00 00 00 05 00 00 00 01 00 00 00 " + @@ -937,7 +902,7 @@ public class EscherDump "10 "; // Decode the stream to bytes - byte[] bytes = HexRead.readData( new ByteArrayInputStream( dump.getBytes() ), -1 ); + byte[] bytes = HexRead.readFromString(dump); // Create a new instance of the escher dumper EscherDump dumper = new EscherDump(); // Dump the contents of scher to screen. @@ -946,10 +911,7 @@ public class EscherDump } - public void dump( int recordSize, byte[] data, PrintStream out ) throws IOException, LittleEndian.BufferUnderrunException - { -// ByteArrayInputStream is = new ByteArrayInputStream( data ); -// dump( recordSize, is, out ); - dump( data, 0, recordSize, System.out ); + public void dump( int recordSize, byte[] data, PrintStream out ) { + dump( data, 0, recordSize, out ); } } diff --git a/src/java/org/apache/poi/ddf/EscherMetafileBlip.java b/src/java/org/apache/poi/ddf/EscherMetafileBlip.java index 75c282ea59..662a7a7d13 100644 --- a/src/java/org/apache/poi/ddf/EscherMetafileBlip.java +++ b/src/java/org/apache/poi/ddf/EscherMetafileBlip.java @@ -1,19 +1,20 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -30,11 +31,8 @@ import java.util.zip.InflaterInputStream; /** * @author Daniel Noll - * @version $Id$ */ -public class EscherMetafileBlip - extends EscherBlipRecord -{ +public final class EscherMetafileBlip extends EscherBlipRecord { private static final POILogger log = POILogFactory.getLogger(EscherMetafileBlip.class); public static final short RECORD_ID_EMF = (short) 0xF018 + 2; @@ -68,16 +66,7 @@ public class EscherMetafileBlip private byte[] raw_pictureData; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesAfterHeader = readHeader( data, offset ); int pos = offset + HEADER_SIZE; @@ -105,31 +94,16 @@ public class EscherMetafileBlip // 0 means DEFLATE compression // 0xFE means no compression - if (field_6_fCompression == 0) - { + if (field_6_fCompression == 0) { field_pictureData = inflatePictureData(raw_pictureData); - } - else - { + } else { field_pictureData = raw_pictureData; } return bytesAfterHeader + HEADER_SIZE; } - /** - * Serializes the record to an existing byte array. - * - * @param offset the offset within the byte array - * @param data the data array to serialize to - * @param listener a listener for begin and end serialization events. This - * is useful because the serialization is - * hierarchical/recursive and sometimes you need to be able - * break into that. - * @return the number of bytes written. - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize(offset, getRecordId(), this); int pos = offset; @@ -138,7 +112,7 @@ public class EscherMetafileBlip LittleEndian.putInt( data, pos, getRecordSize() - HEADER_SIZE ); pos += 4; System.arraycopy( field_1_UID, 0, data, pos, field_1_UID.length ); pos += field_1_UID.length; - if((getOptions() ^ getSignature()) == 0x10){ + if ((getOptions() ^ getSignature()) == 0x10) { System.arraycopy( field_2_UID, 0, data, pos, field_2_UID.length ); pos += field_2_UID.length; } LittleEndian.putInt( data, pos, field_2_cb ); pos += 4; @@ -164,35 +138,24 @@ public class EscherMetafileBlip * @param data the deflated picture data. * @return the inflated picture data. */ - private static byte[] inflatePictureData(byte[] data) - { - try - { + private static byte[] inflatePictureData(byte[] data) { + try { InflaterInputStream in = new InflaterInputStream( new ByteArrayInputStream( data ) ); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buf = new byte[4096]; int readBytes; - while ((readBytes = in.read(buf)) > 0) - { + while ((readBytes = in.read(buf)) > 0) { out.write(buf, 0, readBytes); } return out.toByteArray(); - } - catch ( IOException e ) - { + } catch (IOException e) { log.log(POILogger.WARN, "Possibly corrupt compression or non-compressed data", e); return data; } } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ - public int getRecordSize() - { + public int getRecordSize() { int size = 8 + 50 + raw_pictureData.length; if((getOptions() ^ getSignature()) == 0x10){ size += field_2_UID.length; @@ -200,14 +163,12 @@ public class EscherMetafileBlip return size; } - public byte[] getUID() - { + public byte[] getUID() { return field_1_UID; } - public void setUID( byte[] field_1_UID ) - { - this.field_1_UID = field_1_UID; + public void setUID(byte[] uid) { + field_1_UID = uid; } public byte[] getPrimaryUID() @@ -215,97 +176,73 @@ public class EscherMetafileBlip return field_2_UID; } - public void setPrimaryUID( byte[] field_2_UID ) - { - this.field_2_UID = field_2_UID; + public void setPrimaryUID(byte[] primaryUID) { + field_2_UID = primaryUID; } - public int getUncompressedSize() - { + public int getUncompressedSize() { return field_2_cb; } - public void setUncompressedSize(int uncompressedSize) - { + public void setUncompressedSize(int uncompressedSize) { field_2_cb = uncompressedSize; } - public Rectangle getBounds() - { + public Rectangle getBounds() { return new Rectangle(field_3_rcBounds_x1, field_3_rcBounds_y1, field_3_rcBounds_x2 - field_3_rcBounds_x1, field_3_rcBounds_y2 - field_3_rcBounds_y1); } - public void setBounds(Rectangle bounds) - { + public void setBounds(Rectangle bounds) { field_3_rcBounds_x1 = bounds.x; field_3_rcBounds_y1 = bounds.y; field_3_rcBounds_x2 = bounds.x + bounds.width; field_3_rcBounds_y2 = bounds.y + bounds.height; } - public Dimension getSizeEMU() - { + public Dimension getSizeEMU() { return new Dimension(field_4_ptSize_w, field_4_ptSize_h); } - public void setSizeEMU(Dimension sizeEMU) - { + public void setSizeEMU(Dimension sizeEMU) { field_4_ptSize_w = sizeEMU.width; field_4_ptSize_h = sizeEMU.height; } - public int getCompressedSize() - { + public int getCompressedSize() { return field_5_cbSave; } - public void setCompressedSize(int compressedSize) - { + public void setCompressedSize(int compressedSize) { field_5_cbSave = compressedSize; } - public boolean isCompressed() - { + public boolean isCompressed() { return (field_6_fCompression == 0); } - public void setCompressed(boolean compressed) - { + public void setCompressed(boolean compressed) { field_6_fCompression = compressed ? 0 : (byte)0xFE; } // filtering is always 254 according to available docs, so no point giving it a setter method. - public String toString() - { - String nl = System.getProperty( "line.separator" ); - - String extraData; - ByteArrayOutputStream b = new ByteArrayOutputStream(); - try - { - HexDump.dump( this.field_pictureData, 0, b, 0 ); - extraData = b.toString(); - } - catch ( Exception e ) - { - extraData = e.toString(); - } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex( getRecordId() ) + nl + - " Options: 0x" + HexDump.toHex( getOptions() ) + nl + - " UID: 0x" + HexDump.toHex( field_1_UID ) + nl + - (field_2_UID == null ? "" : (" UID2: 0x" + HexDump.toHex( field_2_UID ) + nl)) + - " Uncompressed Size: " + HexDump.toHex( field_2_cb ) + nl + - " Bounds: " + getBounds() + nl + - " Size in EMU: " + getSizeEMU() + nl + - " Compressed Size: " + HexDump.toHex( field_5_cbSave ) + nl + - " Compression: " + HexDump.toHex( field_6_fCompression ) + nl + - " Filter: " + HexDump.toHex( field_7_fFilter ) + nl + - " Extra Data:" + nl + extraData; + public String toString() { + String extraData = HexDump.toHex(field_pictureData, 32); + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex( getRecordId() ) + '\n' + + " Options: 0x" + HexDump.toHex( getOptions() ) + '\n' + + " UID: 0x" + HexDump.toHex( field_1_UID ) + '\n' + + (field_2_UID == null ? "" : (" UID2: 0x" + HexDump.toHex( field_2_UID ) + '\n')) + + " Uncompressed Size: " + HexDump.toHex( field_2_cb ) + '\n' + + " Bounds: " + getBounds() + '\n' + + " Size in EMU: " + getSizeEMU() + '\n' + + " Compressed Size: " + HexDump.toHex( field_5_cbSave ) + '\n' + + " Compression: " + HexDump.toHex( field_6_fCompression ) + '\n' + + " Filter: " + HexDump.toHex( field_7_fFilter ) + '\n' + + " Extra Data:" + '\n' + extraData; } /** @@ -313,14 +250,13 @@ public class EscherMetafileBlip * * @return the blip signature */ - public short getSignature(){ - short sig = 0; - switch(getRecordId()){ - case RECORD_ID_EMF: sig = SIGNATURE_EMF; break; - case RECORD_ID_WMF: sig = SIGNATURE_WMF; break; - case RECORD_ID_PICT: sig = SIGNATURE_PICT; break; - default: log.log(POILogger.WARN, "Unknown metafile: " + getRecordId()); break; + public short getSignature() { + switch (getRecordId()) { + case RECORD_ID_EMF: return SIGNATURE_EMF; + case RECORD_ID_WMF: return SIGNATURE_WMF; + case RECORD_ID_PICT: return SIGNATURE_PICT; } - return sig; + log.log(POILogger.WARN, "Unknown metafile: " + getRecordId()); + return 0; } } diff --git a/src/java/org/apache/poi/ddf/EscherOptRecord.java b/src/java/org/apache/poi/ddf/EscherOptRecord.java index d7de48edaf..157375a4ea 100644 --- a/src/java/org/apache/poi/ddf/EscherOptRecord.java +++ b/src/java/org/apache/poi/ddf/EscherOptRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import java.util.ArrayList; @@ -42,16 +42,7 @@ public class EscherOptRecord private List properties = new ArrayList(); - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; @@ -60,16 +51,6 @@ public class EscherOptRecord return bytesRemaining + 8; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * - * @return The number of bytes written. - * @see NullEscherSerializationListener - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize( offset, getRecordId(), this ); @@ -92,11 +73,6 @@ public class EscherOptRecord return pos - offset; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + getPropertiesSize(); @@ -111,11 +87,7 @@ public class EscherOptRecord return super.getOptions(); } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Opt"; } diff --git a/src/java/org/apache/poi/ddf/EscherPictBlip.java b/src/java/org/apache/poi/ddf/EscherPictBlip.java index 8ab6d8c5c1..31f36c3ebc 100644 --- a/src/java/org/apache/poi/ddf/EscherPictBlip.java +++ b/src/java/org/apache/poi/ddf/EscherPictBlip.java @@ -1,19 +1,20 @@ -/* -* Licensed to the Apache Software Foundation (ASF) under one or more -* contributor license agreements. See the NOTICE file distributed with -* this work for additional information regarding copyright ownership. -* The ASF licenses this file to You under the Apache License, Version 2.0 -* (the "License"); you may not use this file except in compliance with -* the License. You may obtain a copy of the License at -* -* http://www.apache.org/licenses/LICENSE-2.0 -* -* Unless required by applicable law or agreed to in writing, software -* distributed under the License is distributed on an "AS IS" BASIS, -* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -* See the License for the specific language governing permissions and -* limitations under the License. -*/ +/* ==================================================================== + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +==================================================================== */ + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -30,11 +31,8 @@ import java.util.zip.InflaterInputStream; /** * @author Daniel Noll - * @version $Id$ */ -public class EscherPictBlip - extends EscherBlipRecord -{ +public final class EscherPictBlip extends EscherBlipRecord { private static final POILogger log = POILogFactory.getLogger(EscherPictBlip.class); public static final short RECORD_ID_EMF = (short) 0xF018 + 2; @@ -57,17 +55,8 @@ public class EscherPictBlip private byte[] raw_pictureData; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { - int bytesAfterHeader = readHeader( data, offset ); + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { + int bytesAfterHeader = readHeader(data, offset); int pos = offset + HEADER_SIZE; field_1_UID = new byte[16]; @@ -100,19 +89,7 @@ public class EscherPictBlip return bytesAfterHeader + HEADER_SIZE; } - /** - * Serializes the record to an existing byte array. - * - * @param offset the offset within the byte array - * @param data the data array to serialize to - * @param listener a listener for begin and end serialization events. This - * is useful because the serialization is - * hierarchical/recursive and sometimes you need to be able - * break into that. - * @return the number of bytes written. - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize(offset, getRecordId(), this); int pos = offset; @@ -144,133 +121,95 @@ public class EscherPictBlip * @param data the deflated picture data. * @return the inflated picture data. */ - private static byte[] inflatePictureData(byte[] data) - { - try - { - InflaterInputStream in = new InflaterInputStream( - new ByteArrayInputStream( data ) ); + private static byte[] inflatePictureData(byte[] data) { + try { + InflaterInputStream in = new InflaterInputStream(new ByteArrayInputStream(data)); ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] buf = new byte[4096]; int readBytes; - while ((readBytes = in.read(buf)) > 0) - { + while ((readBytes = in.read(buf)) > 0) { out.write(buf, 0, readBytes); } return out.toByteArray(); - } - catch ( IOException e ) - { + } catch (IOException e) { log.log(POILogger.INFO, "Possibly corrupt compression or non-compressed data", e); return data; } } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ - public int getRecordSize() - { + public int getRecordSize() { return 8 + 50 + raw_pictureData.length; } - public byte[] getUID() - { + public byte[] getUID() { return field_1_UID; } - public void setUID( byte[] field_1_UID ) - { - this.field_1_UID = field_1_UID; + public void setUID(byte[] uid) { + this.field_1_UID = uid; } - public int getUncompressedSize() - { + public int getUncompressedSize() { return field_2_cb; } - public void setUncompressedSize(int uncompressedSize) - { + public void setUncompressedSize(int uncompressedSize) { field_2_cb = uncompressedSize; } - public Rectangle getBounds() - { + public Rectangle getBounds() { return new Rectangle(field_3_rcBounds_x1, field_3_rcBounds_y1, field_3_rcBounds_x2 - field_3_rcBounds_x1, field_3_rcBounds_y2 - field_3_rcBounds_y1); } - public void setBounds(Rectangle bounds) - { + public void setBounds(Rectangle bounds) { field_3_rcBounds_x1 = bounds.x; field_3_rcBounds_y1 = bounds.y; field_3_rcBounds_x2 = bounds.x + bounds.width; field_3_rcBounds_y2 = bounds.y + bounds.height; } - public Dimension getSizeEMU() - { + public Dimension getSizeEMU() { return new Dimension(field_4_ptSize_w, field_4_ptSize_h); } - public void setSizeEMU(Dimension sizeEMU) - { + public void setSizeEMU(Dimension sizeEMU) { field_4_ptSize_w = sizeEMU.width; field_4_ptSize_h = sizeEMU.height; } - public int getCompressedSize() - { + public int getCompressedSize() { return field_5_cbSave; } - public void setCompressedSize(int compressedSize) - { + public void setCompressedSize(int compressedSize) { field_5_cbSave = compressedSize; } - public boolean isCompressed() - { + public boolean isCompressed() { return (field_6_fCompression == 0); } - public void setCompressed(boolean compressed) - { + public void setCompressed(boolean compressed) { field_6_fCompression = compressed ? 0 : (byte)0xFE; } // filtering is always 254 according to available docs, so no point giving it a setter method. - public String toString() - { - String nl = System.getProperty( "line.separator" ); - - String extraData; - ByteArrayOutputStream b = new ByteArrayOutputStream(); - try - { - HexDump.dump( this.field_pictureData, 0, b, 0 ); - extraData = b.toString(); - } - catch ( Exception e ) - { - extraData = e.toString(); - } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex( getRecordId() ) + nl + - " Options: 0x" + HexDump.toHex( getOptions() ) + nl + - " UID: 0x" + HexDump.toHex( field_1_UID ) + nl + - " Uncompressed Size: " + HexDump.toHex( field_2_cb ) + nl + - " Bounds: " + getBounds() + nl + - " Size in EMU: " + getSizeEMU() + nl + - " Compressed Size: " + HexDump.toHex( field_5_cbSave ) + nl + - " Compression: " + HexDump.toHex( field_6_fCompression ) + nl + - " Filter: " + HexDump.toHex( field_7_fFilter ) + nl + - " Extra Data:" + nl + extraData; + public String toString() { + String extraData = HexDump.toHex(field_pictureData, 32); + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex( getRecordId() ) + '\n' + + " Options: 0x" + HexDump.toHex( getOptions() ) + '\n' + + " UID: 0x" + HexDump.toHex( field_1_UID ) + '\n' + + " Uncompressed Size: " + HexDump.toHex( field_2_cb ) + '\n' + + " Bounds: " + getBounds() + '\n' + + " Size in EMU: " + getSizeEMU() + '\n' + + " Compressed Size: " + HexDump.toHex( field_5_cbSave ) + '\n' + + " Compression: " + HexDump.toHex( field_6_fCompression ) + '\n' + + " Filter: " + HexDump.toHex( field_7_fFilter ) + '\n' + + " Extra Data:" + '\n' + extraData; } - } diff --git a/src/java/org/apache/poi/ddf/EscherProperties.java b/src/java/org/apache/poi/ddf/EscherProperties.java index 6dac0215a5..7bfdce65fc 100644 --- a/src/java/org/apache/poi/ddf/EscherProperties.java +++ b/src/java/org/apache/poi/ddf/EscherProperties.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import java.util.HashMap; diff --git a/src/java/org/apache/poi/ddf/EscherProperty.java b/src/java/org/apache/poi/ddf/EscherProperty.java index 5e7bb397a2..faa2cc44a1 100644 --- a/src/java/org/apache/poi/ddf/EscherProperty.java +++ b/src/java/org/apache/poi/ddf/EscherProperty.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** @@ -25,61 +24,52 @@ package org.apache.poi.ddf; * * @author Glen Stampoultzis (glens at apache.org) */ -abstract public class EscherProperty -{ - protected short id; +public abstract class EscherProperty { + private short _id; /** * The id is distinct from the actual property number. The id includes the property number the blip id * flag and an indicator whether the property is complex or not. */ - public EscherProperty( short id ) - { - this.id = id; + public EscherProperty(short id) { + _id = id; } /** * Constructs a new escher property. The three parameters are combined to form a property * id. */ - public EscherProperty( short propertyNumber, boolean isComplex, boolean isBlipId ) - { - this.id = (short)(propertyNumber + + public EscherProperty(short propertyNumber, boolean isComplex, boolean isBlipId) { + _id = (short)(propertyNumber + (isComplex ? 0x8000 : 0x0) + (isBlipId ? 0x4000 : 0x0)); } - public short getId() - { - return id; + public short getId() { + return _id; } - public short getPropertyNumber() - { - return (short) ( id & (short) 0x3FFF ); + public short getPropertyNumber() { + return (short) (_id & (short) 0x3FFF); } - public boolean isComplex() - { - return ( id & (short) 0x8000 ) != 0; + public boolean isComplex() { + return (_id & (short) 0x8000) != 0; } - public boolean isBlipId() - { - return ( id & (short) 0x4000 ) != 0; + public boolean isBlipId() { + return (_id & (short) 0x4000) != 0; } - public String getName() - { - return EscherProperties.getPropertyName(id); + public String getName() { + return EscherProperties.getPropertyName(_id); } /** * Most properties are just 6 bytes in length. Override this if we're * dealing with complex properties. */ - public int getPropertySize() - { + public int getPropertySize() { return 6; } diff --git a/src/java/org/apache/poi/ddf/EscherPropertyFactory.java b/src/java/org/apache/poi/ddf/EscherPropertyFactory.java index 5bf1f4d2ec..3dcce79b86 100644 --- a/src/java/org/apache/poi/ddf/EscherPropertyFactory.java +++ b/src/java/org/apache/poi/ddf/EscherPropertyFactory.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.LittleEndian; @@ -29,8 +28,7 @@ import java.util.List; * * @author Glen Stampoultzis */ -public class EscherPropertyFactory -{ +public final class EscherPropertyFactory { /** * Create new properties from a byte array. * @@ -38,15 +36,13 @@ public class EscherPropertyFactory * @param offset The starting offset into the byte array * @return The new properties */ - public List createProperties( byte[] data, int offset, short numProperties ) - { - List results = new ArrayList(); + public List createProperties(byte[] data, int offset, short numProperties) { + List results = new ArrayList(); int pos = offset; // while ( bytesRemaining >= 6 ) - for (int i = 0; i < numProperties; i++) - { + for (int i = 0; i < numProperties; i++) { short propId; int propData; propId = LittleEndian.getShort( data, pos ); @@ -55,7 +51,7 @@ public class EscherPropertyFactory boolean isComplex = ( propId & (short) 0x8000 ) != 0; boolean isBlipId = ( propId & (short) 0x4000 ) != 0; - byte propertyType = EscherProperties.getPropertyType( (short) propNumber ); + byte propertyType = EscherProperties.getPropertyType(propNumber); if ( propertyType == EscherPropertyMetaData.TYPE_BOOLEAN ) results.add( new EscherBoolProperty( propId, propData ) ); else if ( propertyType == EscherPropertyMetaData.TYPE_RGB ) @@ -72,7 +68,6 @@ public class EscherPropertyFactory results.add( new EscherArrayProperty( propId, new byte[propData]) ); else results.add( new EscherComplexProperty( propId, new byte[propData]) ); - } } pos += 6; @@ -80,26 +75,18 @@ public class EscherPropertyFactory } // Get complex data - for ( Iterator iterator = results.iterator(); iterator.hasNext(); ) - { - EscherProperty p = (EscherProperty) iterator.next(); - if (p instanceof EscherComplexProperty) - { - if (p instanceof EscherArrayProperty) - { + for (Iterator iterator = results.iterator(); iterator.hasNext();) { + EscherProperty p = iterator.next(); + if (p instanceof EscherComplexProperty) { + if (p instanceof EscherArrayProperty) { pos += ((EscherArrayProperty)p).setArrayData(data, pos); - } - else - { + } else { byte[] complexData = ((EscherComplexProperty)p).getComplexData(); System.arraycopy(data, pos, complexData, 0, complexData.length); pos += complexData.length; } } } - return results; } - - } diff --git a/src/java/org/apache/poi/ddf/EscherPropertyMetaData.java b/src/java/org/apache/poi/ddf/EscherPropertyMetaData.java index 2102a6796e..0c3105f57d 100644 --- a/src/java/org/apache/poi/ddf/EscherPropertyMetaData.java +++ b/src/java/org/apache/poi/ddf/EscherPropertyMetaData.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** diff --git a/src/java/org/apache/poi/ddf/EscherRGBProperty.java b/src/java/org/apache/poi/ddf/EscherRGBProperty.java index 13603db972..2e1ef02618 100644 --- a/src/java/org/apache/poi/ddf/EscherRGBProperty.java +++ b/src/java/org/apache/poi/ddf/EscherRGBProperty.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** diff --git a/src/java/org/apache/poi/ddf/EscherRecord.java b/src/java/org/apache/poi/ddf/EscherRecord.java index b83e2b5892..e1e140a93d 100644 --- a/src/java/org/apache/poi/ddf/EscherRecord.java +++ b/src/java/org/apache/poi/ddf/EscherRecord.java @@ -15,7 +15,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.LittleEndian; diff --git a/src/java/org/apache/poi/ddf/EscherRecordFactory.java b/src/java/org/apache/poi/ddf/EscherRecordFactory.java index cd52b635dd..faf9c74613 100644 --- a/src/java/org/apache/poi/ddf/EscherRecordFactory.java +++ b/src/java/org/apache/poi/ddf/EscherRecordFactory.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** @@ -24,8 +23,7 @@ package org.apache.poi.ddf; * * @author Glen Stampoultzis (glens at apache.org) */ -public interface EscherRecordFactory -{ +public interface EscherRecordFactory { /** * Create a new escher record from the data provided. Does not attempt * to fill the contents of the record however. diff --git a/src/java/org/apache/poi/ddf/EscherSerializationListener.java b/src/java/org/apache/poi/ddf/EscherSerializationListener.java index ce7524499b..3eeaaccd18 100644 --- a/src/java/org/apache/poi/ddf/EscherSerializationListener.java +++ b/src/java/org/apache/poi/ddf/EscherSerializationListener.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** diff --git a/src/java/org/apache/poi/ddf/EscherShapePathProperty.java b/src/java/org/apache/poi/ddf/EscherShapePathProperty.java index 0df574904d..f495f2639d 100644 --- a/src/java/org/apache/poi/ddf/EscherShapePathProperty.java +++ b/src/java/org/apache/poi/ddf/EscherShapePathProperty.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** @@ -23,9 +22,7 @@ package org.apache.poi.ddf; * * @author Glen Stampoultzis (glens at apache.org) */ -public class EscherShapePathProperty - extends EscherSimpleProperty -{ +public class EscherShapePathProperty extends EscherSimpleProperty { public static final int LINE_OF_STRAIGHT_SEGMENTS = 0; public static final int CLOSED_POLYGON = 1; @@ -37,7 +34,4 @@ public class EscherShapePathProperty { super( propertyNumber, false, false, shapePath ); } - - - } diff --git a/src/java/org/apache/poi/ddf/EscherSimpleProperty.java b/src/java/org/apache/poi/ddf/EscherSimpleProperty.java index 0539b5b0b3..a1adae84d6 100644 --- a/src/java/org/apache/poi/ddf/EscherSimpleProperty.java +++ b/src/java/org/apache/poi/ddf/EscherSimpleProperty.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.LittleEndian; diff --git a/src/java/org/apache/poi/ddf/EscherSpRecord.java b/src/java/org/apache/poi/ddf/EscherSpRecord.java index 54359ebcf7..69bde52c15 100644 --- a/src/java/org/apache/poi/ddf/EscherSpRecord.java +++ b/src/java/org/apache/poi/ddf/EscherSpRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -49,16 +48,7 @@ public class EscherSpRecord private int field_1_shapeId; private int field_2_flags; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; @@ -95,32 +85,20 @@ public class EscherSpRecord return 8 + 8; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + 8; } - /** - * @return the 16 bit identifier for this record. - */ - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Sp"; } + /** * @return the string representing this shape. */ diff --git a/src/java/org/apache/poi/ddf/EscherSpgrRecord.java b/src/java/org/apache/poi/ddf/EscherSpgrRecord.java index 4ff8eb4e7c..80594af5e0 100644 --- a/src/java/org/apache/poi/ddf/EscherSpgrRecord.java +++ b/src/java/org/apache/poi/ddf/EscherSpgrRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -39,16 +38,7 @@ public class EscherSpgrRecord private int field_3_rectX2; private int field_4_rectY2; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; @@ -63,16 +53,6 @@ public class EscherSpgrRecord return 8 + size + bytesRemaining; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * - * @see NullEscherSerializationListener - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize( offset, getRecordId(), this ); @@ -90,58 +70,30 @@ public class EscherSpgrRecord return 8 + 16; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + 16; } - /** - * The 16 bit identifier of this shape group record. - */ - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Spgr"; } /** * @return the string representation of this record. */ - public String toString() - { - String nl = System.getProperty("line.separator"); - -// String extraData; -// ByteArrayOutputStream b = new ByteArrayOutputStream(); -// try -// { -// HexDump.dump(this.remainingData, 0, b, 0); -// extraData = b.toString(); -// } -// catch ( Exception e ) -// { -// extraData = "error"; -// } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex(RECORD_ID) + nl + - " Options: 0x" + HexDump.toHex(getOptions()) + nl + - " RectX: " + field_1_rectX1 + nl + - " RectY: " + field_2_rectY1 + nl + - " RectWidth: " + field_3_rectX2 + nl + - " RectHeight: " + field_4_rectY2 + nl; - + public String toString() { + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex(RECORD_ID) + '\n' + + " Options: 0x" + HexDump.toHex(getOptions()) + '\n' + + " RectX: " + field_1_rectX1 + '\n' + + " RectY: " + field_2_rectY1 + '\n' + + " RectWidth: " + field_3_rectX2 + '\n' + + " RectHeight: " + field_4_rectY2 + '\n'; } /** @@ -203,8 +155,7 @@ public class EscherSpgrRecord /** * The starting bottom-right coordinate of child records. */ - public void setRectY2( int field_4_rectY2 ) - { - this.field_4_rectY2 = field_4_rectY2; + public void setRectY2(int rectY2) { + this.field_4_rectY2 = rectY2; } } diff --git a/src/java/org/apache/poi/ddf/EscherSplitMenuColorsRecord.java b/src/java/org/apache/poi/ddf/EscherSplitMenuColorsRecord.java index 5fc0f36035..f11c2251bf 100644 --- a/src/java/org/apache/poi/ddf/EscherSplitMenuColorsRecord.java +++ b/src/java/org/apache/poi/ddf/EscherSplitMenuColorsRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -39,16 +38,7 @@ public class EscherSplitMenuColorsRecord private int field_3_color3; private int field_4_color4; - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); int pos = offset + 8; int size = 0; @@ -62,16 +52,6 @@ public class EscherSplitMenuColorsRecord return 8 + size + bytesRemaining; } - /** - * This method serializes this escher record into a byte array. - * - * @param offset The offset into data to start writing the record data to. - * @param data The byte array to serialize to. - * @param listener A listener to retrieve start and end callbacks. Use a NullEscherSerailizationListener to ignore these events. - * @return The number of bytes written. - * - * @see NullEscherSerializationListener - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { // int field_2_numIdClusters = field_5_fileIdClusters.length + 1; @@ -91,59 +71,31 @@ public class EscherSplitMenuColorsRecord return getRecordSize(); } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + 4 * 4; } - /** - * @return the 16 bit identifer for this record. - */ - public short getRecordId() - { + public short getRecordId() { return RECORD_ID; } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "SplitMenuColors"; } /** * @return a string representation of this record. */ - public String toString() - { - String nl = System.getProperty("line.separator"); - -// String extraData; -// ByteArrayOutputStream b = new ByteArrayOutputStream(); -// try -// { -// HexDump.dump(this.remainingData, 0, b, 0); -// extraData = b.toString(); -// } -// catch ( Exception e ) -// { -// extraData = "error"; -// } - return getClass().getName() + ":" + nl + - " RecordId: 0x" + HexDump.toHex(RECORD_ID) + nl + - " Options: 0x" + HexDump.toHex(getOptions()) + nl + - " Color1: 0x" + HexDump.toHex(field_1_color1) + nl + - " Color2: 0x" + HexDump.toHex(field_2_color2) + nl + - " Color3: 0x" + HexDump.toHex(field_3_color3) + nl + - " Color4: 0x" + HexDump.toHex(field_4_color4) + nl + + public String toString() { + return getClass().getName() + ":" + '\n' + + " RecordId: 0x" + HexDump.toHex(RECORD_ID) + '\n' + + " Options: 0x" + HexDump.toHex(getOptions()) + '\n' + + " Color1: 0x" + HexDump.toHex(field_1_color1) + '\n' + + " Color2: 0x" + HexDump.toHex(field_2_color2) + '\n' + + " Color3: 0x" + HexDump.toHex(field_3_color3) + '\n' + + " Color4: 0x" + HexDump.toHex(field_4_color4) + '\n' + ""; - } public int getColor1() diff --git a/src/java/org/apache/poi/ddf/EscherTextboxRecord.java b/src/java/org/apache/poi/ddf/EscherTextboxRecord.java index 1a14dbb065..ab1ab0bfc3 100644 --- a/src/java/org/apache/poi/ddf/EscherTextboxRecord.java +++ b/src/java/org/apache/poi/ddf/EscherTextboxRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; import org.apache.poi.util.HexDump; @@ -24,7 +23,7 @@ import org.apache.poi.util.RecordFormatException; /** * Holds data from the parent application. Most commonly used to store - * text in the format of the parent application, rather than in + * text in the format of the parent application, rather than in * Escher format. We don't attempt to understand the contents, since * they will be in the parent's format, not Escher format. * @@ -45,16 +44,7 @@ public class EscherTextboxRecord extends EscherRecord { } - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); // Save the data, ready for the calling code to do something @@ -64,12 +54,6 @@ public class EscherTextboxRecord extends EscherRecord return bytesRemaining + 8; } - /** - * Writes this record and any contained records to the supplied byte - * array. - * - * @return the number of bytes written. - */ public int serialize( int offset, byte[] data, EscherSerializationListener listener ) { listener.beforeRecordSerialize( offset, getRecordId(), this ); @@ -113,12 +97,6 @@ public class EscherTextboxRecord extends EscherRecord setData(b,0,b.length); } - - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ public int getRecordSize() { return 8 + thedata.length; @@ -130,11 +108,7 @@ public class EscherTextboxRecord extends EscherRecord return super.clone(); } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "ClientTextbox"; } diff --git a/src/java/org/apache/poi/ddf/NullEscherSerializationListener.java b/src/java/org/apache/poi/ddf/NullEscherSerializationListener.java index 7fbefd0717..86155e4894 100644 --- a/src/java/org/apache/poi/ddf/NullEscherSerializationListener.java +++ b/src/java/org/apache/poi/ddf/NullEscherSerializationListener.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,7 +14,7 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; /** @@ -23,16 +22,12 @@ package org.apache.poi.ddf; * * @author Glen Stampoultzis (glens at apache.org) */ -public class NullEscherSerializationListener implements EscherSerializationListener -{ - public void beforeRecordSerialize( int offset, short recordId, EscherRecord record ) - { +public class NullEscherSerializationListener implements EscherSerializationListener { + public void beforeRecordSerialize(int offset, short recordId, EscherRecord record) { // do nothing } - public void afterRecordSerialize( int offset, short recordId, int size, EscherRecord record ) - { + public void afterRecordSerialize(int offset, short recordId, int size, EscherRecord record) { // do nothing } - } diff --git a/src/java/org/apache/poi/ddf/UnknownEscherRecord.java b/src/java/org/apache/poi/ddf/UnknownEscherRecord.java index cc7ee0457b..5ade6a7c74 100644 --- a/src/java/org/apache/poi/ddf/UnknownEscherRecord.java +++ b/src/java/org/apache/poi/ddf/UnknownEscherRecord.java @@ -1,4 +1,3 @@ - /* ==================================================================== Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with @@ -15,47 +14,35 @@ See the License for the specific language governing permissions and limitations under the License. ==================================================================== */ - + package org.apache.poi.ddf; +import java.util.ArrayList; +import java.util.List; + import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndian; -import java.util.Iterator; -import java.util.List; -import java.util.ArrayList; - /** * This record is used whenever a escher record is encountered that * we do not explicitly support. * * @author Glen Stampoultzis (glens at apache.org) */ -public class UnknownEscherRecord extends EscherRecord -{ +public final class UnknownEscherRecord extends EscherRecord { private static final byte[] NO_BYTES = new byte[0]; /** The data for this record not including the the 8 byte header */ private byte[] thedata = NO_BYTES; - private List childRecords = new ArrayList(); + private List _childRecords; - public UnknownEscherRecord() - { + public UnknownEscherRecord() { + _childRecords = new ArrayList(); } - /** - * This method deserializes the record from a byte array. - * - * @param data The byte array containing the escher record information - * @param offset The starting offset into data. - * @param recordFactory May be null since this is not a container record. - * @return The number of bytes read from the byte array. - */ - public int fillFields( byte[] data, int offset, EscherRecordFactory recordFactory ) - { + public int fillFields(byte[] data, int offset, EscherRecordFactory recordFactory) { int bytesRemaining = readHeader( data, offset ); - if ( isContainerRecord() ) - { + if (isContainerRecord()) { int bytesWritten = 0; thedata = new byte[0]; offset += 8; @@ -71,38 +58,24 @@ public class UnknownEscherRecord extends EscherRecord } return bytesWritten; } - else - { - thedata = new byte[bytesRemaining]; - System.arraycopy( data, offset + 8, thedata, 0, bytesRemaining ); - return bytesRemaining + 8; - } + thedata = new byte[bytesRemaining]; + System.arraycopy( data, offset + 8, thedata, 0, bytesRemaining ); + return bytesRemaining + 8; } - /** - * Writes this record and any contained records to the supplied byte - * array. - * - * @return the number of bytes written. - */ - public int serialize( int offset, byte[] data, EscherSerializationListener listener ) - { + public int serialize(int offset, byte[] data, EscherSerializationListener listener) { listener.beforeRecordSerialize( offset, getRecordId(), this ); LittleEndian.putShort(data, offset, getOptions()); LittleEndian.putShort(data, offset+2, getRecordId()); int remainingBytes = thedata.length; - for ( Iterator iterator = getChildRecords().iterator(); iterator.hasNext(); ) - { - EscherRecord r = (EscherRecord) iterator.next(); + for (EscherRecord r : _childRecords) { remainingBytes += r.getRecordSize(); } LittleEndian.putInt(data, offset+4, remainingBytes); System.arraycopy(thedata, 0, data, offset+8, thedata.length); int pos = offset+8+thedata.length; - for ( Iterator iterator = getChildRecords().iterator(); iterator.hasNext(); ) - { - EscherRecord r = (EscherRecord) iterator.next(); + for (EscherRecord r : _childRecords) { pos += r.serialize(pos, data, listener ); } @@ -110,90 +83,53 @@ public class UnknownEscherRecord extends EscherRecord return pos - offset; } - public byte[] getData() - { + public byte[] getData() { return thedata; } - /** - * Returns the number of bytes that are required to serialize this record. - * - * @return Number of bytes - */ - public int getRecordSize() - { + public int getRecordSize() { return 8 + thedata.length; } - public List getChildRecords() - { - return childRecords; + public List getChildRecords() { + return _childRecords; } - public void setChildRecords( List childRecords ) - { - this.childRecords = childRecords; + public void setChildRecords(List childRecords) { + _childRecords = childRecords; } - public Object clone() - { + public Object clone() { // shallow clone return super.clone(); } - /** - * The short name for this record - */ - public String getRecordName() - { + public String getRecordName() { return "Unknown 0x" + HexDump.toHex(getRecordId()); } - public String toString() - { - String nl = System.getProperty( "line.separator" ); - + public String toString() { StringBuffer children = new StringBuffer(); - if ( getChildRecords().size() > 0 ) - { - children.append( " children: " + nl ); - for ( Iterator iterator = getChildRecords().iterator(); iterator.hasNext(); ) - { - EscherRecord record = (EscherRecord) iterator.next(); + if (getChildRecords().size() > 0) { + children.append( " children: " + '\n' ); + for (EscherRecord record : _childRecords) { children.append( record.toString() ); - children.append( nl ); + children.append( '\n' ); } } - String theDumpHex = ""; - try - { - if (thedata.length != 0) - { - theDumpHex = " Extra Data("+thedata.length+"):" + nl; - theDumpHex += HexDump.dump(thedata, 0, 0); - } - } - catch ( Exception e ) - { - theDumpHex = "Error!!"; - } + String theDumpHex = HexDump.toHex(thedata, 32); - return getClass().getName() + ":" + nl + - " isContainer: " + isContainerRecord() + nl + - " options: 0x" + HexDump.toHex( getOptions() ) + nl + - " recordId: 0x" + HexDump.toHex( getRecordId() ) + nl + - " numchildren: " + getChildRecords().size() + nl + + return getClass().getName() + ":" + '\n' + + " isContainer: " + isContainerRecord() + '\n' + + " options: 0x" + HexDump.toHex( getOptions() ) + '\n' + + " recordId: 0x" + HexDump.toHex( getRecordId() ) + '\n' + + " numchildren: " + getChildRecords().size() + '\n' + theDumpHex + children.toString(); } - public void addChildRecord( EscherRecord childRecord ) - { + public void addChildRecord(EscherRecord childRecord) { getChildRecords().add( childRecord ); } - } - - -