From: Yegor Kozlov Date: Wed, 24 Nov 2010 16:46:02 +0000 (+0000) Subject: moved ptg classes to org.apache.poi.ss.formula.ptg X-Git-Tag: REL_3_8_BETA1~116 X-Git-Url: https://source.dussan.org/?a=commitdiff_plain;h=1fa438375b43f38397c8f5848f6ff3f7530bb7f1;p=poi.git moved ptg classes to org.apache.poi.ss.formula.ptg git-svn-id: https://svn.apache.org/repos/asf/poi/trunk@1038683 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/src/java/org/apache/poi/hssf/dev/FormulaViewer.java b/src/java/org/apache/poi/hssf/dev/FormulaViewer.java index 817c947052..fd85e82a20 100644 --- a/src/java/org/apache/poi/hssf/dev/FormulaViewer.java +++ b/src/java/org/apache/poi/hssf/dev/FormulaViewer.java @@ -24,10 +24,10 @@ import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.RecordFactory; -import org.apache.poi.hssf.record.formula.ExpPtg; -import org.apache.poi.hssf.record.formula.FuncPtg; -import org.apache.poi.hssf.record.formula.OperationPtg; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.ExpPtg; +import org.apache.poi.ss.formula.ptg.FuncPtg; +import org.apache.poi.ss.formula.ptg.OperationPtg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; diff --git a/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java b/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java index d65943b564..6de3650435 100644 --- a/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java +++ b/src/java/org/apache/poi/hssf/model/HSSFFormulaParser.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.model; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.usermodel.HSSFEvaluationWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.formula.FormulaParseException; diff --git a/src/java/org/apache/poi/hssf/model/InternalWorkbook.java b/src/java/org/apache/poi/hssf/model/InternalWorkbook.java index ce8d011feb..c047f2f0cd 100644 --- a/src/java/org/apache/poi/hssf/model/InternalWorkbook.java +++ b/src/java/org/apache/poi/hssf/model/InternalWorkbook.java @@ -81,9 +81,9 @@ import org.apache.poi.hssf.record.WindowProtectRecord; import org.apache.poi.hssf.record.WriteAccessRecord; import org.apache.poi.hssf.record.WriteProtectRecord; import org.apache.poi.hssf.record.common.UnicodeString; -import org.apache.poi.hssf.record.formula.NameXPtg; +import org.apache.poi.ss.formula.ptg.NameXPtg; import org.apache.poi.ss.formula.FormulaShifter; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.util.HSSFColor; import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalName; import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheet; diff --git a/src/java/org/apache/poi/hssf/model/LinkTable.java b/src/java/org/apache/poi/hssf/model/LinkTable.java index fd3b7a6e62..e92213899c 100644 --- a/src/java/org/apache/poi/hssf/model/LinkTable.java +++ b/src/java/org/apache/poi/hssf/model/LinkTable.java @@ -31,9 +31,9 @@ import org.apache.poi.hssf.record.NameCommentRecord; import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.SupBookRecord; -import org.apache.poi.hssf.record.formula.Area3DPtg; -import org.apache.poi.hssf.record.formula.NameXPtg; -import org.apache.poi.hssf.record.formula.Ref3DPtg; +import org.apache.poi.ss.formula.ptg.Area3DPtg; +import org.apache.poi.ss.formula.ptg.NameXPtg; +import org.apache.poi.ss.formula.ptg.Ref3DPtg; /** * Link Table (OOO pdf reference: 4.10.3 )

