001    /**
002     * =========================================
003     * LibFormula : a free Java formula library
004     * =========================================
005     *
006     * Project Info:  http://reporting.pentaho.org/libformula/
007     *
008     * (C) Copyright 2006-2007, by Pentaho Corporation and Contributors.
009     *
010     * This library is free software; you can redistribute it and/or modify it under the terms
011     * of the GNU Lesser General Public License as published by the Free Software Foundation;
012     * either version 2.1 of the License, or (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
015     * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
016     * See the GNU Lesser General Public License for more details.
017     *
018     * You should have received a copy of the GNU Lesser General Public License along with this
019     * library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
020     * Boston, MA 02111-1307, USA.
021     *
022     * [Java is a trademark or registered trademark of Sun Microsystems, Inc.
023     * in the United States and other countries.]
024     *
025     *
026     * ------------
027     * $Id: FunctionDescription.java 2716 2007-04-01 13:51:58Z taqua $
028     * ------------
029     * (C) Copyright 2006-2007, by Pentaho Corporation.
030     */
031    package org.jfree.formula.function;
032    
033    import java.util.Locale;
034    
035    import org.jfree.formula.typing.Type;
036    
037    /**
038     * A static definition of the function's parameters, return values etc.
039     * This is a support class with emphasis on GUI tools.
040     *
041     * However, the parameter declarations are also used when filling in the
042     * parameter values.
043     *
044     * Functions have a defined set of known parameters and can have a unlimited
045     * number of optional parameters. If a function declares at least one parameter
046     * and declares that its parameter list is infinite, then the last parameter
047     * type is used on all remaining parameters.
048     *
049     * @author Thomas Morgner
050     */
051    public interface FunctionDescription
052    {
053      public String getDisplayName (Locale locale);
054      public String getDescription (Locale locale);
055      public boolean isVolatile();
056      public Type getValueType();
057      public FunctionCategory getCategory();
058    
059      public int getParameterCount ();
060      public boolean isInfiniteParameterCount();
061    
062      /**
063       * Returns the parameter type at the given position using the function
064       * metadata. The first parameter is at the position 0;
065       *
066       * @param position The parameter index.
067       * @return The parameter type.
068       */
069      public Type getParameterType(int position);
070      public String getParameterDisplayName(int position, Locale locale);
071      public String getParameterDescription(int position, Locale locale);
072    
073      /**
074       * Defines, whether the parameter at the given position is mandatory. A
075       * mandatory parameter must be filled in, while optional parameters need
076       * not to be filled in.
077       *
078       * @return
079       */
080      public boolean isParameterMandatory(int position);
081    
082      /**
083       * Returns the default value for an optional parameter. If the value returned
084       * here is null, then this either means, that the parameter is mandatory or
085       * that the default value is computed by the expression itself.
086       *
087       * @param position
088       * @return
089       */
090      public Object getDefaultValue (int position);
091    
092    }