You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@poi.apache.org by ni...@apache.org on 2015/07/12 20:35:33 UTC
svn commit: r1690503 - in /poi/trunk/src: java/org/apache/poi/hssf/record/
testcases/org/apache/poi/hssf/record/
Author: nick
Date: Sun Jul 12 18:35:33 2015
New Revision: 1690503
URL: http://svn.apache.org/r1690503
Log:
Introduce a CFHeaderBase common parent #58130
Added:
poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderBase.java
- copied, changed from r1690500, poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java
Modified:
poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java
poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java
poi/trunk/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java?rev=1690503&r1=1690502&r2=1690503&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/CFHeader12Record.java Sun Jul 12 18:35:33 2015
@@ -25,14 +25,14 @@ import org.apache.poi.util.LittleEndianO
* Conditional Formatting Header v12 record CFHEADER12 (0x0879),
* for conditional formattings introduced in Excel 2007 and newer.
*/
-public final class CFHeader12Record extends CFHeaderRecord {
+public final class CFHeader12Record extends CFHeaderBase {
public static final short sid = 0x0879;
private FtrHeader futureHeader;
/** Creates new CFHeaderRecord */
public CFHeader12Record() {
- super();
+ createEmpty();
futureHeader = new FtrHeader();
futureHeader.setRecordType(sid);
}
@@ -41,9 +41,7 @@ public final class CFHeader12Record exte
futureHeader = new FtrHeader();
futureHeader.setRecordType(sid);
}
-
- public CFHeader12Record(RecordInputStream in)
- {
+ public CFHeader12Record(RecordInputStream in) {
futureHeader = new FtrHeader(in);
read(in);
}
@@ -69,7 +67,7 @@ public final class CFHeader12Record exte
public Object clone() {
CFHeader12Record result = new CFHeader12Record();
result.futureHeader = (FtrHeader)futureHeader.clone();
- // TODO Clone the rest via the base
+ super.copyTo(result);
return result;
}
}
Copied: poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderBase.java (from r1690500, poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java)
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderBase.java?p2=poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderBase.java&p1=poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java&r1=1690500&r2=1690503&rev=1690503&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderBase.java Sun Jul 12 18:35:33 2015
@@ -23,33 +23,28 @@ import org.apache.poi.ss.util.CellRangeA
import org.apache.poi.util.LittleEndianOutput;
/**
- * Conditional Formatting Header record CFHEADER (0x01B0).
- * Used to describe a {@link CFRuleRecord}.
- * @see CFHeader12Record
- * TODO Move most of the logic into a base class
+ * Parent of Conditional Formatting Header records,
+ * {@link CFHeaderRecord} and {@link CFHeader12Record}.
*/
-public class CFHeaderRecord extends StandardRecord {
- public static final short sid = 0x01B0;
-
+public abstract class CFHeaderBase extends StandardRecord {
private int field_1_numcf;
private int field_2_need_recalculation_and_id;
private CellRangeAddress field_3_enclosing_cell_range;
private CellRangeAddressList field_4_cell_ranges;
- /** Creates new CFHeaderRecord */
- public CFHeaderRecord() {
- field_3_enclosing_cell_range = new CellRangeAddress(0, 0, 0, 0);
- field_4_cell_ranges = new CellRangeAddressList();
+ /** Creates new CFHeaderBase */
+ protected CFHeaderBase() {
}
- public CFHeaderRecord(CellRangeAddress[] regions, int nRules) {
+ protected CFHeaderBase(CellRangeAddress[] regions, int nRules) {
CellRangeAddress[] unmergedRanges = regions;
CellRangeAddress[] mergeCellRanges = CellRangeUtil.mergeCellRanges(unmergedRanges);
setCellRanges(mergeCellRanges);
field_1_numcf = nRules;
}
- public CFHeaderRecord(RecordInputStream in) {
- read(in);
+ protected void createEmpty() {
+ field_3_enclosing_cell_range = new CellRangeAddress(0, 0, 0, 0);
+ field_4_cell_ranges = new CellRangeAddressList();
}
protected void read(RecordInputStream in) {
field_1_numcf = in.readShort();
@@ -118,18 +113,16 @@ public class CFHeaderRecord extends Stan
return field_4_cell_ranges.getCellRangeAddresses();
}
- protected String getRecordName() {
- return "CFHEADER";
- }
+ protected abstract String getRecordName();
public String toString() {
StringBuffer buffer = new StringBuffer();
buffer.append("[").append(getRecordName()).append("]\n");
- buffer.append(" .id = ").append(Integer.toHexString(sid)).append("\n");
- buffer.append(" .numCF = ").append(getNumberOfConditionalFormats()).append("\n");
- buffer.append(" .needRecalc = ").append(getNeedRecalculation()).append("\n");
- buffer.append(" .enclosingCellRange= ").append(getEnclosingCellRange()).append("\n");
- buffer.append(" .cfranges=[");
+ buffer.append("\t.numCF = ").append(getNumberOfConditionalFormats()).append("\n");
+ buffer.append("\t.needRecalc = ").append(getNeedRecalculation()).append("\n");
+ buffer.append("\t.id = ").append(getID()).append("\n");
+ buffer.append("\t.enclosingCellRange= ").append(getEnclosingCellRange()).append("\n");
+ buffer.append("\t.cfranges=[");
for( int i=0; i<field_4_cell_ranges.countRanges(); i++) {
buffer.append(i==0?"":",").append(field_4_cell_ranges.getCellRangeAddress(i).toString());
}
@@ -151,16 +144,10 @@ public class CFHeaderRecord extends Stan
field_4_cell_ranges.serialize(out);
}
- public short getSid() {
- return sid;
- }
-
- public Object clone() {
- CFHeaderRecord result = new CFHeaderRecord();
+ protected void copyTo(CFHeaderBase result) {
result.field_1_numcf = field_1_numcf;
result.field_2_need_recalculation_and_id = field_2_need_recalculation_and_id;
result.field_3_enclosing_cell_range = field_3_enclosing_cell_range.copy();
result.field_4_cell_ranges = field_4_cell_ranges.copy();
- return result;
}
}
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java?rev=1690503&r1=1690502&r2=1690503&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/CFHeaderRecord.java Sun Jul 12 18:35:33 2015
@@ -17,139 +17,31 @@
package org.apache.poi.hssf.record;
-import org.apache.poi.hssf.record.cf.CellRangeUtil;
import org.apache.poi.ss.util.CellRangeAddress;
-import org.apache.poi.ss.util.CellRangeAddressList;
-import org.apache.poi.util.LittleEndianOutput;
/**
* Conditional Formatting Header record CFHEADER (0x01B0).
* Used to describe a {@link CFRuleRecord}.
* @see CFHeader12Record
- * TODO Move most of the logic into a base class
*/
-public class CFHeaderRecord extends StandardRecord {
+public final class CFHeaderRecord extends CFHeaderBase {
public static final short sid = 0x01B0;
- private int field_1_numcf;
- private int field_2_need_recalculation_and_id;
- private CellRangeAddress field_3_enclosing_cell_range;
- private CellRangeAddressList field_4_cell_ranges;
-
/** Creates new CFHeaderRecord */
public CFHeaderRecord() {
- field_3_enclosing_cell_range = new CellRangeAddress(0, 0, 0, 0);
- field_4_cell_ranges = new CellRangeAddressList();
+ createEmpty();
}
public CFHeaderRecord(CellRangeAddress[] regions, int nRules) {
- CellRangeAddress[] unmergedRanges = regions;
- CellRangeAddress[] mergeCellRanges = CellRangeUtil.mergeCellRanges(unmergedRanges);
- setCellRanges(mergeCellRanges);
- field_1_numcf = nRules;
+ super(regions, nRules);
}
public CFHeaderRecord(RecordInputStream in) {
read(in);
}
- protected void read(RecordInputStream in) {
- field_1_numcf = in.readShort();
- field_2_need_recalculation_and_id = in.readShort();
- field_3_enclosing_cell_range = new CellRangeAddress(in);
- field_4_cell_ranges = new CellRangeAddressList(in);
- }
-
- public int getNumberOfConditionalFormats() {
- return field_1_numcf;
- }
- public void setNumberOfConditionalFormats(int n) {
- field_1_numcf=n;
- }
-
- public boolean getNeedRecalculation() {
- // Held on the 1st bit
- return field_2_need_recalculation_and_id % 2 == 1;
- }
- public void setNeedRecalculation(boolean b) {
- // held on the first bit
- if (b == getNeedRecalculation()) return;
- if (b) field_2_need_recalculation_and_id++;
- else field_2_need_recalculation_and_id--;
- }
-
- public int getID() {
- // Remaining 15 bits of field 2
- return field_2_need_recalculation_and_id>>1;
- }
- public void setID(int id) {
- // Remaining 15 bits of field 2
- boolean needsRecalc = getNeedRecalculation();
- field_2_need_recalculation_and_id = (id<<1);
- if (needsRecalc) field_2_need_recalculation_and_id++;
- }
-
- public CellRangeAddress getEnclosingCellRange() {
- return field_3_enclosing_cell_range;
- }
- public void setEnclosingCellRange(CellRangeAddress cr) {
- field_3_enclosing_cell_range = cr;
- }
-
- /**
- * Set cell ranges list to a single cell range and
- * modify the enclosing cell range accordingly.
- * @param cellRanges - list of CellRange objects
- */
- public void setCellRanges(CellRangeAddress[] cellRanges) {
- if(cellRanges == null) {
- throw new IllegalArgumentException("cellRanges must not be null");
- }
- CellRangeAddressList cral = new CellRangeAddressList();
- CellRangeAddress enclosingRange = null;
- for (int i = 0; i < cellRanges.length; i++) {
- CellRangeAddress cr = cellRanges[i];
- enclosingRange = CellRangeUtil.createEnclosingCellRange(cr, enclosingRange);
- cral.addCellRangeAddress(cr);
- }
- field_3_enclosing_cell_range = enclosingRange;
- field_4_cell_ranges = cral;
- }
-
- public CellRangeAddress[] getCellRanges() {
- return field_4_cell_ranges.getCellRangeAddresses();
- }
protected String getRecordName() {
return "CFHEADER";
}
- public String toString() {
- StringBuffer buffer = new StringBuffer();
-
- buffer.append("[").append(getRecordName()).append("]\n");
- buffer.append(" .id = ").append(Integer.toHexString(sid)).append("\n");
- buffer.append(" .numCF = ").append(getNumberOfConditionalFormats()).append("\n");
- buffer.append(" .needRecalc = ").append(getNeedRecalculation()).append("\n");
- buffer.append(" .enclosingCellRange= ").append(getEnclosingCellRange()).append("\n");
- buffer.append(" .cfranges=[");
- for( int i=0; i<field_4_cell_ranges.countRanges(); i++) {
- buffer.append(i==0?"":",").append(field_4_cell_ranges.getCellRangeAddress(i).toString());
- }
- buffer.append("]\n");
- buffer.append("[/").append(getRecordName()).append("]\n");
- return buffer.toString();
- }
-
- protected int getDataSize() {
- return 4 // 2 short fields
- + CellRangeAddress.ENCODED_SIZE
- + field_4_cell_ranges.getSize();
- }
-
- public void serialize(LittleEndianOutput out) {
- out.writeShort(field_1_numcf);
- out.writeShort(field_2_need_recalculation_and_id);
- field_3_enclosing_cell_range.serialize(out);
- field_4_cell_ranges.serialize(out);
- }
public short getSid() {
return sid;
@@ -157,10 +49,7 @@ public class CFHeaderRecord extends Stan
public Object clone() {
CFHeaderRecord result = new CFHeaderRecord();
- result.field_1_numcf = field_1_numcf;
- result.field_2_need_recalculation_and_id = field_2_need_recalculation_and_id;
- result.field_3_enclosing_cell_range = field_3_enclosing_cell_range.copy();
- result.field_4_cell_ranges = field_4_cell_ranges.copy();
+ super.copyTo(result);
return result;
}
}
Modified: poi/trunk/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java?rev=1690503&r1=1690502&r2=1690503&view=diff
==============================================================================
--- poi/trunk/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java (original)
+++ poi/trunk/src/testcases/org/apache/poi/hssf/record/TestCFHeaderRecord.java Sun Jul 12 18:35:33 2015
@@ -23,16 +23,11 @@ import junit.framework.TestCase;
import org.apache.poi.ss.util.CellRangeAddress;
/**
- * Tests the serialization and deserialization of the TestCFHeaderRecord
- * class works correctly.
- *
- * @author Dmitriy Kumshayev
+ * Tests the serialization and deserialization of the {@link CFHeaderRecord}
+ * and {@link CFHeader12Record} classes works correctly.
*/
-public final class TestCFHeaderRecord extends TestCase
-{
-
- public void testCreateCFHeaderRecord ()
- {
+public final class TestCFHeaderRecord extends TestCase {
+ public void testCreateCFHeaderRecord () {
CFHeaderRecord record = new CFHeaderRecord();
CellRangeAddress[] ranges = {
new CellRangeAddress(0,0xFFFF,5,5),
@@ -50,12 +45,52 @@ public final class TestCFHeaderRecord ex
assertEquals(65535, enclosingCellRange.getLastRow());
assertEquals(0, enclosingCellRange.getFirstColumn());
assertEquals(6, enclosingCellRange.getLastColumn());
+
+ assertEquals(false, record.getNeedRecalculation());
+ assertEquals(0, record.getID());
+
record.setNeedRecalculation(true);
- assertTrue(record.getNeedRecalculation());
+ assertEquals(true, record.getNeedRecalculation());
+ assertEquals(0, record.getID());
+
+ record.setID(7);
record.setNeedRecalculation(false);
- assertFalse(record.getNeedRecalculation());
+ assertEquals(false, record.getNeedRecalculation());
+ assertEquals(7, record.getID());
}
+ public void testCreateCFHeader12Record () {
+ CFHeader12Record record = new CFHeader12Record();
+ CellRangeAddress[] ranges = {
+ new CellRangeAddress(0,0xFFFF,5,5),
+ new CellRangeAddress(0,0xFFFF,6,6),
+ new CellRangeAddress(0,1,0,1),
+ new CellRangeAddress(0,1,2,3),
+ new CellRangeAddress(2,3,0,1),
+ new CellRangeAddress(2,3,2,3),
+ };
+ record.setCellRanges(ranges);
+ ranges = record.getCellRanges();
+ assertEquals(6,ranges.length);
+ CellRangeAddress enclosingCellRange = record.getEnclosingCellRange();
+ assertEquals(0, enclosingCellRange.getFirstRow());
+ assertEquals(65535, enclosingCellRange.getLastRow());
+ assertEquals(0, enclosingCellRange.getFirstColumn());
+ assertEquals(6, enclosingCellRange.getLastColumn());
+
+ assertEquals(false, record.getNeedRecalculation());
+ assertEquals(0, record.getID());
+
+ record.setNeedRecalculation(true);
+ assertEquals(true, record.getNeedRecalculation());
+ assertEquals(0, record.getID());
+
+ record.setID(7);
+ record.setNeedRecalculation(false);
+ assertEquals(false, record.getNeedRecalculation());
+ assertEquals(7, record.getID());
+ }
+
public void testSerialization() {
byte[] recordData =
{
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org