[kaffe] CVS kaffe (robilad): Resynced with GNU Classpath: XMLDecoder implemented

Kaffe CVS cvs-commits at kaffe.org
Thu Jan 6 16:49:04 PST 2005


PatchSet 5801 
Date: 2005/01/06 22:38:50
Author: robilad
Branch: HEAD
Tag: (none) 
Log:
Resynced with GNU Classpath: XMLDecoder implemented

Members: 
	ChangeLog:1.3345->1.3346 
	libraries/javalib/all.files:1.66->1.67 
	libraries/javalib/gnu/java/beans/decoder/AbstractContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/AbstractCreatableObjectContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/AbstractElementHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/AbstractObjectContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ArrayContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ArrayHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/AssemblyException.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/BooleanHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ByteHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/CharHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ClassHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ConstructorContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/Context.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/DecoderContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/DefaultExceptionListener.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/DoubleHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/DummyContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/DummyHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ElementHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/FloatHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/GrowableArrayContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/IndexContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/IntHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/JavaHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/LongHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/MethodContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/MethodFinder.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/NullHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ObjectContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ObjectHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/PersistenceParser.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/PropertyContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/ShortHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/SimpleHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/StaticMethodContext.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/StringHandler.java:INITIAL->1.1 
	libraries/javalib/gnu/java/beans/decoder/VoidHandler.java:INITIAL->1.1 
	libraries/javalib/java/beans/XMLDecoder.java:INITIAL->1.1 

Index: kaffe/ChangeLog
diff -u kaffe/ChangeLog:1.3345 kaffe/ChangeLog:1.3346
--- kaffe/ChangeLog:1.3345	Thu Jan  6 22:24:46 2005
+++ kaffe/ChangeLog	Thu Jan  6 22:38:50 2005
@@ -1,6 +1,51 @@
 2005-01-06  Dalibor Topic  <robilad at kaffe.org>
 
 	Resynced with GNU Classpath.
+	
+	2005-01-02  Robert Schuster  <theBohemian at gmx.net>
+
+	* gnu/java/beans/decoder/AbstractContext.java,
+	gnu/java/beans/decoder/AbstractCreatableContext.java,
+	gnu/java/beans/decoder/AbstractElementHandler.java,
+	gnu/java/beans/decoder/AbstractObjectContext.java,
+	gnu/java/beans/decoder/ArrayContext.java,
+	gnu/java/beans/decoder/ArrayHandler.java,
+	gnu/java/beans/decoder/BooleanHandler.java,
+	gnu/java/beans/decoder/ByteHandler.java,
+	gnu/java/beans/decoder/CharHandler.java,
+	gnu/java/beans/decoder/ClassHandler.java,
+	gnu/java/beans/decoder/ConstructorContext.java,
+	gnu/java/beans/decoder/Context.java,
+	gnu/java/beans/decoder/DecoderContext.java,
+	gnu/java/beans/decoder/DefaultExceptionListener.java,
+	gnu/java/beans/decoder/DoubleHandler.java,
+	gnu/java/beans/decoder/DummyContext.java,
+	gnu/java/beans/decoder/DummyHandler.java,
+	gnu/java/beans/decoder/ElementHandler.java,
+	gnu/java/beans/decoder/FloatHandler.java,
+	gnu/java/beans/decoder/GrowableArrayContext.java,
+	gnu/java/beans/decoder/IndexContext.java,
+	gnu/java/beans/decoder/IntHandler.java,
+	gnu/java/beans/decoder/JavaHandler.java,
+	gnu/java/beans/decoder/LongHandler.java,
+	gnu/java/beans/decoder/MethodContext.java,
+	gnu/java/beans/decoder/MethodFinder.java,
+	gnu/java/beans/decoder/NullHandler.java,
+	gnu/java/beans/decoder/ObjectContext.java,
+	gnu/java/beans/decoder/ObjectHandler.java,
+	gnu/java/beans/decoder/PersistenceParser.java,
+	gnu/java/beans/decoder/PropertyContext.java,
+	gnu/java/beans/decoder/ShortHandler.java,
+	gnu/java/beans/decoder/SimpleHandler.java,
+	gnu/java/beans/decoder/StaticMethodContext.java,
+	gnu/java/beans/decoder/StringHandler.java,
+	gnu/java/beans/decoder/VoidHandler.java: New class
+	implementing java.beans.XMLDecoder decoding functionality.
+	* java/beans/XMLDecoder.java: New class.
+
+2005-01-06  Dalibor Topic  <robilad at kaffe.org>
+
+	Resynced with GNU Classpath.
 
 	2005-01-02  Michael Koch  <konqueror at gmx.de>
 
