package org.apache.poi.ddf; /** * This is the abstract base class for all escher properties. * * @see EscherOptRecord * * @author Glen Stampoultzis (glens at apache.org) */ abstract public 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; } /** * 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 + (isComplex ? 0x8000 : 0x0) + (isBlipId ? 0x4000 : 0x0)); } public short getId() { return id; } public short getPropertyNumber() { return (short) ( id & (short) 0x3FFF ); } public boolean isComplex() { return ( id & (short) 0x8000 ) != 0; } public boolean isBlipId() { return ( id & (short) 0x4000 ) != 0; } 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() { return 6; } /** * Escher properties consist of a simple fixed length part and a complex variable length part. * The fixed length part is serialized first. */ abstract public int serializeSimplePart( byte[] data, int pos ); /** * Escher properties consist of a simple fixed length part and a complex variable length part. * The fixed length part is serialized first. */ abstract public int serializeComplexPart( byte[] data, int pos ); }