You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@xmlbeans.apache.org by ra...@apache.org on 2005/04/13 03:20:42 UTC

svn commit: r161139 - in xmlbeans/trunk: src/typeimpl/org/apache/xmlbeans/impl/schema/ src/typeimpl/org/apache/xmlbeans/impl/util/ src/xmlcomp/org/apache/xmlbeans/impl/tool/ test/src/compile/scomp/common/mockobj/

Author: radup
Date: Tue Apr 12 18:20:39 2005
New Revision: 161139

URL: http://svn.apache.org/viewcvs?view=rev&rev=161139
Log:
Completed the implementation of Filer.

Added:
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/Diff.java
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/FilerImpl.java
      - copied, changed from r160947, xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/FilerImpl.java
Removed:
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/FilerImpl.java
Modified:
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
    xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java
    xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java
    xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java
    xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
    xmlbeans/trunk/test/src/compile/scomp/common/mockobj/TestFiler.java

Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java?view=diff&r1=161138&r2=161139
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/SchemaTypeSystemImpl.java Tue Apr 12 18:20:39 2005
@@ -43,6 +43,7 @@
 import org.apache.xmlbeans.impl.common.NameUtil;
 import org.apache.xmlbeans.impl.common.QNameHelper;
 import org.apache.xmlbeans.impl.common.XBeanDebug;
+import org.apache.xmlbeans.impl.util.FilerImpl;
 import org.apache.xmlbeans.impl.util.HexBin;
 import org.apache.xmlbeans.impl.values.XmlObjectBase;
 import org.apache.xmlbeans.impl.xb.xsdschema.AttributeGroupDocument;

Modified: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java?view=diff&r1=161138&r2=161139
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/StscComplexTypeResolver.java Tue Apr 12 18:20:39 2005
@@ -1083,7 +1083,7 @@
                     }
                     if (group == null)
                     {
-                        state.notFoundError(ref, SchemaType.ATTRIBUTE_GROUP, xsdag.xgetRef(), false);
+                        state.notFoundError(ref, SchemaType.ATTRIBUTE_GROUP, xsdag.xgetRef(), true);
                         continue;
                     }
                     if (state.isProcessing(group))
@@ -1305,7 +1305,7 @@
                 }
                 if (group == null)
                 {
-                    state.notFoundError(ref, SchemaType.MODEL_GROUP, ((Group)parseTree).xgetRef(), false);
+                    state.notFoundError(ref, SchemaType.MODEL_GROUP, ((Group)parseTree).xgetRef(), true);
                     return null;
                 }
                 if (state.isProcessing(group))

Added: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/Diff.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/Diff.java?view=auto&rev=161139
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/Diff.java (added)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/Diff.java Tue Apr 12 18:20:39 2005
@@ -0,0 +1,55 @@
+/*   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.
+*/
+
+package org.apache.xmlbeans.impl.util;
+
+import java.io.IOException;
+import java.io.LineNumberReader;
+import java.io.Reader;
+import java.util.List;
+
+/**
+ * This needs to be here so that it can be accessed by FilerImpl
+ */
+public class Diff
+{
+    public static void readersAsText(Reader r1, String name1, Reader r2, String name2,
+        List diffs)
+        throws IOException
+    {
+        LineNumberReader reader1 = new LineNumberReader(r1);
+        LineNumberReader reader2 = new LineNumberReader(r2);
+        String line1 = reader1.readLine();
+        String line2 = reader2.readLine();
+        while (line1 != null && line2 != null)
+        {
+            if (!line1.equals(line2))
+            {
+                diffs.add("File \"" + name1 + "\" and file \"" +
+                    name2 + "\" differ at line " + reader1.getLineNumber() +
+                    ":" + "\n" + line1 + "\n========\n" + line2);
+                break;
+            }
+            line1 = reader1.readLine();
+            line2 = reader2.readLine();
+        }
+        if (line1 == null && line2 != null)
+            diffs.add("File \"" + name2 + "\" has extra lines at line " +
+                reader2.getLineNumber() + ":\n" + line2);
+        if (line1 != null && line2 == null)
+            diffs.add("File \"" + name1 + "\" has extra lines at line " +
+                reader1.getLineNumber() + ":\n" + line1);
+    }
+}

