add EscherTertiaryOptRecord support
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1151801 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
ef3edb8fa9
commit
808014be4c
@ -30,11 +30,13 @@ import java.util.Map;
|
||||
* @see EscherRecordFactory
|
||||
*/
|
||||
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 Class<?>[] escherRecordClasses = { EscherBSERecord.class,
|
||||
EscherOptRecord.class, EscherTertiaryOptRecord.class,
|
||||
EscherClientAnchorRecord.class, EscherDgRecord.class,
|
||||
EscherSpgrRecord.class, EscherSpRecord.class,
|
||||
EscherClientDataRecord.class, EscherDggRecord.class,
|
||||
EscherSplitMenuColorsRecord.class, EscherChildAnchorRecord.class,
|
||||
EscherTextboxRecord.class };
|
||||
private static Map<Short, Constructor<? extends EscherRecord>> recordsMap = recordsToMap( escherRecordClasses );
|
||||
|
||||
/**
|
||||
|
111
src/java/org/apache/poi/ddf/EscherTertiaryOptRecord.java
Normal file
111
src/java/org/apache/poi/ddf/EscherTertiaryOptRecord.java
Normal file
@ -0,0 +1,111 @@
|
||||
/* ====================================================================
|
||||
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 java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.apache.poi.util.HexDump;
|
||||
import org.apache.poi.util.LittleEndian;
|
||||
|
||||
/**
|
||||
* "The OfficeArtTertiaryFOPT record specifies a table of OfficeArtRGFOPTE properties, as defined in section 2.3.1."
|
||||
* -- [MS-ODRAW] — v20110608; Office Drawing Binary File Format
|
||||
*
|
||||
* @author Sergey Vladimirov (vlsergey {at} gmail {dot} com)
|
||||
*/
|
||||
public class EscherTertiaryOptRecord extends EscherRecord
|
||||
{
|
||||
public static final short RECORD_ID = (short) 0xF122;
|
||||
|
||||
private List<EscherProperty> properties = new ArrayList<EscherProperty>();
|
||||
|
||||
public int fillFields( byte[] data, int offset,
|
||||
EscherRecordFactory recordFactory )
|
||||
{
|
||||
int bytesRemaining = readHeader( data, offset );
|
||||
int pos = offset + 8;
|
||||
|
||||
EscherPropertyFactory f = new EscherPropertyFactory();
|
||||
properties = f.createProperties( data, pos, getInstance() );
|
||||
return bytesRemaining + 8;
|
||||
}
|
||||
|
||||
private int getPropertiesSize()
|
||||
{
|
||||
int totalSize = 0;
|
||||
for ( EscherProperty property : properties )
|
||||
{
|
||||
totalSize += property.getPropertySize();
|
||||
}
|
||||
|
||||
return totalSize;
|
||||
}
|
||||
|
||||
public String getRecordName()
|
||||
{
|
||||
return "TertiaryOpt";
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getRecordSize()
|
||||
{
|
||||
return 8 + getPropertiesSize();
|
||||
}
|
||||
|
||||
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() );
|
||||
LittleEndian.putInt( data, offset + 4, getPropertiesSize() );
|
||||
int pos = offset + 8;
|
||||
for ( EscherProperty property : properties )
|
||||
{
|
||||
pos += property.serializeSimplePart( data, pos );
|
||||
}
|
||||
for ( EscherProperty property : properties )
|
||||
{
|
||||
pos += property.serializeComplexPart( data, pos );
|
||||
}
|
||||
listener.afterRecordSerialize( pos, getRecordId(), pos - offset, this );
|
||||
return pos - offset;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve the string representation of this record.
|
||||
*/
|
||||
public String toString()
|
||||
{
|
||||
String nl = System.getProperty( "line.separator" );
|
||||
StringBuffer propertiesBuf = new StringBuffer();
|
||||
for ( EscherProperty property : properties )
|
||||
{
|
||||
propertiesBuf.append( " " + property.toString() + nl );
|
||||
}
|
||||
|
||||
return "org.apache.poi.ddf.EscherTertiaryOptRecord:" + nl
|
||||
+ " isContainer: " + isContainerRecord() + nl
|
||||
+ " options: 0x" + HexDump.toHex( getOptions() ) + nl
|
||||
+ " recordId: 0x" + HexDump.toHex( getRecordId() ) + nl
|
||||
+ " numchildren: " + getChildRecords().size() + nl
|
||||
+ " properties:" + nl + propertiesBuf.toString();
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user