]> source.dussan.org Git - poi.git/commitdiff
From bug #50786 - Speed up calls to HSSFColor.getIndexHash() by returning a cached...
authorNick Burch <nick@apache.org>
Fri, 4 Mar 2011 12:50:02 +0000 (12:50 +0000)
committerNick Burch <nick@apache.org>
Fri, 4 Mar 2011 12:50:02 +0000 (12:50 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1077920 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/examples/src/org/apache/poi/hssf/view/SVTableCellEditor.java
src/examples/src/org/apache/poi/hssf/view/SVTableUtils.java
src/examples/src/org/apache/poi/ss/examples/html/XSSFHtmlHelper.java
src/java/org/apache/poi/hssf/util/HSSFColor.java

index fb78826cec0ee5e243453b315df736c50479dc1c..11ed8d25e0884f184980aecd960c59b299907c50 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta2" date="2011-??-??">
+           <action dev="poi-developers" type="fix">50786 - Speed up calls to HSSFColor.getIndexHash() by returning a cached, unmodifiable Map. HSSFColor.getModifiableIndexHash() provides access to the old (slow but modifiable) functionality</action>
            <action dev="poi-developers" type="fix">47100 - Change related formulas and named ranges when XSSFWorkbook.setSheetName is called</action>
         </release>
         <release version="3.8-beta1" date="2011-03-07">
index 4fd79a962009dd0433e24d4e6980f7cccd08b82a..b0c57b0fe0875a2696c61104fa50e6b71551546c 100644 (file)
@@ -37,7 +37,7 @@ import org.apache.poi.hssf.util.HSSFColor;
 public class SVTableCellEditor extends AbstractCellEditor implements TableCellEditor, ActionListener {
   private static final Color black = getAWTColor(new HSSFColor.BLACK());
   private static final Color white = getAWTColor(new HSSFColor.WHITE());
-  private Hashtable colors = HSSFColor.getIndexHash();
+  private Map<Integer,HSSFColor> colors = HSSFColor.getIndexHash();
 
 
   private HSSFWorkbook wb;
index 08ac7b32e05c8eded5cefa19e71fc215dcc7ab21..23ffb851bdab4b296122d4201e27dd1aff3bd731 100644 (file)
@@ -31,7 +31,7 @@ import org.apache.poi.hssf.util.*;
  * @author     Jason Height
  */
 public class SVTableUtils {
-  private final static Hashtable colors = HSSFColor.getIndexHash();
+  private final static Map<Integer,HSSFColor> colors = HSSFColor.getIndexHash();
   /**  Description of the Field */
   public final static Color black = getAWTColor(new HSSFColor.BLACK());
   /**  Description of the Field */
index 36fca3a9b9d41674af54849350e591c4b7e40c96..08108e8e6c3236ae4cb49a436e5f0dd5fbb6d159 100644 (file)
 ==================================================================== */
 package org.apache.poi.ss.examples.html;
 
+import java.util.Formatter;
+import java.util.Map;
+
 import org.apache.poi.hssf.util.HSSFColor;
 import org.apache.poi.ss.usermodel.CellStyle;
 import org.apache.poi.xssf.usermodel.XSSFCellStyle;
 import org.apache.poi.xssf.usermodel.XSSFColor;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 
-import java.util.Formatter;
-import java.util.Hashtable;
-
 /**
  * Implementation of {@link HtmlHelper} for XSSF files.
  *
@@ -33,7 +33,7 @@ import java.util.Hashtable;
 public class XSSFHtmlHelper implements HtmlHelper {
     private final XSSFWorkbook wb;
 
-    private static final Hashtable colors = HSSFColor.getIndexHash();
+    private static final Map<Integer,HSSFColor> colors = HSSFColor.getIndexHash();
 
     public XSSFHtmlHelper(XSSFWorkbook wb) {
         this.wb = wb;
index bca0047dc3ec45840b4a3fcadb9d189d9f6bfb25..617224bdf66bfc5a4702fb9f888d2a432bc5a6cb 100644 (file)
@@ -18,7 +18,9 @@
 package org.apache.poi.hssf.util;
 
 import java.lang.reflect.Field;
+import java.util.Collections;
 import java.util.Hashtable;
+import java.util.Map;
 
 import org.apache.poi.ss.usermodel.Color;
 
@@ -37,7 +39,7 @@ import org.apache.poi.ss.usermodel.Color;
  * @author  Brian Sanders (bsanders at risklabs dot com) - full default color palette
  */
 public class HSSFColor implements Color {
-    // TODO make subclass instances immutable
+    private static Map<Integer,HSSFColor> indexHash; 
 
     /** Creates a new instance of HSSFColor */
     public HSSFColor()
@@ -45,17 +47,26 @@ public class HSSFColor implements Color {
     }
 
     /**
-     * this function returns all colors in a hastable.  Its not implemented as a
-     * static member/staticly initialized because that would be dirty in a
-     * server environment as it is intended.  This means you'll eat the time
-     * it takes to create it once per request but you will not hold onto it
-     * if you have none of those requests.
+     * This function returns all the colours in an unmodifiable Map.
+     * The map is cached on first use.
      *
-     * @return a hashtable containing all colors keyed by <tt>Integer</tt> excel-style palette indexes
+     * @return a Map containing all colours keyed by <tt>Integer</tt> excel-style palette indexes
      */
-    public final static Hashtable<Integer,HSSFColor> getIndexHash() {
+    public final static Map<Integer,HSSFColor> getIndexHash() {
+        if(indexHash == null) {
+           indexHash = Collections.unmodifiableMap( createColorsByIndexMap() );
+        }
 
-        return createColorsByIndexMap();
+        return indexHash;
+    }
+    /**
+     * This function returns all the Colours, stored in a Hashtable that
+     *  can be edited. No caching is performed. If you don't need to edit
+     *  the table, then call {@link #getIndexHash()} which returns a
+     *  statically cached imuatable map of colours.
+     */
+    public final static Hashtable<Integer,HSSFColor> getMutableIndexHash() {
+       return createColorsByIndexMap();
     }
 
     private static Hashtable<Integer,HSSFColor> createColorsByIndexMap() {