[kaffe] CVS kaffe (robilad): Resynced with GNU Classpath: XMLDecoder implemented
Kaffe CVS
cvs-commits at kaffe.org
Thu Jan 6 14:43:24 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 Thu Jan 6 22:43:23 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 Thu Jan 6 22:43:23 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 Thu Jan 6 22:43:23 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 Thu Jan 6 22:43:23 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 Thu Jan 6 22:43:23 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 Thu Jan 6 22:43:24 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