Author: sisbell
Date: Sat Nov 24 12:22:33 2007
New Revision: 597907

URL: http://svn.apache.org/viewvc?rev=597907&view=rev
Log:
Additional compiler classes, cleanup of API.

Added:
    
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CommandExecutor.java
   (with props)
    
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerException.java
   (with props)
Modified:
    
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerContext.java
    
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/impl/NetCompilerContextImpl.java

Added: 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CommandExecutor.java
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CommandExecutor.java?rev=597907&view=auto
==============================================================================
--- 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CommandExecutor.java
 (added)
+++ 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CommandExecutor.java
 Sat Nov 24 12:22:33 2007
@@ -0,0 +1,306 @@
+package org.apache.maven.dotnet.compiler;
+
+import org.codehaus.plexus.logging.Logger;
+import org.codehaus.plexus.util.cli.StreamConsumer;
+import org.codehaus.plexus.util.cli.Commandline;
+import org.codehaus.plexus.util.cli.CommandLineUtils;
+import org.codehaus.plexus.util.cli.CommandLineException;
+import org.codehaus.plexus.util.cli.DefaultConsumer;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.io.File;
+
+/**
+ * Provides services for executing commands (executables or compilers). A 
<code>NetExecutable</code> or
+ * <code>CompilerExecutable</code> implementation can use the services of this 
interface for executing commands.
+ *
+ * @author Shane Isbell
+ */
+public interface CommandExecutor
+{
+    /**
+     * Sets the plexus logger.
+     *
+     * @param logger the plexus logger
+     */
+    void setLogger( Logger logger );
+
+    /**
+     * Executes the command for the specified executable and list of command 
options.
+     *
+     * @param executable the name of the executable (csc, xsd, etc).
+     * @param commands   the command options for the compiler/executable
+     * @throws org.apache.maven.dotnet.executable.ExecutionException if 
compiler or executable writes anything to the standard error stream or if the 
process
+     *                            returns a process result != 0.
+     */
+    void executeCommand( String executable, List<String> commands )
+        throws CompilerException;
+
+    /**
+     * Executes the command for the specified executable and list of command 
options.
+     *
+     * @param executable         the name of the executable (csc, xsd, etc).
+     * @param commands           the commands options for the 
compiler/executable
+     * @param failsOnErrorOutput if true, throws an 
<code>ExecutionException</code> if there the compiler or executable
+     *                           writes anything to the error output stream. 
By default, this value is true
+     * @throws org.apache.maven.dotnet.executable.ExecutionException if 
compiler or executable writes anything to the standard error stream (provided 
the
+     *                            failsOnErrorOutput is not false) or if the 
process returns a process result != 0.
+     */
+    void executeCommand( String executable, List<String> commands, boolean 
failsOnErrorOutput )
+        throws CompilerException;
+
+    /**
+     * Executes the command for the specified executable and list of command 
options. If the compiler or executable is
+     * not within the environmental path, you should use this method to 
specify the working directory. Always use this
+     * method for executables located within the local maven repository.
+     *
+     * @param executable       the name of the executable (csc, xsd, etc).
+     * @param commands         the command options for the compiler/executable
+     * @param workingDirectory the directory where the command will be executed
+     * @throws org.apache.maven.dotnet.executable.ExecutionException if 
compiler or executable writes anything to the standard error stream (provided 
the
+     *                            failsOnErrorOutput is not false) or if the 
process returns a process result != 0.
+     */
+    void executeCommand( String executable, List<String> commands, File 
workingDirectory, boolean failsOnErrorOutput )
+        throws CompilerException;
+
+    /**
+     * Returns the process result of executing the command. Typically a value 
of 0 means that the process executed
+     * successfully.
+     *
+     * @return the process result of executing the command
+     */
+    int getResult();
+
+    /**
+     * Returns the standard output from executing the command.
+     *
+     * @return the standard output from executing the command
+     */
+    String getStandardOut();
+
+    /**
+     * Returns the standard error from executing the command.
+     *
+     * @return the standard error from executing the command
+     */
+    String getStandardError();
+
+    /**
+     * Provides factory services for creating a default instance of the 
command executor.
+     */
+    public static class Factory
+    {
+
+        /**
+         * Constructor
+         */
+        private Factory()
+        {
+        }
+
+        /**
+         * Returns a default instance of the command executor
+         *
+         * @return a default instance of the command executor
+         */
+        public static org.apache.maven.dotnet.compiler.CommandExecutor 
createDefaultCommmandExecutor()
+        {
+            return new org.apache.maven.dotnet.compiler.CommandExecutor()
+            {
+                /**
+                 * Instance of a plugin logger.
+                 */
+                private Logger logger;
+
+                /**
+                 * Standard Out
+                 */
+                private StreamConsumer stdOut;
+
+                /**
+                 * Standard Error
+                 */
+                private ErrorStreamConsumer stdErr;
+
+                /**
+                 * Process result
+                 */
+                private int result;
+
+                public void setLogger( Logger logger )
+                {
+                    this.logger = logger;
+                }
+
+
+                public void executeCommand( String executable, List<String> 
commands )
+                    throws CompilerException
+                {
+                    executeCommand( executable, commands, null, true );
+                }
+
+                public void executeCommand( String executable, List<String> 
commands, boolean failsOnErrorOutput )
+                    throws CompilerException
+                {
+                    executeCommand( executable, commands, null, 
failsOnErrorOutput );
+                }
+
+                public void executeCommand( String executable, List<String> 
commands, File workingDirectory,
+                                            boolean failsOnErrorOutput )
+                    throws CompilerException
+                {
+                    if ( commands == null )
+                    {
+                        commands = new ArrayList<String>();
+                    }
+                    stdOut = new StreamConsumerImpl();
+                    stdErr = new ErrorStreamConsumer();
+
+                    Commandline commandline = new Commandline();
+                    commandline.setExecutable( executable );
+                    commandline.addArguments( commands.toArray( new 
String[commands.size()]));
+                    if ( workingDirectory != null && workingDirectory.exists() 
)
+                    {
+                        commandline.setWorkingDirectory( 
workingDirectory.getAbsolutePath() );
+                    }
+                    try
+                    {
+                        result = CommandLineUtils.executeCommandLine( 
commandline, stdOut, stdErr );
+                        if ( logger != null )
+                        {
+                            logger.debug( "NMAVEN-040-000: Executed command: 
Commandline = " + commandline +
+                                ", Result = " + result );
+                        }
+                        else
+                        {
+                            System.out.println( "NMAVEN-040-000: Executed 
command: Commandline = " + commandline +
+                                ", Result = " + result );
+                        }
+                        if ( ( failsOnErrorOutput && stdErr.hasError() ) || 
result != 0 )
+                        {
+                            throw new CompilerException( "NMAVEN-040-001: 
Could not execute: Command = " +
+                                commandline.toString() + ", Result = " + 
result );
+                        }
+                    }
+                    catch ( CommandLineException e )
+                    {
+                        throw new CompilerException(
+                            "NMAVEN-040-002: Could not execute: Command = " + 
commandline.toString() );
+                    }
+                }
+
+                public int getResult()
+                {
+                    return result;
+                }
+
+                public String getStandardOut()
+                {
+                    return stdOut.toString();
+                }
+
+                public String getStandardError()
+                {
+                    return stdErr.toString();
+                }
+
+                /**
+                 * Provides behavior for determining whether the command 
utility wrote anything to the Standard Error Stream.
+                 * NOTE: I am using this to decide whether to fail the NMaven 
build. If the compiler implementation chooses
+                 * to write warnings to the error stream, then the build will 
fail on warnings!!!
+                 */
+                class ErrorStreamConsumer
+                    implements StreamConsumer
+                {
+
+                    /**
+                     * Is true if there was anything consumed from the stream, 
otherwise false
+                     */
+                    private boolean error;
+
+                    /**
+                     * Buffer to store the stream
+                     */
+                    private StringBuffer sbe = new StringBuffer();
+
+                    public ErrorStreamConsumer()
+                    {
+                        if ( logger == null )
+                        {
+                            System.out.println( "NMAVEN-040-003: Error Log not 
set: Will not output error logs" );
+                        }
+                        error = false;
+                    }
+
+                    public void consumeLine( String line )
+                    {
+                        sbe.append( line );
+                        if ( logger != null )
+                        {
+                            logger.error( line );
+                        }
+                        error = true;
+                    }
+
+                    /**
+                     * Returns false if the command utility wrote to the 
Standard Error Stream, otherwise returns true.
+                     *
+                     * @return false if the command utility wrote to the 
Standard Error Stream, otherwise returns true.
+                     */
+                    public boolean hasError()
+                    {
+                        return error;
+                    }
+
+                    /**
+                     * Returns the error stream
+                     *
+                     * @return error stream
+                     */
+                    public String toString()
+                    {
+                        return sbe.toString();
+                    }
+                }
+
+                /**
+                 * StreamConsumer instance that buffers the entire output
+                 */
+                class StreamConsumerImpl
+                    implements StreamConsumer
+                {
+
+                    private DefaultConsumer consumer;
+
+                    private StringBuffer sb = new StringBuffer();
+
+                    public StreamConsumerImpl()
+                    {
+                        consumer = new DefaultConsumer();
+                    }
+
+                    public void consumeLine( String line )
+                    {
+                        sb.append( line );
+                        if ( logger != null )
+                        {
+                            consumer.consumeLine( line );
+                        }
+                    }
+
+                    /**
+                     * Returns the stream
+                     *
+                     * @return the stream
+                     */
+                    public String toString()
+                    {
+                        return sb.toString();
+                    }
+                }
+            };
+
+        }
+    }
+}

Propchange: 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CommandExecutor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerContext.java
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerContext.java?rev=597907&r1=597906&r2=597907&view=diff
==============================================================================
--- 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerContext.java
 (original)
+++ 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerContext.java
 Sat Nov 24 12:22:33 2007
@@ -15,6 +15,6 @@
      *
      * @return an instance of the NetExecutable appropriate for given 
language/vendor/OS.
      */
-     Compiler getCompiler();
+    Compiler getCompiler();
 
 }

