From: Nick Burch Date: Thu, 12 Nov 2009 01:10:19 +0000 (+0000) Subject: Make a start on feature related records. Not finished yet, so not enabled in the... X-Git-Tag: REL_3_6~62 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=6233bdeb73c13d465bd6e860eff88b7b114933a7;p=poi.git Make a start on feature related records. Not finished yet, so not enabled in the recordfactory until complete+tested git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@835183 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/record/FeatHdrRecord.java b/src/java/org/apache/poi/hssf/record/FeatHdrRecord.java new file mode 100644 index 0000000000..fcc5cd5c00 --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/FeatHdrRecord.java @@ -0,0 +1,100 @@ +/* ==================================================================== + 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.hssf.record; + +import org.apache.poi.util.LittleEndianOutput; + +/** + * Title: FeatHdr (Feature Header) Record + *

+ * This record specifies common information for Shared Features, and + * specifies the beginning of a collection of records to define them. + * The collection of data (Globals Substream ABNF, macro sheet substream + * ABNF or worksheet substream ABNF) specifies Shared Feature data. + */ +public final class FeatHdrRecord extends StandardRecord { + /** + * Specifies the enhanced protection type. Used to protect a + * shared workbook by restricting access to some areas of it + */ + public static final int SHAREDFEATURES_ISFPROTECTION = 0x02; + /** + * Specifies that formula errors should be ignored + */ + public static final int SHAREDFEATURES_ISFFEC2 = 0x03; + /** + * Specifies the smart tag type. Recognises certain + * types of entries (proper names, dates/times etc) and + * flags them for action + */ + public static final int SHAREDFEATURES_ISFFACTOID = 0x04; + /** + * Specifies the shared list type. Used for a table + * within a sheet + */ + public static final int SHAREDFEATURES_ISFLIST = 0x05; + + + public final static short sid = 0x0867; + + private int isf_sharedFeatureType; // See SHAREDFEATURES_ + private byte reserved; // Should always be one + /** + * 0x00000000 = rgbHdrData not present + * 0xffffffff = rgbHdrData present + */ + private long cbHdrData; + /** We need a BOFRecord to make sense of this... */ + private byte[] rgbHdrData; + + public FeatHdrRecord() { + } + + public short getSid() { + return sid; + } + + public FeatHdrRecord(RecordInputStream in) { + isf_sharedFeatureType = in.readShort(); + reserved = in.readByte(); + cbHdrData = in.readLong(); + // Don't process this just yet, need the BOFRecord + rgbHdrData = in.readRemainder(); + } + + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append("[FEATURE HEADER]\n"); + + // TODO ... + + buffer.append("[/FEATURE HEADER]\n"); + return buffer.toString(); + } + + public void serialize(LittleEndianOutput out) { + out.writeShort(isf_sharedFeatureType); + out.writeByte(reserved); + out.writeLong(cbHdrData); + out.write(rgbHdrData); + } + + protected int getDataSize() { + return 2+1+4+rgbHdrData.length; + } +} diff --git a/src/java/org/apache/poi/hssf/record/FeatRecord.java b/src/java/org/apache/poi/hssf/record/FeatRecord.java new file mode 100644 index 0000000000..6e2f4d6432 --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/FeatRecord.java @@ -0,0 +1,90 @@ +/* ==================================================================== + 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.hssf.record; + +import org.apache.poi.hssf.record.common.Ref8U; +import org.apache.poi.util.LittleEndianOutput; + +/** + * Title: Feat (Feature) Record + *

+ * This record specifies Shared Features data. It is normally paired + * up with a {@link FeatHdrRecord}. + */ +public final class FeatRecord extends StandardRecord { + public final static short sid = 0x0868; + + /** + * See SHAREDFEATURES_* on {@link FeatHdrRecord} + */ + private int isf_sharedFeatureType; + private byte reserved1; // Should always be zero + private long reserved2; // Should always be zero + /** The number of refs */ + private int cref; + /** Only matters if type is ISFFEC2 */ + private long cbFeatData; + private int reserved3; // Should always be zero + private Ref8U[] cellRefs; + + private byte[] rgbFeat; + + public FeatRecord() { + } + + public short getSid() { + return sid; + } + + public FeatRecord(RecordInputStream in) { + isf_sharedFeatureType = in.readShort(); + reserved1 = in.readByte(); + reserved2 = in.readLong(); + cref = in.readUShort(); + cbFeatData = in.readLong(); + reserved3 = in.readShort(); + + cellRefs = new Ref8U[cref]; + for(int i=0; i + * This record part specifies common way of encoding a + * block of cells via first-last row-column. + */ +public final class Ref8U { + private short firstRow; // zero-based + private short lastRow; // zero-based + private short firstCol; // zero-based + private short lastCol; // zero-based + + public Ref8U() { + } + + public Ref8U(RecordInputStream in) { + firstRow = in.readShort(); + lastRow = in.readShort(); + firstCol = in.readShort(); + lastCol = in.readShort(); + } + + public String toString() { + StringBuffer buffer = new StringBuffer(); + buffer.append(" [CELL RANGE]\n"); + buffer.append(" Rows " + firstRow + " to " + lastRow); + buffer.append(" Cols " + firstCol + " to " + lastCol); + buffer.append(" [/CELL RANGE]\n"); + return buffer.toString(); + } + + public void serialize(LittleEndianOutput out) { + out.writeShort(firstRow); + out.writeShort(lastRow); + out.writeShort(firstCol); + out.writeShort(lastCol); + } + + protected int getDataSize() { + return 8; + } +}