diff options
author | Nick Burch <nick@apache.org> | 2011-03-04 12:50:02 +0000 |
---|---|---|
committer | Nick Burch <nick@apache.org> | 2011-03-04 12:50:02 +0000 |
commit | d7cc7e582bc7215be659f17879573a8a9417fcc8 (patch) | |
tree | c77aabd8e2a707305a8cd594300d4a31ea48c5a6 | |
parent | ce77707b83b197ffd1b7a6be4b06d03ee3c042e4 (diff) | |
download | poi-d7cc7e582bc7215be659f17879573a8a9417fcc8.tar.gz poi-d7cc7e582bc7215be659f17879573a8a9417fcc8.zip |
From bug #50786 - Speed up calls to HSSFColor.getIndexHash() by returning a cached, unmodifiable Map. HSSFColor.getModifiableIndexHash() provides access to the old (slow but modifiable) functionality
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1077920 13f79535-47bb-0310-9956-ffa450edef68
5 files changed, 27 insertions, 15 deletions
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml index fb78826cec..11ed8d25e0 100644 --- a/src/documentation/content/xdocs/status.xml +++ b/src/documentation/content/xdocs/status.xml @@ -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"> diff --git a/src/examples/src/org/apache/poi/hssf/view/SVTableCellEditor.java b/src/examples/src/org/apache/poi/hssf/view/SVTableCellEditor.java index 4fd79a9620..b0c57b0fe0 100644 --- a/src/examples/src/org/apache/poi/hssf/view/SVTableCellEditor.java +++ b/src/examples/src/org/apache/poi/hssf/view/SVTableCellEditor.java @@ -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; diff --git a/src/examples/src/org/apache/poi/hssf/view/SVTableUtils.java b/src/examples/src/org/apache/poi/hssf/view/SVTableUtils.java index 08ac7b32e0..23ffb851bd 100644 --- a/src/examples/src/org/apache/poi/hssf/view/SVTableUtils.java +++ b/src/examples/src/org/apache/poi/hssf/view/SVTableUtils.java @@ -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 */ diff --git a/src/examples/src/org/apache/poi/ss/examples/html/XSSFHtmlHelper.java b/src/examples/src/org/apache/poi/ss/examples/html/XSSFHtmlHelper.java index 36fca3a9b9..08108e8e6c 100644 --- a/src/examples/src/org/apache/poi/ss/examples/html/XSSFHtmlHelper.java +++ b/src/examples/src/org/apache/poi/ss/examples/html/XSSFHtmlHelper.java @@ -16,15 +16,15 @@ ==================================================================== */ 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; diff --git a/src/java/org/apache/poi/hssf/util/HSSFColor.java b/src/java/org/apache/poi/hssf/util/HSSFColor.java index bca0047dc3..617224bdf6 100644 --- a/src/java/org/apache/poi/hssf/util/HSSFColor.java +++ b/src/java/org/apache/poi/hssf/util/HSSFColor.java @@ -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() { |