Added: 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerException.java
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerException.java?rev=597907&view=auto
==============================================================================
--- 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerException.java
 (added)
+++ 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerException.java
 Sat Nov 24 12:22:33 2007
@@ -0,0 +1,52 @@
+package org.apache.maven.dotnet.compiler;
+
+/**
+ * Exception thrown for compiler errors.
+ *
+ * @author Shane Isbell
+ */
+public class CompilerException
+    extends Exception
+{
+
+    static final long serialVersionUID = -7843278034782074384L;
+
+    /**
+     * Constructs an <code>ExecutionException</code>  with no exception 
message.
+     */
+    public CompilerException()
+    {
+        super();
+    }
+
+    /**
+     * Constructs an <code>ExecutionException</code> with the specified 
exception message.
+     *
+     * @param message the exception message
+     */
+    public CompilerException( String message )
+    {
+        super( message );
+    }
+
+    /**
+     * Constructs an <code>ExecutionException</code> with the specified 
exception message and cause of the exception.
+     *
+     * @param message the exception message
+     * @param cause   the cause of the exception
+     */
+    public CompilerException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
+
+    /**
+     * Constructs an <code>ExecutionException</code> with the cause of the 
exception.
+     *
+     * @param cause the cause of the exception
+     */
+    public CompilerException( Throwable cause )
+    {
+        super( cause );
+    }
+}

