]> source.dussan.org Git - poi.git/commitdiff
Fix bug #50847 - XSSFFont now accepts the full range of Charsets from FontChartset
authorNick Burch <nick@apache.org>
Fri, 4 Mar 2011 14:01:14 +0000 (14:01 +0000)
committerNick Burch <nick@apache.org>
Fri, 4 Mar 2011 14:01:14 +0000 (14:01 +0000)
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1077950 13f79535-47bb-0310-9956-ffa450edef68

src/documentation/content/xdocs/status.xml
src/java/org/apache/poi/ss/usermodel/FontCharset.java
src/ooxml/java/org/apache/poi/xssf/usermodel/XSSFFont.java
src/ooxml/testcases/org/apache/poi/xssf/usermodel/TestXSSFFont.java

index 11ed8d25e0884f184980aecd960c59b299907c50..b6944750258810fd018bb3bd13da7aff9446883e 100644 (file)
@@ -34,6 +34,7 @@
 
     <changes>
         <release version="3.8-beta2" date="2011-??-??">
+           <action dev="poi-developers" type="fix">50847 - XSSFFont now accepts the full range of Charsets from FontChartset</action>
            <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>
index ba06d8cc8f6c8c975d7b4ef1abbaecd753c1384b..90e4038b31203ccf1b3ab8f372f6460c57857f07 100644 (file)
@@ -70,6 +70,8 @@ public enum FontCharset {
     }
 
     public static FontCharset valueOf(int value){
+        if(value >= _table.length)
+           return null;
         return _table[value];
     }
 }
index 1578f6af55197a3e75bfcce580ae569ee6f4e1c9..cdf93c8ff37310ce97ec600d3186a5962dbcd288 100644 (file)
@@ -306,19 +306,11 @@ public class XSSFFont implements Font {
      * @see FontCharset
      */
     public void setCharSet(int charset) {
-        CTIntProperty charsetProperty = _ctFont.sizeOfCharsetArray() == 0 ? _ctFont.addNewCharset() : _ctFont.getCharsetArray(0);
-        switch (charset) {
-            case Font.ANSI_CHARSET:
-                charsetProperty.setVal(FontCharset.ANSI.getValue());
-                break;
-            case Font.SYMBOL_CHARSET:
-                charsetProperty.setVal(FontCharset.SYMBOL.getValue());
-                break;
-            case Font.DEFAULT_CHARSET:
-                charsetProperty.setVal(FontCharset.DEFAULT.getValue());
-                break;
-            default:
-                throw new POIXMLException("Attention: an attempt to set a type of unknow charset and charset");
+        FontCharset fontCharset = FontCharset.valueOf(charset);
+        if(fontCharset != null) {
+           setCharSet(fontCharset);
+        } else {
+           throw new POIXMLException("Attention: an attempt to set a type of unknow charset and charset");
         }
     }
 
@@ -328,7 +320,15 @@ public class XSSFFont implements Font {
      * @param charSet
      */
     public void setCharSet(FontCharset charSet) {
-        setCharSet((byte)charSet.getValue());
+       CTIntProperty charsetProperty;
+       if(_ctFont.sizeOfCharsetArray() == 0) {
+          charsetProperty = _ctFont.addNewCharset();
+       } else {
+          charsetProperty = _ctFont.getCharsetArray(0);
+       }
+       // We know that FontCharset only has valid entries in it,
+       //  so we can just set the int value from it
+       charsetProperty.setVal( charSet.getValue() );
     }
 
     /**
index b0de667a3676dd286f938f2444acdf6605b66092..b55833f4199aaa9ed8645a874e4b57389dff313d 100644 (file)
@@ -17,6 +17,7 @@
 
 package org.apache.poi.xssf.usermodel;
 
+import org.apache.poi.POIXMLException;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.XSSFITestDataProvider;
 import org.apache.poi.xssf.XSSFTestDataSamples;
@@ -73,7 +74,22 @@ public final class TestXSSFFont extends BaseTestFont{
 
                xssfFont.setCharSet(FontCharset.DEFAULT);
                assertEquals(FontCharset.DEFAULT.getValue(),ctFont.getCharsetArray(0).getVal());
-               
+
+               // Try with a few less usual ones:
+               // Set with the Charset itself
+      xssfFont.setCharSet(FontCharset.RUSSIAN);
+      assertEquals(FontCharset.RUSSIAN.getValue(), xssfFont.getCharSet());
+      // And set with the Charset index
+      xssfFont.setCharSet(FontCharset.ARABIC.getValue());
+      assertEquals(FontCharset.ARABIC.getValue(), xssfFont.getCharSet());
+      
+      // This one isn't allowed
+      assertEquals(null, FontCharset.valueOf(9999));
+      try {
+         xssfFont.setCharSet(9999);
+         fail("Shouldn't be able to set an invalid charset");
+      } catch(POIXMLException e) {}
+      
                
                // Now try with a few sample files