diff --git a/src/java/org/apache/poi/hssf/record/ArrayRecord.java b/src/java/org/apache/poi/hssf/record/ArrayRecord.java index 2f65d8a946..de32a63347 100644 --- a/src/java/org/apache/poi/hssf/record/ArrayRecord.java +++ b/src/java/org/apache/poi/hssf/record/ArrayRecord.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.util.CellRangeAddress8Bit; import org.apache.poi.ss.formula.Formula; import org.apache.poi.util.HexDump; diff --git a/src/java/org/apache/poi/hssf/record/CFRuleRecord.java b/src/java/org/apache/poi/hssf/record/CFRuleRecord.java index abe8191039..867ecec63f 100644 --- a/src/java/org/apache/poi/hssf/record/CFRuleRecord.java +++ b/src/java/org/apache/poi/hssf/record/CFRuleRecord.java @@ -21,7 +21,7 @@ import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.record.cf.BorderFormatting; import org.apache.poi.hssf.record.cf.FontFormatting; import org.apache.poi.hssf.record.cf.PatternFormatting; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.formula.FormulaType; diff --git a/src/java/org/apache/poi/hssf/record/CRNRecord.java b/src/java/org/apache/poi/hssf/record/CRNRecord.java index 71148942ed..6b2c47c54a 100644 --- a/src/java/org/apache/poi/hssf/record/CRNRecord.java +++ b/src/java/org/apache/poi/hssf/record/CRNRecord.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.constant.ConstantValueParser; +import org.apache.poi.ss.formula.constant.ConstantValueParser; import org.apache.poi.util.LittleEndianOutput; /** diff --git a/src/java/org/apache/poi/hssf/record/DVRecord.java b/src/java/org/apache/poi/hssf/record/DVRecord.java index d3e8ac8ab5..c5839e2abd 100644 --- a/src/java/org/apache/poi/hssf/record/DVRecord.java +++ b/src/java/org/apache/poi/hssf/record/DVRecord.java @@ -18,7 +18,7 @@ package org.apache.poi.hssf.record; import org.apache.poi.hssf.record.common.UnicodeString; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.util.CellRangeAddress; diff --git a/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java b/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java index cebae81282..6e74173d4c 100644 --- a/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java +++ b/src/java/org/apache/poi/hssf/record/EmbeddedObjectRefSubRecord.java @@ -19,11 +19,11 @@ package org.apache.poi.hssf.record; import java.io.ByteArrayInputStream; -import org.apache.poi.hssf.record.formula.Area3DPtg; -import org.apache.poi.hssf.record.formula.AreaPtg; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.hssf.record.formula.Ref3DPtg; -import org.apache.poi.hssf.record.formula.RefPtg; +import org.apache.poi.ss.formula.ptg.Area3DPtg; +import org.apache.poi.ss.formula.ptg.AreaPtg; +import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.formula.ptg.Ref3DPtg; +import org.apache.poi.ss.formula.ptg.RefPtg; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndian; import org.apache.poi.util.LittleEndianInput; diff --git a/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java b/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java index 0156ca0678..fc2e4c1da8 100644 --- a/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java +++ b/src/java/org/apache/poi/hssf/record/ExternalNameRecord.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.constant.ConstantValueParser; +import org.apache.poi.ss.formula.constant.ConstantValueParser; import org.apache.poi.ss.formula.Formula; import org.apache.poi.util.LittleEndianOutput; import org.apache.poi.util.StringUtil; diff --git a/src/java/org/apache/poi/hssf/record/FormulaRecord.java b/src/java/org/apache/poi/hssf/record/FormulaRecord.java index 6568a91a78..338df7c5d4 100644 --- a/src/java/org/apache/poi/hssf/record/FormulaRecord.java +++ b/src/java/org/apache/poi/hssf/record/FormulaRecord.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.eval.ErrorEval; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.ss.formula.Formula; diff --git a/src/java/org/apache/poi/hssf/record/LbsDataSubRecord.java b/src/java/org/apache/poi/hssf/record/LbsDataSubRecord.java index 779523a969..62f1198869 100644 --- a/src/java/org/apache/poi/hssf/record/LbsDataSubRecord.java +++ b/src/java/org/apache/poi/hssf/record/LbsDataSubRecord.java @@ -16,7 +16,7 @@ ==================================================================== */ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.formula.*; +import org.apache.poi.ss.formula.ptg.*; import org.apache.poi.util.*; /** diff --git a/src/java/org/apache/poi/hssf/record/NameRecord.java b/src/java/org/apache/poi/hssf/record/NameRecord.java index 144a15e02d..25049fdade 100644 --- a/src/java/org/apache/poi/hssf/record/NameRecord.java +++ b/src/java/org/apache/poi/hssf/record/NameRecord.java @@ -17,9 +17,9 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.formula.Area3DPtg; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.hssf.record.formula.Ref3DPtg; +import org.apache.poi.ss.formula.ptg.Area3DPtg; +import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.formula.ptg.Ref3DPtg; import org.apache.poi.ss.formula.Formula; import org.apache.poi.util.HexDump; import org.apache.poi.util.LittleEndianInput; diff --git a/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java b/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java index 30625628bb..9acf82c80f 100644 --- a/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java +++ b/src/java/org/apache/poi/hssf/record/SharedFormulaRecord.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.formula.*; +import org.apache.poi.ss.formula.ptg.*; import org.apache.poi.hssf.util.CellRangeAddress8Bit; import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.SpreadsheetVersion; diff --git a/src/java/org/apache/poi/hssf/record/TableRecord.java b/src/java/org/apache/poi/hssf/record/TableRecord.java index 0a3921cbbe..5835a6fbb5 100644 --- a/src/java/org/apache/poi/hssf/record/TableRecord.java +++ b/src/java/org/apache/poi/hssf/record/TableRecord.java @@ -17,7 +17,7 @@ package org.apache.poi.hssf.record; -import org.apache.poi.hssf.record.formula.TblPtg; +import org.apache.poi.ss.formula.ptg.TblPtg; import org.apache.poi.hssf.util.CellRangeAddress8Bit; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.util.BitField; diff --git a/src/java/org/apache/poi/hssf/record/TextObjectRecord.java b/src/java/org/apache/poi/hssf/record/TextObjectRecord.java index 27a7edd9b8..8bc254855f 100644 --- a/src/java/org/apache/poi/hssf/record/TextObjectRecord.java +++ b/src/java/org/apache/poi/hssf/record/TextObjectRecord.java @@ -19,8 +19,8 @@ package org.apache.poi.hssf.record; import org.apache.poi.hssf.record.cont.ContinuableRecord; import org.apache.poi.hssf.record.cont.ContinuableRecordOutput; -import org.apache.poi.hssf.record.formula.OperandPtg; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.OperandPtg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; diff --git a/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java index 05dbec24df..85bfb7a662 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/CFRecordsAggregate.java @@ -24,10 +24,10 @@ import org.apache.poi.hssf.model.RecordStream; import org.apache.poi.hssf.record.CFHeaderRecord; import org.apache.poi.hssf.record.CFRuleRecord; import org.apache.poi.hssf.record.Record; -import org.apache.poi.hssf.record.formula.AreaErrPtg; -import org.apache.poi.hssf.record.formula.AreaPtg; +import org.apache.poi.ss.formula.ptg.AreaErrPtg; +import org.apache.poi.ss.formula.ptg.AreaPtg; import org.apache.poi.ss.formula.FormulaShifter; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.util.CellRangeAddress; /** diff --git a/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java index a403d09e2d..e0dfef4770 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/FormulaRecordAggregate.java @@ -24,10 +24,10 @@ import org.apache.poi.hssf.record.Record; import org.apache.poi.hssf.record.RecordFormatException; import org.apache.poi.hssf.record.SharedFormulaRecord; import org.apache.poi.hssf.record.StringRecord; -import org.apache.poi.hssf.record.formula.ExpPtg; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.ExpPtg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.hssf.util.CellRangeAddress8Bit; -import org.apache.poi.hssf.util.CellReference; +import org.apache.poi.ss.util.CellReference; import org.apache.poi.ss.formula.Formula; import org.apache.poi.ss.util.CellRangeAddress; diff --git a/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java b/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java index ff29dd1aba..c393d44e7b 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/SharedValueManager.java @@ -29,7 +29,7 @@ import org.apache.poi.hssf.record.FormulaRecord; import org.apache.poi.hssf.record.SharedFormulaRecord; import org.apache.poi.hssf.record.SharedValueRecordBase; import org.apache.poi.hssf.record.TableRecord; -import org.apache.poi.hssf.record.formula.ExpPtg; +import org.apache.poi.ss.formula.ptg.ExpPtg; import org.apache.poi.hssf.util.CellRangeAddress8Bit; import org.apache.poi.ss.util.CellReference; diff --git a/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java b/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java index 5c44c2ae82..04d1ec0c38 100644 --- a/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java +++ b/src/java/org/apache/poi/hssf/record/aggregates/ValueRecordsAggregate.java @@ -30,7 +30,7 @@ import org.apache.poi.hssf.record.RecordBase; import org.apache.poi.hssf.record.StringRecord; import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor; import org.apache.poi.ss.formula.FormulaShifter; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; /** * diff --git a/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java b/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java index 533cbce524..7e92478de1 100644 --- a/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java +++ b/src/java/org/apache/poi/hssf/record/chart/LinkedDataRecord.java @@ -19,7 +19,7 @@ package org.apache.poi.hssf.record.chart; import org.apache.poi.hssf.record.RecordInputStream; import org.apache.poi.hssf.record.StandardRecord; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.Formula; import org.apache.poi.util.BitField; import org.apache.poi.util.BitFieldFactory; diff --git a/src/java/org/apache/poi/hssf/record/constant/ConstantValueParser.java b/src/java/org/apache/poi/hssf/record/constant/ConstantValueParser.java deleted file mode 100644 index 3fbbee12ac..0000000000 --- a/src/java/org/apache/poi/hssf/record/constant/ConstantValueParser.java +++ /dev/null @@ -1,157 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.constant; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; -import org.apache.poi.util.StringUtil; - -/** - * To support Constant Values (2.5.7) as required by the CRN record. - * This class is also used for two dimensional arrays which are encoded by - * EXTERNALNAME (5.39) records and Array tokens.

- * - * @author Josh Micich - */ -public final class ConstantValueParser { - // note - these (non-combinable) enum values are sparse. - private static final int TYPE_EMPTY = 0; - private static final int TYPE_NUMBER = 1; - private static final int TYPE_STRING = 2; - private static final int TYPE_BOOLEAN = 4; - private static final int TYPE_ERROR_CODE = 16; // TODO - update OOO document to include this value - - private static final int TRUE_ENCODING = 1; - private static final int FALSE_ENCODING = 0; - - // TODO - is this the best way to represent 'EMPTY'? - private static final Object EMPTY_REPRESENTATION = null; - - private ConstantValueParser() { - // no instances of this class - } - - public static Object[] parse(LittleEndianInput in, int nValues) { - Object[] result = new Object[nValues]; - for (int i = 0; i < result.length; i++) { - result[i] = readAConstantValue(in); - } - return result; - } - - private static Object readAConstantValue(LittleEndianInput in) { - byte grbit = in.readByte(); - switch(grbit) { - case TYPE_EMPTY: - in.readLong(); // 8 byte 'not used' field - return EMPTY_REPRESENTATION; - case TYPE_NUMBER: - return new Double(in.readDouble()); - case TYPE_STRING: - return StringUtil.readUnicodeString(in); - case TYPE_BOOLEAN: - return readBoolean(in); - case TYPE_ERROR_CODE: - int errCode = in.readUShort(); - // next 6 bytes are unused - in.readUShort(); - in.readInt(); - return ErrorConstant.valueOf(errCode); - } - throw new RuntimeException("Unknown grbit value (" + grbit + ")"); - } - - private static Object readBoolean(LittleEndianInput in) { - byte val = (byte)in.readLong(); // 7 bytes 'not used' - switch(val) { - case FALSE_ENCODING: - return Boolean.FALSE; - case TRUE_ENCODING: - return Boolean.TRUE; - } - // Don't tolerate unusual boolean encoded values (unless it becomes evident that they occur) - throw new RuntimeException("unexpected boolean encoding (" + val + ")"); - } - - public static int getEncodedSize(Object[] values) { - // start with one byte 'type' code for each value - int result = values.length * 1; - for (int i = 0; i < values.length; i++) { - result += getEncodedSize(values[i]); - } - return result; - } - - /** - * @return encoded size without the 'type' code byte - */ - private static int getEncodedSize(Object object) { - if(object == EMPTY_REPRESENTATION) { - return 8; - } - Class cls = object.getClass(); - - if(cls == Boolean.class || cls == Double.class || cls == ErrorConstant.class) { - return 8; - } - String strVal = (String)object; - return StringUtil.getEncodedSize(strVal); - } - - public static void encode(LittleEndianOutput out, Object[] values) { - for (int i = 0; i < values.length; i++) { - encodeSingleValue(out, values[i]); - } - } - - private static void encodeSingleValue(LittleEndianOutput out, Object value) { - if (value == EMPTY_REPRESENTATION) { - out.writeByte(TYPE_EMPTY); - out.writeLong(0L); - return; - } - if (value instanceof Boolean) { - Boolean bVal = ((Boolean)value); - out.writeByte(TYPE_BOOLEAN); - long longVal = bVal.booleanValue() ? 1L : 0L; - out.writeLong(longVal); - return; - } - if (value instanceof Double) { - Double dVal = (Double) value; - out.writeByte(TYPE_NUMBER); - out.writeDouble(dVal.doubleValue()); - return; - } - if (value instanceof String) { - String val = (String) value; - out.writeByte(TYPE_STRING); - StringUtil.writeUnicodeString(out, val); - return; - } - if (value instanceof ErrorConstant) { - ErrorConstant ecVal = (ErrorConstant) value; - out.writeByte(TYPE_ERROR_CODE); - long longVal = ecVal.getErrorCode(); - out.writeLong(longVal); - return; - } - - throw new IllegalStateException("Unexpected value type (" + value.getClass().getName() + "'"); - } -} diff --git a/src/java/org/apache/poi/hssf/record/constant/ErrorConstant.java b/src/java/org/apache/poi/hssf/record/constant/ErrorConstant.java deleted file mode 100644 index 3421dd4a8e..0000000000 --- a/src/java/org/apache/poi/hssf/record/constant/ErrorConstant.java +++ /dev/null @@ -1,77 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.constant; - -import org.apache.poi.hssf.usermodel.HSSFErrorConstants; -/** - * Represents a constant error code value as encoded in a constant values array.

- * - * This class is a type-safe wrapper for a 16-bit int value performing a similar job to - * ErrorEval. - * - * @author Josh Micich - */ -public class ErrorConstant { - // convenient access to name space - private static final HSSFErrorConstants EC = null; - - private static final ErrorConstant NULL = new ErrorConstant(EC.ERROR_NULL); - private static final ErrorConstant DIV_0 = new ErrorConstant(EC.ERROR_DIV_0); - private static final ErrorConstant VALUE = new ErrorConstant(EC.ERROR_VALUE); - private static final ErrorConstant REF = new ErrorConstant(EC.ERROR_REF); - private static final ErrorConstant NAME = new ErrorConstant(EC.ERROR_NAME); - private static final ErrorConstant NUM = new ErrorConstant(EC.ERROR_NUM); - private static final ErrorConstant NA = new ErrorConstant(EC.ERROR_NA); - - private final int _errorCode; - - private ErrorConstant(int errorCode) { - _errorCode = errorCode; - } - - public int getErrorCode() { - return _errorCode; - } - public String getText() { - if(HSSFErrorConstants.isValidCode(_errorCode)) { - return HSSFErrorConstants.getText(_errorCode); - } - return "unknown error code (" + _errorCode + ")"; - } - - public static ErrorConstant valueOf(int errorCode) { - switch (errorCode) { - case HSSFErrorConstants.ERROR_NULL: return NULL; - case HSSFErrorConstants.ERROR_DIV_0: return DIV_0; - case HSSFErrorConstants.ERROR_VALUE: return VALUE; - case HSSFErrorConstants.ERROR_REF: return REF; - case HSSFErrorConstants.ERROR_NAME: return NAME; - case HSSFErrorConstants.ERROR_NUM: return NUM; - case HSSFErrorConstants.ERROR_NA: return NA; - } - System.err.println("Warning - unexpected error code (" + errorCode + ")"); - return new ErrorConstant(errorCode); - } - public String toString() { - StringBuffer sb = new StringBuffer(64); - sb.append(getClass().getName()).append(" ["); - sb.append(getText()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java b/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java deleted file mode 100644 index 1e8d2f0cfc..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AbstractFunctionPtg.java +++ /dev/null @@ -1,164 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.formula.function.FunctionMetadata; -import org.apache.poi.ss.formula.function.FunctionMetadataRegistry; - - -/** - * This class provides the base functionality for Excel sheet functions - * There are two kinds of function Ptgs - tFunc and tFuncVar - * Therefore, this class will have ONLY two subclasses - * @author Avik Sengupta - * @author Andrew C. Oliver (acoliver at apache dot org) - */ -public abstract class AbstractFunctionPtg extends OperationPtg { - - /** - * The name of the IF function (i.e. "IF"). Extracted as a constant for clarity. - */ - public static final String FUNCTION_NAME_IF = "IF"; - /** All external functions have function index 255 */ - private static final short FUNCTION_INDEX_EXTERNAL = 255; - - private final byte returnClass; - private final byte[] paramClass; - - private final byte _numberOfArgs; - private final short _functionIndex; - - protected AbstractFunctionPtg(int functionIndex, int pReturnClass, byte[] paramTypes, int nParams) { - _numberOfArgs = (byte) nParams; - _functionIndex = (short) functionIndex; - returnClass = (byte) pReturnClass; - paramClass = paramTypes; - } - public final boolean isBaseToken() { - return false; - } - - public final String toString() { - StringBuilder sb = new StringBuilder(64); - sb.append(getClass().getName()).append(" ["); - sb.append(lookupName(_functionIndex)); - sb.append(" nArgs=").append(_numberOfArgs); - sb.append("]"); - return sb.toString(); - } - - public final short getFunctionIndex() { - return _functionIndex; - } - public final int getNumberOfOperands() { - return _numberOfArgs; - } - - public final String getName() { - return lookupName(_functionIndex); - } - /** - * external functions get some special processing - * @return true if this is an external function - */ - public final boolean isExternalFunction() { - return _functionIndex == FUNCTION_INDEX_EXTERNAL; - } - - public final String toFormulaString() { - return getName(); - } - - public String toFormulaString(String[] operands) { - StringBuilder buf = new StringBuilder(); - - if(isExternalFunction()) { - buf.append(operands[0]); // first operand is actually the function name - appendArgs(buf, 1, operands); - } else { - buf.append(getName()); - appendArgs(buf, 0, operands); - } - return buf.toString(); - } - - private static void appendArgs(StringBuilder buf, int firstArgIx, String[] operands) { - buf.append('('); - for (int i=firstArgIx;ifirstArgIx) { - buf.append(','); - } - buf.append(operands[i]); - } - buf.append(")"); - } - - public abstract int getSize(); - - - /** - * Used to detect whether a function name found in a formula is one of the standard excel functions - *

- * The name matching is case insensitive. - * @return true if the name specifies a standard worksheet function, - * false if the name should be assumed to be an external function. - */ - public static final boolean isBuiltInFunctionName(String name) { - short ix = FunctionMetadataRegistry.lookupIndexByName(name.toUpperCase()); - return ix >= 0; - } - - protected final String lookupName(short index) { - if(index == FunctionMetadataRegistry.FUNCTION_INDEX_EXTERNAL) { - return "#external#"; - } - FunctionMetadata fm = FunctionMetadataRegistry.getFunctionByIndex(index); - if(fm == null) { - throw new RuntimeException("bad function index (" + index + ")"); - } - return fm.getName(); - } - - /** - * Resolves internal function names into function indexes. - *

- * The name matching is case insensitive. - * @return the standard worksheet function index if found, otherwise FUNCTION_INDEX_EXTERNAL - */ - protected static short lookupIndex(String name) { - short ix = FunctionMetadataRegistry.lookupIndexByName(name.toUpperCase()); - if (ix < 0) { - return FUNCTION_INDEX_EXTERNAL; - } - return ix; - } - - public byte getDefaultOperandClass() { - return returnClass; - } - - public final byte getParameterClass(int index) { - if (index >= paramClass.length) { - // For var-arg (and other?) functions, the metadata does not list all the parameter - // operand classes. In these cases, all extra parameters are assumed to have the - // same operand class as the last one specified. - return paramClass[paramClass.length - 1]; - } - return paramClass[index]; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/AddPtg.java b/src/java/org/apache/poi/hssf/record/formula/AddPtg.java deleted file mode 100644 index db2d9d1044..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AddPtg.java +++ /dev/null @@ -1,54 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Addition operator PTG the "+" binomial operator. If you need more - * explanation than that then well...We really can't help you here. - * @author Andrew C. Oliver (acoliver@apache.org) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class AddPtg extends ValueOperatorPtg { - public final static byte sid = 0x03; - - private final static String ADD = "+"; - - public static final ValueOperatorPtg instance = new AddPtg(); - - private AddPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - /** implementation of method from OperationsPtg*/ - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append(ADD); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/Area2DPtgBase.java b/src/java/org/apache/poi/hssf/record/formula/Area2DPtgBase.java deleted file mode 100644 index 6383bb0661..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/Area2DPtgBase.java +++ /dev/null @@ -1,64 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.AreaReference; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Common superclass of 2-D area refs - */ -public abstract class Area2DPtgBase extends AreaPtgBase { - private final static int SIZE = 9; - - protected Area2DPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) { - super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative); - } - protected Area2DPtgBase(AreaReference ar) { - super(ar); - } - - protected Area2DPtgBase(LittleEndianInput in) { - readCoordinates(in); - } - - protected abstract byte getSid(); - - public final void write(LittleEndianOutput out) { - out.writeByte(getSid() + getPtgClass()); - writeCoordinates(out); - } - - public final int getSize() { - return SIZE; - } - - public final String toFormulaString() { - return formatReferenceAsString(); - } - - public final String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(getClass().getName()); - sb.append(" ["); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java deleted file mode 100644 index d8d855b07b..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/Area3DPtg.java +++ /dev/null @@ -1,105 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.AreaReference; -import org.apache.poi.ss.formula.ExternSheetReferenceToken; -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.WorkbookDependentFormula; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Title: Area 3D Ptg - 3D reference (Sheet + Area)

- * Description: Defined a area in Extern Sheet.

- * REFERENCE:

- * @author Libin Roman (Vista Portal LDT. Developer) - * @author avik - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class Area3DPtg extends AreaPtgBase implements WorkbookDependentFormula, ExternSheetReferenceToken { - public final static byte sid = 0x3b; - private final static int SIZE = 11; // 10 + 1 for Ptg - - private int field_1_index_extern_sheet; - - - public Area3DPtg(String arearef, int externIdx) { - super(new AreaReference(arearef)); - setExternSheetIndex(externIdx); - } - - public Area3DPtg(LittleEndianInput in) { - field_1_index_extern_sheet = in.readShort(); - readCoordinates(in); - } - - public Area3DPtg(int firstRow, int lastRow, int firstColumn, int lastColumn, - boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative, - int externalSheetIndex) { - super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative); - setExternSheetIndex(externalSheetIndex); - } - - public Area3DPtg(AreaReference arearef, int externIdx) { - super(arearef); - setExternSheetIndex(externIdx); - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(getClass().getName()); - sb.append(" ["); - sb.append("sheetIx=").append(getExternSheetIndex()); - sb.append(" ! "); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_index_extern_sheet); - writeCoordinates(out); - } - - public int getSize() { - return SIZE; - } - - public int getExternSheetIndex() { - return field_1_index_extern_sheet; - } - - public void setExternSheetIndex(int index) { - field_1_index_extern_sheet = index; - } - public String format2DRefAsString() { - return formatReferenceAsString(); - } - /** - * @return text representation of this area reference that can be used in text - * formulas. The sheet name will get properly delimited if required. - */ - public String toFormulaString(FormulaRenderingWorkbook book) { - return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, formatReferenceAsString()); - } - public String toFormulaString() { - throw new RuntimeException("3D references need a workbook to determine formula text"); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java deleted file mode 100644 index 6bd4a8bbbc..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AreaErrPtg.java +++ /dev/null @@ -1,63 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.usermodel.ErrorConstants; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * AreaErr - handles deleted cell area references. - * - * @author Daniel Noll (daniel at nuix dot com dot au) - */ -public final class AreaErrPtg extends OperandPtg { - public final static byte sid = 0x2B; - private final int unused1; - private final int unused2; - - public AreaErrPtg() { - unused1 = 0; - unused2 = 0; - } - - public AreaErrPtg(LittleEndianInput in) { - // 8 bytes unused: - unused1 = in.readInt(); - unused2 = in.readInt(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeInt(unused1); - out.writeInt(unused2); - } - - public String toFormulaString() { - return ErrorConstants.getText(ErrorConstants.ERROR_REF); - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } - - public int getSize() { - return 9; - } -} - diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaI.java b/src/java/org/apache/poi/hssf/record/formula/AreaI.java deleted file mode 100644 index 319a9819c9..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AreaI.java +++ /dev/null @@ -1,75 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Common interface for AreaPtg and Area3DPtg, and their child classes. - */ -public interface AreaI { - /** - * @return the first row in the area - */ - public int getFirstRow(); - - /** - * @return last row in the range (x2 in x1,y1-x2,y2) - */ - public int getLastRow(); - - /** - * @return the first column number in the area. - */ - public int getFirstColumn(); - - /** - * @return lastcolumn in the area - */ - public int getLastColumn(); - - class OffsetArea implements AreaI { - - private final int _firstColumn; - private final int _firstRow; - private final int _lastColumn; - private final int _lastRow; - - public OffsetArea(int baseRow, int baseColumn, int relFirstRowIx, int relLastRowIx, - int relFirstColIx, int relLastColIx) { - _firstRow = baseRow + Math.min(relFirstRowIx, relLastRowIx); - _lastRow = baseRow + Math.max(relFirstRowIx, relLastRowIx); - _firstColumn = baseColumn + Math.min(relFirstColIx, relLastColIx); - _lastColumn = baseColumn + Math.max(relFirstColIx, relLastColIx); - } - - public int getFirstColumn() { - return _firstColumn; - } - - public int getFirstRow() { - return _firstRow; - } - - public int getLastColumn() { - return _lastColumn; - } - - public int getLastRow() { - return _lastRow; - } - } -} \ No newline at end of file diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java deleted file mode 100644 index f8b761f315..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AreaNPtg.java +++ /dev/null @@ -1,36 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; - -/** - * Specifies a rectangular area of cells A1:A4 for instance. - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class AreaNPtg extends Area2DPtgBase { - public final static short sid = 0x2D; - - public AreaNPtg(LittleEndianInput in) { - super(in); - } - - protected byte getSid() { - return sid; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java b/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java deleted file mode 100644 index 2dd3129977..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AreaPtg.java +++ /dev/null @@ -1,45 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.AreaReference; -import org.apache.poi.util.LittleEndianInput; - -/** - * Specifies a rectangular area of cells A1:A4 for instance. - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class AreaPtg extends Area2DPtgBase { - public final static short sid = 0x25; - - public AreaPtg(int firstRow, int lastRow, int firstColumn, int lastColumn, boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) { - super(firstRow, lastRow, firstColumn, lastColumn, firstRowRelative, lastRowRelative, firstColRelative, lastColRelative); - } - public AreaPtg(LittleEndianInput in) { - super(in); - } - public AreaPtg(String arearef) { - super(new AreaReference(arearef)); - } - public AreaPtg(AreaReference areaRef) { - super(areaRef); - } - protected byte getSid() { - return sid; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/AreaPtgBase.java b/src/java/org/apache/poi/hssf/record/formula/AreaPtgBase.java deleted file mode 100644 index 8c6863ef21..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AreaPtgBase.java +++ /dev/null @@ -1,272 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.AreaReference; -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.util.BitField; -import org.apache.poi.util.BitFieldFactory; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Specifies a rectangular area of cells A1:A4 for instance. - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public abstract class AreaPtgBase extends OperandPtg implements AreaI { - /** - * TODO - (May-2008) fix subclasses of AreaPtg 'AreaN~' which are used in shared formulas. - * see similar comment in ReferencePtg - */ - protected final RuntimeException notImplemented() { - return new RuntimeException("Coding Error: This method should never be called. This ptg should be converted"); - } - - /** zero based, unsigned 16 bit */ - private int field_1_first_row; - /** zero based, unsigned 16 bit */ - private int field_2_last_row; - /** zero based, unsigned 8 bit */ - private int field_3_first_column; - /** zero based, unsigned 8 bit */ - private int field_4_last_column; - - private final static BitField rowRelative = BitFieldFactory.getInstance(0x8000); - private final static BitField colRelative = BitFieldFactory.getInstance(0x4000); - private final static BitField columnMask = BitFieldFactory.getInstance(0x3FFF); - - protected AreaPtgBase() { - // do nothing - } - - protected AreaPtgBase(AreaReference ar) { - CellReference firstCell = ar.getFirstCell(); - CellReference lastCell = ar.getLastCell(); - setFirstRow(firstCell.getRow()); - setFirstColumn(firstCell.getCol() == -1 ? 0 : firstCell.getCol()); - setLastRow(lastCell.getRow()); - setLastColumn(lastCell.getCol() == -1 ? 0xFF : lastCell.getCol()); - setFirstColRelative(!firstCell.isColAbsolute()); - setLastColRelative(!lastCell.isColAbsolute()); - setFirstRowRelative(!firstCell.isRowAbsolute()); - setLastRowRelative(!lastCell.isRowAbsolute()); - } - - protected AreaPtgBase(int firstRow, int lastRow, int firstColumn, int lastColumn, - boolean firstRowRelative, boolean lastRowRelative, boolean firstColRelative, boolean lastColRelative) { - - if (lastRow > firstRow) { - setFirstRow(firstRow); - setLastRow(lastRow); - setFirstRowRelative(firstRowRelative); - setLastRowRelative(lastRowRelative); - } else { - setFirstRow(lastRow); - setLastRow(firstRow); - setFirstRowRelative(lastRowRelative); - setLastRowRelative(firstRowRelative); - } - - if (lastColumn > firstColumn) { - setFirstColumn(firstColumn); - setLastColumn(lastColumn); - setFirstColRelative(firstColRelative); - setLastColRelative(lastColRelative); - } else { - setFirstColumn(lastColumn); - setLastColumn(firstColumn); - setFirstColRelative(lastColRelative); - setLastColRelative(firstColRelative); - } - } - - protected final void readCoordinates(LittleEndianInput in) { - field_1_first_row = in.readUShort(); - field_2_last_row = in.readUShort(); - field_3_first_column = in.readUShort(); - field_4_last_column = in.readUShort(); - } - protected final void writeCoordinates(LittleEndianOutput out) { - out.writeShort(field_1_first_row); - out.writeShort(field_2_last_row); - out.writeShort(field_3_first_column); - out.writeShort(field_4_last_column); - } - - /** - * @return the first row in the area - */ - public final int getFirstRow() { - return field_1_first_row; - } - - /** - * sets the first row - * @param rowIx number (0-based) - */ - public final void setFirstRow(int rowIx) { - field_1_first_row = rowIx; - } - - /** - * @return last row in the range (x2 in x1,y1-x2,y2) - */ - public final int getLastRow() { - return field_2_last_row; - } - - /** - * @param rowIx last row number in the area - */ - public final void setLastRow(int rowIx) { - field_2_last_row = rowIx; - } - - /** - * @return the first column number in the area. - */ - public final int getFirstColumn() { - return columnMask.getValue(field_3_first_column); - } - - /** - * @return the first column number + the options bit settings unstripped - */ - public final short getFirstColumnRaw() { - return (short) field_3_first_column; // TODO - } - - /** - * @return whether or not the first row is a relative reference or not. - */ - public final boolean isFirstRowRelative() { - return rowRelative.isSet(field_3_first_column); - } - - /** - * sets the first row to relative or not - * @param rel is relative or not. - */ - public final void setFirstRowRelative(boolean rel) { - field_3_first_column=rowRelative.setBoolean(field_3_first_column,rel); - } - - /** - * @return isrelative first column to relative or not - */ - public final boolean isFirstColRelative() { - return colRelative.isSet(field_3_first_column); - } - - /** - * set whether the first column is relative - */ - public final void setFirstColRelative(boolean rel) { - field_3_first_column=colRelative.setBoolean(field_3_first_column,rel); - } - - /** - * set the first column in the area - */ - public final void setFirstColumn(int colIx) { - field_3_first_column=columnMask.setValue(field_3_first_column, colIx); - } - - /** - * set the first column irrespective of the bitmasks - */ - public final void setFirstColumnRaw(int column) { - field_3_first_column = column; - } - - /** - * @return lastcolumn in the area - */ - public final int getLastColumn() { - return columnMask.getValue(field_4_last_column); - } - - /** - * @return last column and bitmask (the raw field) - */ - public final short getLastColumnRaw() { - return (short) field_4_last_column; - } - - /** - * @return last row relative or not - */ - public final boolean isLastRowRelative() { - return rowRelative.isSet(field_4_last_column); - } - - /** - * set whether the last row is relative or not - * @param rel true if the last row relative, else - * false - */ - public final void setLastRowRelative(boolean rel) { - field_4_last_column=rowRelative.setBoolean(field_4_last_column,rel); - } - - /** - * @return lastcol relative or not - */ - public final boolean isLastColRelative() { - return colRelative.isSet(field_4_last_column); - } - - /** - * set whether the last column should be relative or not - */ - public final void setLastColRelative(boolean rel) { - field_4_last_column=colRelative.setBoolean(field_4_last_column,rel); - } - - /** - * set the last column in the area - */ - public final void setLastColumn(int colIx) { - field_4_last_column=columnMask.setValue(field_4_last_column, colIx); - } - - /** - * set the last column irrespective of the bitmasks - */ - public final void setLastColumnRaw(short column) { - field_4_last_column = column; - } - protected final String formatReferenceAsString() { - CellReference topLeft = new CellReference(getFirstRow(),getFirstColumn(),!isFirstRowRelative(),!isFirstColRelative()); - CellReference botRight = new CellReference(getLastRow(),getLastColumn(),!isLastRowRelative(),!isLastColRelative()); - - if(AreaReference.isWholeColumnReference(topLeft, botRight)) { - return (new AreaReference(topLeft, botRight)).formatAsString(); - } - return topLeft.formatAsString() + ":" + botRight.formatAsString(); - } - - public String toFormulaString() { - return formatReferenceAsString(); - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java b/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java deleted file mode 100644 index 3a6354e01e..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ArrayPtg.java +++ /dev/null @@ -1,268 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.hssf.record.constant.ConstantValueParser; -import org.apache.poi.hssf.record.constant.ErrorConstant; -import org.apache.poi.ss.util.NumberToTextConverter; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * ArrayPtg - handles arrays - * - * The ArrayPtg is a little weird, the size of the Ptg when parsing initially only - * includes the Ptg sid and the reserved bytes. The next Ptg in the expression then follows. - * It is only after the "size" of all the Ptgs is met, that the ArrayPtg data is actually - * held after this. So Ptg.createParsedExpression keeps track of the number of - * ArrayPtg elements and need to parse the data upto the FORMULA record size. - * - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class ArrayPtg extends Ptg { - public static final byte sid = 0x20; - - private static final int RESERVED_FIELD_LEN = 7; - /** - * The size of the plain tArray token written within the standard formula tokens - * (not including the data which comes after all formula tokens) - */ - public static final int PLAIN_TOKEN_SIZE = 1+RESERVED_FIELD_LEN; - - // 7 bytes of data (stored as an int, short and byte here) - private final int _reserved0Int; - private final int _reserved1Short; - private final int _reserved2Byte; - - // data from these fields comes after the Ptg data of all tokens in current formula - private final int _nColumns; - private final int _nRows; - private final Object[] _arrayValues; - - ArrayPtg(int reserved0, int reserved1, int reserved2, int nColumns, int nRows, Object[] arrayValues) { - _reserved0Int = reserved0; - _reserved1Short = reserved1; - _reserved2Byte = reserved2; - _nColumns = nColumns; - _nRows = nRows; - _arrayValues = arrayValues; - } - /** - * @param values2d array values arranged in rows - */ - public ArrayPtg(Object[][] values2d) { - int nColumns = values2d[0].length; - int nRows = values2d.length; - // convert 2-d to 1-d array (row by row according to getValueIndex()) - _nColumns = (short) nColumns; - _nRows = (short) nRows; - - Object[] vv = new Object[_nColumns * _nRows]; - for (int r=0; r= _nColumns) { - throw new IllegalArgumentException("Specified colIx (" + colIx - + ") is outside the allowed range (0.." + (_nColumns-1) + ")"); - } - if(rowIx < 0 || rowIx >= _nRows) { - throw new IllegalArgumentException("Specified rowIx (" + rowIx - + ") is outside the allowed range (0.." + (_nRows-1) + ")"); - } - return rowIx * _nColumns + colIx; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeInt(_reserved0Int); - out.writeShort(_reserved1Short); - out.writeByte(_reserved2Byte); - } - - public int writeTokenValueBytes(LittleEndianOutput out) { - - out.writeByte(_nColumns-1); - out.writeShort(_nRows-1); - ConstantValueParser.encode(out, _arrayValues); - return 3 + ConstantValueParser.getEncodedSize(_arrayValues); - } - - public int getRowCount() { - return _nRows; - } - - public int getColumnCount() { - return _nColumns; - } - - /** This size includes the size of the array Ptg plus the Array Ptg Token value size*/ - public int getSize() { - return PLAIN_TOKEN_SIZE - // data written after the all tokens: - + 1 + 2 // column, row - + ConstantValueParser.getEncodedSize(_arrayValues); - } - - public String toFormulaString() { - StringBuffer b = new StringBuffer(); - b.append("{"); - for (int y=0;y 0) { - b.append(";"); - } - for (int x=0;x 0) { - b.append(","); - } - Object o = _arrayValues[getValueIndex(x, y)]; - b.append(getConstantText(o)); - } - } - b.append("}"); - return b.toString(); - } - - private static String getConstantText(Object o) { - - if (o == null) { - throw new RuntimeException("Array item cannot be null"); - } - if (o instanceof String) { - return "\"" + (String)o + "\""; - } - if (o instanceof Double) { - return NumberToTextConverter.toText(((Double)o).doubleValue()); - } - if (o instanceof Boolean) { - return ((Boolean)o).booleanValue() ? "TRUE" : "FALSE"; - } - if (o instanceof ErrorConstant) { - return ((ErrorConstant)o).getText(); - } - throw new IllegalArgumentException("Unexpected constant class (" + o.getClass().getName() + ")"); - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_ARRAY; - } - - /** - * Represents the initial plain tArray token (without the constant data that trails the whole - * formula). Objects of this class are only temporary and cannot be used as {@link Ptg}s. - * These temporary objects get converted to {@link ArrayPtg} by the - * {@link #finishReading(LittleEndianInput)} method. - */ - static final class Initial extends Ptg { - private final int _reserved0; - private final int _reserved1; - private final int _reserved2; - - public Initial(LittleEndianInput in) { - _reserved0 = in.readInt(); - _reserved1 = in.readUShort(); - _reserved2 = in.readUByte(); - } - private static RuntimeException invalid() { - throw new IllegalStateException("This object is a partially initialised tArray, and cannot be used as a Ptg"); - } - public byte getDefaultOperandClass() { - throw invalid(); - } - public int getSize() { - return PLAIN_TOKEN_SIZE; - } - public boolean isBaseToken() { - return false; - } - public String toFormulaString() { - throw invalid(); - } - public void write(LittleEndianOutput out) { - throw invalid(); - } - /** - * Read in the actual token (array) values. This occurs - * AFTER the last Ptg in the expression. - * See page 304-305 of Excel97-2007BinaryFileFormat(xls)Specification.pdf - */ - public ArrayPtg finishReading(LittleEndianInput in) { - int nColumns = in.readUByte(); - short nRows = in.readShort(); - //The token_1_columns and token_2_rows do not follow the documentation. - //The number of physical rows and columns is actually +1 of these values. - //Which is not explicitly documented. - nColumns++; - nRows++; - - int totalCount = nRows * nColumns; - Object[] arrayValues = ConstantValueParser.parse(in, totalCount); - - ArrayPtg result = new ArrayPtg(_reserved0, _reserved1, _reserved2, nColumns, nRows, arrayValues); - result.setClass(getPtgClass()); - return result; - } - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java b/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java deleted file mode 100644 index bbfb95a729..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/AttrPtg.java +++ /dev/null @@ -1,263 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.BitField; -import org.apache.poi.util.BitFieldFactory; -import org.apache.poi.util.LittleEndian; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * "Special Attributes" - * This seems to be a Misc Stuff and Junk record. One function it serves is - * in SUM functions (i.e. SUM(A1:A3) causes an area PTG then an ATTR with the SUM option set) - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class AttrPtg extends ControlPtg { - public final static byte sid = 0x19; - private final static int SIZE = 4; - private final byte _options; - private final short _data; - - /** only used for tAttrChoose: table of offsets to starts of args */ - private final int[] _jumpTable; - /** only used for tAttrChoose: offset to the tFuncVar for CHOOSE() */ - private final int _chooseFuncOffset; - - // flags 'volatile' and 'space', can be combined. - // OOO spec says other combinations are theoretically possible but not likely to occur. - private static final BitField semiVolatile = BitFieldFactory.getInstance(0x01); - private static final BitField optiIf = BitFieldFactory.getInstance(0x02); - private static final BitField optiChoose = BitFieldFactory.getInstance(0x04); - private static final BitField optiSkip = BitFieldFactory.getInstance(0x08); - private static final BitField optiSum = BitFieldFactory.getInstance(0x10); - private static final BitField baxcel = BitFieldFactory.getInstance(0x20); // 'assignment-style formula in a macro sheet' - private static final BitField space = BitFieldFactory.getInstance(0x40); - - public static final AttrPtg SUM = new AttrPtg(0x0010, 0, null, -1); - - public static final class SpaceType { - private SpaceType() { - // no instances of this class - } - - /** 00H = Spaces before the next token (not allowed before tParen token) */ - public static final int SPACE_BEFORE = 0x00; - /** 01H = Carriage returns before the next token (not allowed before tParen token) */ - public static final int CR_BEFORE = 0x01; - /** 02H = Spaces before opening parenthesis (only allowed before tParen token) */ - public static final int SPACE_BEFORE_OPEN_PAREN = 0x02; - /** 03H = Carriage returns before opening parenthesis (only allowed before tParen token) */ - public static final int CR_BEFORE_OPEN_PAREN = 0x03; - /** 04H = Spaces before closing parenthesis (only allowed before tParen, tFunc, and tFuncVar tokens) */ - public static final int SPACE_BEFORE_CLOSE_PAREN = 0x04; - /** 05H = Carriage returns before closing parenthesis (only allowed before tParen, tFunc, and tFuncVar tokens) */ - public static final int CR_BEFORE_CLOSE_PAREN = 0x05; - /** 06H = Spaces following the equality sign (only in macro sheets) */ - public static final int SPACE_AFTER_EQUALITY = 0x06; - } - - public AttrPtg(LittleEndianInput in) { - _options = in.readByte(); - _data = in.readShort(); - if (isOptimizedChoose()) { - int nCases = _data; - int[] jumpTable = new int[nCases]; - for (int i = 0; i < jumpTable.length; i++) { - jumpTable[i] = in.readUShort(); - } - _jumpTable = jumpTable; - _chooseFuncOffset = in.readUShort(); - } else { - _jumpTable = null; - _chooseFuncOffset = -1; - } - - } - private AttrPtg(int options, int data, int[] jt, int chooseFuncOffset) { - _options = (byte) options; - _data = (short) data; - _jumpTable = jt; - _chooseFuncOffset = chooseFuncOffset; - } - - /** - * @param type a constant from SpaceType - * @param count the number of space characters - */ - public static AttrPtg createSpace(int type, int count) { - int data = type & 0x00FF | (count << 8) & 0x00FFFF; - return new AttrPtg(space.set(0), data, null, -1); - } - - /** - * @param dist distance (in bytes) to start of either

- */ - public static AttrPtg createIf(int dist) { - return new AttrPtg(optiIf.set(0), dist, null, -1); - } - - /** - * @param dist distance (in bytes) to position behind tFuncVar(IF) token (minus 1) - */ - public static AttrPtg createSkip(int dist) { - return new AttrPtg(optiSkip.set(0), dist, null, -1); - } - - public static AttrPtg getSumSingle() { - return new AttrPtg(optiSum.set(0), 0, null, -1); - } - - - public boolean isSemiVolatile() { - return semiVolatile.isSet(_options); - } - - public boolean isOptimizedIf() { - return optiIf.isSet(_options); - } - - public boolean isOptimizedChoose() { - return optiChoose.isSet(_options); - } - - public boolean isSum() { - return optiSum.isSet(_options); - } - public boolean isSkip() { - return optiSkip.isSet(_options); - } - - // lets hope no one uses this anymore - private boolean isBaxcel() { - return baxcel.isSet(_options); - } - - public boolean isSpace() { - return space.isSet(_options); - } - - public short getData() { - return _data; - } - public int[] getJumpTable() { - return _jumpTable.clone(); - } - public int getChooseFuncOffset() { - if (_jumpTable == null) { - throw new IllegalStateException("Not tAttrChoose"); - } - return _chooseFuncOffset; - } - - public String toString() { - StringBuffer sb = new StringBuffer(64); - sb.append(getClass().getName()).append(" ["); - - if(isSemiVolatile()) { - sb.append("volatile "); - } - if(isSpace()) { - sb.append("space count=").append((_data >> 8) & 0x00FF); - sb.append(" type=").append(_data & 0x00FF).append(" "); - } - // the rest seem to be mutually exclusive - if(isOptimizedIf()) { - sb.append("if dist=").append(_data); - } else if(isOptimizedChoose()) { - sb.append("choose nCases=").append(_data); - } else if(isSkip()) { - sb.append("skip dist=").append(_data); - } else if(isSum()) { - sb.append("sum "); - } else if(isBaxcel()) { - sb.append("assign "); - } - sb.append("]"); - return sb.toString(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeByte(_options); - out.writeShort(_data); - int[] jt = _jumpTable; - if (jt != null) { - for (int i = 0; i < jt.length; i++) { - out.writeShort(jt[i]); - } - out.writeShort(_chooseFuncOffset); - } - } - - public int getSize() { - if (_jumpTable != null) { - return SIZE + (_jumpTable.length + 1) * LittleEndian.SHORT_SIZE; - } - return SIZE; - } - - public String toFormulaString(String[] operands) { - if(space.isSet(_options)) { - return operands[ 0 ]; - } else if (optiIf.isSet(_options)) { - return toFormulaString() + "(" + operands[0] + ")"; - } else if (optiSkip.isSet(_options)) { - return toFormulaString() + operands[0]; //goto isn't a real formula element should not show up - } else { - return toFormulaString() + "(" + operands[0] + ")"; - } - } - - - public int getNumberOfOperands() { - return 1; - } - - public int getType() { - return -1; - } - - public String toFormulaString() { - if(semiVolatile.isSet(_options)) { - return "ATTR(semiVolatile)"; - } - if(optiIf.isSet(_options)) { - return "IF"; - } - if( optiChoose.isSet(_options)) { - return "CHOOSE"; - } - if(optiSkip.isSet(_options)) { - return ""; - } - if(optiSum.isSet(_options)) { - return "SUM"; - } - if(baxcel.isSet(_options)) { - return "ATTR(baxcel)"; - } - if(space.isSet(_options)) { - return ""; - } - return "UNKNOWN ATTRIBUTE"; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java b/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java deleted file mode 100644 index ecac699020..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/BoolPtg.java +++ /dev/null @@ -1,66 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Boolean (boolean) Stores a (java) boolean value in a formula. - * - * @author Paul Krause (pkrause at soundbite dot com) - * @author Andrew C. Oliver (acoliver at apache dot org) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class BoolPtg extends ScalarConstantPtg { - public static final int SIZE = 2; - public static final byte sid = 0x1D; - - private static final BoolPtg FALSE = new BoolPtg(false); - private static final BoolPtg TRUE = new BoolPtg(true); - - private final boolean _value; - - private BoolPtg(boolean b) { - _value = b; - } - - public static BoolPtg valueOf(boolean b) { - return b ? TRUE : FALSE; - } - public static BoolPtg read(LittleEndianInput in) { - return valueOf(in.readByte() == 1); - } - - public boolean getValue() { - return _value; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeByte(_value ? 1 : 0); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return _value ? "TRUE" : "FALSE"; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java b/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java deleted file mode 100644 index 28cca4f2e9..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ConcatPtg.java +++ /dev/null @@ -1,52 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class ConcatPtg extends ValueOperatorPtg { - public final static byte sid = 0x08; - - private final static String CONCAT = "&"; - - public static final ValueOperatorPtg instance = new ConcatPtg(); - - private ConcatPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append(CONCAT); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ControlPtg.java b/src/java/org/apache/poi/hssf/record/formula/ControlPtg.java deleted file mode 100644 index 6c97bd1a37..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ControlPtg.java +++ /dev/null @@ -1,38 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Common superclass for - * tExp - * tTbl - * tParen - * tNlr - * tAttr - * tSheet - * tEndSheet - */ -public abstract class ControlPtg extends Ptg { - - public boolean isBaseToken() { - return true; - } - public final byte getDefaultOperandClass() { - throw new IllegalStateException("Control tokens are not classified"); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java deleted file mode 100644 index 558f7af55d..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/DeletedArea3DPtg.java +++ /dev/null @@ -1,69 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.usermodel.ErrorConstants; -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.WorkbookDependentFormula; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Title: Deleted Area 3D Ptg - 3D referecnce (Sheet + Area)

- * Description: Defined a area in Extern Sheet.

- * REFERENCE:

- * @author Patrick Luby - * @version 1.0-pre - */ -public final class DeletedArea3DPtg extends OperandPtg implements WorkbookDependentFormula { - public final static byte sid = 0x3d; - private final int field_1_index_extern_sheet; - private final int unused1; - private final int unused2; - - public DeletedArea3DPtg(int externSheetIndex) { - field_1_index_extern_sheet = externSheetIndex; - unused1 = 0; - unused2 = 0; - } - - public DeletedArea3DPtg(LittleEndianInput in) { - field_1_index_extern_sheet = in.readUShort(); - unused1 = in.readInt(); - unused2 = in.readInt(); - } - public String toFormulaString(FormulaRenderingWorkbook book) { - return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, - ErrorConstants.getText(ErrorConstants.ERROR_REF)); - } - public String toFormulaString() { - throw new RuntimeException("3D references need a workbook to determine formula text"); - } - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } - public int getSize() { - return 11; - } - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_index_extern_sheet); - out.writeInt(unused1); - out.writeInt(unused2); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java deleted file mode 100644 index 1174f319b7..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/DeletedRef3DPtg.java +++ /dev/null @@ -1,68 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - - -import org.apache.poi.ss.usermodel.ErrorConstants; -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.WorkbookDependentFormula; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Title: Deleted Reference 3D Ptg

- * Description: Defined a cell in extern sheet.

- * REFERENCE:

- * @author Patrick Luby - * @version 1.0-pre - */ -public final class DeletedRef3DPtg extends OperandPtg implements WorkbookDependentFormula { - public final static byte sid = 0x3c; - private final int field_1_index_extern_sheet; - private final int unused1; - - /** Creates new DeletedRef3DPtg */ - public DeletedRef3DPtg(LittleEndianInput in) { - field_1_index_extern_sheet = in.readUShort(); - unused1 = in.readInt(); - } - - public DeletedRef3DPtg(int externSheetIndex) { - field_1_index_extern_sheet = externSheetIndex; - unused1 = 0; - } - - public String toFormulaString(FormulaRenderingWorkbook book) { - return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, - ErrorConstants.getText(ErrorConstants.ERROR_REF)); - } - public String toFormulaString() { - throw new RuntimeException("3D references need a workbook to determine formula text"); - } - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } - public int getSize() { - return 7; - } - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_index_extern_sheet); - out.writeInt(unused1); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/DividePtg.java b/src/java/org/apache/poi/hssf/record/formula/DividePtg.java deleted file mode 100644 index fd5f86aabe..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/DividePtg.java +++ /dev/null @@ -1,50 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * This PTG implements the standard binomial divide "/" - * @author Andrew C. Oliver acoliver at apache dot org - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class DividePtg extends ValueOperatorPtg { - public final static byte sid = 0x06; - - public static final ValueOperatorPtg instance = new DividePtg(); - - private DividePtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append("/"); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java deleted file mode 100644 index 7fbd17330d..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/EqualPtg.java +++ /dev/null @@ -1,50 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * - * @author andy - */ -public final class EqualPtg extends ValueOperatorPtg { - public final static byte sid = 0x0b; - - public static final ValueOperatorPtg instance = new EqualPtg(); - - private EqualPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - - buffer.append(operands[ 0 ]); - buffer.append("="); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ErrPtg.java b/src/java/org/apache/poi/hssf/record/formula/ErrPtg.java deleted file mode 100644 index 2b9b1cdce5..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ErrPtg.java +++ /dev/null @@ -1,94 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.usermodel.ErrorConstants; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author Daniel Noll (daniel at nuix dot com dot au) - */ -public final class ErrPtg extends ScalarConstantPtg { - - // convenient access to namespace - private static final ErrorConstants EC = null; - - /** #NULL! - Intersection of two cell ranges is empty */ - public static final ErrPtg NULL_INTERSECTION = new ErrPtg(EC.ERROR_NULL); - /** #DIV/0! - Division by zero */ - public static final ErrPtg DIV_ZERO = new ErrPtg(EC.ERROR_DIV_0); - /** #VALUE! - Wrong type of operand */ - public static final ErrPtg VALUE_INVALID = new ErrPtg(EC.ERROR_VALUE); - /** #REF! - Illegal or deleted cell reference */ - public static final ErrPtg REF_INVALID = new ErrPtg(EC.ERROR_REF); - /** #NAME? - Wrong function or range name */ - public static final ErrPtg NAME_INVALID = new ErrPtg(EC.ERROR_NAME); - /** #NUM! - Value range overflow */ - public static final ErrPtg NUM_ERROR = new ErrPtg(EC.ERROR_NUM); - /** #N/A - Argument or function not available */ - public static final ErrPtg N_A = new ErrPtg(EC.ERROR_NA); - - - 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; - } - - public static ErrPtg read(LittleEndianInput in) { - return valueOf(in.readByte()); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeByte(field_1_error_code); - } - - public String toFormulaString() { - return ErrorConstants.getText(field_1_error_code); - } - - public int getSize() { - return SIZE; - } - - public int getErrorCode() { - return field_1_error_code; - } - - 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 + ")"); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java b/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java deleted file mode 100644 index b64977e3e8..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ExpPtg.java +++ /dev/null @@ -1,73 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - * @author dmui (save existing implementation) - */ -public final class ExpPtg extends ControlPtg { - private final static int SIZE = 5; - public final static short sid = 0x1; - private final int field_1_first_row; - private final int field_2_first_col; - - public ExpPtg(LittleEndianInput in) { - field_1_first_row = in.readShort(); - field_2_first_col = in.readShort(); - } - - public ExpPtg(int firstRow, int firstCol) { - this.field_1_first_row = firstRow; - this.field_2_first_col = firstCol; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_first_row); - out.writeShort(field_2_first_col); - } - - public int getSize() { - return SIZE; - } - - public int getRow() { - return field_1_first_row; - } - - public int getColumn() { - return field_2_first_col; - } - - public String toFormulaString() { - throw new RuntimeException("Coding Error: Expected ExpPtg to be converted from Shared to Non-Shared Formula by ValueRecordsAggregate, but it wasn't"); - } - - public String toString() { - StringBuffer buffer = new StringBuffer("[Array Formula or Shared Formula]\n"); - buffer.append("row = ").append(getRow()).append("\n"); - buffer.append("col = ").append(getColumn()).append("\n"); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ExternSheetNameResolver.java b/src/java/org/apache/poi/hssf/record/formula/ExternSheetNameResolver.java deleted file mode 100644 index c1203e3e87..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ExternSheetNameResolver.java +++ /dev/null @@ -1,55 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalSheet; -import org.apache.poi.ss.formula.SheetNameFormatter; - -/** - * @author Josh Micich - */ -final class ExternSheetNameResolver { - - private ExternSheetNameResolver() { - // no instances of this class - } - - public static String prependSheetName(FormulaRenderingWorkbook book, int field_1_index_extern_sheet, String cellRefText) { - ExternalSheet externalSheet = book.getExternalSheet(field_1_index_extern_sheet); - StringBuffer sb; - if (externalSheet != null) { - String wbName = externalSheet.getWorkbookName(); - String sheetName = externalSheet.getSheetName(); - sb = new StringBuffer(wbName.length() + sheetName.length() + cellRefText.length() + 4); - SheetNameFormatter.appendFormat(sb, wbName, sheetName); - } else { - String sheetName = book.getSheetNameByExternSheet(field_1_index_extern_sheet); - sb = new StringBuffer(sheetName.length() + cellRefText.length() + 4); - if (sheetName.length() < 1) { - // What excel does if sheet has been deleted - sb.append("#REF"); // note - '!' added just once below - } else { - SheetNameFormatter.appendFormat(sb, sheetName); - } - } - sb.append('!'); - sb.append(cellRefText); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java b/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java deleted file mode 100644 index dffa48e73e..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/FuncPtg.java +++ /dev/null @@ -1,60 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.formula.function.FunctionMetadata; -import org.apache.poi.ss.formula.function.FunctionMetadataRegistry; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author aviks - * @author Jason Height (jheight at chariot dot net dot au) - * @author Danny Mui (dmui at apache dot org) (Leftover handling) - */ -public final class FuncPtg extends AbstractFunctionPtg { - - public final static byte sid = 0x21; - public final static int SIZE = 3; - - public static FuncPtg create(LittleEndianInput in) { - return create(in.readUShort()); - } - - private FuncPtg(int funcIndex, FunctionMetadata fm) { - super(funcIndex, fm.getReturnClassCode(), fm.getParameterClassCodes(), fm.getMinParams()); // minParams same as max since these are not var-arg funcs - } - - public static FuncPtg create(int functionIndex) { - FunctionMetadata fm = FunctionMetadataRegistry.getFunctionByIndex(functionIndex); - if(fm == null) { - throw new RuntimeException("Invalid built-in function index (" + functionIndex + ")"); - } - return new FuncPtg(functionIndex, fm); - } - - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(getFunctionIndex()); - } - - public int getSize() { - return SIZE; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java b/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java deleted file mode 100644 index f9c9c58d92..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/FuncVarPtg.java +++ /dev/null @@ -1,73 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; -import org.apache.poi.ss.formula.function.FunctionMetadata; -import org.apache.poi.ss.formula.function.FunctionMetadataRegistry; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class FuncVarPtg extends AbstractFunctionPtg{ - - public final static byte sid = 0x22; - private final static int SIZE = 4; - - /** - * Single instance of this token for 'sum() taking a single argument' - */ - public static final OperationPtg SUM = FuncVarPtg.create("SUM", 1); - - private FuncVarPtg(int functionIndex, int returnClass, byte[] paramClasses, int numArgs) { - super(functionIndex, returnClass, paramClasses, numArgs); - } - - /**Creates new function pointer from a byte array - * usually called while reading an excel file. - */ - public static FuncVarPtg create(LittleEndianInput in) { - return create(in.readByte(), in.readShort()); - } - - /** - * Create a function ptg from a string tokenised by the parser - */ - public static FuncVarPtg create(String pName, int numArgs) { - return create(numArgs, lookupIndex(pName)); - } - - private static FuncVarPtg create(int numArgs, int functionIndex) { - FunctionMetadata fm = FunctionMetadataRegistry.getFunctionByIndex(functionIndex); - if(fm == null) { - // Happens only as a result of a call to FormulaParser.parse(), with a non-built-in function name - return new FuncVarPtg(functionIndex, Ptg.CLASS_VALUE, new byte[] {Ptg.CLASS_VALUE}, numArgs); - } - return new FuncVarPtg(functionIndex, fm.getReturnClassCode(), fm.getParameterClassCodes(), numArgs); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeByte(getNumberOfOperands()); - out.writeShort(getFunctionIndex()); - } - - public int getSize() { - return SIZE; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java deleted file mode 100644 index f46191ed84..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/GreaterEqualPtg.java +++ /dev/null @@ -1,54 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - - -/** - * PTG class to implement greater or equal to - * - * @author fred at stsci dot edu - */ -public final class GreaterEqualPtg extends ValueOperatorPtg { - public final static int SIZE = 1; - public final static byte sid = 0x0c; - - public static final ValueOperatorPtg instance = new GreaterEqualPtg(); - - private GreaterEqualPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - - buffer.append(">="); - buffer.append(operands[ 1 ]); - - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java b/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java deleted file mode 100644 index 248cf6ff4a..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/GreaterThanPtg.java +++ /dev/null @@ -1,61 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - - -/** - * Greater than operator PTG ">" - * @author Cameron Riley (criley at ekmail.com) - */ -public final class GreaterThanPtg extends ValueOperatorPtg { - public final static byte sid = 0x0D; - private final static String GREATERTHAN = ">"; - - public static final ValueOperatorPtg instance = new GreaterThanPtg(); - - private GreaterThanPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - /** - * Get the number of operands for the Less than operator - * @return int the number of operands - */ - public int getNumberOfOperands() { - return 2; - } - - /** - * Implementation of method from OperationsPtg - * @param operands a String array of operands - * @return String the Formula as a String - */ - public String toFormulaString(String[] operands) - { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append(GREATERTHAN); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/IntPtg.java b/src/java/org/apache/poi/hssf/record/formula/IntPtg.java deleted file mode 100644 index bb5d36f007..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/IntPtg.java +++ /dev/null @@ -1,76 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Integer (unsigned short integer) Stores an unsigned short value (java int) in - * a formula - * - * @author Andrew C. Oliver (acoliver at apache dot org) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class IntPtg extends ScalarConstantPtg { - // 16 bit unsigned integer - private static final int MIN_VALUE = 0x0000; - private static final int MAX_VALUE = 0xFFFF; - - /** - * Excel represents integers 0..65535 with the tInt token. - * - * @return true if the specified value is within the range of values - * IntPtg can represent. - */ - public static boolean isInRange(int i) { - return i >= MIN_VALUE && i <= MAX_VALUE; - } - - public final static int SIZE = 3; - public final static byte sid = 0x1e; - private final int field_1_value; - - public IntPtg(LittleEndianInput in) { - this(in.readUShort()); - } - - public IntPtg(int value) { - if (!isInRange(value)) { - throw new IllegalArgumentException("value is out of range: " + value); - } - field_1_value = value; - } - - public int getValue() { - return field_1_value; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(getValue()); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return String.valueOf(getValue()); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java b/src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java deleted file mode 100644 index 0e6771de35..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/IntersectionPtg.java +++ /dev/null @@ -1,62 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author Daniel Noll (daniel at nuix dot com dot au) - */ -public final class IntersectionPtg extends OperationPtg { - public final static byte sid = 0x0f; - - public static final OperationPtg instance = new IntersectionPtg(); - - private IntersectionPtg() { - // enforce singleton - } - - public final boolean isBaseToken() { - return true; - } - - public int getSize() { - return 1; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - } - - public String toFormulaString() { - return " "; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[0]); - buffer.append(" "); - buffer.append(operands[1]); - return buffer.toString(); - } - - public int getNumberOfOperands() { - return 2; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java deleted file mode 100644 index 99070e192f..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/LessEqualPtg.java +++ /dev/null @@ -1,53 +0,0 @@ - -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - - - - -/** - * Ptg class to implement less than or equal - * - * @author fred at stsci dot edu - */ -public final class LessEqualPtg extends ValueOperatorPtg { - public final static byte sid = 0x0a; - - public static final ValueOperatorPtg instance = new LessEqualPtg(); - - private LessEqualPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - buffer.append( operands[0] ); - buffer.append("<="); - buffer.append( operands[1] ); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java b/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java deleted file mode 100644 index f2fd06fe2b..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/LessThanPtg.java +++ /dev/null @@ -1,64 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Less than operator PTG "<". The SID is taken from the - * Openoffice.orgs Documentation of the Excel File Format, - * Table 3.5.7 - * @author Cameron Riley (criley at ekmail.com) - */ -public final class LessThanPtg extends ValueOperatorPtg { - /** the sid for the less than operator as hex */ - public final static byte sid = 0x09; - - /** identifier for LESS THAN char */ - private final static String LESSTHAN = "<"; - - public static final ValueOperatorPtg instance = new LessThanPtg(); - - private LessThanPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - /** - * Get the number of operands for the Less than operator - * @return int the number of operands - */ - public int getNumberOfOperands() { - return 2; - } - - /** - * Implementation of method from OperationsPtg - * @param operands a String array of operands - * @return String the Formula as a String - */ - public String toFormulaString(String[] operands) - { - StringBuffer buffer = new StringBuffer(); - buffer.append(operands[ 0 ]); - buffer.append(LESSTHAN); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java b/src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java deleted file mode 100644 index ee771207c7..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/MemAreaPtg.java +++ /dev/null @@ -1,74 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author Daniel Noll (daniel at nuix dot com dot au) - */ -public final class MemAreaPtg extends OperandPtg { - public final static short sid = 0x26; - private final static int SIZE = 7; - private final int field_1_reserved; - private final int field_2_subex_len; - - /** Creates new MemAreaPtg */ - - public MemAreaPtg(int subexLen) { - field_1_reserved = 0; - field_2_subex_len = subexLen; - } - - public MemAreaPtg(LittleEndianInput in) { - field_1_reserved = in.readInt(); - field_2_subex_len = in.readShort(); - } - - public int getLenRefSubexpression() { - return field_2_subex_len; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeInt(field_1_reserved); - out.writeShort(field_2_subex_len); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return ""; // TODO: Not sure how to format this. -- DN - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } - - @Override - public final String toString() { - StringBuffer sb = new StringBuffer(64); - sb.append(getClass().getName()).append(" [len="); - sb.append(field_2_subex_len); - sb.append("]"); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java b/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java deleted file mode 100644 index 91027b0ab0..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/MemErrPtg.java +++ /dev/null @@ -1,57 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - * @author Daniel Noll (daniel at nuix dot com dot au) - */ -public final class MemErrPtg extends OperandPtg { - public final static short sid = 0x27; - private final static int SIZE = 7; - private int field_1_reserved; - private short field_2_subex_len; - - public MemErrPtg(LittleEndianInput in) { - field_1_reserved = in.readInt(); - field_2_subex_len = in.readShort(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeInt(field_1_reserved); - out.writeShort(field_2_subex_len); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return "ERR#"; - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java b/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java deleted file mode 100644 index 1fc152a3ce..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/MemFuncPtg.java +++ /dev/null @@ -1,75 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author Glen Stampoultzis (glens at apache.org) - */ -public final class MemFuncPtg extends OperandPtg { - - public final static byte sid = 0x29; - private final int field_1_len_ref_subexpression; - - /** - * Creates new function pointer from a byte array usually called while - * reading an excel file. - */ - public MemFuncPtg(LittleEndianInput in) { - this(in.readUShort()); - } - - public MemFuncPtg(int subExprLen) { - field_1_len_ref_subexpression = subExprLen; - } - - public int getSize() { - return 3; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_len_ref_subexpression); - } - - public String toFormulaString() { - return ""; - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } - - public int getNumberOfOperands() { - return field_1_len_ref_subexpression; - } - - public int getLenRefSubexpression() { - return field_1_len_ref_subexpression; - } - @Override - public final String toString() { - StringBuffer sb = new StringBuffer(64); - sb.append(getClass().getName()).append(" [len="); - sb.append(field_1_len_ref_subexpression); - sb.append("]"); - return sb.toString(); - } -} \ No newline at end of file diff --git a/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java b/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java deleted file mode 100644 index 99b7708a4b..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/MissingArgPtg.java +++ /dev/null @@ -1,51 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - -/** - * Missing Function Arguments - * - * Avik Sengupta <avik at apache.org> - * - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class MissingArgPtg extends ScalarConstantPtg { - - private final static int SIZE = 1; - public final static byte sid = 0x16; - - public static final Ptg instance = new MissingArgPtg(); - - private MissingArgPtg() { - // enforce singleton - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return " "; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java b/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java deleted file mode 100644 index f627a91903..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/MultiplyPtg.java +++ /dev/null @@ -1,50 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Implements the standard mathmatical multiplication - * - * @author Andrew C. Oliver (acoliver at apache dot org) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class MultiplyPtg extends ValueOperatorPtg { - public final static byte sid = 0x05; - - public static final ValueOperatorPtg instance = new MultiplyPtg(); - - private MultiplyPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append("*"); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/NamePtg.java b/src/java/org/apache/poi/hssf/record/formula/NamePtg.java deleted file mode 100644 index e5cd0fc9de..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/NamePtg.java +++ /dev/null @@ -1,79 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.WorkbookDependentFormula; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class NamePtg extends OperandPtg implements WorkbookDependentFormula { - public final static short sid = 0x23; - private final static int SIZE = 5; - /** one-based index to defined name record */ - private int field_1_label_index; - private short field_2_zero; // reserved must be 0 - - /** - * @param nameIndex zero-based index to name within workbook - */ - public NamePtg(int nameIndex) { - field_1_label_index = 1 + nameIndex; // convert to 1-based - } - - /** Creates new NamePtg */ - - public NamePtg(LittleEndianInput in) { - field_1_label_index = in.readShort(); - field_2_zero = in.readShort(); - } - - /** - * @return zero based index to a defined name record in the LinkTable - */ - public int getIndex() { - return field_1_label_index - 1; // convert to zero based - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_label_index); - out.writeShort(field_2_zero); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString(FormulaRenderingWorkbook book) { - return book.getNameText(this); - } - - public String toFormulaString() { - throw new RuntimeException("3D references need a workbook to determine formula text"); - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java b/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java deleted file mode 100644 index 5b4176f485..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/NameXPtg.java +++ /dev/null @@ -1,93 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.WorkbookDependentFormula; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * - * @author aviks - */ -public final class NameXPtg extends OperandPtg implements WorkbookDependentFormula { - public final static short sid = 0x39; - private final static int SIZE = 7; - - /** index to REF entry in externsheet record */ - private final int _sheetRefIndex; - /** index to defined name or externname table(1 based) */ - private final int _nameNumber; - /** reserved must be 0 */ - private final int _reserved; - - private NameXPtg(int sheetRefIndex, int nameNumber, int reserved) { - _sheetRefIndex = sheetRefIndex; - _nameNumber = nameNumber; - _reserved = reserved; - } - - /** - * @param sheetRefIndex index to REF entry in externsheet record - * @param nameIndex index to defined name or externname table - */ - public NameXPtg(int sheetRefIndex, int nameIndex) { - this(sheetRefIndex, nameIndex + 1, 0); - } - - public NameXPtg(LittleEndianInput in) { - this(in.readUShort(), in.readUShort(), in.readUShort()); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(_sheetRefIndex); - out.writeShort(_nameNumber); - out.writeShort(_reserved); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString(FormulaRenderingWorkbook book) { - // -1 to convert definedNameIndex from 1-based to zero-based - return book.resolveNameXText(this); - } - public String toFormulaString() { - throw new RuntimeException("3D references need a workbook to determine formula text"); - } - - public String toString(){ - String retValue = "NameXPtg:[sheetRefIndex:" + _sheetRefIndex + - " , nameNumber:" + _nameNumber + "]" ; - return retValue; - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } - - public int getSheetRefIndex() { - return _sheetRefIndex; - } - public int getNameIndex() { - return _nameNumber - 1; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java b/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java deleted file mode 100644 index 62739dbd70..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/NotEqualPtg.java +++ /dev/null @@ -1,52 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Ptg class to implement not equal - * - * @author fred at stsci dot edu - */ -public final class NotEqualPtg extends ValueOperatorPtg { - public final static byte sid = 0x0e; - - public static final ValueOperatorPtg instance = new NotEqualPtg(); - - private NotEqualPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append( operands[0] ); - - buffer.append("<>"); - buffer.append( operands[1] ); - - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java b/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java deleted file mode 100644 index 244c09fe5f..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/NumberPtg.java +++ /dev/null @@ -1,71 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.NumberToTextConverter; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Number Stores a floating point value in a formula value stored in a 8 byte - * field using IEEE notation - * - * @author Avik Sengupta - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class NumberPtg extends ScalarConstantPtg { - public final static int SIZE = 9; - public final static byte sid = 0x1f; - private final double field_1_value; - - public NumberPtg(LittleEndianInput in) { - this(in.readDouble()); - } - - /** - * Create a NumberPtg from a string representation of the number Number - * format is not checked, it is expected to be validated in the parser that - * calls this method. - * - * @param value String representation of a floating point number - */ - public NumberPtg(String value) { - this(Double.parseDouble(value)); - } - - public NumberPtg(double value) { - field_1_value = value; - } - - public double getValue() { - return field_1_value; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeDouble(getValue()); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return NumberToTextConverter.toText(field_1_value); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/OperandPtg.java b/src/java/org/apache/poi/hssf/record/formula/OperandPtg.java deleted file mode 100644 index b8cf6ed096..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/OperandPtg.java +++ /dev/null @@ -1,38 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * @author Josh Micich - */ -public abstract class OperandPtg extends Ptg implements Cloneable { - - /** - * All Operand {@link Ptg}s are classified ('relative', 'value', 'array') - */ - public final boolean isBaseToken() { - return false; - } - public final OperandPtg copy() { - try { - return (OperandPtg) clone(); - } catch (CloneNotSupportedException e) { - throw new RuntimeException(e); - } - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/OperationPtg.java b/src/java/org/apache/poi/hssf/record/formula/OperationPtg.java deleted file mode 100644 index ac0dcb45ff..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/OperationPtg.java +++ /dev/null @@ -1,45 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * defines a Ptg that is an operation instead of an operand - * @author andy - */ -public abstract class OperationPtg extends Ptg { - public final static int TYPE_UNARY = 0; - public final static int TYPE_BINARY = 1; - public final static int TYPE_FUNCTION = 2; - - /** - * returns a string representation of the operations - * the length of the input array should equal the number returned by - * @see #getNumberOfOperands - * - */ - public abstract String toFormulaString(String[] operands); - - /** - * The number of operands expected by the operations - */ - public abstract int getNumberOfOperands(); - - public byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java b/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java deleted file mode 100644 index 1b94c90383..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ParenthesisPtg.java +++ /dev/null @@ -1,58 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - -/** - * While formula tokens are stored in RPN order and thus do not need parenthesis - * for precedence reasons, Parenthesis tokens ARE written to ensure that user - * entered parenthesis are displayed as-is on reading back - * - * Avik Sengupta <lists@aviksengupta.com> Andrew C. Oliver (acoliver at - * apache dot org) - * - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class ParenthesisPtg extends ControlPtg { - - private final static int SIZE = 1; - public final static byte sid = 0x15; - - public static final ControlPtg instance = new ParenthesisPtg(); - - private ParenthesisPtg() { - // enforce singleton - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - } - - public int getSize() { - return SIZE; - } - - public String toFormulaString() { - return "()"; - } - - public String toFormulaString(String[] operands) { - return "(" + operands[0] + ")"; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/PercentPtg.java b/src/java/org/apache/poi/hssf/record/formula/PercentPtg.java deleted file mode 100644 index 9dd7bd2be9..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/PercentPtg.java +++ /dev/null @@ -1,52 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Percent PTG. - * - * @author Daniel Noll (daniel at nuix.com.au) - */ -public final class PercentPtg extends ValueOperatorPtg { - public final static int SIZE = 1; - public final static byte sid = 0x14; - - private final static String PERCENT = "%"; - - public static final ValueOperatorPtg instance = new PercentPtg(); - - private PercentPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 1; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append(PERCENT); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java b/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java deleted file mode 100644 index 478b12fac3..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/PowerPtg.java +++ /dev/null @@ -1,51 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class PowerPtg extends ValueOperatorPtg { - public final static byte sid = 0x07; - - public static final ValueOperatorPtg instance = new PowerPtg(); - - private PowerPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; // TODO - 2 seems wrong (Jun 2008). Maybe this method is not relevant - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - - buffer.append(operands[ 0 ]); - buffer.append("^"); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/Ptg.java b/src/java/org/apache/poi/hssf/record/formula/Ptg.java deleted file mode 100644 index dba30f322a..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/Ptg.java +++ /dev/null @@ -1,321 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import java.util.ArrayList; -import java.util.List; - -import org.apache.poi.util.LittleEndianByteArrayOutputStream; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Ptg represents a syntactic token in a formula. 'PTG' is an acronym for - * 'parse thing'. Originally, the name referred to the single - * byte identifier at the start of the token, but in POI, Ptg encapsulates - * the whole formula token (initial byte + value data). - *

- * - * Ptgs are logically arranged in a tree representing the structure of the - * parsed formula. However, in BIFF files Ptgs are written/read in - * Reverse-Polish Notation order. The RPN ordering also simplifies formula - * evaluation logic, so POI mostly accesses Ptgs in the same way. - * - * @author andy - * @author avik - * @author Jason Height (jheight at chariot dot net dot au) - */ -public abstract class Ptg { - public static final Ptg[] EMPTY_PTG_ARRAY = { }; - - - /** - * Reads size bytes of the input stream, to create an array of Ptgs. - * Extra data (beyond size) may be read if and ArrayPtgs are present. - */ - public static Ptg[] readTokens(int size, LittleEndianInput in) { - List temp = new ArrayList(4 + size / 2); - int pos = 0; - boolean hasArrayPtgs = false; - while (pos < size) { - Ptg ptg = Ptg.createPtg(in); - if (ptg instanceof ArrayPtg.Initial) { - hasArrayPtgs = true; - } - pos += ptg.getSize(); - temp.add(ptg); - } - if(pos != size) { - throw new RuntimeException("Ptg array size mismatch"); - } - if (hasArrayPtgs) { - Ptg[] result = toPtgArray(temp); - for (int i=0;i= 0x60) { - retval.setClass(CLASS_ARRAY); - } else if (id >= 0x40) { - retval.setClass(CLASS_VALUE); - } else { - retval.setClass(CLASS_REF); - } - return retval; - } - - private static Ptg createClassifiedPtg(byte id, LittleEndianInput in) { - - int baseId = id & 0x1F | 0x20; - - switch (baseId) { - case ArrayPtg.sid: return new ArrayPtg.Initial(in);//0x20, 0x40, 0x60 - case FuncPtg.sid: return FuncPtg.create(in); // 0x21, 0x41, 0x61 - case FuncVarPtg.sid: return FuncVarPtg.create(in);//0x22, 0x42, 0x62 - case NamePtg.sid: return new NamePtg(in); // 0x23, 0x43, 0x63 - case RefPtg.sid: return new RefPtg(in); // 0x24, 0x44, 0x64 - case AreaPtg.sid: return new AreaPtg(in); // 0x25, 0x45, 0x65 - case MemAreaPtg.sid: return new MemAreaPtg(in); // 0x26, 0x46, 0x66 - case MemErrPtg.sid: return new MemErrPtg(in); // 0x27, 0x47, 0x67 - case MemFuncPtg.sid: return new MemFuncPtg(in); // 0x29, 0x49, 0x69 - case RefErrorPtg.sid: return new RefErrorPtg(in); // 0x2a, 0x4a, 0x6a - case AreaErrPtg.sid: return new AreaErrPtg(in); // 0x2b, 0x4b, 0x6b - case RefNPtg.sid: return new RefNPtg(in); // 0x2c, 0x4c, 0x6c - case AreaNPtg.sid: return new AreaNPtg(in); // 0x2d, 0x4d, 0x6d - - case NameXPtg.sid: return new NameXPtg(in); // 0x39, 0x49, 0x79 - case Ref3DPtg.sid: return new Ref3DPtg(in); // 0x3a, 0x5a, 0x7a - case Area3DPtg.sid: return new Area3DPtg(in); // 0x3b, 0x5b, 0x7b - case DeletedRef3DPtg.sid: return new DeletedRef3DPtg(in); // 0x3c, 0x5c, 0x7c - case DeletedArea3DPtg.sid: return new DeletedArea3DPtg(in); // 0x3d, 0x5d, 0x7d - } - throw new UnsupportedOperationException(" Unknown Ptg in Formula: 0x"+ - Integer.toHexString(id) + " (" + ( int ) id + ")"); - } - - private static Ptg createBasePtg(byte id, LittleEndianInput in) { - switch(id) { - case 0x00: return new UnknownPtg(id); // TODO - not a real Ptg - case ExpPtg.sid: return new ExpPtg(in); // 0x01 - case TblPtg.sid: return new TblPtg(in); // 0x02 - case AddPtg.sid: return AddPtg.instance; // 0x03 - case SubtractPtg.sid: return SubtractPtg.instance; // 0x04 - case MultiplyPtg.sid: return MultiplyPtg.instance; // 0x05 - case DividePtg.sid: return DividePtg.instance; // 0x06 - case PowerPtg.sid: return PowerPtg.instance; // 0x07 - case ConcatPtg.sid: return ConcatPtg.instance; // 0x08 - case LessThanPtg.sid: return LessThanPtg.instance; // 0x09 - case LessEqualPtg.sid: return LessEqualPtg.instance; // 0x0a - case EqualPtg.sid: return EqualPtg.instance; // 0x0b - case GreaterEqualPtg.sid: return GreaterEqualPtg.instance;// 0x0c - case GreaterThanPtg.sid: return GreaterThanPtg.instance; // 0x0d - case NotEqualPtg.sid: return NotEqualPtg.instance; // 0x0e - case IntersectionPtg.sid: return IntersectionPtg.instance;// 0x0f - case UnionPtg.sid: return UnionPtg.instance; // 0x10 - case RangePtg.sid: return RangePtg.instance; // 0x11 - case UnaryPlusPtg.sid: return UnaryPlusPtg.instance; // 0x12 - case UnaryMinusPtg.sid: return UnaryMinusPtg.instance; // 0x13 - case PercentPtg.sid: return PercentPtg.instance; // 0x14 - case ParenthesisPtg.sid: return ParenthesisPtg.instance; // 0x15 - case MissingArgPtg.sid: return MissingArgPtg.instance; // 0x16 - - case StringPtg.sid: return new StringPtg(in); // 0x17 - case AttrPtg.sid: return new AttrPtg(in); // 0x19 - case ErrPtg.sid: return ErrPtg.read(in); // 0x1c - case BoolPtg.sid: return BoolPtg.read(in); // 0x1d - case IntPtg.sid: return new IntPtg(in); // 0x1e - case NumberPtg.sid: return new NumberPtg(in); // 0x1f - } - throw new RuntimeException("Unexpected base token id (" + id + ")"); - } - - private static Ptg[] toPtgArray(List l) { - if (l.isEmpty()) { - return EMPTY_PTG_ARRAY; - } - Ptg[] result = new Ptg[l.size()]; - l.toArray(result); - return result; - } - /** - * This method will return the same result as {@link #getEncodedSizeWithoutArrayData(Ptg[])} - * if there are no array tokens present. - * @return the full size taken to encode the specified Ptgs - */ - public static int getEncodedSize(Ptg[] ptgs) { - int result = 0; - for (int i = 0; i < ptgs.length; i++) { - result += ptgs[i].getSize(); - } - return result; - } - /** - * Used to calculate value that should be encoded at the start of the encoded Ptg token array; - * @return the size of the encoded Ptg tokens not including any trailing array data. - */ - public static int getEncodedSizeWithoutArrayData(Ptg[] ptgs) { - int result = 0; - for (int i = 0; i < ptgs.length; i++) { - Ptg ptg = ptgs[i]; - if (ptg instanceof ArrayPtg) { - result += ArrayPtg.PLAIN_TOKEN_SIZE; - } else { - result += ptg.getSize(); - } - } - return result; - } - /** - * Writes the ptgs to the data buffer, starting at the specified offset. - * - *
- * The 2 byte encode length field is not written by this method. - * @return number of bytes written - */ - public static int serializePtgs(Ptg[] ptgs, byte[] array, int offset) { - int nTokens = ptgs.length; - - LittleEndianByteArrayOutputStream out = new LittleEndianByteArrayOutputStream(array, offset); - - List arrayPtgs = null; - - for (int k = 0; k < nTokens; k++) { - Ptg ptg = ptgs[k]; - - ptg.write(out); - if (ptg instanceof ArrayPtg) { - if (arrayPtgs == null) { - arrayPtgs = new ArrayList(5); - } - arrayPtgs.add(ptg); - } - } - if (arrayPtgs != null) { - for (int i=0;ifalse if this token is classified as 'reference', 'value', or 'array' - */ - public abstract boolean isBaseToken(); - - public static boolean doesFormulaReferToDeletedCell(Ptg[] ptgs) { - for (int i = 0; i < ptgs.length; i++) { - if (isDeletedCellRef(ptgs[i])) { - return true; - } - } - return false; - } - private static boolean isDeletedCellRef(Ptg ptg) { - if (ptg == ErrPtg.REF_INVALID) { - return true; - } - if (ptg instanceof DeletedArea3DPtg) { - return true; - } - if (ptg instanceof DeletedRef3DPtg) { - return true; - } - if (ptg instanceof AreaErrPtg) { - return true; - } - if (ptg instanceof RefErrorPtg) { - return true; - } - return false; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/RangePtg.java b/src/java/org/apache/poi/hssf/record/formula/RangePtg.java deleted file mode 100644 index c2507244da..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/RangePtg.java +++ /dev/null @@ -1,71 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - - -/** - * @author Daniel Noll (daniel at nuix dot com dot au) - */ -public final class RangePtg extends OperationPtg { - public final static int SIZE = 1; - public final static byte sid = 0x11; - - public static final OperationPtg instance = new RangePtg(); - - private RangePtg() { - // enforce singleton - } - - public final boolean isBaseToken() { - return true; - } - - public int getSize() - { - return SIZE; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - } - - public String toFormulaString() - { - return ":"; - } - - - /** implementation of method from OperationsPtg*/ - public String toFormulaString(String[] operands) - { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append(":"); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } - - public int getNumberOfOperands() - { - return 2; - } - -} diff --git a/src/java/org/apache/poi/hssf/record/formula/Ref2DPtgBase.java b/src/java/org/apache/poi/hssf/record/formula/Ref2DPtgBase.java deleted file mode 100644 index 6e8dd895a9..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/Ref2DPtgBase.java +++ /dev/null @@ -1,69 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author Josh Micich - */ -abstract class Ref2DPtgBase extends RefPtgBase { - private final static int SIZE = 5; - - - protected Ref2DPtgBase(int row, int column, boolean isRowRelative, boolean isColumnRelative) { - setRow(row); - setColumn(column); - setRowRelative(isRowRelative); - setColRelative(isColumnRelative); - } - - protected Ref2DPtgBase(LittleEndianInput in) { - readCoordinates(in); - } - - protected Ref2DPtgBase(CellReference cr) { - super(cr); - } - - public void write(LittleEndianOutput out) { - out.writeByte(getSid() + getPtgClass()); - writeCoordinates(out); - } - - public final String toFormulaString() { - return formatReferenceAsString(); - } - - protected abstract byte getSid(); - - public final int getSize() { - return SIZE; - } - - public final String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(getClass().getName()); - sb.append(" ["); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java b/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java deleted file mode 100644 index 8d7fc79499..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/Ref3DPtg.java +++ /dev/null @@ -1,96 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.ss.formula.ExternSheetReferenceToken; -import org.apache.poi.ss.formula.FormulaRenderingWorkbook; -import org.apache.poi.ss.formula.WorkbookDependentFormula; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * Title: Reference 3D Ptg

- * Description: Defined a cell in extern sheet.

- * REFERENCE:

- * @author Libin Roman (Vista Portal LDT. Developer) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class Ref3DPtg extends RefPtgBase implements WorkbookDependentFormula, ExternSheetReferenceToken { - public final static byte sid = 0x3a; - - private final static int SIZE = 7; // 6 + 1 for Ptg - private int field_1_index_extern_sheet; - - - public Ref3DPtg(LittleEndianInput in) { - field_1_index_extern_sheet = in.readShort(); - readCoordinates(in); - } - - public Ref3DPtg(String cellref, int externIdx ) { - this(new CellReference(cellref), externIdx); - } - - public Ref3DPtg(CellReference c, int externIdx) { - super(c); - setExternSheetIndex(externIdx); - } - - public String toString() { - StringBuffer sb = new StringBuffer(); - sb.append(getClass().getName()); - sb.append(" ["); - sb.append("sheetIx=").append(getExternSheetIndex()); - sb.append(" ! "); - sb.append(formatReferenceAsString()); - sb.append("]"); - return sb.toString(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(getExternSheetIndex()); - writeCoordinates(out); - } - - public int getSize() { - return SIZE; - } - - public int getExternSheetIndex() { - return field_1_index_extern_sheet; - } - - public void setExternSheetIndex(int index) { - field_1_index_extern_sheet = index; - } - public String format2DRefAsString() { - return formatReferenceAsString(); - } - /** - * @return text representation of this cell reference that can be used in text - * formulas. The sheet name will get properly delimited if required. - */ - public String toFormulaString(FormulaRenderingWorkbook book) { - return ExternSheetNameResolver.prependSheetName(book, field_1_index_extern_sheet, formatReferenceAsString()); - } - public String toFormulaString() { - throw new RuntimeException("3D references need a workbook to determine formula text"); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/RefErrorPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefErrorPtg.java deleted file mode 100644 index 1cca3b110a..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/RefErrorPtg.java +++ /dev/null @@ -1,62 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.usermodel.ErrorConstants; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * RefError - handles deleted cell reference - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class RefErrorPtg extends OperandPtg { - - private final static int SIZE = 5; - public final static byte sid = 0x2A; - private int field_1_reserved; - - public RefErrorPtg() { - field_1_reserved = 0; - } - public RefErrorPtg(LittleEndianInput in) { - field_1_reserved = in.readInt(); - } - - public String toString() { - return getClass().getName(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeInt(field_1_reserved); - } - - public int getSize() - { - return SIZE; - } - - public String toFormulaString() { - return ErrorConstants.getText(ErrorConstants.ERROR_REF); - } - - public byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java deleted file mode 100644 index 3a8148c46c..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/RefNPtg.java +++ /dev/null @@ -1,36 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; - -/** - * RefNPtg - * @author Jason Height (jheight at apache dot com) - */ -public final class RefNPtg extends Ref2DPtgBase { - public final static byte sid = 0x2C; - - public RefNPtg(LittleEndianInput in) { - super(in); - } - - protected byte getSid() { - return sid; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/RefPtg.java b/src/java/org/apache/poi/hssf/record/formula/RefPtg.java deleted file mode 100644 index 68b96d9bf5..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/RefPtg.java +++ /dev/null @@ -1,54 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.util.LittleEndianInput; - -/** - * ReferencePtg - handles references (such as A1, A2, IA4) - * @author Andrew C. Oliver (acoliver@apache.org) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class RefPtg extends Ref2DPtgBase { - public final static byte sid = 0x24; - - /** - * Takes in a String representation of a cell reference and fills out the - * numeric fields. - */ - public RefPtg(String cellref) { - super(new CellReference(cellref)); - } - - public RefPtg(int row, int column, boolean isRowRelative, boolean isColumnRelative) { - super(row, column, isRowRelative, isColumnRelative); - } - - public RefPtg(LittleEndianInput in) { - super(in); - } - - public RefPtg(CellReference cr) { - super(cr); - } - - protected byte getSid() { - return sid; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/RefPtgBase.java b/src/java/org/apache/poi/hssf/record/formula/RefPtgBase.java deleted file mode 100644 index 23c8f996fc..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/RefPtgBase.java +++ /dev/null @@ -1,117 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.ss.util.CellReference; -import org.apache.poi.util.BitField; -import org.apache.poi.util.BitFieldFactory; -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * ReferencePtgBase - handles references (such as A1, A2, IA4) - * - * @author Andrew C. Oliver (acoliver@apache.org) - * @author Jason Height (jheight at chariot dot net dot au) - */ -public abstract class RefPtgBase extends OperandPtg { - - /** The row index - zero based unsigned 16 bit value */ - private int field_1_row; - /** - * Field 2 - lower 8 bits is the zero based unsigned byte column index - bit - * 16 - isRowRelative - bit 15 - isColumnRelative - */ - private int field_2_col; - private static final BitField rowRelative = BitFieldFactory.getInstance(0x8000); - private static final BitField colRelative = BitFieldFactory.getInstance(0x4000); - - /** - * YK: subclasses of RefPtgBase are used by the FormulaParser and FormulaEvaluator accross HSSF and XSSF. - * The bit mask should accomodate the maximum number of avaiable columns, i.e. 0x3FFF. - * - * @see org.apache.poi.ss.SpreadsheetVersion - */ - private static final BitField column = BitFieldFactory.getInstance(0x3FFF); - - protected RefPtgBase() { - // Required for clone methods - } - - protected RefPtgBase(CellReference c) { - setRow(c.getRow()); - setColumn(c.getCol()); - setColRelative(!c.isColAbsolute()); - setRowRelative(!c.isRowAbsolute()); - } - - protected final void readCoordinates(LittleEndianInput in) { - field_1_row = in.readUShort(); - field_2_col = in.readUShort(); - } - - protected final void writeCoordinates(LittleEndianOutput out) { - out.writeShort(field_1_row); - out.writeShort(field_2_col); - } - - public final void setRow(int rowIndex) { - field_1_row = rowIndex; - } - - /** - * @return the row number as an int - */ - public final int getRow() { - return field_1_row; - } - - public final boolean isRowRelative() { - return rowRelative.isSet(field_2_col); - } - - public final void setRowRelative(boolean rel) { - field_2_col = rowRelative.setBoolean(field_2_col, rel); - } - - public final boolean isColRelative() { - return colRelative.isSet(field_2_col); - } - - public final void setColRelative(boolean rel) { - field_2_col = colRelative.setBoolean(field_2_col, rel); - } - - public final void setColumn(int col) { - field_2_col = column.setValue(field_2_col, col); - } - - public final int getColumn() { - return column.getValue(field_2_col); - } - - protected final String formatReferenceAsString() { - // Only make cell references as needed. Memory is an issue - CellReference cr = new CellReference(getRow(), getColumn(), !isRowRelative(), !isColRelative()); - return cr.formatAsString(); - } - - public final byte getDefaultOperandClass() { - return Ptg.CLASS_REF; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ScalarConstantPtg.java b/src/java/org/apache/poi/hssf/record/formula/ScalarConstantPtg.java deleted file mode 100644 index 37524fbb65..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ScalarConstantPtg.java +++ /dev/null @@ -1,42 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - - -/** - * Common superclass of all {@link Ptg}s that represent simple constant values. - * - * @author Josh Micich - */ -public abstract class ScalarConstantPtg extends Ptg { - public final boolean isBaseToken() { - return true; - } - - public final byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } - - public final String toString() { - StringBuffer sb = new StringBuffer(64); - sb.append(getClass().getName()).append(" ["); - sb.append(toFormulaString()); - sb.append("]"); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/StringPtg.java b/src/java/org/apache/poi/hssf/record/formula/StringPtg.java deleted file mode 100644 index be6a20d6e4..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/StringPtg.java +++ /dev/null @@ -1,108 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; -import org.apache.poi.util.StringUtil; - -/** - * String Stores a String value in a formula value stored in the format - * <length 2 bytes>char[] - * - * @author Werner Froidevaux - * @author Jason Height (jheight at chariot dot net dot au) - * @author Bernard Chesnoy - */ -public final class StringPtg extends ScalarConstantPtg { - public final static byte sid = 0x17; - /** the character (") used in formulas to delimit string literals */ - private static final char FORMULA_DELIMITER = '"'; - - private final boolean _is16bitUnicode; - /** - * NOTE: OO doc says 16bit length, but BiffViewer says 8 Book says something - * totally different, so don't look there! - */ - private final String field_3_string; - - /** Create a StringPtg from a stream */ - public StringPtg(LittleEndianInput in) { - int nChars = in.readUByte(); // Note - nChars is 8-bit - _is16bitUnicode = (in.readByte() & 0x01) != 0; - if (_is16bitUnicode) { - field_3_string = StringUtil.readUnicodeLE(in, nChars); - } else { - field_3_string = StringUtil.readCompressedUnicode(in, nChars); - } - } - - /** - * Create a StringPtg from a string representation of the number Number - * format is not checked, it is expected to be validated in the parser that - * calls this method. - * - * @param value : - * String representation of a floating point number - */ - public StringPtg(String value) { - if (value.length() > 255) { - throw new IllegalArgumentException( - "String literals in formulas can't be bigger than 255 characters ASCII"); - } - _is16bitUnicode = StringUtil.hasMultibyte(value); - field_3_string = value; - } - - public String getValue() { - return field_3_string; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeByte(field_3_string.length()); // Note - nChars is 8-bit - out.writeByte(_is16bitUnicode ? 0x01 : 0x00); - if (_is16bitUnicode) { - StringUtil.putUnicodeLE(field_3_string, out); - } else { - StringUtil.putCompressedUnicode(field_3_string, out); - } - } - - public int getSize() { - return 3 + field_3_string.length() * (_is16bitUnicode ? 2 : 1); - } - - public String toFormulaString() { - String value = field_3_string; - int len = value.length(); - StringBuffer sb = new StringBuffer(len + 4); - sb.append(FORMULA_DELIMITER); - - for (int i = 0; i < len; i++) { - char c = value.charAt(i); - if (c == FORMULA_DELIMITER) { - sb.append(FORMULA_DELIMITER); - } - sb.append(c); - } - - sb.append(FORMULA_DELIMITER); - return sb.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java b/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java deleted file mode 100644 index 46fa4cca6e..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/SubtractPtg.java +++ /dev/null @@ -1,50 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public final class SubtractPtg extends ValueOperatorPtg { - public final static byte sid = 0x04; - - public static final ValueOperatorPtg instance = new SubtractPtg(); - - private SubtractPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 2; - } - - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append("-"); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/TblPtg.java b/src/java/org/apache/poi/hssf/record/formula/TblPtg.java deleted file mode 100644 index aba7129bc5..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/TblPtg.java +++ /dev/null @@ -1,80 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianInput; -import org.apache.poi.util.LittleEndianOutput; - -/** - * This ptg indicates a data table. - * It only occurs in a FORMULA record, never in an - * ARRAY or NAME record. When ptgTbl occurs in a - * formula, it is the only token in the formula. - * - * This indicates that the cell containing the - * formula is an interior cell in a data table; - * the table description is found in a TABLE - * record. Rows and columns which contain input - * values to be substituted in the table do - * not contain ptgTbl. - * See page 811 of the june 08 binary docs. - */ -public final class TblPtg extends ControlPtg { - private final static int SIZE = 5; - public final static short sid = 0x02; - /** The row number of the upper left corner */ - private final int field_1_first_row; - /** The column number of the upper left corner */ - private final int field_2_first_col; - - public TblPtg(LittleEndianInput in) { - field_1_first_row = in.readUShort(); - field_2_first_col = in.readUShort(); - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - out.writeShort(field_1_first_row); - out.writeShort(field_2_first_col); - } - - public int getSize() { - return SIZE; - } - - public int getRow() { - return field_1_first_row; - } - - public int getColumn() { - return field_2_first_col; - } - - public String toFormulaString() - { - // table(....)[][] - throw new RuntimeException("Table and Arrays are not yet supported"); - } - - public String toString() { - StringBuffer buffer = new StringBuffer("[Data Table - Parent cell is an interior cell in a data table]\n"); - buffer.append("top left row = ").append(getRow()).append("\n"); - buffer.append("top left col = ").append(getColumn()).append("\n"); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java deleted file mode 100644 index b8f28ec395..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/UnaryMinusPtg.java +++ /dev/null @@ -1,51 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Unary Plus operator - * does not have any effect on the operand - * @author Avik Sengupta - */ -public final class UnaryMinusPtg extends ValueOperatorPtg { - public final static byte sid = 0x13; - - private final static String MINUS = "-"; - - public static final ValueOperatorPtg instance = new UnaryMinusPtg(); - - private UnaryMinusPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 1; - } - - /** implementation of method from OperationsPtg*/ - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - buffer.append(MINUS); - buffer.append(operands[ 0]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java deleted file mode 100644 index 0b050fd531..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/UnaryPlusPtg.java +++ /dev/null @@ -1,51 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -/** - * Unary Plus operator - * does not have any effect on the operand - * @author Avik Sengupta - */ -public final class UnaryPlusPtg extends ValueOperatorPtg { - public final static byte sid = 0x12; - - private final static String ADD = "+"; - - public static final ValueOperatorPtg instance = new UnaryPlusPtg(); - - private UnaryPlusPtg() { - // enforce singleton - } - - protected byte getSid() { - return sid; - } - - public int getNumberOfOperands() { - return 1; - } - - /** implementation of method from OperationsPtg*/ - public String toFormulaString(String[] operands) { - StringBuffer buffer = new StringBuffer(); - buffer.append(ADD); - buffer.append(operands[ 0]); - return buffer.toString(); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java deleted file mode 100644 index 2c80ab6fe6..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/UnionPtg.java +++ /dev/null @@ -1,70 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - - -/** - * @author Glen Stampoultzis (glens at apache.org) - */ -public final class UnionPtg extends OperationPtg { - public final static byte sid = 0x10; - - public static final OperationPtg instance = new UnionPtg(); - - private UnionPtg() { - // enforce singleton - } - - public final boolean isBaseToken() { - return true; - } - - public int getSize() - { - return 1; - } - - public void write(LittleEndianOutput out) { - out.writeByte(sid + getPtgClass()); - } - - public String toFormulaString() - { - return ","; - } - - - /** implementation of method from OperationsPtg*/ - public String toFormulaString(String[] operands) - { - StringBuffer buffer = new StringBuffer(); - - buffer.append(operands[ 0 ]); - buffer.append(","); - buffer.append(operands[ 1 ]); - return buffer.toString(); - } - - public int getNumberOfOperands() - { - return 2; - } - -} diff --git a/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java b/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java deleted file mode 100644 index ca94766a5e..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/UnknownPtg.java +++ /dev/null @@ -1,50 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - -/** - * @author andy - * @author Jason Height (jheight at chariot dot net dot au) - */ -public class UnknownPtg extends Ptg { - private short size = 1; - private final int _sid; - - public UnknownPtg(int sid) { - _sid = sid; - } - - public boolean isBaseToken() { - return true; - } - public void write(LittleEndianOutput out) { - out.writeByte(_sid); - } - - public int getSize() { - return size; - } - - public String toFormulaString() { - return "UNKNOWN"; - } - public byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/ValueOperatorPtg.java b/src/java/org/apache/poi/hssf/record/formula/ValueOperatorPtg.java deleted file mode 100644 index 4f9d4be305..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/ValueOperatorPtg.java +++ /dev/null @@ -1,56 +0,0 @@ -/* ==================================================================== - Licensed to the Apache Software Foundation (ASF) under one or more - contributor license agreements. See the NOTICE file distributed with - this work for additional information regarding copyright ownership. - The ASF licenses this file to You under the Apache License, Version 2.0 - (the "License"); you may not use this file except in compliance with - the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -==================================================================== */ - -package org.apache.poi.hssf.record.formula; - -import org.apache.poi.util.LittleEndianOutput; - -/** - * Common superclass of all value operators. Subclasses include all unary and - * binary operators except for the reference operators (IntersectionPtg, - * RangePtg, UnionPtg) - * - * @author Josh Micich - */ -public abstract class ValueOperatorPtg extends OperationPtg { - - /** - * All Operator Ptgs are base tokens (i.e. are not RVA classified) - */ - public final boolean isBaseToken() { - return true; - } - - public final byte getDefaultOperandClass() { - return Ptg.CLASS_VALUE; - } - - public void write(LittleEndianOutput out) { - out.writeByte(getSid()); - } - - protected abstract byte getSid(); - - public final int getSize() { - return 1; - } - - public final String toFormulaString() { - // TODO - prune this method out of the hierarchy - throw new RuntimeException("toFormulaString(String[] operands) should be used for subclasses of OperationPtgs"); - } -} diff --git a/src/java/org/apache/poi/hssf/record/formula/package.html b/src/java/org/apache/poi/hssf/record/formula/package.html deleted file mode 100644 index b0e899c1ba..0000000000 --- a/src/java/org/apache/poi/hssf/record/formula/package.html +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - -formula package contains binary PTG structures used in Formulas - -

Related Documentation

- -For overviews, tutorials, examples, guides, and tool documentation, please see: - - - -@see org.apache.poi.hssf.record -@see org.apache.poi.hssf.record.FormulaRecord - - diff --git a/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java b/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java index 7cc45fedc8..cb1571131c 100644 --- a/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java +++ b/src/java/org/apache/poi/hssf/usermodel/DVConstraint.java @@ -22,9 +22,9 @@ import java.text.SimpleDateFormat; import java.util.Date; import org.apache.poi.hssf.model.HSSFFormulaParser; -import org.apache.poi.hssf.record.formula.NumberPtg; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.hssf.record.formula.StringPtg; +import org.apache.poi.ss.formula.ptg.NumberPtg; +import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.formula.ptg.StringPtg; import org.apache.poi.ss.formula.FormulaType; import org.apache.poi.ss.usermodel.DataValidationConstraint; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java index 63d42a639e..2e7bf09b06 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFCell.java @@ -42,8 +42,8 @@ import org.apache.poi.hssf.record.SubRecord; import org.apache.poi.hssf.record.TextObjectRecord; import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate; import org.apache.poi.hssf.record.common.UnicodeString; -import org.apache.poi.hssf.record.formula.ExpPtg; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.ExpPtg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.eval.ErrorEval; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java b/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java index 29430b094f..82f7884d6f 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFConditionalFormattingRule.java @@ -23,7 +23,7 @@ import org.apache.poi.hssf.record.CFRuleRecord.ComparisonOperator; import org.apache.poi.hssf.record.cf.BorderFormatting; import org.apache.poi.hssf.record.cf.FontFormatting; import org.apache.poi.hssf.record.cf.PatternFormatting; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; /** * diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java index 2ac66d64e3..86d2c7fe95 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFEvaluationWorkbook.java @@ -21,9 +21,9 @@ import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.InternalWorkbook; import org.apache.poi.hssf.record.NameRecord; import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate; -import org.apache.poi.hssf.record.formula.NamePtg; -import org.apache.poi.hssf.record.formula.NameXPtg; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.NamePtg; +import org.apache.poi.ss.formula.ptg.NameXPtg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.SpreadsheetVersion; import org.apache.poi.ss.formula.EvaluationCell; import org.apache.poi.ss.formula.EvaluationName; @@ -33,7 +33,6 @@ import org.apache.poi.ss.formula.FormulaParseException; import org.apache.poi.ss.formula.FormulaParsingWorkbook; import org.apache.poi.ss.formula.FormulaRenderingWorkbook; import org.apache.poi.ss.formula.FormulaType; -import org.apache.poi.ss.formula.EvaluationWorkbook.ExternalName; /** * Internal POI use only diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java index e88a672beb..9309bd7165 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFName.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFName.java @@ -21,7 +21,7 @@ import org.apache.poi.hssf.model.HSSFFormulaParser; import org.apache.poi.hssf.model.InternalWorkbook; import org.apache.poi.hssf.record.NameCommentRecord; import org.apache.poi.hssf.record.NameRecord; -import org.apache.poi.hssf.record.formula.Ptg; +import org.apache.poi.ss.formula.ptg.Ptg; import org.apache.poi.ss.formula.FormulaType; import org.apache.poi.ss.usermodel.Name; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java index 9b39c665a1..9a772e15dd 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFSheet.java @@ -32,8 +32,8 @@ import org.apache.poi.hssf.record.aggregates.DataValidityTable; import org.apache.poi.hssf.record.aggregates.FormulaRecordAggregate; import org.apache.poi.hssf.record.aggregates.WorksheetProtectionBlock; import org.apache.poi.ss.formula.FormulaShifter; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.hssf.record.formula.Area3DPtg; +import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.formula.ptg.Area3DPtg; import org.apache.poi.hssf.util.PaneInformation; import org.apache.poi.hssf.util.Region; import org.apache.poi.ss.SpreadsheetVersion; diff --git a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java index b999512b22..f255931d80 100644 --- a/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java +++ b/src/java/org/apache/poi/hssf/usermodel/HSSFWorkbook.java @@ -55,14 +55,14 @@ import org.apache.poi.hssf.record.SSTRecord; import org.apache.poi.hssf.record.UnknownRecord; import org.apache.poi.hssf.record.aggregates.RecordAggregate.RecordVisitor; import org.apache.poi.hssf.record.common.UnicodeString; -import org.apache.poi.hssf.record.formula.Area3DPtg; -import org.apache.poi.hssf.record.formula.MemFuncPtg; -import org.apache.poi.hssf.record.formula.NameXPtg; -import org.apache.poi.hssf.record.formula.OperandPtg; -import org.apache.poi.hssf.record.formula.Ptg; -import org.apache.poi.hssf.record.formula.Ref3DPtg; +import org.apache.poi.ss.formula.ptg.Area3DPtg; +import org.apache.poi.ss.formula.ptg.MemFuncPtg; +import org.apache.poi.ss.formula.ptg.NameXPtg; +import org.apache.poi.ss.formula.ptg.OperandPtg; +import org.apache.poi.ss.formula.ptg.Ptg; +import org.apache.poi.ss.formula.ptg.Ref3DPtg; import org.apache.poi.ss.formula.SheetNameFormatter; -import org.apache.poi.hssf.record.formula.UnionPtg; +import org.apache.poi.ss.formula.ptg.UnionPtg; import org.apache.poi.hssf.util.CellReference; import org.apache.poi.poifs.filesystem.DirectoryNode; import org.apache.poi.poifs.filesystem.POIFSFileSystem;