/* gnu.java.beans.decoder.Context Copyright (C) 2004 Free Software Foundation, Inc. This file is part of GNU Classpath. GNU Classpath is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNU Classpath is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNU Classpath; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. Linking this library statically or dynamically with other modules is making a combined work based on this library. Thus, the terms and conditions of the GNU General Public License cover the whole combination. As a special exception, the copyright holders of this library give you permission to link this library with independent modules to produce an executable, regardless of the license terms of these independent modules, and to copy and distribute the resulting executable under terms of your choice, provided that you also meet, for each linked independent module, the terms and conditions of the license of that module. An independent module is a module which is not derived from or based on this library. If you modify this library, you may extend this exception to your version of the library, but you are not obligated to do so. If you do not wish to do so, delete this exception statement from your version. */ package gnu.java.beans.decoder; /** A Context is the environment for an object which is being assembler. If there * are no errors each handler creates one Context. *

Depending on the result of isStatement() a Context can be statement or an * expression. An expression returns a value to the Context of its parent handler, * a statement does not. Whenever a Context is a statement the parent handler's * Context is informed about that through the {@link notifyStatement}-method.

* * @author Robert Schuster */ interface Context { /** Adds a parameter object to the context. This method is used when * sub-Contexts return their result. * * Some Contexts do not accept more than a certain amount of objects * and throw an AssemblerException if the amount is exceeded. * * @param o The object added to this context. */ void addParameterObject(Object o) throws AssemblyException; /** Notifies that the next element is a statement. This can mean * that an argument list is complete to be called. * */ void notifyStatement(Context outerContext) throws AssemblyException; /** Notifies that the context ends and the returns the appropriate result * object. * * @param outerContext * @return */ Object endContext(Context outerContext) throws AssemblyException; /** Notifies that the assembly of a subcontext failed and returns * whether this Context is affected in a way that it fails too. * * @return Whether the failure of a subcontext lets this context fail, too. */ boolean subContextFailed(); /** Calls an appropriate indexed set method if it is available or * throws an AssemblerException if that is not allowed on this Context. * * The behaviour of this method is equal to List.set(int, Object). * * @param index Index position to be set. * @param o Object to be set at the given index position. * @throws AssemblerException Indexed set is not allowed or otherwise failed. */ void set(int index, Object o) throws AssemblyException; /** Calls an appropriate indexed get method if it is available or * throws an AssemblerException if that is not allowed on this Context. * * The behaviour of this method is equal to List.get(int). * * @param index Index position of the object return. * @throws AssemblerException Indexed get is not allowed or otherwise failed. */ Object get(int index) throws AssemblyException; /** Returns the result which was calculated by calling endContext() or reportStatement(). * Its the handler's responsibility to care that any of these two methods was called. * * This is used by sub-Contexts to access this Context's result. * * @return */ Object getResult(); /** Gives this Context a unique id. For convenience the id may be null which means * that no id exists at all. * * @param id */ void setId(String id); /** Returns this Context's unique id or null if does not have such an id. * * @return This Context's id or null. */ String getId(); /** Returns whether this Context is a statement (not returning result back * to parent handler's Context) or not (= expression). * * @return */ boolean isStatement(); /** Sets whether this Context is a statement or not. * * @param b */ void setStatement(boolean b); }