| /* ==================================================================== |
| 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.ss.formula.function; |
| |
| /** |
| * Holds information about Excel built-in functions. |
| */ |
| public final class FunctionMetadata { |
| /** |
| * maxParams=30 in functionMetadata.txt means the maximum number arguments supported |
| * by the given version of Excel. Validation routines should take the actual limit (Excel 97 or 2007) |
| * from the SpreadsheetVersion enum. |
| * Perhaps a value like 'M' should be used instead of '30' in functionMetadata.txt |
| * to make that file more version neutral. |
| * @see org.apache.poi.ss.formula.FormulaParser#validateNumArgs(int, FunctionMetadata) |
| */ |
| @SuppressWarnings("JavadocReference") |
| private static final short FUNCTION_MAX_PARAMS = 30; |
| |
| private final int _index; |
| private final String _name; |
| private final int _minParams; |
| private final int _maxParams; |
| private final byte _returnClassCode; |
| private final byte[] _parameterClassCodes; |
| |
| /* package */ FunctionMetadata(int index, String name, int minParams, int maxParams, |
| byte returnClassCode, byte[] parameterClassCodes) { |
| _index = index; |
| _name = name; |
| _minParams = minParams; |
| _maxParams = maxParams; |
| _returnClassCode = returnClassCode; |
| _parameterClassCodes = (parameterClassCodes == null) ? null : parameterClassCodes.clone(); |
| } |
| |
| public int getIndex() { |
| return _index; |
| } |
| |
| public String getName() { |
| return _name; |
| } |
| |
| public int getMinParams() { |
| return _minParams; |
| } |
| |
| public int getMaxParams() { |
| return _maxParams; |
| } |
| |
| public boolean hasFixedArgsLength() { |
| return _minParams == _maxParams; |
| } |
| |
| public byte getReturnClassCode() { |
| return _returnClassCode; |
| } |
| |
| public byte[] getParameterClassCodes() { |
| return _parameterClassCodes.clone(); |
| } |
| |
| /** |
| * Some varags functions (like VLOOKUP) have a specific limit to the number of arguments that |
| * can be passed. Other functions (like SUM) don't have such a limit. For those functions, |
| * the spreadsheet version determines the maximum number of arguments that can be passed. |
| * @return <code>true</code> if this function can the maximum number of arguments allowable by |
| * the {@link org.apache.poi.ss.SpreadsheetVersion} |
| */ |
| public boolean hasUnlimitedVarags() { |
| return FUNCTION_MAX_PARAMS == _maxParams; |
| } |
| |
| public String toString() { |
| return getClass().getName() + " [" + _index + " " + _name + "]"; |
| } |
| } |