You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2005/09/16 22:30:17 UTC

svn commit: r289648 [1/6] - in /beehive/trunk/netui: src/compiler-core/ src/compiler-core/org/apache/beehive/netui/compiler/ src/compiler-core/org/apache/beehive/netui/compiler/genmodel/ src/compiler-core/org/apache/beehive/netui/compiler/grammar/ src/...

Author: rich
Date: Fri Sep 16 13:27:57 2005
New Revision: 289648

URL: http://svn.apache.org/viewcvs?rev=289648&view=rev
Log:
Moved the NetUI compiler layer off of XMLBeans. The generated files (struts-config-*.xml, pageflow-validation-*.xml, annotations-*.xml) are now created (and merged, if Struts Merge or Validator Merge is used) through APIs in the JDK.

tests: bvt in netui (WinXP)
BB: bvt, run.tests against a dist (linux)


Added:
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlElementSupport.java   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriter.java   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriterException.java   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.dtd   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.xsd   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-validator_1_1.xsd   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_0.dtd   (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_1.dtd   (with props)
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInterfaceParser.java   (with props)
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/env/FilerImpl.java   (with props)
Removed:
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldFactory.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldOld.java
    beehive/trunk/netui/src/compiler-core/schema/struts-config/
    beehive/trunk/netui/src/compiler-core/schema/struts-validator/
Modified:
    beehive/trunk/netui/src/compiler-core/build.xml
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ForwardModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsApp.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInstanceImpl.java
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/DeclarationImpl.java
    beehive/trunk/netui/src/compiler/build.xml
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnnotationReader.java
    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/OutputHandler.java
    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/PageFlowCompilerTest.java
    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/TestPropertyMgr.java
    beehive/trunk/netui/test/src/compilerTests/testsuite/GA_DeprecationWarning/expectedOutput/struts-config--global.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira390/expectedOutput/struts-config-Jira390.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_NewReturnTo/expectedOutput/struts-config-Nested_NewReturnTo.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionMethodOverload/expectedOutput/struts-config-PF_ActionMethodOverload.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionNegatives/expectedOutput/struts-config-PF_ActionNegatives.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionReadOnly/expectedOutput/struts-config-PF_ActionReadOnly.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionUseFormBean/expectedOutput/struts-config-PF_ActionUseFormBean.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionWithForm/expectedOutput/struts-config-PF_ActionWithForm.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_AnyNumberActionForward/expectedOutput/struts-config-PF_AnyNumberActionForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_CatchExceptionHandler/expectedOutput/struts-config-PF_CatchExceptionHandler.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_DeprecatedExceptionHandler/expectedOutput/struts-config-PF_DeprecatedExceptionHandler.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardNotInActionOrController/expectedOutput/struts-config-PF_ForwardNotInActionOrController.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardRedirect/expectedOutput/struts-config-PF_ForwardRedirect.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardSyntax/expectedOutput/struts-config-PF_ForwardSyntax.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_InvalidAnnotations/expectedOutput/struts-config-PF_InvalidAnnotations.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_JustBeginAction/expectedOutput/struts-config-PF_JustBeginAction.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_LongLivedTrue/expectedOutput/struts-config-PF_LongLivedTrue.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_MissingForwardJPF/expectedOutput/struts-config-MissingForwardJPF.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RedirectWithNavigateTo/expectedOutput/struts-config-PF_RedirectWithNavigateTo.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RolesAllowed/expectedOutput/struts-config-PF_RolesAllowed.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameGlobalActionForwardName/expectedOutput/struts-config-PF_SameGlobalActionForwardName.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameMethodNameSig/expectedOutput/struts-config-PF_SameMethodNameSig.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionValidationErrForward/expectedOutput/struts-config-PF_TwoActionValidationErrForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionsSameForward/expectedOutput/struts-config-PF_TwoActionsSameForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoBeginAction/expectedOutput/struts-config-PF_TwoBeginAction.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ValidateErrorForward/expectedOutput/struts-config-PF_ValidateErrorForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongActionMember/expectedOutput/struts-config-PF_WrongActionMember.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongControlLocation/expectedOutput/struts-config-PF_WrongControlLocation.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config--SF_ImplicitReferences.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config-SF_ImplicitReferences.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config--SF_ImplicitReferencesNested.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config-SF_ImplicitReferencesNested.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config--SF_InvalidRelativePath.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config-SF_InvalidRelativePath.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/retrievePopupOutput/expectedOutput/struts-config-retrievePopupOutput.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleActionReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleActionReadOnlyUseFormBeanWarning.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent-childFlow.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride-childFlow.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInvalidPathWarning/expectedOutput/struts-config-simpleInvalidPathWarning.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleReadOnlyUseFormBeanWarning.expected
    beehive/trunk/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml

Modified: beehive/trunk/netui/src/compiler-core/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/build.xml?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/build.xml (original)
+++ beehive/trunk/netui/src/compiler-core/build.xml Fri Sep 16 13:27:57 2005
@@ -9,7 +9,6 @@
     <property name="module.classes.dir" location="${classes.dir}/${module.name}"/>
 
     <path id="module.classpath">
-        <path refid="xbean.dependency.path"/>
         <fileset refid="controls.fileset"/>
     </path>
 
@@ -21,8 +20,6 @@
  
         <mkdir dir="${module.classes.dir}"/>
 
-        <antcall target="compile.schemas"/>
-
         <javac srcdir="${module.dir}"
                destdir="${module.classes.dir}"
                classpathref="module.classpath"
@@ -37,34 +34,10 @@
         <copy todir="${module.classes.dir}">
             <fileset dir="${module.dir}" includes="**/*.properties"/>
             <fileset dir="${module.dir}" includes="**/*.xml"/>
+            <fileset dir="${module.dir}" includes="**/*.xsd"/>
+            <fileset dir="${module.dir}" includes="**/*.dtd"/>
             <fileset dir="${module.dir}" includes="META-INF/**"/>
         </copy>
-    </target>
-
-    <target name="compile.schemas">
-        <!-- run the XMLBean compiler for the struts-config schema -->
-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
-            <property name="xsd.root.dir" value="${module.dir}/schema/struts-config"/>
-            <property name="class.output.dir" value="${module.classes.dir}"/>
-            <property name="xbean.inputs" value="${module.dir}/schema/struts-config/*.xsd*"/>
-            <property name="xbean.output" value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/struts11/StrutsConfigDocument.class"/>
-        </ant>
-
-        <!-- run the XMLBean compiler for the struts-validator schema -->
-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
-            <property name="xsd.root.dir" value="${module.dir}/schema/struts-validator"/>
-            <property name="class.output.dir" value="${module.classes.dir}"/>
-            <property name="xbean.inputs" value="${module.dir}/schema/struts-validator/*.xsd*"/>
-            <property name="xbean.output" value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/validator11/ValidatorDocument.class"/>
-        </ant>
-
-        <!-- run the XMLBean compiler for the processed-annotations schema -->
-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
-            <property name="xsd.root.dir" value="${module.dir}/schema/processed-annotations"/>
-            <property name="class.output.dir" value="${module.classes.dir}"/>
-            <property name="xbean.inputs" value="${module.dir}/schema/processed-annotations/*.xsd*"/>
-            <property name="xbean.output" value="${module.classes.dir}/org/apache/beehive/netui/compiler/schema/annotations/ProcessedAnnotationsDocument.class"/>
-        </ant>
     </target>
 
     <target name="clean">

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java Fri Sep 16 13:27:57 2005
@@ -24,49 +24,53 @@
 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotationsDocument;
-import org.apache.beehive.netui.compiler.schema.annotations.AnnotatedElement;
-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotation;
-import org.apache.beehive.netui.compiler.schema.annotations.AnnotationAttribute;
 import org.apache.beehive.netui.compiler.model.StrutsApp;
-import org.apache.xmlbeans.XmlOptions;
+import org.apache.beehive.netui.compiler.model.XmlModelWriter;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
+import org.w3c.dom.Element;
 
 import java.util.Map;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Date;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
 
 public class AnnotationToXML
 {
-    private static final String ANNOTATIONS_FILE_PREFIX = "jpf-annotations";
+    private static final String ANNOTATIONS_FILE_PREFIX = "annotations";
 
-    private ProcessedAnnotationsDocument _doc;
+    private XmlModelWriter _xw;
     private TypeDeclaration _typeDecl;
 
-    public AnnotationToXML( TypeDeclaration typeDecl )
+    public AnnotationToXML(TypeDeclaration typeDecl)
+            throws IOException, XmlModelWriterException
     {
-        _doc = ProcessedAnnotationsDocument.Factory.newInstance();
         _typeDecl = typeDecl;
-        ProcessedAnnotationsDocument.ProcessedAnnotations pa = _doc.addNewProcessedAnnotations();
-        pa.setTypeName( typeDecl.getQualifiedName() );
+        String typeName = typeDecl.getQualifiedName();
+        StringBuffer comment = new StringBuffer(" Generated from ");
+        comment.append(typeName);
+        comment.append( " on " ).append( new Date().toString() ).append( ' ' );
+        _xw = new XmlModelWriter(null, "processed-annotations", null, null, comment.toString());
+        _xw.addElementWithText(_xw.getRootElement(), "type-name", typeName);
     }
 
     public void include( MemberDeclaration memberDecl, AnnotationInstance annotation )
     {
-        AnnotatedElement element = _doc.getProcessedAnnotations().addNewAnnotatedElement();
         String name = memberDecl instanceof TypeDeclaration
                       ? ( ( TypeDeclaration ) memberDecl ).getQualifiedName()
                       : memberDecl.getSimpleName();
-        element.setElementName( name );
-        ProcessedAnnotation xmlAnnotation = element.addNewAnnotation();
+        Element annotatedElement = _xw.addElement(_xw.getRootElement(), "annotated-element");
+        _xw.addElementWithText(annotatedElement, "element-name", name);
+        Element xmlAnnotation = _xw.addElement(annotatedElement, "annotation");
         include( xmlAnnotation, annotation );
     }
 
-    private void include( ProcessedAnnotation xmlAnnotation, AnnotationInstance annotation )
+    private void include( Element xmlAnnotation, AnnotationInstance annotation )
     {
-        xmlAnnotation.setAnnotationName( annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName() );
+        String annotationName = annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName();
+        _xw.addElementWithText(xmlAnnotation, "annotation-name", annotationName);
 
         Map elementValues = annotation.getElementValues();
 
@@ -78,8 +82,8 @@
 
             String name = elementDecl.getSimpleName();
             Object value = annotationValue.getValue();
-            AnnotationAttribute xmlAttr = xmlAnnotation.addNewAnnotationAttribute();
-            xmlAttr.setAttributeName( name );
+            Element xmlAttr = _xw.addElement(xmlAnnotation, "annotation-attribute");
+            _xw.addElementWithText(xmlAttr, "attribute-name", name);
 
             if ( value instanceof List )
             {
@@ -91,39 +95,35 @@
 
                     // we only handle lists of annotations at the moment
                     assert listVal instanceof AnnotationInstance : listVal.getClass().getName();
-                    include( xmlAttr.addNewAnnotationValue(), ( AnnotationInstance ) listVal );
+                    include(_xw.addElement(xmlAttr, "annotation-value"), (AnnotationInstance) listVal);
                 }
             }
             else
             {
                 // we only support a few types at the moment
                 assert value instanceof TypeInstance || value instanceof String : value.getClass().getName();
-                xmlAttr.setStringValue1( value.toString() );
+                _xw.addElementWithText(xmlAttr, "string-value", value.toString());
             }
         }
     }
 
     public void writeXml( Diagnostics diagnostics, AnnotationProcessorEnvironment env )
+            throws IOException, XmlModelWriterException
     {
-        String typeName = _typeDecl.getQualifiedName();
-        String outputFilePath = StrutsApp.getOutputFileURI( ANNOTATIONS_FILE_PREFIX, typeName, false );
-        PrintWriter writer = null;
-
-        try
-        {
-            XmlOptions options = new XmlOptions();
-            options.setSavePrettyPrint();
-            File outputFile = new File( outputFilePath );
-            writer = env.getFiler().createTextFile( outputFile );
-            _doc.save( writer, options );
-        }
-        catch ( IOException e )
-        {
-            diagnostics.addError( _typeDecl, "error.could-not-generate", outputFilePath, e.getMessage() );
-        }
-        finally
-        {
-            if ( writer != null ) writer.close();
+        String outputFilePath = getFilePath(_typeDecl);
+        File outputFile = new File(outputFilePath);
+        PrintWriter writer = env.getFiler().createTextFile(outputFile);
+
+        try {
+            _xw.simpleFastWrite(writer);
+        } finally {
+            writer.close();
         }
+    }
+    
+    public static String getFilePath(TypeDeclaration typeDecl)
+    {
+        String typeName = typeDecl.getQualifiedName();
+        return StrutsApp.getOutputFileURI( ANNOTATIONS_FILE_PREFIX, typeName, false );
     }
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java Fri Sep 16 13:27:57 2005
@@ -22,8 +22,6 @@
 import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
 
-import java.io.File;
-
 public class FacesBackingGenerator
         extends BaseGenerator
         implements JpfLanguageConstants
@@ -36,26 +34,32 @@
     public void generate( ClassDeclaration publicClass )
         throws FatalCompileTimeException
     {
-        AnnotationInstance facesBackingAnnotation = CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
-        assert facesBackingAnnotation != null;  // checker should enforce this
-        AnnotationToXML atx = new AnnotationToXML( publicClass );
-        
-        // Add the class-level @Jpf.FacesBacking annotation.
-        atx.include( publicClass, facesBackingAnnotation );
-        
-        // For each method, add the @Jpf.CommandHandler annotation.
-        MethodDeclaration[] methods = CompilerUtils.getClassMethods( publicClass, COMMAND_HANDLER_TAG_NAME );
-        for ( int i = 0; i < methods.length; i++ )
-        {
-            MethodDeclaration method = methods[i];
-            AnnotationInstance commandHandlerAnn = CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
-            atx.include( method, commandHandlerAnn );
+        try {
+            AnnotationInstance facesBackingAnnotation = CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
+            assert facesBackingAnnotation != null;  // checker should enforce this
+            AnnotationToXML atx = new AnnotationToXML( publicClass );
+
+            // Add the class-level @Jpf.FacesBacking annotation.
+            atx.include( publicClass, facesBackingAnnotation );
+
+            // For each method, add the @Jpf.CommandHandler annotation.
+            MethodDeclaration[] methods = CompilerUtils.getClassMethods( publicClass, COMMAND_HANDLER_TAG_NAME );
+            for ( int i = 0; i < methods.length; i++ )
+            {
+                MethodDeclaration method = methods[i];
+                AnnotationInstance commandHandlerAnn = CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
+                atx.include( method, commandHandlerAnn );
+            }
+
+            // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
+            FlowControllerGenerator.includeFieldAnnotations( atx, publicClass, PAGE_FLOW_FIELD_TAG_NAME );
+
+            // Write the file.
+            atx.writeXml( getDiagnostics(), getEnv() );
+        } catch (Exception e) {
+            getDiagnostics().addError( publicClass, "error.could-not-generate",
+                                       AnnotationToXML.getFilePath(publicClass), e.getMessage() );
+            e.printStackTrace();  // TODO: log instead
         }
-        
-        // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
-        FlowControllerGenerator.includeFieldAnnotations( atx, publicClass, PAGE_FLOW_FIELD_TAG_NAME );
-        
-        // Write the file.
-        atx.writeXml( getDiagnostics(), getEnv() );
     }
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java Fri Sep 16 13:27:57 2005
@@ -34,7 +34,6 @@
 import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
 import org.apache.beehive.netui.compiler.processor.SilentDiagnostics;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.FilenameFilter;
@@ -272,7 +271,7 @@
     }
     
     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException;
+        throws IOException, FatalCompileTimeException;
     
     protected void startCheckClass( ClassDeclaration jclass )
             throws FatalCompileTimeException
@@ -291,10 +290,6 @@
             strutsApp = createStrutsApp( jclass );
             strutsConfigFile = strutsApp.getStrutsConfigFile();
         }
-        catch ( XmlException e )
-        {
-            // will be reported at generate time
-        }
         catch ( IOException e )
         {
             // will be reported at generate time
@@ -302,8 +297,6 @@
         
         if ( strutsConfigFile != null )
         {
-            File parentDir = strutsConfigFile.getParentFile();
-    
             getFCSourceFileInfo().addReferencedFile( strutsConfigFile );
             
             if ( strutsConfigFile.exists() && strutsApp != null && ! strutsApp.canWrite() )

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java Fri Sep 16 13:27:57 2005
@@ -24,7 +24,7 @@
 import org.apache.beehive.netui.compiler.typesystem.declaration.FieldDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -47,7 +47,7 @@
     }
     
     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration cl )
-            throws XmlException, IOException, FatalCompileTimeException;
+            throws IOException, FatalCompileTimeException;
     
     public void generate( ClassDeclaration publicClass )
     {
@@ -78,8 +78,7 @@
         catch ( Exception e )
         {
             e.printStackTrace();    // @TODO log
-            assert e instanceof XmlException || e instanceof IOException || e instanceof FileNotFoundException
-                    : e.getClass().getName();
+            assert e instanceof IOException : e.getClass().getName();
             getDiagnostics().addError( publicClass, "error.could-not-generate",
                                        app != null ? app.getStrutsConfigFile() : null, e.getMessage() );
         }
@@ -90,13 +89,18 @@
     }
 
     private void writeFieldAnnotations( ClassDeclaration classDecl, GenStrutsApp app )
-            throws FatalCompileTimeException
     {
-        AnnotationToXML atx = new AnnotationToXML( classDecl );
-        
-        if ( includeFieldAnnotations( atx, classDecl, null ) )
-        {
-            atx.writeXml( getDiagnostics(), getEnv() );
+        try {
+            AnnotationToXML atx = new AnnotationToXML( classDecl );
+            
+            if ( includeFieldAnnotations( atx, classDecl, null ) )
+            {
+                atx.writeXml( getDiagnostics(), getEnv() );
+            }
+        } catch (Exception e) {
+            getDiagnostics().addError(classDecl, "error.could-not-generate", AnnotationToXML.getFilePath(classDecl),
+                                      e.getMessage() );
+            e.printStackTrace();  // TODO: log instead
         }
     }
     
@@ -167,7 +171,7 @@
             e.printStackTrace();    // @TODO get rid of this
             assert e instanceof FileNotFoundException
                    || e instanceof IOException
-                   || e instanceof XmlException
+                   || e instanceof XmlModelWriterException
                     : e.getClass().getName();
             
             getDiagnostics().addError( publicClass, "error.could-not-generate",

Added: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java?rev=289648&view=auto
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java (added)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java Fri Sep 16 13:27:57 2005
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ * 
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Entity resolver that tries to find the resource locally (from classloader, under
+ * org/apache/beehive/netui/compiler/resources) before trying to resolve via the network.
+ */
+public class LocalFileEntityResolver implements EntityResolver
+{
+    private static final String RESORUCE_PATH_PREFIX = "org/apache/beehive/netui/compiler/resources/";
+    private static final LocalFileEntityResolver INSTANCE = new LocalFileEntityResolver();
+    
+    protected LocalFileEntityResolver() {
+    }
+    
+    public static LocalFileEntityResolver getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Resolve the entity.  First try to find it locally, then fallback to the network.
+     */
+    public InputSource resolveEntity(String publicID, String systemID) throws SAXException, IOException {
+        InputSource localFileInput = resolveLocalEntity(systemID);
+        return localFileInput != null ? localFileInput : new InputSource(systemID);
+    }
+
+    /**
+     * Resolve the given entity locally.
+     */
+    public InputSource resolveLocalEntity(String systemID) throws SAXException, IOException {
+        String localFileName = systemID;
+        int fileNameStart = localFileName.lastIndexOf('/') + 1;
+        if (fileNameStart < localFileName.length()) {
+            localFileName = systemID.substring(fileNameStart);
+        }
+        ClassLoader cl = LocalFileEntityResolver.class.getClassLoader();
+        InputStream stream = cl.getResourceAsStream(RESORUCE_PATH_PREFIX + localFileName);
+        if (stream != null) {
+            return new InputSource(stream);
+        }
+        return null;
+    }
+}

Propchange: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java Fri Sep 16 13:27:57 2005
@@ -29,7 +29,6 @@
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
 import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.IOException;
@@ -193,7 +192,7 @@
     }
 
     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenStrutsApp( sourceFile, jclass, getEnv(), getFCSourceFileInfo(), true, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java Fri Sep 16 13:27:57 2005
@@ -20,7 +20,6 @@
 import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.IOException;
@@ -35,7 +34,7 @@
     }
 
     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenStrutsApp( sourceFile, jclass, getEnv(), getFCSourceFileInfo(), false, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java Fri Sep 16 13:27:57 2005
@@ -23,7 +23,6 @@
 import org.apache.beehive.netui.compiler.grammar.InvalidAttributeType;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.IOException;
@@ -72,7 +71,7 @@
     }
 
     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenSharedFlowStrutsApp( sourceFile, jclass, getEnv(), getFCSourceFileInfo(), true, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java Fri Sep 16 13:27:57 2005
@@ -21,7 +21,6 @@
 import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.IOException;
@@ -36,7 +35,7 @@
     }
 
     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-            throws XmlException, IOException, FatalCompileTimeException
+            throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenSharedFlowStrutsApp( sourceFile, jclass, getEnv(), getFCSourceFileInfo(), false, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties Fri Sep 16 13:27:57 2005
@@ -15,6 +15,7 @@
 error.atmost-one-may-exist-6 = Only one of attributes "{0}", "{1}", "{2}", "{3}", "{4}", or "{5}" may be present.
 error.attr-dependency-not-found-1 = Attribute "{0}" may only be present when attribute "{1}" is present.
 error.attr-dependency-not-found-2 = Attribute "{0}" may only be present when attribute "{1}" or "{2}" is present.
+error.attr-dependency-not-found-3 = Attribute "{0}" may only be present when one of attributes "{1}", "{2}", or "{3}" is present.
 error.unresolved-exception-handler = No exception handler method named "{0}" could be found.
 error.invalid-parent-directory = Could not create parent directory "{0}".
 error.struts-config-not-writable = Cannot write to "{0}".
@@ -78,7 +79,7 @@
 error.xml-parse-error = Error while parsing {0} (line {1}, column {2}): {3}
 error.xml-parse-error-nocolumn = Error while parsing {0} (line {1}): {2}
 error.xml-parse-error-nolinecolumn = Error while parsing {0}: {1}
-error.xml-read-error = Could not load {0}: {1}.
+error.xml-read-error = Could not load {0} due to {1}: {2}.
 
 error.invalid-uri = This URI is invalid: {0}
 error.relative-uri = This attribute requires a relative path.

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java Fri Sep 16 13:27:57 2005
@@ -23,7 +23,6 @@
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
 import org.apache.beehive.netui.compiler.Diagnostics;
 import org.apache.beehive.netui.compiler.FatalCompileTimeException;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.IOException;
@@ -35,7 +34,7 @@
 {
     public GenSharedFlowStrutsApp( File sourceFile, ClassDeclaration jclass, AnnotationProcessorEnvironment env,
                                    FlowControllerInfo fcInfo, boolean checkOnly, Diagnostics diagnostics )
-            throws XmlException, IOException, FatalCompileTimeException
+            throws IOException, FatalCompileTimeException
     {
         super( sourceFile, jclass, env, fcInfo, checkOnly, diagnostics );
         recalculateStrutsConfigFile();  // it changes based on _isGlobalApp

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java Fri Sep 16 13:27:57 2005
@@ -28,20 +28,16 @@
 import org.apache.beehive.netui.compiler.model.ForwardModel;
 import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
 import org.apache.beehive.netui.compiler.model.StrutsApp;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.Modifier;
-import org.apache.beehive.netui.compiler.typesystem.declaration.PackageDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ParameterDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
 import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
-import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlException;
-import org.apache.xmlbeans.XmlObject;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -68,7 +64,7 @@
     private FlowControllerInfo _fcInfo;
     
     protected void recalculateStrutsConfigFile()
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         _strutsConfigFile = calculateStrutsConfigFile(); // caching this
     }
@@ -80,7 +76,7 @@
 
     public GenStrutsApp( File sourceFile, ClassDeclaration jclass, AnnotationProcessorEnvironment env,
                          FlowControllerInfo fcInfo, boolean checkOnly, Diagnostics diagnostics )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         super( jclass.getQualifiedName() );
         
@@ -328,9 +324,19 @@
     }
     
     public void writeToFile()
-        throws FileNotFoundException, IOException, XmlException, FatalCompileTimeException
+        throws FileNotFoundException, IOException, XmlModelWriterException, FatalCompileTimeException
     {
-        writeToFile( getMergeFile( getMergeFileName() ) );
+        File strutsMergeFile = getMergeFile( getMergeFileName() );
+        PrintWriter writer = getEnv().getFiler().createTextFile( _strutsConfigFile );
+        
+        try
+        {
+            writeXml( writer, strutsMergeFile );
+        }
+        finally
+        {
+            writer.close();
+        }
     }
     
     public boolean isStale()
@@ -419,23 +425,8 @@
         
         return true;
     }
-        
-    
-    public void writeToFile( File strutsMergeFile )
-        throws FileNotFoundException, IOException, XmlException, FatalCompileTimeException
-    {
-        PrintWriter writer = getEnv().getFiler().createTextFile( _strutsConfigFile );
-        
-        try
-        {
-            writeXml( writer, strutsMergeFile );
-        }
-        finally
-        {
-            writer.close();
-        }
-    }    
-    
+
+
     public File getStrutsConfigFile()
     {
         return _strutsConfigFile;

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java Fri Sep 16 13:27:57 2005
@@ -20,9 +20,9 @@
 import org.apache.beehive.netui.compiler.CompilerUtils;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
 import org.apache.beehive.netui.compiler.MergedControllerAnnotation;
-import org.apache.beehive.netui.compiler.Diagnostics;
 import org.apache.beehive.netui.compiler.FatalCompileTimeException;
 import org.apache.beehive.netui.compiler.model.FormBeanModel;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
 import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
 import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
 import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
@@ -37,13 +37,10 @@
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
 import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;
 
 import java.io.File;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.util.Collection;
 import java.util.Iterator;
@@ -430,7 +427,7 @@
     }
 
     public void writeToFile()
-        throws FileNotFoundException, XmlException, IOException, FatalCompileTimeException
+        throws FileNotFoundException, IOException, FatalCompileTimeException, XmlModelWriterException
     {
         String outputFilePath = getOutputFileURI();
         File outputFile = new File( outputFilePath );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java Fri Sep 16 13:27:57 2005
@@ -21,28 +21,28 @@
 import org.apache.beehive.netui.compiler.AnnotationMemberType;
 import org.apache.beehive.netui.compiler.FlowControllerInfo;
 import org.apache.beehive.netui.compiler.Diagnostics;
-import org.apache.beehive.netui.compiler.model.schema.struts11.StrutsConfigDocument;
-import org.apache.beehive.netui.compiler.model.schema.validator11.FormValidationDocument;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
 
+import java.net.URL;
+
 
 public class ControllerGrammar
         extends BaseFlowControllerGrammar
-{    
+{
     public ControllerGrammar( AnnotationProcessorEnvironment env, Diagnostics diags, RuntimeVersionChecker rvc,
                               FlowControllerInfo fcInfo )
     {
         super( env, diags, null, rvc, fcInfo );
-        
+
         addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType( null, this ) );
         addMemberType( ROLES_ALLOWED_ATTR, new RolesAllowedType( this ) );
         addMemberType( READONLY_ATTR, new AnnotationMemberType( null, this ) );
-        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType( StrutsConfigDocument.type, null, this, fcInfo ) );
+        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType( "struts-config_1_1.xsd", null, this, fcInfo ) );
         addMemberType( VALIDATOR_VERSION_ATTR, new AnnotationMemberType( null, this ) );
-        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType( FormValidationDocument.type, null, this, fcInfo ) );
+        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType( "struts-validator_1_1.xsd", null, this, fcInfo ) );
         addMemberType( TILES_DEFINITIONS_CONFIGS_ATTR, new TilesDefinitionsConfigsType( null, this, fcInfo ) );
         addMemberType( MULTIPART_HANDLER_ATTR, new AnnotationMemberType( null, this ) );
-        
+
         addMemberArrayGrammar( SHARED_FLOW_REFS_ATTR, new SharedFlowRefGrammar( env, diags, rvc ) );
         addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar( env, diags, null, rvc, fcInfo ) );
         addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env, diags, null, rvc, CONTROLLER_TAG_NAME, fcInfo ) );
@@ -50,7 +50,7 @@
         addMemberArrayGrammar( VALIDATABLE_BEANS_ATTR, new ValidatableBeanGrammar( env, diags, rvc ) );
         addMemberArrayGrammar( SIMPLE_ACTIONS_ATTR, new SimpleActionGrammar( env, diags, rvc, fcInfo ) );
     }
-    
+
     public String[][] getMutuallyExclusiveAttrs()
     {
         return null;

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java Fri Sep 16 13:27:57 2005
@@ -19,154 +19,159 @@
 
 import org.apache.beehive.netui.compiler.AnnotationGrammar;
 import org.apache.beehive.netui.compiler.FlowControllerInfo;
-import org.apache.xmlbeans.SchemaType;
-import org.apache.xmlbeans.XmlOptions;
-import org.apache.xmlbeans.XmlObject;
-import org.apache.xmlbeans.XmlError;
-import org.apache.xmlbeans.XmlException;
+import org.apache.beehive.netui.compiler.LocalFileEntityResolver;
 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.SAXException;
+import org.xml.sax.InputSource;
+import org.xml.sax.helpers.DefaultHandler;
 
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
 import java.util.Map;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
 import java.io.File;
+import java.io.IOException;
 
 
 public class ValidXmlFileType
         extends WebappPathType
 {
-    private SchemaType _schema;
+    private String _schemaFileName;
     private static Map _parseResults = Collections.synchronizedMap( new HashMap() );
-    
-    public ValidXmlFileType( SchemaType schema, String requiredRuntimeVersion, AnnotationGrammar parentGrammar,
+
+    public ValidXmlFileType( String schemaFileName, String requiredRuntimeVersion, AnnotationGrammar parentGrammar,
                              FlowControllerInfo fcInfo )
     {
         super( false, requiredRuntimeVersion, parentGrammar, fcInfo );
-        _schema = schema;
+        assert schemaFileName != null;
+        _schemaFileName = schemaFileName;
     }
 
-    
+
     protected boolean checkAnyExtension()
     {
         return true;
     }
 
-    
+
     protected boolean doFatalError()
     {
         return true;
     }
-    
-    
+
+
     protected boolean ignoreDirectories()
     {
         return false;
     }
-    
-    
+
+
     protected boolean allowFileInPageFlowSourceDir()
     {
         return true;
     }
-    
-    
+
+
     protected void runAdditionalChecks( File file, AnnotationValue value )
     {
-        try
+
+        //
+        // We cache the results of parsing the file until the file is actually modified,
+        // so we don't end up continually re-parsing it.
+        //
+        ParseResults prevResults = ( ParseResults ) _parseResults.get( file.getPath() );
+        long lastModTime = file.lastModified();
+
+        if ( prevResults == null || lastModTime > prevResults.getFileModTime() )
         {
-            //
-            // We cache the results of parsing the file until the file is actually modified,
-            // so we don't end up continually re-parsing it.
-            //
-            ParseResults prevResults = ( ParseResults ) _parseResults.get( file.getPath() );
-            
-            if ( prevResults == null || file.lastModified() > prevResults.getFileModTime() )
+            try
             {
-                try
-                {
-                    XmlOptions options = new XmlOptions();
-                    options.setDocumentType( _schema );
-                    XmlObject xml = XmlObject.Factory.parse( file, options );
-                    List errorListener = new ArrayList();
-                    options.setErrorListener( errorListener );
-                    
-                    if ( !xml.validate( options ) )
-                    {
-                        assert !errorListener.isEmpty();
-
-                        XmlError err = ( XmlError ) errorListener.get( 0 );
-                        assert err != null;
-                        
-                        throw new XmlException( err.getMessage(), null, err );
-                    }
-                }
-                catch ( Exception e )
-                {
-                    _parseResults.put( file.getPath(), new ParseResults( file.lastModified(), e ) );
-                    throw e;
+                LocalFileEntityResolver entityResolver = LocalFileEntityResolver.getInstance();
+                InputSource schemaInput =  entityResolver.resolveLocalEntity(_schemaFileName);
+                assert schemaInput != null : "could not get schema resource for " + _schemaFileName;
+                DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+                factory.setNamespaceAware(true);
+                factory.setValidating(true);
+                factory.setAttribute( "http://java.sun.com/xml/jaxp/properties/schemaLanguage",
+                                      "http://www.w3.org/2001/XMLSchema");
+                factory.setAttribute( "http://java.sun.com/xml/jaxp/properties/schemaSource", schemaInput);
+                DocumentBuilder builder = factory.newDocumentBuilder();
+                builder.setEntityResolver(LocalFileEntityResolver.getInstance());
+                Validator handler = new Validator(lastModTime, file, value);
+                builder.setErrorHandler(handler);
+                builder.parse(file);
+                if (handler.hadErrors()) {
+                    return;
                 }
-                
-                _parseResults.put( file.getPath(), new ParseResults( file.lastModified(), null ) );
             }
-            else
+            catch ( SAXParseException e )
             {
-                Exception e = prevResults.getException();
-                
-                if ( e != null )
-                {
-                    throw e;
-                }
+                addErrorDiagnostic( file, e, value );
+                _parseResults.put( file.getPath(), new ParseResults( lastModTime, e ) );
+                return;
             }
+            catch ( Exception e )
+            {
+                _parseResults.put( file.getPath(), new ParseResults( lastModTime, e ) );
+                addError( value, "error.xml-read-error",
+                          new Object[]{ file.getPath(), e.getClass().getName(), e.getMessage() } );
+                return;
+            }
+
+            _parseResults.put( file.getPath(), new ParseResults( lastModTime, null ) );
         }
-        catch ( XmlException e )
-        {
-            addErrorDiagnostic( e.getError(), value );
-        }
-        catch ( Exception e )
+        else
         {
-            addError( value, "error.xml-read-error", new Object[]{ file.getPath(), e.getMessage() } );
+            Exception e = prevResults.getException();
+
+            if (e instanceof SAXParseException) {
+                addErrorDiagnostic(file, (SAXParseException) e, value);
+            } else if (e != null) {
+                addError( value, "error.xml-read-error",
+                          new Object[]{ file.getPath(), e.getClass().getName(), e.getMessage() } );
+            }
         }
     }
-    
-    private void addErrorDiagnostic( XmlError err, AnnotationValue value )
+
+    private void addErrorDiagnostic( File file, SAXParseException err, AnnotationValue value )
     {
-        if ( err.getColumn() != -1 && err.getLine() != -1 )
+        if ( err.getColumnNumber() != -1 && err.getLineNumber() != -1 )
         {
             Object[] args =
                     {
-                        err.getSourceName(),
-                        new Integer( err.getLine() ),
-                        new Integer( err.getColumn() ),
+                        file.getPath(),
+                        new Integer( err.getLineNumber() ),
+                        new Integer( err.getColumnNumber() ),
                         err.getMessage()
                     };
-                
+
             addError( value, "error.xml-parse-error", args );
         }
-        else if ( err.getLine() != -1 )
+        else if ( err.getLineNumber() != -1 )
         {
             Object[] args =
             {
-                err.getSourceName(),
-                new Integer( err.getLine() ),
+                file.getPath(),
+                new Integer( err.getLineNumber() ),
                 err.getMessage()
             };
-                
+
             addError( value, "error.xml-parse-error-nocolumn", args );
-        }        
+        }
         else
         {
             Object[] args =
             {
-                err.getSourceName(),
+                file.getPath(),
                 err.getMessage()
             };
-            
+
             addError( value, "error.xml-parse-error-nolinecolumn", args );
         }
     }
-    
+
     private static class ParseResults
     {
         private long _fileModTime;
@@ -196,6 +201,46 @@
         public void setException( Exception exception )
         {
             _exception = exception;
+        }
+    }
+
+    private class Validator extends DefaultHandler {
+
+        private long _fileModTime;
+        private File _file;
+        private AnnotationValue _value;
+        private boolean _hadErrors = false;
+
+        public Validator(long fileModTime, File file, AnnotationValue value) {
+            _fileModTime = fileModTime;
+            _file = file;
+            _value = value;
+        }
+
+        public void error(SAXParseException ex)
+                throws SAXException {
+            ParseResults results = new ParseResults(_fileModTime, ex);
+            addErrorDiagnostic(_file, ex, _value );
+            _parseResults.put(_file.getPath(), results);
+            _hadErrors = true;
+        }
+
+        public void fatalError(SAXParseException ex)
+                throws SAXException {
+            error(ex);
+        }
+
+        public void warning(SAXParseException exception)
+                throws SAXException {
+            // TODO: add a compiler warning?
+        }
+
+        public boolean hadErrors() {
+            return _hadErrors;
+        }
+
+        public InputSource resolveEntity(String publicId, String systemId) throws IOException, SAXException {
+            return super.resolveEntity(publicId, systemId);
         }
     }
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java Fri Sep 16 13:27:57 2005
@@ -17,8 +17,7 @@
  */
 package org.apache.beehive.netui.compiler.model;
 
-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
-import org.apache.xmlbeans.XmlObject;
+import org.w3c.dom.Element;
 
 import java.util.LinkedHashMap;
 import java.util.Iterator;
@@ -71,28 +70,13 @@
         return ( ForwardModel ) _forwards.get( forwardName );
     }
     
-    public void writeForwards( ForwardDocument.Forward[] existingForwards, XmlObject xmlForwardContainer )
+    public void writeForwards( XmlModelWriter xw, Element forwardsParentElement )
     {
         for ( Iterator i = _forwards.values().iterator(); i.hasNext(); )
         {
             ForwardModel fwd = ( ForwardModel ) i.next();
-            ForwardDocument.Forward fwdToEdit = null;
-                
-            for ( int j = 0; j < existingForwards.length; ++j )
-            {
-                if ( fwd.getName().equals( existingForwards[j].getName() ) )
-                {
-                    fwdToEdit = existingForwards[j];
-                    break;
-                }
-            }
-                
-            if ( fwdToEdit == null )
-            {
-                fwdToEdit = addNewForward( xmlForwardContainer );
-            }
-                
-            fwd.writeToXMLBean( fwdToEdit );
+            Element fwdToEdit = findChildElement(xw, forwardsParentElement, "forward", "name", fwd.getName(), true);
+            fwd.writeXML( xw, fwdToEdit );
         }
     }
     
@@ -112,6 +96,5 @@
     {
         _forwards.remove( forward.getName() );
     }
-    
-    protected abstract ForwardDocument.Forward addNewForward( XmlObject xmlForwardContainer );
+
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java Fri Sep 16 13:27:57 2005
@@ -22,13 +22,8 @@
 import java.util.LinkedHashMap;
 import java.util.Iterator;
 
-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument.Action;
-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
-import org.apache.xmlbeans.XmlObject;
+import org.w3c.dom.Element;
 
 
 /**
@@ -43,11 +38,10 @@
 
     private static final String JPF_ACTION_MAPPING_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowActionMapping";
 
-    
+
     // Struts attributes.
     private ArrayList _exceptionCatches = new ArrayList();
     private String _attribute;
-    private String _className;
     private String _forward;
     private String _include;
     private String _input;
@@ -88,7 +82,7 @@
         this._path = path;
         this._formBeanName = formName;
     }
-    
+
     protected ActionModel( StrutsApp parent )
     {
         this( null, null, parent );
@@ -96,7 +90,7 @@
 
     /**
      * Construct a copy of the given mapping, with the given path.
-     */ 
+     */
     public ActionModel( ActionModel src, String newPath )
     {
         super( src );
@@ -104,7 +98,6 @@
         this._formBeanName = src._formBeanName;
         _exceptionCatches = ( ArrayList ) src._exceptionCatches.clone();
         _attribute = src._attribute;
-        _className = src._className;
         _forward = src._forward;
         _include = src._include;
         _input = src._input;
@@ -126,127 +119,70 @@
         _unqualifiedActionPath = src._unqualifiedActionPath;
         _defaultForwardName = src._defaultForwardName;
     }
-    
+
     public void setFormBeanName( String formBeanName )
     {
         _formBeanName = formBeanName;
     }
-    
-    public void writeToXMLBean( Action xb )
+
+    protected void writeToElement(XmlModelWriter xw, Element element)
     {
-        xb.setPath( _path );
-        
-        if ( xb.getName() == null && _formBeanName != null ) xb.setName( _formBeanName );
-        if ( xb.getClassName() == null && _className != null ) xb.setClassName( _className );
-        if ( xb.getType() == null && _type != null ) xb.setType( _type );
-        if ( xb.getAttribute() == null && _attribute != null ) xb.setAttribute( _attribute );
-        if ( xb.getInput() == null && _input != null ) xb.setInput( _input );
-        if ( xb.getParameter() == null && _parameter != null ) xb.setParameter( _parameter ); 
-        if ( xb.getPrefix() == null && _prefix != null ) xb.setPrefix( _prefix );
-        if ( xb.getSuffix() == null && _suffix != null ) xb.setSuffix( _suffix );
-        
-        if ( xb.getScope() == null )
-        {
-            if ( _scope != null )
-            {
-                if ( _scope.equals( "request" ) )
-                {
-                    xb.setScope( Action.Scope.REQUEST );
-                }
-                else if ( _scope.equals( "session" ) )
-                {
-                    xb.setScope( Action.Scope.SESSION );
-                }
-                else
-                {
-                    assert false : _scope;
-                }
-            }
-            else
-            {
-                xb.setScope( Action.Scope.REQUEST );
-            }
-        }
-        
-        if ( xb.getRoles() == null && _roles != null ) xb.setRoles( _roles );
-        if ( xb.getForward2() == null &&  _forward != null ) xb.setForward2( _forward );
-        if ( xb.getInclude() == null && _include != null ) xb.setInclude( _include );
-        if ( xb.getUnknown() == null && _unknown ) xb.setUnknown( Action.Unknown.TRUE );
-        if ( xb.getValidate() == null ) xb.setValidate( _validate ? Action.Validate.TRUE : Action.Validate.FALSE );
-        
-        if (  _unqualifiedActionPath != null ) addSetProperty( xb, "unqualifiedActionPath", _unqualifiedActionPath );
-        if ( _formMember != null ) addSetProperty( xb, "formMember", _formMember );
-        if ( _formClass != null ) addSetProperty( xb, "formClass", _formClass );
-        if ( _loginRequired ) addSetProperty( xb, "loginRequired", _loginRequired );
-        if ( _preventDoubleSubmit ) addSetProperty( xb, "preventDoubleSubmit", _preventDoubleSubmit );
-        if ( _isOverloaded ) addSetProperty( xb, "overloaded", _isOverloaded );
-        if ( _readonly ) addSetProperty( xb, "readonly", _readonly );
-        if ( _isSimpleAction ) addSetProperty( xb, "simpleAction", _isSimpleAction );
-        if ( _defaultForwardName != null ) addSetProperty( xb, "defaultForward", _defaultForwardName );
-        
+        element.setAttribute("path", _path);
+        setElementAttribute(element, "name", _formBeanName);
+        setElementAttribute(element, "className", getClassName());
+        setElementAttribute(element, "type", _type);
+        setElementAttribute(element, "attribute", _attribute);
+        setElementAttribute(element, "input", _input);
+        setElementAttribute(element, "parameter", _parameter);
+        setElementAttribute(element, "prefix", _prefix);
+        setElementAttribute(element, "suffix", _suffix);
+        setElementAttribute(element, "scope", _scope != null ? _scope : "request");
+        setElementAttribute(element, "roles", _roles);
+        setElementAttribute(element, "forward", _forward);
+        setElementAttribute(element, "include", _include);
+        setElementAttribute(element, "validate", Boolean.toString(_validate));  // always set the value, even if false
+        addSetProperty( xw, element, "unqualifiedActionPath", _unqualifiedActionPath );
+        addSetProperty( xw, element, "formMember", _formMember );
+        addSetProperty( xw, element, "formClass", _formClass );
+        addSetProperty( xw, element, "loginRequired", _loginRequired );
+        addSetProperty( xw, element, "preventDoubleSubmit", _preventDoubleSubmit );
+        addSetProperty( xw, element, "overloaded", _isOverloaded );
+        addSetProperty( xw, element, "readonly", _readonly );
+        addSetProperty( xw, element, "simpleAction", _isSimpleAction );
+        addSetProperty( xw, element, "defaultForward", _defaultForwardName );
+        addSetProperty( xw, element, "formBeanMessageResourcesKey", _formBeanMessageResourcesKey );
+
         if ( _conditionalForwards != null )
         {
-            addSetProperty( xb, "conditionalForwards", getMapString( _conditionalForwards) );
-        }
-        
-        if ( _formBeanMessageResourcesKey != null )
-        {
-            addSetProperty( xb, "formBeanMessageResourcesKey", _formBeanMessageResourcesKey );
+            addSetProperty( xw, element, "conditionalForwards", getMapString( _conditionalForwards) );
         }
-                
+
         if ( _exceptionCatches != null && ! _exceptionCatches.isEmpty() )
         {
-            ExceptionDocument.Exception[] existingExceptions = xb.getExceptionArray();
-            
             for ( int i = 0; i < _exceptionCatches.size(); ++i )
             {
                 ExceptionModel ec = ( ExceptionModel ) _exceptionCatches.get( i );
-                ExceptionDocument.Exception exceptionToEdit = null;
-                
-                for ( int j = 0; j < existingExceptions.length; ++j )
-                {
-                    if ( ec.getType().equals( existingExceptions[j].getType() ) )
-                    {
-                        exceptionToEdit = existingExceptions[j];
-                        break;
-                    }
-                }
-                
-                if ( exceptionToEdit == null )
-                {
-                    exceptionToEdit = xb.addNewException();
-                }
-                
-                ec.writeToXMLBean( exceptionToEdit );
+                Element exceptionToEdit = findChildElement(xw, element, "exception", "type", ec.getType(), true);
+                ec.writeXML( xw, exceptionToEdit );
             }
         }
-                
+
         //
         // forwards
         //
-        writeForwards( xb.getForwardArray(), xb );
-
-        addComment( xb );
-    }
-    
-    private void addSetProperty( ActionDocument.Action xb, String propertyName, boolean propertyValue )
-    {
-        addSetProperty( xb, propertyName, Boolean.toString( propertyValue ) );
+        writeForwards( xw, element );
     }
-    
-    private void addSetProperty( ActionDocument.Action xb, String propertyName, String propertyValue )
+
+    private void addSetProperty( XmlModelWriter xw, Element element, String propertyName, boolean propertyValue )
     {
-        SetProperty prop = xb.addNewSetProperty();
-        prop.setProperty( propertyName );
-        prop.setValue( propertyValue );
-        if ( xb.getClassName() == null ) xb.setClassName( JPF_ACTION_MAPPING_CLASSNAME );
+        if (propertyValue) addSetProperty( xw, element, propertyName, Boolean.toString( propertyValue ) );
     }
-    
-    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
+
+    private void addSetProperty( XmlModelWriter xw, Element element, String propertyName, String propertyValue )
     {
-        return ( ( Action ) xmlObject ).addNewForward();
+        setCustomProperty(xw, element, propertyName, propertyValue, JPF_ACTION_MAPPING_CLASSNAME);
     }
-    
+
     /**
      * Implemented for {@link ExceptionContainer}.
      */
@@ -265,16 +201,6 @@
         this._attribute = attribute;
     }
 
-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public void setClassName( String className )
-    {
-        this._className = className;
-    }
-
     public String getForward()
     {
         return _forward;
@@ -309,7 +235,7 @@
     {
         return _formBeanName;
     }
-    
+
     public String getFormBeanName()
     {
         return _formBeanName;
@@ -344,7 +270,7 @@
     {
         return _path;
     }
-    
+
     public String getPath( boolean useUnqualifiedPath )
     {
         if ( useUnqualifiedPath && _unqualifiedActionPath != null )
@@ -446,7 +372,7 @@
     {
         _loginRequired = loginRequired;
     }
-    
+
     public void setPreventDoubleSubmit( boolean preventDoubleSubmit )
     {
         _preventDoubleSubmit = preventDoubleSubmit;
@@ -501,23 +427,23 @@
     {
         _readonly = readonly;
     }
-    
+
     public void addConditionalForward( String expression, String forwardName )
     {
         if ( _conditionalForwards == null ) _conditionalForwards = new LinkedHashMap();
         _conditionalForwards.put( expression, forwardName );
     }
-    
+
     private static String getMapString( Map map )
     {
         StringBuffer retVal = new StringBuffer();
-        
+
         for ( Iterator i = map.entrySet().iterator(); i.hasNext(); )
         {
             Map.Entry entry = ( Map.Entry ) i.next();
             retVal.append( entry.getValue() ).append( ':' ).append( entry.getKey() ).append( ';' );
         }
-        
+
         return retVal.toString();
     }
 
@@ -525,6 +451,6 @@
     {
         _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
     }
-    
+
 
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java Fri Sep 16 13:27:57 2005
@@ -17,10 +17,8 @@
  */
 package org.apache.beehive.netui.compiler.model;
 
-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
-import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.w3c.dom.Element;
 
 public class ExceptionModel
         extends StrutsElementSupport
@@ -36,18 +34,18 @@
     private boolean _inheritedPath = false;
 
     private static final String JPF_EXCEPTION_CONFIG_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowExceptionConfig";
-    
-    
+
+
     protected ExceptionModel( StrutsApp parentApp )
     {
         super( parentApp );
     }
-    
+
     public ExceptionModel( String type, String path, String handlerMethod, String message,
                            String messageKey, StrutsApp parentApp )
     {
         super( parentApp );
-        
+
         _type = type;
         _path = path;
         _handlerMethod = handlerMethod;
@@ -115,56 +113,55 @@
         _handlerClass = handlerClass;
     }
 
-    public void writeToXMLBean( ExceptionDocument.Exception xb )
-
+    protected void writeToElement(XmlModelWriter xw, Element element)
     {
-        xb.setType( _type );
+        element.setAttribute("type", _type);
 
-        if ( xb.getPath() == null && _path != null )
+        if ( _path != null )
         {
             boolean relativeToModule = ! _path.startsWith( "/" );
-            
+
             if ( relativeToModule )
             {
-                xb.setPath( "/" + _path );  // struts wants "/" -- assumes this is module-relative path
+                // struts wants "/" -- assumes this is module-relative path
+                setElementAttribute(element, "path", '/' + _path);
             }
             else
             {
-                xb.setPath( _path );
-                addSetProperty( xb, "isPathContextRelative", "true" );
+                setElementAttributeMayBeEmpty(element, "path", _path);
+                addSetProperty(xw, element, "isPathContextRelative", "true" );
             }
         }
-        
-        if ( _inheritedPath ) addSetProperty( xb, "inheritedPath", "true" );
-        
-        if ( xb.getKey() == null && _messageKey != null ) xb.setKey( _messageKey );
-        
+
+        if ( _inheritedPath ) addSetProperty(xw, element, "inheritedPath", "true" );
+
+        //
+        // Set the message key.  If there isn't one, use the typename as the message key.
+        setElementAttribute(element, "key", _messageKey);
+        if (_messageKey == null) setElementAttribute(element, "key", _type);
+
         //
         // Struts doesn't support "message" directly -- we'll add this as a custom property.
         //
-        if ( _message != null ) addSetProperty( xb, "defaultMessage", _message );
-        
-        if ( xb.getKey() == null ) xb.setKey( _type );
-        
+        addSetProperty(xw, element, "defaultMessage", _message );
+
         //
         // Note that we're setting the handler *method* as the handler.  This would break Struts.
         //
-        if ( xb.getHandler() == null && _handlerMethod != null && _handlerClass == null )
-        {
-            xb.setHandler( _handlerMethod );
-            addSetProperty( xb, "isHandlerMethod", "true" );
+        if ( _handlerMethod != null && _handlerClass == null ) {
+            setElementAttribute(element, "handler", _handlerMethod);
+            addSetProperty(xw, element, "isHandlerMethod", "true" );
+        }
+        else {
+            setElementAttribute(element, "handler", _handlerClass);
         }
-        
-        if ( _readonly ) addSetProperty( xb, "readonly", "true" );
-        if ( xb.getHandler() == null && _handlerClass != null ) xb.setHandler( _handlerClass );
-    }
-    
-    private void addSetProperty( ExceptionDocument.Exception xb, String propertyName, String propertyValue )
-    {
-        SetProperty prop = xb.addNewSetProperty();
-        prop.setProperty( propertyName );
-        prop.setValue( propertyValue );
-        if ( xb.getClassName() == null ) xb.setClassName( JPF_EXCEPTION_CONFIG_CLASSNAME );
+
+        if ( _readonly ) addSetProperty(xw, element, "readonly", "true" );
+    }
+
+    private void addSetProperty( XmlModelWriter xw, Element element, String propertyName, String propertyValue )
+    {
+        setCustomProperty(xw, element, propertyName, propertyValue, JPF_EXCEPTION_CONFIG_CLASSNAME);
     }
 
     public boolean isReadonly()

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java (original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java Fri Sep 16 13:27:57 2005
@@ -21,9 +21,8 @@
 import java.util.Collection;
 import java.util.List;
 
-import org.apache.beehive.netui.compiler.model.schema.struts11.FormBeanDocument;
-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.w3c.dom.Element;
 
 
 /**
@@ -90,18 +89,17 @@
     }
 
 
-    private static final String JPF_ACTION_FORM_BEAN_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
+    private static final String CUSTOM_ACTION_FORM_BEAN_CLASSNAME = PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
 
     private String _id = "";  // NOI18N
-    private String _className = null;
     private boolean _dynamic = false;
     private String _name = null;  // required to be set
     private String _type = null;  // required to be set
-    
-    /** This is a NetUI-specific property. */ 
+
+    /** This is a NetUI-specific property. */
     private String _actualType = null;
-    
-    /** This is a NetUI-specific property. */ 
+
+    /** This is a NetUI-specific property. */
     private boolean _pageFlowScoped;  // required to be set
 
     private ArrayList _properties = new ArrayList();
@@ -115,25 +113,21 @@
         _pageFlowScoped = pageFlowScoped;
     }
 
-    public void writeToXMLBean( FormBeanDocument.FormBean xb )
+    protected void writeToElement(XmlModelWriter xw, Element element)
     {
-        xb.setName( _name );
+        element.setAttribute("name", _name);
         
-        if ( xb.getType() == null ) xb.setType( _type );
-        if ( xb.getId() == null && _id != null && _id.length() > 0 ) xb.setId( _id );
-        if ( xb.getClassName() == null &&_className != null ) xb.setClassName( _className ); 
-        if ( xb.getDynamic() == null && _dynamic ) xb.setDynamic( FormBeanDocument.FormBean.Dynamic.TRUE );
-
-        if ( _actualType != null && ! _actualType.equals( xb.getType() ) )
-        {
-            SetProperty prop = xb.addNewSetProperty();
-            prop.setProperty( "actualType" );
-            prop.setValue( _actualType );
-            if ( xb.getClassName() == null ) xb.setClassName( JPF_ACTION_FORM_BEAN_CLASSNAME );
-        }
+        setElementAttribute(element, "type", _type);
+        setElementAttribute(element, "id", _id);
+        setElementAttribute(element, "className", getClassName());
+        setElementAttribute(element, "dynamic", _dynamic);
         
+        if ( _actualType != null && ! _actualType.equals(element.getAttribute("type")) )
+        {
+            setCustomProperty(xw, element, "actualType", _actualType, CUSTOM_ACTION_FORM_BEAN_CLASSNAME);
+        }
     }
-    
+
     public String getId()
     {
         return _id;
@@ -144,11 +138,6 @@
         _id = id;
     }
 
-    public String getClassName()
-    {
-        return _className;
-    }
-
     public void setClassName( String className )
     {
         if ( className != null )
@@ -156,7 +145,7 @@
             if ("org.apache.struts.action.DynaActionForm".equals( className ) )  // NOI18N
                 _dynamic = true;
 
-            _className = className;
+            setClassName(className);
         }
     }
 



Re: Fwd: svn commit: r289648 [1/6] - in /beehive/trunk/netui: src/compiler-core/ src/compiler-core/org/apache/beehive/netui/compiler/ src/compiler-core/org/apache/beehive/netui/compiler/genmodel/ src/compiler-core/org/apache/beehive/netui/compiler/gr

Posted by Rich Feit <ri...@gmail.com>.
Whoops, I meant to delete the entire 'schema' directory.  Fixed with
r289661 - thanks for noticing it.
Rich

Eddie O'Neil wrote:

>Rich--
>
>  One question -- there's still one XSD in:
>
>  netui/src/compiler-core/schema/processed-annotations/...
>
>Is this still used?  I just did a full BVT run and didn't encounter
>any build / test failures.
>
>Eddie
>
>
>
>On 9/16/05, Rich Feit <ri...@gmail.com> wrote:
>  
>
>>Great, thanks for verifying it.  We're definitely on our way!
>>Rich
>>
>>Eddie O'Neil wrote:
>>
>>    
>>
>>>Rich--
>>>
>>> Excellent!  Great to have the compiler moved over.
>>>
>>> I've just finished test runs on Linux (FC3) and on WinXP -- both
>>>passed at 100% for the JUnit, compiler, and test recorder tests.
>>>
>>> I'll be working on the distribution part of this next.
>>>
>>>Eddie
>>>
>>>
>>>
>>>---------- Forwarded message ----------
>>>From: rich@apache.org <ri...@apache.org>
>>>Date: Sep 16, 2005 2:30 PM
>>>Subject: svn commit: r289648 [1/6] - in /beehive/trunk/netui:
>>>src/compiler-core/
>>>src/compiler-core/org/apache/beehive/netui/compiler/
>>>src/compiler-core/org/apache/beehive/netui/compiler/genmodel/
>>>src/compiler-core/org/apache/beehive/netui/compiler/grammar/ src/...
>>>To: commits@beehive.apache.org
>>>
>>>
>>>Author: rich
>>>Date: Fri Sep 16 13:27:57 2005
>>>New Revision: 289648
>>>
>>>URL: http://svn.apache.org/viewcvs?rev=289648&view=rev
>>>Log:
>>>Moved the NetUI compiler layer off of XMLBeans. The generated files
>>>(struts-config-*.xml, pageflow-validation-*.xml, annotations-*.xml)
>>>are now created (and merged, if Struts Merge or Validator Merge is
>>>used) through APIs in the JDK.
>>>
>>>tests: bvt in netui (WinXP)
>>>BB: bvt, run.tests against a dist (linux)
>>>
>>>
>>>Added:
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlElementSupport.java
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriter.java
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriterException.java
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.dtd
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.xsd
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-validator_1_1.xsd
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_0.dtd
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_1.dtd
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInterfaceParser.java
>>> (with props)
>>>   beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/env/FilerImpl.java
>>> (with props)
>>>Removed:
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldFactory.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldOld.java
>>>   beehive/trunk/netui/src/compiler-core/schema/struts-config/
>>>   beehive/trunk/netui/src/compiler-core/schema/struts-validator/
>>>Modified:
>>>   beehive/trunk/netui/src/compiler-core/build.xml
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ForwardModel.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsApp.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java
>>>   beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java
>>>   beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInstanceImpl.java
>>>   beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/DeclarationImpl.java
>>>   beehive/trunk/netui/src/compiler/build.xml
>>>   beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnnotationReader.java
>>>   beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/OutputHandler.java
>>>   beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/PageFlowCompilerTest.java
>>>   beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/TestPropertyMgr.java
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/GA_DeprecationWarning/expectedOutput/struts-config--global.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/Jira390/expectedOutput/struts-config-Jira390.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_NewReturnTo/expectedOutput/struts-config-Nested_NewReturnTo.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionMethodOverload/expectedOutput/struts-config-PF_ActionMethodOverload.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionNegatives/expectedOutput/struts-config-PF_ActionNegatives.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionReadOnly/expectedOutput/struts-config-PF_ActionReadOnly.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionUseFormBean/expectedOutput/struts-config-PF_ActionUseFormBean.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionWithForm/expectedOutput/struts-config-PF_ActionWithForm.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_AnyNumberActionForward/expectedOutput/struts-config-PF_AnyNumberActionForward.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_CatchExceptionHandler/expectedOutput/struts-config-PF_CatchExceptionHandler.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_DeprecatedExceptionHandler/expectedOutput/struts-config-PF_DeprecatedExceptionHandler.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardNotInActionOrController/expectedOutput/struts-config-PF_ForwardNotInActionOrController.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardRedirect/expectedOutput/struts-config-PF_ForwardRedirect.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardSyntax/expectedOutput/struts-config-PF_ForwardSyntax.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_InvalidAnnotations/expectedOutput/struts-config-PF_InvalidAnnotations.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_JustBeginAction/expectedOutput/struts-config-PF_JustBeginAction.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_LongLivedTrue/expectedOutput/struts-config-PF_LongLivedTrue.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_MissingForwardJPF/expectedOutput/struts-config-MissingForwardJPF.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RedirectWithNavigateTo/expectedOutput/struts-config-PF_RedirectWithNavigateTo.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RolesAllowed/expectedOutput/struts-config-PF_RolesAllowed.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameGlobalActionForwardName/expectedOutput/struts-config-PF_SameGlobalActionForwardName.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameMethodNameSig/expectedOutput/struts-config-PF_SameMethodNameSig.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionValidationErrForward/expectedOutput/struts-config-PF_TwoActionValidationErrForward.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionsSameForward/expectedOutput/struts-config-PF_TwoActionsSameForward.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoBeginAction/expectedOutput/struts-config-PF_TwoBeginAction.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ValidateErrorForward/expectedOutput/struts-config-PF_ValidateErrorForward.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongActionMember/expectedOutput/struts-config-PF_WrongActionMember.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongControlLocation/expectedOutput/struts-config-PF_WrongControlLocation.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin-parent.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride-parent.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath-parent.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction-parent.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config--SF_ImplicitReferences.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config-SF_ImplicitReferences.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config--SF_ImplicitReferencesNested.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config-SF_ImplicitReferencesNested.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config--SF_InvalidRelativePath.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config-SF_InvalidRelativePath.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/retrievePopupOutput/expectedOutput/struts-config-retrievePopupOutput.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleActionReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleActionReadOnlyUseFormBeanWarning.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent-childFlow.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride-childFlow.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInvalidPathWarning/expectedOutput/struts-config-simpleInvalidPathWarning.expected
>>>   beehive/trunk/netui/test/src/compilerTests/testsuite/simpleReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleReadOnlyUseFormBeanWarning.expected
>>>   beehive/trunk/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/build.xml
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/build.xml?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/build.xml (original)
>>>+++ beehive/trunk/netui/src/compiler-core/build.xml Fri Sep 16 13:27:57 2005
>>>@@ -9,7 +9,6 @@
>>>    <property name="module.classes.dir"
>>>location="${classes.dir}/${module.name}"/>
>>>
>>>    <path id="module.classpath">
>>>-        <path refid="xbean.dependency.path"/>
>>>        <fileset refid="controls.fileset"/>
>>>    </path>
>>>
>>>@@ -21,8 +20,6 @@
>>>
>>>        <mkdir dir="${module.classes.dir}"/>
>>>
>>>-        <antcall target="compile.schemas"/>
>>>-
>>>        <javac srcdir="${module.dir}"
>>>               destdir="${module.classes.dir}"
>>>               classpathref="module.classpath"
>>>@@ -37,34 +34,10 @@
>>>        <copy todir="${module.classes.dir}">
>>>            <fileset dir="${module.dir}" includes="**/*.properties"/>
>>>            <fileset dir="${module.dir}" includes="**/*.xml"/>
>>>+            <fileset dir="${module.dir}" includes="**/*.xsd"/>
>>>+            <fileset dir="${module.dir}" includes="**/*.dtd"/>
>>>            <fileset dir="${module.dir}" includes="META-INF/**"/>
>>>        </copy>
>>>-    </target>
>>>-
>>>-    <target name="compile.schemas">
>>>-        <!-- run the XMLBean compiler for the struts-config schema -->
>>>-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
>>>-            <property name="xsd.root.dir"
>>>value="${module.dir}/schema/struts-config"/>
>>>-            <property name="class.output.dir" value="${module.classes.dir}"/>
>>>-            <property name="xbean.inputs"
>>>value="${module.dir}/schema/struts-config/*.xsd*"/>
>>>-            <property name="xbean.output"
>>>value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/struts11/StrutsConfigDocument.class"/>
>>>-        </ant>
>>>-
>>>-        <!-- run the XMLBean compiler for the struts-validator schema -->
>>>-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
>>>-            <property name="xsd.root.dir"
>>>value="${module.dir}/schema/struts-validator"/>
>>>-            <property name="class.output.dir" value="${module.classes.dir}"/>
>>>-            <property name="xbean.inputs"
>>>value="${module.dir}/schema/struts-validator/*.xsd*"/>
>>>-            <property name="xbean.output"
>>>value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/validator11/ValidatorDocument.class"/>
>>>-        </ant>
>>>-
>>>-        <!-- run the XMLBean compiler for the processed-annotations schema -->
>>>-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
>>>-            <property name="xsd.root.dir"
>>>value="${module.dir}/schema/processed-annotations"/>
>>>-            <property name="class.output.dir" value="${module.classes.dir}"/>
>>>-            <property name="xbean.inputs"
>>>value="${module.dir}/schema/processed-annotations/*.xsd*"/>
>>>-            <property name="xbean.output"
>>>value="${module.classes.dir}/org/apache/beehive/netui/compiler/schema/annotations/ProcessedAnnotationsDocument.class"/>
>>>-        </ant>
>>>    </target>
>>>
>>>    <target name="clean">
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -24,49 +24,53 @@
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
>>>import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotationsDocument;
>>>-import org.apache.beehive.netui.compiler.schema.annotations.AnnotatedElement;
>>>-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotation;
>>>-import org.apache.beehive.netui.compiler.schema.annotations.AnnotationAttribute;
>>>import org.apache.beehive.netui.compiler.model.StrutsApp;
>>>-import org.apache.xmlbeans.XmlOptions;
>>>+import org.apache.beehive.netui.compiler.model.XmlModelWriter;
>>>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
>>>+import org.w3c.dom.Element;
>>>
>>>import java.util.Map;
>>>import java.util.Iterator;
>>>import java.util.List;
>>>+import java.util.Date;
>>>import java.io.File;
>>>import java.io.IOException;
>>>import java.io.PrintWriter;
>>>
>>>public class AnnotationToXML
>>>{
>>>-    private static final String ANNOTATIONS_FILE_PREFIX = "jpf-annotations";
>>>+    private static final String ANNOTATIONS_FILE_PREFIX = "annotations";
>>>
>>>-    private ProcessedAnnotationsDocument _doc;
>>>+    private XmlModelWriter _xw;
>>>    private TypeDeclaration _typeDecl;
>>>
>>>-    public AnnotationToXML( TypeDeclaration typeDecl )
>>>+    public AnnotationToXML(TypeDeclaration typeDecl)
>>>+            throws IOException, XmlModelWriterException
>>>    {
>>>-        _doc = ProcessedAnnotationsDocument.Factory.newInstance();
>>>        _typeDecl = typeDecl;
>>>-        ProcessedAnnotationsDocument.ProcessedAnnotations pa =
>>>_doc.addNewProcessedAnnotations();
>>>-        pa.setTypeName( typeDecl.getQualifiedName() );
>>>+        String typeName = typeDecl.getQualifiedName();
>>>+        StringBuffer comment = new StringBuffer(" Generated from ");
>>>+        comment.append(typeName);
>>>+        comment.append( " on " ).append( new Date().toString() ).append( ' ' );
>>>+        _xw = new XmlModelWriter(null, "processed-annotations", null,
>>>null, comment.toString());
>>>+        _xw.addElementWithText(_xw.getRootElement(), "type-name", typeName);
>>>    }
>>>
>>>    public void include( MemberDeclaration memberDecl,
>>>AnnotationInstance annotation )
>>>    {
>>>-        AnnotatedElement element =
>>>_doc.getProcessedAnnotations().addNewAnnotatedElement();
>>>        String name = memberDecl instanceof TypeDeclaration
>>>                      ? ( ( TypeDeclaration ) memberDecl ).getQualifiedName()
>>>                      : memberDecl.getSimpleName();
>>>-        element.setElementName( name );
>>>-        ProcessedAnnotation xmlAnnotation = element.addNewAnnotation();
>>>+        Element annotatedElement =
>>>_xw.addElement(_xw.getRootElement(), "annotated-element");
>>>+        _xw.addElementWithText(annotatedElement, "element-name", name);
>>>+        Element xmlAnnotation = _xw.addElement(annotatedElement, "annotation");
>>>        include( xmlAnnotation, annotation );
>>>    }
>>>
>>>-    private void include( ProcessedAnnotation xmlAnnotation,
>>>AnnotationInstance annotation )
>>>+    private void include( Element xmlAnnotation, AnnotationInstance
>>>annotation )
>>>    {
>>>-        xmlAnnotation.setAnnotationName(
>>>annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName()
>>>);
>>>+        String annotationName =
>>>annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName();
>>>+        _xw.addElementWithText(xmlAnnotation, "annotation-name",
>>>annotationName);
>>>
>>>        Map elementValues = annotation.getElementValues();
>>>
>>>@@ -78,8 +82,8 @@
>>>
>>>            String name = elementDecl.getSimpleName();
>>>            Object value = annotationValue.getValue();
>>>-            AnnotationAttribute xmlAttr =
>>>xmlAnnotation.addNewAnnotationAttribute();
>>>-            xmlAttr.setAttributeName( name );
>>>+            Element xmlAttr = _xw.addElement(xmlAnnotation,
>>>"annotation-attribute");
>>>+            _xw.addElementWithText(xmlAttr, "attribute-name", name);
>>>
>>>            if ( value instanceof List )
>>>            {
>>>@@ -91,39 +95,35 @@
>>>
>>>                    // we only handle lists of annotations at the moment
>>>                    assert listVal instanceof AnnotationInstance :
>>>listVal.getClass().getName();
>>>-                    include( xmlAttr.addNewAnnotationValue(), (
>>>AnnotationInstance ) listVal );
>>>+                    include(_xw.addElement(xmlAttr,
>>>"annotation-value"), (AnnotationInstance) listVal);
>>>                }
>>>            }
>>>            else
>>>            {
>>>                // we only support a few types at the moment
>>>                assert value instanceof TypeInstance || value
>>>instanceof String : value.getClass().getName();
>>>-                xmlAttr.setStringValue1( value.toString() );
>>>+                _xw.addElementWithText(xmlAttr, "string-value",
>>>value.toString());
>>>            }
>>>        }
>>>    }
>>>
>>>    public void writeXml( Diagnostics diagnostics,
>>>AnnotationProcessorEnvironment env )
>>>+            throws IOException, XmlModelWriterException
>>>    {
>>>-        String typeName = _typeDecl.getQualifiedName();
>>>-        String outputFilePath = StrutsApp.getOutputFileURI(
>>>ANNOTATIONS_FILE_PREFIX, typeName, false );
>>>-        PrintWriter writer = null;
>>>-
>>>-        try
>>>-        {
>>>-            XmlOptions options = new XmlOptions();
>>>-            options.setSavePrettyPrint();
>>>-            File outputFile = new File( outputFilePath );
>>>-            writer = env.getFiler().createTextFile( outputFile );
>>>-            _doc.save( writer, options );
>>>-        }
>>>-        catch ( IOException e )
>>>-        {
>>>-            diagnostics.addError( _typeDecl,
>>>"error.could-not-generate", outputFilePath, e.getMessage() );
>>>-        }
>>>-        finally
>>>-        {
>>>-            if ( writer != null ) writer.close();
>>>+        String outputFilePath = getFilePath(_typeDecl);
>>>+        File outputFile = new File(outputFilePath);
>>>+        PrintWriter writer = env.getFiler().createTextFile(outputFile);
>>>+
>>>+        try {
>>>+            _xw.simpleFastWrite(writer);
>>>+        } finally {
>>>+            writer.close();
>>>        }
>>>+    }
>>>+
>>>+    public static String getFilePath(TypeDeclaration typeDecl)
>>>+    {
>>>+        String typeName = typeDecl.getQualifiedName();
>>>+        return StrutsApp.getOutputFileURI( ANNOTATIONS_FILE_PREFIX,
>>>typeName, false );
>>>    }
>>>}
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -22,8 +22,6 @@
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>
>>>-import java.io.File;
>>>-
>>>public class FacesBackingGenerator
>>>        extends BaseGenerator
>>>        implements JpfLanguageConstants
>>>@@ -36,26 +34,32 @@
>>>    public void generate( ClassDeclaration publicClass )
>>>        throws FatalCompileTimeException
>>>    {
>>>-        AnnotationInstance facesBackingAnnotation =
>>>CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
>>>-        assert facesBackingAnnotation != null;  // checker should enforce this
>>>-        AnnotationToXML atx = new AnnotationToXML( publicClass );
>>>-
>>>-        // Add the class-level @Jpf.FacesBacking annotation.
>>>-        atx.include( publicClass, facesBackingAnnotation );
>>>-
>>>-        // For each method, add the @Jpf.CommandHandler annotation.
>>>-        MethodDeclaration[] methods = CompilerUtils.getClassMethods(
>>>publicClass, COMMAND_HANDLER_TAG_NAME );
>>>-        for ( int i = 0; i < methods.length; i++ )
>>>-        {
>>>-            MethodDeclaration method = methods[i];
>>>-            AnnotationInstance commandHandlerAnn =
>>>CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
>>>-            atx.include( method, commandHandlerAnn );
>>>+        try {
>>>+            AnnotationInstance facesBackingAnnotation =
>>>CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
>>>+            assert facesBackingAnnotation != null;  // checker should
>>>enforce this
>>>+            AnnotationToXML atx = new AnnotationToXML( publicClass );
>>>+
>>>+            // Add the class-level @Jpf.FacesBacking annotation.
>>>+            atx.include( publicClass, facesBackingAnnotation );
>>>+
>>>+            // For each method, add the @Jpf.CommandHandler annotation.
>>>+            MethodDeclaration[] methods =
>>>CompilerUtils.getClassMethods( publicClass, COMMAND_HANDLER_TAG_NAME
>>>);
>>>+            for ( int i = 0; i < methods.length; i++ )
>>>+            {
>>>+                MethodDeclaration method = methods[i];
>>>+                AnnotationInstance commandHandlerAnn =
>>>CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
>>>+                atx.include( method, commandHandlerAnn );
>>>+            }
>>>+
>>>+            // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
>>>+            FlowControllerGenerator.includeFieldAnnotations( atx,
>>>publicClass, PAGE_FLOW_FIELD_TAG_NAME );
>>>+
>>>+            // Write the file.
>>>+            atx.writeXml( getDiagnostics(), getEnv() );
>>>+        } catch (Exception e) {
>>>+            getDiagnostics().addError( publicClass, "error.could-not-generate",
>>>+
>>>AnnotationToXML.getFilePath(publicClass), e.getMessage() );
>>>+            e.printStackTrace();  // TODO: log instead
>>>        }
>>>-
>>>-        // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
>>>-        FlowControllerGenerator.includeFieldAnnotations( atx,
>>>publicClass, PAGE_FLOW_FIELD_TAG_NAME );
>>>-
>>>-        // Write the file.
>>>-        atx.writeXml( getDiagnostics(), getEnv() );
>>>    }
>>>}
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -34,7 +34,6 @@
>>>import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
>>>import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>>>import org.apache.beehive.netui.compiler.processor.SilentDiagnostics;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.FilenameFilter;
>>>@@ -272,7 +271,7 @@
>>>    }
>>>
>>>    protected abstract GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>>>-        throws XmlException, IOException, FatalCompileTimeException;
>>>+        throws IOException, FatalCompileTimeException;
>>>
>>>    protected void startCheckClass( ClassDeclaration jclass )
>>>            throws FatalCompileTimeException
>>>@@ -291,10 +290,6 @@
>>>            strutsApp = createStrutsApp( jclass );
>>>            strutsConfigFile = strutsApp.getStrutsConfigFile();
>>>        }
>>>-        catch ( XmlException e )
>>>-        {
>>>-            // will be reported at generate time
>>>-        }
>>>        catch ( IOException e )
>>>        {
>>>            // will be reported at generate time
>>>@@ -302,8 +297,6 @@
>>>
>>>        if ( strutsConfigFile != null )
>>>        {
>>>-            File parentDir = strutsConfigFile.getParentFile();
>>>-
>>>            getFCSourceFileInfo().addReferencedFile( strutsConfigFile );
>>>
>>>            if ( strutsConfigFile.exists() && strutsApp != null && !
>>>strutsApp.canWrite() )
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -24,7 +24,7 @@
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.FieldDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>-import org.apache.xmlbeans.XmlException;
>>>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
>>>
>>>import java.io.File;
>>>import java.io.FileNotFoundException;
>>>@@ -47,7 +47,7 @@
>>>    }
>>>
>>>    protected abstract GenStrutsApp createStrutsApp( ClassDeclaration cl )
>>>-            throws XmlException, IOException, FatalCompileTimeException;
>>>+            throws IOException, FatalCompileTimeException;
>>>
>>>    public void generate( ClassDeclaration publicClass )
>>>    {
>>>@@ -78,8 +78,7 @@
>>>        catch ( Exception e )
>>>        {
>>>            e.printStackTrace();    // @TODO log
>>>-            assert e instanceof XmlException || e instanceof
>>>IOException || e instanceof FileNotFoundException
>>>-                    : e.getClass().getName();
>>>+            assert e instanceof IOException : e.getClass().getName();
>>>            getDiagnostics().addError( publicClass, "error.could-not-generate",
>>>                                       app != null ?
>>>app.getStrutsConfigFile() : null, e.getMessage() );
>>>        }
>>>@@ -90,13 +89,18 @@
>>>    }
>>>
>>>    private void writeFieldAnnotations( ClassDeclaration classDecl,
>>>GenStrutsApp app )
>>>-            throws FatalCompileTimeException
>>>    {
>>>-        AnnotationToXML atx = new AnnotationToXML( classDecl );
>>>-
>>>-        if ( includeFieldAnnotations( atx, classDecl, null ) )
>>>-        {
>>>-            atx.writeXml( getDiagnostics(), getEnv() );
>>>+        try {
>>>+            AnnotationToXML atx = new AnnotationToXML( classDecl );
>>>+
>>>+            if ( includeFieldAnnotations( atx, classDecl, null ) )
>>>+            {
>>>+                atx.writeXml( getDiagnostics(), getEnv() );
>>>+            }
>>>+        } catch (Exception e) {
>>>+            getDiagnostics().addError(classDecl,
>>>"error.could-not-generate", AnnotationToXML.getFilePath(classDecl),
>>>+                                      e.getMessage() );
>>>+            e.printStackTrace();  // TODO: log instead
>>>        }
>>>    }
>>>
>>>@@ -167,7 +171,7 @@
>>>            e.printStackTrace();    // @TODO get rid of this
>>>            assert e instanceof FileNotFoundException
>>>                   || e instanceof IOException
>>>-                   || e instanceof XmlException
>>>+                   || e instanceof XmlModelWriterException
>>>                    : e.getClass().getName();
>>>
>>>            getDiagnostics().addError( publicClass, "error.could-not-generate",
>>>
>>>Added: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java?rev=289648&view=auto
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>>>(added)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -0,0 +1,67 @@
>>>+/*
>>>+ * Copyright 2004 The Apache Software Foundation.
>>>+ *
>>>+ * Licensed under the Apache License, Version 2.0 (the "License");
>>>+ * you may not use this file except in compliance with the License.
>>>+ * You may obtain a copy of the License at
>>>+ *
>>>+ *     http://www.apache.org/licenses/LICENSE-2.0
>>>+ *
>>>+ * Unless required by applicable law or agreed to in writing, software
>>>+ * distributed under the License is distributed on an "AS IS" BASIS,
>>>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>>>+ * See the License for the specific language governing permissions and
>>>+ * limitations under the License.
>>>+ *
>>>+ * $Header:$
>>>+ */
>>>+package org.apache.beehive.netui.compiler;
>>>+
>>>+import org.xml.sax.EntityResolver;
>>>+import org.xml.sax.InputSource;
>>>+import org.xml.sax.SAXException;
>>>+
>>>+import java.io.IOException;
>>>+import java.io.InputStream;
>>>+
>>>+/**
>>>+ * Entity resolver that tries to find the resource locally (from
>>>classloader, under
>>>+ * org/apache/beehive/netui/compiler/resources) before trying to
>>>resolve via the network.
>>>+ */
>>>+public class LocalFileEntityResolver implements EntityResolver
>>>+{
>>>+    private static final String RESORUCE_PATH_PREFIX =
>>>"org/apache/beehive/netui/compiler/resources/";
>>>+    private static final LocalFileEntityResolver INSTANCE = new
>>>LocalFileEntityResolver();
>>>+
>>>+    protected LocalFileEntityResolver() {
>>>+    }
>>>+
>>>+    public static LocalFileEntityResolver getInstance() {
>>>+        return INSTANCE;
>>>+    }
>>>+
>>>+    /**
>>>+     * Resolve the entity.  First try to find it locally, then
>>>fallback to the network.
>>>+     */
>>>+    public InputSource resolveEntity(String publicID, String
>>>systemID) throws SAXException, IOException {
>>>+        InputSource localFileInput = resolveLocalEntity(systemID);
>>>+        return localFileInput != null ? localFileInput : new
>>>InputSource(systemID);
>>>+    }
>>>+
>>>+    /**
>>>+     * Resolve the given entity locally.
>>>+     */
>>>+    public InputSource resolveLocalEntity(String systemID) throws
>>>SAXException, IOException {
>>>+        String localFileName = systemID;
>>>+        int fileNameStart = localFileName.lastIndexOf('/') + 1;
>>>+        if (fileNameStart < localFileName.length()) {
>>>+            localFileName = systemID.substring(fileNameStart);
>>>+        }
>>>+        ClassLoader cl = LocalFileEntityResolver.class.getClassLoader();
>>>+        InputStream stream =
>>>cl.getResourceAsStream(RESORUCE_PATH_PREFIX + localFileName);
>>>+        if (stream != null) {
>>>+            return new InputSource(stream);
>>>+        }
>>>+        return null;
>>>+    }
>>>+}
>>>
>>>Propchange: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>>>------------------------------------------------------------------------------
>>>   svn:eol-style = native
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -29,7 +29,6 @@
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
>>>import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.IOException;
>>>@@ -193,7 +192,7 @@
>>>    }
>>>
>>>    protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>>>-        throws XmlException, IOException, FatalCompileTimeException
>>>+        throws IOException, FatalCompileTimeException
>>>    {
>>>        File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>>>        return new GenStrutsApp( sourceFile, jclass, getEnv(),
>>>getFCSourceFileInfo(), true, getDiagnostics() );
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -20,7 +20,6 @@
>>>import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.IOException;
>>>@@ -35,7 +34,7 @@
>>>    }
>>>
>>>    protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>>>-        throws XmlException, IOException, FatalCompileTimeException
>>>+        throws IOException, FatalCompileTimeException
>>>    {
>>>        File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>>>        return new GenStrutsApp( sourceFile, jclass, getEnv(),
>>>getFCSourceFileInfo(), false, getDiagnostics() );
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -23,7 +23,6 @@
>>>import org.apache.beehive.netui.compiler.grammar.InvalidAttributeType;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.IOException;
>>>@@ -72,7 +71,7 @@
>>>    }
>>>
>>>    protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>>>-        throws XmlException, IOException, FatalCompileTimeException
>>>+        throws IOException, FatalCompileTimeException
>>>    {
>>>        File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>>>        return new GenSharedFlowStrutsApp( sourceFile, jclass,
>>>getEnv(), getFCSourceFileInfo(), true, getDiagnostics() );
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -21,7 +21,6 @@
>>>import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.IOException;
>>>@@ -36,7 +35,7 @@
>>>    }
>>>
>>>    protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>>>-            throws XmlException, IOException, FatalCompileTimeException
>>>+            throws IOException, FatalCompileTimeException
>>>    {
>>>        File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>>>        return new GenSharedFlowStrutsApp( sourceFile, jclass,
>>>getEnv(), getFCSourceFileInfo(), false, getDiagnostics() );
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>>>Fri Sep 16 13:27:57 2005
>>>@@ -15,6 +15,7 @@
>>>error.atmost-one-may-exist-6 = Only one of attributes "{0}", "{1}",
>>>"{2}", "{3}", "{4}", or "{5}" may be present.
>>>error.attr-dependency-not-found-1 = Attribute "{0}" may only be
>>>present when attribute "{1}" is present.
>>>error.attr-dependency-not-found-2 = Attribute "{0}" may only be
>>>present when attribute "{1}" or "{2}" is present.
>>>+error.attr-dependency-not-found-3 = Attribute "{0}" may only be
>>>present when one of attributes "{1}", "{2}", or "{3}" is present.
>>>error.unresolved-exception-handler = No exception handler method
>>>named "{0}" could be found.
>>>error.invalid-parent-directory = Could not create parent directory "{0}".
>>>error.struts-config-not-writable = Cannot write to "{0}".
>>>@@ -78,7 +79,7 @@
>>>error.xml-parse-error = Error while parsing {0} (line {1}, column {2}): {3}
>>>error.xml-parse-error-nocolumn = Error while parsing {0} (line {1}): {2}
>>>error.xml-parse-error-nolinecolumn = Error while parsing {0}: {1}
>>>-error.xml-read-error = Could not load {0}: {1}.
>>>+error.xml-read-error = Could not load {0} due to {1}: {2}.
>>>
>>>error.invalid-uri = This URI is invalid: {0}
>>>error.relative-uri = This attribute requires a relative path.
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -23,7 +23,6 @@
>>>import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>>>import org.apache.beehive.netui.compiler.Diagnostics;
>>>import org.apache.beehive.netui.compiler.FatalCompileTimeException;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.IOException;
>>>@@ -35,7 +34,7 @@
>>>{
>>>    public GenSharedFlowStrutsApp( File sourceFile, ClassDeclaration
>>>jclass, AnnotationProcessorEnvironment env,
>>>                                   FlowControllerInfo fcInfo, boolean
>>>checkOnly, Diagnostics diagnostics )
>>>-            throws XmlException, IOException, FatalCompileTimeException
>>>+            throws IOException, FatalCompileTimeException
>>>    {
>>>        super( sourceFile, jclass, env, fcInfo, checkOnly, diagnostics );
>>>        recalculateStrutsConfigFile();  // it changes based on _isGlobalApp
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -28,20 +28,16 @@
>>>import org.apache.beehive.netui.compiler.model.ForwardModel;
>>>import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
>>>import org.apache.beehive.netui.compiler.model.StrutsApp;
>>>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.Modifier;
>>>-import org.apache.beehive.netui.compiler.typesystem.declaration.PackageDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.ParameterDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
>>>import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>>>-import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
>>>-import org.apache.xmlbeans.XmlCursor;
>>>-import org.apache.xmlbeans.XmlException;
>>>-import org.apache.xmlbeans.XmlObject;
>>>
>>>import java.io.File;
>>>import java.io.FileNotFoundException;
>>>@@ -68,7 +64,7 @@
>>>    private FlowControllerInfo _fcInfo;
>>>
>>>    protected void recalculateStrutsConfigFile()
>>>-        throws XmlException, IOException, FatalCompileTimeException
>>>+        throws IOException, FatalCompileTimeException
>>>    {
>>>        _strutsConfigFile = calculateStrutsConfigFile(); // caching this
>>>    }
>>>@@ -80,7 +76,7 @@
>>>
>>>    public GenStrutsApp( File sourceFile, ClassDeclaration jclass,
>>>AnnotationProcessorEnvironment env,
>>>                         FlowControllerInfo fcInfo, boolean
>>>checkOnly, Diagnostics diagnostics )
>>>-        throws XmlException, IOException, FatalCompileTimeException
>>>+        throws IOException, FatalCompileTimeException
>>>    {
>>>        super( jclass.getQualifiedName() );
>>>
>>>@@ -328,9 +324,19 @@
>>>    }
>>>
>>>    public void writeToFile()
>>>-        throws FileNotFoundException, IOException, XmlException,
>>>FatalCompileTimeException
>>>+        throws FileNotFoundException, IOException,
>>>XmlModelWriterException, FatalCompileTimeException
>>>    {
>>>-        writeToFile( getMergeFile( getMergeFileName() ) );
>>>+        File strutsMergeFile = getMergeFile( getMergeFileName() );
>>>+        PrintWriter writer = getEnv().getFiler().createTextFile(
>>>_strutsConfigFile );
>>>+
>>>+        try
>>>+        {
>>>+            writeXml( writer, strutsMergeFile );
>>>+        }
>>>+        finally
>>>+        {
>>>+            writer.close();
>>>+        }
>>>    }
>>>
>>>    public boolean isStale()
>>>@@ -419,23 +425,8 @@
>>>
>>>        return true;
>>>    }
>>>-
>>>-
>>>-    public void writeToFile( File strutsMergeFile )
>>>-        throws FileNotFoundException, IOException, XmlException,
>>>FatalCompileTimeException
>>>-    {
>>>-        PrintWriter writer = getEnv().getFiler().createTextFile(
>>>_strutsConfigFile );
>>>-
>>>-        try
>>>-        {
>>>-            writeXml( writer, strutsMergeFile );
>>>-        }
>>>-        finally
>>>-        {
>>>-            writer.close();
>>>-        }
>>>-    }
>>>-
>>>+
>>>+
>>>    public File getStrutsConfigFile()
>>>    {
>>>        return _strutsConfigFile;
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -20,9 +20,9 @@
>>>import org.apache.beehive.netui.compiler.CompilerUtils;
>>>import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>>>import org.apache.beehive.netui.compiler.MergedControllerAnnotation;
>>>-import org.apache.beehive.netui.compiler.Diagnostics;
>>>import org.apache.beehive.netui.compiler.FatalCompileTimeException;
>>>import org.apache.beehive.netui.compiler.model.FormBeanModel;
>>>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
>>>import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
>>>import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
>>>import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
>>>@@ -37,13 +37,10 @@
>>>import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>>>import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>-import org.apache.xmlbeans.XmlException;
>>>
>>>import java.io.File;
>>>import java.io.FileNotFoundException;
>>>-import java.io.FileOutputStream;
>>>import java.io.IOException;
>>>-import java.io.PrintStream;
>>>import java.io.PrintWriter;
>>>import java.util.Collection;
>>>import java.util.Iterator;
>>>@@ -430,7 +427,7 @@
>>>    }
>>>
>>>    public void writeToFile()
>>>-        throws FileNotFoundException, XmlException, IOException,
>>>FatalCompileTimeException
>>>+        throws FileNotFoundException, IOException,
>>>FatalCompileTimeException, XmlModelWriterException
>>>    {
>>>        String outputFilePath = getOutputFileURI();
>>>        File outputFile = new File( outputFilePath );
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -21,28 +21,28 @@
>>>import org.apache.beehive.netui.compiler.AnnotationMemberType;
>>>import org.apache.beehive.netui.compiler.FlowControllerInfo;
>>>import org.apache.beehive.netui.compiler.Diagnostics;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.StrutsConfigDocument;
>>>-import org.apache.beehive.netui.compiler.model.schema.validator11.FormValidationDocument;
>>>import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>>>
>>>+import java.net.URL;
>>>+
>>>
>>>public class ControllerGrammar
>>>        extends BaseFlowControllerGrammar
>>>-{
>>>+{
>>>    public ControllerGrammar( AnnotationProcessorEnvironment env,
>>>Diagnostics diags, RuntimeVersionChecker rvc,
>>>                              FlowControllerInfo fcInfo )
>>>    {
>>>        super( env, diags, null, rvc, fcInfo );
>>>-
>>>+
>>>        addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType(
>>>null, this ) );
>>>        addMemberType( ROLES_ALLOWED_ATTR, new RolesAllowedType( this ) );
>>>        addMemberType( READONLY_ATTR, new AnnotationMemberType( null, this ) );
>>>-        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
>>>StrutsConfigDocument.type, null, this, fcInfo ) );
>>>+        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
>>>"struts-config_1_1.xsd", null, this, fcInfo ) );
>>>        addMemberType( VALIDATOR_VERSION_ATTR, new
>>>AnnotationMemberType( null, this ) );
>>>-        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
>>>FormValidationDocument.type, null, this, fcInfo ) );
>>>+        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
>>>"struts-validator_1_1.xsd", null, this, fcInfo ) );
>>>        addMemberType( TILES_DEFINITIONS_CONFIGS_ATTR, new
>>>TilesDefinitionsConfigsType( null, this, fcInfo ) );
>>>        addMemberType( MULTIPART_HANDLER_ATTR, new
>>>AnnotationMemberType( null, this ) );
>>>-
>>>+
>>>        addMemberArrayGrammar( SHARED_FLOW_REFS_ATTR, new
>>>SharedFlowRefGrammar( env, diags, rvc ) );
>>>        addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar(
>>>env, diags, null, rvc, fcInfo ) );
>>>        addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env,
>>>diags, null, rvc, CONTROLLER_TAG_NAME, fcInfo ) );
>>>@@ -50,7 +50,7 @@
>>>        addMemberArrayGrammar( VALIDATABLE_BEANS_ATTR, new
>>>ValidatableBeanGrammar( env, diags, rvc ) );
>>>        addMemberArrayGrammar( SIMPLE_ACTIONS_ATTR, new
>>>SimpleActionGrammar( env, diags, rvc, fcInfo ) );
>>>    }
>>>-
>>>+
>>>    public String[][] getMutuallyExclusiveAttrs()
>>>    {
>>>        return null;
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -19,154 +19,159 @@
>>>
>>>import org.apache.beehive.netui.compiler.AnnotationGrammar;
>>>import org.apache.beehive.netui.compiler.FlowControllerInfo;
>>>-import org.apache.xmlbeans.SchemaType;
>>>-import org.apache.xmlbeans.XmlOptions;
>>>-import org.apache.xmlbeans.XmlObject;
>>>-import org.apache.xmlbeans.XmlError;
>>>-import org.apache.xmlbeans.XmlException;
>>>+import org.apache.beehive.netui.compiler.LocalFileEntityResolver;
>>>import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
>>>+import org.xml.sax.SAXParseException;
>>>+import org.xml.sax.SAXException;
>>>+import org.xml.sax.InputSource;
>>>+import org.xml.sax.helpers.DefaultHandler;
>>>
>>>+import javax.xml.parsers.DocumentBuilderFactory;
>>>+import javax.xml.parsers.DocumentBuilder;
>>>import java.util.Map;
>>>import java.util.Collections;
>>>import java.util.HashMap;
>>>-import java.util.List;
>>>-import java.util.ArrayList;
>>>import java.io.File;
>>>+import java.io.IOException;
>>>
>>>
>>>public class ValidXmlFileType
>>>        extends WebappPathType
>>>{
>>>-    private SchemaType _schema;
>>>+    private String _schemaFileName;
>>>    private static Map _parseResults = Collections.synchronizedMap(
>>>new HashMap() );
>>>-
>>>-    public ValidXmlFileType( SchemaType schema, String
>>>requiredRuntimeVersion, AnnotationGrammar parentGrammar,
>>>+
>>>+    public ValidXmlFileType( String schemaFileName, String
>>>requiredRuntimeVersion, AnnotationGrammar parentGrammar,
>>>                             FlowControllerInfo fcInfo )
>>>    {
>>>        super( false, requiredRuntimeVersion, parentGrammar, fcInfo );
>>>-        _schema = schema;
>>>+        assert schemaFileName != null;
>>>+        _schemaFileName = schemaFileName;
>>>    }
>>>
>>>-
>>>+
>>>    protected boolean checkAnyExtension()
>>>    {
>>>        return true;
>>>    }
>>>
>>>-
>>>+
>>>    protected boolean doFatalError()
>>>    {
>>>        return true;
>>>    }
>>>-
>>>-
>>>+
>>>+
>>>    protected boolean ignoreDirectories()
>>>    {
>>>        return false;
>>>    }
>>>-
>>>-
>>>+
>>>+
>>>    protected boolean allowFileInPageFlowSourceDir()
>>>    {
>>>        return true;
>>>    }
>>>-
>>>-
>>>+
>>>+
>>>    protected void runAdditionalChecks( File file, AnnotationValue value )
>>>    {
>>>-        try
>>>+
>>>+        //
>>>+        // We cache the results of parsing the file until the file is
>>>actually modified,
>>>+        // so we don't end up continually re-parsing it.
>>>+        //
>>>+        ParseResults prevResults = ( ParseResults )
>>>_parseResults.get( file.getPath() );
>>>+        long lastModTime = file.lastModified();
>>>+
>>>+        if ( prevResults == null || lastModTime >
>>>prevResults.getFileModTime() )
>>>        {
>>>-            //
>>>-            // We cache the results of parsing the file until the
>>>file is actually modified,
>>>-            // so we don't end up continually re-parsing it.
>>>-            //
>>>-            ParseResults prevResults = ( ParseResults )
>>>_parseResults.get( file.getPath() );
>>>-
>>>-            if ( prevResults == null || file.lastModified() >
>>>prevResults.getFileModTime() )
>>>+            try
>>>            {
>>>-                try
>>>-                {
>>>-                    XmlOptions options = new XmlOptions();
>>>-                    options.setDocumentType( _schema );
>>>-                    XmlObject xml = XmlObject.Factory.parse( file, options );
>>>-                    List errorListener = new ArrayList();
>>>-                    options.setErrorListener( errorListener );
>>>-
>>>-                    if ( !xml.validate( options ) )
>>>-                    {
>>>-                        assert !errorListener.isEmpty();
>>>-
>>>-                        XmlError err = ( XmlError ) errorListener.get( 0 );
>>>-                        assert err != null;
>>>-
>>>-                        throw new XmlException( err.getMessage(), null, err );
>>>-                    }
>>>-                }
>>>-                catch ( Exception e )
>>>-                {
>>>-                    _parseResults.put( file.getPath(), new
>>>ParseResults( file.lastModified(), e ) );
>>>-                    throw e;
>>>+                LocalFileEntityResolver entityResolver =
>>>LocalFileEntityResolver.getInstance();
>>>+                InputSource schemaInput =
>>>entityResolver.resolveLocalEntity(_schemaFileName);
>>>+                assert schemaInput != null : "could not get schema
>>>resource for " + _schemaFileName;
>>>+                DocumentBuilderFactory factory =
>>>DocumentBuilderFactory.newInstance();
>>>+                factory.setNamespaceAware(true);
>>>+                factory.setValidating(true);
>>>+                factory.setAttribute(
>>>"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
>>>+                                      "http://www.w3.org/2001/XMLSchema");
>>>+                factory.setAttribute(
>>>"http://java.sun.com/xml/jaxp/properties/schemaSource", schemaInput);
>>>+                DocumentBuilder builder = factory.newDocumentBuilder();
>>>+
>>>builder.setEntityResolver(LocalFileEntityResolver.getInstance());
>>>+                Validator handler = new Validator(lastModTime, file, value);
>>>+                builder.setErrorHandler(handler);
>>>+                builder.parse(file);
>>>+                if (handler.hadErrors()) {
>>>+                    return;
>>>                }
>>>-
>>>-                _parseResults.put( file.getPath(), new ParseResults(
>>>file.lastModified(), null ) );
>>>            }
>>>-            else
>>>+            catch ( SAXParseException e )
>>>            {
>>>-                Exception e = prevResults.getException();
>>>-
>>>-                if ( e != null )
>>>-                {
>>>-                    throw e;
>>>-                }
>>>+                addErrorDiagnostic( file, e, value );
>>>+                _parseResults.put( file.getPath(), new ParseResults(
>>>lastModTime, e ) );
>>>+                return;
>>>            }
>>>+            catch ( Exception e )
>>>+            {
>>>+                _parseResults.put( file.getPath(), new ParseResults(
>>>lastModTime, e ) );
>>>+                addError( value, "error.xml-read-error",
>>>+                          new Object[]{ file.getPath(),
>>>e.getClass().getName(), e.getMessage() } );
>>>+                return;
>>>+            }
>>>+
>>>+            _parseResults.put( file.getPath(), new ParseResults(
>>>lastModTime, null ) );
>>>        }
>>>-        catch ( XmlException e )
>>>-        {
>>>-            addErrorDiagnostic( e.getError(), value );
>>>-        }
>>>-        catch ( Exception e )
>>>+        else
>>>        {
>>>-            addError( value, "error.xml-read-error", new Object[]{
>>>file.getPath(), e.getMessage() } );
>>>+            Exception e = prevResults.getException();
>>>+
>>>+            if (e instanceof SAXParseException) {
>>>+                addErrorDiagnostic(file, (SAXParseException) e, value);
>>>+            } else if (e != null) {
>>>+                addError( value, "error.xml-read-error",
>>>+                          new Object[]{ file.getPath(),
>>>e.getClass().getName(), e.getMessage() } );
>>>+            }
>>>        }
>>>    }
>>>-
>>>-    private void addErrorDiagnostic( XmlError err, AnnotationValue value )
>>>+
>>>+    private void addErrorDiagnostic( File file, SAXParseException
>>>err, AnnotationValue value )
>>>    {
>>>-        if ( err.getColumn() != -1 && err.getLine() != -1 )
>>>+        if ( err.getColumnNumber() != -1 && err.getLineNumber() != -1 )
>>>        {
>>>            Object[] args =
>>>                    {
>>>-                        err.getSourceName(),
>>>-                        new Integer( err.getLine() ),
>>>-                        new Integer( err.getColumn() ),
>>>+                        file.getPath(),
>>>+                        new Integer( err.getLineNumber() ),
>>>+                        new Integer( err.getColumnNumber() ),
>>>                        err.getMessage()
>>>                    };
>>>-
>>>+
>>>            addError( value, "error.xml-parse-error", args );
>>>        }
>>>-        else if ( err.getLine() != -1 )
>>>+        else if ( err.getLineNumber() != -1 )
>>>        {
>>>            Object[] args =
>>>            {
>>>-                err.getSourceName(),
>>>-                new Integer( err.getLine() ),
>>>+                file.getPath(),
>>>+                new Integer( err.getLineNumber() ),
>>>                err.getMessage()
>>>            };
>>>-
>>>+
>>>            addError( value, "error.xml-parse-error-nocolumn", args );
>>>-        }
>>>+        }
>>>        else
>>>        {
>>>            Object[] args =
>>>            {
>>>-                err.getSourceName(),
>>>+                file.getPath(),
>>>                err.getMessage()
>>>            };
>>>-
>>>+
>>>            addError( value, "error.xml-parse-error-nolinecolumn", args );
>>>        }
>>>    }
>>>-
>>>+
>>>    private static class ParseResults
>>>    {
>>>        private long _fileModTime;
>>>@@ -196,6 +201,46 @@
>>>        public void setException( Exception exception )
>>>        {
>>>            _exception = exception;
>>>+        }
>>>+    }
>>>+
>>>+    private class Validator extends DefaultHandler {
>>>+
>>>+        private long _fileModTime;
>>>+        private File _file;
>>>+        private AnnotationValue _value;
>>>+        private boolean _hadErrors = false;
>>>+
>>>+        public Validator(long fileModTime, File file, AnnotationValue value) {
>>>+            _fileModTime = fileModTime;
>>>+            _file = file;
>>>+            _value = value;
>>>+        }
>>>+
>>>+        public void error(SAXParseException ex)
>>>+                throws SAXException {
>>>+            ParseResults results = new ParseResults(_fileModTime, ex);
>>>+            addErrorDiagnostic(_file, ex, _value );
>>>+            _parseResults.put(_file.getPath(), results);
>>>+            _hadErrors = true;
>>>+        }
>>>+
>>>+        public void fatalError(SAXParseException ex)
>>>+                throws SAXException {
>>>+            error(ex);
>>>+        }
>>>+
>>>+        public void warning(SAXParseException exception)
>>>+                throws SAXException {
>>>+            // TODO: add a compiler warning?
>>>+        }
>>>+
>>>+        public boolean hadErrors() {
>>>+            return _hadErrors;
>>>+        }
>>>+
>>>+        public InputSource resolveEntity(String publicId, String
>>>systemId) throws IOException, SAXException {
>>>+            return super.resolveEntity(publicId, systemId);
>>>        }
>>>    }
>>>}
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -17,8 +17,7 @@
>>> */
>>>package org.apache.beehive.netui.compiler.model;
>>>
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
>>>-import org.apache.xmlbeans.XmlObject;
>>>+import org.w3c.dom.Element;
>>>
>>>import java.util.LinkedHashMap;
>>>import java.util.Iterator;
>>>@@ -71,28 +70,13 @@
>>>        return ( ForwardModel ) _forwards.get( forwardName );
>>>    }
>>>
>>>-    public void writeForwards( ForwardDocument.Forward[]
>>>existingForwards, XmlObject xmlForwardContainer )
>>>+    public void writeForwards( XmlModelWriter xw, Element
>>>forwardsParentElement )
>>>    {
>>>        for ( Iterator i = _forwards.values().iterator(); i.hasNext(); )
>>>        {
>>>            ForwardModel fwd = ( ForwardModel ) i.next();
>>>-            ForwardDocument.Forward fwdToEdit = null;
>>>-
>>>-            for ( int j = 0; j < existingForwards.length; ++j )
>>>-            {
>>>-                if ( fwd.getName().equals( existingForwards[j].getName() ) )
>>>-                {
>>>-                    fwdToEdit = existingForwards[j];
>>>-                    break;
>>>-                }
>>>-            }
>>>-
>>>-            if ( fwdToEdit == null )
>>>-            {
>>>-                fwdToEdit = addNewForward( xmlForwardContainer );
>>>-            }
>>>-
>>>-            fwd.writeToXMLBean( fwdToEdit );
>>>+            Element fwdToEdit = findChildElement(xw,
>>>forwardsParentElement, "forward", "name", fwd.getName(), true);
>>>+            fwd.writeXML( xw, fwdToEdit );
>>>        }
>>>    }
>>>
>>>@@ -112,6 +96,5 @@
>>>    {
>>>        _forwards.remove( forward.getName() );
>>>    }
>>>-
>>>-    protected abstract ForwardDocument.Forward addNewForward(
>>>XmlObject xmlForwardContainer );
>>>+
>>>}
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -22,13 +22,8 @@
>>>import java.util.LinkedHashMap;
>>>import java.util.Iterator;
>>>
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument.Action;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument;
>>>import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>>>-import org.apache.xmlbeans.XmlObject;
>>>+import org.w3c.dom.Element;
>>>
>>>
>>>/**
>>>@@ -43,11 +38,10 @@
>>>
>>>    private static final String JPF_ACTION_MAPPING_CLASSNAME =
>>>PAGEFLOW_PACKAGE + ".config.PageFlowActionMapping";
>>>
>>>-
>>>+
>>>    // Struts attributes.
>>>    private ArrayList _exceptionCatches = new ArrayList();
>>>    private String _attribute;
>>>-    private String _className;
>>>    private String _forward;
>>>    private String _include;
>>>    private String _input;
>>>@@ -88,7 +82,7 @@
>>>        this._path = path;
>>>        this._formBeanName = formName;
>>>    }
>>>-
>>>+
>>>    protected ActionModel( StrutsApp parent )
>>>    {
>>>        this( null, null, parent );
>>>@@ -96,7 +90,7 @@
>>>
>>>    /**
>>>     * Construct a copy of the given mapping, with the given path.
>>>-     */
>>>+     */
>>>    public ActionModel( ActionModel src, String newPath )
>>>    {
>>>        super( src );
>>>@@ -104,7 +98,6 @@
>>>        this._formBeanName = src._formBeanName;
>>>        _exceptionCatches = ( ArrayList ) src._exceptionCatches.clone();
>>>        _attribute = src._attribute;
>>>-        _className = src._className;
>>>        _forward = src._forward;
>>>        _include = src._include;
>>>        _input = src._input;
>>>@@ -126,127 +119,70 @@
>>>        _unqualifiedActionPath = src._unqualifiedActionPath;
>>>        _defaultForwardName = src._defaultForwardName;
>>>    }
>>>-
>>>+
>>>    public void setFormBeanName( String formBeanName )
>>>    {
>>>        _formBeanName = formBeanName;
>>>    }
>>>-
>>>-    public void writeToXMLBean( Action xb )
>>>+
>>>+    protected void writeToElement(XmlModelWriter xw, Element element)
>>>    {
>>>-        xb.setPath( _path );
>>>-
>>>-        if ( xb.getName() == null && _formBeanName != null )
>>>xb.setName( _formBeanName );
>>>-        if ( xb.getClassName() == null && _className != null )
>>>xb.setClassName( _className );
>>>-        if ( xb.getType() == null && _type != null ) xb.setType( _type );
>>>-        if ( xb.getAttribute() == null && _attribute != null )
>>>xb.setAttribute( _attribute );
>>>-        if ( xb.getInput() == null && _input != null ) xb.setInput( _input );
>>>-        if ( xb.getParameter() == null && _parameter != null )
>>>xb.setParameter( _parameter );
>>>-        if ( xb.getPrefix() == null && _prefix != null )
>>>xb.setPrefix( _prefix );
>>>-        if ( xb.getSuffix() == null && _suffix != null )
>>>xb.setSuffix( _suffix );
>>>-
>>>-        if ( xb.getScope() == null )
>>>-        {
>>>-            if ( _scope != null )
>>>-            {
>>>-                if ( _scope.equals( "request" ) )
>>>-                {
>>>-                    xb.setScope( Action.Scope.REQUEST );
>>>-                }
>>>-                else if ( _scope.equals( "session" ) )
>>>-                {
>>>-                    xb.setScope( Action.Scope.SESSION );
>>>-                }
>>>-                else
>>>-                {
>>>-                    assert false : _scope;
>>>-                }
>>>-            }
>>>-            else
>>>-            {
>>>-                xb.setScope( Action.Scope.REQUEST );
>>>-            }
>>>-        }
>>>-
>>>-        if ( xb.getRoles() == null && _roles != null ) xb.setRoles( _roles );
>>>-        if ( xb.getForward2() == null &&  _forward != null )
>>>xb.setForward2( _forward );
>>>-        if ( xb.getInclude() == null && _include != null )
>>>xb.setInclude( _include );
>>>-        if ( xb.getUnknown() == null && _unknown ) xb.setUnknown(
>>>Action.Unknown.TRUE );
>>>-        if ( xb.getValidate() == null ) xb.setValidate( _validate ?
>>>Action.Validate.TRUE : Action.Validate.FALSE );
>>>-
>>>-        if (  _unqualifiedActionPath != null ) addSetProperty( xb,
>>>"unqualifiedActionPath", _unqualifiedActionPath );
>>>-        if ( _formMember != null ) addSetProperty( xb, "formMember",
>>>_formMember );
>>>-        if ( _formClass != null ) addSetProperty( xb, "formClass",
>>>_formClass );
>>>-        if ( _loginRequired ) addSetProperty( xb, "loginRequired",
>>>_loginRequired );
>>>-        if ( _preventDoubleSubmit ) addSetProperty( xb,
>>>"preventDoubleSubmit", _preventDoubleSubmit );
>>>-        if ( _isOverloaded ) addSetProperty( xb, "overloaded", _isOverloaded );
>>>-        if ( _readonly ) addSetProperty( xb, "readonly", _readonly );
>>>-        if ( _isSimpleAction ) addSetProperty( xb, "simpleAction",
>>>_isSimpleAction );
>>>-        if ( _defaultForwardName != null ) addSetProperty( xb,
>>>"defaultForward", _defaultForwardName );
>>>-
>>>+        element.setAttribute("path", _path);
>>>+        setElementAttribute(element, "name", _formBeanName);
>>>+        setElementAttribute(element, "className", getClassName());
>>>+        setElementAttribute(element, "type", _type);
>>>+        setElementAttribute(element, "attribute", _attribute);
>>>+        setElementAttribute(element, "input", _input);
>>>+        setElementAttribute(element, "parameter", _parameter);
>>>+        setElementAttribute(element, "prefix", _prefix);
>>>+        setElementAttribute(element, "suffix", _suffix);
>>>+        setElementAttribute(element, "scope", _scope != null ? _scope
>>>: "request");
>>>+        setElementAttribute(element, "roles", _roles);
>>>+        setElementAttribute(element, "forward", _forward);
>>>+        setElementAttribute(element, "include", _include);
>>>+        setElementAttribute(element, "validate",
>>>Boolean.toString(_validate));  // always set the value, even if false
>>>+        addSetProperty( xw, element, "unqualifiedActionPath",
>>>_unqualifiedActionPath );
>>>+        addSetProperty( xw, element, "formMember", _formMember );
>>>+        addSetProperty( xw, element, "formClass", _formClass );
>>>+        addSetProperty( xw, element, "loginRequired", _loginRequired );
>>>+        addSetProperty( xw, element, "preventDoubleSubmit",
>>>_preventDoubleSubmit );
>>>+        addSetProperty( xw, element, "overloaded", _isOverloaded );
>>>+        addSetProperty( xw, element, "readonly", _readonly );
>>>+        addSetProperty( xw, element, "simpleAction", _isSimpleAction );
>>>+        addSetProperty( xw, element, "defaultForward", _defaultForwardName );
>>>+        addSetProperty( xw, element, "formBeanMessageResourcesKey",
>>>_formBeanMessageResourcesKey );
>>>+
>>>        if ( _conditionalForwards != null )
>>>        {
>>>-            addSetProperty( xb, "conditionalForwards", getMapString(
>>>_conditionalForwards) );
>>>-        }
>>>-
>>>-        if ( _formBeanMessageResourcesKey != null )
>>>-        {
>>>-            addSetProperty( xb, "formBeanMessageResourcesKey",
>>>_formBeanMessageResourcesKey );
>>>+            addSetProperty( xw, element, "conditionalForwards",
>>>getMapString( _conditionalForwards) );
>>>        }
>>>-
>>>+
>>>        if ( _exceptionCatches != null && ! _exceptionCatches.isEmpty() )
>>>        {
>>>-            ExceptionDocument.Exception[] existingExceptions =
>>>xb.getExceptionArray();
>>>-
>>>            for ( int i = 0; i < _exceptionCatches.size(); ++i )
>>>            {
>>>                ExceptionModel ec = ( ExceptionModel )
>>>_exceptionCatches.get( i );
>>>-                ExceptionDocument.Exception exceptionToEdit = null;
>>>-
>>>-                for ( int j = 0; j < existingExceptions.length; ++j )
>>>-                {
>>>-                    if ( ec.getType().equals(
>>>existingExceptions[j].getType() ) )
>>>-                    {
>>>-                        exceptionToEdit = existingExceptions[j];
>>>-                        break;
>>>-                    }
>>>-                }
>>>-
>>>-                if ( exceptionToEdit == null )
>>>-                {
>>>-                    exceptionToEdit = xb.addNewException();
>>>-                }
>>>-
>>>-                ec.writeToXMLBean( exceptionToEdit );
>>>+                Element exceptionToEdit = findChildElement(xw,
>>>element, "exception", "type", ec.getType(), true);
>>>+                ec.writeXML( xw, exceptionToEdit );
>>>            }
>>>        }
>>>-
>>>+
>>>        //
>>>        // forwards
>>>        //
>>>-        writeForwards( xb.getForwardArray(), xb );
>>>-
>>>-        addComment( xb );
>>>-    }
>>>-
>>>-    private void addSetProperty( ActionDocument.Action xb, String
>>>propertyName, boolean propertyValue )
>>>-    {
>>>-        addSetProperty( xb, propertyName, Boolean.toString( propertyValue ) );
>>>+        writeForwards( xw, element );
>>>    }
>>>-
>>>-    private void addSetProperty( ActionDocument.Action xb, String
>>>propertyName, String propertyValue )
>>>+
>>>+    private void addSetProperty( XmlModelWriter xw, Element element,
>>>String propertyName, boolean propertyValue )
>>>    {
>>>-        SetProperty prop = xb.addNewSetProperty();
>>>-        prop.setProperty( propertyName );
>>>-        prop.setValue( propertyValue );
>>>-        if ( xb.getClassName() == null ) xb.setClassName(
>>>JPF_ACTION_MAPPING_CLASSNAME );
>>>+        if (propertyValue) addSetProperty( xw, element, propertyName,
>>>Boolean.toString( propertyValue ) );
>>>    }
>>>-
>>>-    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
>>>+
>>>+    private void addSetProperty( XmlModelWriter xw, Element element,
>>>String propertyName, String propertyValue )
>>>    {
>>>-        return ( ( Action ) xmlObject ).addNewForward();
>>>+        setCustomProperty(xw, element, propertyName, propertyValue,
>>>JPF_ACTION_MAPPING_CLASSNAME);
>>>    }
>>>-
>>>+
>>>    /**
>>>     * Implemented for {@link ExceptionContainer}.
>>>     */
>>>@@ -265,16 +201,6 @@
>>>        this._attribute = attribute;
>>>    }
>>>
>>>-    public String getClassName()
>>>-    {
>>>-        return _className;
>>>-    }
>>>-
>>>-    public void setClassName( String className )
>>>-    {
>>>-        this._className = className;
>>>-    }
>>>-
>>>    public String getForward()
>>>    {
>>>        return _forward;
>>>@@ -309,7 +235,7 @@
>>>    {
>>>        return _formBeanName;
>>>    }
>>>-
>>>+
>>>    public String getFormBeanName()
>>>    {
>>>        return _formBeanName;
>>>@@ -344,7 +270,7 @@
>>>    {
>>>        return _path;
>>>    }
>>>-
>>>+
>>>    public String getPath( boolean useUnqualifiedPath )
>>>    {
>>>        if ( useUnqualifiedPath && _unqualifiedActionPath != null )
>>>@@ -446,7 +372,7 @@
>>>    {
>>>        _loginRequired = loginRequired;
>>>    }
>>>-
>>>+
>>>    public void setPreventDoubleSubmit( boolean preventDoubleSubmit )
>>>    {
>>>        _preventDoubleSubmit = preventDoubleSubmit;
>>>@@ -501,23 +427,23 @@
>>>    {
>>>        _readonly = readonly;
>>>    }
>>>-
>>>+
>>>    public void addConditionalForward( String expression, String forwardName )
>>>    {
>>>        if ( _conditionalForwards == null ) _conditionalForwards =
>>>new LinkedHashMap();
>>>        _conditionalForwards.put( expression, forwardName );
>>>    }
>>>-
>>>+
>>>    private static String getMapString( Map map )
>>>    {
>>>        StringBuffer retVal = new StringBuffer();
>>>-
>>>+
>>>        for ( Iterator i = map.entrySet().iterator(); i.hasNext(); )
>>>        {
>>>            Map.Entry entry = ( Map.Entry ) i.next();
>>>            retVal.append( entry.getValue() ).append( ':' ).append(
>>>entry.getKey() ).append( ';' );
>>>        }
>>>-
>>>+
>>>        return retVal.toString();
>>>    }
>>>
>>>@@ -525,6 +451,6 @@
>>>    {
>>>        _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
>>>    }
>>>-
>>>+
>>>
>>>}
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -17,10 +17,8 @@
>>> */
>>>package org.apache.beehive.netui.compiler.model;
>>>
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
>>>-import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
>>>import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>>>+import org.w3c.dom.Element;
>>>
>>>public class ExceptionModel
>>>        extends StrutsElementSupport
>>>@@ -36,18 +34,18 @@
>>>    private boolean _inheritedPath = false;
>>>
>>>    private static final String JPF_EXCEPTION_CONFIG_CLASSNAME =
>>>PAGEFLOW_PACKAGE + ".config.PageFlowExceptionConfig";
>>>-
>>>-
>>>+
>>>+
>>>    protected ExceptionModel( StrutsApp parentApp )
>>>    {
>>>        super( parentApp );
>>>    }
>>>-
>>>+
>>>    public ExceptionModel( String type, String path, String
>>>handlerMethod, String message,
>>>                           String messageKey, StrutsApp parentApp )
>>>    {
>>>        super( parentApp );
>>>-
>>>+
>>>        _type = type;
>>>        _path = path;
>>>        _handlerMethod = handlerMethod;
>>>@@ -115,56 +113,55 @@
>>>        _handlerClass = handlerClass;
>>>    }
>>>
>>>-    public void writeToXMLBean( ExceptionDocument.Exception xb )
>>>-
>>>+    protected void writeToElement(XmlModelWriter xw, Element element)
>>>    {
>>>-        xb.setType( _type );
>>>+        element.setAttribute("type", _type);
>>>
>>>-        if ( xb.getPath() == null && _path != null )
>>>+        if ( _path != null )
>>>        {
>>>            boolean relativeToModule = ! _path.startsWith( "/" );
>>>-
>>>+
>>>            if ( relativeToModule )
>>>            {
>>>-                xb.setPath( "/" + _path );  // struts wants "/" --
>>>assumes this is module-relative path
>>>+                // struts wants "/" -- assumes this is module-relative path
>>>+                setElementAttribute(element, "path", '/' + _path);
>>>            }
>>>            else
>>>            {
>>>-                xb.setPath( _path );
>>>-                addSetProperty( xb, "isPathContextRelative", "true" );
>>>+                setElementAttributeMayBeEmpty(element, "path", _path);
>>>+                addSetProperty(xw, element, "isPathContextRelative", "true" );
>>>            }
>>>        }
>>>-
>>>-        if ( _inheritedPath ) addSetProperty( xb, "inheritedPath", "true" );
>>>-
>>>-        if ( xb.getKey() == null && _messageKey != null ) xb.setKey(
>>>_messageKey );
>>>-
>>>+
>>>+        if ( _inheritedPath ) addSetProperty(xw, element,
>>>"inheritedPath", "true" );
>>>+
>>>+        //
>>>+        // Set the message key.  If there isn't one, use the typename
>>>as the message key.
>>>+        setElementAttribute(element, "key", _messageKey);
>>>+        if (_messageKey == null) setElementAttribute(element, "key", _type);
>>>+
>>>        //
>>>        // Struts doesn't support "message" directly -- we'll add
>>>this as a custom property.
>>>        //
>>>-        if ( _message != null ) addSetProperty( xb, "defaultMessage",
>>>_message );
>>>-
>>>-        if ( xb.getKey() == null ) xb.setKey( _type );
>>>-
>>>+        addSetProperty(xw, element, "defaultMessage", _message );
>>>+
>>>        //
>>>        // Note that we're setting the handler *method* as the
>>>handler.  This would break Struts.
>>>        //
>>>-        if ( xb.getHandler() == null && _handlerMethod != null &&
>>>_handlerClass == null )
>>>-        {
>>>-            xb.setHandler( _handlerMethod );
>>>-            addSetProperty( xb, "isHandlerMethod", "true" );
>>>+        if ( _handlerMethod != null && _handlerClass == null ) {
>>>+            setElementAttribute(element, "handler", _handlerMethod);
>>>+            addSetProperty(xw, element, "isHandlerMethod", "true" );
>>>+        }
>>>+        else {
>>>+            setElementAttribute(element, "handler", _handlerClass);
>>>        }
>>>-
>>>-        if ( _readonly ) addSetProperty( xb, "readonly", "true" );
>>>-        if ( xb.getHandler() == null && _handlerClass != null )
>>>xb.setHandler( _handlerClass );
>>>-    }
>>>-
>>>-    private void addSetProperty( ExceptionDocument.Exception xb,
>>>String propertyName, String propertyValue )
>>>-    {
>>>-        SetProperty prop = xb.addNewSetProperty();
>>>-        prop.setProperty( propertyName );
>>>-        prop.setValue( propertyValue );
>>>-        if ( xb.getClassName() == null ) xb.setClassName(
>>>JPF_EXCEPTION_CONFIG_CLASSNAME );
>>>+
>>>+        if ( _readonly ) addSetProperty(xw, element, "readonly", "true" );
>>>+    }
>>>+
>>>+    private void addSetProperty( XmlModelWriter xw, Element element,
>>>String propertyName, String propertyValue )
>>>+    {
>>>+        setCustomProperty(xw, element, propertyName, propertyValue,
>>>JPF_EXCEPTION_CONFIG_CLASSNAME);
>>>    }
>>>
>>>    public boolean isReadonly()
>>>
>>>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>>>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java?rev=289648&r1=289647&r2=289648&view=diff
>>>==============================================================================
>>>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>>>(original)
>>>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>>>Fri Sep 16 13:27:57 2005
>>>@@ -21,9 +21,8 @@
>>>import java.util.Collection;
>>>import java.util.List;
>>>
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.FormBeanDocument;
>>>-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
>>>import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>>>+import org.w3c.dom.Element;
>>>
>>>
>>>/**
>>>@@ -90,18 +89,17 @@
>>>    }
>>>
>>>
>>>-    private static final String JPF_ACTION_FORM_BEAN_CLASSNAME =
>>>PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
>>>+    private static final String CUSTOM_ACTION_FORM_BEAN_CLASSNAME =
>>>PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
>>>
>>>    private String _id = "";  // NOI18N
>>>-    private String _className = null;
>>>    private boolean _dynamic = false;
>>>    private String _name = null;  // required to be set
>>>    private String _type = null;  // required to be set
>>>-
>>>-    /** This is a NetUI-specific property. */
>>>+
>>>+    /** This is a NetUI-specific property. */
>>>    private String _actualType = null;
>>>-
>>>-    /** This is a NetUI-specific property. */
>>>+
>>>+    /** This is a NetUI-specific property. */
>>>    private boolean _pageFlowScoped;  // required to be set
>>>
>>>    private ArrayList _properties = new ArrayList();
>>>@@ -115,25 +113,21 @@
>>>        _pageFlowScoped = pageFlowScoped;
>>>    }
>>>
>>>-    public void writeToXMLBean( FormBeanDocument.FormBean xb )
>>>+    protected void writeToElement(XmlModelWriter xw, Element element)
>>>    {
>>>-        xb.setName( _name );
>>>+        element.setAttribute("name", _name);
>>>
>>>-        if ( xb.getType() == null ) xb.setType( _type );
>>>-        if ( xb.getId() == null && _id != null && _id.length() > 0 )
>>>xb.setId( _id );
>>>-        if ( xb.getClassName() == null &&_className != null )
>>>xb.setClassName( _className );
>>>-        if ( xb.getDynamic() == null && _dynamic ) xb.setDynamic(
>>>FormBeanDocument.FormBean.Dynamic.TRUE );
>>>-
>>>-        if ( _actualType != null && ! _actualType.equals( xb.getType() ) )
>>>-        {
>>>-            SetProperty prop = xb.addNewSetProperty();
>>>-            prop.setProperty( "actualType" );
>>>-            prop.setValue( _actualType );
>>>-            if ( xb.getClassName() == null ) xb.setClassName(
>>>JPF_ACTION_FORM_BEAN_CLASSNAME );
>>>-        }
>>>+        setElementAttribute(element, "type", _type);
>>>+        setElementAttribute(element, "id", _id);
>>>+        setElementAttribute(element, "className", getClassName());
>>>+        setElementAttribute(element, "dynamic", _dynamic);
>>>
>>>+        if ( _actualType != null && !
>>>_actualType.equals(element.getAttribute("type")) )
>>>+        {
>>>+            setCustomProperty(xw, element, "actualType", _actualType,
>>>CUSTOM_ACTION_FORM_BEAN_CLASSNAME);
>>>+        }
>>>    }
>>>-
>>>+
>>>    public String getId()
>>>    {
>>>        return _id;
>>>@@ -144,11 +138,6 @@
>>>        _id = id;
>>>    }
>>>
>>>-    public String getClassName()
>>>-    {
>>>-        return _className;
>>>-    }
>>>-
>>>    public void setClassName( String className )
>>>    {
>>>        if ( className != null )
>>>@@ -156,7 +145,7 @@
>>>            if ("org.apache.struts.action.DynaActionForm".equals(
>>>className ) )  // NOI18N
>>>                _dynamic = true;
>>>
>>>-            _className = className;
>>>+            setClassName(className);
>>>        }
>>>    }
>>>
>>>
>>>
>>>      
>>>
>
>  
>

Re: Fwd: svn commit: r289648 [1/6] - in /beehive/trunk/netui: src/compiler-core/ src/compiler-core/org/apache/beehive/netui/compiler/ src/compiler-core/org/apache/beehive/netui/compiler/genmodel/ src/compiler-core/org/apache/beehive/netui/compiler/gr

Posted by Eddie O'Neil <ek...@gmail.com>.
Rich--

  One question -- there's still one XSD in:

  netui/src/compiler-core/schema/processed-annotations/...

Is this still used?  I just did a full BVT run and didn't encounter
any build / test failures.

Eddie



On 9/16/05, Rich Feit <ri...@gmail.com> wrote:
> Great, thanks for verifying it.  We're definitely on our way!
> Rich
> 
> Eddie O'Neil wrote:
> 
> >Rich--
> >
> >  Excellent!  Great to have the compiler moved over.
> >
> >  I've just finished test runs on Linux (FC3) and on WinXP -- both
> >passed at 100% for the JUnit, compiler, and test recorder tests.
> >
> >  I'll be working on the distribution part of this next.
> >
> >Eddie
> >
> >
> >
> >---------- Forwarded message ----------
> >From: rich@apache.org <ri...@apache.org>
> >Date: Sep 16, 2005 2:30 PM
> >Subject: svn commit: r289648 [1/6] - in /beehive/trunk/netui:
> >src/compiler-core/
> >src/compiler-core/org/apache/beehive/netui/compiler/
> >src/compiler-core/org/apache/beehive/netui/compiler/genmodel/
> >src/compiler-core/org/apache/beehive/netui/compiler/grammar/ src/...
> >To: commits@beehive.apache.org
> >
> >
> >Author: rich
> >Date: Fri Sep 16 13:27:57 2005
> >New Revision: 289648
> >
> >URL: http://svn.apache.org/viewcvs?rev=289648&view=rev
> >Log:
> >Moved the NetUI compiler layer off of XMLBeans. The generated files
> >(struts-config-*.xml, pageflow-validation-*.xml, annotations-*.xml)
> >are now created (and merged, if Struts Merge or Validator Merge is
> >used) through APIs in the JDK.
> >
> >tests: bvt in netui (WinXP)
> >BB: bvt, run.tests against a dist (linux)
> >
> >
> >Added:
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlElementSupport.java
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriter.java
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriterException.java
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.dtd
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.xsd
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-validator_1_1.xsd
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_0.dtd
> >  (with props)
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_1.dtd
> >  (with props)
> >    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInterfaceParser.java
> >  (with props)
> >    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/env/FilerImpl.java
> >  (with props)
> >Removed:
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldFactory.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldOld.java
> >    beehive/trunk/netui/src/compiler-core/schema/struts-config/
> >    beehive/trunk/netui/src/compiler-core/schema/struts-validator/
> >Modified:
> >    beehive/trunk/netui/src/compiler-core/build.xml
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ForwardModel.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsApp.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java
> >    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java
> >    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInstanceImpl.java
> >    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/DeclarationImpl.java
> >    beehive/trunk/netui/src/compiler/build.xml
> >    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnnotationReader.java
> >    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/OutputHandler.java
> >    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/PageFlowCompilerTest.java
> >    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/TestPropertyMgr.java
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/GA_DeprecationWarning/expectedOutput/struts-config--global.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira390/expectedOutput/struts-config-Jira390.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_NewReturnTo/expectedOutput/struts-config-Nested_NewReturnTo.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionMethodOverload/expectedOutput/struts-config-PF_ActionMethodOverload.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionNegatives/expectedOutput/struts-config-PF_ActionNegatives.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionReadOnly/expectedOutput/struts-config-PF_ActionReadOnly.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionUseFormBean/expectedOutput/struts-config-PF_ActionUseFormBean.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionWithForm/expectedOutput/struts-config-PF_ActionWithForm.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_AnyNumberActionForward/expectedOutput/struts-config-PF_AnyNumberActionForward.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_CatchExceptionHandler/expectedOutput/struts-config-PF_CatchExceptionHandler.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_DeprecatedExceptionHandler/expectedOutput/struts-config-PF_DeprecatedExceptionHandler.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardNotInActionOrController/expectedOutput/struts-config-PF_ForwardNotInActionOrController.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardRedirect/expectedOutput/struts-config-PF_ForwardRedirect.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardSyntax/expectedOutput/struts-config-PF_ForwardSyntax.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_InvalidAnnotations/expectedOutput/struts-config-PF_InvalidAnnotations.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_JustBeginAction/expectedOutput/struts-config-PF_JustBeginAction.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_LongLivedTrue/expectedOutput/struts-config-PF_LongLivedTrue.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_MissingForwardJPF/expectedOutput/struts-config-MissingForwardJPF.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RedirectWithNavigateTo/expectedOutput/struts-config-PF_RedirectWithNavigateTo.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RolesAllowed/expectedOutput/struts-config-PF_RolesAllowed.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameGlobalActionForwardName/expectedOutput/struts-config-PF_SameGlobalActionForwardName.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameMethodNameSig/expectedOutput/struts-config-PF_SameMethodNameSig.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionValidationErrForward/expectedOutput/struts-config-PF_TwoActionValidationErrForward.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionsSameForward/expectedOutput/struts-config-PF_TwoActionsSameForward.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoBeginAction/expectedOutput/struts-config-PF_TwoBeginAction.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ValidateErrorForward/expectedOutput/struts-config-PF_ValidateErrorForward.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongActionMember/expectedOutput/struts-config-PF_WrongActionMember.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongControlLocation/expectedOutput/struts-config-PF_WrongControlLocation.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin-parent.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride-parent.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath-parent.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction-parent.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config--SF_ImplicitReferences.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config-SF_ImplicitReferences.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config--SF_ImplicitReferencesNested.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config-SF_ImplicitReferencesNested.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config--SF_InvalidRelativePath.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config-SF_InvalidRelativePath.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/retrievePopupOutput/expectedOutput/struts-config-retrievePopupOutput.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleActionReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleActionReadOnlyUseFormBeanWarning.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent-childFlow.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride-childFlow.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInvalidPathWarning/expectedOutput/struts-config-simpleInvalidPathWarning.expected
> >    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleReadOnlyUseFormBeanWarning.expected
> >    beehive/trunk/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml
> >
> >Modified: beehive/trunk/netui/src/compiler-core/build.xml
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/build.xml?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/build.xml (original)
> >+++ beehive/trunk/netui/src/compiler-core/build.xml Fri Sep 16 13:27:57 2005
> >@@ -9,7 +9,6 @@
> >     <property name="module.classes.dir"
> >location="${classes.dir}/${module.name}"/>
> >
> >     <path id="module.classpath">
> >-        <path refid="xbean.dependency.path"/>
> >         <fileset refid="controls.fileset"/>
> >     </path>
> >
> >@@ -21,8 +20,6 @@
> >
> >         <mkdir dir="${module.classes.dir}"/>
> >
> >-        <antcall target="compile.schemas"/>
> >-
> >         <javac srcdir="${module.dir}"
> >                destdir="${module.classes.dir}"
> >                classpathref="module.classpath"
> >@@ -37,34 +34,10 @@
> >         <copy todir="${module.classes.dir}">
> >             <fileset dir="${module.dir}" includes="**/*.properties"/>
> >             <fileset dir="${module.dir}" includes="**/*.xml"/>
> >+            <fileset dir="${module.dir}" includes="**/*.xsd"/>
> >+            <fileset dir="${module.dir}" includes="**/*.dtd"/>
> >             <fileset dir="${module.dir}" includes="META-INF/**"/>
> >         </copy>
> >-    </target>
> >-
> >-    <target name="compile.schemas">
> >-        <!-- run the XMLBean compiler for the struts-config schema -->
> >-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
> >-            <property name="xsd.root.dir"
> >value="${module.dir}/schema/struts-config"/>
> >-            <property name="class.output.dir" value="${module.classes.dir}"/>
> >-            <property name="xbean.inputs"
> >value="${module.dir}/schema/struts-config/*.xsd*"/>
> >-            <property name="xbean.output"
> >value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/struts11/StrutsConfigDocument.class"/>
> >-        </ant>
> >-
> >-        <!-- run the XMLBean compiler for the struts-validator schema -->
> >-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
> >-            <property name="xsd.root.dir"
> >value="${module.dir}/schema/struts-validator"/>
> >-            <property name="class.output.dir" value="${module.classes.dir}"/>
> >-            <property name="xbean.inputs"
> >value="${module.dir}/schema/struts-validator/*.xsd*"/>
> >-            <property name="xbean.output"
> >value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/validator11/ValidatorDocument.class"/>
> >-        </ant>
> >-
> >-        <!-- run the XMLBean compiler for the processed-annotations schema -->
> >-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
> >-            <property name="xsd.root.dir"
> >value="${module.dir}/schema/processed-annotations"/>
> >-            <property name="class.output.dir" value="${module.classes.dir}"/>
> >-            <property name="xbean.inputs"
> >value="${module.dir}/schema/processed-annotations/*.xsd*"/>
> >-            <property name="xbean.output"
> >value="${module.classes.dir}/org/apache/beehive/netui/compiler/schema/annotations/ProcessedAnnotationsDocument.class"/>
> >-        </ant>
> >     </target>
> >
> >     <target name="clean">
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
> >Fri Sep 16 13:27:57 2005
> >@@ -24,49 +24,53 @@
> > import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
> > import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotationsDocument;
> >-import org.apache.beehive.netui.compiler.schema.annotations.AnnotatedElement;
> >-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotation;
> >-import org.apache.beehive.netui.compiler.schema.annotations.AnnotationAttribute;
> > import org.apache.beehive.netui.compiler.model.StrutsApp;
> >-import org.apache.xmlbeans.XmlOptions;
> >+import org.apache.beehive.netui.compiler.model.XmlModelWriter;
> >+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
> >+import org.w3c.dom.Element;
> >
> > import java.util.Map;
> > import java.util.Iterator;
> > import java.util.List;
> >+import java.util.Date;
> > import java.io.File;
> > import java.io.IOException;
> > import java.io.PrintWriter;
> >
> > public class AnnotationToXML
> > {
> >-    private static final String ANNOTATIONS_FILE_PREFIX = "jpf-annotations";
> >+    private static final String ANNOTATIONS_FILE_PREFIX = "annotations";
> >
> >-    private ProcessedAnnotationsDocument _doc;
> >+    private XmlModelWriter _xw;
> >     private TypeDeclaration _typeDecl;
> >
> >-    public AnnotationToXML( TypeDeclaration typeDecl )
> >+    public AnnotationToXML(TypeDeclaration typeDecl)
> >+            throws IOException, XmlModelWriterException
> >     {
> >-        _doc = ProcessedAnnotationsDocument.Factory.newInstance();
> >         _typeDecl = typeDecl;
> >-        ProcessedAnnotationsDocument.ProcessedAnnotations pa =
> >_doc.addNewProcessedAnnotations();
> >-        pa.setTypeName( typeDecl.getQualifiedName() );
> >+        String typeName = typeDecl.getQualifiedName();
> >+        StringBuffer comment = new StringBuffer(" Generated from ");
> >+        comment.append(typeName);
> >+        comment.append( " on " ).append( new Date().toString() ).append( ' ' );
> >+        _xw = new XmlModelWriter(null, "processed-annotations", null,
> >null, comment.toString());
> >+        _xw.addElementWithText(_xw.getRootElement(), "type-name", typeName);
> >     }
> >
> >     public void include( MemberDeclaration memberDecl,
> >AnnotationInstance annotation )
> >     {
> >-        AnnotatedElement element =
> >_doc.getProcessedAnnotations().addNewAnnotatedElement();
> >         String name = memberDecl instanceof TypeDeclaration
> >                       ? ( ( TypeDeclaration ) memberDecl ).getQualifiedName()
> >                       : memberDecl.getSimpleName();
> >-        element.setElementName( name );
> >-        ProcessedAnnotation xmlAnnotation = element.addNewAnnotation();
> >+        Element annotatedElement =
> >_xw.addElement(_xw.getRootElement(), "annotated-element");
> >+        _xw.addElementWithText(annotatedElement, "element-name", name);
> >+        Element xmlAnnotation = _xw.addElement(annotatedElement, "annotation");
> >         include( xmlAnnotation, annotation );
> >     }
> >
> >-    private void include( ProcessedAnnotation xmlAnnotation,
> >AnnotationInstance annotation )
> >+    private void include( Element xmlAnnotation, AnnotationInstance
> >annotation )
> >     {
> >-        xmlAnnotation.setAnnotationName(
> >annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName()
> >);
> >+        String annotationName =
> >annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName();
> >+        _xw.addElementWithText(xmlAnnotation, "annotation-name",
> >annotationName);
> >
> >         Map elementValues = annotation.getElementValues();
> >
> >@@ -78,8 +82,8 @@
> >
> >             String name = elementDecl.getSimpleName();
> >             Object value = annotationValue.getValue();
> >-            AnnotationAttribute xmlAttr =
> >xmlAnnotation.addNewAnnotationAttribute();
> >-            xmlAttr.setAttributeName( name );
> >+            Element xmlAttr = _xw.addElement(xmlAnnotation,
> >"annotation-attribute");
> >+            _xw.addElementWithText(xmlAttr, "attribute-name", name);
> >
> >             if ( value instanceof List )
> >             {
> >@@ -91,39 +95,35 @@
> >
> >                     // we only handle lists of annotations at the moment
> >                     assert listVal instanceof AnnotationInstance :
> >listVal.getClass().getName();
> >-                    include( xmlAttr.addNewAnnotationValue(), (
> >AnnotationInstance ) listVal );
> >+                    include(_xw.addElement(xmlAttr,
> >"annotation-value"), (AnnotationInstance) listVal);
> >                 }
> >             }
> >             else
> >             {
> >                 // we only support a few types at the moment
> >                 assert value instanceof TypeInstance || value
> >instanceof String : value.getClass().getName();
> >-                xmlAttr.setStringValue1( value.toString() );
> >+                _xw.addElementWithText(xmlAttr, "string-value",
> >value.toString());
> >             }
> >         }
> >     }
> >
> >     public void writeXml( Diagnostics diagnostics,
> >AnnotationProcessorEnvironment env )
> >+            throws IOException, XmlModelWriterException
> >     {
> >-        String typeName = _typeDecl.getQualifiedName();
> >-        String outputFilePath = StrutsApp.getOutputFileURI(
> >ANNOTATIONS_FILE_PREFIX, typeName, false );
> >-        PrintWriter writer = null;
> >-
> >-        try
> >-        {
> >-            XmlOptions options = new XmlOptions();
> >-            options.setSavePrettyPrint();
> >-            File outputFile = new File( outputFilePath );
> >-            writer = env.getFiler().createTextFile( outputFile );
> >-            _doc.save( writer, options );
> >-        }
> >-        catch ( IOException e )
> >-        {
> >-            diagnostics.addError( _typeDecl,
> >"error.could-not-generate", outputFilePath, e.getMessage() );
> >-        }
> >-        finally
> >-        {
> >-            if ( writer != null ) writer.close();
> >+        String outputFilePath = getFilePath(_typeDecl);
> >+        File outputFile = new File(outputFilePath);
> >+        PrintWriter writer = env.getFiler().createTextFile(outputFile);
> >+
> >+        try {
> >+            _xw.simpleFastWrite(writer);
> >+        } finally {
> >+            writer.close();
> >         }
> >+    }
> >+
> >+    public static String getFilePath(TypeDeclaration typeDecl)
> >+    {
> >+        String typeName = typeDecl.getQualifiedName();
> >+        return StrutsApp.getOutputFileURI( ANNOTATIONS_FILE_PREFIX,
> >typeName, false );
> >     }
> > }
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
> >Fri Sep 16 13:27:57 2005
> >@@ -22,8 +22,6 @@
> > import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >
> >-import java.io.File;
> >-
> > public class FacesBackingGenerator
> >         extends BaseGenerator
> >         implements JpfLanguageConstants
> >@@ -36,26 +34,32 @@
> >     public void generate( ClassDeclaration publicClass )
> >         throws FatalCompileTimeException
> >     {
> >-        AnnotationInstance facesBackingAnnotation =
> >CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
> >-        assert facesBackingAnnotation != null;  // checker should enforce this
> >-        AnnotationToXML atx = new AnnotationToXML( publicClass );
> >-
> >-        // Add the class-level @Jpf.FacesBacking annotation.
> >-        atx.include( publicClass, facesBackingAnnotation );
> >-
> >-        // For each method, add the @Jpf.CommandHandler annotation.
> >-        MethodDeclaration[] methods = CompilerUtils.getClassMethods(
> >publicClass, COMMAND_HANDLER_TAG_NAME );
> >-        for ( int i = 0; i < methods.length; i++ )
> >-        {
> >-            MethodDeclaration method = methods[i];
> >-            AnnotationInstance commandHandlerAnn =
> >CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
> >-            atx.include( method, commandHandlerAnn );
> >+        try {
> >+            AnnotationInstance facesBackingAnnotation =
> >CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
> >+            assert facesBackingAnnotation != null;  // checker should
> >enforce this
> >+            AnnotationToXML atx = new AnnotationToXML( publicClass );
> >+
> >+            // Add the class-level @Jpf.FacesBacking annotation.
> >+            atx.include( publicClass, facesBackingAnnotation );
> >+
> >+            // For each method, add the @Jpf.CommandHandler annotation.
> >+            MethodDeclaration[] methods =
> >CompilerUtils.getClassMethods( publicClass, COMMAND_HANDLER_TAG_NAME
> >);
> >+            for ( int i = 0; i < methods.length; i++ )
> >+            {
> >+                MethodDeclaration method = methods[i];
> >+                AnnotationInstance commandHandlerAnn =
> >CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
> >+                atx.include( method, commandHandlerAnn );
> >+            }
> >+
> >+            // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
> >+            FlowControllerGenerator.includeFieldAnnotations( atx,
> >publicClass, PAGE_FLOW_FIELD_TAG_NAME );
> >+
> >+            // Write the file.
> >+            atx.writeXml( getDiagnostics(), getEnv() );
> >+        } catch (Exception e) {
> >+            getDiagnostics().addError( publicClass, "error.could-not-generate",
> >+
> >AnnotationToXML.getFilePath(publicClass), e.getMessage() );
> >+            e.printStackTrace();  // TODO: log instead
> >         }
> >-
> >-        // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
> >-        FlowControllerGenerator.includeFieldAnnotations( atx,
> >publicClass, PAGE_FLOW_FIELD_TAG_NAME );
> >-
> >-        // Write the file.
> >-        atx.writeXml( getDiagnostics(), getEnv() );
> >     }
> > }
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
> >Fri Sep 16 13:27:57 2005
> >@@ -34,7 +34,6 @@
> > import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
> > import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> > import org.apache.beehive.netui.compiler.processor.SilentDiagnostics;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.FilenameFilter;
> >@@ -272,7 +271,7 @@
> >     }
> >
> >     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration jclass )
> >-        throws XmlException, IOException, FatalCompileTimeException;
> >+        throws IOException, FatalCompileTimeException;
> >
> >     protected void startCheckClass( ClassDeclaration jclass )
> >             throws FatalCompileTimeException
> >@@ -291,10 +290,6 @@
> >             strutsApp = createStrutsApp( jclass );
> >             strutsConfigFile = strutsApp.getStrutsConfigFile();
> >         }
> >-        catch ( XmlException e )
> >-        {
> >-            // will be reported at generate time
> >-        }
> >         catch ( IOException e )
> >         {
> >             // will be reported at generate time
> >@@ -302,8 +297,6 @@
> >
> >         if ( strutsConfigFile != null )
> >         {
> >-            File parentDir = strutsConfigFile.getParentFile();
> >-
> >             getFCSourceFileInfo().addReferencedFile( strutsConfigFile );
> >
> >             if ( strutsConfigFile.exists() && strutsApp != null && !
> >strutsApp.canWrite() )
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
> >Fri Sep 16 13:27:57 2005
> >@@ -24,7 +24,7 @@
> > import org.apache.beehive.netui.compiler.typesystem.declaration.FieldDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >-import org.apache.xmlbeans.XmlException;
> >+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
> >
> > import java.io.File;
> > import java.io.FileNotFoundException;
> >@@ -47,7 +47,7 @@
> >     }
> >
> >     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration cl )
> >-            throws XmlException, IOException, FatalCompileTimeException;
> >+            throws IOException, FatalCompileTimeException;
> >
> >     public void generate( ClassDeclaration publicClass )
> >     {
> >@@ -78,8 +78,7 @@
> >         catch ( Exception e )
> >         {
> >             e.printStackTrace();    // @TODO log
> >-            assert e instanceof XmlException || e instanceof
> >IOException || e instanceof FileNotFoundException
> >-                    : e.getClass().getName();
> >+            assert e instanceof IOException : e.getClass().getName();
> >             getDiagnostics().addError( publicClass, "error.could-not-generate",
> >                                        app != null ?
> >app.getStrutsConfigFile() : null, e.getMessage() );
> >         }
> >@@ -90,13 +89,18 @@
> >     }
> >
> >     private void writeFieldAnnotations( ClassDeclaration classDecl,
> >GenStrutsApp app )
> >-            throws FatalCompileTimeException
> >     {
> >-        AnnotationToXML atx = new AnnotationToXML( classDecl );
> >-
> >-        if ( includeFieldAnnotations( atx, classDecl, null ) )
> >-        {
> >-            atx.writeXml( getDiagnostics(), getEnv() );
> >+        try {
> >+            AnnotationToXML atx = new AnnotationToXML( classDecl );
> >+
> >+            if ( includeFieldAnnotations( atx, classDecl, null ) )
> >+            {
> >+                atx.writeXml( getDiagnostics(), getEnv() );
> >+            }
> >+        } catch (Exception e) {
> >+            getDiagnostics().addError(classDecl,
> >"error.could-not-generate", AnnotationToXML.getFilePath(classDecl),
> >+                                      e.getMessage() );
> >+            e.printStackTrace();  // TODO: log instead
> >         }
> >     }
> >
> >@@ -167,7 +171,7 @@
> >             e.printStackTrace();    // @TODO get rid of this
> >             assert e instanceof FileNotFoundException
> >                    || e instanceof IOException
> >-                   || e instanceof XmlException
> >+                   || e instanceof XmlModelWriterException
> >                     : e.getClass().getName();
> >
> >             getDiagnostics().addError( publicClass, "error.could-not-generate",
> >
> >Added: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java?rev=289648&view=auto
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
> >(added)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
> >Fri Sep 16 13:27:57 2005
> >@@ -0,0 +1,67 @@
> >+/*
> >+ * Copyright 2004 The Apache Software Foundation.
> >+ *
> >+ * Licensed under the Apache License, Version 2.0 (the "License");
> >+ * you may not use this file except in compliance with the License.
> >+ * You may obtain a copy of the License at
> >+ *
> >+ *     http://www.apache.org/licenses/LICENSE-2.0
> >+ *
> >+ * Unless required by applicable law or agreed to in writing, software
> >+ * distributed under the License is distributed on an "AS IS" BASIS,
> >+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
> >+ * See the License for the specific language governing permissions and
> >+ * limitations under the License.
> >+ *
> >+ * $Header:$
> >+ */
> >+package org.apache.beehive.netui.compiler;
> >+
> >+import org.xml.sax.EntityResolver;
> >+import org.xml.sax.InputSource;
> >+import org.xml.sax.SAXException;
> >+
> >+import java.io.IOException;
> >+import java.io.InputStream;
> >+
> >+/**
> >+ * Entity resolver that tries to find the resource locally (from
> >classloader, under
> >+ * org/apache/beehive/netui/compiler/resources) before trying to
> >resolve via the network.
> >+ */
> >+public class LocalFileEntityResolver implements EntityResolver
> >+{
> >+    private static final String RESORUCE_PATH_PREFIX =
> >"org/apache/beehive/netui/compiler/resources/";
> >+    private static final LocalFileEntityResolver INSTANCE = new
> >LocalFileEntityResolver();
> >+
> >+    protected LocalFileEntityResolver() {
> >+    }
> >+
> >+    public static LocalFileEntityResolver getInstance() {
> >+        return INSTANCE;
> >+    }
> >+
> >+    /**
> >+     * Resolve the entity.  First try to find it locally, then
> >fallback to the network.
> >+     */
> >+    public InputSource resolveEntity(String publicID, String
> >systemID) throws SAXException, IOException {
> >+        InputSource localFileInput = resolveLocalEntity(systemID);
> >+        return localFileInput != null ? localFileInput : new
> >InputSource(systemID);
> >+    }
> >+
> >+    /**
> >+     * Resolve the given entity locally.
> >+     */
> >+    public InputSource resolveLocalEntity(String systemID) throws
> >SAXException, IOException {
> >+        String localFileName = systemID;
> >+        int fileNameStart = localFileName.lastIndexOf('/') + 1;
> >+        if (fileNameStart < localFileName.length()) {
> >+            localFileName = systemID.substring(fileNameStart);
> >+        }
> >+        ClassLoader cl = LocalFileEntityResolver.class.getClassLoader();
> >+        InputStream stream =
> >cl.getResourceAsStream(RESORUCE_PATH_PREFIX + localFileName);
> >+        if (stream != null) {
> >+            return new InputSource(stream);
> >+        }
> >+        return null;
> >+    }
> >+}
> >
> >Propchange: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
> >------------------------------------------------------------------------------
> >    svn:eol-style = native
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
> >Fri Sep 16 13:27:57 2005
> >@@ -29,7 +29,6 @@
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> > import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
> > import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.IOException;
> >@@ -193,7 +192,7 @@
> >     }
> >
> >     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
> >-        throws XmlException, IOException, FatalCompileTimeException
> >+        throws IOException, FatalCompileTimeException
> >     {
> >         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
> >         return new GenStrutsApp( sourceFile, jclass, getEnv(),
> >getFCSourceFileInfo(), true, getDiagnostics() );
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
> >Fri Sep 16 13:27:57 2005
> >@@ -20,7 +20,6 @@
> > import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.IOException;
> >@@ -35,7 +34,7 @@
> >     }
> >
> >     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
> >-        throws XmlException, IOException, FatalCompileTimeException
> >+        throws IOException, FatalCompileTimeException
> >     {
> >         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
> >         return new GenStrutsApp( sourceFile, jclass, getEnv(),
> >getFCSourceFileInfo(), false, getDiagnostics() );
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
> >Fri Sep 16 13:27:57 2005
> >@@ -23,7 +23,6 @@
> > import org.apache.beehive.netui.compiler.grammar.InvalidAttributeType;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.IOException;
> >@@ -72,7 +71,7 @@
> >     }
> >
> >     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
> >-        throws XmlException, IOException, FatalCompileTimeException
> >+        throws IOException, FatalCompileTimeException
> >     {
> >         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
> >         return new GenSharedFlowStrutsApp( sourceFile, jclass,
> >getEnv(), getFCSourceFileInfo(), true, getDiagnostics() );
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
> >Fri Sep 16 13:27:57 2005
> >@@ -21,7 +21,6 @@
> > import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.IOException;
> >@@ -36,7 +35,7 @@
> >     }
> >
> >     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
> >-            throws XmlException, IOException, FatalCompileTimeException
> >+            throws IOException, FatalCompileTimeException
> >     {
> >         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
> >         return new GenSharedFlowStrutsApp( sourceFile, jclass,
> >getEnv(), getFCSourceFileInfo(), false, getDiagnostics() );
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
> >Fri Sep 16 13:27:57 2005
> >@@ -15,6 +15,7 @@
> > error.atmost-one-may-exist-6 = Only one of attributes "{0}", "{1}",
> >"{2}", "{3}", "{4}", or "{5}" may be present.
> > error.attr-dependency-not-found-1 = Attribute "{0}" may only be
> >present when attribute "{1}" is present.
> > error.attr-dependency-not-found-2 = Attribute "{0}" may only be
> >present when attribute "{1}" or "{2}" is present.
> >+error.attr-dependency-not-found-3 = Attribute "{0}" may only be
> >present when one of attributes "{1}", "{2}", or "{3}" is present.
> > error.unresolved-exception-handler = No exception handler method
> >named "{0}" could be found.
> > error.invalid-parent-directory = Could not create parent directory "{0}".
> > error.struts-config-not-writable = Cannot write to "{0}".
> >@@ -78,7 +79,7 @@
> > error.xml-parse-error = Error while parsing {0} (line {1}, column {2}): {3}
> > error.xml-parse-error-nocolumn = Error while parsing {0} (line {1}): {2}
> > error.xml-parse-error-nolinecolumn = Error while parsing {0}: {1}
> >-error.xml-read-error = Could not load {0}: {1}.
> >+error.xml-read-error = Could not load {0} due to {1}: {2}.
> >
> > error.invalid-uri = This URI is invalid: {0}
> > error.relative-uri = This attribute requires a relative path.
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
> >Fri Sep 16 13:27:57 2005
> >@@ -23,7 +23,6 @@
> > import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> > import org.apache.beehive.netui.compiler.Diagnostics;
> > import org.apache.beehive.netui.compiler.FatalCompileTimeException;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.IOException;
> >@@ -35,7 +34,7 @@
> > {
> >     public GenSharedFlowStrutsApp( File sourceFile, ClassDeclaration
> >jclass, AnnotationProcessorEnvironment env,
> >                                    FlowControllerInfo fcInfo, boolean
> >checkOnly, Diagnostics diagnostics )
> >-            throws XmlException, IOException, FatalCompileTimeException
> >+            throws IOException, FatalCompileTimeException
> >     {
> >         super( sourceFile, jclass, env, fcInfo, checkOnly, diagnostics );
> >         recalculateStrutsConfigFile();  // it changes based on _isGlobalApp
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
> >Fri Sep 16 13:27:57 2005
> >@@ -28,20 +28,16 @@
> > import org.apache.beehive.netui.compiler.model.ForwardModel;
> > import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
> > import org.apache.beehive.netui.compiler.model.StrutsApp;
> >+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.Modifier;
> >-import org.apache.beehive.netui.compiler.typesystem.declaration.PackageDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.ParameterDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> > import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
> > import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> >-import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
> >-import org.apache.xmlbeans.XmlCursor;
> >-import org.apache.xmlbeans.XmlException;
> >-import org.apache.xmlbeans.XmlObject;
> >
> > import java.io.File;
> > import java.io.FileNotFoundException;
> >@@ -68,7 +64,7 @@
> >     private FlowControllerInfo _fcInfo;
> >
> >     protected void recalculateStrutsConfigFile()
> >-        throws XmlException, IOException, FatalCompileTimeException
> >+        throws IOException, FatalCompileTimeException
> >     {
> >         _strutsConfigFile = calculateStrutsConfigFile(); // caching this
> >     }
> >@@ -80,7 +76,7 @@
> >
> >     public GenStrutsApp( File sourceFile, ClassDeclaration jclass,
> >AnnotationProcessorEnvironment env,
> >                          FlowControllerInfo fcInfo, boolean
> >checkOnly, Diagnostics diagnostics )
> >-        throws XmlException, IOException, FatalCompileTimeException
> >+        throws IOException, FatalCompileTimeException
> >     {
> >         super( jclass.getQualifiedName() );
> >
> >@@ -328,9 +324,19 @@
> >     }
> >
> >     public void writeToFile()
> >-        throws FileNotFoundException, IOException, XmlException,
> >FatalCompileTimeException
> >+        throws FileNotFoundException, IOException,
> >XmlModelWriterException, FatalCompileTimeException
> >     {
> >-        writeToFile( getMergeFile( getMergeFileName() ) );
> >+        File strutsMergeFile = getMergeFile( getMergeFileName() );
> >+        PrintWriter writer = getEnv().getFiler().createTextFile(
> >_strutsConfigFile );
> >+
> >+        try
> >+        {
> >+            writeXml( writer, strutsMergeFile );
> >+        }
> >+        finally
> >+        {
> >+            writer.close();
> >+        }
> >     }
> >
> >     public boolean isStale()
> >@@ -419,23 +425,8 @@
> >
> >         return true;
> >     }
> >-
> >-
> >-    public void writeToFile( File strutsMergeFile )
> >-        throws FileNotFoundException, IOException, XmlException,
> >FatalCompileTimeException
> >-    {
> >-        PrintWriter writer = getEnv().getFiler().createTextFile(
> >_strutsConfigFile );
> >-
> >-        try
> >-        {
> >-            writeXml( writer, strutsMergeFile );
> >-        }
> >-        finally
> >-        {
> >-            writer.close();
> >-        }
> >-    }
> >-
> >+
> >+
> >     public File getStrutsConfigFile()
> >     {
> >         return _strutsConfigFile;
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
> >Fri Sep 16 13:27:57 2005
> >@@ -20,9 +20,9 @@
> > import org.apache.beehive.netui.compiler.CompilerUtils;
> > import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> > import org.apache.beehive.netui.compiler.MergedControllerAnnotation;
> >-import org.apache.beehive.netui.compiler.Diagnostics;
> > import org.apache.beehive.netui.compiler.FatalCompileTimeException;
> > import org.apache.beehive.netui.compiler.model.FormBeanModel;
> >+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
> > import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
> > import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
> > import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
> >@@ -37,13 +37,10 @@
> > import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> > import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >-import org.apache.xmlbeans.XmlException;
> >
> > import java.io.File;
> > import java.io.FileNotFoundException;
> >-import java.io.FileOutputStream;
> > import java.io.IOException;
> >-import java.io.PrintStream;
> > import java.io.PrintWriter;
> > import java.util.Collection;
> > import java.util.Iterator;
> >@@ -430,7 +427,7 @@
> >     }
> >
> >     public void writeToFile()
> >-        throws FileNotFoundException, XmlException, IOException,
> >FatalCompileTimeException
> >+        throws FileNotFoundException, IOException,
> >FatalCompileTimeException, XmlModelWriterException
> >     {
> >         String outputFilePath = getOutputFileURI();
> >         File outputFile = new File( outputFilePath );
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
> >Fri Sep 16 13:27:57 2005
> >@@ -21,28 +21,28 @@
> > import org.apache.beehive.netui.compiler.AnnotationMemberType;
> > import org.apache.beehive.netui.compiler.FlowControllerInfo;
> > import org.apache.beehive.netui.compiler.Diagnostics;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.StrutsConfigDocument;
> >-import org.apache.beehive.netui.compiler.model.schema.validator11.FormValidationDocument;
> > import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> >
> >+import java.net.URL;
> >+
> >
> > public class ControllerGrammar
> >         extends BaseFlowControllerGrammar
> >-{
> >+{
> >     public ControllerGrammar( AnnotationProcessorEnvironment env,
> >Diagnostics diags, RuntimeVersionChecker rvc,
> >                               FlowControllerInfo fcInfo )
> >     {
> >         super( env, diags, null, rvc, fcInfo );
> >-
> >+
> >         addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType(
> >null, this ) );
> >         addMemberType( ROLES_ALLOWED_ATTR, new RolesAllowedType( this ) );
> >         addMemberType( READONLY_ATTR, new AnnotationMemberType( null, this ) );
> >-        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
> >StrutsConfigDocument.type, null, this, fcInfo ) );
> >+        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
> >"struts-config_1_1.xsd", null, this, fcInfo ) );
> >         addMemberType( VALIDATOR_VERSION_ATTR, new
> >AnnotationMemberType( null, this ) );
> >-        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
> >FormValidationDocument.type, null, this, fcInfo ) );
> >+        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
> >"struts-validator_1_1.xsd", null, this, fcInfo ) );
> >         addMemberType( TILES_DEFINITIONS_CONFIGS_ATTR, new
> >TilesDefinitionsConfigsType( null, this, fcInfo ) );
> >         addMemberType( MULTIPART_HANDLER_ATTR, new
> >AnnotationMemberType( null, this ) );
> >-
> >+
> >         addMemberArrayGrammar( SHARED_FLOW_REFS_ATTR, new
> >SharedFlowRefGrammar( env, diags, rvc ) );
> >         addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar(
> >env, diags, null, rvc, fcInfo ) );
> >         addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env,
> >diags, null, rvc, CONTROLLER_TAG_NAME, fcInfo ) );
> >@@ -50,7 +50,7 @@
> >         addMemberArrayGrammar( VALIDATABLE_BEANS_ATTR, new
> >ValidatableBeanGrammar( env, diags, rvc ) );
> >         addMemberArrayGrammar( SIMPLE_ACTIONS_ATTR, new
> >SimpleActionGrammar( env, diags, rvc, fcInfo ) );
> >     }
> >-
> >+
> >     public String[][] getMutuallyExclusiveAttrs()
> >     {
> >         return null;
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
> >Fri Sep 16 13:27:57 2005
> >@@ -19,154 +19,159 @@
> >
> > import org.apache.beehive.netui.compiler.AnnotationGrammar;
> > import org.apache.beehive.netui.compiler.FlowControllerInfo;
> >-import org.apache.xmlbeans.SchemaType;
> >-import org.apache.xmlbeans.XmlOptions;
> >-import org.apache.xmlbeans.XmlObject;
> >-import org.apache.xmlbeans.XmlError;
> >-import org.apache.xmlbeans.XmlException;
> >+import org.apache.beehive.netui.compiler.LocalFileEntityResolver;
> > import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
> >+import org.xml.sax.SAXParseException;
> >+import org.xml.sax.SAXException;
> >+import org.xml.sax.InputSource;
> >+import org.xml.sax.helpers.DefaultHandler;
> >
> >+import javax.xml.parsers.DocumentBuilderFactory;
> >+import javax.xml.parsers.DocumentBuilder;
> > import java.util.Map;
> > import java.util.Collections;
> > import java.util.HashMap;
> >-import java.util.List;
> >-import java.util.ArrayList;
> > import java.io.File;
> >+import java.io.IOException;
> >
> >
> > public class ValidXmlFileType
> >         extends WebappPathType
> > {
> >-    private SchemaType _schema;
> >+    private String _schemaFileName;
> >     private static Map _parseResults = Collections.synchronizedMap(
> >new HashMap() );
> >-
> >-    public ValidXmlFileType( SchemaType schema, String
> >requiredRuntimeVersion, AnnotationGrammar parentGrammar,
> >+
> >+    public ValidXmlFileType( String schemaFileName, String
> >requiredRuntimeVersion, AnnotationGrammar parentGrammar,
> >                              FlowControllerInfo fcInfo )
> >     {
> >         super( false, requiredRuntimeVersion, parentGrammar, fcInfo );
> >-        _schema = schema;
> >+        assert schemaFileName != null;
> >+        _schemaFileName = schemaFileName;
> >     }
> >
> >-
> >+
> >     protected boolean checkAnyExtension()
> >     {
> >         return true;
> >     }
> >
> >-
> >+
> >     protected boolean doFatalError()
> >     {
> >         return true;
> >     }
> >-
> >-
> >+
> >+
> >     protected boolean ignoreDirectories()
> >     {
> >         return false;
> >     }
> >-
> >-
> >+
> >+
> >     protected boolean allowFileInPageFlowSourceDir()
> >     {
> >         return true;
> >     }
> >-
> >-
> >+
> >+
> >     protected void runAdditionalChecks( File file, AnnotationValue value )
> >     {
> >-        try
> >+
> >+        //
> >+        // We cache the results of parsing the file until the file is
> >actually modified,
> >+        // so we don't end up continually re-parsing it.
> >+        //
> >+        ParseResults prevResults = ( ParseResults )
> >_parseResults.get( file.getPath() );
> >+        long lastModTime = file.lastModified();
> >+
> >+        if ( prevResults == null || lastModTime >
> >prevResults.getFileModTime() )
> >         {
> >-            //
> >-            // We cache the results of parsing the file until the
> >file is actually modified,
> >-            // so we don't end up continually re-parsing it.
> >-            //
> >-            ParseResults prevResults = ( ParseResults )
> >_parseResults.get( file.getPath() );
> >-
> >-            if ( prevResults == null || file.lastModified() >
> >prevResults.getFileModTime() )
> >+            try
> >             {
> >-                try
> >-                {
> >-                    XmlOptions options = new XmlOptions();
> >-                    options.setDocumentType( _schema );
> >-                    XmlObject xml = XmlObject.Factory.parse( file, options );
> >-                    List errorListener = new ArrayList();
> >-                    options.setErrorListener( errorListener );
> >-
> >-                    if ( !xml.validate( options ) )
> >-                    {
> >-                        assert !errorListener.isEmpty();
> >-
> >-                        XmlError err = ( XmlError ) errorListener.get( 0 );
> >-                        assert err != null;
> >-
> >-                        throw new XmlException( err.getMessage(), null, err );
> >-                    }
> >-                }
> >-                catch ( Exception e )
> >-                {
> >-                    _parseResults.put( file.getPath(), new
> >ParseResults( file.lastModified(), e ) );
> >-                    throw e;
> >+                LocalFileEntityResolver entityResolver =
> >LocalFileEntityResolver.getInstance();
> >+                InputSource schemaInput =
> >entityResolver.resolveLocalEntity(_schemaFileName);
> >+                assert schemaInput != null : "could not get schema
> >resource for " + _schemaFileName;
> >+                DocumentBuilderFactory factory =
> >DocumentBuilderFactory.newInstance();
> >+                factory.setNamespaceAware(true);
> >+                factory.setValidating(true);
> >+                factory.setAttribute(
> >"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
> >+                                      "http://www.w3.org/2001/XMLSchema");
> >+                factory.setAttribute(
> >"http://java.sun.com/xml/jaxp/properties/schemaSource", schemaInput);
> >+                DocumentBuilder builder = factory.newDocumentBuilder();
> >+
> >builder.setEntityResolver(LocalFileEntityResolver.getInstance());
> >+                Validator handler = new Validator(lastModTime, file, value);
> >+                builder.setErrorHandler(handler);
> >+                builder.parse(file);
> >+                if (handler.hadErrors()) {
> >+                    return;
> >                 }
> >-
> >-                _parseResults.put( file.getPath(), new ParseResults(
> >file.lastModified(), null ) );
> >             }
> >-            else
> >+            catch ( SAXParseException e )
> >             {
> >-                Exception e = prevResults.getException();
> >-
> >-                if ( e != null )
> >-                {
> >-                    throw e;
> >-                }
> >+                addErrorDiagnostic( file, e, value );
> >+                _parseResults.put( file.getPath(), new ParseResults(
> >lastModTime, e ) );
> >+                return;
> >             }
> >+            catch ( Exception e )
> >+            {
> >+                _parseResults.put( file.getPath(), new ParseResults(
> >lastModTime, e ) );
> >+                addError( value, "error.xml-read-error",
> >+                          new Object[]{ file.getPath(),
> >e.getClass().getName(), e.getMessage() } );
> >+                return;
> >+            }
> >+
> >+            _parseResults.put( file.getPath(), new ParseResults(
> >lastModTime, null ) );
> >         }
> >-        catch ( XmlException e )
> >-        {
> >-            addErrorDiagnostic( e.getError(), value );
> >-        }
> >-        catch ( Exception e )
> >+        else
> >         {
> >-            addError( value, "error.xml-read-error", new Object[]{
> >file.getPath(), e.getMessage() } );
> >+            Exception e = prevResults.getException();
> >+
> >+            if (e instanceof SAXParseException) {
> >+                addErrorDiagnostic(file, (SAXParseException) e, value);
> >+            } else if (e != null) {
> >+                addError( value, "error.xml-read-error",
> >+                          new Object[]{ file.getPath(),
> >e.getClass().getName(), e.getMessage() } );
> >+            }
> >         }
> >     }
> >-
> >-    private void addErrorDiagnostic( XmlError err, AnnotationValue value )
> >+
> >+    private void addErrorDiagnostic( File file, SAXParseException
> >err, AnnotationValue value )
> >     {
> >-        if ( err.getColumn() != -1 && err.getLine() != -1 )
> >+        if ( err.getColumnNumber() != -1 && err.getLineNumber() != -1 )
> >         {
> >             Object[] args =
> >                     {
> >-                        err.getSourceName(),
> >-                        new Integer( err.getLine() ),
> >-                        new Integer( err.getColumn() ),
> >+                        file.getPath(),
> >+                        new Integer( err.getLineNumber() ),
> >+                        new Integer( err.getColumnNumber() ),
> >                         err.getMessage()
> >                     };
> >-
> >+
> >             addError( value, "error.xml-parse-error", args );
> >         }
> >-        else if ( err.getLine() != -1 )
> >+        else if ( err.getLineNumber() != -1 )
> >         {
> >             Object[] args =
> >             {
> >-                err.getSourceName(),
> >-                new Integer( err.getLine() ),
> >+                file.getPath(),
> >+                new Integer( err.getLineNumber() ),
> >                 err.getMessage()
> >             };
> >-
> >+
> >             addError( value, "error.xml-parse-error-nocolumn", args );
> >-        }
> >+        }
> >         else
> >         {
> >             Object[] args =
> >             {
> >-                err.getSourceName(),
> >+                file.getPath(),
> >                 err.getMessage()
> >             };
> >-
> >+
> >             addError( value, "error.xml-parse-error-nolinecolumn", args );
> >         }
> >     }
> >-
> >+
> >     private static class ParseResults
> >     {
> >         private long _fileModTime;
> >@@ -196,6 +201,46 @@
> >         public void setException( Exception exception )
> >         {
> >             _exception = exception;
> >+        }
> >+    }
> >+
> >+    private class Validator extends DefaultHandler {
> >+
> >+        private long _fileModTime;
> >+        private File _file;
> >+        private AnnotationValue _value;
> >+        private boolean _hadErrors = false;
> >+
> >+        public Validator(long fileModTime, File file, AnnotationValue value) {
> >+            _fileModTime = fileModTime;
> >+            _file = file;
> >+            _value = value;
> >+        }
> >+
> >+        public void error(SAXParseException ex)
> >+                throws SAXException {
> >+            ParseResults results = new ParseResults(_fileModTime, ex);
> >+            addErrorDiagnostic(_file, ex, _value );
> >+            _parseResults.put(_file.getPath(), results);
> >+            _hadErrors = true;
> >+        }
> >+
> >+        public void fatalError(SAXParseException ex)
> >+                throws SAXException {
> >+            error(ex);
> >+        }
> >+
> >+        public void warning(SAXParseException exception)
> >+                throws SAXException {
> >+            // TODO: add a compiler warning?
> >+        }
> >+
> >+        public boolean hadErrors() {
> >+            return _hadErrors;
> >+        }
> >+
> >+        public InputSource resolveEntity(String publicId, String
> >systemId) throws IOException, SAXException {
> >+            return super.resolveEntity(publicId, systemId);
> >         }
> >     }
> > }
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
> >Fri Sep 16 13:27:57 2005
> >@@ -17,8 +17,7 @@
> >  */
> > package org.apache.beehive.netui.compiler.model;
> >
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
> >-import org.apache.xmlbeans.XmlObject;
> >+import org.w3c.dom.Element;
> >
> > import java.util.LinkedHashMap;
> > import java.util.Iterator;
> >@@ -71,28 +70,13 @@
> >         return ( ForwardModel ) _forwards.get( forwardName );
> >     }
> >
> >-    public void writeForwards( ForwardDocument.Forward[]
> >existingForwards, XmlObject xmlForwardContainer )
> >+    public void writeForwards( XmlModelWriter xw, Element
> >forwardsParentElement )
> >     {
> >         for ( Iterator i = _forwards.values().iterator(); i.hasNext(); )
> >         {
> >             ForwardModel fwd = ( ForwardModel ) i.next();
> >-            ForwardDocument.Forward fwdToEdit = null;
> >-
> >-            for ( int j = 0; j < existingForwards.length; ++j )
> >-            {
> >-                if ( fwd.getName().equals( existingForwards[j].getName() ) )
> >-                {
> >-                    fwdToEdit = existingForwards[j];
> >-                    break;
> >-                }
> >-            }
> >-
> >-            if ( fwdToEdit == null )
> >-            {
> >-                fwdToEdit = addNewForward( xmlForwardContainer );
> >-            }
> >-
> >-            fwd.writeToXMLBean( fwdToEdit );
> >+            Element fwdToEdit = findChildElement(xw,
> >forwardsParentElement, "forward", "name", fwd.getName(), true);
> >+            fwd.writeXML( xw, fwdToEdit );
> >         }
> >     }
> >
> >@@ -112,6 +96,5 @@
> >     {
> >         _forwards.remove( forward.getName() );
> >     }
> >-
> >-    protected abstract ForwardDocument.Forward addNewForward(
> >XmlObject xmlForwardContainer );
> >+
> > }
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
> >Fri Sep 16 13:27:57 2005
> >@@ -22,13 +22,8 @@
> > import java.util.LinkedHashMap;
> > import java.util.Iterator;
> >
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument.Action;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument;
> > import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> >-import org.apache.xmlbeans.XmlObject;
> >+import org.w3c.dom.Element;
> >
> >
> > /**
> >@@ -43,11 +38,10 @@
> >
> >     private static final String JPF_ACTION_MAPPING_CLASSNAME =
> >PAGEFLOW_PACKAGE + ".config.PageFlowActionMapping";
> >
> >-
> >+
> >     // Struts attributes.
> >     private ArrayList _exceptionCatches = new ArrayList();
> >     private String _attribute;
> >-    private String _className;
> >     private String _forward;
> >     private String _include;
> >     private String _input;
> >@@ -88,7 +82,7 @@
> >         this._path = path;
> >         this._formBeanName = formName;
> >     }
> >-
> >+
> >     protected ActionModel( StrutsApp parent )
> >     {
> >         this( null, null, parent );
> >@@ -96,7 +90,7 @@
> >
> >     /**
> >      * Construct a copy of the given mapping, with the given path.
> >-     */
> >+     */
> >     public ActionModel( ActionModel src, String newPath )
> >     {
> >         super( src );
> >@@ -104,7 +98,6 @@
> >         this._formBeanName = src._formBeanName;
> >         _exceptionCatches = ( ArrayList ) src._exceptionCatches.clone();
> >         _attribute = src._attribute;
> >-        _className = src._className;
> >         _forward = src._forward;
> >         _include = src._include;
> >         _input = src._input;
> >@@ -126,127 +119,70 @@
> >         _unqualifiedActionPath = src._unqualifiedActionPath;
> >         _defaultForwardName = src._defaultForwardName;
> >     }
> >-
> >+
> >     public void setFormBeanName( String formBeanName )
> >     {
> >         _formBeanName = formBeanName;
> >     }
> >-
> >-    public void writeToXMLBean( Action xb )
> >+
> >+    protected void writeToElement(XmlModelWriter xw, Element element)
> >     {
> >-        xb.setPath( _path );
> >-
> >-        if ( xb.getName() == null && _formBeanName != null )
> >xb.setName( _formBeanName );
> >-        if ( xb.getClassName() == null && _className != null )
> >xb.setClassName( _className );
> >-        if ( xb.getType() == null && _type != null ) xb.setType( _type );
> >-        if ( xb.getAttribute() == null && _attribute != null )
> >xb.setAttribute( _attribute );
> >-        if ( xb.getInput() == null && _input != null ) xb.setInput( _input );
> >-        if ( xb.getParameter() == null && _parameter != null )
> >xb.setParameter( _parameter );
> >-        if ( xb.getPrefix() == null && _prefix != null )
> >xb.setPrefix( _prefix );
> >-        if ( xb.getSuffix() == null && _suffix != null )
> >xb.setSuffix( _suffix );
> >-
> >-        if ( xb.getScope() == null )
> >-        {
> >-            if ( _scope != null )
> >-            {
> >-                if ( _scope.equals( "request" ) )
> >-                {
> >-                    xb.setScope( Action.Scope.REQUEST );
> >-                }
> >-                else if ( _scope.equals( "session" ) )
> >-                {
> >-                    xb.setScope( Action.Scope.SESSION );
> >-                }
> >-                else
> >-                {
> >-                    assert false : _scope;
> >-                }
> >-            }
> >-            else
> >-            {
> >-                xb.setScope( Action.Scope.REQUEST );
> >-            }
> >-        }
> >-
> >-        if ( xb.getRoles() == null && _roles != null ) xb.setRoles( _roles );
> >-        if ( xb.getForward2() == null &&  _forward != null )
> >xb.setForward2( _forward );
> >-        if ( xb.getInclude() == null && _include != null )
> >xb.setInclude( _include );
> >-        if ( xb.getUnknown() == null && _unknown ) xb.setUnknown(
> >Action.Unknown.TRUE );
> >-        if ( xb.getValidate() == null ) xb.setValidate( _validate ?
> >Action.Validate.TRUE : Action.Validate.FALSE );
> >-
> >-        if (  _unqualifiedActionPath != null ) addSetProperty( xb,
> >"unqualifiedActionPath", _unqualifiedActionPath );
> >-        if ( _formMember != null ) addSetProperty( xb, "formMember",
> >_formMember );
> >-        if ( _formClass != null ) addSetProperty( xb, "formClass",
> >_formClass );
> >-        if ( _loginRequired ) addSetProperty( xb, "loginRequired",
> >_loginRequired );
> >-        if ( _preventDoubleSubmit ) addSetProperty( xb,
> >"preventDoubleSubmit", _preventDoubleSubmit );
> >-        if ( _isOverloaded ) addSetProperty( xb, "overloaded", _isOverloaded );
> >-        if ( _readonly ) addSetProperty( xb, "readonly", _readonly );
> >-        if ( _isSimpleAction ) addSetProperty( xb, "simpleAction",
> >_isSimpleAction );
> >-        if ( _defaultForwardName != null ) addSetProperty( xb,
> >"defaultForward", _defaultForwardName );
> >-
> >+        element.setAttribute("path", _path);
> >+        setElementAttribute(element, "name", _formBeanName);
> >+        setElementAttribute(element, "className", getClassName());
> >+        setElementAttribute(element, "type", _type);
> >+        setElementAttribute(element, "attribute", _attribute);
> >+        setElementAttribute(element, "input", _input);
> >+        setElementAttribute(element, "parameter", _parameter);
> >+        setElementAttribute(element, "prefix", _prefix);
> >+        setElementAttribute(element, "suffix", _suffix);
> >+        setElementAttribute(element, "scope", _scope != null ? _scope
> >: "request");
> >+        setElementAttribute(element, "roles", _roles);
> >+        setElementAttribute(element, "forward", _forward);
> >+        setElementAttribute(element, "include", _include);
> >+        setElementAttribute(element, "validate",
> >Boolean.toString(_validate));  // always set the value, even if false
> >+        addSetProperty( xw, element, "unqualifiedActionPath",
> >_unqualifiedActionPath );
> >+        addSetProperty( xw, element, "formMember", _formMember );
> >+        addSetProperty( xw, element, "formClass", _formClass );
> >+        addSetProperty( xw, element, "loginRequired", _loginRequired );
> >+        addSetProperty( xw, element, "preventDoubleSubmit",
> >_preventDoubleSubmit );
> >+        addSetProperty( xw, element, "overloaded", _isOverloaded );
> >+        addSetProperty( xw, element, "readonly", _readonly );
> >+        addSetProperty( xw, element, "simpleAction", _isSimpleAction );
> >+        addSetProperty( xw, element, "defaultForward", _defaultForwardName );
> >+        addSetProperty( xw, element, "formBeanMessageResourcesKey",
> >_formBeanMessageResourcesKey );
> >+
> >         if ( _conditionalForwards != null )
> >         {
> >-            addSetProperty( xb, "conditionalForwards", getMapString(
> >_conditionalForwards) );
> >-        }
> >-
> >-        if ( _formBeanMessageResourcesKey != null )
> >-        {
> >-            addSetProperty( xb, "formBeanMessageResourcesKey",
> >_formBeanMessageResourcesKey );
> >+            addSetProperty( xw, element, "conditionalForwards",
> >getMapString( _conditionalForwards) );
> >         }
> >-
> >+
> >         if ( _exceptionCatches != null && ! _exceptionCatches.isEmpty() )
> >         {
> >-            ExceptionDocument.Exception[] existingExceptions =
> >xb.getExceptionArray();
> >-
> >             for ( int i = 0; i < _exceptionCatches.size(); ++i )
> >             {
> >                 ExceptionModel ec = ( ExceptionModel )
> >_exceptionCatches.get( i );
> >-                ExceptionDocument.Exception exceptionToEdit = null;
> >-
> >-                for ( int j = 0; j < existingExceptions.length; ++j )
> >-                {
> >-                    if ( ec.getType().equals(
> >existingExceptions[j].getType() ) )
> >-                    {
> >-                        exceptionToEdit = existingExceptions[j];
> >-                        break;
> >-                    }
> >-                }
> >-
> >-                if ( exceptionToEdit == null )
> >-                {
> >-                    exceptionToEdit = xb.addNewException();
> >-                }
> >-
> >-                ec.writeToXMLBean( exceptionToEdit );
> >+                Element exceptionToEdit = findChildElement(xw,
> >element, "exception", "type", ec.getType(), true);
> >+                ec.writeXML( xw, exceptionToEdit );
> >             }
> >         }
> >-
> >+
> >         //
> >         // forwards
> >         //
> >-        writeForwards( xb.getForwardArray(), xb );
> >-
> >-        addComment( xb );
> >-    }
> >-
> >-    private void addSetProperty( ActionDocument.Action xb, String
> >propertyName, boolean propertyValue )
> >-    {
> >-        addSetProperty( xb, propertyName, Boolean.toString( propertyValue ) );
> >+        writeForwards( xw, element );
> >     }
> >-
> >-    private void addSetProperty( ActionDocument.Action xb, String
> >propertyName, String propertyValue )
> >+
> >+    private void addSetProperty( XmlModelWriter xw, Element element,
> >String propertyName, boolean propertyValue )
> >     {
> >-        SetProperty prop = xb.addNewSetProperty();
> >-        prop.setProperty( propertyName );
> >-        prop.setValue( propertyValue );
> >-        if ( xb.getClassName() == null ) xb.setClassName(
> >JPF_ACTION_MAPPING_CLASSNAME );
> >+        if (propertyValue) addSetProperty( xw, element, propertyName,
> >Boolean.toString( propertyValue ) );
> >     }
> >-
> >-    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
> >+
> >+    private void addSetProperty( XmlModelWriter xw, Element element,
> >String propertyName, String propertyValue )
> >     {
> >-        return ( ( Action ) xmlObject ).addNewForward();
> >+        setCustomProperty(xw, element, propertyName, propertyValue,
> >JPF_ACTION_MAPPING_CLASSNAME);
> >     }
> >-
> >+
> >     /**
> >      * Implemented for {@link ExceptionContainer}.
> >      */
> >@@ -265,16 +201,6 @@
> >         this._attribute = attribute;
> >     }
> >
> >-    public String getClassName()
> >-    {
> >-        return _className;
> >-    }
> >-
> >-    public void setClassName( String className )
> >-    {
> >-        this._className = className;
> >-    }
> >-
> >     public String getForward()
> >     {
> >         return _forward;
> >@@ -309,7 +235,7 @@
> >     {
> >         return _formBeanName;
> >     }
> >-
> >+
> >     public String getFormBeanName()
> >     {
> >         return _formBeanName;
> >@@ -344,7 +270,7 @@
> >     {
> >         return _path;
> >     }
> >-
> >+
> >     public String getPath( boolean useUnqualifiedPath )
> >     {
> >         if ( useUnqualifiedPath && _unqualifiedActionPath != null )
> >@@ -446,7 +372,7 @@
> >     {
> >         _loginRequired = loginRequired;
> >     }
> >-
> >+
> >     public void setPreventDoubleSubmit( boolean preventDoubleSubmit )
> >     {
> >         _preventDoubleSubmit = preventDoubleSubmit;
> >@@ -501,23 +427,23 @@
> >     {
> >         _readonly = readonly;
> >     }
> >-
> >+
> >     public void addConditionalForward( String expression, String forwardName )
> >     {
> >         if ( _conditionalForwards == null ) _conditionalForwards =
> >new LinkedHashMap();
> >         _conditionalForwards.put( expression, forwardName );
> >     }
> >-
> >+
> >     private static String getMapString( Map map )
> >     {
> >         StringBuffer retVal = new StringBuffer();
> >-
> >+
> >         for ( Iterator i = map.entrySet().iterator(); i.hasNext(); )
> >         {
> >             Map.Entry entry = ( Map.Entry ) i.next();
> >             retVal.append( entry.getValue() ).append( ':' ).append(
> >entry.getKey() ).append( ';' );
> >         }
> >-
> >+
> >         return retVal.toString();
> >     }
> >
> >@@ -525,6 +451,6 @@
> >     {
> >         _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
> >     }
> >-
> >+
> >
> > }
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
> >Fri Sep 16 13:27:57 2005
> >@@ -17,10 +17,8 @@
> >  */
> > package org.apache.beehive.netui.compiler.model;
> >
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
> >-import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
> > import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> >+import org.w3c.dom.Element;
> >
> > public class ExceptionModel
> >         extends StrutsElementSupport
> >@@ -36,18 +34,18 @@
> >     private boolean _inheritedPath = false;
> >
> >     private static final String JPF_EXCEPTION_CONFIG_CLASSNAME =
> >PAGEFLOW_PACKAGE + ".config.PageFlowExceptionConfig";
> >-
> >-
> >+
> >+
> >     protected ExceptionModel( StrutsApp parentApp )
> >     {
> >         super( parentApp );
> >     }
> >-
> >+
> >     public ExceptionModel( String type, String path, String
> >handlerMethod, String message,
> >                            String messageKey, StrutsApp parentApp )
> >     {
> >         super( parentApp );
> >-
> >+
> >         _type = type;
> >         _path = path;
> >         _handlerMethod = handlerMethod;
> >@@ -115,56 +113,55 @@
> >         _handlerClass = handlerClass;
> >     }
> >
> >-    public void writeToXMLBean( ExceptionDocument.Exception xb )
> >-
> >+    protected void writeToElement(XmlModelWriter xw, Element element)
> >     {
> >-        xb.setType( _type );
> >+        element.setAttribute("type", _type);
> >
> >-        if ( xb.getPath() == null && _path != null )
> >+        if ( _path != null )
> >         {
> >             boolean relativeToModule = ! _path.startsWith( "/" );
> >-
> >+
> >             if ( relativeToModule )
> >             {
> >-                xb.setPath( "/" + _path );  // struts wants "/" --
> >assumes this is module-relative path
> >+                // struts wants "/" -- assumes this is module-relative path
> >+                setElementAttribute(element, "path", '/' + _path);
> >             }
> >             else
> >             {
> >-                xb.setPath( _path );
> >-                addSetProperty( xb, "isPathContextRelative", "true" );
> >+                setElementAttributeMayBeEmpty(element, "path", _path);
> >+                addSetProperty(xw, element, "isPathContextRelative", "true" );
> >             }
> >         }
> >-
> >-        if ( _inheritedPath ) addSetProperty( xb, "inheritedPath", "true" );
> >-
> >-        if ( xb.getKey() == null && _messageKey != null ) xb.setKey(
> >_messageKey );
> >-
> >+
> >+        if ( _inheritedPath ) addSetProperty(xw, element,
> >"inheritedPath", "true" );
> >+
> >+        //
> >+        // Set the message key.  If there isn't one, use the typename
> >as the message key.
> >+        setElementAttribute(element, "key", _messageKey);
> >+        if (_messageKey == null) setElementAttribute(element, "key", _type);
> >+
> >         //
> >         // Struts doesn't support "message" directly -- we'll add
> >this as a custom property.
> >         //
> >-        if ( _message != null ) addSetProperty( xb, "defaultMessage",
> >_message );
> >-
> >-        if ( xb.getKey() == null ) xb.setKey( _type );
> >-
> >+        addSetProperty(xw, element, "defaultMessage", _message );
> >+
> >         //
> >         // Note that we're setting the handler *method* as the
> >handler.  This would break Struts.
> >         //
> >-        if ( xb.getHandler() == null && _handlerMethod != null &&
> >_handlerClass == null )
> >-        {
> >-            xb.setHandler( _handlerMethod );
> >-            addSetProperty( xb, "isHandlerMethod", "true" );
> >+        if ( _handlerMethod != null && _handlerClass == null ) {
> >+            setElementAttribute(element, "handler", _handlerMethod);
> >+            addSetProperty(xw, element, "isHandlerMethod", "true" );
> >+        }
> >+        else {
> >+            setElementAttribute(element, "handler", _handlerClass);
> >         }
> >-
> >-        if ( _readonly ) addSetProperty( xb, "readonly", "true" );
> >-        if ( xb.getHandler() == null && _handlerClass != null )
> >xb.setHandler( _handlerClass );
> >-    }
> >-
> >-    private void addSetProperty( ExceptionDocument.Exception xb,
> >String propertyName, String propertyValue )
> >-    {
> >-        SetProperty prop = xb.addNewSetProperty();
> >-        prop.setProperty( propertyName );
> >-        prop.setValue( propertyValue );
> >-        if ( xb.getClassName() == null ) xb.setClassName(
> >JPF_EXCEPTION_CONFIG_CLASSNAME );
> >+
> >+        if ( _readonly ) addSetProperty(xw, element, "readonly", "true" );
> >+    }
> >+
> >+    private void addSetProperty( XmlModelWriter xw, Element element,
> >String propertyName, String propertyValue )
> >+    {
> >+        setCustomProperty(xw, element, propertyName, propertyValue,
> >JPF_EXCEPTION_CONFIG_CLASSNAME);
> >     }
> >
> >     public boolean isReadonly()
> >
> >Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
> >URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java?rev=289648&r1=289647&r2=289648&view=diff
> >==============================================================================
> >--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
> >(original)
> >+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
> >Fri Sep 16 13:27:57 2005
> >@@ -21,9 +21,8 @@
> > import java.util.Collection;
> > import java.util.List;
> >
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.FormBeanDocument;
> >-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
> > import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> >+import org.w3c.dom.Element;
> >
> >
> > /**
> >@@ -90,18 +89,17 @@
> >     }
> >
> >
> >-    private static final String JPF_ACTION_FORM_BEAN_CLASSNAME =
> >PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
> >+    private static final String CUSTOM_ACTION_FORM_BEAN_CLASSNAME =
> >PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
> >
> >     private String _id = "";  // NOI18N
> >-    private String _className = null;
> >     private boolean _dynamic = false;
> >     private String _name = null;  // required to be set
> >     private String _type = null;  // required to be set
> >-
> >-    /** This is a NetUI-specific property. */
> >+
> >+    /** This is a NetUI-specific property. */
> >     private String _actualType = null;
> >-
> >-    /** This is a NetUI-specific property. */
> >+
> >+    /** This is a NetUI-specific property. */
> >     private boolean _pageFlowScoped;  // required to be set
> >
> >     private ArrayList _properties = new ArrayList();
> >@@ -115,25 +113,21 @@
> >         _pageFlowScoped = pageFlowScoped;
> >     }
> >
> >-    public void writeToXMLBean( FormBeanDocument.FormBean xb )
> >+    protected void writeToElement(XmlModelWriter xw, Element element)
> >     {
> >-        xb.setName( _name );
> >+        element.setAttribute("name", _name);
> >
> >-        if ( xb.getType() == null ) xb.setType( _type );
> >-        if ( xb.getId() == null && _id != null && _id.length() > 0 )
> >xb.setId( _id );
> >-        if ( xb.getClassName() == null &&_className != null )
> >xb.setClassName( _className );
> >-        if ( xb.getDynamic() == null && _dynamic ) xb.setDynamic(
> >FormBeanDocument.FormBean.Dynamic.TRUE );
> >-
> >-        if ( _actualType != null && ! _actualType.equals( xb.getType() ) )
> >-        {
> >-            SetProperty prop = xb.addNewSetProperty();
> >-            prop.setProperty( "actualType" );
> >-            prop.setValue( _actualType );
> >-            if ( xb.getClassName() == null ) xb.setClassName(
> >JPF_ACTION_FORM_BEAN_CLASSNAME );
> >-        }
> >+        setElementAttribute(element, "type", _type);
> >+        setElementAttribute(element, "id", _id);
> >+        setElementAttribute(element, "className", getClassName());
> >+        setElementAttribute(element, "dynamic", _dynamic);
> >
> >+        if ( _actualType != null && !
> >_actualType.equals(element.getAttribute("type")) )
> >+        {
> >+            setCustomProperty(xw, element, "actualType", _actualType,
> >CUSTOM_ACTION_FORM_BEAN_CLASSNAME);
> >+        }
> >     }
> >-
> >+
> >     public String getId()
> >     {
> >         return _id;
> >@@ -144,11 +138,6 @@
> >         _id = id;
> >     }
> >
> >-    public String getClassName()
> >-    {
> >-        return _className;
> >-    }
> >-
> >     public void setClassName( String className )
> >     {
> >         if ( className != null )
> >@@ -156,7 +145,7 @@
> >             if ("org.apache.struts.action.DynaActionForm".equals(
> >className ) )  // NOI18N
> >                 _dynamic = true;
> >
> >-            _className = className;
> >+            setClassName(className);
> >         }
> >     }
> >
> >
> >
>

Re: Fwd: svn commit: r289648 [1/6] - in /beehive/trunk/netui: src/compiler-core/ src/compiler-core/org/apache/beehive/netui/compiler/ src/compiler-core/org/apache/beehive/netui/compiler/genmodel/ src/compiler-core/org/apache/beehive/netui/compiler/gramma

Posted by Rich Feit <ri...@gmail.com>.
Great, thanks for verifying it.  We're definitely on our way!
Rich

Eddie O'Neil wrote:

>Rich--
>
>  Excellent!  Great to have the compiler moved over.
>
>  I've just finished test runs on Linux (FC3) and on WinXP -- both
>passed at 100% for the JUnit, compiler, and test recorder tests.
> 
>  I'll be working on the distribution part of this next.
>
>Eddie
>
>
>
>---------- Forwarded message ----------
>From: rich@apache.org <ri...@apache.org>
>Date: Sep 16, 2005 2:30 PM
>Subject: svn commit: r289648 [1/6] - in /beehive/trunk/netui:
>src/compiler-core/
>src/compiler-core/org/apache/beehive/netui/compiler/
>src/compiler-core/org/apache/beehive/netui/compiler/genmodel/
>src/compiler-core/org/apache/beehive/netui/compiler/grammar/ src/...
>To: commits@beehive.apache.org
>
>
>Author: rich
>Date: Fri Sep 16 13:27:57 2005
>New Revision: 289648
>
>URL: http://svn.apache.org/viewcvs?rev=289648&view=rev
>Log:
>Moved the NetUI compiler layer off of XMLBeans. The generated files
>(struts-config-*.xml, pageflow-validation-*.xml, annotations-*.xml)
>are now created (and merged, if Struts Merge or Validator Merge is
>used) through APIs in the JDK.
>
>tests: bvt in netui (WinXP)
>BB: bvt, run.tests against a dist (linux)
>
>
>Added:
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlElementSupport.java
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriter.java
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriterException.java
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.dtd
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.xsd
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-validator_1_1.xsd
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_0.dtd
>  (with props)
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_1.dtd
>  (with props)
>    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInterfaceParser.java
>  (with props)
>    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/env/FilerImpl.java
>  (with props)
>Removed:
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldFactory.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldOld.java
>    beehive/trunk/netui/src/compiler-core/schema/struts-config/
>    beehive/trunk/netui/src/compiler-core/schema/struts-validator/
>Modified:
>    beehive/trunk/netui/src/compiler-core/build.xml
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ForwardModel.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsApp.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java
>    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java
>    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInstanceImpl.java
>    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/DeclarationImpl.java
>    beehive/trunk/netui/src/compiler/build.xml
>    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnnotationReader.java
>    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/OutputHandler.java
>    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/PageFlowCompilerTest.java
>    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/TestPropertyMgr.java
>    beehive/trunk/netui/test/src/compilerTests/testsuite/GA_DeprecationWarning/expectedOutput/struts-config--global.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira390/expectedOutput/struts-config-Jira390.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_NewReturnTo/expectedOutput/struts-config-Nested_NewReturnTo.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionMethodOverload/expectedOutput/struts-config-PF_ActionMethodOverload.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionNegatives/expectedOutput/struts-config-PF_ActionNegatives.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionReadOnly/expectedOutput/struts-config-PF_ActionReadOnly.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionUseFormBean/expectedOutput/struts-config-PF_ActionUseFormBean.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionWithForm/expectedOutput/struts-config-PF_ActionWithForm.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_AnyNumberActionForward/expectedOutput/struts-config-PF_AnyNumberActionForward.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_CatchExceptionHandler/expectedOutput/struts-config-PF_CatchExceptionHandler.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_DeprecatedExceptionHandler/expectedOutput/struts-config-PF_DeprecatedExceptionHandler.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardNotInActionOrController/expectedOutput/struts-config-PF_ForwardNotInActionOrController.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardRedirect/expectedOutput/struts-config-PF_ForwardRedirect.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardSyntax/expectedOutput/struts-config-PF_ForwardSyntax.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_InvalidAnnotations/expectedOutput/struts-config-PF_InvalidAnnotations.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_JustBeginAction/expectedOutput/struts-config-PF_JustBeginAction.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_LongLivedTrue/expectedOutput/struts-config-PF_LongLivedTrue.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_MissingForwardJPF/expectedOutput/struts-config-MissingForwardJPF.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RedirectWithNavigateTo/expectedOutput/struts-config-PF_RedirectWithNavigateTo.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RolesAllowed/expectedOutput/struts-config-PF_RolesAllowed.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameGlobalActionForwardName/expectedOutput/struts-config-PF_SameGlobalActionForwardName.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameMethodNameSig/expectedOutput/struts-config-PF_SameMethodNameSig.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionValidationErrForward/expectedOutput/struts-config-PF_TwoActionValidationErrForward.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionsSameForward/expectedOutput/struts-config-PF_TwoActionsSameForward.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoBeginAction/expectedOutput/struts-config-PF_TwoBeginAction.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ValidateErrorForward/expectedOutput/struts-config-PF_ValidateErrorForward.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongActionMember/expectedOutput/struts-config-PF_WrongActionMember.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongControlLocation/expectedOutput/struts-config-PF_WrongControlLocation.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin-parent.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride-parent.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath-parent.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction-parent.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config--SF_ImplicitReferences.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config-SF_ImplicitReferences.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config--SF_ImplicitReferencesNested.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config-SF_ImplicitReferencesNested.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config--SF_InvalidRelativePath.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config-SF_InvalidRelativePath.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/retrievePopupOutput/expectedOutput/struts-config-retrievePopupOutput.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleActionReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleActionReadOnlyUseFormBeanWarning.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent-childFlow.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride-childFlow.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInvalidPathWarning/expectedOutput/struts-config-simpleInvalidPathWarning.expected
>    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleReadOnlyUseFormBeanWarning.expected
>    beehive/trunk/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml
>
>Modified: beehive/trunk/netui/src/compiler-core/build.xml
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/build.xml?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/build.xml (original)
>+++ beehive/trunk/netui/src/compiler-core/build.xml Fri Sep 16 13:27:57 2005
>@@ -9,7 +9,6 @@
>     <property name="module.classes.dir"
>location="${classes.dir}/${module.name}"/>
>
>     <path id="module.classpath">
>-        <path refid="xbean.dependency.path"/>
>         <fileset refid="controls.fileset"/>
>     </path>
>
>@@ -21,8 +20,6 @@
>
>         <mkdir dir="${module.classes.dir}"/>
>
>-        <antcall target="compile.schemas"/>
>-
>         <javac srcdir="${module.dir}"
>                destdir="${module.classes.dir}"
>                classpathref="module.classpath"
>@@ -37,34 +34,10 @@
>         <copy todir="${module.classes.dir}">
>             <fileset dir="${module.dir}" includes="**/*.properties"/>
>             <fileset dir="${module.dir}" includes="**/*.xml"/>
>+            <fileset dir="${module.dir}" includes="**/*.xsd"/>
>+            <fileset dir="${module.dir}" includes="**/*.dtd"/>
>             <fileset dir="${module.dir}" includes="META-INF/**"/>
>         </copy>
>-    </target>
>-
>-    <target name="compile.schemas">
>-        <!-- run the XMLBean compiler for the struts-config schema -->
>-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
>-            <property name="xsd.root.dir"
>value="${module.dir}/schema/struts-config"/>
>-            <property name="class.output.dir" value="${module.classes.dir}"/>
>-            <property name="xbean.inputs"
>value="${module.dir}/schema/struts-config/*.xsd*"/>
>-            <property name="xbean.output"
>value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/struts11/StrutsConfigDocument.class"/>
>-        </ant>
>-
>-        <!-- run the XMLBean compiler for the struts-validator schema -->
>-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
>-            <property name="xsd.root.dir"
>value="${module.dir}/schema/struts-validator"/>
>-            <property name="class.output.dir" value="${module.classes.dir}"/>
>-            <property name="xbean.inputs"
>value="${module.dir}/schema/struts-validator/*.xsd*"/>
>-            <property name="xbean.output"
>value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/validator11/ValidatorDocument.class"/>
>-        </ant>
>-
>-        <!-- run the XMLBean compiler for the processed-annotations schema -->
>-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
>-            <property name="xsd.root.dir"
>value="${module.dir}/schema/processed-annotations"/>
>-            <property name="class.output.dir" value="${module.classes.dir}"/>
>-            <property name="xbean.inputs"
>value="${module.dir}/schema/processed-annotations/*.xsd*"/>
>-            <property name="xbean.output"
>value="${module.classes.dir}/org/apache/beehive/netui/compiler/schema/annotations/ProcessedAnnotationsDocument.class"/>
>-        </ant>
>     </target>
>
>     <target name="clean">
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
>Fri Sep 16 13:27:57 2005
>@@ -24,49 +24,53 @@
> import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
> import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotationsDocument;
>-import org.apache.beehive.netui.compiler.schema.annotations.AnnotatedElement;
>-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotation;
>-import org.apache.beehive.netui.compiler.schema.annotations.AnnotationAttribute;
> import org.apache.beehive.netui.compiler.model.StrutsApp;
>-import org.apache.xmlbeans.XmlOptions;
>+import org.apache.beehive.netui.compiler.model.XmlModelWriter;
>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
>+import org.w3c.dom.Element;
>
> import java.util.Map;
> import java.util.Iterator;
> import java.util.List;
>+import java.util.Date;
> import java.io.File;
> import java.io.IOException;
> import java.io.PrintWriter;
>
> public class AnnotationToXML
> {
>-    private static final String ANNOTATIONS_FILE_PREFIX = "jpf-annotations";
>+    private static final String ANNOTATIONS_FILE_PREFIX = "annotations";
>
>-    private ProcessedAnnotationsDocument _doc;
>+    private XmlModelWriter _xw;
>     private TypeDeclaration _typeDecl;
>
>-    public AnnotationToXML( TypeDeclaration typeDecl )
>+    public AnnotationToXML(TypeDeclaration typeDecl)
>+            throws IOException, XmlModelWriterException
>     {
>-        _doc = ProcessedAnnotationsDocument.Factory.newInstance();
>         _typeDecl = typeDecl;
>-        ProcessedAnnotationsDocument.ProcessedAnnotations pa =
>_doc.addNewProcessedAnnotations();
>-        pa.setTypeName( typeDecl.getQualifiedName() );
>+        String typeName = typeDecl.getQualifiedName();
>+        StringBuffer comment = new StringBuffer(" Generated from ");
>+        comment.append(typeName);
>+        comment.append( " on " ).append( new Date().toString() ).append( ' ' );
>+        _xw = new XmlModelWriter(null, "processed-annotations", null,
>null, comment.toString());
>+        _xw.addElementWithText(_xw.getRootElement(), "type-name", typeName);
>     }
>
>     public void include( MemberDeclaration memberDecl,
>AnnotationInstance annotation )
>     {
>-        AnnotatedElement element =
>_doc.getProcessedAnnotations().addNewAnnotatedElement();
>         String name = memberDecl instanceof TypeDeclaration
>                       ? ( ( TypeDeclaration ) memberDecl ).getQualifiedName()
>                       : memberDecl.getSimpleName();
>-        element.setElementName( name );
>-        ProcessedAnnotation xmlAnnotation = element.addNewAnnotation();
>+        Element annotatedElement =
>_xw.addElement(_xw.getRootElement(), "annotated-element");
>+        _xw.addElementWithText(annotatedElement, "element-name", name);
>+        Element xmlAnnotation = _xw.addElement(annotatedElement, "annotation");
>         include( xmlAnnotation, annotation );
>     }
>
>-    private void include( ProcessedAnnotation xmlAnnotation,
>AnnotationInstance annotation )
>+    private void include( Element xmlAnnotation, AnnotationInstance
>annotation )
>     {
>-        xmlAnnotation.setAnnotationName(
>annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName()
>);
>+        String annotationName =
>annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName();
>+        _xw.addElementWithText(xmlAnnotation, "annotation-name",
>annotationName);
>
>         Map elementValues = annotation.getElementValues();
>
>@@ -78,8 +82,8 @@
>
>             String name = elementDecl.getSimpleName();
>             Object value = annotationValue.getValue();
>-            AnnotationAttribute xmlAttr =
>xmlAnnotation.addNewAnnotationAttribute();
>-            xmlAttr.setAttributeName( name );
>+            Element xmlAttr = _xw.addElement(xmlAnnotation,
>"annotation-attribute");
>+            _xw.addElementWithText(xmlAttr, "attribute-name", name);
>
>             if ( value instanceof List )
>             {
>@@ -91,39 +95,35 @@
>
>                     // we only handle lists of annotations at the moment
>                     assert listVal instanceof AnnotationInstance :
>listVal.getClass().getName();
>-                    include( xmlAttr.addNewAnnotationValue(), (
>AnnotationInstance ) listVal );
>+                    include(_xw.addElement(xmlAttr,
>"annotation-value"), (AnnotationInstance) listVal);
>                 }
>             }
>             else
>             {
>                 // we only support a few types at the moment
>                 assert value instanceof TypeInstance || value
>instanceof String : value.getClass().getName();
>-                xmlAttr.setStringValue1( value.toString() );
>+                _xw.addElementWithText(xmlAttr, "string-value",
>value.toString());
>             }
>         }
>     }
>
>     public void writeXml( Diagnostics diagnostics,
>AnnotationProcessorEnvironment env )
>+            throws IOException, XmlModelWriterException
>     {
>-        String typeName = _typeDecl.getQualifiedName();
>-        String outputFilePath = StrutsApp.getOutputFileURI(
>ANNOTATIONS_FILE_PREFIX, typeName, false );
>-        PrintWriter writer = null;
>-
>-        try
>-        {
>-            XmlOptions options = new XmlOptions();
>-            options.setSavePrettyPrint();
>-            File outputFile = new File( outputFilePath );
>-            writer = env.getFiler().createTextFile( outputFile );
>-            _doc.save( writer, options );
>-        }
>-        catch ( IOException e )
>-        {
>-            diagnostics.addError( _typeDecl,
>"error.could-not-generate", outputFilePath, e.getMessage() );
>-        }
>-        finally
>-        {
>-            if ( writer != null ) writer.close();
>+        String outputFilePath = getFilePath(_typeDecl);
>+        File outputFile = new File(outputFilePath);
>+        PrintWriter writer = env.getFiler().createTextFile(outputFile);
>+
>+        try {
>+            _xw.simpleFastWrite(writer);
>+        } finally {
>+            writer.close();
>         }
>+    }
>+
>+    public static String getFilePath(TypeDeclaration typeDecl)
>+    {
>+        String typeName = typeDecl.getQualifiedName();
>+        return StrutsApp.getOutputFileURI( ANNOTATIONS_FILE_PREFIX,
>typeName, false );
>     }
> }
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
>Fri Sep 16 13:27:57 2005
>@@ -22,8 +22,6 @@
> import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>
>-import java.io.File;
>-
> public class FacesBackingGenerator
>         extends BaseGenerator
>         implements JpfLanguageConstants
>@@ -36,26 +34,32 @@
>     public void generate( ClassDeclaration publicClass )
>         throws FatalCompileTimeException
>     {
>-        AnnotationInstance facesBackingAnnotation =
>CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
>-        assert facesBackingAnnotation != null;  // checker should enforce this
>-        AnnotationToXML atx = new AnnotationToXML( publicClass );
>-
>-        // Add the class-level @Jpf.FacesBacking annotation.
>-        atx.include( publicClass, facesBackingAnnotation );
>-
>-        // For each method, add the @Jpf.CommandHandler annotation.
>-        MethodDeclaration[] methods = CompilerUtils.getClassMethods(
>publicClass, COMMAND_HANDLER_TAG_NAME );
>-        for ( int i = 0; i < methods.length; i++ )
>-        {
>-            MethodDeclaration method = methods[i];
>-            AnnotationInstance commandHandlerAnn =
>CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
>-            atx.include( method, commandHandlerAnn );
>+        try {
>+            AnnotationInstance facesBackingAnnotation =
>CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
>+            assert facesBackingAnnotation != null;  // checker should
>enforce this
>+            AnnotationToXML atx = new AnnotationToXML( publicClass );
>+
>+            // Add the class-level @Jpf.FacesBacking annotation.
>+            atx.include( publicClass, facesBackingAnnotation );
>+
>+            // For each method, add the @Jpf.CommandHandler annotation.
>+            MethodDeclaration[] methods =
>CompilerUtils.getClassMethods( publicClass, COMMAND_HANDLER_TAG_NAME
>);
>+            for ( int i = 0; i < methods.length; i++ )
>+            {
>+                MethodDeclaration method = methods[i];
>+                AnnotationInstance commandHandlerAnn =
>CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
>+                atx.include( method, commandHandlerAnn );
>+            }
>+
>+            // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
>+            FlowControllerGenerator.includeFieldAnnotations( atx,
>publicClass, PAGE_FLOW_FIELD_TAG_NAME );
>+
>+            // Write the file.
>+            atx.writeXml( getDiagnostics(), getEnv() );
>+        } catch (Exception e) {
>+            getDiagnostics().addError( publicClass, "error.could-not-generate",
>+                                      
>AnnotationToXML.getFilePath(publicClass), e.getMessage() );
>+            e.printStackTrace();  // TODO: log instead
>         }
>-
>-        // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
>-        FlowControllerGenerator.includeFieldAnnotations( atx,
>publicClass, PAGE_FLOW_FIELD_TAG_NAME );
>-
>-        // Write the file.
>-        atx.writeXml( getDiagnostics(), getEnv() );
>     }
> }
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
>Fri Sep 16 13:27:57 2005
>@@ -34,7 +34,6 @@
> import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
> import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> import org.apache.beehive.netui.compiler.processor.SilentDiagnostics;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.FilenameFilter;
>@@ -272,7 +271,7 @@
>     }
>
>     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>-        throws XmlException, IOException, FatalCompileTimeException;
>+        throws IOException, FatalCompileTimeException;
>
>     protected void startCheckClass( ClassDeclaration jclass )
>             throws FatalCompileTimeException
>@@ -291,10 +290,6 @@
>             strutsApp = createStrutsApp( jclass );
>             strutsConfigFile = strutsApp.getStrutsConfigFile();
>         }
>-        catch ( XmlException e )
>-        {
>-            // will be reported at generate time
>-        }
>         catch ( IOException e )
>         {
>             // will be reported at generate time
>@@ -302,8 +297,6 @@
>
>         if ( strutsConfigFile != null )
>         {
>-            File parentDir = strutsConfigFile.getParentFile();
>-
>             getFCSourceFileInfo().addReferencedFile( strutsConfigFile );
>
>             if ( strutsConfigFile.exists() && strutsApp != null && !
>strutsApp.canWrite() )
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
>Fri Sep 16 13:27:57 2005
>@@ -24,7 +24,7 @@
> import org.apache.beehive.netui.compiler.typesystem.declaration.FieldDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>-import org.apache.xmlbeans.XmlException;
>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
>
> import java.io.File;
> import java.io.FileNotFoundException;
>@@ -47,7 +47,7 @@
>     }
>
>     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration cl )
>-            throws XmlException, IOException, FatalCompileTimeException;
>+            throws IOException, FatalCompileTimeException;
>
>     public void generate( ClassDeclaration publicClass )
>     {
>@@ -78,8 +78,7 @@
>         catch ( Exception e )
>         {
>             e.printStackTrace();    // @TODO log
>-            assert e instanceof XmlException || e instanceof
>IOException || e instanceof FileNotFoundException
>-                    : e.getClass().getName();
>+            assert e instanceof IOException : e.getClass().getName();
>             getDiagnostics().addError( publicClass, "error.could-not-generate",
>                                        app != null ?
>app.getStrutsConfigFile() : null, e.getMessage() );
>         }
>@@ -90,13 +89,18 @@
>     }
>
>     private void writeFieldAnnotations( ClassDeclaration classDecl,
>GenStrutsApp app )
>-            throws FatalCompileTimeException
>     {
>-        AnnotationToXML atx = new AnnotationToXML( classDecl );
>-
>-        if ( includeFieldAnnotations( atx, classDecl, null ) )
>-        {
>-            atx.writeXml( getDiagnostics(), getEnv() );
>+        try {
>+            AnnotationToXML atx = new AnnotationToXML( classDecl );
>+
>+            if ( includeFieldAnnotations( atx, classDecl, null ) )
>+            {
>+                atx.writeXml( getDiagnostics(), getEnv() );
>+            }
>+        } catch (Exception e) {
>+            getDiagnostics().addError(classDecl,
>"error.could-not-generate", AnnotationToXML.getFilePath(classDecl),
>+                                      e.getMessage() );
>+            e.printStackTrace();  // TODO: log instead
>         }
>     }
>
>@@ -167,7 +171,7 @@
>             e.printStackTrace();    // @TODO get rid of this
>             assert e instanceof FileNotFoundException
>                    || e instanceof IOException
>-                   || e instanceof XmlException
>+                   || e instanceof XmlModelWriterException
>                     : e.getClass().getName();
>
>             getDiagnostics().addError( publicClass, "error.could-not-generate",
>
>Added: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java?rev=289648&view=auto
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>(added)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>Fri Sep 16 13:27:57 2005
>@@ -0,0 +1,67 @@
>+/*
>+ * Copyright 2004 The Apache Software Foundation.
>+ *
>+ * Licensed under the Apache License, Version 2.0 (the "License");
>+ * you may not use this file except in compliance with the License.
>+ * You may obtain a copy of the License at
>+ *
>+ *     http://www.apache.org/licenses/LICENSE-2.0
>+ *
>+ * Unless required by applicable law or agreed to in writing, software
>+ * distributed under the License is distributed on an "AS IS" BASIS,
>+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
>+ * See the License for the specific language governing permissions and
>+ * limitations under the License.
>+ *
>+ * $Header:$
>+ */
>+package org.apache.beehive.netui.compiler;
>+
>+import org.xml.sax.EntityResolver;
>+import org.xml.sax.InputSource;
>+import org.xml.sax.SAXException;
>+
>+import java.io.IOException;
>+import java.io.InputStream;
>+
>+/**
>+ * Entity resolver that tries to find the resource locally (from
>classloader, under
>+ * org/apache/beehive/netui/compiler/resources) before trying to
>resolve via the network.
>+ */
>+public class LocalFileEntityResolver implements EntityResolver
>+{
>+    private static final String RESORUCE_PATH_PREFIX =
>"org/apache/beehive/netui/compiler/resources/";
>+    private static final LocalFileEntityResolver INSTANCE = new
>LocalFileEntityResolver();
>+
>+    protected LocalFileEntityResolver() {
>+    }
>+
>+    public static LocalFileEntityResolver getInstance() {
>+        return INSTANCE;
>+    }
>+
>+    /**
>+     * Resolve the entity.  First try to find it locally, then
>fallback to the network.
>+     */
>+    public InputSource resolveEntity(String publicID, String
>systemID) throws SAXException, IOException {
>+        InputSource localFileInput = resolveLocalEntity(systemID);
>+        return localFileInput != null ? localFileInput : new
>InputSource(systemID);
>+    }
>+
>+    /**
>+     * Resolve the given entity locally.
>+     */
>+    public InputSource resolveLocalEntity(String systemID) throws
>SAXException, IOException {
>+        String localFileName = systemID;
>+        int fileNameStart = localFileName.lastIndexOf('/') + 1;
>+        if (fileNameStart < localFileName.length()) {
>+            localFileName = systemID.substring(fileNameStart);
>+        }
>+        ClassLoader cl = LocalFileEntityResolver.class.getClassLoader();
>+        InputStream stream =
>cl.getResourceAsStream(RESORUCE_PATH_PREFIX + localFileName);
>+        if (stream != null) {
>+            return new InputSource(stream);
>+        }
>+        return null;
>+    }
>+}
>
>Propchange: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
>------------------------------------------------------------------------------
>    svn:eol-style = native
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
>Fri Sep 16 13:27:57 2005
>@@ -29,7 +29,6 @@
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
> import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.IOException;
>@@ -193,7 +192,7 @@
>     }
>
>     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>-        throws XmlException, IOException, FatalCompileTimeException
>+        throws IOException, FatalCompileTimeException
>     {
>         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>         return new GenStrutsApp( sourceFile, jclass, getEnv(),
>getFCSourceFileInfo(), true, getDiagnostics() );
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
>Fri Sep 16 13:27:57 2005
>@@ -20,7 +20,6 @@
> import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
> import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.IOException;
>@@ -35,7 +34,7 @@
>     }
>
>     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>-        throws XmlException, IOException, FatalCompileTimeException
>+        throws IOException, FatalCompileTimeException
>     {
>         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>         return new GenStrutsApp( sourceFile, jclass, getEnv(),
>getFCSourceFileInfo(), false, getDiagnostics() );
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
>Fri Sep 16 13:27:57 2005
>@@ -23,7 +23,6 @@
> import org.apache.beehive.netui.compiler.grammar.InvalidAttributeType;
> import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.IOException;
>@@ -72,7 +71,7 @@
>     }
>
>     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>-        throws XmlException, IOException, FatalCompileTimeException
>+        throws IOException, FatalCompileTimeException
>     {
>         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>         return new GenSharedFlowStrutsApp( sourceFile, jclass,
>getEnv(), getFCSourceFileInfo(), true, getDiagnostics() );
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
>Fri Sep 16 13:27:57 2005
>@@ -21,7 +21,6 @@
> import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
> import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.IOException;
>@@ -36,7 +35,7 @@
>     }
>
>     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
>-            throws XmlException, IOException, FatalCompileTimeException
>+            throws IOException, FatalCompileTimeException
>     {
>         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
>         return new GenSharedFlowStrutsApp( sourceFile, jclass,
>getEnv(), getFCSourceFileInfo(), false, getDiagnostics() );
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
>Fri Sep 16 13:27:57 2005
>@@ -15,6 +15,7 @@
> error.atmost-one-may-exist-6 = Only one of attributes "{0}", "{1}",
>"{2}", "{3}", "{4}", or "{5}" may be present.
> error.attr-dependency-not-found-1 = Attribute "{0}" may only be
>present when attribute "{1}" is present.
> error.attr-dependency-not-found-2 = Attribute "{0}" may only be
>present when attribute "{1}" or "{2}" is present.
>+error.attr-dependency-not-found-3 = Attribute "{0}" may only be
>present when one of attributes "{1}", "{2}", or "{3}" is present.
> error.unresolved-exception-handler = No exception handler method
>named "{0}" could be found.
> error.invalid-parent-directory = Could not create parent directory "{0}".
> error.struts-config-not-writable = Cannot write to "{0}".
>@@ -78,7 +79,7 @@
> error.xml-parse-error = Error while parsing {0} (line {1}, column {2}): {3}
> error.xml-parse-error-nocolumn = Error while parsing {0} (line {1}): {2}
> error.xml-parse-error-nolinecolumn = Error while parsing {0}: {1}
>-error.xml-read-error = Could not load {0}: {1}.
>+error.xml-read-error = Could not load {0} due to {1}: {2}.
>
> error.invalid-uri = This URI is invalid: {0}
> error.relative-uri = This attribute requires a relative path.
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
>Fri Sep 16 13:27:57 2005
>@@ -23,7 +23,6 @@
> import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> import org.apache.beehive.netui.compiler.Diagnostics;
> import org.apache.beehive.netui.compiler.FatalCompileTimeException;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.IOException;
>@@ -35,7 +34,7 @@
> {
>     public GenSharedFlowStrutsApp( File sourceFile, ClassDeclaration
>jclass, AnnotationProcessorEnvironment env,
>                                    FlowControllerInfo fcInfo, boolean
>checkOnly, Diagnostics diagnostics )
>-            throws XmlException, IOException, FatalCompileTimeException
>+            throws IOException, FatalCompileTimeException
>     {
>         super( sourceFile, jclass, env, fcInfo, checkOnly, diagnostics );
>         recalculateStrutsConfigFile();  // it changes based on _isGlobalApp
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
>Fri Sep 16 13:27:57 2005
>@@ -28,20 +28,16 @@
> import org.apache.beehive.netui.compiler.model.ForwardModel;
> import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
> import org.apache.beehive.netui.compiler.model.StrutsApp;
>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
> import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
> import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.declaration.Modifier;
>-import org.apache.beehive.netui.compiler.typesystem.declaration.PackageDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.declaration.ParameterDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
> import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
> import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
>-import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
>-import org.apache.xmlbeans.XmlCursor;
>-import org.apache.xmlbeans.XmlException;
>-import org.apache.xmlbeans.XmlObject;
>
> import java.io.File;
> import java.io.FileNotFoundException;
>@@ -68,7 +64,7 @@
>     private FlowControllerInfo _fcInfo;
>
>     protected void recalculateStrutsConfigFile()
>-        throws XmlException, IOException, FatalCompileTimeException
>+        throws IOException, FatalCompileTimeException
>     {
>         _strutsConfigFile = calculateStrutsConfigFile(); // caching this
>     }
>@@ -80,7 +76,7 @@
>
>     public GenStrutsApp( File sourceFile, ClassDeclaration jclass,
>AnnotationProcessorEnvironment env,
>                          FlowControllerInfo fcInfo, boolean
>checkOnly, Diagnostics diagnostics )
>-        throws XmlException, IOException, FatalCompileTimeException
>+        throws IOException, FatalCompileTimeException
>     {
>         super( jclass.getQualifiedName() );
>
>@@ -328,9 +324,19 @@
>     }
>
>     public void writeToFile()
>-        throws FileNotFoundException, IOException, XmlException,
>FatalCompileTimeException
>+        throws FileNotFoundException, IOException,
>XmlModelWriterException, FatalCompileTimeException
>     {
>-        writeToFile( getMergeFile( getMergeFileName() ) );
>+        File strutsMergeFile = getMergeFile( getMergeFileName() );
>+        PrintWriter writer = getEnv().getFiler().createTextFile(
>_strutsConfigFile );
>+
>+        try
>+        {
>+            writeXml( writer, strutsMergeFile );
>+        }
>+        finally
>+        {
>+            writer.close();
>+        }
>     }
>
>     public boolean isStale()
>@@ -419,23 +425,8 @@
>
>         return true;
>     }
>-
>-
>-    public void writeToFile( File strutsMergeFile )
>-        throws FileNotFoundException, IOException, XmlException,
>FatalCompileTimeException
>-    {
>-        PrintWriter writer = getEnv().getFiler().createTextFile(
>_strutsConfigFile );
>-
>-        try
>-        {
>-            writeXml( writer, strutsMergeFile );
>-        }
>-        finally
>-        {
>-            writer.close();
>-        }
>-    }
>-
>+
>+
>     public File getStrutsConfigFile()
>     {
>         return _strutsConfigFile;
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
>Fri Sep 16 13:27:57 2005
>@@ -20,9 +20,9 @@
> import org.apache.beehive.netui.compiler.CompilerUtils;
> import org.apache.beehive.netui.compiler.JpfLanguageConstants;
> import org.apache.beehive.netui.compiler.MergedControllerAnnotation;
>-import org.apache.beehive.netui.compiler.Diagnostics;
> import org.apache.beehive.netui.compiler.FatalCompileTimeException;
> import org.apache.beehive.netui.compiler.model.FormBeanModel;
>+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
> import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
> import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
> import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
>@@ -37,13 +37,10 @@
> import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
> import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>-import org.apache.xmlbeans.XmlException;
>
> import java.io.File;
> import java.io.FileNotFoundException;
>-import java.io.FileOutputStream;
> import java.io.IOException;
>-import java.io.PrintStream;
> import java.io.PrintWriter;
> import java.util.Collection;
> import java.util.Iterator;
>@@ -430,7 +427,7 @@
>     }
>
>     public void writeToFile()
>-        throws FileNotFoundException, XmlException, IOException,
>FatalCompileTimeException
>+        throws FileNotFoundException, IOException,
>FatalCompileTimeException, XmlModelWriterException
>     {
>         String outputFilePath = getOutputFileURI();
>         File outputFile = new File( outputFilePath );
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
>Fri Sep 16 13:27:57 2005
>@@ -21,28 +21,28 @@
> import org.apache.beehive.netui.compiler.AnnotationMemberType;
> import org.apache.beehive.netui.compiler.FlowControllerInfo;
> import org.apache.beehive.netui.compiler.Diagnostics;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.StrutsConfigDocument;
>-import org.apache.beehive.netui.compiler.model.schema.validator11.FormValidationDocument;
> import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
>
>+import java.net.URL;
>+
>
> public class ControllerGrammar
>         extends BaseFlowControllerGrammar
>-{
>+{
>     public ControllerGrammar( AnnotationProcessorEnvironment env,
>Diagnostics diags, RuntimeVersionChecker rvc,
>                               FlowControllerInfo fcInfo )
>     {
>         super( env, diags, null, rvc, fcInfo );
>-
>+
>         addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType(
>null, this ) );
>         addMemberType( ROLES_ALLOWED_ATTR, new RolesAllowedType( this ) );
>         addMemberType( READONLY_ATTR, new AnnotationMemberType( null, this ) );
>-        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
>StrutsConfigDocument.type, null, this, fcInfo ) );
>+        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
>"struts-config_1_1.xsd", null, this, fcInfo ) );
>         addMemberType( VALIDATOR_VERSION_ATTR, new
>AnnotationMemberType( null, this ) );
>-        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
>FormValidationDocument.type, null, this, fcInfo ) );
>+        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
>"struts-validator_1_1.xsd", null, this, fcInfo ) );
>         addMemberType( TILES_DEFINITIONS_CONFIGS_ATTR, new
>TilesDefinitionsConfigsType( null, this, fcInfo ) );
>         addMemberType( MULTIPART_HANDLER_ATTR, new
>AnnotationMemberType( null, this ) );
>-
>+
>         addMemberArrayGrammar( SHARED_FLOW_REFS_ATTR, new
>SharedFlowRefGrammar( env, diags, rvc ) );
>         addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar(
>env, diags, null, rvc, fcInfo ) );
>         addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env,
>diags, null, rvc, CONTROLLER_TAG_NAME, fcInfo ) );
>@@ -50,7 +50,7 @@
>         addMemberArrayGrammar( VALIDATABLE_BEANS_ATTR, new
>ValidatableBeanGrammar( env, diags, rvc ) );
>         addMemberArrayGrammar( SIMPLE_ACTIONS_ATTR, new
>SimpleActionGrammar( env, diags, rvc, fcInfo ) );
>     }
>-
>+
>     public String[][] getMutuallyExclusiveAttrs()
>     {
>         return null;
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
>Fri Sep 16 13:27:57 2005
>@@ -19,154 +19,159 @@
>
> import org.apache.beehive.netui.compiler.AnnotationGrammar;
> import org.apache.beehive.netui.compiler.FlowControllerInfo;
>-import org.apache.xmlbeans.SchemaType;
>-import org.apache.xmlbeans.XmlOptions;
>-import org.apache.xmlbeans.XmlObject;
>-import org.apache.xmlbeans.XmlError;
>-import org.apache.xmlbeans.XmlException;
>+import org.apache.beehive.netui.compiler.LocalFileEntityResolver;
> import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
>+import org.xml.sax.SAXParseException;
>+import org.xml.sax.SAXException;
>+import org.xml.sax.InputSource;
>+import org.xml.sax.helpers.DefaultHandler;
>
>+import javax.xml.parsers.DocumentBuilderFactory;
>+import javax.xml.parsers.DocumentBuilder;
> import java.util.Map;
> import java.util.Collections;
> import java.util.HashMap;
>-import java.util.List;
>-import java.util.ArrayList;
> import java.io.File;
>+import java.io.IOException;
>
>
> public class ValidXmlFileType
>         extends WebappPathType
> {
>-    private SchemaType _schema;
>+    private String _schemaFileName;
>     private static Map _parseResults = Collections.synchronizedMap(
>new HashMap() );
>-
>-    public ValidXmlFileType( SchemaType schema, String
>requiredRuntimeVersion, AnnotationGrammar parentGrammar,
>+
>+    public ValidXmlFileType( String schemaFileName, String
>requiredRuntimeVersion, AnnotationGrammar parentGrammar,
>                              FlowControllerInfo fcInfo )
>     {
>         super( false, requiredRuntimeVersion, parentGrammar, fcInfo );
>-        _schema = schema;
>+        assert schemaFileName != null;
>+        _schemaFileName = schemaFileName;
>     }
>
>-
>+
>     protected boolean checkAnyExtension()
>     {
>         return true;
>     }
>
>-
>+
>     protected boolean doFatalError()
>     {
>         return true;
>     }
>-
>-
>+
>+
>     protected boolean ignoreDirectories()
>     {
>         return false;
>     }
>-
>-
>+
>+
>     protected boolean allowFileInPageFlowSourceDir()
>     {
>         return true;
>     }
>-
>-
>+
>+
>     protected void runAdditionalChecks( File file, AnnotationValue value )
>     {
>-        try
>+
>+        //
>+        // We cache the results of parsing the file until the file is
>actually modified,
>+        // so we don't end up continually re-parsing it.
>+        //
>+        ParseResults prevResults = ( ParseResults )
>_parseResults.get( file.getPath() );
>+        long lastModTime = file.lastModified();
>+
>+        if ( prevResults == null || lastModTime >
>prevResults.getFileModTime() )
>         {
>-            //
>-            // We cache the results of parsing the file until the
>file is actually modified,
>-            // so we don't end up continually re-parsing it.
>-            //
>-            ParseResults prevResults = ( ParseResults )
>_parseResults.get( file.getPath() );
>-
>-            if ( prevResults == null || file.lastModified() >
>prevResults.getFileModTime() )
>+            try
>             {
>-                try
>-                {
>-                    XmlOptions options = new XmlOptions();
>-                    options.setDocumentType( _schema );
>-                    XmlObject xml = XmlObject.Factory.parse( file, options );
>-                    List errorListener = new ArrayList();
>-                    options.setErrorListener( errorListener );
>-
>-                    if ( !xml.validate( options ) )
>-                    {
>-                        assert !errorListener.isEmpty();
>-
>-                        XmlError err = ( XmlError ) errorListener.get( 0 );
>-                        assert err != null;
>-
>-                        throw new XmlException( err.getMessage(), null, err );
>-                    }
>-                }
>-                catch ( Exception e )
>-                {
>-                    _parseResults.put( file.getPath(), new
>ParseResults( file.lastModified(), e ) );
>-                    throw e;
>+                LocalFileEntityResolver entityResolver =
>LocalFileEntityResolver.getInstance();
>+                InputSource schemaInput = 
>entityResolver.resolveLocalEntity(_schemaFileName);
>+                assert schemaInput != null : "could not get schema
>resource for " + _schemaFileName;
>+                DocumentBuilderFactory factory =
>DocumentBuilderFactory.newInstance();
>+                factory.setNamespaceAware(true);
>+                factory.setValidating(true);
>+                factory.setAttribute(
>"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
>+                                      "http://www.w3.org/2001/XMLSchema");
>+                factory.setAttribute(
>"http://java.sun.com/xml/jaxp/properties/schemaSource", schemaInput);
>+                DocumentBuilder builder = factory.newDocumentBuilder();
>+               
>builder.setEntityResolver(LocalFileEntityResolver.getInstance());
>+                Validator handler = new Validator(lastModTime, file, value);
>+                builder.setErrorHandler(handler);
>+                builder.parse(file);
>+                if (handler.hadErrors()) {
>+                    return;
>                 }
>-
>-                _parseResults.put( file.getPath(), new ParseResults(
>file.lastModified(), null ) );
>             }
>-            else
>+            catch ( SAXParseException e )
>             {
>-                Exception e = prevResults.getException();
>-
>-                if ( e != null )
>-                {
>-                    throw e;
>-                }
>+                addErrorDiagnostic( file, e, value );
>+                _parseResults.put( file.getPath(), new ParseResults(
>lastModTime, e ) );
>+                return;
>             }
>+            catch ( Exception e )
>+            {
>+                _parseResults.put( file.getPath(), new ParseResults(
>lastModTime, e ) );
>+                addError( value, "error.xml-read-error",
>+                          new Object[]{ file.getPath(),
>e.getClass().getName(), e.getMessage() } );
>+                return;
>+            }
>+
>+            _parseResults.put( file.getPath(), new ParseResults(
>lastModTime, null ) );
>         }
>-        catch ( XmlException e )
>-        {
>-            addErrorDiagnostic( e.getError(), value );
>-        }
>-        catch ( Exception e )
>+        else
>         {
>-            addError( value, "error.xml-read-error", new Object[]{
>file.getPath(), e.getMessage() } );
>+            Exception e = prevResults.getException();
>+
>+            if (e instanceof SAXParseException) {
>+                addErrorDiagnostic(file, (SAXParseException) e, value);
>+            } else if (e != null) {
>+                addError( value, "error.xml-read-error",
>+                          new Object[]{ file.getPath(),
>e.getClass().getName(), e.getMessage() } );
>+            }
>         }
>     }
>-
>-    private void addErrorDiagnostic( XmlError err, AnnotationValue value )
>+
>+    private void addErrorDiagnostic( File file, SAXParseException
>err, AnnotationValue value )
>     {
>-        if ( err.getColumn() != -1 && err.getLine() != -1 )
>+        if ( err.getColumnNumber() != -1 && err.getLineNumber() != -1 )
>         {
>             Object[] args =
>                     {
>-                        err.getSourceName(),
>-                        new Integer( err.getLine() ),
>-                        new Integer( err.getColumn() ),
>+                        file.getPath(),
>+                        new Integer( err.getLineNumber() ),
>+                        new Integer( err.getColumnNumber() ),
>                         err.getMessage()
>                     };
>-
>+
>             addError( value, "error.xml-parse-error", args );
>         }
>-        else if ( err.getLine() != -1 )
>+        else if ( err.getLineNumber() != -1 )
>         {
>             Object[] args =
>             {
>-                err.getSourceName(),
>-                new Integer( err.getLine() ),
>+                file.getPath(),
>+                new Integer( err.getLineNumber() ),
>                 err.getMessage()
>             };
>-
>+
>             addError( value, "error.xml-parse-error-nocolumn", args );
>-        }
>+        }
>         else
>         {
>             Object[] args =
>             {
>-                err.getSourceName(),
>+                file.getPath(),
>                 err.getMessage()
>             };
>-
>+
>             addError( value, "error.xml-parse-error-nolinecolumn", args );
>         }
>     }
>-
>+
>     private static class ParseResults
>     {
>         private long _fileModTime;
>@@ -196,6 +201,46 @@
>         public void setException( Exception exception )
>         {
>             _exception = exception;
>+        }
>+    }
>+
>+    private class Validator extends DefaultHandler {
>+
>+        private long _fileModTime;
>+        private File _file;
>+        private AnnotationValue _value;
>+        private boolean _hadErrors = false;
>+
>+        public Validator(long fileModTime, File file, AnnotationValue value) {
>+            _fileModTime = fileModTime;
>+            _file = file;
>+            _value = value;
>+        }
>+
>+        public void error(SAXParseException ex)
>+                throws SAXException {
>+            ParseResults results = new ParseResults(_fileModTime, ex);
>+            addErrorDiagnostic(_file, ex, _value );
>+            _parseResults.put(_file.getPath(), results);
>+            _hadErrors = true;
>+        }
>+
>+        public void fatalError(SAXParseException ex)
>+                throws SAXException {
>+            error(ex);
>+        }
>+
>+        public void warning(SAXParseException exception)
>+                throws SAXException {
>+            // TODO: add a compiler warning?
>+        }
>+
>+        public boolean hadErrors() {
>+            return _hadErrors;
>+        }
>+
>+        public InputSource resolveEntity(String publicId, String
>systemId) throws IOException, SAXException {
>+            return super.resolveEntity(publicId, systemId);
>         }
>     }
> }
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
>Fri Sep 16 13:27:57 2005
>@@ -17,8 +17,7 @@
>  */
> package org.apache.beehive.netui.compiler.model;
>
>-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
>-import org.apache.xmlbeans.XmlObject;
>+import org.w3c.dom.Element;
>
> import java.util.LinkedHashMap;
> import java.util.Iterator;
>@@ -71,28 +70,13 @@
>         return ( ForwardModel ) _forwards.get( forwardName );
>     }
>
>-    public void writeForwards( ForwardDocument.Forward[]
>existingForwards, XmlObject xmlForwardContainer )
>+    public void writeForwards( XmlModelWriter xw, Element
>forwardsParentElement )
>     {
>         for ( Iterator i = _forwards.values().iterator(); i.hasNext(); )
>         {
>             ForwardModel fwd = ( ForwardModel ) i.next();
>-            ForwardDocument.Forward fwdToEdit = null;
>-
>-            for ( int j = 0; j < existingForwards.length; ++j )
>-            {
>-                if ( fwd.getName().equals( existingForwards[j].getName() ) )
>-                {
>-                    fwdToEdit = existingForwards[j];
>-                    break;
>-                }
>-            }
>-
>-            if ( fwdToEdit == null )
>-            {
>-                fwdToEdit = addNewForward( xmlForwardContainer );
>-            }
>-
>-            fwd.writeToXMLBean( fwdToEdit );
>+            Element fwdToEdit = findChildElement(xw,
>forwardsParentElement, "forward", "name", fwd.getName(), true);
>+            fwd.writeXML( xw, fwdToEdit );
>         }
>     }
>
>@@ -112,6 +96,5 @@
>     {
>         _forwards.remove( forward.getName() );
>     }
>-
>-    protected abstract ForwardDocument.Forward addNewForward(
>XmlObject xmlForwardContainer );
>+
> }
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
>Fri Sep 16 13:27:57 2005
>@@ -22,13 +22,8 @@
> import java.util.LinkedHashMap;
> import java.util.Iterator;
>
>-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument.Action;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument;
> import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>-import org.apache.xmlbeans.XmlObject;
>+import org.w3c.dom.Element;
>
>
> /**
>@@ -43,11 +38,10 @@
>
>     private static final String JPF_ACTION_MAPPING_CLASSNAME =
>PAGEFLOW_PACKAGE + ".config.PageFlowActionMapping";
>
>-
>+
>     // Struts attributes.
>     private ArrayList _exceptionCatches = new ArrayList();
>     private String _attribute;
>-    private String _className;
>     private String _forward;
>     private String _include;
>     private String _input;
>@@ -88,7 +82,7 @@
>         this._path = path;
>         this._formBeanName = formName;
>     }
>-
>+
>     protected ActionModel( StrutsApp parent )
>     {
>         this( null, null, parent );
>@@ -96,7 +90,7 @@
>
>     /**
>      * Construct a copy of the given mapping, with the given path.
>-     */
>+     */
>     public ActionModel( ActionModel src, String newPath )
>     {
>         super( src );
>@@ -104,7 +98,6 @@
>         this._formBeanName = src._formBeanName;
>         _exceptionCatches = ( ArrayList ) src._exceptionCatches.clone();
>         _attribute = src._attribute;
>-        _className = src._className;
>         _forward = src._forward;
>         _include = src._include;
>         _input = src._input;
>@@ -126,127 +119,70 @@
>         _unqualifiedActionPath = src._unqualifiedActionPath;
>         _defaultForwardName = src._defaultForwardName;
>     }
>-
>+
>     public void setFormBeanName( String formBeanName )
>     {
>         _formBeanName = formBeanName;
>     }
>-
>-    public void writeToXMLBean( Action xb )
>+
>+    protected void writeToElement(XmlModelWriter xw, Element element)
>     {
>-        xb.setPath( _path );
>-
>-        if ( xb.getName() == null && _formBeanName != null )
>xb.setName( _formBeanName );
>-        if ( xb.getClassName() == null && _className != null )
>xb.setClassName( _className );
>-        if ( xb.getType() == null && _type != null ) xb.setType( _type );
>-        if ( xb.getAttribute() == null && _attribute != null )
>xb.setAttribute( _attribute );
>-        if ( xb.getInput() == null && _input != null ) xb.setInput( _input );
>-        if ( xb.getParameter() == null && _parameter != null )
>xb.setParameter( _parameter );
>-        if ( xb.getPrefix() == null && _prefix != null )
>xb.setPrefix( _prefix );
>-        if ( xb.getSuffix() == null && _suffix != null )
>xb.setSuffix( _suffix );
>-
>-        if ( xb.getScope() == null )
>-        {
>-            if ( _scope != null )
>-            {
>-                if ( _scope.equals( "request" ) )
>-                {
>-                    xb.setScope( Action.Scope.REQUEST );
>-                }
>-                else if ( _scope.equals( "session" ) )
>-                {
>-                    xb.setScope( Action.Scope.SESSION );
>-                }
>-                else
>-                {
>-                    assert false : _scope;
>-                }
>-            }
>-            else
>-            {
>-                xb.setScope( Action.Scope.REQUEST );
>-            }
>-        }
>-
>-        if ( xb.getRoles() == null && _roles != null ) xb.setRoles( _roles );
>-        if ( xb.getForward2() == null &&  _forward != null )
>xb.setForward2( _forward );
>-        if ( xb.getInclude() == null && _include != null )
>xb.setInclude( _include );
>-        if ( xb.getUnknown() == null && _unknown ) xb.setUnknown(
>Action.Unknown.TRUE );
>-        if ( xb.getValidate() == null ) xb.setValidate( _validate ?
>Action.Validate.TRUE : Action.Validate.FALSE );
>-
>-        if (  _unqualifiedActionPath != null ) addSetProperty( xb,
>"unqualifiedActionPath", _unqualifiedActionPath );
>-        if ( _formMember != null ) addSetProperty( xb, "formMember",
>_formMember );
>-        if ( _formClass != null ) addSetProperty( xb, "formClass",
>_formClass );
>-        if ( _loginRequired ) addSetProperty( xb, "loginRequired",
>_loginRequired );
>-        if ( _preventDoubleSubmit ) addSetProperty( xb,
>"preventDoubleSubmit", _preventDoubleSubmit );
>-        if ( _isOverloaded ) addSetProperty( xb, "overloaded", _isOverloaded );
>-        if ( _readonly ) addSetProperty( xb, "readonly", _readonly );
>-        if ( _isSimpleAction ) addSetProperty( xb, "simpleAction",
>_isSimpleAction );
>-        if ( _defaultForwardName != null ) addSetProperty( xb,
>"defaultForward", _defaultForwardName );
>-
>+        element.setAttribute("path", _path);
>+        setElementAttribute(element, "name", _formBeanName);
>+        setElementAttribute(element, "className", getClassName());
>+        setElementAttribute(element, "type", _type);
>+        setElementAttribute(element, "attribute", _attribute);
>+        setElementAttribute(element, "input", _input);
>+        setElementAttribute(element, "parameter", _parameter);
>+        setElementAttribute(element, "prefix", _prefix);
>+        setElementAttribute(element, "suffix", _suffix);
>+        setElementAttribute(element, "scope", _scope != null ? _scope
>: "request");
>+        setElementAttribute(element, "roles", _roles);
>+        setElementAttribute(element, "forward", _forward);
>+        setElementAttribute(element, "include", _include);
>+        setElementAttribute(element, "validate",
>Boolean.toString(_validate));  // always set the value, even if false
>+        addSetProperty( xw, element, "unqualifiedActionPath",
>_unqualifiedActionPath );
>+        addSetProperty( xw, element, "formMember", _formMember );
>+        addSetProperty( xw, element, "formClass", _formClass );
>+        addSetProperty( xw, element, "loginRequired", _loginRequired );
>+        addSetProperty( xw, element, "preventDoubleSubmit",
>_preventDoubleSubmit );
>+        addSetProperty( xw, element, "overloaded", _isOverloaded );
>+        addSetProperty( xw, element, "readonly", _readonly );
>+        addSetProperty( xw, element, "simpleAction", _isSimpleAction );
>+        addSetProperty( xw, element, "defaultForward", _defaultForwardName );
>+        addSetProperty( xw, element, "formBeanMessageResourcesKey",
>_formBeanMessageResourcesKey );
>+
>         if ( _conditionalForwards != null )
>         {
>-            addSetProperty( xb, "conditionalForwards", getMapString(
>_conditionalForwards) );
>-        }
>-
>-        if ( _formBeanMessageResourcesKey != null )
>-        {
>-            addSetProperty( xb, "formBeanMessageResourcesKey",
>_formBeanMessageResourcesKey );
>+            addSetProperty( xw, element, "conditionalForwards",
>getMapString( _conditionalForwards) );
>         }
>-
>+
>         if ( _exceptionCatches != null && ! _exceptionCatches.isEmpty() )
>         {
>-            ExceptionDocument.Exception[] existingExceptions =
>xb.getExceptionArray();
>-
>             for ( int i = 0; i < _exceptionCatches.size(); ++i )
>             {
>                 ExceptionModel ec = ( ExceptionModel )
>_exceptionCatches.get( i );
>-                ExceptionDocument.Exception exceptionToEdit = null;
>-
>-                for ( int j = 0; j < existingExceptions.length; ++j )
>-                {
>-                    if ( ec.getType().equals(
>existingExceptions[j].getType() ) )
>-                    {
>-                        exceptionToEdit = existingExceptions[j];
>-                        break;
>-                    }
>-                }
>-
>-                if ( exceptionToEdit == null )
>-                {
>-                    exceptionToEdit = xb.addNewException();
>-                }
>-
>-                ec.writeToXMLBean( exceptionToEdit );
>+                Element exceptionToEdit = findChildElement(xw,
>element, "exception", "type", ec.getType(), true);
>+                ec.writeXML( xw, exceptionToEdit );
>             }
>         }
>-
>+
>         //
>         // forwards
>         //
>-        writeForwards( xb.getForwardArray(), xb );
>-
>-        addComment( xb );
>-    }
>-
>-    private void addSetProperty( ActionDocument.Action xb, String
>propertyName, boolean propertyValue )
>-    {
>-        addSetProperty( xb, propertyName, Boolean.toString( propertyValue ) );
>+        writeForwards( xw, element );
>     }
>-
>-    private void addSetProperty( ActionDocument.Action xb, String
>propertyName, String propertyValue )
>+
>+    private void addSetProperty( XmlModelWriter xw, Element element,
>String propertyName, boolean propertyValue )
>     {
>-        SetProperty prop = xb.addNewSetProperty();
>-        prop.setProperty( propertyName );
>-        prop.setValue( propertyValue );
>-        if ( xb.getClassName() == null ) xb.setClassName(
>JPF_ACTION_MAPPING_CLASSNAME );
>+        if (propertyValue) addSetProperty( xw, element, propertyName,
>Boolean.toString( propertyValue ) );
>     }
>-
>-    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
>+
>+    private void addSetProperty( XmlModelWriter xw, Element element,
>String propertyName, String propertyValue )
>     {
>-        return ( ( Action ) xmlObject ).addNewForward();
>+        setCustomProperty(xw, element, propertyName, propertyValue,
>JPF_ACTION_MAPPING_CLASSNAME);
>     }
>-
>+
>     /**
>      * Implemented for {@link ExceptionContainer}.
>      */
>@@ -265,16 +201,6 @@
>         this._attribute = attribute;
>     }
>
>-    public String getClassName()
>-    {
>-        return _className;
>-    }
>-
>-    public void setClassName( String className )
>-    {
>-        this._className = className;
>-    }
>-
>     public String getForward()
>     {
>         return _forward;
>@@ -309,7 +235,7 @@
>     {
>         return _formBeanName;
>     }
>-
>+
>     public String getFormBeanName()
>     {
>         return _formBeanName;
>@@ -344,7 +270,7 @@
>     {
>         return _path;
>     }
>-
>+
>     public String getPath( boolean useUnqualifiedPath )
>     {
>         if ( useUnqualifiedPath && _unqualifiedActionPath != null )
>@@ -446,7 +372,7 @@
>     {
>         _loginRequired = loginRequired;
>     }
>-
>+
>     public void setPreventDoubleSubmit( boolean preventDoubleSubmit )
>     {
>         _preventDoubleSubmit = preventDoubleSubmit;
>@@ -501,23 +427,23 @@
>     {
>         _readonly = readonly;
>     }
>-
>+
>     public void addConditionalForward( String expression, String forwardName )
>     {
>         if ( _conditionalForwards == null ) _conditionalForwards =
>new LinkedHashMap();
>         _conditionalForwards.put( expression, forwardName );
>     }
>-
>+
>     private static String getMapString( Map map )
>     {
>         StringBuffer retVal = new StringBuffer();
>-
>+
>         for ( Iterator i = map.entrySet().iterator(); i.hasNext(); )
>         {
>             Map.Entry entry = ( Map.Entry ) i.next();
>             retVal.append( entry.getValue() ).append( ':' ).append(
>entry.getKey() ).append( ';' );
>         }
>-
>+
>         return retVal.toString();
>     }
>
>@@ -525,6 +451,6 @@
>     {
>         _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
>     }
>-
>+
>
> }
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
>Fri Sep 16 13:27:57 2005
>@@ -17,10 +17,8 @@
>  */
> package org.apache.beehive.netui.compiler.model;
>
>-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
>-import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
> import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>+import org.w3c.dom.Element;
>
> public class ExceptionModel
>         extends StrutsElementSupport
>@@ -36,18 +34,18 @@
>     private boolean _inheritedPath = false;
>
>     private static final String JPF_EXCEPTION_CONFIG_CLASSNAME =
>PAGEFLOW_PACKAGE + ".config.PageFlowExceptionConfig";
>-
>-
>+
>+
>     protected ExceptionModel( StrutsApp parentApp )
>     {
>         super( parentApp );
>     }
>-
>+
>     public ExceptionModel( String type, String path, String
>handlerMethod, String message,
>                            String messageKey, StrutsApp parentApp )
>     {
>         super( parentApp );
>-
>+
>         _type = type;
>         _path = path;
>         _handlerMethod = handlerMethod;
>@@ -115,56 +113,55 @@
>         _handlerClass = handlerClass;
>     }
>
>-    public void writeToXMLBean( ExceptionDocument.Exception xb )
>-
>+    protected void writeToElement(XmlModelWriter xw, Element element)
>     {
>-        xb.setType( _type );
>+        element.setAttribute("type", _type);
>
>-        if ( xb.getPath() == null && _path != null )
>+        if ( _path != null )
>         {
>             boolean relativeToModule = ! _path.startsWith( "/" );
>-
>+
>             if ( relativeToModule )
>             {
>-                xb.setPath( "/" + _path );  // struts wants "/" --
>assumes this is module-relative path
>+                // struts wants "/" -- assumes this is module-relative path
>+                setElementAttribute(element, "path", '/' + _path);
>             }
>             else
>             {
>-                xb.setPath( _path );
>-                addSetProperty( xb, "isPathContextRelative", "true" );
>+                setElementAttributeMayBeEmpty(element, "path", _path);
>+                addSetProperty(xw, element, "isPathContextRelative", "true" );
>             }
>         }
>-
>-        if ( _inheritedPath ) addSetProperty( xb, "inheritedPath", "true" );
>-
>-        if ( xb.getKey() == null && _messageKey != null ) xb.setKey(
>_messageKey );
>-
>+
>+        if ( _inheritedPath ) addSetProperty(xw, element,
>"inheritedPath", "true" );
>+
>+        //
>+        // Set the message key.  If there isn't one, use the typename
>as the message key.
>+        setElementAttribute(element, "key", _messageKey);
>+        if (_messageKey == null) setElementAttribute(element, "key", _type);
>+
>         //
>         // Struts doesn't support "message" directly -- we'll add
>this as a custom property.
>         //
>-        if ( _message != null ) addSetProperty( xb, "defaultMessage",
>_message );
>-
>-        if ( xb.getKey() == null ) xb.setKey( _type );
>-
>+        addSetProperty(xw, element, "defaultMessage", _message );
>+
>         //
>         // Note that we're setting the handler *method* as the
>handler.  This would break Struts.
>         //
>-        if ( xb.getHandler() == null && _handlerMethod != null &&
>_handlerClass == null )
>-        {
>-            xb.setHandler( _handlerMethod );
>-            addSetProperty( xb, "isHandlerMethod", "true" );
>+        if ( _handlerMethod != null && _handlerClass == null ) {
>+            setElementAttribute(element, "handler", _handlerMethod);
>+            addSetProperty(xw, element, "isHandlerMethod", "true" );
>+        }
>+        else {
>+            setElementAttribute(element, "handler", _handlerClass);
>         }
>-
>-        if ( _readonly ) addSetProperty( xb, "readonly", "true" );
>-        if ( xb.getHandler() == null && _handlerClass != null )
>xb.setHandler( _handlerClass );
>-    }
>-
>-    private void addSetProperty( ExceptionDocument.Exception xb,
>String propertyName, String propertyValue )
>-    {
>-        SetProperty prop = xb.addNewSetProperty();
>-        prop.setProperty( propertyName );
>-        prop.setValue( propertyValue );
>-        if ( xb.getClassName() == null ) xb.setClassName(
>JPF_EXCEPTION_CONFIG_CLASSNAME );
>+
>+        if ( _readonly ) addSetProperty(xw, element, "readonly", "true" );
>+    }
>+
>+    private void addSetProperty( XmlModelWriter xw, Element element,
>String propertyName, String propertyValue )
>+    {
>+        setCustomProperty(xw, element, propertyName, propertyValue,
>JPF_EXCEPTION_CONFIG_CLASSNAME);
>     }
>
>     public boolean isReadonly()
>
>Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java?rev=289648&r1=289647&r2=289648&view=diff
>==============================================================================
>--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>(original)
>+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
>Fri Sep 16 13:27:57 2005
>@@ -21,9 +21,8 @@
> import java.util.Collection;
> import java.util.List;
>
>-import org.apache.beehive.netui.compiler.model.schema.struts11.FormBeanDocument;
>-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
> import org.apache.beehive.netui.compiler.JpfLanguageConstants;
>+import org.w3c.dom.Element;
>
>
> /**
>@@ -90,18 +89,17 @@
>     }
>
>
>-    private static final String JPF_ACTION_FORM_BEAN_CLASSNAME =
>PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
>+    private static final String CUSTOM_ACTION_FORM_BEAN_CLASSNAME =
>PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
>
>     private String _id = "";  // NOI18N
>-    private String _className = null;
>     private boolean _dynamic = false;
>     private String _name = null;  // required to be set
>     private String _type = null;  // required to be set
>-
>-    /** This is a NetUI-specific property. */
>+
>+    /** This is a NetUI-specific property. */
>     private String _actualType = null;
>-
>-    /** This is a NetUI-specific property. */
>+
>+    /** This is a NetUI-specific property. */
>     private boolean _pageFlowScoped;  // required to be set
>
>     private ArrayList _properties = new ArrayList();
>@@ -115,25 +113,21 @@
>         _pageFlowScoped = pageFlowScoped;
>     }
>
>-    public void writeToXMLBean( FormBeanDocument.FormBean xb )
>+    protected void writeToElement(XmlModelWriter xw, Element element)
>     {
>-        xb.setName( _name );
>+        element.setAttribute("name", _name);
>
>-        if ( xb.getType() == null ) xb.setType( _type );
>-        if ( xb.getId() == null && _id != null && _id.length() > 0 )
>xb.setId( _id );
>-        if ( xb.getClassName() == null &&_className != null )
>xb.setClassName( _className );
>-        if ( xb.getDynamic() == null && _dynamic ) xb.setDynamic(
>FormBeanDocument.FormBean.Dynamic.TRUE );
>-
>-        if ( _actualType != null && ! _actualType.equals( xb.getType() ) )
>-        {
>-            SetProperty prop = xb.addNewSetProperty();
>-            prop.setProperty( "actualType" );
>-            prop.setValue( _actualType );
>-            if ( xb.getClassName() == null ) xb.setClassName(
>JPF_ACTION_FORM_BEAN_CLASSNAME );
>-        }
>+        setElementAttribute(element, "type", _type);
>+        setElementAttribute(element, "id", _id);
>+        setElementAttribute(element, "className", getClassName());
>+        setElementAttribute(element, "dynamic", _dynamic);
>
>+        if ( _actualType != null && !
>_actualType.equals(element.getAttribute("type")) )
>+        {
>+            setCustomProperty(xw, element, "actualType", _actualType,
>CUSTOM_ACTION_FORM_BEAN_CLASSNAME);
>+        }
>     }
>-
>+
>     public String getId()
>     {
>         return _id;
>@@ -144,11 +138,6 @@
>         _id = id;
>     }
>
>-    public String getClassName()
>-    {
>-        return _className;
>-    }
>-
>     public void setClassName( String className )
>     {
>         if ( className != null )
>@@ -156,7 +145,7 @@
>             if ("org.apache.struts.action.DynaActionForm".equals(
>className ) )  // NOI18N
>                 _dynamic = true;
>
>-            _className = className;
>+            setClassName(className);
>         }
>     }
>
>  
>

Fwd: svn commit: r289648 [1/6] - in /beehive/trunk/netui: src/compiler-core/ src/compiler-core/org/apache/beehive/netui/compiler/ src/compiler-core/org/apache/beehive/netui/compiler/genmodel/ src/compiler-core/org/apache/beehive/netui/compiler/gramma

Posted by Eddie O'Neil <ek...@gmail.com>.
Rich--

  Excellent!  Great to have the compiler moved over.

  I've just finished test runs on Linux (FC3) and on WinXP -- both
passed at 100% for the JUnit, compiler, and test recorder tests.
 
  I'll be working on the distribution part of this next.

Eddie



---------- Forwarded message ----------
From: rich@apache.org <ri...@apache.org>
Date: Sep 16, 2005 2:30 PM
Subject: svn commit: r289648 [1/6] - in /beehive/trunk/netui:
src/compiler-core/
src/compiler-core/org/apache/beehive/netui/compiler/
src/compiler-core/org/apache/beehive/netui/compiler/genmodel/
src/compiler-core/org/apache/beehive/netui/compiler/grammar/ src/...
To: commits@beehive.apache.org


Author: rich
Date: Fri Sep 16 13:27:57 2005
New Revision: 289648

URL: http://svn.apache.org/viewcvs?rev=289648&view=rev
Log:
Moved the NetUI compiler layer off of XMLBeans. The generated files
(struts-config-*.xml, pageflow-validation-*.xml, annotations-*.xml)
are now created (and merged, if Struts Merge or Validator Merge is
used) through APIs in the JDK.

tests: bvt in netui (WinXP)
BB: bvt, run.tests against a dist (linux)


Added:
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlElementSupport.java
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriter.java
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/XmlModelWriterException.java
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.dtd
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-config_1_1.xsd
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/struts-validator_1_1.xsd
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_0.dtd
  (with props)
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/resources/validator_1_1.dtd
  (with props)
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInterfaceParser.java
  (with props)
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/env/FilerImpl.java
  (with props)
Removed:
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldFactory.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableFieldOld.java
    beehive/trunk/netui/src/compiler-core/schema/struts-config/
    beehive/trunk/netui/src/compiler-core/schema/struts-validator/
Modified:
    beehive/trunk/netui/src/compiler-core/build.xml
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ForwardModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/MessageResourcesModel.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsApp.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/StrutsElementSupport.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/LocaleSet.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableEntity.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidatableField.java
    beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/validation/ValidationModel.java
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/AnnotationInstanceImpl.java
    beehive/trunk/netui/src/compiler-xdoclet/org/apache/beehive/netui/compiler/xdoclet/typesystem/impl/declaration/DeclarationImpl.java
    beehive/trunk/netui/src/compiler/build.xml
    beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/AnnotationReader.java
    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/OutputHandler.java
    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/PageFlowCompilerTest.java
    beehive/trunk/netui/test/src/compilerTests/org/apache/beehive/netui/test/compiler/TestPropertyMgr.java
    beehive/trunk/netui/test/src/compilerTests/testsuite/GA_DeprecationWarning/expectedOutput/struts-config--global.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira390/expectedOutput/struts-config-Jira390.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-child.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Jira611/expectedOutput/struts-config-Jira611-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_Abstract/expectedOutput/struts-config-Nested_Abstract.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/Nested_NewReturnTo/expectedOutput/struts-config-Nested_NewReturnTo.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionMethodOverload/expectedOutput/struts-config-PF_ActionMethodOverload.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionNegatives/expectedOutput/struts-config-PF_ActionNegatives.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionReadOnly/expectedOutput/struts-config-PF_ActionReadOnly.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionUseFormBean/expectedOutput/struts-config-PF_ActionUseFormBean.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ActionWithForm/expectedOutput/struts-config-PF_ActionWithForm.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_AnyNumberActionForward/expectedOutput/struts-config-PF_AnyNumberActionForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_CatchExceptionHandler/expectedOutput/struts-config-PF_CatchExceptionHandler.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_DeprecatedExceptionHandler/expectedOutput/struts-config-PF_DeprecatedExceptionHandler.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardNotInActionOrController/expectedOutput/struts-config-PF_ForwardNotInActionOrController.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardRedirect/expectedOutput/struts-config-PF_ForwardRedirect.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ForwardSyntax/expectedOutput/struts-config-PF_ForwardSyntax.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_InvalidAnnotations/expectedOutput/struts-config-PF_InvalidAnnotations.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_JustBeginAction/expectedOutput/struts-config-PF_JustBeginAction.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_LongLivedTrue/expectedOutput/struts-config-PF_LongLivedTrue.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_MissingForwardJPF/expectedOutput/struts-config-MissingForwardJPF.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RedirectWithNavigateTo/expectedOutput/struts-config-PF_RedirectWithNavigateTo.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_RolesAllowed/expectedOutput/struts-config-PF_RolesAllowed.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameGlobalActionForwardName/expectedOutput/struts-config-PF_SameGlobalActionForwardName.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_SameMethodNameSig/expectedOutput/struts-config-PF_SameMethodNameSig.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionValidationErrForward/expectedOutput/struts-config-PF_TwoActionValidationErrForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoActionsSameForward/expectedOutput/struts-config-PF_TwoActionsSameForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_TwoBeginAction/expectedOutput/struts-config-PF_TwoBeginAction.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_ValidateErrorForward/expectedOutput/struts-config-PF_ValidateErrorForward.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongActionMember/expectedOutput/struts-config-PF_WrongActionMember.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PF_WrongControlLocation/expectedOutput/struts-config-PF_WrongControlLocation.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Abstract/expectedOutput/struts-config-PI_Abstract.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_Begin/expectedOutput/struts-config-PI_Begin.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ControlsOverride/expectedOutput/struts-config-PI_ControlsOverride.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ForwardPath/expectedOutput/struts-config-PI_ForwardPath.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction-parent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/PI_ReturnAction/expectedOutput/struts-config-PI_ReturnAction.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config--SF_ImplicitReferences.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferences/expectedOutput/struts-config-SF_ImplicitReferences.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config--SF_ImplicitReferencesNested.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_ImplicitReferencesNested/expectedOutput/struts-config-SF_ImplicitReferencesNested.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config--SF_InvalidRelativePath.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/SF_InvalidRelativePath/expectedOutput/struts-config-SF_InvalidRelativePath.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/retrievePopupOutput/expectedOutput/struts-config-retrievePopupOutput.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleActionReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleActionReadOnlyUseFormBeanWarning.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent-childFlow.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginAbstractParent/expectedOutput/struts-config-simpleBeginAbstractParent.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride-childFlow.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleBeginActionMethodOverride/expectedOutput/struts-config-simpleBeginActionMethodOverride.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin-childFlow.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInheritedBegin/expectedOutput/struts-config-simpleInheritedBegin.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleInvalidPathWarning/expectedOutput/struts-config-simpleInvalidPathWarning.expected
    beehive/trunk/netui/test/src/compilerTests/testsuite/simpleReadOnlyUseFormBeanWarning/expectedOutput/struts-config-simpleReadOnlyUseFormBeanWarning.expected
    beehive/trunk/netui/test/webapps/drt/coreWeb/strutsMerge/test6/merge-jpf-struts-config.xml

Modified: beehive/trunk/netui/src/compiler-core/build.xml
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/build.xml?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/build.xml (original)
+++ beehive/trunk/netui/src/compiler-core/build.xml Fri Sep 16 13:27:57 2005
@@ -9,7 +9,6 @@
     <property name="module.classes.dir"
location="${classes.dir}/${module.name}"/>

     <path id="module.classpath">
-        <path refid="xbean.dependency.path"/>
         <fileset refid="controls.fileset"/>
     </path>

@@ -21,8 +20,6 @@

         <mkdir dir="${module.classes.dir}"/>

-        <antcall target="compile.schemas"/>
-
         <javac srcdir="${module.dir}"
                destdir="${module.classes.dir}"
                classpathref="module.classpath"
@@ -37,34 +34,10 @@
         <copy todir="${module.classes.dir}">
             <fileset dir="${module.dir}" includes="**/*.properties"/>
             <fileset dir="${module.dir}" includes="**/*.xml"/>
+            <fileset dir="${module.dir}" includes="**/*.xsd"/>
+            <fileset dir="${module.dir}" includes="**/*.dtd"/>
             <fileset dir="${module.dir}" includes="META-INF/**"/>
         </copy>
-    </target>
-
-    <target name="compile.schemas">
-        <!-- run the XMLBean compiler for the struts-config schema -->
-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
-            <property name="xsd.root.dir"
value="${module.dir}/schema/struts-config"/>
-            <property name="class.output.dir" value="${module.classes.dir}"/>
-            <property name="xbean.inputs"
value="${module.dir}/schema/struts-config/*.xsd*"/>
-            <property name="xbean.output"
value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/struts11/StrutsConfigDocument.class"/>
-        </ant>
-
-        <!-- run the XMLBean compiler for the struts-validator schema -->
-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
-            <property name="xsd.root.dir"
value="${module.dir}/schema/struts-validator"/>
-            <property name="class.output.dir" value="${module.classes.dir}"/>
-            <property name="xbean.inputs"
value="${module.dir}/schema/struts-validator/*.xsd*"/>
-            <property name="xbean.output"
value="${module.classes.dir}/org/apache/beehive/netui/compiler/model/schema/validator11/ValidatorDocument.class"/>
-        </ant>
-
-        <!-- run the XMLBean compiler for the processed-annotations schema -->
-        <ant antfile="${netui.ant.dir}/xmlBean.xml">
-            <property name="xsd.root.dir"
value="${module.dir}/schema/processed-annotations"/>
-            <property name="class.output.dir" value="${module.classes.dir}"/>
-            <property name="xbean.inputs"
value="${module.dir}/schema/processed-annotations/*.xsd*"/>
-            <property name="xbean.output"
value="${module.classes.dir}/org/apache/beehive/netui/compiler/schema/annotations/ProcessedAnnotationsDocument.class"/>
-        </ant>
     </target>

     <target name="clean">

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/AnnotationToXML.java
Fri Sep 16 13:27:57 2005
@@ -24,49 +24,53 @@
 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotationsDocument;
-import org.apache.beehive.netui.compiler.schema.annotations.AnnotatedElement;
-import org.apache.beehive.netui.compiler.schema.annotations.ProcessedAnnotation;
-import org.apache.beehive.netui.compiler.schema.annotations.AnnotationAttribute;
 import org.apache.beehive.netui.compiler.model.StrutsApp;
-import org.apache.xmlbeans.XmlOptions;
+import org.apache.beehive.netui.compiler.model.XmlModelWriter;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
+import org.w3c.dom.Element;

 import java.util.Map;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Date;
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;

 public class AnnotationToXML
 {
-    private static final String ANNOTATIONS_FILE_PREFIX = "jpf-annotations";
+    private static final String ANNOTATIONS_FILE_PREFIX = "annotations";

-    private ProcessedAnnotationsDocument _doc;
+    private XmlModelWriter _xw;
     private TypeDeclaration _typeDecl;

-    public AnnotationToXML( TypeDeclaration typeDecl )
+    public AnnotationToXML(TypeDeclaration typeDecl)
+            throws IOException, XmlModelWriterException
     {
-        _doc = ProcessedAnnotationsDocument.Factory.newInstance();
         _typeDecl = typeDecl;
-        ProcessedAnnotationsDocument.ProcessedAnnotations pa =
_doc.addNewProcessedAnnotations();
-        pa.setTypeName( typeDecl.getQualifiedName() );
+        String typeName = typeDecl.getQualifiedName();
+        StringBuffer comment = new StringBuffer(" Generated from ");
+        comment.append(typeName);
+        comment.append( " on " ).append( new Date().toString() ).append( ' ' );
+        _xw = new XmlModelWriter(null, "processed-annotations", null,
null, comment.toString());
+        _xw.addElementWithText(_xw.getRootElement(), "type-name", typeName);
     }

     public void include( MemberDeclaration memberDecl,
AnnotationInstance annotation )
     {
-        AnnotatedElement element =
_doc.getProcessedAnnotations().addNewAnnotatedElement();
         String name = memberDecl instanceof TypeDeclaration
                       ? ( ( TypeDeclaration ) memberDecl ).getQualifiedName()
                       : memberDecl.getSimpleName();
-        element.setElementName( name );
-        ProcessedAnnotation xmlAnnotation = element.addNewAnnotation();
+        Element annotatedElement =
_xw.addElement(_xw.getRootElement(), "annotated-element");
+        _xw.addElementWithText(annotatedElement, "element-name", name);
+        Element xmlAnnotation = _xw.addElement(annotatedElement, "annotation");
         include( xmlAnnotation, annotation );
     }

-    private void include( ProcessedAnnotation xmlAnnotation,
AnnotationInstance annotation )
+    private void include( Element xmlAnnotation, AnnotationInstance
annotation )
     {
-        xmlAnnotation.setAnnotationName(
annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName()
);
+        String annotationName =
annotation.getAnnotationType().getAnnotationTypeDeclaration().getQualifiedName();
+        _xw.addElementWithText(xmlAnnotation, "annotation-name",
annotationName);

         Map elementValues = annotation.getElementValues();

@@ -78,8 +82,8 @@

             String name = elementDecl.getSimpleName();
             Object value = annotationValue.getValue();
-            AnnotationAttribute xmlAttr =
xmlAnnotation.addNewAnnotationAttribute();
-            xmlAttr.setAttributeName( name );
+            Element xmlAttr = _xw.addElement(xmlAnnotation,
"annotation-attribute");
+            _xw.addElementWithText(xmlAttr, "attribute-name", name);

             if ( value instanceof List )
             {
@@ -91,39 +95,35 @@

                     // we only handle lists of annotations at the moment
                     assert listVal instanceof AnnotationInstance :
listVal.getClass().getName();
-                    include( xmlAttr.addNewAnnotationValue(), (
AnnotationInstance ) listVal );
+                    include(_xw.addElement(xmlAttr,
"annotation-value"), (AnnotationInstance) listVal);
                 }
             }
             else
             {
                 // we only support a few types at the moment
                 assert value instanceof TypeInstance || value
instanceof String : value.getClass().getName();
-                xmlAttr.setStringValue1( value.toString() );
+                _xw.addElementWithText(xmlAttr, "string-value",
value.toString());
             }
         }
     }

     public void writeXml( Diagnostics diagnostics,
AnnotationProcessorEnvironment env )
+            throws IOException, XmlModelWriterException
     {
-        String typeName = _typeDecl.getQualifiedName();
-        String outputFilePath = StrutsApp.getOutputFileURI(
ANNOTATIONS_FILE_PREFIX, typeName, false );
-        PrintWriter writer = null;
-
-        try
-        {
-            XmlOptions options = new XmlOptions();
-            options.setSavePrettyPrint();
-            File outputFile = new File( outputFilePath );
-            writer = env.getFiler().createTextFile( outputFile );
-            _doc.save( writer, options );
-        }
-        catch ( IOException e )
-        {
-            diagnostics.addError( _typeDecl,
"error.could-not-generate", outputFilePath, e.getMessage() );
-        }
-        finally
-        {
-            if ( writer != null ) writer.close();
+        String outputFilePath = getFilePath(_typeDecl);
+        File outputFile = new File(outputFilePath);
+        PrintWriter writer = env.getFiler().createTextFile(outputFile);
+
+        try {
+            _xw.simpleFastWrite(writer);
+        } finally {
+            writer.close();
         }
+    }
+
+    public static String getFilePath(TypeDeclaration typeDecl)
+    {
+        String typeName = typeDecl.getQualifiedName();
+        return StrutsApp.getOutputFileURI( ANNOTATIONS_FILE_PREFIX,
typeName, false );
     }
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FacesBackingGenerator.java
Fri Sep 16 13:27:57 2005
@@ -22,8 +22,6 @@
 import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;

-import java.io.File;
-
 public class FacesBackingGenerator
         extends BaseGenerator
         implements JpfLanguageConstants
@@ -36,26 +34,32 @@
     public void generate( ClassDeclaration publicClass )
         throws FatalCompileTimeException
     {
-        AnnotationInstance facesBackingAnnotation =
CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
-        assert facesBackingAnnotation != null;  // checker should enforce this
-        AnnotationToXML atx = new AnnotationToXML( publicClass );
-
-        // Add the class-level @Jpf.FacesBacking annotation.
-        atx.include( publicClass, facesBackingAnnotation );
-
-        // For each method, add the @Jpf.CommandHandler annotation.
-        MethodDeclaration[] methods = CompilerUtils.getClassMethods(
publicClass, COMMAND_HANDLER_TAG_NAME );
-        for ( int i = 0; i < methods.length; i++ )
-        {
-            MethodDeclaration method = methods[i];
-            AnnotationInstance commandHandlerAnn =
CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
-            atx.include( method, commandHandlerAnn );
+        try {
+            AnnotationInstance facesBackingAnnotation =
CompilerUtils.getAnnotation( publicClass, FACES_BACKING_TAG_NAME );
+            assert facesBackingAnnotation != null;  // checker should
enforce this
+            AnnotationToXML atx = new AnnotationToXML( publicClass );
+
+            // Add the class-level @Jpf.FacesBacking annotation.
+            atx.include( publicClass, facesBackingAnnotation );
+
+            // For each method, add the @Jpf.CommandHandler annotation.
+            MethodDeclaration[] methods =
CompilerUtils.getClassMethods( publicClass, COMMAND_HANDLER_TAG_NAME
);
+            for ( int i = 0; i < methods.length; i++ )
+            {
+                MethodDeclaration method = methods[i];
+                AnnotationInstance commandHandlerAnn =
CompilerUtils.getAnnotation( method, COMMAND_HANDLER_TAG_NAME );
+                atx.include( method, commandHandlerAnn );
+            }
+
+            // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
+            FlowControllerGenerator.includeFieldAnnotations( atx,
publicClass, PAGE_FLOW_FIELD_TAG_NAME );
+
+            // Write the file.
+            atx.writeXml( getDiagnostics(), getEnv() );
+        } catch (Exception e) {
+            getDiagnostics().addError( publicClass, "error.could-not-generate",
+                                      
AnnotationToXML.getFilePath(publicClass), e.getMessage() );
+            e.printStackTrace();  // TODO: log instead
         }
-
-        // Add @Jpf.SharedFlowField, @Jpf.PageFlowField, @Control.
-        FlowControllerGenerator.includeFieldAnnotations( atx,
publicClass, PAGE_FLOW_FIELD_TAG_NAME );
-
-        // Write the file.
-        atx.writeXml( getDiagnostics(), getEnv() );
     }
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerChecker.java
Fri Sep 16 13:27:57 2005
@@ -34,7 +34,6 @@
 import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
 import org.apache.beehive.netui.compiler.processor.SilentDiagnostics;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.FilenameFilter;
@@ -272,7 +271,7 @@
     }

     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException;
+        throws IOException, FatalCompileTimeException;

     protected void startCheckClass( ClassDeclaration jclass )
             throws FatalCompileTimeException
@@ -291,10 +290,6 @@
             strutsApp = createStrutsApp( jclass );
             strutsConfigFile = strutsApp.getStrutsConfigFile();
         }
-        catch ( XmlException e )
-        {
-            // will be reported at generate time
-        }
         catch ( IOException e )
         {
             // will be reported at generate time
@@ -302,8 +297,6 @@

         if ( strutsConfigFile != null )
         {
-            File parentDir = strutsConfigFile.getParentFile();
-
             getFCSourceFileInfo().addReferencedFile( strutsConfigFile );

             if ( strutsConfigFile.exists() && strutsApp != null && !
strutsApp.canWrite() )

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/FlowControllerGenerator.java
Fri Sep 16 13:27:57 2005
@@ -24,7 +24,7 @@
 import org.apache.beehive.netui.compiler.typesystem.declaration.FieldDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;

 import java.io.File;
 import java.io.FileNotFoundException;
@@ -47,7 +47,7 @@
     }

     protected abstract GenStrutsApp createStrutsApp( ClassDeclaration cl )
-            throws XmlException, IOException, FatalCompileTimeException;
+            throws IOException, FatalCompileTimeException;

     public void generate( ClassDeclaration publicClass )
     {
@@ -78,8 +78,7 @@
         catch ( Exception e )
         {
             e.printStackTrace();    // @TODO log
-            assert e instanceof XmlException || e instanceof
IOException || e instanceof FileNotFoundException
-                    : e.getClass().getName();
+            assert e instanceof IOException : e.getClass().getName();
             getDiagnostics().addError( publicClass, "error.could-not-generate",
                                        app != null ?
app.getStrutsConfigFile() : null, e.getMessage() );
         }
@@ -90,13 +89,18 @@
     }

     private void writeFieldAnnotations( ClassDeclaration classDecl,
GenStrutsApp app )
-            throws FatalCompileTimeException
     {
-        AnnotationToXML atx = new AnnotationToXML( classDecl );
-
-        if ( includeFieldAnnotations( atx, classDecl, null ) )
-        {
-            atx.writeXml( getDiagnostics(), getEnv() );
+        try {
+            AnnotationToXML atx = new AnnotationToXML( classDecl );
+
+            if ( includeFieldAnnotations( atx, classDecl, null ) )
+            {
+                atx.writeXml( getDiagnostics(), getEnv() );
+            }
+        } catch (Exception e) {
+            getDiagnostics().addError(classDecl,
"error.could-not-generate", AnnotationToXML.getFilePath(classDecl),
+                                      e.getMessage() );
+            e.printStackTrace();  // TODO: log instead
         }
     }

@@ -167,7 +171,7 @@
             e.printStackTrace();    // @TODO get rid of this
             assert e instanceof FileNotFoundException
                    || e instanceof IOException
-                   || e instanceof XmlException
+                   || e instanceof XmlModelWriterException
                     : e.getClass().getName();

             getDiagnostics().addError( publicClass, "error.could-not-generate",

Added: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java?rev=289648&view=auto
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
(added)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
Fri Sep 16 13:27:57 2005
@@ -0,0 +1,67 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * $Header:$
+ */
+package org.apache.beehive.netui.compiler;
+
+import org.xml.sax.EntityResolver;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Entity resolver that tries to find the resource locally (from
classloader, under
+ * org/apache/beehive/netui/compiler/resources) before trying to
resolve via the network.
+ */
+public class LocalFileEntityResolver implements EntityResolver
+{
+    private static final String RESORUCE_PATH_PREFIX =
"org/apache/beehive/netui/compiler/resources/";
+    private static final LocalFileEntityResolver INSTANCE = new
LocalFileEntityResolver();
+
+    protected LocalFileEntityResolver() {
+    }
+
+    public static LocalFileEntityResolver getInstance() {
+        return INSTANCE;
+    }
+
+    /**
+     * Resolve the entity.  First try to find it locally, then
fallback to the network.
+     */
+    public InputSource resolveEntity(String publicID, String
systemID) throws SAXException, IOException {
+        InputSource localFileInput = resolveLocalEntity(systemID);
+        return localFileInput != null ? localFileInput : new
InputSource(systemID);
+    }
+
+    /**
+     * Resolve the given entity locally.
+     */
+    public InputSource resolveLocalEntity(String systemID) throws
SAXException, IOException {
+        String localFileName = systemID;
+        int fileNameStart = localFileName.lastIndexOf('/') + 1;
+        if (fileNameStart < localFileName.length()) {
+            localFileName = systemID.substring(fileNameStart);
+        }
+        ClassLoader cl = LocalFileEntityResolver.class.getClassLoader();
+        InputStream stream =
cl.getResourceAsStream(RESORUCE_PATH_PREFIX + localFileName);
+        if (stream != null) {
+            return new InputSource(stream);
+        }
+        return null;
+    }
+}

Propchange: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/LocalFileEntityResolver.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowChecker.java
Fri Sep 16 13:27:57 2005
@@ -29,7 +29,6 @@
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
 import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.IOException;
@@ -193,7 +192,7 @@
     }

     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenStrutsApp( sourceFile, jclass, getEnv(),
getFCSourceFileInfo(), true, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/PageFlowGenerator.java
Fri Sep 16 13:27:57 2005
@@ -20,7 +20,6 @@
 import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.IOException;
@@ -35,7 +34,7 @@
     }

     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenStrutsApp( sourceFile, jclass, getEnv(),
getFCSourceFileInfo(), false, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowChecker.java
Fri Sep 16 13:27:57 2005
@@ -23,7 +23,6 @@
 import org.apache.beehive.netui.compiler.grammar.InvalidAttributeType;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.IOException;
@@ -72,7 +71,7 @@
     }

     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenSharedFlowStrutsApp( sourceFile, jclass,
getEnv(), getFCSourceFileInfo(), true, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/SharedFlowGenerator.java
Fri Sep 16 13:27:57 2005
@@ -21,7 +21,6 @@
 import org.apache.beehive.netui.compiler.genmodel.GenStrutsApp;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.IOException;
@@ -36,7 +35,7 @@
     }

     protected GenStrutsApp createStrutsApp( ClassDeclaration jclass )
-            throws XmlException, IOException, FatalCompileTimeException
+            throws IOException, FatalCompileTimeException
     {
         File sourceFile = CompilerUtils.getSourceFile( jclass, true );
         return new GenSharedFlowStrutsApp( sourceFile, jclass,
getEnv(), getFCSourceFileInfo(), false, getDiagnostics() );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/diagnostics.properties
Fri Sep 16 13:27:57 2005
@@ -15,6 +15,7 @@
 error.atmost-one-may-exist-6 = Only one of attributes "{0}", "{1}",
"{2}", "{3}", "{4}", or "{5}" may be present.
 error.attr-dependency-not-found-1 = Attribute "{0}" may only be
present when attribute "{1}" is present.
 error.attr-dependency-not-found-2 = Attribute "{0}" may only be
present when attribute "{1}" or "{2}" is present.
+error.attr-dependency-not-found-3 = Attribute "{0}" may only be
present when one of attributes "{1}", "{2}", or "{3}" is present.
 error.unresolved-exception-handler = No exception handler method
named "{0}" could be found.
 error.invalid-parent-directory = Could not create parent directory "{0}".
 error.struts-config-not-writable = Cannot write to "{0}".
@@ -78,7 +79,7 @@
 error.xml-parse-error = Error while parsing {0} (line {1}, column {2}): {3}
 error.xml-parse-error-nocolumn = Error while parsing {0} (line {1}): {2}
 error.xml-parse-error-nolinecolumn = Error while parsing {0}: {1}
-error.xml-read-error = Could not load {0}: {1}.
+error.xml-read-error = Could not load {0} due to {1}: {2}.

 error.invalid-uri = This URI is invalid: {0}
 error.relative-uri = This attribute requires a relative path.

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenSharedFlowStrutsApp.java
Fri Sep 16 13:27:57 2005
@@ -23,7 +23,6 @@
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
 import org.apache.beehive.netui.compiler.Diagnostics;
 import org.apache.beehive.netui.compiler.FatalCompileTimeException;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.IOException;
@@ -35,7 +34,7 @@
 {
     public GenSharedFlowStrutsApp( File sourceFile, ClassDeclaration
jclass, AnnotationProcessorEnvironment env,
                                    FlowControllerInfo fcInfo, boolean
checkOnly, Diagnostics diagnostics )
-            throws XmlException, IOException, FatalCompileTimeException
+            throws IOException, FatalCompileTimeException
     {
         super( sourceFile, jclass, env, fcInfo, checkOnly, diagnostics );
         recalculateStrutsConfigFile();  // it changes based on _isGlobalApp

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenStrutsApp.java
Fri Sep 16 13:27:57 2005
@@ -28,20 +28,16 @@
 import org.apache.beehive.netui.compiler.model.ForwardModel;
 import org.apache.beehive.netui.compiler.model.MessageResourcesModel;
 import org.apache.beehive.netui.compiler.model.StrutsApp;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationInstance;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ClassDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.MethodDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.Modifier;
-import org.apache.beehive.netui.compiler.typesystem.declaration.PackageDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.ParameterDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.declaration.TypeDeclaration;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
 import org.apache.beehive.netui.compiler.typesystem.type.DeclaredType;
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
-import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
-import org.apache.xmlbeans.XmlCursor;
-import org.apache.xmlbeans.XmlException;
-import org.apache.xmlbeans.XmlObject;

 import java.io.File;
 import java.io.FileNotFoundException;
@@ -68,7 +64,7 @@
     private FlowControllerInfo _fcInfo;

     protected void recalculateStrutsConfigFile()
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         _strutsConfigFile = calculateStrutsConfigFile(); // caching this
     }
@@ -80,7 +76,7 @@

     public GenStrutsApp( File sourceFile, ClassDeclaration jclass,
AnnotationProcessorEnvironment env,
                          FlowControllerInfo fcInfo, boolean
checkOnly, Diagnostics diagnostics )
-        throws XmlException, IOException, FatalCompileTimeException
+        throws IOException, FatalCompileTimeException
     {
         super( jclass.getQualifiedName() );

@@ -328,9 +324,19 @@
     }

     public void writeToFile()
-        throws FileNotFoundException, IOException, XmlException,
FatalCompileTimeException
+        throws FileNotFoundException, IOException,
XmlModelWriterException, FatalCompileTimeException
     {
-        writeToFile( getMergeFile( getMergeFileName() ) );
+        File strutsMergeFile = getMergeFile( getMergeFileName() );
+        PrintWriter writer = getEnv().getFiler().createTextFile(
_strutsConfigFile );
+
+        try
+        {
+            writeXml( writer, strutsMergeFile );
+        }
+        finally
+        {
+            writer.close();
+        }
     }

     public boolean isStale()
@@ -419,23 +425,8 @@

         return true;
     }
-
-
-    public void writeToFile( File strutsMergeFile )
-        throws FileNotFoundException, IOException, XmlException,
FatalCompileTimeException
-    {
-        PrintWriter writer = getEnv().getFiler().createTextFile(
_strutsConfigFile );
-
-        try
-        {
-            writeXml( writer, strutsMergeFile );
-        }
-        finally
-        {
-            writer.close();
-        }
-    }
-
+
+
     public File getStrutsConfigFile()
     {
         return _strutsConfigFile;

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/genmodel/GenValidationModel.java
Fri Sep 16 13:27:57 2005
@@ -20,9 +20,9 @@
 import org.apache.beehive.netui.compiler.CompilerUtils;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
 import org.apache.beehive.netui.compiler.MergedControllerAnnotation;
-import org.apache.beehive.netui.compiler.Diagnostics;
 import org.apache.beehive.netui.compiler.FatalCompileTimeException;
 import org.apache.beehive.netui.compiler.model.FormBeanModel;
+import org.apache.beehive.netui.compiler.model.XmlModelWriterException;
 import org.apache.beehive.netui.compiler.model.validation.ValidationModel;
 import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
 import org.apache.beehive.netui.compiler.model.validation.ValidatorRule;
@@ -37,13 +37,10 @@
 import org.apache.beehive.netui.compiler.typesystem.type.TypeInstance;
 import org.apache.beehive.netui.compiler.typesystem.type.ClassType;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;
-import org.apache.xmlbeans.XmlException;

 import java.io.File;
 import java.io.FileNotFoundException;
-import java.io.FileOutputStream;
 import java.io.IOException;
-import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.util.Collection;
 import java.util.Iterator;
@@ -430,7 +427,7 @@
     }

     public void writeToFile()
-        throws FileNotFoundException, XmlException, IOException,
FatalCompileTimeException
+        throws FileNotFoundException, IOException,
FatalCompileTimeException, XmlModelWriterException
     {
         String outputFilePath = getOutputFileURI();
         File outputFile = new File( outputFilePath );

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ControllerGrammar.java
Fri Sep 16 13:27:57 2005
@@ -21,28 +21,28 @@
 import org.apache.beehive.netui.compiler.AnnotationMemberType;
 import org.apache.beehive.netui.compiler.FlowControllerInfo;
 import org.apache.beehive.netui.compiler.Diagnostics;
-import org.apache.beehive.netui.compiler.model.schema.struts11.StrutsConfigDocument;
-import org.apache.beehive.netui.compiler.model.schema.validator11.FormValidationDocument;
 import org.apache.beehive.netui.compiler.typesystem.env.AnnotationProcessorEnvironment;

+import java.net.URL;
+

 public class ControllerGrammar
         extends BaseFlowControllerGrammar
-{
+{
     public ControllerGrammar( AnnotationProcessorEnvironment env,
Diagnostics diags, RuntimeVersionChecker rvc,
                               FlowControllerInfo fcInfo )
     {
         super( env, diags, null, rvc, fcInfo );
-
+
         addMemberType( LOGIN_REQUIRED_ATTR, new AnnotationMemberType(
null, this ) );
         addMemberType( ROLES_ALLOWED_ATTR, new RolesAllowedType( this ) );
         addMemberType( READONLY_ATTR, new AnnotationMemberType( null, this ) );
-        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
StrutsConfigDocument.type, null, this, fcInfo ) );
+        addMemberType( STRUTSMERGE_ATTR, new ValidXmlFileType(
"struts-config_1_1.xsd", null, this, fcInfo ) );
         addMemberType( VALIDATOR_VERSION_ATTR, new
AnnotationMemberType( null, this ) );
-        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
FormValidationDocument.type, null, this, fcInfo ) );
+        addMemberType( VALIDATOR_MERGE_ATTR, new ValidXmlFileType(
"struts-validator_1_1.xsd", null, this, fcInfo ) );
         addMemberType( TILES_DEFINITIONS_CONFIGS_ATTR, new
TilesDefinitionsConfigsType( null, this, fcInfo ) );
         addMemberType( MULTIPART_HANDLER_ATTR, new
AnnotationMemberType( null, this ) );
-
+
         addMemberArrayGrammar( SHARED_FLOW_REFS_ATTR, new
SharedFlowRefGrammar( env, diags, rvc ) );
         addMemberArrayGrammar( FORWARDS_ATTR, new ForwardGrammar(
env, diags, null, rvc, fcInfo ) );
         addMemberArrayGrammar( CATCHES_ATTR, new CatchGrammar( env,
diags, null, rvc, CONTROLLER_TAG_NAME, fcInfo ) );
@@ -50,7 +50,7 @@
         addMemberArrayGrammar( VALIDATABLE_BEANS_ATTR, new
ValidatableBeanGrammar( env, diags, rvc ) );
         addMemberArrayGrammar( SIMPLE_ACTIONS_ATTR, new
SimpleActionGrammar( env, diags, rvc, fcInfo ) );
     }
-
+
     public String[][] getMutuallyExclusiveAttrs()
     {
         return null;

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/grammar/ValidXmlFileType.java
Fri Sep 16 13:27:57 2005
@@ -19,154 +19,159 @@

 import org.apache.beehive.netui.compiler.AnnotationGrammar;
 import org.apache.beehive.netui.compiler.FlowControllerInfo;
-import org.apache.xmlbeans.SchemaType;
-import org.apache.xmlbeans.XmlOptions;
-import org.apache.xmlbeans.XmlObject;
-import org.apache.xmlbeans.XmlError;
-import org.apache.xmlbeans.XmlException;
+import org.apache.beehive.netui.compiler.LocalFileEntityResolver;
 import org.apache.beehive.netui.compiler.typesystem.declaration.AnnotationValue;
+import org.xml.sax.SAXParseException;
+import org.xml.sax.SAXException;
+import org.xml.sax.InputSource;
+import org.xml.sax.helpers.DefaultHandler;

+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.DocumentBuilder;
 import java.util.Map;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.List;
-import java.util.ArrayList;
 import java.io.File;
+import java.io.IOException;


 public class ValidXmlFileType
         extends WebappPathType
 {
-    private SchemaType _schema;
+    private String _schemaFileName;
     private static Map _parseResults = Collections.synchronizedMap(
new HashMap() );
-
-    public ValidXmlFileType( SchemaType schema, String
requiredRuntimeVersion, AnnotationGrammar parentGrammar,
+
+    public ValidXmlFileType( String schemaFileName, String
requiredRuntimeVersion, AnnotationGrammar parentGrammar,
                              FlowControllerInfo fcInfo )
     {
         super( false, requiredRuntimeVersion, parentGrammar, fcInfo );
-        _schema = schema;
+        assert schemaFileName != null;
+        _schemaFileName = schemaFileName;
     }

-
+
     protected boolean checkAnyExtension()
     {
         return true;
     }

-
+
     protected boolean doFatalError()
     {
         return true;
     }
-
-
+
+
     protected boolean ignoreDirectories()
     {
         return false;
     }
-
-
+
+
     protected boolean allowFileInPageFlowSourceDir()
     {
         return true;
     }
-
-
+
+
     protected void runAdditionalChecks( File file, AnnotationValue value )
     {
-        try
+
+        //
+        // We cache the results of parsing the file until the file is
actually modified,
+        // so we don't end up continually re-parsing it.
+        //
+        ParseResults prevResults = ( ParseResults )
_parseResults.get( file.getPath() );
+        long lastModTime = file.lastModified();
+
+        if ( prevResults == null || lastModTime >
prevResults.getFileModTime() )
         {
-            //
-            // We cache the results of parsing the file until the
file is actually modified,
-            // so we don't end up continually re-parsing it.
-            //
-            ParseResults prevResults = ( ParseResults )
_parseResults.get( file.getPath() );
-
-            if ( prevResults == null || file.lastModified() >
prevResults.getFileModTime() )
+            try
             {
-                try
-                {
-                    XmlOptions options = new XmlOptions();
-                    options.setDocumentType( _schema );
-                    XmlObject xml = XmlObject.Factory.parse( file, options );
-                    List errorListener = new ArrayList();
-                    options.setErrorListener( errorListener );
-
-                    if ( !xml.validate( options ) )
-                    {
-                        assert !errorListener.isEmpty();
-
-                        XmlError err = ( XmlError ) errorListener.get( 0 );
-                        assert err != null;
-
-                        throw new XmlException( err.getMessage(), null, err );
-                    }
-                }
-                catch ( Exception e )
-                {
-                    _parseResults.put( file.getPath(), new
ParseResults( file.lastModified(), e ) );
-                    throw e;
+                LocalFileEntityResolver entityResolver =
LocalFileEntityResolver.getInstance();
+                InputSource schemaInput = 
entityResolver.resolveLocalEntity(_schemaFileName);
+                assert schemaInput != null : "could not get schema
resource for " + _schemaFileName;
+                DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
+                factory.setNamespaceAware(true);
+                factory.setValidating(true);
+                factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaLanguage",
+                                      "http://www.w3.org/2001/XMLSchema");
+                factory.setAttribute(
"http://java.sun.com/xml/jaxp/properties/schemaSource", schemaInput);
+                DocumentBuilder builder = factory.newDocumentBuilder();
+               
builder.setEntityResolver(LocalFileEntityResolver.getInstance());
+                Validator handler = new Validator(lastModTime, file, value);
+                builder.setErrorHandler(handler);
+                builder.parse(file);
+                if (handler.hadErrors()) {
+                    return;
                 }
-
-                _parseResults.put( file.getPath(), new ParseResults(
file.lastModified(), null ) );
             }
-            else
+            catch ( SAXParseException e )
             {
-                Exception e = prevResults.getException();
-
-                if ( e != null )
-                {
-                    throw e;
-                }
+                addErrorDiagnostic( file, e, value );
+                _parseResults.put( file.getPath(), new ParseResults(
lastModTime, e ) );
+                return;
             }
+            catch ( Exception e )
+            {
+                _parseResults.put( file.getPath(), new ParseResults(
lastModTime, e ) );
+                addError( value, "error.xml-read-error",
+                          new Object[]{ file.getPath(),
e.getClass().getName(), e.getMessage() } );
+                return;
+            }
+
+            _parseResults.put( file.getPath(), new ParseResults(
lastModTime, null ) );
         }
-        catch ( XmlException e )
-        {
-            addErrorDiagnostic( e.getError(), value );
-        }
-        catch ( Exception e )
+        else
         {
-            addError( value, "error.xml-read-error", new Object[]{
file.getPath(), e.getMessage() } );
+            Exception e = prevResults.getException();
+
+            if (e instanceof SAXParseException) {
+                addErrorDiagnostic(file, (SAXParseException) e, value);
+            } else if (e != null) {
+                addError( value, "error.xml-read-error",
+                          new Object[]{ file.getPath(),
e.getClass().getName(), e.getMessage() } );
+            }
         }
     }
-
-    private void addErrorDiagnostic( XmlError err, AnnotationValue value )
+
+    private void addErrorDiagnostic( File file, SAXParseException
err, AnnotationValue value )
     {
-        if ( err.getColumn() != -1 && err.getLine() != -1 )
+        if ( err.getColumnNumber() != -1 && err.getLineNumber() != -1 )
         {
             Object[] args =
                     {
-                        err.getSourceName(),
-                        new Integer( err.getLine() ),
-                        new Integer( err.getColumn() ),
+                        file.getPath(),
+                        new Integer( err.getLineNumber() ),
+                        new Integer( err.getColumnNumber() ),
                         err.getMessage()
                     };
-
+
             addError( value, "error.xml-parse-error", args );
         }
-        else if ( err.getLine() != -1 )
+        else if ( err.getLineNumber() != -1 )
         {
             Object[] args =
             {
-                err.getSourceName(),
-                new Integer( err.getLine() ),
+                file.getPath(),
+                new Integer( err.getLineNumber() ),
                 err.getMessage()
             };
-
+
             addError( value, "error.xml-parse-error-nocolumn", args );
-        }
+        }
         else
         {
             Object[] args =
             {
-                err.getSourceName(),
+                file.getPath(),
                 err.getMessage()
             };
-
+
             addError( value, "error.xml-parse-error-nolinecolumn", args );
         }
     }
-
+
     private static class ParseResults
     {
         private long _fileModTime;
@@ -196,6 +201,46 @@
         public void setException( Exception exception )
         {
             _exception = exception;
+        }
+    }
+
+    private class Validator extends DefaultHandler {
+
+        private long _fileModTime;
+        private File _file;
+        private AnnotationValue _value;
+        private boolean _hadErrors = false;
+
+        public Validator(long fileModTime, File file, AnnotationValue value) {
+            _fileModTime = fileModTime;
+            _file = file;
+            _value = value;
+        }
+
+        public void error(SAXParseException ex)
+                throws SAXException {
+            ParseResults results = new ParseResults(_fileModTime, ex);
+            addErrorDiagnostic(_file, ex, _value );
+            _parseResults.put(_file.getPath(), results);
+            _hadErrors = true;
+        }
+
+        public void fatalError(SAXParseException ex)
+                throws SAXException {
+            error(ex);
+        }
+
+        public void warning(SAXParseException exception)
+                throws SAXException {
+            // TODO: add a compiler warning?
+        }
+
+        public boolean hadErrors() {
+            return _hadErrors;
+        }
+
+        public InputSource resolveEntity(String publicId, String
systemId) throws IOException, SAXException {
+            return super.resolveEntity(publicId, systemId);
         }
     }
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/AbstractForwardContainer.java
Fri Sep 16 13:27:57 2005
@@ -17,8 +17,7 @@
  */
 package org.apache.beehive.netui.compiler.model;

-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
-import org.apache.xmlbeans.XmlObject;
+import org.w3c.dom.Element;

 import java.util.LinkedHashMap;
 import java.util.Iterator;
@@ -71,28 +70,13 @@
         return ( ForwardModel ) _forwards.get( forwardName );
     }

-    public void writeForwards( ForwardDocument.Forward[]
existingForwards, XmlObject xmlForwardContainer )
+    public void writeForwards( XmlModelWriter xw, Element
forwardsParentElement )
     {
         for ( Iterator i = _forwards.values().iterator(); i.hasNext(); )
         {
             ForwardModel fwd = ( ForwardModel ) i.next();
-            ForwardDocument.Forward fwdToEdit = null;
-
-            for ( int j = 0; j < existingForwards.length; ++j )
-            {
-                if ( fwd.getName().equals( existingForwards[j].getName() ) )
-                {
-                    fwdToEdit = existingForwards[j];
-                    break;
-                }
-            }
-
-            if ( fwdToEdit == null )
-            {
-                fwdToEdit = addNewForward( xmlForwardContainer );
-            }
-
-            fwd.writeToXMLBean( fwdToEdit );
+            Element fwdToEdit = findChildElement(xw,
forwardsParentElement, "forward", "name", fwd.getName(), true);
+            fwd.writeXML( xw, fwdToEdit );
         }
     }

@@ -112,6 +96,5 @@
     {
         _forwards.remove( forward.getName() );
     }
-
-    protected abstract ForwardDocument.Forward addNewForward(
XmlObject xmlForwardContainer );
+
 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ActionModel.java
Fri Sep 16 13:27:57 2005
@@ -22,13 +22,8 @@
 import java.util.LinkedHashMap;
 import java.util.Iterator;

-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument.Action;
-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ForwardDocument;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ActionDocument;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
-import org.apache.xmlbeans.XmlObject;
+import org.w3c.dom.Element;


 /**
@@ -43,11 +38,10 @@

     private static final String JPF_ACTION_MAPPING_CLASSNAME =
PAGEFLOW_PACKAGE + ".config.PageFlowActionMapping";

-
+
     // Struts attributes.
     private ArrayList _exceptionCatches = new ArrayList();
     private String _attribute;
-    private String _className;
     private String _forward;
     private String _include;
     private String _input;
@@ -88,7 +82,7 @@
         this._path = path;
         this._formBeanName = formName;
     }
-
+
     protected ActionModel( StrutsApp parent )
     {
         this( null, null, parent );
@@ -96,7 +90,7 @@

     /**
      * Construct a copy of the given mapping, with the given path.
-     */
+     */
     public ActionModel( ActionModel src, String newPath )
     {
         super( src );
@@ -104,7 +98,6 @@
         this._formBeanName = src._formBeanName;
         _exceptionCatches = ( ArrayList ) src._exceptionCatches.clone();
         _attribute = src._attribute;
-        _className = src._className;
         _forward = src._forward;
         _include = src._include;
         _input = src._input;
@@ -126,127 +119,70 @@
         _unqualifiedActionPath = src._unqualifiedActionPath;
         _defaultForwardName = src._defaultForwardName;
     }
-
+
     public void setFormBeanName( String formBeanName )
     {
         _formBeanName = formBeanName;
     }
-
-    public void writeToXMLBean( Action xb )
+
+    protected void writeToElement(XmlModelWriter xw, Element element)
     {
-        xb.setPath( _path );
-
-        if ( xb.getName() == null && _formBeanName != null )
xb.setName( _formBeanName );
-        if ( xb.getClassName() == null && _className != null )
xb.setClassName( _className );
-        if ( xb.getType() == null && _type != null ) xb.setType( _type );
-        if ( xb.getAttribute() == null && _attribute != null )
xb.setAttribute( _attribute );
-        if ( xb.getInput() == null && _input != null ) xb.setInput( _input );
-        if ( xb.getParameter() == null && _parameter != null )
xb.setParameter( _parameter );
-        if ( xb.getPrefix() == null && _prefix != null )
xb.setPrefix( _prefix );
-        if ( xb.getSuffix() == null && _suffix != null )
xb.setSuffix( _suffix );
-
-        if ( xb.getScope() == null )
-        {
-            if ( _scope != null )
-            {
-                if ( _scope.equals( "request" ) )
-                {
-                    xb.setScope( Action.Scope.REQUEST );
-                }
-                else if ( _scope.equals( "session" ) )
-                {
-                    xb.setScope( Action.Scope.SESSION );
-                }
-                else
-                {
-                    assert false : _scope;
-                }
-            }
-            else
-            {
-                xb.setScope( Action.Scope.REQUEST );
-            }
-        }
-
-        if ( xb.getRoles() == null && _roles != null ) xb.setRoles( _roles );
-        if ( xb.getForward2() == null &&  _forward != null )
xb.setForward2( _forward );
-        if ( xb.getInclude() == null && _include != null )
xb.setInclude( _include );
-        if ( xb.getUnknown() == null && _unknown ) xb.setUnknown(
Action.Unknown.TRUE );
-        if ( xb.getValidate() == null ) xb.setValidate( _validate ?
Action.Validate.TRUE : Action.Validate.FALSE );
-
-        if (  _unqualifiedActionPath != null ) addSetProperty( xb,
"unqualifiedActionPath", _unqualifiedActionPath );
-        if ( _formMember != null ) addSetProperty( xb, "formMember",
_formMember );
-        if ( _formClass != null ) addSetProperty( xb, "formClass",
_formClass );
-        if ( _loginRequired ) addSetProperty( xb, "loginRequired",
_loginRequired );
-        if ( _preventDoubleSubmit ) addSetProperty( xb,
"preventDoubleSubmit", _preventDoubleSubmit );
-        if ( _isOverloaded ) addSetProperty( xb, "overloaded", _isOverloaded );
-        if ( _readonly ) addSetProperty( xb, "readonly", _readonly );
-        if ( _isSimpleAction ) addSetProperty( xb, "simpleAction",
_isSimpleAction );
-        if ( _defaultForwardName != null ) addSetProperty( xb,
"defaultForward", _defaultForwardName );
-
+        element.setAttribute("path", _path);
+        setElementAttribute(element, "name", _formBeanName);
+        setElementAttribute(element, "className", getClassName());
+        setElementAttribute(element, "type", _type);
+        setElementAttribute(element, "attribute", _attribute);
+        setElementAttribute(element, "input", _input);
+        setElementAttribute(element, "parameter", _parameter);
+        setElementAttribute(element, "prefix", _prefix);
+        setElementAttribute(element, "suffix", _suffix);
+        setElementAttribute(element, "scope", _scope != null ? _scope
: "request");
+        setElementAttribute(element, "roles", _roles);
+        setElementAttribute(element, "forward", _forward);
+        setElementAttribute(element, "include", _include);
+        setElementAttribute(element, "validate",
Boolean.toString(_validate));  // always set the value, even if false
+        addSetProperty( xw, element, "unqualifiedActionPath",
_unqualifiedActionPath );
+        addSetProperty( xw, element, "formMember", _formMember );
+        addSetProperty( xw, element, "formClass", _formClass );
+        addSetProperty( xw, element, "loginRequired", _loginRequired );
+        addSetProperty( xw, element, "preventDoubleSubmit",
_preventDoubleSubmit );
+        addSetProperty( xw, element, "overloaded", _isOverloaded );
+        addSetProperty( xw, element, "readonly", _readonly );
+        addSetProperty( xw, element, "simpleAction", _isSimpleAction );
+        addSetProperty( xw, element, "defaultForward", _defaultForwardName );
+        addSetProperty( xw, element, "formBeanMessageResourcesKey",
_formBeanMessageResourcesKey );
+
         if ( _conditionalForwards != null )
         {
-            addSetProperty( xb, "conditionalForwards", getMapString(
_conditionalForwards) );
-        }
-
-        if ( _formBeanMessageResourcesKey != null )
-        {
-            addSetProperty( xb, "formBeanMessageResourcesKey",
_formBeanMessageResourcesKey );
+            addSetProperty( xw, element, "conditionalForwards",
getMapString( _conditionalForwards) );
         }
-
+
         if ( _exceptionCatches != null && ! _exceptionCatches.isEmpty() )
         {
-            ExceptionDocument.Exception[] existingExceptions =
xb.getExceptionArray();
-
             for ( int i = 0; i < _exceptionCatches.size(); ++i )
             {
                 ExceptionModel ec = ( ExceptionModel )
_exceptionCatches.get( i );
-                ExceptionDocument.Exception exceptionToEdit = null;
-
-                for ( int j = 0; j < existingExceptions.length; ++j )
-                {
-                    if ( ec.getType().equals(
existingExceptions[j].getType() ) )
-                    {
-                        exceptionToEdit = existingExceptions[j];
-                        break;
-                    }
-                }
-
-                if ( exceptionToEdit == null )
-                {
-                    exceptionToEdit = xb.addNewException();
-                }
-
-                ec.writeToXMLBean( exceptionToEdit );
+                Element exceptionToEdit = findChildElement(xw,
element, "exception", "type", ec.getType(), true);
+                ec.writeXML( xw, exceptionToEdit );
             }
         }
-
+
         //
         // forwards
         //
-        writeForwards( xb.getForwardArray(), xb );
-
-        addComment( xb );
-    }
-
-    private void addSetProperty( ActionDocument.Action xb, String
propertyName, boolean propertyValue )
-    {
-        addSetProperty( xb, propertyName, Boolean.toString( propertyValue ) );
+        writeForwards( xw, element );
     }
-
-    private void addSetProperty( ActionDocument.Action xb, String
propertyName, String propertyValue )
+
+    private void addSetProperty( XmlModelWriter xw, Element element,
String propertyName, boolean propertyValue )
     {
-        SetProperty prop = xb.addNewSetProperty();
-        prop.setProperty( propertyName );
-        prop.setValue( propertyValue );
-        if ( xb.getClassName() == null ) xb.setClassName(
JPF_ACTION_MAPPING_CLASSNAME );
+        if (propertyValue) addSetProperty( xw, element, propertyName,
Boolean.toString( propertyValue ) );
     }
-
-    protected ForwardDocument.Forward addNewForward( XmlObject xmlObject )
+
+    private void addSetProperty( XmlModelWriter xw, Element element,
String propertyName, String propertyValue )
     {
-        return ( ( Action ) xmlObject ).addNewForward();
+        setCustomProperty(xw, element, propertyName, propertyValue,
JPF_ACTION_MAPPING_CLASSNAME);
     }
-
+
     /**
      * Implemented for {@link ExceptionContainer}.
      */
@@ -265,16 +201,6 @@
         this._attribute = attribute;
     }

-    public String getClassName()
-    {
-        return _className;
-    }
-
-    public void setClassName( String className )
-    {
-        this._className = className;
-    }
-
     public String getForward()
     {
         return _forward;
@@ -309,7 +235,7 @@
     {
         return _formBeanName;
     }
-
+
     public String getFormBeanName()
     {
         return _formBeanName;
@@ -344,7 +270,7 @@
     {
         return _path;
     }
-
+
     public String getPath( boolean useUnqualifiedPath )
     {
         if ( useUnqualifiedPath && _unqualifiedActionPath != null )
@@ -446,7 +372,7 @@
     {
         _loginRequired = loginRequired;
     }
-
+
     public void setPreventDoubleSubmit( boolean preventDoubleSubmit )
     {
         _preventDoubleSubmit = preventDoubleSubmit;
@@ -501,23 +427,23 @@
     {
         _readonly = readonly;
     }
-
+
     public void addConditionalForward( String expression, String forwardName )
     {
         if ( _conditionalForwards == null ) _conditionalForwards =
new LinkedHashMap();
         _conditionalForwards.put( expression, forwardName );
     }
-
+
     private static String getMapString( Map map )
     {
         StringBuffer retVal = new StringBuffer();
-
+
         for ( Iterator i = map.entrySet().iterator(); i.hasNext(); )
         {
             Map.Entry entry = ( Map.Entry ) i.next();
             retVal.append( entry.getValue() ).append( ':' ).append(
entry.getKey() ).append( ';' );
         }
-
+
         return retVal.toString();
     }

@@ -525,6 +451,6 @@
     {
         _formBeanMessageResourcesKey = formBeanMessageResourcesKey;
     }
-
+

 }

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/ExceptionModel.java
Fri Sep 16 13:27:57 2005
@@ -17,10 +17,8 @@
  */
 package org.apache.beehive.netui.compiler.model;

-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
-import org.apache.beehive.netui.compiler.model.schema.struts11.ExceptionDocument;
-import org.apache.beehive.netui.compiler.model.validation.ValidatorConstants;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.w3c.dom.Element;

 public class ExceptionModel
         extends StrutsElementSupport
@@ -36,18 +34,18 @@
     private boolean _inheritedPath = false;

     private static final String JPF_EXCEPTION_CONFIG_CLASSNAME =
PAGEFLOW_PACKAGE + ".config.PageFlowExceptionConfig";
-
-
+
+
     protected ExceptionModel( StrutsApp parentApp )
     {
         super( parentApp );
     }
-
+
     public ExceptionModel( String type, String path, String
handlerMethod, String message,
                            String messageKey, StrutsApp parentApp )
     {
         super( parentApp );
-
+
         _type = type;
         _path = path;
         _handlerMethod = handlerMethod;
@@ -115,56 +113,55 @@
         _handlerClass = handlerClass;
     }

-    public void writeToXMLBean( ExceptionDocument.Exception xb )
-
+    protected void writeToElement(XmlModelWriter xw, Element element)
     {
-        xb.setType( _type );
+        element.setAttribute("type", _type);

-        if ( xb.getPath() == null && _path != null )
+        if ( _path != null )
         {
             boolean relativeToModule = ! _path.startsWith( "/" );
-
+
             if ( relativeToModule )
             {
-                xb.setPath( "/" + _path );  // struts wants "/" --
assumes this is module-relative path
+                // struts wants "/" -- assumes this is module-relative path
+                setElementAttribute(element, "path", '/' + _path);
             }
             else
             {
-                xb.setPath( _path );
-                addSetProperty( xb, "isPathContextRelative", "true" );
+                setElementAttributeMayBeEmpty(element, "path", _path);
+                addSetProperty(xw, element, "isPathContextRelative", "true" );
             }
         }
-
-        if ( _inheritedPath ) addSetProperty( xb, "inheritedPath", "true" );
-
-        if ( xb.getKey() == null && _messageKey != null ) xb.setKey(
_messageKey );
-
+
+        if ( _inheritedPath ) addSetProperty(xw, element,
"inheritedPath", "true" );
+
+        //
+        // Set the message key.  If there isn't one, use the typename
as the message key.
+        setElementAttribute(element, "key", _messageKey);
+        if (_messageKey == null) setElementAttribute(element, "key", _type);
+
         //
         // Struts doesn't support "message" directly -- we'll add
this as a custom property.
         //
-        if ( _message != null ) addSetProperty( xb, "defaultMessage",
_message );
-
-        if ( xb.getKey() == null ) xb.setKey( _type );
-
+        addSetProperty(xw, element, "defaultMessage", _message );
+
         //
         // Note that we're setting the handler *method* as the
handler.  This would break Struts.
         //
-        if ( xb.getHandler() == null && _handlerMethod != null &&
_handlerClass == null )
-        {
-            xb.setHandler( _handlerMethod );
-            addSetProperty( xb, "isHandlerMethod", "true" );
+        if ( _handlerMethod != null && _handlerClass == null ) {
+            setElementAttribute(element, "handler", _handlerMethod);
+            addSetProperty(xw, element, "isHandlerMethod", "true" );
+        }
+        else {
+            setElementAttribute(element, "handler", _handlerClass);
         }
-
-        if ( _readonly ) addSetProperty( xb, "readonly", "true" );
-        if ( xb.getHandler() == null && _handlerClass != null )
xb.setHandler( _handlerClass );
-    }
-
-    private void addSetProperty( ExceptionDocument.Exception xb,
String propertyName, String propertyValue )
-    {
-        SetProperty prop = xb.addNewSetProperty();
-        prop.setProperty( propertyName );
-        prop.setValue( propertyValue );
-        if ( xb.getClassName() == null ) xb.setClassName(
JPF_EXCEPTION_CONFIG_CLASSNAME );
+
+        if ( _readonly ) addSetProperty(xw, element, "readonly", "true" );
+    }
+
+    private void addSetProperty( XmlModelWriter xw, Element element,
String propertyName, String propertyValue )
+    {
+        setCustomProperty(xw, element, propertyName, propertyValue,
JPF_EXCEPTION_CONFIG_CLASSNAME);
     }

     public boolean isReadonly()

Modified: beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
URL: http://svn.apache.org/viewcvs/beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java?rev=289648&r1=289647&r2=289648&view=diff
==============================================================================
--- beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
(original)
+++ beehive/trunk/netui/src/compiler-core/org/apache/beehive/netui/compiler/model/FormBeanModel.java
Fri Sep 16 13:27:57 2005
@@ -21,9 +21,8 @@
 import java.util.Collection;
 import java.util.List;

-import org.apache.beehive.netui.compiler.model.schema.struts11.FormBeanDocument;
-import org.apache.beehive.netui.compiler.model.schema.struts11.SetPropertyDocument.SetProperty;
 import org.apache.beehive.netui.compiler.JpfLanguageConstants;
+import org.w3c.dom.Element;


 /**
@@ -90,18 +89,17 @@
     }


-    private static final String JPF_ACTION_FORM_BEAN_CLASSNAME =
PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";
+    private static final String CUSTOM_ACTION_FORM_BEAN_CLASSNAME =
PAGEFLOW_PACKAGE + ".config.PageFlowActionFormBean";

     private String _id = "";  // NOI18N
-    private String _className = null;
     private boolean _dynamic = false;
     private String _name = null;  // required to be set
     private String _type = null;  // required to be set
-
-    /** This is a NetUI-specific property. */
+
+    /** This is a NetUI-specific property. */
     private String _actualType = null;
-
-    /** This is a NetUI-specific property. */
+
+    /** This is a NetUI-specific property. */
     private boolean _pageFlowScoped;  // required to be set

     private ArrayList _properties = new ArrayList();
@@ -115,25 +113,21 @@
         _pageFlowScoped = pageFlowScoped;
     }

-    public void writeToXMLBean( FormBeanDocument.FormBean xb )
+    protected void writeToElement(XmlModelWriter xw, Element element)
     {
-        xb.setName( _name );
+        element.setAttribute("name", _name);

-        if ( xb.getType() == null ) xb.setType( _type );
-        if ( xb.getId() == null && _id != null && _id.length() > 0 )
xb.setId( _id );
-        if ( xb.getClassName() == null &&_className != null )
xb.setClassName( _className );
-        if ( xb.getDynamic() == null && _dynamic ) xb.setDynamic(
FormBeanDocument.FormBean.Dynamic.TRUE );
-
-        if ( _actualType != null && ! _actualType.equals( xb.getType() ) )
-        {
-            SetProperty prop = xb.addNewSetProperty();
-            prop.setProperty( "actualType" );
-            prop.setValue( _actualType );
-            if ( xb.getClassName() == null ) xb.setClassName(
JPF_ACTION_FORM_BEAN_CLASSNAME );
-        }
+        setElementAttribute(element, "type", _type);
+        setElementAttribute(element, "id", _id);
+        setElementAttribute(element, "className", getClassName());
+        setElementAttribute(element, "dynamic", _dynamic);

+        if ( _actualType != null && !
_actualType.equals(element.getAttribute("type")) )
+        {
+            setCustomProperty(xw, element, "actualType", _actualType,
CUSTOM_ACTION_FORM_BEAN_CLASSNAME);
+        }
     }
-
+
     public String getId()
     {
         return _id;
@@ -144,11 +138,6 @@
         _id = id;
     }

-    public String getClassName()
-    {
-        return _className;
-    }
-
     public void setClassName( String className )
     {
         if ( className != null )
@@ -156,7 +145,7 @@
             if ("org.apache.struts.action.DynaActionForm".equals(
className ) )  // NOI18N
                 _dynamic = true;

-            _className = className;
+            setClassName(className);
         }
     }