git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1077950 13f79535-47bb-0310-9956-ffa450edef68tags/REL_3_8_BETA2
@@ -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> |
@@ -70,6 +70,8 @@ public enum FontCharset { | |||
} | |||
public static FontCharset valueOf(int value){ | |||
if(value >= _table.length) | |||
return null; | |||
return _table[value]; | |||
} | |||
} |
@@ -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() ); | |||
} | |||
/** |
@@ -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 | |||