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: FormulaContext.java 3314 2007-09-10 11:35:45Z tmorgner $
028     * ------------
029     * (C) Copyright 2006-2007, by Pentaho Corporation.
030     */
031    package org.jfree.formula;
032    
033    import org.jfree.formula.function.FunctionRegistry;
034    import org.jfree.formula.operators.OperatorFactory;
035    import org.jfree.formula.typing.Type;
036    import org.jfree.formula.typing.TypeRegistry;
037    import org.jfree.util.Configuration;
038    
039    /**
040     * The formula-context connects the formula functions with the outside world. The context can be used to resolve
041     * external references, to query the configuration or to retrieve information about the formula-evaluation system.
042     *
043     * @author Thomas Morgner
044     */
045    public interface FormulaContext
046    {
047      /**
048       * Checks, whether the external object referenced by <code>name</code> has changed.
049       *
050       * @param name the name that identifies the reference.
051       * @return true, if the reference has changed, false otherwise.
052       * @throws ContextEvaluationException if an error occurs.
053       */
054      public boolean isReferenceDirty(Object name) throws ContextEvaluationException;
055    
056      /**
057       * Resolves the given reference. How the name is interpreted by the outside system is an implementation detail.
058       *
059       * @param name the name that identifies the reference.
060       * @return the resolved object.
061       * @throws ContextEvaluationException if an error occurs.
062       */
063      public Object resolveReference(Object name) throws ContextEvaluationException;
064    
065      /**
066       * Queries the type of the given reference. How the name is interpreted by the outside system is an implementation
067       * detail. This return a LibFormula type object matching the type of the object that would be returned by
068       * resolveReference.
069       *
070       * @param name the name that identifies the reference.
071       * @return the type of the resolved object.
072       * @throws ContextEvaluationException if an error occurs.
073       */
074      public Type resolveReferenceType(Object name) throws ContextEvaluationException;
075    
076      /**
077       * Returns the localization context of this formula. The localization context can be used to query locale specific
078       * configuration settings.
079       *
080       * @return the localization context.
081       */
082      public LocalizationContext getLocalizationContext();
083    
084      /**
085       * Returns the local configuration of the formula.
086       *
087       * @return the local configuration.
088       */
089      public Configuration getConfiguration();
090    
091      /**
092       * Returns the function registry. The function registry grants access to all formula-function implementations.
093       *
094       * @return the function registry.
095       */
096      public FunctionRegistry getFunctionRegistry();
097    
098      /**
099       * Returns the type registry. The type registry contains all type information and allows to convert values between
100       * different types.
101       *
102       * @return the function registry.
103       */
104      public TypeRegistry getTypeRegistry();
105    
106      /**
107       * Returns the operator registry. The Operator-registry contains all operator-implementations.
108       *
109       * @return the operator registry.
110       */
111      public OperatorFactory getOperatorFactory();
112    }