Copied: xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/FilerImpl.java (from r160947, xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/FilerImpl.java)
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/FilerImpl.java?view=diff&rev=161139&p1=xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/FilerImpl.java&r1=160947&p2=xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/FilerImpl.java&r2=161139
==============================================================================
--- xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/schema/FilerImpl.java (original)
+++ xmlbeans/trunk/src/typeimpl/org/apache/xmlbeans/impl/util/FilerImpl.java Tue Apr 12 18:20:39 2005
@@ -13,7 +13,7 @@
 *  limitations under the License.
 */
 
-package org.apache.xmlbeans.impl.schema;
+package org.apache.xmlbeans.impl.util;
 
 import org.apache.xmlbeans.Filer;
 
@@ -21,7 +21,9 @@
 import java.io.IOException;
 import java.io.File;
 import java.io.Writer;
+import java.io.FileReader;
 import java.io.FileWriter;
+import java.io.StringReader;
 import java.io.StringWriter;
 import java.io.FileOutputStream;
 import java.util.Set;
@@ -101,16 +103,20 @@
         if (verbose)
             System.err.println("created source: " + sourcefile.getAbsolutePath());
 
+        sourceFiles.add(sourcefile);
+
         if (incrSrcGen && sourcefile.exists())
         {
-            // KHK: ?
+            // Generate the file in a buffer and then compare it to the
+            // file already on disk
+            return new IncrFileWriter(sourcefile, repackager);
+        }
+        else
+        {
+            return repackager == null ?
+                (Writer) new FileWriter( sourcefile ) :
+                (Writer) new RepackagingWriter( sourcefile, repackager );
         }
-
-        sourceFiles.add(sourcefile);
-
-        return repackager == null
-            ? (Writer) new FileWriter( sourcefile )
-            : (Writer) new RepackagingWriter( sourcefile, repackager );
     }
 
     public List getSourceFiles()
@@ -123,6 +129,56 @@
         return repackager;
     }
 
+    static class IncrFileWriter extends StringWriter
+    {
+        private File _file;
+        private Repackager _repackager;
+
+        public IncrFileWriter(File file, Repackager repackager)
+        {
+            _file = file;
+            _repackager = repackager;
+        }
+
+        public void close() throws IOException
+        {
+            super.close();
+
+            // This is where all the real work happens
+            StringBuffer sb = _repackager != null ?
+                _repackager.repackage(getBuffer()) :
+                getBuffer();
+            String str = sb.toString();
+            List diffs = new ArrayList();
+            StringReader sReader = new StringReader(str);
+            FileReader fReader = new FileReader(_file);
+
+            try
+            {
+                Diff.readersAsText(sReader, "<generated>",
+                    fReader, _file.getName(), diffs);
+            }
+            finally
+            {
+                sReader.close();
+                fReader.close();
+            }
+
+            if (diffs.size() > 0)
+            {
+                // Diffs encountered, replace the file on disk with text from
+                // the buffer
+                FileWriter fw = new FileWriter(_file);
+                try
+                {   fw.write(str); }
+                finally
+                {   fw.close(); }
+            }
+            else
+                ; // If no diffs, don't do anything
+        }
+    }
+
     static class RepackagingWriter extends StringWriter
     {
         public RepackagingWriter ( File file, Repackager repackager )
@@ -136,8 +192,10 @@
             super.close();
 
             FileWriter fw = new FileWriter( _file );
-            fw.write( _repackager.repackage( getBuffer() ).toString() );
-            fw.close();
+            try
+            { fw.write( _repackager.repackage( getBuffer() ).toString() ); }
+            finally
+            { fw.close(); }
         }
 
         private File _file;

