]> source.dussan.org Git - poi.git/commitdiff
#58130 more progress towards supporting other CF types
authorNick Burch <nick@apache.org>
Fri, 17 Jul 2015 01:20:20 +0000 (01:20 +0000)
committerNick Burch <nick@apache.org>
Fri, 17 Jul 2015 01:20:20 +0000 (01:20 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1691472 13f79535-47bb-0310-9956-ffa450edef68

src/java/org/apache/poi/hssf/record/CFRule12Record.java
src/java/org/apache/poi/hssf/usermodel/HSSFSheetConditionalFormatting.java
src/java/org/apache/poi/ss/usermodel/ConditionalFormattingRule.java
src/java/org/apache/poi/ss/usermodel/SheetConditionalFormatting.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFConditionalFormattingRule.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java

index 230cb1dff4f401fad9e63568278e1d5d4b1aac17..a44f81cd27de34e5a917c65788dc2565fe2fe453 100644 (file)
@@ -20,11 +20,13 @@ package org.apache.poi.hssf.record;
 import java.util.Arrays;
 
 import org.apache.poi.hssf.record.cf.IconMultiStateFormatting;
+import org.apache.poi.hssf.record.cf.Threshold;
 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.usermodel.IconMultiStateFormatting.IconSet;
 import org.apache.poi.ss.util.CellRangeAddress;
 import org.apache.poi.util.HexDump;
 import org.apache.poi.util.LittleEndianOutput;
@@ -116,6 +118,22 @@ public final class CFRule12Record extends CFRuleBase implements FutureRecord {
         return new CFRule12Record(CONDITION_TYPE_CELL_VALUE_IS, comparisonOperation, 
                 formula1, formula2, formula3);
     }
+    /**
+     * Creates a new Icon Set / Multi-State formatting
+     */
+    public static CFRule12Record create(HSSFSheet sheet, IconSet iconSet) {
+        Threshold[] ts = new Threshold[iconSet.num];
+        for (int i=0; i<ts.length; i++) {
+            ts[i] = new Threshold();
+        }
+        
+        CFRule12Record r = new CFRule12Record(CONDITION_TYPE_COLOR_SCALE, 
+                                              ComparisonOperator.NO_COMPARISON);
+        r.getMultiStateFormatting().setIconSet(iconSet);
+        r.getMultiStateFormatting().setThresholds(ts);
+        return r;
+    }
+    // TODO Static creators for the other record types
 
     public CFRule12Record(RecordInputStream in) {
         futureHeader = new FtrHeader(in);
index c4509944fbfef34398868d65097e618b77124de7..9857cb74db49a86fedadb0b623ba82d5f8d5d789 100644 (file)
@@ -17,6 +17,7 @@
 
 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;
@@ -24,6 +25,7 @@ import org.apache.poi.hssf.record.aggregates.ConditionalFormattingTable;
 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;
 
@@ -90,21 +92,23 @@ public final class HSSFSheetConditionalFormatting implements SheetConditionalFor
                return new HSSFConditionalFormattingRule(_sheet, rr);
        }
        
-       // TODO Support types beyond CELL_VALUE_IS and FORMULA
-       
        /**
         * A factory method allowing the creation of conditional formatting
-        *  rules using an Icon Set / Multi-State formatting/
+        *  rules using an Icon Set / Multi-State formatting.
+        * The thresholds for it will be created, but will be empty
+        *  and require configuring with 
+        *  {@link HSSFConditionalFormattingRule#getMultiStateFormatting()}
+        *  then
+        *  {@link HSSFIconMultiStateFormatting#getThresholds()}
         */
-       // TODO Implement
-/*
        public HSSFConditionalFormattingRule createConditionalFormattingRule(
-               IconSet iconSet) { // TODO Multi-State data for it
+               IconSet iconSet) {
         CFRule12Record rr = CFRule12Record.create(_sheet, iconSet);
         return new HSSFConditionalFormattingRule(_sheet, rr);
        }
-*/
 
+    // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs
+    
        /**
         * Adds a copy of HSSFConditionalFormatting object to the sheet
         * <p>This method could be used to copy HSSFConditionalFormatting object
index 04c04a269d2fa35a5e90ac5f8364f99662e61063..5fb315147e09857f00ce2e182dda22304992c700 100644 (file)
@@ -74,10 +74,15 @@ public interface ConditionalFormattingRule {
     PatternFormatting createPatternFormatting();\r
 \r
     /**\r
-     * @return - pattern formatting object  if defined,  <code>null</code> otherwise\r
+     * @return - pattern formatting object if defined, <code>null</code> otherwise\r
      */\r
     PatternFormatting getPatternFormatting();\r
 \r
+    /**\r
+     * @return - icon / multi-state formatting object if defined, <code>null</code> otherwise\r
+     */\r
+    IconMultiStateFormatting getMultiStateFormatting();\r
+    \r
     /**\r
      * Type of conditional formatting rule.\r
      * <p>\r
index 92e64124a425cb6ab73b2281c9a5fb62536a510f..a28c342a74a3364e5b9667905c29d58b9f80d19b 100644 (file)
@@ -19,6 +19,7 @@
 \r
 package org.apache.poi.ss.usermodel;\r
 \r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;\r
 import org.apache.poi.ss.util.CellRangeAddress;\r
 \r
 /**\r
@@ -135,6 +136,18 @@ public interface SheetConditionalFormatting {
      */\r
     ConditionalFormattingRule createConditionalFormattingRule(String formula);\r
 \r
+    /**\r
+     * Create an Icon Set / Multi-State conditional formatting rule.\r
+     * <p>The thresholds for it will be created, but will be empty\r
+     *  and require configuring with \r
+     *  {@link ConditionalFormattingRule#getMultiStateFormatting()}\r
+     *  then\r
+     *  {@link IconMultiStateFormatting#getThresholds()}\r
+     */\r
+    ConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet);\r
+\r
+    // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs\r
+    \r
     /**\r
     * Gets Conditional Formatting object at a particular index\r
     *\r
index 92b91ceeb56ecca2c8bffd205074aa89e90efc77..a1386e400d1f3826e44a14a2a21e0fa8542f9dc2 100644 (file)
@@ -178,6 +178,14 @@ public class XSSFConditionalFormattingRule implements ConditionalFormattingRule
 \r
         return new XSSFPatternFormatting(dxf.getFill());\r
     }\r
+    \r
+\r
+    public IconMultiStateFormatting createMultiStateFormatting() {\r
+        throw new IllegalArgumentException("Not implemented yet"); // TODO \r
+    }\r
+    public IconMultiStateFormatting getMultiStateFormatting() {\r
+        throw new IllegalArgumentException("Not implemented yet"); // TODO \r
+    }\r
 \r
     /**\r
      * Type of conditional formatting rule.\r
index af3e07a8df985ad257bc0d5ba4590202878ef686..23d5f39f8edeac7c93f29e8cca03e3574e46a898 100644 (file)
@@ -27,10 +27,13 @@ import org.apache.poi.ss.SpreadsheetVersion;
 import org.apache.poi.ss.usermodel.ComparisonOperator;\r
 import org.apache.poi.ss.usermodel.ConditionalFormatting;\r
 import org.apache.poi.ss.usermodel.ConditionalFormattingRule;\r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;\r
 import org.apache.poi.ss.usermodel.SheetConditionalFormatting;\r
 import org.apache.poi.ss.util.CellRangeAddress;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCfRule;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTColorScale;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTConditionalFormatting;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIconSet;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTWorksheet;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCfType;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STConditionalFormattingOperator;\r
@@ -118,6 +121,32 @@ public class XSSFSheetConditionalFormatting implements SheetConditionalFormattin
         return rule;\r
     }\r
 \r
+    /**\r
+     * A factory method allowing the creation of conditional formatting\r
+     *  rules using an Icon Set / Multi-State formatting.\r
+     * The thresholds for it will be created, but will be empty\r
+     *  and require configuring with \r
+     *  {@link XSSFConditionalFormattingRule#getMultiStateFormatting()}\r
+     *  then\r
+     *  {@link XSSFIconMultiStateFormatting#getThresholds()}\r
+     */\r
+    public XSSFConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet) {\r
+        XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);\r
+        CTCfRule cfRule = rule.getCTCfRule();\r
+        cfRule.setType(STCfType.COLOR_SCALE);\r
+\r
+        CTIconSet icons = cfRule.addNewIconSet();\r
+        if (iconSet.name != null) {\r
+            // TODO Map to the enum\r
+//            icons.setIconSet();\r
+        }\r
+        // TODO Add cfvos\r
+        \r
+        return rule;\r
+    }\r
+\r
+    // TODO Support types beyond CELL_VALUE_IS and FORMULA and ICONs\r
+    \r
     @SuppressWarnings("deprecation")\r
     public int addConditionalFormatting(CellRangeAddress[] regions, ConditionalFormattingRule[] cfRules) {\r
         if (regions == null) {\r