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/15 01:30:54 UTC
svn commit: r1691107 - in /poi/trunk/src/java/org/apache/poi:
hssf/record/CFRule12Record.java hssf/record/cf/FontFormatting.java
hssf/record/cf/IconMultiStateFormatting.java
ss/usermodel/IconMultiStateFormatting.java util/BitFieldFactory.java
Author: nick
Date: Tue Jul 14 23:30:53 2015
New Revision: 1691107
URL: http://svn.apache.org/r1691107
Log:
HSSF record support for CF Iconset rules
Added:
poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateFormatting.java
Modified:
poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.java
poi/trunk/src/java/org/apache/poi/hssf/record/cf/FontFormatting.java
poi/trunk/src/java/org/apache/poi/ss/usermodel/IconMultiStateFormatting.java
poi/trunk/src/java/org/apache/poi/util/BitFieldFactory.java
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.java?rev=1691107&r1=1691106&r2=1691107&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.java Tue Jul 14 23:30:53 2015
@@ -19,6 +19,7 @@ package org.apache.poi.hssf.record;
import java.util.Arrays;
+import org.apache.poi.hssf.record.cf.IconMultiStateFormatting;
import org.apache.poi.hssf.record.common.FtrHeader;
import org.apache.poi.hssf.record.common.FutureRecord;
import org.apache.poi.hssf.usermodel.HSSFSheet;
@@ -52,11 +53,12 @@ public final class CFRule12Record extend
private byte template_param_length;
private byte[] template_params;
+ private IconMultiStateFormatting multistate;
+
// TODO Parse these
private byte[] gradient_data;
private byte[] databar_data;
private byte[] filter_data;
- private byte[] multistate_data;
/** Creates new CFRuleRecord */
private CFRule12Record(byte conditionType, byte comparisonOperation) {
@@ -161,7 +163,7 @@ public final class CFRule12Record extend
} else if (type == CONDITION_TYPE_FILTER) {
filter_data = in.readRemainder();
} else if (type == CONDITION_TYPE_ICON_SET) {
- multistate_data = in.readRemainder();
+ multistate = new IconMultiStateFormatting(in);
}
}
@@ -231,7 +233,7 @@ public final class CFRule12Record extend
} else if (type == CONDITION_TYPE_FILTER) {
out.write(filter_data);
} else if (type == CONDITION_TYPE_ICON_SET) {
- out.write(multistate_data);
+ multistate.serialize(out);
}
}
@@ -255,7 +257,7 @@ public final class CFRule12Record extend
} else if (type == CONDITION_TYPE_FILTER) {
len += filter_data.length;
} else if (type == CONDITION_TYPE_ICON_SET) {
- len += multistate_data.length;
+ len += multistate.getDataLength();
}
return len;
}
@@ -286,7 +288,9 @@ public final class CFRule12Record extend
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");
+ if (multistate != null) {
+ buffer.append(multistate);
+ }
buffer.append("[/CFRULE12]\n");
return buffer.toString();
}
Modified: poi/trunk/src/java/org/apache/poi/hssf/record/cf/FontFormatting.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/cf/FontFormatting.java?rev=1691107&r1=1691106&r2=1691107&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/cf/FontFormatting.java (original)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/cf/FontFormatting.java Tue Jul 14 23:30:53 2015
@@ -368,8 +368,7 @@ public final class FontFormatting {
setInt(OFFSET_FONT_COLOR_INDEX,fci);
}
- private boolean getOptionFlag(BitField field)
- {
+ private boolean getOptionFlag(BitField field) {
int optionFlags = getInt(OFFSET_OPTION_FLAGS);
int value = field.getValue(optionFlags);
return value==0? true : false ;
Added: poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateFormatting.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateFormatting.java?rev=1691107&view=auto
==============================================================================
--- poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateFormatting.java (added)
+++ poi/trunk/src/java/org/apache/poi/hssf/record/cf/IconMultiStateFormatting.java Tue Jul 14 23:30:53 2015
@@ -0,0 +1,123 @@
+/* ====================================================================
+ 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.cf;
+
+import org.apache.poi.ss.usermodel.IconMultiStateFormatting.IconSet;
+import org.apache.poi.util.BitField;
+import org.apache.poi.util.BitFieldFactory;
+import org.apache.poi.util.HexDump;
+import org.apache.poi.util.LittleEndianInput;
+import org.apache.poi.util.LittleEndianOutput;
+import org.apache.poi.util.POILogFactory;
+import org.apache.poi.util.POILogger;
+
+/**
+ * Icon / Multi-State Conditional Formatting Rule Record.
+ */
+public final class IconMultiStateFormatting implements Cloneable {
+ private static POILogger log = POILogFactory.getLogger(IconMultiStateFormatting.class);
+
+ private IconSet iconSet;
+ private byte options;
+ private byte[] states; // TODO Decode
+
+ private static BitField iconOnly = BitFieldFactory.getInstance(0x01);
+ private static BitField reversed = BitFieldFactory.getInstance(0x04);
+
+ public IconMultiStateFormatting() {
+ iconSet = IconSet.GYR_3_TRAFFIC_LIGHTS;
+ options = 0;
+ states = new byte[0];
+ }
+ public IconMultiStateFormatting(LittleEndianInput in) {
+ in.readShort(); // Ignored
+ in.readByte(); // Reserved
+ int num = in.readByte();
+ int set = in.readByte();
+ iconSet = IconSet.byId(set);
+ if (iconSet.num != num) {
+ log.log(POILogger.WARN, "Inconsistent Icon Set defintion, found " + iconSet + " but defined as " + num + " entries");
+ }
+ options = in.readByte();
+ // TODO Decode
+ states = new byte[in.available()];
+ in.readFully(states);
+ }
+
+ public IconSet getIconSet() {
+ return iconSet;
+ }
+ public void setIconSet(IconSet set) {
+ this.iconSet = set;
+ }
+
+ public boolean isIconOnly() {
+ return getOptionFlag(iconOnly);
+ }
+ public void setIconOnly(boolean only) {
+ setOptionFlag(only, iconOnly);
+ }
+
+ public boolean isReversed() {
+ return getOptionFlag(reversed);
+ }
+ public void setReversed(boolean rev) {
+ setOptionFlag(rev, reversed);
+ }
+
+ private boolean getOptionFlag(BitField field) {
+ int value = field.getValue(options);
+ return value==0? true : false ;
+ }
+ private void setOptionFlag(boolean option, BitField field) {
+ options = field.setByteBoolean(options, option);
+ }
+
+ public String toString() {
+ StringBuffer buffer = new StringBuffer();
+ buffer.append(" [Icon Formatting]\n");
+ buffer.append(" .icon_set = ").append(iconSet).append("\n");
+ buffer.append(" .icon_only= ").append(isIconOnly()).append("\n");
+ buffer.append(" .reversed = ").append(isReversed()).append("\n");
+ buffer.append(" .states = ").append(HexDump.toHex(states)).append("\n");
+ buffer.append(" [/Icon Formatting]\n");
+ return buffer.toString();
+ }
+
+ public Object clone() {
+ IconMultiStateFormatting rec = new IconMultiStateFormatting();
+ rec.iconSet = iconSet;
+ rec.options = options;
+ rec.states = new byte[states.length];
+ System.arraycopy(states, 0, rec.states, 0, states.length);
+ return rec;
+ }
+
+ public int getDataLength() {
+ return 6 + states.length;
+ }
+
+ public void serialize(LittleEndianOutput out) {
+ out.writeShort(0);
+ out.writeByte(0);
+ out.writeByte(iconSet.num);
+ out.writeByte(iconSet.id);
+ out.writeByte(options);
+ out.write(states);
+ }
+}
Modified: poi/trunk/src/java/org/apache/poi/ss/usermodel/IconMultiStateFormatting.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/ss/usermodel/IconMultiStateFormatting.java?rev=1691107&r1=1691106&r2=1691107&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/ss/usermodel/IconMultiStateFormatting.java (original)
+++ poi/trunk/src/java/org/apache/poi/ss/usermodel/IconMultiStateFormatting.java Tue Jul 14 23:30:53 2015
@@ -19,17 +19,44 @@
package org.apache.poi.ss.usermodel;
-import java.util.HashMap;
-import java.util.Map;
-
/**
* High level representation for the Icon / Multi-State Formatting
* component of Conditional Formatting settings
*/
public interface IconMultiStateFormatting {
- class IconSet {
+ public enum IconSet {
+ /** Green Up / Yellow Side / Red Down arrows */
+ GYR_3_ARROW(0, 3, "3Arrows"),
+ /** Grey Up / Side / Down arrows */
+ GREY_3_ARROWS(1, 3, "3ArrowsGray"),
+ /** Green / Yellow / Red flags */
+ GYR_3_FLAGS(2, 3, "3Flags"),
+ /** Green / Yellow / Red traffic lights (no background) */
+ GYR_3_TRAFFIC_LIGHTS(3, 3, null),
+ /** Green Circle / Yellow Triangle / Red Diamond */
+ GYR_3_SHAPES(4, 3, "3Signs"),
+ /** Green / Yellow / Red traffic lights on a black square background */
+ GYR_3_TRAFFIC_LIGHTS_BOX(5, 3, "3TrafficLights2"),
+ /** Green Tick / Yellow ! / Red Cross on a circle background */
+ GYR_3_SYMBOLS_CIRCLE(6, 3, "3Symbols"),
+ /** Green Tick / Yellow ! / Red Cross (no background) */
+ GYR_3_SYMBOLS(7, 3, "3Symbols2"),
+ /** Green Up / Yellow NE / Yellow SE / Red Down arrows */
+ GYR_4_ARROWS(8, 4, "4Arrows"),
+ /** Grey Up / NE / SE / Down arrows */
+ GREY_4_ARROWS(9, 4, "4ArrowsGray"),
+ /** Red / Light Red / Grey / Black traffic lights */
+ RB_4_TRAFFIC_LIGHTS(0xA, 4, "4RedToBlack"),
+ RATINGS_4(0xB, 4, "4Rating"),
+ /** Green / Yellow / Red / Black traffic lights */
+ GYRB_4_TRAFFIC_LIGHTS(0xC, 4, "4TrafficLights"),
+ GYYYR_5_ARROWS(0xD, 5, "5Arrows"),
+ GREY_5_ARROWS(0xE, 5, "5ArrowsGray"),
+ RATINGS_5(0xF, 5, "5Rating"),
+ QUARTERS_5(0x10, 5, "5Quarters");
+
/** Numeric ID of the icon set */
- public final int id;
+ public int id;
/** How many icons in the set */
public final int num;
/** Name (system) of the set */
@@ -42,46 +69,14 @@ public interface IconMultiStateFormattin
return (name==null?"default":name);
}
- public static IconSet byId(int id) { return byId[id]; }
- public static IconSet byName(String name) { return byName.get(name); }
+ public static IconSet byId(int id) {
+ return values()[id];
+ }
- private static final IconSet[] byId = new IconSet[0x10];
- private static final Map<String,IconSet> byName = new HashMap<String, IconMultiStateFormatting.IconSet>();
private IconSet(int id, int num, String name) {
this.id = id; this.num = num; this.name = name;
- byId[id] = this;
- byName.put(getName(),this);
}
}
- /** Green Up / Yellow Side / Red Down arrows */
- static final IconSet GYR_3_ARROWS = new IconSet(0, 3, "3Arrows");
- /** Grey Up / Side / Down arrows */
- static final IconSet GREY_3_ARROWS = new IconSet(1, 3, "3ArrowsGray");
- /** Green / Yellow / Red flags */
- static final IconSet GYR_3_FLAGS = new IconSet(2, 3, "3Flags");
- /** Green / Yellow / Red traffic lights (no background) */
- static final IconSet GYR_3_TRAFFIC_LIGHTS = new IconSet(3, 3, null);
- /** Green Circle / Yellow Triangle / Red Diamond */
- static final IconSet GYR_3_SHAPES = new IconSet(4, 3, "3Signs");
- /** Green / Yellow / Red traffic lights on a black square background */
- static final IconSet GYR_3_TRAFFIC_LIGHTS_BOX = new IconSet(5, 3, "3TrafficLights2");
- /** Green Tick / Yellow ! / Red Cross on a circle background */
- static final IconSet GYR_3_SYMBOLS_CIRCLE = new IconSet(6, 3, "3Symbols");
- /** Green Tick / Yellow ! / Red Cross (no background) */
- static final IconSet GYR_3_SYMBOLS = new IconSet(7, 3, "3Symbols2");
- /** Green Up / Yellow NE / Yellow SE / Red Down arrows */
- static final IconSet GYR_4_ARROWS = new IconSet(8, 4, "4Arrows");
- /** Grey Up / NE / SE / Down arrows */
- static final IconSet GREY_4_ARROWS = new IconSet(9, 4, "4ArrowsGray");
- /** Red / Light Red / Grey / Black traffic lights */
- static final IconSet RB_4_TRAFFIC_LIGHTS = new IconSet(0xA, 4, "4RedToBlack");
- static final IconSet RATINGS_4 = new IconSet(0xB, 4, "4Rating");
- /** Green / Yellow / Red / Black traffic lights */
- static final IconSet GYRB_4_TRAFFIC_LIGHTS = new IconSet(0xC, 4, "4TrafficLights");
- static final IconSet GYYYR_5_ARROWS = new IconSet(0xD, 5, "5Arrows");
- static final IconSet GREY_5_ARROWS = new IconSet(0xE, 5, "5ArrowsGray");
- static final IconSet RATINGS_5 = new IconSet(0xF, 5, "5Rating");
- static final IconSet QUARTERS_5 = new IconSet(0x10, 5, "5Quarters");
/**
* Get the Icon Set used
Modified: poi/trunk/src/java/org/apache/poi/util/BitFieldFactory.java
URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/util/BitFieldFactory.java?rev=1691107&r1=1691106&r2=1691107&view=diff
==============================================================================
--- poi/trunk/src/java/org/apache/poi/util/BitFieldFactory.java (original)
+++ poi/trunk/src/java/org/apache/poi/util/BitFieldFactory.java Tue Jul 14 23:30:53 2015
@@ -21,11 +21,8 @@ package org.apache.poi.util;
import java.util.*;
/**
- * Returns immutable Btfield instances.
- *
- * @author Jason Height (jheight at apache dot org)
+ * Returns immutable Bitfield instances.
*/
-
public class BitFieldFactory {
private static Map<Integer, BitField> instances = new HashMap<Integer, BitField>();
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@poi.apache.org
For additional commands, e-mail: commits-help@poi.apache.org