Modified: xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java?view=diff&r1=161138&r2=161139
==============================================================================
--- xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java (original)
+++ xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/Diff.java Tue Apr 12 18:20:39 2005
@@ -334,28 +334,7 @@
         List diffs)
         throws IOException
     {
-        LineNumberReader reader1 = new LineNumberReader(r1);
-        LineNumberReader reader2 = new LineNumberReader(r2);
-        String line1 = reader1.readLine();
-        String line2 = reader2.readLine();
-        while (line1 != null && line2 != null)
-        {
-            if (!line1.equals(line2))
-            {
-                diffs.add("File \"" + name1 + "\" and file \"" +
-                    name2 + "\" differ at line " + reader1.getLineNumber() +
-                    ":" + "\n" + line1 + "\n========\n" + line2);
-                break;
-            }
-            line1 = reader1.readLine();
-            line2 = reader2.readLine();
-        }
-        if (line1 == null && line2 != null)
-            diffs.add("File \"" + name2 + "\" has extra lines at line " +
-                reader2.getLineNumber() + ":\n" + line2);
-        if (line1 != null && line2 == null)
-            diffs.add("File \"" + name1 + "\" has extra lines at line " +
-                reader1.getLineNumber() + ":\n" + line1);
+        org.apache.xmlbeans.impl.util.Diff.readersAsText(r1, name1, r2, name2, diffs);
     }
 
     private static class XsbFilenameFilter implements FilenameFilter

Modified: xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java?view=diff&r1=161138&r2=161139
==============================================================================
--- xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java (original)
+++ xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCodeGenerator.java Tue Apr 12 18:20:39 2005
@@ -21,7 +21,7 @@
 import org.apache.xmlbeans.impl.common.XmlErrorWatcher;
 import org.apache.xmlbeans.impl.schema.SchemaTypeCodePrinter;
 import org.apache.xmlbeans.impl.schema.SchemaTypeSystemCompiler;
-import org.apache.xmlbeans.impl.schema.FilerImpl;
+import org.apache.xmlbeans.impl.util.FilerImpl;
 import org.apache.xmlbeans.SchemaCodePrinter;
 import org.apache.xmlbeans.XmlOptions;
 import org.apache.xmlbeans.Filer;
@@ -64,7 +64,7 @@
         system.save(filer);
     }
 
-    private static void deleteObsoleteFiles(File rootDir, File srcDir, Set seenFiles)
+    static void deleteObsoleteFiles(File rootDir, File srcDir, Set seenFiles)
     {
         if (!(rootDir.isDirectory() && srcDir.isDirectory()))
             throw new IllegalArgumentException();

Modified: xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java?view=diff&r1=161138&r2=161139
==============================================================================
--- xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java (original)
+++ xmlbeans/trunk/src/xmlcomp/org/apache/xmlbeans/impl/tool/SchemaCompiler.java Tue Apr 12 18:20:39 2005
@@ -34,8 +34,8 @@
 import org.apache.xmlbeans.impl.schema.SchemaTypeSystemCompiler;
 import org.apache.xmlbeans.impl.schema.SchemaTypeSystemImpl;
 import org.apache.xmlbeans.impl.schema.StscState;
-import org.apache.xmlbeans.impl.schema.FilerImpl;
 import org.apache.xmlbeans.impl.common.JarHelper;
+import org.apache.xmlbeans.impl.util.FilerImpl;
 import org.apache.xmlbeans.impl.values.XmlListImpl;
 import org.apache.xmlbeans.impl.xb.xmlconfig.ConfigDocument;
 import org.apache.xmlbeans.impl.xb.xsdschema.SchemaDocument;
@@ -1094,6 +1094,13 @@
 
             // gen source files
             result &= SchemaTypeSystemCompiler.generateTypes(system, filer, options);
+
+            if (incrSrcGen)
+            {
+                // We have to delete extra source files that may be out of date
+                SchemaCodeGenerator.deleteObsoleteFiles(srcDir, srcDir,
+                    new HashSet(filer.getSourceFiles()));
+            }
 
             if (result)
             {

Modified: xmlbeans/trunk/test/src/compile/scomp/common/mockobj/TestFiler.java
URL: http://svn.apache.org/viewcvs/xmlbeans/trunk/test/src/compile/scomp/common/mockobj/TestFiler.java?view=diff&r1=161138&r2=161139
==============================================================================
--- xmlbeans/trunk/test/src/compile/scomp/common/mockobj/TestFiler.java (original)
+++ xmlbeans/trunk/test/src/compile/scomp/common/mockobj/TestFiler.java Tue Apr 12 18:20:39 2005
@@ -15,7 +15,7 @@
 package compile.scomp.common.mockobj;
 
 import org.apache.xmlbeans.Filer;
-import org.apache.xmlbeans.impl.schema.FilerImpl;
+import org.apache.xmlbeans.impl.util.FilerImpl;
 
 import java.io.File;
 import java.io.OutputStream;



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