]> source.dussan.org Git - poi.git/commitdiff
Start on XSSF CF Iconset for #58130
authorNick Burch <nick@apache.org>
Fri, 17 Jul 2015 02:55:22 +0000 (02:55 +0000)
committerNick Burch <nick@apache.org>
Fri, 17 Jul 2015 02:55:22 +0000 (02:55 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1691479 13f79535-47bb-0310-9956-ffa450edef68

src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFConditionalFormattingRule.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFIconMultiStateFormatting.java [new file with mode: 0644]
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFSheetConditionalFormatting.java

index a1386e400d1f3826e44a14a2a21e0fa8542f9dc2..814e73ca098329fdffa8265ecdab124f1a979fd2 100644 (file)
@@ -23,15 +23,11 @@ import java.util.HashMap;
 import java.util.Map;\r
 \r
 import org.apache.poi.ss.usermodel.*;\r
+import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold.RangeType;\r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;\r
 import org.apache.poi.xssf.usermodel.XSSFFontFormatting;\r
 import org.apache.poi.xssf.model.StylesTable;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTCfRule;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STCfType;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STConditionalFormattingOperator;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTDxf;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFont;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTFill;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTBorder;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.*;\r
 \r
 /**\r
  * XSSF suport for Conditional Formatting rules\r
@@ -179,12 +175,46 @@ public class XSSFConditionalFormattingRule implements ConditionalFormattingRule
         return new XSSFPatternFormatting(dxf.getFill());\r
     }\r
     \r
+    public XSSFIconMultiStateFormatting createMultiStateFormatting(IconSet iconSet) {\r
+        // Is it already there?\r
+        if (_cfRule.isSetIconSet() && _cfRule.getType() == STCfType.ICON_SET)\r
+            return getMultiStateFormatting();\r
+        \r
+        // Mark it as being an Icon Set\r
+        _cfRule.setType(STCfType.ICON_SET);\r
 \r
-    public IconMultiStateFormatting createMultiStateFormatting() {\r
-        throw new IllegalArgumentException("Not implemented yet"); // TODO \r
+        // Ensure the right element\r
+        CTIconSet icons = null;\r
+        if (_cfRule.isSetIconSet()) {\r
+            icons = _cfRule.getIconSet();\r
+        } else {\r
+            icons = _cfRule.addNewIconSet();\r
+        }\r
+        // Set the type of the icon set\r
+        if (iconSet.name != null) {\r
+            STIconSetType.Enum xIconSet = STIconSetType.Enum.forString(iconSet.name);\r
+            icons.setIconSet(xIconSet);\r
+        }\r
+        \r
+        // Add a default set of thresholds\r
+        int jump = 100 / iconSet.num;\r
+        STCfvoType.Enum type = STCfvoType.Enum.forString(RangeType.PERCENT.name);\r
+        for (int i=0; i<iconSet.num; i++) {\r
+            CTCfvo cfvo = icons.addNewCfvo();\r
+            cfvo.setType(type);\r
+            cfvo.setVal(Integer.toString(i*jump));\r
+        }\r
+        \r
+        // Wrap and return\r
+        return new XSSFIconMultiStateFormatting(icons);\r
     }\r
-    public IconMultiStateFormatting getMultiStateFormatting() {\r
-        throw new IllegalArgumentException("Not implemented yet"); // TODO \r
+    public XSSFIconMultiStateFormatting getMultiStateFormatting() {\r
+        if (_cfRule.isSetIconSet()) {\r
+            CTIconSet icons = _cfRule.getIconSet();\r
+            return new XSSFIconMultiStateFormatting(icons);\r
+        } else {\r
+            return null;\r
+        }\r
     }\r
 \r
     /**\r
diff --git a/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFIconMultiStateFormatting.java b/src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFIconMultiStateFormatting.java
new file mode 100644 (file)
index 0000000..526805d
--- /dev/null
@@ -0,0 +1,72 @@
+/*\r
+ *  ====================================================================\r
+ *    Licensed to the Apache Software Foundation (ASF) under one or more\r
+ *    contributor license agreements.  See the NOTICE file distributed with\r
+ *    this work for additional information regarding copyright ownership.\r
+ *    The ASF licenses this file to You under the Apache License, Version 2.0\r
+ *    (the "License"); you may not use this file except in compliance with\r
+ *    the License.  You may obtain a copy of the License at\r
+ *\r
+ *        http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ *    Unless required by applicable law or agreed to in writing, software\r
+ *    distributed under the License is distributed on an "AS IS" BASIS,\r
+ *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ *    See the License for the specific language governing permissions and\r
+ *    limitations under the License.\r
+ * ====================================================================\r
+ */\r
+package org.apache.poi.xssf.usermodel;\r
+\r
+import org.apache.poi.ss.usermodel.ConditionalFormattingThreshold;\r
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.CTIconSet;\r
+import org.openxmlformats.schemas.spreadsheetml.x2006.main.STIconSetType;\r
+\r
+/**\r
+ * High level representation for Icon / Multi-State Formatting \r
+ *  component of Conditional Formatting settings\r
+ */\r
+public class XSSFIconMultiStateFormatting implements IconMultiStateFormatting {\r
+    CTIconSet _iconset;\r
+\r
+    /*package*/ XSSFIconMultiStateFormatting(CTIconSet iconset){\r
+        _iconset = iconset;\r
+    }\r
+\r
+    public IconSet getIconSet() {\r
+        return IconSet.valueOf(\r
+                _iconset.getIconSet().toString()\r
+        );\r
+    }\r
+    public void setIconSet(IconSet set) {\r
+        STIconSetType.Enum xIconSet = STIconSetType.Enum.forString(set.name);\r
+        _iconset.setIconSet(xIconSet);\r
+    }\r
+\r
+    public boolean isIconOnly() {\r
+        if (_iconset.isSetShowValue())\r
+            return !_iconset.getShowValue();\r
+        return false;\r
+    }\r
+    public void setIconOnly(boolean only) {\r
+        _iconset.setShowValue(!only);\r
+    }\r
+\r
+    public boolean isReversed() {\r
+        if (_iconset.isSetReverse())\r
+            return _iconset.getReverse();\r
+        return false;\r
+    }\r
+    public void setReversed(boolean reversed) {\r
+        _iconset.setReverse(reversed);\r
+    }\r
+\r
+    public XSSFConditionalFormattingThreshold[] getThresholds() {\r
+        // TODO Implement\r
+        return null;\r
+    }\r
+    public void setThresholds(ConditionalFormattingThreshold[] thresholds) {\r
+        // TODO Implement\r
+    }\r
+}\r
index 7ff6cfc2ceed80caa0b7529abf53f8425cf8ff9f..afd8885e1b1ae9206c6011848b71277e6e329add 100644 (file)
@@ -27,19 +27,14 @@ 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.ConditionalFormattingThreshold.RangeType;\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.CTCfvo;\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.STCfvoType;\r
 import org.openxmlformats.schemas.spreadsheetml.x2006.main.STConditionalFormattingOperator;\r
-import org.openxmlformats.schemas.spreadsheetml.x2006.main.STIconSetType;\r
 \r
 /**\r
  * XSSF Conditional Formattings\r
@@ -136,25 +131,8 @@ public class XSSFSheetConditionalFormatting implements SheetConditionalFormattin
     public XSSFConditionalFormattingRule createConditionalFormattingRule(IconSet iconSet) {\r
         XSSFConditionalFormattingRule rule = new XSSFConditionalFormattingRule(_sheet);\r
         \r
-        // Mark it as being an Icon Set\r
-        CTCfRule cfRule = rule.getCTCfRule();\r
-        cfRule.setType(STCfType.ICON_SET);\r
-\r
-        // Set the type of the icon set\r
-        CTIconSet icons = cfRule.addNewIconSet();\r
-        if (iconSet.name != null) {\r
-            STIconSetType.Enum xIconSet = STIconSetType.Enum.forString(iconSet.name);\r
-            icons.setIconSet(xIconSet);\r
-        }\r
-        \r
-        // Add a default set of thresholds\r
-        int jump = 100 / iconSet.num;\r
-        STCfvoType.Enum type = STCfvoType.Enum.forString(RangeType.PERCENT.name);\r
-        for (int i=0; i<iconSet.num; i++) {\r
-            CTCfvo cfvo = icons.addNewCfvo();\r
-            cfvo.setType(type);\r
-            cfvo.setVal(Integer.toString(i*jump));\r
-        }\r
+        // Have it setup, with suitable defaults\r
+        rule.createMultiStateFormatting(iconSet);\r
         \r
         // All done!\r
         return rule;\r