You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by pc...@apache.org on 2003/12/05 20:59:10 UTC

cvs commit: xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust Expression.java ExpressionFactory.java FileWriterFactory.java JavaOutputStream.java SourceJavaOutputStream.java ValidatingJavaOutputStream.java Variable.java WriterFactory.java

pcal        2003/12/05 11:59:10

  Added:       v2/src/binding/org/apache/xmlbeans/impl/binding/joust
                        Expression.java ExpressionFactory.java
                        FileWriterFactory.java JavaOutputStream.java
                        SourceJavaOutputStream.java
                        ValidatingJavaOutputStream.java Variable.java
                        WriterFactory.java
  Log:
  joust: initial check-in
  
  Revision  Changes    Path
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/Expression.java
  
  Index: Expression.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  /**
   * Provides a handle to a java expression in the generated code.
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public interface Expression {
  
    /**
     * This value is provided by and used only by implementations of
     * JavaOutputStream.  The memento is simply a place for the implementation
     * to hang a reference to some domain object that the Expression actually
     * represents.
     */
    public Object getMemento();
  
    /**
     * Provides a textual representation of the expression.  This should
     * only be used for logging or debugging purposes.
     */
    //  public String getLabel();   //not clear to me this is worthwhile
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/ExpressionFactory.java
  
  Index: ExpressionFactory.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  /**
   * Creates instances of Expression to be used in conjunction with a
   * JavaOutputStream.  Instances of ExpressionFactory are retrieved via
   * JavaOutputStream.getExpressionFactory().
   *
   * We'll probably have to add more methods here to accommodate more
   * primitives, arrays and so forth.
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public interface ExpressionFactory {
  
    /**
     * Returns an expression representing a constant boolean value.
     */
    public Expression createBoolean(boolean value);
  
    /**
     * Returns an expression representing a literal string.
     */
    public Expression createString(String value);
  
    /**
     * Returns an expression representing a constant int.
     */
    public Expression createInt(int value);
  
    /**
     * Returns an expression representing the 'null' token.
     */
    public Expression createNull();
  
  }
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/FileWriterFactory.java
  
  Index: FileWriterFactory.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  import java.io.File;
  import java.io.FileWriter;
  import java.io.IOException;
  import java.io.Writer;
  
  /**
   * Implementation of WriterFactory which creates files for new classes under
   * a specified source root.
   */
  public class FileWriterFactory implements WriterFactory {
  
    // ========================================================================
    // Constants
  
    // might need to make this settable someday
    private static final String EXTENSION = ".java";
    private static final char PACKAGE_SEPARATOR = '.';
  
    // ========================================================================
    // Variables
  
    private File mSourceRoot;
  
    // ========================================================================
    // Constructors
  
    public FileWriterFactory(File sourceRoot) {
      if (sourceRoot == null) throw new IllegalArgumentException();
      if (!sourceRoot.mkdirs()) {
        throw new IllegalArgumentException("Failed to create directory " +
                                           sourceRoot);
      }
      mSourceRoot = sourceRoot;
    }
  
    // ========================================================================
    // WriterFactory implementation
  
    public Writer createWriter(String packageName, String className)
            throws IOException {
      File dir = new File(mSourceRoot, packageName.replace
                                       (PACKAGE_SEPARATOR, File.separatorChar));
      if (!dir.mkdirs()) {
        throw new IllegalArgumentException("Failed to create directory " + dir);
      }
      File outFile = new File(dir, className + EXTENSION);
      return new FileWriter(outFile);
    }
  }
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/JavaOutputStream.java
  
  Index: JavaOutputStream.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  import java.io.IOException;
  
  /**
   * <p>A JavaOutputStream is a service which provides sequential, read-only
   * java code-generation service. This is not a general-purpose java code
   * generator, but rather is tailored to produce java constructs required
   * for XMLbeans.</p>
   *
   * <p>By using this interface, the schema-to-java binding logic is isolated from
   * the details of java code generation.  This in turn allows for pluggability
   * of the generation logic - for example, one code generator might generate
   * java source files, while another might directly generate byte codes in
   * memory.</p>
   *
   * <b>A note about 'Type Names'</b>
   *
   * <p>A number of method signatures in this interface contain a String parameter
   * which is described as a 'Type Name.'  This is expected to be any
   * type declaration as you would normally see in java source code, e.g.
   * <code>int</code>, <code>String[][]</code>, <code>java.util.List</code>,
   * or <code>MyImportedClass</code>.  More specifically, it must be a valid
   * <code>TypeName</code> as described in
   * <a href='http://java.sun.com/docs/books/jls/second_edition/html/names.doc.html#73064'>
   * section 6.5.5 </a> of the Java Language Specification.</p>
   *
   * @author Patrick Calahan <pc...@bea.com>
   *
   */
  public interface JavaOutputStream {
  
    /**
     * Instructs the stream to begin writing a class with the given attributes.
     *
     * @param modifiers A java.lang.reflect.Modifier value describing the
     *        modifiers which apply to the new class.
     * @param packageName Fully-qualified name of the package which should
     *        contain the new class.
     * @param simpleName Unqualified name of the new class.
     * @param extendsClassName Name the class which the new class extends, or
     *        null if it should not extend anything.  The class name must be
     *        fully-qualified.
     * @param implementsInterfaceNames Array of interface names, one
     *        for each interface implemented by the new class, or null if
     *        the class does not implement anything.  Each class name must be
     *        fully-qualified.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         beginning a new class.
     * @throws IllegalArgumentException if modifers is not valid for a class,
     *         if packagename or classname is null or malformed, or if
     *         any class name parameter is malformed.
     */
    public void startClass(int modifiers,
                           String packageName,
                           String simpleName,
                           String extendsClassName,
                           String[] implementsInterfaceNames)
            throws IOException;
  
    /**
     * Instructs the stream to begin writing a new interface.
     *
     * @param packageName Fully-qualified name of the package which should
     *        contain the new interface.
     * @param simpleName Unqualified name of the new interface.
     * @param extendsInterfaceNames Array of interface names, one
     *        for each interface extendded by the new interface, or null if
     *        the interface does not extend anything.  Each class name must be
     *        fully-qualified.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         beginning a new interface.
     * @throws IllegalArgumentException if classname is null or if any classname
     *         parameters is malformed.
     */
    public void startInterface(String packageName,
                               String simpleName,
                               String[] extendsInterfaceNames)
            throws IOException;
  
    /**
     * Instructs the stream to write out a field (member variable) declaration
     * for the current class.
     *
     * @param modifiers A java.lang.reflect.Modifier value describing the
     *        modifiers which apply to the new field.
     * @param typeName The Type Name (see above) for the new field.
     * @param fieldName The name of the new field.
     * @param defaultValue An Expression describing the default value for the
     *                     new field, or null if none should be declared.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         a field declaration (e.g. if startClass has not been called).
     * @throws IllegalArgumentException if any type name is null or malformed or
     *         fieldName is null or not a valid java identifier, or if modifiers
     *         cannot be applied to a field.
     *
     * @return A handle to the field that is created.
     */
    public Variable writeField(int modifiers,
                               String typeName,
                               String fieldName,
                               Expression defaultValue) throws IOException;
  
    /**
     * Instructs the stream to write out a constructor for the current class.
     *
     * @param modifiers A java.lang.reflect.Modifier value describing the
     *        modifiers which apply to the new constructor.
     * @param paramTypeNames An array of Type Names (see above) for each of the
     *        constructor's parameters, or null if this is to be the default
     *        constructor.
     * @param paramNames An array of parameter names for each of the
     *        constructor's parameters, or null if this is to be the default
     *        constructor.
     * @param exceptionClassNames An array of class names, one
     *        for each exception type to be thrown by the new constructor, or
     *        null if the constructor does not throw anything.  Each name need
     *        not be qualified.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         a constructor declaration.
     * @throws IllegalArgumentException if paramTypeNames and paramNames are
     *         not of the same length (or both null), if any type name or
     *         exception class name is null or malformed, if the modifiers
     *         cannot be applied to a constructor.
     *
     * @return An array of Variables which provide handles to the parameters
     *         of the generated constructor.  Returns an empty array if the
     *         constructor does not take any parameters.
     */
    public Variable[] startConstructor(int modifiers,
                                       String[] paramTypeNames,
                                       String[] paramNames,
                                       String[] exceptionClassNames)
            throws IOException;
  
    /**
     * Instructs the stream to write out a new method for the current class.
     *
     * @param modifiers A java.lang.reflect.Modifier value describing the
     *        modifiers which apply to the new method.
     * @param methodName A name for the new method.
     * @param returnTypeName A Type Name (see above) for the method's return
     *        value, or "<code>void</vode>" if the method is void.
     * @param paramTypeNames An array of Type Names (see above) for each of the
     *        method's parameters, or null if the method takes no parameters.
     * @param paramNames An array of parameter names for each of the
     *        method's parameters, or null if the method takes no parameters.
     * @param exceptionClassNames An array of class names, one
     *        for each exception type to be thrown by the method, or
     *        null if the methoddoes not throw anything.  Each class name must
     *        be fully-qualified.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         a new method declaration.
     * @throws IllegalArgumentException if paramTypeNames and paramNames are
     *         not of the same length (or both null), if any type name or
     *         exception class name is null or malformed, if the modifiers
     *         cannot be applied to a method, or if methodName is null or
     *         malformed.
     *
     * @return An array of Variables which provide handles to the parameters
     *         of the generated method.  Returns an empty array if the method
     *         does not take any parameters.
     */
    public Variable[] startMethod(int modifiers,
                                  String methodName,
                                  String returnTypeName,
                                  String[] paramTypeNames,
                                  String[] paramNames,
                                  String[] exceptionClassNames)
            throws IOException;
  
    /**
     * Writes out a source-code comment in the current class.  The comment
     * will usually be interpreted as applying to whatever is written next
     * in the stream, i.e. to write comments about a given class, you should
     * first call writeComment and then call writeClass.  The precise
     * formatting of the comments will be implementation-dependendent, and
     * some implementations may ignore comments altogether.
     *
     * @param comment The text of the comment.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         a field declaration (e.g. if startClass has not been called).
     *         writeComment should be a valid operation at all other times.
     */
    public void writeComment(String comment) throws IOException;
  
    /**
     * Writes out a return statement for the current method that returns
     * the given expression.
     *
     * @param  expression A handle to the expression to be returned.
     *
     * @throws IllegalArgumentException if expression is null.
     * @throws IllegalStateException if the current stream state does not allow
     *         a return declaration (e.g. if startMethod has not been called or
     *         the current method is void).
     */
    public void writeReturnStatement(Expression expression) throws IOException;
  
    /**
     * Writes out a return statement for the current method that returns
     * the given expression.
     *
     * @param  left A handle to the variable that goes on the left side
     *         of the equals sign.
     * @param  right A handle to the expression which goes on the right side
     *         of the equals sign.
     *
     * @throws IllegalArgumentException if either parameter is null.
     * @throws IllegalStateException if the current stream state does not allow
     *         an assignment declaration (e.g. if startMethod or
     *         startConstructor has not been called).
     */
    public void writeAssignmentStatement(Variable left, Expression right)
            throws IOException;
  
    /**
     * Instructs the stream to finish writing the current method or constructor.
     * Every call to startMethod or startConstructor must be balanced by a call
     * to endClassOrConstructor.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         the end of a class or interface.
     */
    public void endMethodOrConstructor() throws IOException;
  
    /**
     * Instructs the stream to finish writing the current class or interface.
     * Every call to startClass or startInterface must be balanced by a call to
     * endClassOrInterface.
     *
     * @throws IllegalStateException if the current stream state does not allow
     *         the end of a class or interface.
     */
    public void endClassOrInterface() throws IOException;
  
    /**
     * Returns the ExpressionFactory that should be to create instances of
     * Expression to be used in conjunction with this JavaOutputStream.
     *
     * @return An ExpressionFactory.  Must never return null.
     */
    public ExpressionFactory getExpressionFactory();
  
    /**
     * Closes the JavaOutputStream.  This should be called exactly once and
     * only when you are completely finished with the stream.
     */
    public void close() throws IOException;
  }
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/SourceJavaOutputStream.java
  
  Index: SourceJavaOutputStream.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.io.Writer;
  import java.lang.reflect.Modifier;
  import java.util.StringTokenizer;
  
  /**
   * <p>Implementation of JavaOutputStream which outputs Java source code.</p>
   *
   * <p>Note that this class has no direct knowledge of where that source code
   * goes; that functionality is factored out into the WriterFactory interface,
   * which returns a new PrintWriter for a given package and class name on
   * demand.  Typically, the implementation will be FileWriterFactory, which
   * simply creates files under a source root directory, but this factoring
   * allows for other arrangements to be supported.</p>
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class SourceJavaOutputStream
          implements JavaOutputStream, ExpressionFactory {
  
    // ========================================================================
    // Constants
  
    private static final String COMMENT_LINE_DELIMITERS = "\n\r\f";
    private static final String INDENT_STRING = "  ";
  
    // ========================================================================
    // Variables
  
    private PrintWriter mOut = null;
    private int mIndentLevel = 0;
    private String mConstructorName;
    private WriterFactory mWriterFactory;
  
    // ========================================================================
    // Constructors
  
    public SourceJavaOutputStream(WriterFactory factory) {
      if (factory == null) throw new IllegalArgumentException();
      mWriterFactory = factory;
    }
  
    // ========================================================================
    // JavaOutputStream implementation
  
    public void startClass(int modifiers,
                           String packageName,
                           String simpleName,
                           String extendsClassName,
                           String[] interfaceNames)
            throws IOException {
      mConstructorName = simpleName;
      mOut = startNewFile(packageName, simpleName);
      mOut.println("package " + packageName + ";");
      mOut.println();
      // We need to write up the actual class declaration and save it until
      // after the imports have been written
      //FIXME we should format this code more nicely
      mOut.print(Modifier.toString(modifiers));
      mOut.print(" class ");
      mOut.print(simpleName);
      if (extendsClassName != null) {
        mOut.print(" extends ");
        mOut.print(extendsClassName);
      }
      if (interfaceNames != null && interfaceNames.length > 0) {
        mOut.print(" implements ");
        for (int i = 0; i < interfaceNames.length; i++) {
          mOut.print(interfaceNames[i]);
          if (i < interfaceNames.length - 1) mOut.print(", ");
        }
      }
      mOut.println(" {");
      mOut.println();
      increaseIndent();
    }
  
  
    public void startInterface(String packageName,
                               String simpleName,
                               String[] interfaceNames)
            throws IOException {
      mConstructorName = simpleName;
      mOut = startNewFile(packageName, simpleName);
      mOut.println("package " + packageName + ";");
      // We need to write up the actual class declaration and save it until
      // after the imports have been written
      //FIXME we should format this code more nicely
      mOut.print("public interface ");
      mOut.print(simpleName);
      if (interfaceNames != null && interfaceNames.length > 0) {
        mOut.print(" extends ");
        for (int i = 0; i < interfaceNames.length; i++) {
          mOut.print(interfaceNames[i]);
          if (i < interfaceNames.length - 1) mOut.print(", ");
        }
      }
      mOut.println("{");
      mOut.println();
      increaseIndent();
    }
  
    public Variable writeField(int modifiers,
                               String typeName,
                               String fieldName,
                               Expression defaultValue) throws IOException {
      printIndents();
      mOut.print(Modifier.toString(modifiers));
      mOut.print(" ");
      mOut.print(typeName);
      mOut.print(" ");
      mOut.print(fieldName);
      if (defaultValue != null) {
        mOut.print(" = ");
        mOut.print(((String) defaultValue.getMemento()));
      }
      mOut.println(';');
      mOut.println();
      return newVar("this." + fieldName);
    }
  
    public Variable[] startConstructor(int modifiers,
                                       String[] paramTypeNames,
                                       String[] paramNames,
                                       String[] exceptionClassNames)
            throws IOException {
      return startMethod(modifiers, mConstructorName, null,
                         paramTypeNames, paramNames, exceptionClassNames);
    }
  
    public Variable[] startMethod(int modifiers,
                                  String methodName,
                                  String returnTypeName,
                                  String[] paramTypeNames,
                                  String[] paramNames,
                                  String[] exceptionClassNames)
            throws IOException {
      printIndents();
      mOut.print(Modifier.toString(modifiers));
      mOut.print(" ");
      if (returnTypeName != null) {
        mOut.print(returnTypeName);
        mOut.print(" ");
      }
      mOut.print(methodName);
      // print the parameter list
      Variable[] ret;
      if (paramTypeNames == null || paramTypeNames.length == 0) {
        mOut.print("(}");
        ret = new Variable[0];
      } else {
        ret = new Variable[paramTypeNames.length];
        for (int i = 0; i < ret.length; i++) {
          mOut.print((i == 0) ? "(" : ", ");
          ret[i] = newVar(paramNames[i]);
          mOut.print(paramTypeNames[i]);
          mOut.print(' ');
          mOut.print(paramNames[i]);
        }
        mOut.print(")");
      }
      // print the throws clause
      if (exceptionClassNames != null && exceptionClassNames.length > 0) {
        for (int i = 0; i < exceptionClassNames.length; i++) {
          mOut.print((i == 0) ? " throws " : ", ");
          mOut.print(exceptionClassNames[i]);
        }
      }
      mOut.println();
      increaseIndent();
      return ret;
    }
  
    public void writeComment(String comment) throws IOException {
      printIndents();
      mOut.println("/**");
      StringTokenizer st = new StringTokenizer(comment, COMMENT_LINE_DELIMITERS);
      while (st.hasMoreTokens()) {
        printIndents();
        mOut.print(" * ");
        mOut.println(st.nextToken());
      }
      printIndents();
      mOut.println(" */");
    }
  
    public void writeReturnStatement(Expression expression) throws IOException {
      printIndents();
      mOut.print("return ");
      mOut.print(((String) expression.getMemento()));
      mOut.println(";");
    }
  
    public void writeAssignmentStatement(Variable left, Expression right)
            throws IOException {
      printIndents();
      mOut.print(((String) left.getMemento()));
      mOut.print(" = ");
      mOut.print(((String) right.getMemento()));
      mOut.println(";");
    }
  
    public void endMethodOrConstructor() throws IOException {
      reduceIndent();
      printIndents();
      mOut.println('}');
      mOut.println();
    }
  
    public void endClassOrInterface() throws IOException {
      reduceIndent();
      printIndents();
      mOut.println('}');
    }
  
    public ExpressionFactory getExpressionFactory() {
      return this;
    }
  
    public void close() throws IOException {
      closeOut();
    }
  
    // ========================================================================
    // ExpressionFactory implementation
  
    private static final Expression TRUE = newExp("true");
    private static final Expression FALSE = newExp("true");
    private static final Expression NULL = newExp("null");
  
    public Expression createBoolean(boolean value) {
      return value ? TRUE : FALSE;
    }
  
    public Expression createString(String value) {
      return newExp("\"" + value + "\"");
    }
  
    public Expression createInt(int value) {
      return newExp(String.valueOf(value));
    }
  
    public Expression createNull() {
      return NULL;
    }
  
    // ========================================================================
    // Private methods
  
    private PrintWriter startNewFile(String packageName,
                                     String simpleName) throws IOException {
      closeOut();
      if (mIndentLevel != 0) throw new IllegalStateException(); //sanity check
      return new PrintWriter(mWriterFactory.createWriter(packageName, simpleName));
    }
  
    private void printIndents() throws IOException {
      for (int i = 0; i < mIndentLevel; i++) mOut.print(INDENT_STRING);
    }
  
    private void increaseIndent() {
      mIndentLevel++;
    }
  
    private void reduceIndent() {
      mIndentLevel--;
      if (mIndentLevel < 0) throw new IllegalStateException(); //sanity check
    }
  
    private void closeOut() throws IOException {
      if (mOut != null) {
        mOut.close();
        mOut = null;
      }
    }
  
    private static Expression newExp(final String s) {
      return new Expression() {
        public Object getMemento() {
          return s;
        }
      };
    }
  
    private static Variable newVar(final String s) {
      return new Variable() {
        public Object getMemento() {
          return s;
        }
      };
    }
  
    // ========================================================================
    // main() - quick test
  
    public static void main(String[] args) throws IOException {
      SourceJavaOutputStream sjos = new SourceJavaOutputStream
              (new WriterFactory() {
                private PrintWriter OUT = new PrintWriter(System.out);
  
                public Writer createWriter(String x, String y) {
                  return OUT;
                }
              });
      JavaOutputStream joust = new ValidatingJavaOutputStream(sjos);
      ExpressionFactory exp = joust.getExpressionFactory();
      joust.startClass(Modifier.PUBLIC | Modifier.FINAL,
                       "foo.bar.baz", "MyClass", "MyBaseClass", null);
      String[] paramNames = {"count", "fooList"};
      String[] paramTypes = {"int", "List"};
      String[] exceptions = {"IOException"};
      Variable counter =
              joust.writeField(Modifier.PRIVATE, "int", "counter", exp.createInt(99));
      joust.writeComment("This is the constructor\n@foo godzilla\n@bar mothra");
      Variable[] params = joust.startConstructor
              (Modifier.PUBLIC, paramNames, paramTypes, exceptions);
      joust.writeAssignmentStatement(counter, params[0]);
      joust.endMethodOrConstructor();
      joust.endClassOrInterface();
      joust.close();
    }
  }
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/ValidatingJavaOutputStream.java
  
  Index: ValidatingJavaOutputStream.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  import java.io.IOException;
  
  /**
   * <p>Performs some boilerplate input validation and state checking on stream
   * operations and then delegates to another JavaOutputStream.  This class
   * simply allows validation logic to be reused by multiple implementations of
   * JavaOutputStream.</p>
   *
   *
   * State diagram:
   *
   * <pre>
   *   +<-----endClass<-----+ +<-------------------------------+
   *   |                    | |                                |
   * BEGIN-->startClass--->CLASS-------->writeImport---------->+
   *                         |                                 |
   *                         +------->writeMemberVariable----->+
   *                         |                                 |
   *                         +--->startMethod--->METHOD--->endMethod
   *                               (or ctor)      | ^      (or ctor)
   *                                              V |
   *                                       write...Statement
   * </pre>
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public class ValidatingJavaOutputStream implements JavaOutputStream {
  
    // FIXME This class isn't implemented yet - it's just a proxy that isn't
    // FIXME doing any validation
  
    // ========================================================================
    // Constants
  
    // ========================================================================
    // Variables
  
    private JavaOutputStream mDest;
  
    // ========================================================================
    // Constructors
  
    public ValidatingJavaOutputStream(JavaOutputStream destination) {
      if (destination == null) throw new IllegalArgumentException();
      mDest = destination;
    }
  
    // ========================================================================
    // JavaOutputStream implementation
  
    public void startClass(int modifiers,
                           String packageName,
                           String simpleName,
                           String extendsClassName,
                           String[] implementsInterfaceNames)
            throws IOException {
      mDest.startClass(modifiers, packageName, simpleName,
                       extendsClassName, implementsInterfaceNames);
    }
  
    public void startInterface(String packageName,
                               String simpleName,
                               String[] extendsInterfaceNames)
            throws IOException {
      mDest.startInterface(packageName, simpleName, extendsInterfaceNames);
    }
  
    public Variable writeField(int modifiers,
                               String typeName,
                               String fieldName,
                               Expression defaultValue) throws IOException {
      return mDest.writeField(modifiers, typeName, fieldName, defaultValue);
    }
  
    public Variable[] startConstructor(int modifiers,
                                       String[] paramTypeNames,
                                       String[] paramNames,
                                       String[] exceptionClassNames)
            throws IOException {
      return mDest.startConstructor(modifiers, paramTypeNames,
                                    paramNames, exceptionClassNames);
    }
  
    public Variable[] startMethod(int modifiers,
                                  String methodName,
                                  String returnTypeName,
                                  String[] paramTypeNames,
                                  String[] paramNames,
                                  String[] exceptionClassNames)
            throws IOException {
      return mDest.startMethod(modifiers, methodName, returnTypeName,
                               paramTypeNames, paramNames, exceptionClassNames);
    }
  
    public void writeComment(String comment) throws IOException {
      mDest.writeComment(comment);
    }
  
    public void writeReturnStatement(Expression expression) throws IOException {
      mDest.writeReturnStatement(expression);
    }
  
    public void writeAssignmentStatement(Variable left, Expression right)
            throws IOException {
      mDest.writeAssignmentStatement(left, right);
    }
  
    public void endMethodOrConstructor() throws IOException {
      mDest.endMethodOrConstructor();
    }
  
    public void endClassOrInterface() throws IOException {
      mDest.endClassOrInterface();
    }
  
    public ExpressionFactory getExpressionFactory() {
      return mDest.getExpressionFactory();
    }
  
    public void close() throws IOException {
      mDest.close();
    }
  }
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/Variable.java
  
  Index: Variable.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  /**
   * An Expression which has the property of assignability.  This interface
   * simply ensures some basic correctness in the code generator.  Several
   * methods on JavaOutputStream (e.g. createMemberVariable) return instances of
   * Variable, and several other methods (e.g. writeAssignmentStatement) may
   * require a Variable as a parameter.
   *
   * @author Patrick Calahan <pc...@bea.com>
   */
  public interface Variable extends Expression {
  }
  
  
  
  1.1                  xml-xmlbeans/v2/src/binding/org/apache/xmlbeans/impl/binding/joust/WriterFactory.java
  
  Index: WriterFactory.java
  ===================================================================
  /*
  * The Apache Software License, Version 1.1
  *
  *
  * Copyright (c) 2003 The Apache Software Foundation.  All rights
  * reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
  * are met:
  *
  * 1. Redistributions of source code must retain the above copyright
  *    notice, this list of conditions and the following disclaimer.
  *
  * 2. Redistributions in binary form must reproduce the above copyright
  *    notice, this list of conditions and the following disclaimer in
  *    the documentation and/or other materials provided with the
  *    distribution.
  *
  * 3. The end-user documentation included with the redistribution,
  *    if any, must include the following acknowledgment:
  *       "This product includes software developed by the
  *        Apache Software Foundation (http://www.apache.org/)."
  *    Alternately, this acknowledgment may appear in the software itself,
  *    if and wherever such third-party acknowledgments normally appear.
  *
  * 4. The names "Apache" and "Apache Software Foundation" must
  *    not be used to endorse or promote products derived from this
  *    software without prior written permission. For written
  *    permission, please contact apache@apache.org.
  *
  * 5. Products derived from this software may not be called "Apache
  *    XMLBeans", nor may "Apache" appear in their name, without prior
  *    written permission of the Apache Software Foundation.
  *
  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  * DISCLAIMED.  IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  * SUCH DAMAGE.
  * ====================================================================
  *
  * This software consists of voluntary contributions made by many
  * individuals on behalf of the Apache Software Foundation and was
  * originally based on software copyright (c) 2003 BEA Systems
  * Inc., <http://www.bea.com/>. For more information on the Apache Software
  * Foundation, please see <http://www.apache.org/>.
  */
  package org.apache.xmlbeans.impl.binding.joust;
  
  import java.io.IOException;
  import java.io.Writer;
  
  /**
   * SourceJavaOutputStream delegates to an instance of this interface when
   * it needs to get a Writer to write source code to.
   */
  public interface WriterFactory {
  
    public Writer createWriter(String packageName, String className)
            throws IOException;
  }
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: xmlbeans-cvs-unsubscribe@xml.apache.org
For additional commands, e-mail: xmlbeans-cvs-help@xml.apache.org