blob: 5f86fd20d38e500bfa8f7013fe5e92bc7c046875 [file] [log] [blame]
/**************************************************************
*
* 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.openoffice.xmerge.converter.xml.sxc.pexcel.records.formula;
import java.util.HashMap;
public class FunctionLookup extends SymbolLookup {
private HashMap stringToArgs = null;
/**
* The default constructor - invokes {@link #initialize() initialize()}
*/
public FunctionLookup() {
initialize();
}
/**
* Initialize the lookup table for functions
*/
public void initialize() {
if ((stringToID != null) || (idToString != null) || (stringToArgs !=null)) {
return;
}
stringToID = new HashMap();
idToString = new HashMap();
stringToArgs = new HashMap();
// Functions with Variable number of Arguments
// Math and Trig
addEntry("SUM", TokenConstants.TSUM, -1);
addEntry("MIN", TokenConstants.TMIN, -1);
addEntry("PRODUCT", TokenConstants.TPRODUCT, -1);
addEntry("LOG", TokenConstants.TLOG, -1);
addEntry("SUMIF", TokenConstants.TSUMIF, -1);
addEntry("TRUNC", TokenConstants.TRUNC, -1);
// Financial
addEntry("DDB", TokenConstants.TDDB, -1);
addEntry("FV", TokenConstants.TFV, -1);
addEntry("IRR", TokenConstants.TIRR, -1);
addEntry("NPER", TokenConstants.TNPER, -1);
addEntry("NPV", TokenConstants.TNPV, -1);
addEntry("PMT", TokenConstants.TPMT, -1);
addEntry("PV", TokenConstants.TPV, -1);
addEntry("RATE", TokenConstants.TRATE, -1);
// Statistical
addEntry("AVERAGE", TokenConstants.TAVERAGE, -1);
addEntry("COUNT", TokenConstants.TCOUNT, -1);
addEntry("COUNTA", TokenConstants.TCOUNTA, -1);
addEntry("MAX", TokenConstants.TMAX, -1 );
addEntry("MIN", TokenConstants.TMIN, -1);
addEntry("STDEV", TokenConstants.TSTDEV, -1 );
addEntry("STDEVP", TokenConstants.TSTDEVP, -1 );
addEntry("VAR", TokenConstants.TVAR, -1);
addEntry("VARP", TokenConstants.TVARP, -1);
// Lookup
addEntry("CHOOSE", TokenConstants.TCHOOSE, -1);
addEntry("HLOOKUP", TokenConstants.THLOOKUP, -1);
addEntry("INDEX", TokenConstants.TINDEX, -1);
addEntry("MATCH", TokenConstants.TMATCH, -1) ;
addEntry("VLOOKUP", TokenConstants.TVLOOKUP, -1);
// Text
addEntry("RIGHT", TokenConstants.TRIGHT, -1);
addEntry("SUBSTITUTE", TokenConstants.TSUBSTITUTE, -1);
addEntry("FIND", TokenConstants.TFIND, -1);
addEntry("LEFT", TokenConstants.TLEFT, -1);
// Logical
addEntry("AND", TokenConstants.TAND, -1 );
addEntry("IF", TokenConstants.TIF, -1) ;
addEntry("OR", TokenConstants.TOR, -1);
// Functions with Fixed number of Arguments
// Math and Trig
addEntry("ABS", TokenConstants.TABS, 1);
addEntry("ACOS", TokenConstants.TACOS, 1);
addEntry("ASIN", TokenConstants.TASIN, 1);
addEntry("ATAN", TokenConstants.TATAN, 1);
addEntry("ATAN2", TokenConstants.TATAN2, 1);
addEntry("COS", TokenConstants.TCOS, 1);
addEntry("COUNTIF", TokenConstants.TCOUNTIF, 1);
addEntry("DEGREES", TokenConstants.TDEGREES, 1);
addEntry("EXP", TokenConstants.TEXP, 1);
addEntry("FACT", TokenConstants.TFACT, 1);
addEntry("INT", TokenConstants.TINTE, 1);
addEntry("LN", TokenConstants.TLN, 1);
addEntry("LOG10", TokenConstants.TLOG10, 1);
addEntry("MOD", TokenConstants.TMOD, 1);
addEntry("PI", TokenConstants.TPI, 0);
addEntry("POWER", TokenConstants.TPOWERF, 2);
addEntry("RADIANS", TokenConstants.TRADIANS, 1);
addEntry("RAND", TokenConstants.TRAND, 1);
addEntry("ROUND", TokenConstants.TROUND, 1);
addEntry("SQRT", TokenConstants.TSQRT, 1);
addEntry("TAN", TokenConstants.TTAN, 1);
addEntry("SIN", TokenConstants.TSIN, 1);
// Financial
addEntry("SLN", TokenConstants.TSLN, 3);
addEntry("SYD", TokenConstants.TSYD, 4);
// Date and Time
addEntry("DATE", TokenConstants.TDATE, 3);
addEntry("DATEVALUE", TokenConstants.TDATEVALUE, 1);
addEntry("DAY", TokenConstants.TDAY, 1);
addEntry("HOUR", TokenConstants.THOUR, 1);
addEntry("MINUTE", TokenConstants.TMINUTE, 1 );
addEntry("MONTH", TokenConstants.TMONTH, 1);
addEntry("NOW", TokenConstants.TNOW, 0);
addEntry("SECOND", TokenConstants.TSECOND, 1);
addEntry("TIME", TokenConstants.TTIME, 3);
addEntry("TIMEVALUE", TokenConstants.TTIMEVALUE, 1);
addEntry("YEAR", TokenConstants.TYEAR, 1);
// Statistical
addEntry("COUNTBLANK", TokenConstants.TCOUNTBLANK, 1);
// lookup
addEntry("COLUMNS", TokenConstants.TCOLUMNS, 1);
addEntry("ROWS", TokenConstants.TROWS, 1);
// Database
addEntry("DAVERAGE", TokenConstants.TDAVAERAGE, 3);
addEntry("DCOUNT", TokenConstants.TDCOUNT, 3);
addEntry("DCOUNTA", TokenConstants.TDCOUNTA, 2);
addEntry("DGET", TokenConstants.TDGET, 3);
addEntry("DMAX", TokenConstants.TDMAX, 3);
addEntry("DMIN", TokenConstants.TDMIN, 3);
addEntry("DPRODUCT", TokenConstants.TDPRODUCT, 3);
addEntry("DSTDEV", TokenConstants.TDSTDEV, 3);
addEntry("DSTDEVP", TokenConstants.TDSTDEVP, 3) ;
addEntry("DSUM", TokenConstants.TDSUM, 3);
addEntry("DVAR", TokenConstants.TDVAR, 3);
addEntry("DVARP", TokenConstants.TDVARP, 3);
// Text
addEntry("EXACT", TokenConstants.TEXACT, 2);
addEntry("LEN", TokenConstants.TLEN, 1);
addEntry("LOWER", TokenConstants.TLOWER, 1);
addEntry("MID", TokenConstants.TMID, 3); // ??????
addEntry("PROPER", TokenConstants.TPROPER, 1);
addEntry("REPLACE", TokenConstants.TREPLACE, 4);
addEntry("REPT", TokenConstants.TREPT, 2);
addEntry("T", TokenConstants.TT, 1);
addEntry("TRIM", TokenConstants.TRIM, 1);
addEntry("UPPER", TokenConstants.TUPPER, 1);
addEntry("VALUE", TokenConstants.TVALUE, 1);
// Logical
addEntry("FALSE", TokenConstants.TFALSE, 0);
addEntry("NOT", TokenConstants.TNOT, 1);
addEntry("TRUE", TokenConstants.TTRUE, 0);
// Informational
addEntry("ERRORTYPE", TokenConstants.TERRORTYPE, 1);
addEntry("ISBLANK", TokenConstants.TISBLANK, 1);
addEntry("ISERR", TokenConstants.TISERR, 1);
addEntry("ISERROR", TokenConstants.TISERROR, 1);
addEntry("ISLOGICAL", TokenConstants.TISLOGICAL, 1);
addEntry("ISNA", TokenConstants.TISNA, 1);
addEntry("ISNONTEXT", TokenConstants.TISNONTEXT, 1);
addEntry("ISNUMBER", TokenConstants.TISNUMBER, 1);
addEntry("ISTEXT", TokenConstants.TISTEXT, 1);
addEntry("N", TokenConstants.TN, 1);
addEntry("NA", TokenConstants.TNA, 0);
}
/**
* Associate a function with an identifier and specifiy the number of arguments for that function
* @param symbol The function string that will act as the key in the lookup table
* @param id The identifier for the function
* @param args The number of arguments this function requires
*/
public void addEntry(String symbol, int id, int args) {
addEntry(symbol, id);
stringToArgs.put(symbol, new Integer(args));
}
/**
* Retrieve the number of arguments for this function
* @param symbol The function name
* @return The number of arguments required by this function
*/
public int getArgCountFromString(String symbol) {
return ((Integer)stringToArgs.get(symbol)).intValue();
}
}