From 3ba74f83198b50398813e2b659f5cc775c76b2b6 Mon Sep 17 00:00:00 2001 From: Javen O'Neal Date: Sun, 17 Apr 2016 03:39:21 +0000 Subject: [PATCH] bug 59340: lookup IndexedColors by index git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1739539 13f79535-47bb-0310-9956-ffa450edef68 --- .../poi/ss/usermodel/IndexedColors.java | 28 ++++++++++ .../poi/ss/usermodel/TestIndexedColors.java | 56 +++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 src/testcases/org/apache/poi/ss/usermodel/TestIndexedColors.java diff --git a/src/java/org/apache/poi/ss/usermodel/IndexedColors.java b/src/java/org/apache/poi/ss/usermodel/IndexedColors.java index 61d7f6818..92ebc08a1 100644 --- a/src/java/org/apache/poi/ss/usermodel/IndexedColors.java +++ b/src/java/org/apache/poi/ss/usermodel/IndexedColors.java @@ -31,6 +31,7 @@ package org.apache.poi.ss.usermodel; */ public enum IndexedColors { + // 0-7? BLACK(8), WHITE(9), RED(10), @@ -50,6 +51,7 @@ public enum IndexedColors { CORNFLOWER_BLUE(24), MAROON(25), LEMON_CHIFFON(26), + // 27? ORCHID(28), CORAL(29), ROYAL_BLUE(30), @@ -80,6 +82,13 @@ public enum IndexedColors { GREY_80_PERCENT(63), AUTOMATIC(64); + private final static IndexedColors[] _values = new IndexedColors[65]; + static { + for (IndexedColors color : values()) { + _values[color.index] = color; + } + } + public final short index; IndexedColors(int idx){ @@ -94,4 +103,23 @@ public enum IndexedColors { public short getIndex(){ return index; } + + /** + * + * + * @param index the index of the color + * @return the corresponding IndexedColors enum + * @throws IllegalArgumentException if index is not a valid IndexedColors + * @since 3.15-beta2 + */ + public static IndexedColors fromInt(int index) { + if (index < 0 || index >= _values.length) { + throw new IllegalArgumentException("Illegal IndexedColor index: " + index); + } + IndexedColors color = _values[index]; + if (color == null) { + throw new IllegalArgumentException("Illegal IndexedColor index: " + index); + } + return color; + } } diff --git a/src/testcases/org/apache/poi/ss/usermodel/TestIndexedColors.java b/src/testcases/org/apache/poi/ss/usermodel/TestIndexedColors.java new file mode 100644 index 000000000..5ca6621e7 --- /dev/null +++ b/src/testcases/org/apache/poi/ss/usermodel/TestIndexedColors.java @@ -0,0 +1,56 @@ +/* ==================================================================== + 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.ss.usermodel; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +import org.junit.Test; + +/** + * @author Yegor Kozlov + */ +public final class TestIndexedColors { + + @Test + public void fromInt() { + int[] illegalIndices = { -1, 0, 27, 65 }; + for (int index : illegalIndices) { + try { + IndexedColors.fromInt(index); + fail("Expected IllegalArgumentException: " + index); + } + catch (final IllegalArgumentException e) { + // expected + } + } + assertEquals(IndexedColors.BLACK, IndexedColors.fromInt(8)); + assertEquals(IndexedColors.GOLD, IndexedColors.fromInt(51)); + assertEquals(IndexedColors.AUTOMATIC, IndexedColors.fromInt(64)); + } + + @Test + public void getIndex() { + assertEquals(51, IndexedColors.GOLD.getIndex()); + } + + @Test + public void index() { + assertEquals(51, IndexedColors.GOLD.index); + } +} \ No newline at end of file