Author: kentam
Date: Tue Apr 26 16:08:07 2005
New Revision: 164906

URL: http://svn.apache.org/viewcvs?rev=164906&view=rev
Log:
BEEHIVE-272: Replace usages of ControlAssemblyContext.createJavaOutputFile() 
with getSrcOutputDir()
BEEHIVE-209: Need ability to log warnings, errors etc for controls assembly

Removed the deprecated createJavaOutputFile() API, and replaced its usages with 
getSrcOutputDir().
Added a getMessager() API to the ControlAssemblyContext, which returns an apt 
Messager object impl
that control assemblers can use to log diagnostics.


Modified:
    
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/assembly/ControlAssemblyContext.java
    
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/assembly/BaseAssemblyContext.java
    
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/assembly/AssemblyTestAssembler.java

Modified: 
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/assembly/ControlAssemblyContext.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/assembly/ControlAssemblyContext.java?rev=164906&r1=164905&r2=164906&view=diff
==============================================================================
--- 
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/assembly/ControlAssemblyContext.java
 (original)
+++ 
incubator/beehive/trunk/controls/src/api/org/apache/beehive/controls/api/assembly/ControlAssemblyContext.java
 Tue Apr 26 16:08:07 2005
@@ -24,6 +24,8 @@
 import java.util.Map;
 import java.util.Set;
 
+import com.sun.mirror.apt.Messager;
+
 /**
  * Control assemblers are passed a ControlAssemblyContext at the time they are
  * invoked; the context allows the assemblers to interact with their external
@@ -137,15 +139,6 @@
     String getDefaultImplClassName();
 
     /**
-     * @deprecated
-     * @return a File into which Java source can be written.
-     * Results in a file called <className>.java (in the
-     * directory given by <packageName>).
-     */
-    File createJavaOutputFile(String packageName,
-        String className);
-
-    /**
      * @return the output directory into which "compilable" source should be 
output.
      */
     File getSrcOutputDir();
@@ -164,4 +157,15 @@
      * @return the set of clients (by class name) which use the control type
      */
     Set<String> getClients();
+
+    /**
+     * @return a Messager implementation that can be used to emit diagnostics 
during the
+     *         assembly process.
+     */
+    Messager getMessager();
+
+    /**
+     * @return true if the assembly process reported errors via the Messager
+     */
+    boolean hasErrors();
 }

Modified: 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/assembly/BaseAssemblyContext.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/assembly/BaseAssemblyContext.java?rev=164906&r1=164905&r2=164906&view=diff
==============================================================================
--- 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/assembly/BaseAssemblyContext.java
 (original)
+++ 
incubator/beehive/trunk/controls/src/runtime/org/apache/beehive/controls/runtime/assembly/BaseAssemblyContext.java
 Tue Apr 26 16:08:07 2005
@@ -28,6 +28,9 @@
 import java.lang.reflect.Method;
 import java.util.*;
 
+import com.sun.mirror.apt.Messager;
+import com.sun.mirror.util.SourcePosition;
+
 /**
  * Base ControlAssemblyContext implementation
  */
@@ -44,6 +47,7 @@
         _moduleRoot = moduleRoot;
         _moduleName = moduleName;
         _srcOutputRoot = srcOutputRoot;
+        _messager = new DefaultAssemblyMessager();
 
         // Compute and cache "most derived ControlInterface"
         Queue<Class> q = new LinkedList<Class>();
@@ -107,23 +111,6 @@
         return ControlBeanContext.resolveDefaultBinding( a.defaultBinding(), 
ci.getName() );
     }
 
-    public File createJavaOutputFile(String packageName, String className)
-    {
-        File dir = null;
-        if (packageName != null && packageName != "")
-        {
-            dir = new File(_srcOutputRoot,
-                packageName.replace('/', File.separatorChar));
-            dir.mkdirs();
-        }
-        else
-        {
-            dir = _srcOutputRoot;
-        }
-
-        return new File(dir, className + ".java");
-    }
-
     public File getSrcOutputDir()
     {
         return _srcOutputRoot;
@@ -144,12 +131,71 @@
         return _clients;
     }
 
+    public Messager getMessager()
+    {
+        return _messager;
+    }
+
+    public boolean hasErrors()
+    {
+        return _nErrors > 0;
+    }
+
+    private class DefaultAssemblyMessager implements Messager
+    {
+        public void printError( SourcePosition pos, String msg )
+        {
+            printDiagnostic( "Error", pos, msg );
+            _nErrors++;
+        }
+        public void printError( String msg )
+        {
+            printError( null, msg );
+        }
+
+        public void printNotice( SourcePosition pos, String msg )
+        {
+            printDiagnostic( "Notice", pos, msg );
+        }
+        public void printNotice( String msg )
+        {
+            printNotice( null, msg );
+        }
+
+        public void printWarning( SourcePosition pos, String msg )
+        {
+            printDiagnostic( "Warning", pos, msg );
+        }
+        public void printWarning( String msg )
+        {
+            printWarning( null, msg );
+        }
+
+        protected void printDiagnostic( String type, SourcePosition pos, 
String msg )
+        {
+            String fn = "<not available>";
+            int line = 0;
+            int column = 0;
+
+            if ( pos != null )
+            {
+                fn = pos.file().getName();
+                line = pos.line();
+                column = pos.column();
+            }
+
+            System.out.println( type + ": (" + fn + ":" + line + ":" + column 
+ ") " + msg );
+        }
+    }
+
     private File _moduleRoot;
     private String _moduleName;
     private File _srcOutputRoot;
     private Class _controlIntfOrExt;
     private Map<String,String> _bindings;
     private Set<String> _clients;
+    private Messager _messager;
+    private int _nErrors = 0;
 
     private Class _controlMostDerivedIntf;
 }

Modified: 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/assembly/AssemblyTestAssembler.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/assembly/AssemblyTestAssembler.java?rev=164906&r1=164905&r2=164906&view=diff
==============================================================================
--- 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/assembly/AssemblyTestAssembler.java
 (original)
+++ 
incubator/beehive/trunk/controls/test/src/controls/org/apache/beehive/controls/test/controls/assembly/AssemblyTestAssembler.java
 Tue Apr 26 16:08:07 2005
@@ -18,8 +18,10 @@
         /* Write basic class structure out for later 
            compiliation and then finally instantiation in a test */
         try {
-            FileWriter fw = new 
FileWriter(cac.createJavaOutputFile(genPackageName.replace(".",File.separator),
-                                                                               
             genClassName));
+            File dir = new File( cac.getSrcOutputDir(), 
genPackageName.replace(".",File.separator) );
+            dir.mkdirs();
+
+            FileWriter fw = new FileWriter( new File( dir, genClassName + 
".java" ) );
             fw.write("package " + genPackageName + ";" +
                      "public class " + genClassName + "{ }");
             fw.close();


Reply via email to