Propchange: 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/CompilerException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/impl/NetCompilerContextImpl.java
URL: 
http://svn.apache.org/viewvc/incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/impl/NetCompilerContextImpl.java?rev=597907&r1=597906&r2=597907&view=diff
==============================================================================
--- 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/impl/NetCompilerContextImpl.java
 (original)
+++ 
incubator/nmaven/tags/SI_MAVEN_INTEGRATION/sandbox/components/dotnet-executable/src/org/apache/maven/dotnet/compiler/impl/NetCompilerContextImpl.java
 Sat Nov 24 12:22:33 2007
@@ -1,9 +1,7 @@
 package org.apache.maven.dotnet.compiler.impl;
 
-import org.apache.maven.dotnet.compiler.NetCompilerContext;
-import org.apache.maven.dotnet.compiler.KeyInfo;
-import org.apache.maven.dotnet.compiler.InvalidArtifactException;
-import org.apache.maven.dotnet.compiler.CompilerConfig;
+import org.apache.maven.dotnet.compiler.*;
+import org.apache.maven.dotnet.compiler.Compiler;
 import org.apache.maven.artifact.Artifact;
 
 import java.util.List;
@@ -64,6 +62,11 @@
 
     public CompilerConfig getCompilerConfig()
     {
-        return null; 
+        return null;
+    }
+
+    public Compiler getCompiler()
+    {
+        return null;
     }
 }


Reply via email to