Index: kaffe/libraries/javalib/all.files
diff -u kaffe/libraries/javalib/all.files:1.66 kaffe/libraries/javalib/all.files:1.67
--- kaffe/libraries/javalib/all.files:1.66	Wed Jan  5 18:43:24 2005
+++ kaffe/libraries/javalib/all.files	Thu Jan  6 22:38:53 2005
@@ -597,6 +597,43 @@
 gnu/java/awt/peer/gtk/GtkToolkit.java
 gnu/java/awt/peer/gtk/GtkWindowPeer.java
 gnu/java/beans/BeanInfoEmbryo.java
+gnu/java/beans/decoder/AbstractContext.java
+gnu/java/beans/decoder/AbstractCreatableObjectContext.java
+gnu/java/beans/decoder/AbstractElementHandler.java
+gnu/java/beans/decoder/AbstractObjectContext.java
+gnu/java/beans/decoder/ArrayContext.java
+gnu/java/beans/decoder/ArrayHandler.java
+gnu/java/beans/decoder/AssemblyException.java
+gnu/java/beans/decoder/BooleanHandler.java
+gnu/java/beans/decoder/ByteHandler.java
+gnu/java/beans/decoder/CharHandler.java
+gnu/java/beans/decoder/ClassHandler.java
+gnu/java/beans/decoder/ConstructorContext.java
+gnu/java/beans/decoder/Context.java
+gnu/java/beans/decoder/DecoderContext.java
+gnu/java/beans/decoder/DefaultExceptionListener.java
+gnu/java/beans/decoder/DoubleHandler.java
+gnu/java/beans/decoder/DummyContext.java
+gnu/java/beans/decoder/DummyHandler.java
+gnu/java/beans/decoder/ElementHandler.java
+gnu/java/beans/decoder/FloatHandler.java
+gnu/java/beans/decoder/GrowableArrayContext.java
+gnu/java/beans/decoder/IndexContext.java
+gnu/java/beans/decoder/IntHandler.java
+gnu/java/beans/decoder/JavaHandler.java
+gnu/java/beans/decoder/LongHandler.java
+gnu/java/beans/decoder/MethodContext.java
+gnu/java/beans/decoder/MethodFinder.java
+gnu/java/beans/decoder/NullHandler.java
+gnu/java/beans/decoder/ObjectContext.java
+gnu/java/beans/decoder/ObjectHandler.java
+gnu/java/beans/decoder/PersistenceParser.java
+gnu/java/beans/decoder/PropertyContext.java
+gnu/java/beans/decoder/ShortHandler.java
+gnu/java/beans/decoder/SimpleHandler.java
+gnu/java/beans/decoder/StaticMethodContext.java
+gnu/java/beans/decoder/StringHandler.java
+gnu/java/beans/decoder/VoidHandler.java
 gnu/java/beans/editors/ColorEditor.java
 gnu/java/beans/editors/FontEditor.java
 gnu/java/beans/editors/NativeBooleanEditor.java
@@ -1717,6 +1754,7 @@
 java/beans/VetoableChangeListenerProxy.java
 java/beans/VetoableChangeSupport.java
 java/beans/Visibility.java
+java/beans/XMLDecoder.java
 java/io/BufferedInputStream.java
 java/io/BufferedOutputStream.java
 java/io/BufferedReader.java
