--- src/java/org/apache/poi/ss/usermodel/FormulaError.java (revision 1698089) +++ src/java/org/apache/poi/ss/usermodel/FormulaError.java (working copy) @@ -152,6 +152,10 @@ } } + /** + * @param errorCode the error code + * @return true if error code is a recognized error code + */ public static final boolean isValidCode(int errorCode) { for (FormulaError error : values()) { if (error.getCode() == errorCode) return true; @@ -160,11 +164,21 @@ return false; } + /** + * @param type the error code + * @return FormulaError enum corresponding to the error code + * @throws IllegalArgumentException if error code is unrecognized + */ public static FormulaError forInt(byte type){ - FormulaError err = bmap.get(type); + final FormulaError err = bmap.get(type); if(err == null) throw new IllegalArgumentException("Unknown error type: " + type); return err; } + /** + * @param type the error code + * @return FormulaError enum corresponding to the error code + * @throws IllegalArgumentException if error code is unrecognized + */ public static FormulaError forInt(int type){ FormulaError err = imap.get(type); if(err == null) err = bmap.get((byte)type); @@ -172,8 +186,13 @@ return err; } - public static FormulaError forString(String code){ - FormulaError err = smap.get(code); + /** + * @param code the error code string + * @return FormulaError enum corresponding to the error code + * @throws IllegalArgumentException if error code is unrecognized + */ + public static FormulaError forString(String code) throws IllegalArgumentException { + final FormulaError err = smap.get(code); if(err == null) throw new IllegalArgumentException("Unknown error code: " + code); return err; } --- src/java/org/apache/poi/ss/formula/constant/ErrorConstant.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/constant/ErrorConstant.java (working copy) @@ -18,6 +18,7 @@ package org.apache.poi.ss.formula.constant; import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.util.POILogFactory; import org.apache.poi.util.POILogger; /** @@ -26,27 +27,20 @@ * This class is a type-safe wrapper for a 16-bit int value performing a similar job to * ErrorEval. * + * @deprecated Use {@link FormulaError} instead where possible + * * @author Josh Micich */ public class ErrorConstant { private static POILogger logger = POILogFactory.getLogger(ErrorConstant.class); - // convenient access to name space - private static final ErrorConstants EC = null; - @SuppressWarnings("static-access") - private static final ErrorConstant NULL = new ErrorConstant(EC.ERROR_NULL); - @SuppressWarnings("static-access") - private static final ErrorConstant DIV_0 = new ErrorConstant(EC.ERROR_DIV_0); - @SuppressWarnings("static-access") - private static final ErrorConstant VALUE = new ErrorConstant(EC.ERROR_VALUE); - @SuppressWarnings("static-access") - private static final ErrorConstant REF = new ErrorConstant(EC.ERROR_REF); - @SuppressWarnings("static-access") - private static final ErrorConstant NAME = new ErrorConstant(EC.ERROR_NAME); - @SuppressWarnings("static-access") - private static final ErrorConstant NUM = new ErrorConstant(EC.ERROR_NUM); - @SuppressWarnings("static-access") - private static final ErrorConstant NA = new ErrorConstant(EC.ERROR_NA); + private static final ErrorConstant NULL = new ErrorConstant(ErrorConstants.ERROR_NULL); + private static final ErrorConstant DIV_0 = new ErrorConstant(ErrorConstants.ERROR_DIV_0); + private static final ErrorConstant VALUE = new ErrorConstant(ErrorConstants.ERROR_VALUE); + private static final ErrorConstant REF = new ErrorConstant(ErrorConstants.ERROR_REF); + private static final ErrorConstant NAME = new ErrorConstant(ErrorConstants.ERROR_NAME); + private static final ErrorConstant NUM = new ErrorConstant(ErrorConstants.ERROR_NUM); + private static final ErrorConstant NA = new ErrorConstant(ErrorConstants.ERROR_NA); private final int _errorCode; --- src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/NotEqualPtg.java (working copy) @@ -24,6 +24,7 @@ */ public final class NotEqualPtg extends ValueOperatorPtg { public final static byte sid = 0x0e; + private final static String NOT_EQUAL = "<>"; public static final ValueOperatorPtg instance = new NotEqualPtg(); @@ -43,8 +44,7 @@ StringBuffer buffer = new StringBuffer(); buffer.append( operands[0] ); - - buffer.append("<>"); + buffer.append(NOT_EQUAL); buffer.append( operands[1] ); return buffer.toString(); --- src/java/org/apache/poi/ss/formula/ptg/UnionPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/UnionPtg.java (working copy) @@ -25,6 +25,7 @@ */ public final class UnionPtg extends OperationPtg { public final static byte sid = 0x10; + private final static String UNION = ","; public static final OperationPtg instance = new UnionPtg(); @@ -47,7 +48,7 @@ public String toFormulaString() { - return ","; + return UNION; } @@ -57,7 +58,7 @@ StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - buffer.append(","); + buffer.append(UNION); buffer.append(operands[ 1 ]); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/Deleted3DPxg.java (working copy) @@ -18,7 +18,7 @@ package org.apache.poi.ss.formula.ptg; import org.apache.poi.ss.formula.SheetNameFormatter; -import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.util.LittleEndianOutput; @@ -48,7 +48,7 @@ } sb.append("sheet=").append(getSheetName()); sb.append(" ! "); - sb.append(ErrorConstants.getText(ErrorConstants.ERROR_REF)); + sb.append(FormulaError.REF.getString()); sb.append("]"); return sb.toString(); } @@ -75,7 +75,7 @@ SheetNameFormatter.appendFormat(sb, sheetName); } sb.append('!'); - sb.append(ErrorConstants.getText(ErrorConstants.ERROR_REF)); + sb.append(FormulaError.REF.getString()); return sb.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/AreaPtg.java (working copy) @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.ptg; +import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.util.AreaReference; import org.apache.poi.util.LittleEndianInput; @@ -33,9 +34,13 @@ public AreaPtg(LittleEndianInput in) { super(in); } + @Deprecated public AreaPtg(String arearef) { super(new AreaReference(arearef)); } + public AreaPtg(String arearef, SpreadsheetVersion version) { + super(new AreaReference(arearef, version)); + } public AreaPtg(AreaReference areaRef) { super(areaRef); } --- src/java/org/apache/poi/ss/formula/ptg/Ptg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/Ptg.java (working copy) @@ -249,6 +249,16 @@ public String toString(){ return this.getClass().toString(); } + + @Override + public boolean equals(Object other) { + return (other instanceof Ptg) && toString().equals(other.toString()); + } + + @Override + public int hashCode() { + return toString().hashCode(); + } public static final byte CLASS_REF = 0x00; public static final byte CLASS_VALUE = 0x20; --- src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/AreaErrPtg.java (working copy) @@ -17,7 +17,7 @@ package org.apache.poi.ss.formula.ptg; -import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -49,7 +49,7 @@ } public String toFormulaString() { - return ErrorConstants.getText(ErrorConstants.ERROR_REF); + return FormulaError.REF.getString(); } public byte getDefaultOperandClass() { --- src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/RefErrorPtg.java (working copy) @@ -17,7 +17,7 @@ package org.apache.poi.ss.formula.ptg; -import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -53,7 +53,7 @@ } public String toFormulaString() { - return ErrorConstants.getText(ErrorConstants.ERROR_REF); + return FormulaError.REF.getString(); } public byte getDefaultOperandClass() { --- src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/DeletedRef3DPtg.java (working copy) @@ -18,7 +18,7 @@ package org.apache.poi.ss.formula.ptg; -import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.ss.formula.FormulaRenderingWorkbook; import org.apache.poi.ss.formula.WorkbookDependentFormula; import org.apache.poi.util.LittleEndianInput; @@ -49,7 +49,7 @@ public String toFormulaString(FormulaRenderingWorkbook book) { return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, - ErrorConstants.getText(ErrorConstants.ERROR_REF)); + FormulaError.REF.getString()); } public String toFormulaString() { throw new RuntimeException("3D references need a workbook to determine formula text"); --- src/java/org/apache/poi/ss/formula/ptg/PowerPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/PowerPtg.java (working copy) @@ -24,6 +24,7 @@ */ public final class PowerPtg extends ValueOperatorPtg { public final static byte sid = 0x07; + private final static String POWER = "^"; public static final ValueOperatorPtg instance = new PowerPtg(); @@ -36,15 +37,14 @@ } public int getNumberOfOperands() { - return 2; // TODO - 2 seems wrong (Jun 2008). Maybe this method is not relevant + return 2; } public String toFormulaString(String[] operands) { StringBuffer buffer = new StringBuffer(); - buffer.append(operands[ 0 ]); - buffer.append("^"); + buffer.append(POWER); buffer.append(operands[ 1 ]); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/Area3DPtg.java (working copy) @@ -40,6 +40,7 @@ private int field_1_index_extern_sheet; + @Deprecated public Area3DPtg(String arearef, int externIdx) { super(new AreaReference(arearef)); setExternSheetIndex(externIdx); --- src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/Area3DPxg.java (working copy) @@ -17,6 +17,7 @@ package org.apache.poi.ss.formula.ptg; +import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.formula.SheetIdentifier; import org.apache.poi.ss.formula.SheetNameFormatter; import org.apache.poi.ss.formula.SheetRangeIdentifier; @@ -36,9 +37,13 @@ private String firstSheetName; private String lastSheetName; - public Area3DPxg(int externalWorkbookNumber, SheetIdentifier sheetName, String arearef) { - this(externalWorkbookNumber, sheetName, new AreaReference(arearef)); - } + @Deprecated + public Area3DPxg(int externalWorkbookNumber, SheetIdentifier sheetName, String arearef) { + this(externalWorkbookNumber, sheetName, new AreaReference(arearef)); + } + public Area3DPxg(int externalWorkbookNumber, SheetIdentifier sheetName, String arearef, SpreadsheetVersion version) { + this(externalWorkbookNumber, sheetName, new AreaReference(arearef, version)); + } public Area3DPxg(int externalWorkbookNumber, SheetIdentifier sheetName, AreaReference arearef) { super(arearef); this.externalWorkbookNumber = externalWorkbookNumber; @@ -50,15 +55,19 @@ } } + @Deprecated public Area3DPxg(SheetIdentifier sheetName, String arearef) { this(sheetName, new AreaReference(arearef)); } + public Area3DPxg(SheetIdentifier sheetName, String arearef, SpreadsheetVersion version) { + this(sheetName, new AreaReference(arearef, version)); + } public Area3DPxg(SheetIdentifier sheetName, AreaReference arearef) { this(-1, sheetName, arearef); } - @Override - public String toString() { + @Override + public String toString() { StringBuffer sb = new StringBuffer(); sb.append(getClass().getName()); sb.append(" ["); @@ -76,8 +85,8 @@ sb.append(formatReferenceAsString()); sb.append("]"); return sb.toString(); - } - + } + public int getExternalWorkbookNumber() { return externalWorkbookNumber; } --- src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/IntersectionPtg.java (working copy) @@ -24,6 +24,7 @@ */ public final class IntersectionPtg extends OperationPtg { public final static byte sid = 0x0f; + public final static String INTERSECTION = " "; public static final OperationPtg instance = new IntersectionPtg(); @@ -44,14 +45,14 @@ } public String toFormulaString() { - return " "; + return INTERSECTION; } public String toFormulaString(String[] operands) { StringBuffer buffer = new StringBuffer(); buffer.append(operands[0]); - buffer.append(" "); + buffer.append(INTERSECTION); buffer.append(operands[1]); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/DeletedArea3DPtg.java (working copy) @@ -17,7 +17,7 @@ package org.apache.poi.ss.formula.ptg; -import org.apache.poi.ss.usermodel.ErrorConstants; +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.ss.formula.FormulaRenderingWorkbook; import org.apache.poi.ss.formula.WorkbookDependentFormula; import org.apache.poi.util.LittleEndianInput; @@ -49,7 +49,7 @@ } public String toFormulaString(FormulaRenderingWorkbook book) { return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, - ErrorConstants.getText(ErrorConstants.ERROR_REF)); + FormulaError.REF.getString()); } public String toFormulaString() { throw new RuntimeException("3D references need a workbook to determine formula text"); --- src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/ErrPtg.java (working copy) @@ -17,7 +17,10 @@ package org.apache.poi.ss.formula.ptg; -import org.apache.poi.ss.usermodel.ErrorConstants; +import java.util.HashMap; +import java.util.Map; + +import org.apache.poi.ss.usermodel.FormulaError; import org.apache.poi.util.LittleEndianInput; import org.apache.poi.util.LittleEndianOutput; @@ -26,43 +29,45 @@ */ public final class ErrPtg extends ScalarConstantPtg { - // convenient access to namespace - private static final ErrorConstants EC = null; - /** #NULL! - Intersection of two cell ranges is empty */ - @SuppressWarnings("static-access") - public static final ErrPtg NULL_INTERSECTION = new ErrPtg(EC.ERROR_NULL); + public static final ErrPtg NULL_INTERSECTION = new ErrPtg(FormulaError.NULL); + /** #DIV/0! - Division by zero */ - @SuppressWarnings("static-access") - public static final ErrPtg DIV_ZERO = new ErrPtg(EC.ERROR_DIV_0); + public static final ErrPtg DIV_ZERO = new ErrPtg(FormulaError.DIV0); + /** #VALUE! - Wrong type of operand */ - @SuppressWarnings("static-access") - public static final ErrPtg VALUE_INVALID = new ErrPtg(EC.ERROR_VALUE); + public static final ErrPtg VALUE_INVALID = new ErrPtg(FormulaError.VALUE); + /** #REF! - Illegal or deleted cell reference */ - @SuppressWarnings("static-access") - public static final ErrPtg REF_INVALID = new ErrPtg(EC.ERROR_REF); + public static final ErrPtg REF_INVALID = new ErrPtg(FormulaError.REF); + /** #NAME? - Wrong function or range name */ - @SuppressWarnings("static-access") - public static final ErrPtg NAME_INVALID = new ErrPtg(EC.ERROR_NAME); + public static final ErrPtg NAME_INVALID = new ErrPtg(FormulaError.NAME); + /** #NUM! - Value range overflow */ - @SuppressWarnings("static-access") - public static final ErrPtg NUM_ERROR = new ErrPtg(EC.ERROR_NUM); + public static final ErrPtg NUM_ERROR = new ErrPtg(FormulaError.NUM); + /** #N/A - Argument or function not available */ - @SuppressWarnings("static-access") - public static final ErrPtg N_A = new ErrPtg(EC.ERROR_NA); - - + public static final ErrPtg N_A = new ErrPtg(FormulaError.NA); + + private static Map bmap = new HashMap(); + static { + bmap.put(FormulaError.NULL.getCode(), NULL_INTERSECTION); + bmap.put(FormulaError.DIV0.getCode(), DIV_ZERO); + bmap.put(FormulaError.VALUE.getCode(), VALUE_INVALID); + bmap.put(FormulaError.REF.getCode(), REF_INVALID); + bmap.put(FormulaError.NAME.getCode(), NAME_INVALID); + bmap.put(FormulaError.NUM.getCode(), NUM_ERROR); + bmap.put(FormulaError.NA.getCode(), N_A); + } + public static final short sid = 0x1c; private static final int SIZE = 2; private final int field_1_error_code; /** Creates new ErrPtg */ - - private ErrPtg(int errorCode) { - if(!ErrorConstants.isValidCode(errorCode)) { - throw new IllegalArgumentException("Invalid error code (" + errorCode + ")"); - } - field_1_error_code = errorCode; + private ErrPtg(FormulaError error) { + field_1_error_code = error.getCode(); } public static ErrPtg read(LittleEndianInput in) { @@ -75,7 +80,7 @@ } public String toFormulaString() { - return ErrorConstants.getText(field_1_error_code); + return FormulaError.forInt(field_1_error_code).getString(); } public int getSize() { @@ -87,15 +92,13 @@ } public static ErrPtg valueOf(int code) { - switch(code) { - case ErrorConstants.ERROR_DIV_0: return DIV_ZERO; - case ErrorConstants.ERROR_NA: return N_A; - case ErrorConstants.ERROR_NAME: return NAME_INVALID; - case ErrorConstants.ERROR_NULL: return NULL_INTERSECTION; - case ErrorConstants.ERROR_NUM: return NUM_ERROR; - case ErrorConstants.ERROR_REF: return REF_INVALID; - case ErrorConstants.ERROR_VALUE: return VALUE_INVALID; - } - throw new RuntimeException("Unexpected error code (" + code + ")"); + return valueOf((byte) code); } + + private static ErrPtg valueOf(byte code) { + if (bmap.containsKey(code)) + return bmap.get(code); + else + throw new RuntimeException("Unexpected error code (" + code + ")"); + } } --- src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/EqualPtg.java (working copy) @@ -23,6 +23,7 @@ */ public final class EqualPtg extends ValueOperatorPtg { public final static byte sid = 0x0b; + private final static String EQUAL = "="; public static final ValueOperatorPtg instance = new EqualPtg(); @@ -43,7 +44,7 @@ buffer.append(operands[ 0 ]); - buffer.append("="); + buffer.append(EQUAL); buffer.append(operands[ 1 ]); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/GreaterEqualPtg.java (working copy) @@ -26,6 +26,7 @@ public final class GreaterEqualPtg extends ValueOperatorPtg { public final static int SIZE = 1; public final static byte sid = 0x0c; + private final static String GREATER_THAN_OR_EQUAL = ">="; public static final ValueOperatorPtg instance = new GreaterEqualPtg(); @@ -45,8 +46,7 @@ StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - - buffer.append(">="); + buffer.append(GREATER_THAN_OR_EQUAL); buffer.append(operands[ 1 ]); return buffer.toString(); --- src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/ParenthesisPtg.java (working copy) @@ -33,6 +33,8 @@ private final static int SIZE = 1; public final static byte sid = 0x15; + private final static String OPEN = "("; + private final static String CLOSE = ")"; public static final ControlPtg instance = new ParenthesisPtg(); @@ -49,10 +51,10 @@ } public String toFormulaString() { - return "()"; + return OPEN + CLOSE; } public String toFormulaString(String[] operands) { - return "(" + operands[0] + ")"; + return OPEN + operands[0] + CLOSE; } } --- src/java/org/apache/poi/ss/formula/ptg/SubtractPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/SubtractPtg.java (working copy) @@ -24,6 +24,7 @@ */ public final class SubtractPtg extends ValueOperatorPtg { public final static byte sid = 0x04; + public final static String SUBTRACT = "-"; public static final ValueOperatorPtg instance = new SubtractPtg(); @@ -43,7 +44,7 @@ StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - buffer.append("-"); + buffer.append(SUBTRACT); buffer.append(operands[ 1 ]); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/LessEqualPtg.java (working copy) @@ -28,6 +28,7 @@ */ public final class LessEqualPtg extends ValueOperatorPtg { public final static byte sid = 0x0a; + private final static String LESS_THAN_OR_EQUAL = "<="; public static final ValueOperatorPtg instance = new LessEqualPtg(); @@ -46,7 +47,7 @@ public String toFormulaString(String[] operands) { StringBuffer buffer = new StringBuffer(); buffer.append( operands[0] ); - buffer.append("<="); + buffer.append(LESS_THAN_OR_EQUAL); buffer.append( operands[1] ); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/UnknownPtg.java (working copy) @@ -25,6 +25,7 @@ public class UnknownPtg extends Ptg { private short size = 1; private final int _sid; + private final static String UNKNOWN = "UNKNOWN"; public UnknownPtg(int sid) { _sid = sid; @@ -42,7 +43,7 @@ } public String toFormulaString() { - return "UNKNOWN"; + return UNKNOWN; } public byte getDefaultOperandClass() { return Ptg.CLASS_VALUE; --- src/java/org/apache/poi/ss/formula/ptg/DividePtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/DividePtg.java (working copy) @@ -24,6 +24,7 @@ */ public final class DividePtg extends ValueOperatorPtg { public final static byte sid = 0x06; + private final static String DIVIDE = "/"; public static final ValueOperatorPtg instance = new DividePtg(); @@ -43,7 +44,7 @@ StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - buffer.append("/"); + buffer.append(DIVIDE); buffer.append(operands[ 1 ]); return buffer.toString(); } --- src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java (revision 1698089) +++ src/java/org/apache/poi/ss/formula/ptg/MultiplyPtg.java (working copy) @@ -24,6 +24,7 @@ */ public final class MultiplyPtg extends ValueOperatorPtg { public final static byte sid = 0x05; + private final static String MULT = "*"; public static final ValueOperatorPtg instance = new MultiplyPtg(); @@ -43,7 +44,7 @@ StringBuffer buffer = new StringBuffer(); buffer.append(operands[ 0 ]); - buffer.append("*"); + buffer.append(MULT); buffer.append(operands[ 1 ]); return buffer.toString(); } --- src/testcases/org/apache/poi/ss/formula/ptg/TestArea3DPtg.java (revision 1698089) +++ src/testcases/org/apache/poi/ss/formula/ptg/TestArea3DPtg.java (working copy) @@ -19,6 +19,8 @@ import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.SpreadsheetVersion; +import org.apache.poi.ss.util.AreaReference; /** * Tests for Area3DPtg @@ -27,12 +29,32 @@ */ public final class TestArea3DPtg extends AbstractPtgTestCase { + @SuppressWarnings("deprecation") + public void testConstructors() { + final String ref = "A1:B1"; + final SpreadsheetVersion version = SpreadsheetVersion.EXCEL97; + final AreaReference areaRef = new AreaReference("A1:B1", version); + + final Area3DPtg aptgRef = new Area3DPtg(0, 0, 0, 1, true, true, true, true, -1); + Area3DPtg aptg; + aptg = new Area3DPtg(areaRef, -1); + assertTrue(aptgRef.equals(aptg)); + assertEquals(aptgRef, aptg); + + aptg = new Area3DPtg(ref, -1); //deprecated + assertEquals(aptgRef, aptg); + + aptg = new Area3DPtg(0, 0, 0, 1, true, true, true, true, -1); + assertEquals(aptgRef, aptg); + } + /** * confirms that sheet names get properly escaped */ public void testToFormulaString() { - Area3DPtg target = new Area3DPtg("A1:B1", (short)0); + final AreaReference ref = new AreaReference("A1:B1", SpreadsheetVersion.EXCEL97); + Area3DPtg target = new Area3DPtg(ref, (short)0); String sheetName = "my sheet"; HSSFWorkbook wb = createWorkbookWithSheet(sheetName); --- src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java (revision 1698089) +++ src/testcases/org/apache/poi/ss/formula/ptg/TestAreaPtg.java (working copy) @@ -22,6 +22,8 @@ import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.SpreadsheetVersion; +import org.apache.poi.ss.util.AreaReference; /** * Tests for {@link AreaPtg}. @@ -41,6 +43,28 @@ relative = new AreaPtg(firstRow,lastRow,firstCol,lastCol,true,true,true,true); absolute = new AreaPtg(firstRow,lastRow,firstCol,lastCol,false,false,false,false); } + + @SuppressWarnings("deprecation") + public void testConstructors() + { + final String ref = "A5:B7"; + final SpreadsheetVersion version = SpreadsheetVersion.EXCEL2007; + + AreaPtg aptg; + aptg = new AreaPtg(new AreaReference(ref, version)); + assertEquals(ref, aptg.toFormulaString()); + + // FIXME: add AreaPtg(LittleEndianInput) test + + aptg = new AreaPtg(ref); //deprecated + assertEquals(ref, aptg.toFormulaString()); + + aptg = new AreaPtg(ref, version); + assertEquals(ref, aptg.toFormulaString()); + + aptg = new AreaPtg(4,6,0,1,true,true,true,true); + assertEquals(ref, aptg.toFormulaString()); + } public void testSetColumnsAbsolute() {