From 935491b4e2c9730f9209a0880c63371a842950d3 Mon Sep 17 00:00:00 2001 From: Nick Burch Date: Mon, 13 Jul 2015 17:32:05 +0000 Subject: [PATCH] New future record interface, and more CFRule12 toString output git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1690773 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/hssf/record/CFHeader12Record.java | 13 +++++- .../poi/hssf/record/CFRule12Record.java | 44 ++++++++++++++++--- .../poi/hssf/record/common/FutureRecord.java | 30 +++++++++++++ 3 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 src/java/org/apache/poi/hssf/record/common/FutureRecord.java diff --git a/src/java/org/apache/poi/hssf/record/CFHeader12Record.java b/src/java/org/apache/poi/hssf/record/CFHeader12Record.java index 58b778091..89c4421de 100644 --- a/src/java/org/apache/poi/hssf/record/CFHeader12Record.java +++ b/src/java/org/apache/poi/hssf/record/CFHeader12Record.java @@ -18,6 +18,7 @@ package org.apache.poi.hssf.record; import org.apache.poi.hssf.record.common.FtrHeader; +import org.apache.poi.hssf.record.common.FutureRecord; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.util.LittleEndianOutput; @@ -25,7 +26,7 @@ import org.apache.poi.util.LittleEndianOutput; * Conditional Formatting Header v12 record CFHEADER12 (0x0879), * for conditional formattings introduced in Excel 2007 and newer. */ -public final class CFHeader12Record extends CFHeaderBase { +public final class CFHeader12Record extends CFHeaderBase implements FutureRecord { public static final short sid = 0x0879; private FtrHeader futureHeader; @@ -68,6 +69,16 @@ public final class CFHeader12Record extends CFHeaderBase { return sid; } + public short getFutureRecordType() { + return futureHeader.getRecordType(); + } + public FtrHeader getFutureHeader() { + return futureHeader; + } + public CellRangeAddress getAssociatedRange() { + return futureHeader.getAssociatedRange(); + } + public Object clone() { CFHeader12Record result = new CFHeader12Record(); result.futureHeader = (FtrHeader)futureHeader.clone(); diff --git a/src/java/org/apache/poi/hssf/record/CFRule12Record.java b/src/java/org/apache/poi/hssf/record/CFRule12Record.java index c5afb3e4e..f496f4e9b 100644 --- a/src/java/org/apache/poi/hssf/record/CFRule12Record.java +++ b/src/java/org/apache/poi/hssf/record/CFRule12Record.java @@ -20,9 +20,12 @@ package org.apache.poi.hssf.record; import java.util.Arrays; import org.apache.poi.hssf.record.common.FtrHeader; +import org.apache.poi.hssf.record.common.FutureRecord; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.util.CellRangeAddress; +import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.POILogger; @@ -36,7 +39,7 @@ import org.apache.poi.util.POILogger; * {@link #CONDITION_TYPE_CELL_VALUE_IS} or {@link #CONDITION_TYPE_FORMULA}, * this is only used for the other types */ -public final class CFRule12Record extends CFRuleBase { +public final class CFRule12Record extends CFRuleBase implements FutureRecord { public static final short sid = 0x087A; private FtrHeader futureHeader; @@ -259,11 +262,30 @@ public final class CFRule12Record extends CFRuleBase { public String toString() { StringBuffer buffer = new StringBuffer(); buffer.append("[CFRULE12]\n"); - buffer.append(" .condition_type =").append(getConditionType()).append("\n"); - buffer.append(" TODO The rest!\n"); // TODO The Rest - buffer.append(" Formula 1 =").append(Arrays.toString(getFormula1().getTokens())).append("\n"); - buffer.append(" Formula 2 =").append(Arrays.toString(getFormula2().getTokens())).append("\n"); - buffer.append(" Formula S =").append(Arrays.toString(formula_scale.getTokens())).append("\n"); + buffer.append(" .condition_type=").append(getConditionType()).append("\n"); + buffer.append(" .dxfn12_length =0x").append(Integer.toHexString(ext_formatting_length)).append("\n"); + buffer.append(" .option_flags =0x").append(Integer.toHexString(getOptions())).append("\n"); + if (containsFontFormattingBlock()) { + buffer.append(_fontFormatting.toString()).append("\n"); + } + if (containsBorderFormattingBlock()) { + buffer.append(_borderFormatting.toString()).append("\n"); + } + if (containsPatternFormattingBlock()) { + buffer.append(_patternFormatting.toString()).append("\n"); + } + buffer.append(" .dxfn12_ext=").append(HexDump.toHex(ext_formatting_data)).append("\n"); + buffer.append(" .formula_1 =").append(Arrays.toString(getFormula1().getTokens())).append("\n"); + buffer.append(" .formula_2 =").append(Arrays.toString(getFormula2().getTokens())).append("\n"); + buffer.append(" .formula_S =").append(Arrays.toString(formula_scale.getTokens())).append("\n"); + buffer.append(" .ext Opts =").append(ext_opts).append("\n"); + buffer.append(" .priority =").append(priority).append("\n"); + buffer.append(" .template_type =").append(template_type).append("\n"); + buffer.append(" .template_params=").append(HexDump.toHex(template_params)).append("\n"); + buffer.append(" .gradient_data =").append(HexDump.toHex(gradient_data)).append("\n"); + buffer.append(" .databar_data =").append(HexDump.toHex(databar_data)).append("\n"); + buffer.append(" .filter_data =").append(HexDump.toHex(filter_data)).append("\n"); + buffer.append(" .multistate_data=").append(HexDump.toHex(multistate_data)).append("\n"); buffer.append("[/CFRULE12]\n"); return buffer.toString(); } @@ -278,4 +300,14 @@ public final class CFRule12Record extends CFRuleBase { return rec; } + + public short getFutureRecordType() { + return futureHeader.getRecordType(); + } + public FtrHeader getFutureHeader() { + return futureHeader; + } + public CellRangeAddress getAssociatedRange() { + return futureHeader.getAssociatedRange(); + } } diff --git a/src/java/org/apache/poi/hssf/record/common/FutureRecord.java b/src/java/org/apache/poi/hssf/record/common/FutureRecord.java new file mode 100644 index 000000000..65a26cca7 --- /dev/null +++ b/src/java/org/apache/poi/hssf/record/common/FutureRecord.java @@ -0,0 +1,30 @@ +/* ==================================================================== + 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.common; + +import org.apache.poi.ss.util.CellRangeAddress; + +/** + * Title: Future Record, a newer (largely Excel 2007+) record + * which contains a Future Record Header ({@link FtrHeader}) + */ +public interface FutureRecord { + public short getFutureRecordType(); + public FtrHeader getFutureHeader(); + public CellRangeAddress getAssociatedRange(); +} \ No newline at end of file