===================================================================
Checking out kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractContext.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractContext.java,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractContext.java	Fri Jan  7 00:49:04 2005
@@ -0,0 +1,70 @@
+/* gnu.java.beans.decoder.AbstractContext
+   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;
+
+
+/** AbstractContext implements some basic functionality of the Context
+ * interface and is therefore the base of all Context implementations.
+ *
+ * @author Robert Schuster
+ */
+abstract class AbstractContext implements Context
+{
+  private boolean isStatement;
+  private String id;
+
+  public String getId()
+  {
+    return id;
+  }
+
+  public void setId(String newId)
+  {
+    id = newId;
+  }
+
+  public boolean isStatement()
+  {
+    return isStatement;
+  }
+
+  public void setStatement(boolean b)
+  {
+    isStatement = b;
+  }
+}
===================================================================
Checking out kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractCreatableObjectContext.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractCreatableObjectContext.java,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractCreatableObjectContext.java	Fri Jan  7 00:49:04 2005
@@ -0,0 +1,113 @@
+/* gnu.java.beans.decoder.AbstractCreatableContext
+   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;
+
+
+/** AbstractCreatableObjectContext is the base class for all Context implementations
+ * which create a result object in their lifetime. It provides means for preventing
+ * to create the object twice.
+ *
+ * @author Robert Schuster
+ *
+ */
+abstract class AbstractCreatableObjectContext extends AbstractObjectContext
+{
+  AbstractCreatableObjectContext()
+  {
+  }
+
+  /** Adds a parameter object to this Context if the result object has not been
+   * created yet. Otherwise an AssemblyException is thrown that indicates a wrong
+   * behavior of the decoder.
+   */
+  public final void addParameterObject(Object o) throws AssemblyException
+  {
+    if (object == null)
+      addParameterObjectImpl(o);
+    else
+      throw new AssemblyException(new IllegalStateException("No more parameter objects are allowed when the object as already been created."));
+  }
+
+  /** Adds a parameter object to this Context. Implement this without caring
+   * for illegal states because this has been done already.
+   *
+   * @param obj The parameter object to be added. 
+   */
+  protected abstract void addParameterObjectImpl(Object obj);
+
+  /** Creates the result object if it does not exist already.
+   */
+  public final void notifyStatement(Context outerContext)
+    throws AssemblyException
+  {
+    if (object != null)
+      return;
+
+    object = createObject(outerContext);
+  }
+
+  /** Creates the result object. This method is called only once. Implement this
+   * without checking for double invocations as this is already being prevented.
+   *
+   * @param outerContext The Context that exists around this one. 
+   * @return The result object.
+   * @throws AssemblerException if the object creation fails somehow.
+   */
+  protected abstract Object createObject(Context outerContext)
+    throws AssemblyException;
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+   */
+  public final Object endContext(Context outerContext)
+    throws AssemblyException
+  {
+    notifyStatement(outerContext);
+    return object;
+  }
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#subContextFailed()
+   */
+  public boolean subContextFailed()
+  {
+    /* Returns true when the AbstractCreatableObjectContext has not created the result object yet
+     * (A failed subcontext automatically lets this context fail too.)
+     */
+    return object == null;
+  }
+}
===================================================================
Checking out kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractElementHandler.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractElementHandler.java,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractElementHandler.java	Fri Jan  7 00:49:04 2005
@@ -0,0 +1,316 @@
+/* gnu.java.beans.decoder.AbstractElementHandler
+   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;
+
+import java.beans.ExceptionListener;
+
+import org.xml.sax.Attributes;
+
+/** ElementHandler manages a Context instance and interacts with
+ * its parent and child handlers.
+ *
+ * @author Robert Schuster
+ */
+abstract class AbstractElementHandler implements ElementHandler
+{
+  /** The Context instance of this handler. The instance is available after the startElement()
+   * method was called. Otherwise the handler is marked as failed.
+   */
+  private Context context;
+
+  /** The parent handler. */
+  private ElementHandler parent;
+
+  /** Stores whether this handler is marked as failed. */
+  private boolean hasFailed;
+
+  /** Stores the character data which is contained in the body of the XML tag. */
+  private StringBuffer buffer = new StringBuffer();
+
+  /** Stores whether this ElementHandler can have subelements. The information for this is taken from
+   * javabeans.dtd which can be found here:
+   * <a href="http://java.sun.com/products/jfc/tsc/articles/persistence3/">Java Persistence Article</a>
+   */
+  private boolean allowsSubelements;
+
+  /** Creates a new ElementHandler with the given ElementHandler instance
+   * as parent.
+   *
+   * @param parentHandler The parent handler.
+   */
+  protected AbstractElementHandler(ElementHandler parentHandler,
+                                   boolean allowsSubs)
+  {
+    parent = parentHandler;
+    allowsSubelements = allowsSubs;
+  }
+
+  /** Evaluates the attributes and creates a Context instance.
+   * If the creation of the Context instance fails the ElementHandler
+   * is marked as failed which may affect the parent handler other.
+   *
+   * @param attributes Attributes of the XML tag.
+   */
+  public final void start(Attributes attributes,
+                          ExceptionListener exceptionListener)
+  {
+    try
+      {
+	// lets the subclass create the appropriate Context instance
+	context = startElement(attributes, exceptionListener);
+      }
+    catch (AssemblyException pe)
+      {
+	Throwable t = pe.getCause();
+
+	if (t instanceof Exception)
+	  exceptionListener.exceptionThrown((Exception) t);
+	else
+	  throw new InternalError("Unexpected Throwable type in AssemblerException. Please file a bug report.");
+
+	notifyContextFailed();
+
+	return;
+      }
+  }
+
+  /** Analyses the content of the Attributes instance and creates a Context
+   * object accordingly.
+   * An AssemblerException is thrown when the Context instance could not
+   * be created.
+   *
+   * @param attributes Attributes of the XML tag.
+   * @return A Context instance.
+   * @throws AssemblerException when Context instance could not be created.
+   */
+  protected abstract Context startElement(Attributes attributes, ExceptionListener exceptionListener)
+    throws AssemblyException;
+
+  /** Post-processes the Context.
+   */
+  public final void end(ExceptionListener exceptionListener)
+  {
+    // skips processing if the handler is marked as failed (because the Context
+    // is then invalid or may not exist at all)
+    if (!hasFailed)
+      {
+	try
+	  {
+	    // note: the order of operations is very important here
+	    // sends the stored character data to the Context
+	    endElement(buffer.toString());
+
+	    // reports to the parent handler if this handler's Context is a
+	    // statement (returning no value BACK to the parent's Context)
+	    if (context.isStatement())
+	      {
+		// This may create a valid result in the parent's Context
+		// or let it fail
+		parent.notifyStatement(exceptionListener);
+
+		// skips any further processing if the parent handler is now marked
+		// as failed
+		if (parent.hasFailed())
+		  return;
+	      }
+
+	    // processes the Context and stores the result
+	    putObject(context.getId(), context.endContext(parent.getContext()));
+
+	    // transfers the Context's results to the parent's Context
+	    // if it is an expression (rather than a statement) 
+	    if (! context.isStatement())
+	      parent.getContext().addParameterObject(context.getResult());
+	  }
+	catch (AssemblyException pe)
+	  {
+	    // notifies that an exception was thrown in this handler's Context 
+	    Throwable t = pe.getCause();
+
+	    if (t instanceof Exception)
+	      exceptionListener.exceptionThrown((Exception) t);
+	    else
+	      throw (InternalError) new InternalError("Severe problem while decoding XML data.")
+	            .initCause(t);
+
+	    // marks the handler as failed
+	    notifyContextFailed();
+	  }
+      }
+  }
+
+  /** Notifies the handler's Context that its child Context will not return
+   * a value back. Some Context variants need this information to know when
+   * a method or a constructor call can be made.
+   *
+   * This method is called by a child handler.
+   */
+  public void notifyStatement(ExceptionListener exceptionListener)
+  {
+    try
+      {
+      	
+      	// propagates to parent handler first to generate objects
+      	// needed by this Context instance
+      	if(context.isStatement())
+      	{
+      		parent.notifyStatement(exceptionListener);
+      	}
+      	
+	// Some Context instances do stuff which can fail now. If that
+	// happens this handler is marked as failed.
+	context.notifyStatement(parent.getContext());
+      }
+    catch (AssemblyException ae)
+      {
+	// notifies that an exception was thrown in this handler's Context 
+	Throwable t = ae.getCause();
+
+	if (t instanceof Exception)
+	  exceptionListener.exceptionThrown((Exception) t);
+	else
+	  throw (InternalError) new InternalError("Severe problem while decoding XML data.")
+	        .initCause(t);
+
+	// marks the handler as failed
+	notifyContextFailed();
+      }
+  }
+
+  /** Marks this and any depending parent handlers as failed. Which means that on their end
+   * no result is calculated.
+   *
+   * When a handler has failed no more handlers are accepted within it.
+   */
+  public final void notifyContextFailed()
+  {
+    hasFailed = true;
+
+    // marks the parent handler as failed if its Context
+    // is affected by the failure of this handler's Context
+    if (parent.getContext().subContextFailed())
+      parent.notifyContextFailed();
+  }
+
+  /** Returns whether this handler has failed.
+   *
+   * This is used to skip child elements.
+   *
+   * @return Whether this handler has failed.
+   */
+  public final boolean hasFailed()
+  {
+    return hasFailed;
+  }
+
+  /** Processes the character data when the element ends.
+   *
+   * The default implementation does nothing for convenience.
+   *
+   * @param characters
+   * @throws AssemblerException
+   */
+  protected void endElement(String characters) throws AssemblyException
+  {
+    // XXX: throw an exception when unexpected character data is available?
+  }
+
+  /** Adds characters from the body of the XML tag to the buffer.
+   *
+   * @param ch
+   * @param start
+   * @param length
+   * @throws SAXException
+   */
+  public final void characters(char[] ch, int start, int length)
+  {
+    // simply appends character data
+    buffer.append(ch, start, length);
+  }
+
+  /** Stores an object globally under a unique id. If the id is
+   * null the object is not stored.
+   *
+   * @param objectId
+   * @param o
+   */
+  public void putObject(String objectId, Object o)
+  {
+    if (objectId != null)
+      parent.putObject(objectId, o);
+  }
+
+  /** Returns a previously stored object. If the id is null the
+   * result is null, too.
+   *
+   * @param objectId
+   * @return Returns a previously stored object or null.
+   */
+  public Object getObject(String objectId) throws AssemblyException
+  {
+    return objectId == null ? null : parent.getObject(objectId);
+  }
+
+  /** Returns the Class instance as if called Class.forName() but
+   * uses a ClassLoader given by the user.
+   *
+   * @param className
+   * @return
+   * @throws ClassNotFoundException
+   */
+  public Class instantiateClass(String className)
+    throws ClassNotFoundException
+  {
+    return parent.instantiateClass(className);
+  }
+
+  public final boolean isSubelementAllowed(String subElementName)
+  {
+    return allowsSubelements && ! subElementName.equals("java");
+  }
+
+  public final Context getContext()
+  {
+    return context;
+  }
+
+  public final ElementHandler getParent()
+  {
+    return parent;
+  }
+}
===================================================================
Checking out kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractObjectContext.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractObjectContext.java,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/java/beans/decoder/AbstractObjectContext.java	Fri Jan  7 00:49:04 2005
@@ -0,0 +1,127 @@
+/* gnu.java.beans.decoder.AbstractObjectContext
+   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;
+
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+
+/** AbstractObjectContext is the base for all Context implementations which
+ * create or provide a result object during their lifetime.
+ *
+ * <p>This class provides the implementation for an indexed get and set method.
+ * But this does not mean that the result object supports these operation.</p>
+ *
+ * @author Robert Schuster
+ *
+ */
+abstract class AbstractObjectContext extends AbstractContext
+{
+    protected Object object;
+
+    AbstractObjectContext()
+    {}
+
+    /** Sets the result object of the Context.
+     *
+     * @param obj The result object to be set.
+     */
+    protected final void setObject(Object obj)
+    {
+        object = obj;
+    }
+
+    /* (non-Javadoc)
+     * @see gnu.java.beans.decoder.Context#set(int, java.lang.Object)
+     */
+    public final void set(int index, Object o) throws AssemblyException
+    {
+        try
+        {
+            Method method =
+                object.getClass().getMethod(
+                    "set",
+                    new Class[] { Integer.TYPE, Object.class });
+
+            method.invoke(object, new Object[] { new Integer(index), o });
+        }
+        catch (NoSuchMethodException nsme)
+        {
+            throw new AssemblyException(nsme);
+        }
+        catch (InvocationTargetException ite)
+        {
+            throw new AssemblyException(ite.getCause());
+        }
+        catch (IllegalAccessException iae)
+        {
+            throw new AssemblyException(iae);
+        }
+    }
+
+    /* (non-Javadoc)
+     * @see gnu.java.beans.decoder.Context#get(int)
+     */
+    public final Object get(int index) throws AssemblyException
+    {
+        try
+        {
+            Method method =
+                object.getClass().getMethod(
+                    "get",
+                    new Class[] { Integer.TYPE });
+
+            return method.invoke(object, new Object[] { new Integer(index)});
+        }
+        catch (NoSuchMethodException nsme)
+        {
+            throw new AssemblyException(nsme);
+        }
+        catch (InvocationTargetException ite)
+        {
+            throw new AssemblyException(ite.getCause());
+        }
+        catch (IllegalAccessException iae)
+        {
+            throw new AssemblyException(iae);
+        }
+    }
+
+    public final Object getResult()
+    {
+        return object;
+    }
+}
===================================================================
Checking out kaffe/libraries/javalib/gnu/java/beans/decoder/ArrayContext.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/gnu/java/beans/decoder/ArrayContext.java,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/java/beans/decoder/ArrayContext.java	Fri Jan  7 00:49:04 2005
@@ -0,0 +1,122 @@
+/* gnu.java.beans.decoder.ArrayContext
+   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;
+
+import java.lang.reflect.Array;
+
+/** A Context implementation for a fixed size array. The array
+ * elements have to be set using IndexContext instances.
+ *
+ * @author Robert Schuster
+ */
+class ArrayContext extends AbstractContext
+{
+  private Object array;
+
+  ArrayContext(String id, Class klass, int length)
+  {
+    setId(id);
+    array = Array.newInstance(klass, length);
+  }
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#addObject(java.lang.Object)
+   */
+  public void addParameterObject(Object o) throws AssemblyException
+  {
+    throw new AssemblyException(new IllegalStateException("Adding objects without an index to a fixed array is not possible."));
+  }
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#reportStatement()
+   */
+  public void notifyStatement(Context outerContext)
+  {
+    // method call intentionally ignored because there is not any useful effect 
+  }
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#endContext(gnu.java.beans.decoder.Context)
+   */
+  public Object endContext(Context outerContext) throws AssemblyException
+  {
+    return array;
+  }
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#subContextFailed()
+   */
+  public boolean subContextFailed()
+  {
+    // returns false to indicate that assembling the array does not fail only because
+    // a subelement failed.
+    return false;
+  }
+
+  public void set(int index, Object o) throws AssemblyException
+  {
+    try
+      {
+	Array.set(array, index, o);
+      }
+    catch (ArrayIndexOutOfBoundsException aioobe)
+      {
+	throw new AssemblyException(aioobe);
+      }
+  }
+
+  public Object get(int index) throws AssemblyException
+  {
+    try
+      {
+	return Array.get(array, index);
+      }
+    catch (ArrayIndexOutOfBoundsException aioobe)
+      {
+	throw new AssemblyException(aioobe);
+      }
+  }
+
+  /* (non-Javadoc)
+   * @see gnu.java.beans.decoder.Context#getResult()
+   */
+  public Object getResult()
+  {
+    return array;
+  }
+}
===================================================================
Checking out kaffe/libraries/javalib/gnu/java/beans/decoder/ArrayHandler.java
RCS:  /home/cvs/kaffe/kaffe/libraries/javalib/gnu/java/beans/decoder/ArrayHandler.java,v
VERS: 1.1
***************
--- /dev/null	Sun Aug  4 19:57:58 2002
+++ kaffe/libraries/javalib/gnu/java/beans/decoder/ArrayHandler.java	Fri Jan  7 00:49:04 2005
@@ -0,0 +1,118 @@
+/* gnu.java.beans.decoder.ArrayHandler
+   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;
+
+import java.beans.ExceptionListener;
+import java.util.HashMap;
+

*** Patch too long, truncated ***




More information about the kaffe mailing list