Converted ConstantValueParser to use plain Strings instead of UnicodeStrings
git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@711513 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
36c4c0bacf
commit
54885b5650
@ -17,8 +17,6 @@
|
|||||||
|
|
||||||
package org.apache.poi.hssf.record.constant;
|
package org.apache.poi.hssf.record.constant;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.UnicodeString;
|
|
||||||
import org.apache.poi.hssf.record.UnicodeString.UnicodeRecordStats;
|
|
||||||
import org.apache.poi.util.LittleEndianInput;
|
import org.apache.poi.util.LittleEndianInput;
|
||||||
import org.apache.poi.util.LittleEndianOutput;
|
import org.apache.poi.util.LittleEndianOutput;
|
||||||
import org.apache.poi.util.StringUtil;
|
import org.apache.poi.util.StringUtil;
|
||||||
@ -65,7 +63,7 @@ public final class ConstantValueParser {
|
|||||||
case TYPE_NUMBER:
|
case TYPE_NUMBER:
|
||||||
return new Double(in.readDouble());
|
return new Double(in.readDouble());
|
||||||
case TYPE_STRING:
|
case TYPE_STRING:
|
||||||
return new UnicodeString(StringUtil.readUnicodeString(in));
|
return StringUtil.readUnicodeString(in);
|
||||||
case TYPE_BOOLEAN:
|
case TYPE_BOOLEAN:
|
||||||
return readBoolean(in);
|
return readBoolean(in);
|
||||||
case TYPE_ERROR_CODE:
|
case TYPE_ERROR_CODE:
|
||||||
@ -111,10 +109,8 @@ public final class ConstantValueParser {
|
|||||||
if(cls == Boolean.class || cls == Double.class || cls == ErrorConstant.class) {
|
if(cls == Boolean.class || cls == Double.class || cls == ErrorConstant.class) {
|
||||||
return 8;
|
return 8;
|
||||||
}
|
}
|
||||||
UnicodeString strVal = (UnicodeString)object;
|
String strVal = (String)object;
|
||||||
UnicodeRecordStats urs = new UnicodeRecordStats();
|
return StringUtil.getEncodedSize(strVal);
|
||||||
strVal.getRecordSize(urs);
|
|
||||||
return urs.recordSize;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void encode(LittleEndianOutput out, Object[] values) {
|
public static void encode(LittleEndianOutput out, Object[] values) {
|
||||||
@ -142,10 +138,10 @@ public final class ConstantValueParser {
|
|||||||
out.writeDouble(dVal.doubleValue());
|
out.writeDouble(dVal.doubleValue());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof UnicodeString) {
|
if (value instanceof String) {
|
||||||
UnicodeString usVal = (UnicodeString) value;
|
String val = (String) value;
|
||||||
out.writeByte(TYPE_STRING);
|
out.writeByte(TYPE_STRING);
|
||||||
StringUtil.writeUnicodeString(out, usVal.getString());
|
StringUtil.writeUnicodeString(out, val);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (value instanceof ErrorConstant) {
|
if (value instanceof ErrorConstant) {
|
||||||
|
@ -206,8 +206,8 @@ public final class ArrayPtg extends Ptg {
|
|||||||
if (o == null) {
|
if (o == null) {
|
||||||
throw new RuntimeException("Array item cannot be null");
|
throw new RuntimeException("Array item cannot be null");
|
||||||
}
|
}
|
||||||
if (o instanceof UnicodeString) {
|
if (o instanceof String) {
|
||||||
return "\"" + ((UnicodeString)o).getString() + "\"";
|
return "\"" + (String)o + "\"";
|
||||||
}
|
}
|
||||||
if (o instanceof Double) {
|
if (o instanceof Double) {
|
||||||
return ((Double)o).toString();
|
return ((Double)o).toString();
|
||||||
|
@ -162,6 +162,15 @@ public class StringUtil {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the number of bytes that would be written by {@link #writeUnicodeString(LittleEndianOutput, String)}
|
||||||
|
*/
|
||||||
|
public static int getEncodedSize(String value) {
|
||||||
|
int result = 2 + 1;
|
||||||
|
result += value.length() * (StringUtil.hasMultibyte(value) ? 2 : 1);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Takes a unicode (java) string, and returns it as 8 bit data (in ISO-8859-1
|
* Takes a unicode (java) string, and returns it as 8 bit data (in ISO-8859-1
|
||||||
* codepage).
|
* codepage).
|
||||||
|
@ -22,7 +22,6 @@ import java.util.Arrays;
|
|||||||
import junit.framework.TestCase;
|
import junit.framework.TestCase;
|
||||||
|
|
||||||
import org.apache.poi.hssf.record.TestcaseRecordInputStream;
|
import org.apache.poi.hssf.record.TestcaseRecordInputStream;
|
||||||
import org.apache.poi.hssf.record.UnicodeString;
|
|
||||||
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
import org.apache.poi.hssf.usermodel.HSSFErrorConstants;
|
||||||
import org.apache.poi.util.HexRead;
|
import org.apache.poi.util.HexRead;
|
||||||
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
|
import org.apache.poi.util.LittleEndianByteArrayOutputStream;
|
||||||
@ -36,7 +35,7 @@ public final class TestConstantValueParser extends TestCase {
|
|||||||
Boolean.TRUE,
|
Boolean.TRUE,
|
||||||
null,
|
null,
|
||||||
new Double(1.1),
|
new Double(1.1),
|
||||||
new UnicodeString("Sample text"),
|
"Sample text",
|
||||||
ErrorConstant.valueOf(HSSFErrorConstants.ERROR_DIV_0),
|
ErrorConstant.valueOf(HSSFErrorConstants.ERROR_DIV_0),
|
||||||
};
|
};
|
||||||
private static final byte[] SAMPLE_ENCODING = HexRead.readFromString(
|
private static final byte[] SAMPLE_ENCODING = HexRead.readFromString(
|
||||||
|
@ -66,10 +66,10 @@ public final class TestArrayPtg extends TestCase {
|
|||||||
|
|
||||||
|
|
||||||
assertEquals(Boolean.TRUE, values[0][0]);
|
assertEquals(Boolean.TRUE, values[0][0]);
|
||||||
assertEquals(new UnicodeString("ABCD"), values[0][1]);
|
assertEquals("ABCD", values[0][1]);
|
||||||
assertEquals(new Double(0), values[1][0]);
|
assertEquals(new Double(0), values[1][0]);
|
||||||
assertEquals(Boolean.FALSE, values[1][1]);
|
assertEquals(Boolean.FALSE, values[1][1]);
|
||||||
assertEquals(new UnicodeString("FG"), values[1][2]);
|
assertEquals("FG", values[1][2]);
|
||||||
|
|
||||||
byte[] outBuf = new byte[ENCODED_CONSTANT_DATA.length];
|
byte[] outBuf = new byte[ENCODED_CONSTANT_DATA.length];
|
||||||
ptg.writeTokenValueBytes(new LittleEndianByteArrayOutputStream(outBuf, 0));
|
ptg.writeTokenValueBytes(new LittleEndianByteArrayOutputStream(outBuf, 0));
|
||||||
|
Loading…
Reference in New Issue
Block a user