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/16 23:23:55 UTC

svn commit: r1691452 - in /poi/trunk/src/java/org/apache/poi: hssf/record/ hssf/record/cf/ hssf/usermodel/ ss/usermodel/

Author: nick
Date: Thu Jul 16 21:23:54 2015
New Revision: 1691452

URL: http://svn.apache.org/r1691452
Log:
Update objects / method signatures for the new CF Thresholds, to better match what the other CF bits expose where

Modified:
    poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleBase.java
    poi/trunk/src/java/org/apache/poi/hssf/record/cf/Threshold.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormatting.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingThreshold.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFIconMultiStateFormatting.java
    poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheetConditionalFormatting.java
    poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingThreshold.java

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleBase.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleBase.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleBase.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/CFRuleBase.java Thu Jul 16 21:23:54 2015
@@ -425,7 +425,7 @@ public abstract class CFRuleBase extends
      *
      * @return <code>null</code> if <tt>formula</tt> was null.
      */
-    protected static Ptg[] parseFormula(String formula, HSSFSheet sheet) {
+    public static Ptg[] parseFormula(String formula, HSSFSheet sheet) {
         if(formula == null) {
             return null;
         }

Modified: poi/trunk/src/java/org/apache/poi/hssf/record/cf/Threshold.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/cf/Threshold.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/cf/Threshold.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/cf/Threshold.java Thu Jul 16 21:23:54 2015
@@ -17,7 +17,10 @@
 
 package org.apache.poi.hssf.record.cf;
 
+import java.util.Arrays;
+
 import org.apache.poi.ss.formula.Formula;
+import org.apache.poi.ss.formula.ptg.Ptg;
 import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType;
 import org.apache.poi.util.LittleEndianInput;
 import org.apache.poi.util.LittleEndianOutput;
@@ -42,19 +45,21 @@ public final class Threshold {
 
     public Threshold() {
         type = (byte)RangeType.NUMBER.id;
-        formula = null; // TODO SHould this be empty instead?
+        formula = Formula.create(null);
         value = 0d;
     }
 
     /** Creates new Threshold */
     public Threshold(LittleEndianInput in) {
         type = in.readByte();
-        short formuaLen = in.readShort();
-        if (formuaLen > 0) {
-            formula = Formula.read(formuaLen, in);
+        short formulaLen = in.readShort();
+        if (formulaLen > 0) {
+            formula = Formula.read(formulaLen, in);
+        } else {
+            formula = Formula.create(null);
         }
         // Value is only there for non-formula, non min/max thresholds
-        if (formula == null && type != RangeType.MIN.id &&
+        if (formulaLen == 0 && type != RangeType.MIN.id &&
                 type != RangeType.MAX.id) {
             value = in.readDouble();
         }
@@ -70,11 +75,14 @@ public final class Threshold {
         this.type = type;
     }
 
-    public Formula getFormula() {
+    protected Formula getFormula() {
         return formula;
     }
-    public void setFormula(Formula formula) {
-        this.formula = formula;
+    public Ptg[] getParsedExpression() {
+        return formula.getTokens();
+    }
+    public void setParsedExpression(Ptg[] ptgs) {
+        formula = Formula.create(ptgs);
     }
 
     public Double getValue() {
@@ -92,12 +100,7 @@ public final class Threshold {
     }
 
     public int getDataLength() {
-        int len = 1;
-        if (formula != null) {
-            len += formula.getEncodedSize();
-        } else {
-            len += 2;
-        }
+        int len = 1 + formula.getEncodedSize();
         if (value != null) {
             len += 8;
         }
@@ -105,13 +108,11 @@ public final class Threshold {
         return len;
     }
 
-
     public String toString() {
         StringBuffer buffer = new StringBuffer();
         buffer.append("    [CF Threshold]\n");
         buffer.append("          .type    = ").append(Integer.toHexString(type)).append("\n");
-        // TODO Output the formula better
-        buffer.append("          .formula = ").append(formula).append("\n");
+        buffer.append("          .formula = ").append(Arrays.toString(formula.getTokens())).append("\n");
         buffer.append("          .value   = ").append(value).append("\n");
         buffer.append("    [/CF Threshold]\n");
         return buffer.toString();

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormatting.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormatting.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormatting.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormatting.java Thu Jul 16 21:23:54 2015
@@ -74,20 +74,20 @@ import org.apache.poi.ss.util.CellRangeA
  * </PRE>
  */
 public final class HSSFConditionalFormatting  implements ConditionalFormatting {
-    private final HSSFWorkbook _workbook;
+    private final HSSFSheet sheet;
     private final CFRecordsAggregate cfAggregate;
 
     // TODO Should this be assigning unique IDs to the rules
     //  as they get added to the file?
 
-    HSSFConditionalFormatting(HSSFWorkbook workbook, CFRecordsAggregate cfAggregate) {
-        if(workbook == null) {
-            throw new IllegalArgumentException("workbook must not be null");
+    HSSFConditionalFormatting(HSSFSheet sheet, CFRecordsAggregate cfAggregate) {
+        if(sheet == null) {
+            throw new IllegalArgumentException("sheet must not be null");
         }
         if(cfAggregate == null) {
             throw new IllegalArgumentException("cfAggregate must not be null");
         }
-        _workbook = workbook;
+        this.sheet = sheet; 
         this.cfAggregate = cfAggregate;
     }
     CFRecordsAggregate getCFRecordsAggregate() {
@@ -143,7 +143,7 @@ public final class HSSFConditionalFormat
      */
     public HSSFConditionalFormattingRule getRule(int idx) {
         CFRuleBase ruleRecord = cfAggregate.getRule(idx);
-        return new HSSFConditionalFormattingRule(_workbook, ruleRecord);
+        return new HSSFConditionalFormattingRule(sheet, ruleRecord);
     }
 
     /**

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java Thu Jul 16 21:23:54 2015
@@ -41,15 +41,17 @@ public final class HSSFConditionalFormat
 
     private final CFRuleBase cfRuleRecord;
     private final HSSFWorkbook workbook;
+    private final HSSFSheet sheet;
 
-    HSSFConditionalFormattingRule(HSSFWorkbook pWorkbook, CFRuleBase pRuleRecord) {
-        if (pWorkbook == null) {
-            throw new IllegalArgumentException("pWorkbook must not be null");
+    HSSFConditionalFormattingRule(HSSFSheet pSheet, CFRuleBase pRuleRecord) {
+        if (pSheet == null) {
+            throw new IllegalArgumentException("pSheet must not be null");
         }
         if (pRuleRecord == null) {
             throw new IllegalArgumentException("pRuleRecord must not be null");
         }
-        workbook = pWorkbook;
+        sheet = pSheet;
+        workbook = pSheet.getWorkbook();
         cfRuleRecord = pRuleRecord;
     }
 
@@ -179,12 +181,12 @@ public final class HSSFConditionalFormat
         IconMultiStateFormatting iconFormatting = cfRule12Record.getMultiStateFormatting();
         if (iconFormatting != null)
         {
-            return new HSSFIconMultiStateFormatting(cfRule12Record);
+            return new HSSFIconMultiStateFormatting(cfRule12Record, sheet);
         }
         else if( create )
         {
             iconFormatting = cfRule12Record.createMultiStateFormatting();
-            return new HSSFIconMultiStateFormatting(cfRule12Record);
+            return new HSSFIconMultiStateFormatting(cfRule12Record, sheet);
         }
         else
         {
@@ -245,7 +247,10 @@ public final class HSSFConditionalFormat
         return null;
     }
 
-    private String toFormulaString(Ptg[] parsedExpression) {
+    protected String toFormulaString(Ptg[] parsedExpression) {
+        return toFormulaString(parsedExpression, workbook);
+    }
+    protected static String toFormulaString(Ptg[] parsedExpression, HSSFWorkbook workbook) {
         if(parsedExpression == null || parsedExpression.length == 0) {
             return null;
         }

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingThreshold.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingThreshold.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingThreshold.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingThreshold.java Thu Jul 16 21:23:54 2015
@@ -17,8 +17,10 @@
 
 package org.apache.poi.hssf.usermodel;
 
+import static org.apache.poi.hssf.record.CFRuleBase.parseFormula;
+import static org.apache.poi.hssf.usermodel.HSSFConditionalFormattingRule.toFormulaString;
+
 import org.apache.poi.hssf.record.cf.Threshold;
-import org.apache.poi.ss.formula.Formula;
 
 /**
  * High level representation for Icon / Multi-State / Databar /
@@ -26,9 +28,13 @@ import org.apache.poi.ss.formula.Formula
  */
 public final class HSSFConditionalFormattingThreshold implements org.apache.poi.ss.usermodel.ConditionalFormattingThreshold {
     private final Threshold threshold;
+    private final HSSFSheet sheet;
+    private final HSSFWorkbook workbook;
 
-    protected HSSFConditionalFormattingThreshold(Threshold threshold) {
+    protected HSSFConditionalFormattingThreshold(Threshold threshold, HSSFSheet sheet) {
         this.threshold = threshold;
+        this.sheet = sheet;
+        this.workbook = sheet.getWorkbook();
     }
     protected Threshold getThreshold() {
         return threshold;
@@ -41,11 +47,11 @@ public final class HSSFConditionalFormat
         threshold.setType((byte)type.id);
     }
 
-    public Formula getFormula() {
-        return threshold.getFormula();
+    public String getFormula() {
+        return toFormulaString(threshold.getParsedExpression(), workbook);
     }
-    public void setFormula(Formula formula) {
-        threshold.setFormula(formula);
+    public void setFormula(String formula) {
+        threshold.setParsedExpression(parseFormula(formula, sheet));
     }
 
     public Double getValue() {

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFIconMultiStateFormatting.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFIconMultiStateFormatting.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFIconMultiStateFormatting.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFIconMultiStateFormatting.java Thu Jul 16 21:23:54 2015
@@ -27,10 +27,12 @@ import org.apache.poi.ss.usermodel.Condi
  *  component of Conditional Formatting settings
  */
 public final class HSSFIconMultiStateFormatting implements org.apache.poi.ss.usermodel.IconMultiStateFormatting {
+    private final HSSFSheet sheet;
     private final CFRule12Record cfRule12Record;
     private final IconMultiStateFormatting iconFormatting;
 
-    protected HSSFIconMultiStateFormatting(CFRule12Record cfRule12Record) {
+    protected HSSFIconMultiStateFormatting(CFRule12Record cfRule12Record, HSSFSheet sheet) {
+        this.sheet = sheet;
         this.cfRule12Record = cfRule12Record;
         this.iconFormatting = this.cfRule12Record.getMultiStateFormatting();
     }
@@ -60,7 +62,7 @@ public final class HSSFIconMultiStateFor
         Threshold[] t = iconFormatting.getThresholds();
         HSSFConditionalFormattingThreshold[] ht = new HSSFConditionalFormattingThreshold[t.length];
         for (int i=0; i<t.length; i++) {
-            ht[i] = new HSSFConditionalFormattingThreshold(t[i]);
+            ht[i] = new HSSFConditionalFormattingThreshold(t[i], sheet);
         }
         return ht;
     }

Modified: poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheetConditionalFormatting.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheetConditionalFormatting.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheetConditionalFormatting.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/usermodel/HSSFSheetConditionalFormatting.java Thu Jul 16 21:23:54 2015
@@ -17,7 +17,6 @@
 
 package org.apache.poi.hssf.usermodel;
 
-import org.apache.poi.hssf.record.CFRule12Record;
 import org.apache.poi.hssf.record.CFRuleBase;
 import org.apache.poi.hssf.record.CFRuleRecord;
 import org.apache.poi.hssf.record.aggregates.CFRecordsAggregate;
@@ -25,7 +24,6 @@ import org.apache.poi.hssf.record.aggreg
 import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.usermodel.ConditionalFormatting;
 import org.apache.poi.ss.usermodel.ConditionalFormattingRule;
-import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;
 import org.apache.poi.ss.usermodel.SheetConditionalFormatting;
 import org.apache.poi.ss.util.CellRangeAddress;
 
@@ -69,19 +67,15 @@ public final class HSSFSheetConditionalF
 			byte comparisonOperation,
 			String formula1,
 			String formula2) {
-
-		HSSFWorkbook wb = _sheet.getWorkbook();
 		CFRuleRecord rr = CFRuleRecord.create(_sheet, comparisonOperation, formula1, formula2);
-		return new HSSFConditionalFormattingRule(wb, rr);
+		return new HSSFConditionalFormattingRule(_sheet, rr);
 	}
 
     public HSSFConditionalFormattingRule createConditionalFormattingRule(
             byte comparisonOperation,
             String formula1) {
-
-        HSSFWorkbook wb = _sheet.getWorkbook();
         CFRuleRecord rr = CFRuleRecord.create(_sheet, comparisonOperation, formula1, null);
-        return new HSSFConditionalFormattingRule(wb, rr);
+        return new HSSFConditionalFormattingRule(_sheet, rr);
     }
 
 	/**
@@ -92,9 +86,8 @@ public final class HSSFSheetConditionalF
 	 * @param formula - formula for the valued, compared with the cell
 	 */
 	public HSSFConditionalFormattingRule createConditionalFormattingRule(String formula) {
-		HSSFWorkbook wb = _sheet.getWorkbook();
 		CFRuleRecord rr = CFRuleRecord.create(_sheet, formula);
-		return new HSSFConditionalFormattingRule(wb, rr);
+		return new HSSFConditionalFormattingRule(_sheet, rr);
 	}
 	
 	// TODO Support types beyond CELL_VALUE_IS and FORMULA
@@ -107,9 +100,8 @@ public final class HSSFSheetConditionalF
 /*
 	public HSSFConditionalFormattingRule createConditionalFormattingRule(
 	        IconSet iconSet) { // TODO Multi-State data for it
-        HSSFWorkbook wb = _sheet.getWorkbook();
         CFRule12Record rr = CFRule12Record.create(_sheet, iconSet);
-        return new HSSFConditionalFormattingRule(wb, rr);
+        return new HSSFConditionalFormattingRule(_sheet, rr);
 	}
 */
 
@@ -232,7 +224,7 @@ public final class HSSFSheetConditionalF
 		if (cf == null) {
 			return null;
 		}
-		return new HSSFConditionalFormatting(_sheet.getWorkbook(), cf);
+		return new HSSFConditionalFormatting(_sheet, cf);
 	}
 
 	/**

Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingThreshold.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingThreshold.java?rev=1691452&r1=1691451&r2=1691452&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingThreshold.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/ConditionalFormattingThreshold.java Thu Jul 16 21:23:54 2015
@@ -19,7 +19,6 @@
 
 package org.apache.poi.ss.usermodel;
 
-import org.apache.poi.ss.formula.Formula;
 
 /**
  * The Threshold / CFVO / Conditional Formatting Value Object.
@@ -79,13 +78,13 @@ public interface ConditionalFormattingTh
      * Formula to use to calculate the threshold,
      *  or <code>null</code> if no formula 
      */
-    Formula getFormula();
+    String getFormula();
 
     /**
      * Sets the formula used to calculate the threshold,
      *  or unsets it if <code>null</code> is given.
      */
-    void setFormula(Formula formula);
+    void setFormula(String formula);
     
     /**
      * Gets the value used for the threshold, or 



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org