split option field into version and instance

git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1163609 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Sergey Vladimirov 2011-08-31 12:59:31 +00:00
parent 237b4d7448
commit 689c4f7895

View File

@ -18,12 +18,14 @@
package org.apache.poi.ddf; package org.apache.poi.ddf;
import org.apache.poi.util.LittleEndian;
import java.io.PrintWriter; import java.io.PrintWriter;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import org.apache.poi.util.BitField;
import org.apache.poi.util.BitFieldFactory;
import org.apache.poi.util.LittleEndian;
/** /**
* The base abstract record from which all escher records are defined. Subclasses will need * The base abstract record from which all escher records are defined. Subclasses will need
* to define methods for serialization/deserialization and for determining the record size. * to define methods for serialization/deserialization and for determining the record size.
@ -31,6 +33,9 @@ import java.util.List;
* @author Glen Stampoultzis * @author Glen Stampoultzis
*/ */
public abstract class EscherRecord { public abstract class EscherRecord {
private static BitField fInstance = BitFieldFactory.getInstance(0xfff0);
private static BitField fVersion = BitFieldFactory.getInstance(0x000f);
private short _options; private short _options;
private short _recordId; private short _recordId;
@ -85,20 +90,27 @@ public abstract class EscherRecord {
* @return true is this is a container field. * @return true is this is a container field.
*/ */
public boolean isContainerRecord() { public boolean isContainerRecord() {
return (_options & (short)0x000f) == (short)0x000f; return getVersion() == (short)0x000f;
} }
/** /**
* @return The options field for this record. All records have one. * @return The options field for this record. All records have one.
* @deprecated Options is an internal field. Use {@link #getInstance()} and
* {@link #getVersion()} to access actual fields.
*/ */
public short getOptions() { @Deprecated
public short getOptions()
{
return _options; return _options;
} }
/** /**
* Set the options this this record. Container records should have the * Set the options this this record. Container records should have the
* last nibble set to 0xF. * last nibble set to 0xF.
* @deprecated Options is an internal field. Use {@link #getInstance()} and
* {@link #getVersion()} to access actual fields.
*/ */
@Deprecated
public void setOptions( short options ) { public void setOptions( short options ) {
_options = options; _options = options;
} }
@ -224,11 +236,44 @@ public abstract class EscherRecord {
/** /**
* Returns the instance part of the option record. * Returns the instance part of the option record.
* *
* @return The instance part of the record * @return The instance part of the record
*/ */
public short getInstance() { public short getInstance()
return (short) ( _options >> 4 ); {
return fInstance.getShortValue( _options );
}
/**
* Sets the instance part of record
*
* @param value
* instance part value
*/
public void setInstance( short value )
{
fInstance.setShortValue( _options, value );
}
/**
* Returns the version part of the option record.
*
* @return The version part of the option record
*/
public short getVersion()
{
return fVersion.getShortValue( _options );
}
/**
* Sets the version part of record
*
* @param value
* version part value
*/
public void setVersion( short value )
{
fVersion.setShortValue( _options, value );
} }
/** /**
@ -253,6 +298,15 @@ public abstract class EscherRecord {
return header; return header;
} }
public byte getVersion()
{
return (byte) fVersion.getShortValue( options );
}
public short getInstance()
{
return fInstance.getShortValue( options );
}
public short getOptions() public short getOptions()
{ {
@ -272,7 +326,8 @@ public abstract class EscherRecord {
public String toString() public String toString()
{ {
return "EscherRecordHeader{" + return "EscherRecordHeader{" +
"options=" + options + "ver=" + getVersion() +
"instance=" + getInstance() +
", recordId=" + recordId + ", recordId=" + recordId +
", remainingBytes=" + remainingBytes + ", remainingBytes=" + remainingBytes +
"}"; "}";