Return-Path: X-Original-To: apmail-poi-commits-archive@minotaur.apache.org Delivered-To: apmail-poi-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 423ED189AF for ; Sun, 19 Jul 2015 04:39:18 +0000 (UTC) Received: (qmail 25575 invoked by uid 500); 19 Jul 2015 04:39:18 -0000 Delivered-To: apmail-poi-commits-archive@poi.apache.org Received: (qmail 25540 invoked by uid 500); 19 Jul 2015 04:39:18 -0000 Mailing-List: contact commits-help@poi.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@poi.apache.org Delivered-To: mailing list commits@poi.apache.org Received: (qmail 25531 invoked by uid 99); 19 Jul 2015 04:39:18 -0000 Received: from eris.apache.org (HELO hades.apache.org) (140.211.11.105) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 19 Jul 2015 04:39:18 +0000 Received: from hades.apache.org (localhost [127.0.0.1]) by hades.apache.org (ASF Mail Server at hades.apache.org) with ESMTP id E381FAC0111 for ; Sun, 19 Jul 2015 04:39:17 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1691795 - in /poi/trunk/src/java/org/apache/poi/hssf/record: CFRule12Record.java cf/ColorGradientFormatting.java Date: Sun, 19 Jul 2015 04:39:17 -0000 To: commits@poi.apache.org From: nick@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20150719043917.E381FAC0111@hades.apache.org> Author: nick Date: Sun Jul 19 04:39:17 2015 New Revision: 1691795 URL: http://svn.apache.org/r1691795 Log: Start decoding the CF color scales for HSSF Added: poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientFormatting.java Modified: poi/trunk/src/java/org/apache/poi/hssf/record/CFRule12Record.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=1691795&r1=1691794&r2=1691795&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 Sun Jul 19 04:39:17 2015 @@ -19,6 +19,7 @@ package org.apache.poi.hssf.record; import java.util.Arrays; +import org.apache.poi.hssf.record.cf.ColorGradientFormatting; import org.apache.poi.hssf.record.cf.IconMultiStateFormatting; import org.apache.poi.hssf.record.cf.Threshold; import org.apache.poi.hssf.record.common.FtrHeader; @@ -56,9 +57,9 @@ public final class CFRule12Record extend private byte[] template_params; private IconMultiStateFormatting multistate; + private ColorGradientFormatting color_gradient; // TODO Parse these - private byte[] gradient_data; private byte[] databar_data; private byte[] filter_data; @@ -176,7 +177,7 @@ public final class CFRule12Record extend byte type = getConditionType(); if (type == CONDITION_TYPE_COLOR_SCALE) { - gradient_data = in.readRemainder(); + color_gradient = new ColorGradientFormatting(in); } else if (type == CONDITION_TYPE_DATA_BAR) { databar_data = in.readRemainder(); } else if (type == CONDITION_TYPE_FILTER) { @@ -261,7 +262,7 @@ public final class CFRule12Record extend byte type = getConditionType(); if (type == CONDITION_TYPE_COLOR_SCALE) { - out.write(gradient_data); + color_gradient.serialize(out); } else if (type == CONDITION_TYPE_DATA_BAR) { out.write(databar_data); } else if (type == CONDITION_TYPE_FILTER) { @@ -285,7 +286,7 @@ public final class CFRule12Record extend byte type = getConditionType(); if (type == CONDITION_TYPE_COLOR_SCALE) { - len += gradient_data.length; + len += color_gradient.getDataLength(); } else if (type == CONDITION_TYPE_DATA_BAR) { len += databar_data.length; } else if (type == CONDITION_TYPE_FILTER) { @@ -319,9 +320,11 @@ public final class CFRule12Record extend buffer.append(" .priority =").append(priority).append("\n"); buffer.append(" .template_type =").append(template_type).append("\n"); buffer.append(" .template_params=").append(HexDump.toHex(template_params)).append("\n"); - 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"); + if (color_gradient != null) { + buffer.append(color_gradient); + } if (multistate != null) { buffer.append(multistate); } Added: poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientFormatting.java URL: http://svn.apache.org/viewvc/poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientFormatting.java?rev=1691795&view=auto ============================================================================== --- poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientFormatting.java (added) +++ poi/trunk/src/java/org/apache/poi/hssf/record/cf/ColorGradientFormatting.java Sun Jul 19 04:39:17 2015 @@ -0,0 +1,134 @@ +/* ==================================================================== + 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.util.BitField; +import org.apache.poi.util.BitFieldFactory; +import org.apache.poi.util.LittleEndianInput; +import org.apache.poi.util.LittleEndianOutput; +import org.apache.poi.util.POILogFactory; +import org.apache.poi.util.POILogger; + +/** + * Color Gradient / Color Scale Conditional Formatting Rule Record. + * (Called Color Gradient in the file format docs, but more commonly + * Color Scale in the UI) + */ +public final class ColorGradientFormatting implements Cloneable { + private static POILogger log = POILogFactory.getLogger(ColorGradientFormatting.class); + + private byte options = 0; + private Threshold[] thresholds; + private byte[] colors; // TODO Decode + + private static BitField clamp = BitFieldFactory.getInstance(0x01); + private static BitField background = BitFieldFactory.getInstance(0x02); + + public ColorGradientFormatting() { + options = 3; + thresholds = new Threshold[3]; + } + public ColorGradientFormatting(LittleEndianInput in) { + in.readShort(); // Ignored + in.readByte(); // Reserved + int numI = in.readByte(); + int numG = in.readByte(); + if (numI != numG) { + log.log(POILogger.WARN, "Inconsistent Color Gradient defintion, found " + numI + " vs " + numG + " entries"); + } + options = in.readByte(); + + // TODO Are these correct? + thresholds = new Threshold[numI]; + for (int i=0; i