Author: tomdz
Date: Wed Apr 18 22:52:46 2007
New Revision: 530281

URL: http://svn.apache.org/viewvc?view=rev&rev=530281
Log:
Fix for DDLUTILS-167 and general clean up of the error handling in the tasks

Modified:
    db/ddlutils/trunk/src/java/org/apache/ddlutils/task/Command.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java
    db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToDatabaseCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToFileCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDtdToFileCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
    
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToFileCommand.java

Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/task/Command.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/Command.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/Command.java (original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/Command.java Wed Apr 18 
22:52:46 2007
@@ -19,24 +19,81 @@
  * under the License.
  */
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.ddlutils.model.Database;
 import org.apache.tools.ant.BuildException;
 
 /**
- * Base interface for commands that work with a model.
+ * Base class for commands that work with a model.
  * 
  * @version $Revision: 289996 $
  * @ant.type ignore="true"
  */
-public interface Command
+public abstract class Command
 {
+    /** The log. */
+    protected final Log _log = LogFactory.getLog(getClass());
+
+    /** Whether to stop execution upon an error. */
+    private boolean _failOnError = true;
+
+    /**
+     * Determines whether the command execution will be stopped upon an error.
+     * Default value is <code>true</code>.
+     *
+     * @return <code>true</code> if the execution stops in case of an error
+     */
+    public boolean isFailOnError()
+    {
+        return _failOnError;
+    }
+
+    /**
+     * Specifies whether the execution shall stop if an error has occurred 
during the task runs.
+     *
+     * @param failOnError <code>true</code> if the execution shall stop in 
case of an error
+     * @ant.not-required By default execution will be stopped when an error is 
encountered.
+     */
+    public void setFailOnError(boolean failOnError)
+    {
+        _failOnError = failOnError;
+    }
+
+    /**
+     * Handles the given exception according to the fail-on-error setting by 
either
+     * re-throwing it (wrapped in a build exception) or only logging it.
+     * 
+     * @param ex  The exception
+     * @param msg The message to use unless this the exception is rethrown and 
it is
+     *            already a build exception 
+     */
+    protected void handleException(Exception ex, String msg) throws 
BuildException
+    {
+        if (isFailOnError())
+        {
+            if (ex instanceof BuildException)
+            {
+                throw (BuildException)ex;
+            }
+            else
+            {
+                throw new BuildException(msg, ex);
+            }
+        }
+        else
+        {
+            _log.error(msg, ex);
+        }
+    }
+    
     /**
      * Specifies whether this command requires a model, i.e. whether the second
      * argument in [EMAIL PROTECTED] #execute(DatabaseTaskBase, Database)} 
cannot be <code>null</code>.
      * 
      * @return <code>true</code> if this command requires a model 
      */
-    public boolean isRequiringModel();
+    public abstract boolean isRequiringModel();
 
     /**
      * Executes this command.
@@ -44,5 +101,5 @@
      * @param task  The executing task
      * @param model The database model
      */
-    public void execute(DatabaseTaskBase task, Database model) throws 
BuildException;
+    public abstract void execute(DatabaseTaskBase task, Database model) throws 
BuildException;
 }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/CreateDatabaseCommand.java 
Wed Apr 18 22:52:46 2007
@@ -93,14 +93,7 @@
         }
         catch (Exception ex)
         {
-            if (isFailOnError())
-            {
-                throw new BuildException(ex);
-            }
-            else
-            {
-                _log.error(ex);
-            }
+            handleException(ex, ex.getMessage());
         }
     }
 

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java 
(original)
+++ db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DatabaseCommand.java 
Wed Apr 18 22:52:46 2007
@@ -20,8 +20,6 @@
  */
 
 import org.apache.commons.dbcp.BasicDataSource;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.ddlutils.Platform;
 import org.apache.tools.ant.BuildException;
 
@@ -31,15 +29,10 @@
  * @version $Revision: 289996 $
  * @ant.type ignore="true"
  */
-public abstract class DatabaseCommand implements Command
+public abstract class DatabaseCommand extends Command
 {
-    /** The log. */
-    protected final Log _log = LogFactory.getLog(getClass());
-
     /** The platform configuration. */
     private PlatformConfiguration _platformConf = new PlatformConfiguration();
-    /** Whether to stop execution upon an error. */
-    private boolean _failOnError = true;
 
     /**
      * Returns the database type.
@@ -89,28 +82,6 @@
     protected void setPlatformConfiguration(PlatformConfiguration platformConf)
     {
         _platformConf = platformConf;
-    }
-
-    /**
-     * Determines whether the command execution will be stopped upon an error.
-     * Default value is <code>true</code>.
-     *
-     * @return <code>true</code> if the execution stops in case of an error
-     */
-    public boolean isFailOnError()
-    {
-        return _failOnError;
-    }
-
-    /**
-     * Specifies whether the execution shall stop if an error has occurred 
during the task runs.
-     *
-     * @param failOnError <code>true</code> if the execution shall stop in 
case of an error
-     * @ant.not-required By default execution will be stopped when an error is 
encountered.
-     */
-    public void setFailOnError(boolean failOnError)
-    {
-        _failOnError = failOnError;
     }
 
     /**

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/DropDatabaseCommand.java 
Wed Apr 18 22:52:46 2007
@@ -68,19 +68,12 @@
         }
         catch (UnsupportedOperationException ex)
         {
-            _log.info("Database platform " + platform.getName() + " does not 
support database dropping via JDBC",
-                      ex);
+            _log.error("Database platform " + platform.getName() + " does not 
support database dropping via JDBC",
+                       ex);
         }
         catch (Exception ex)
         {
-            if (isFailOnError())
-            {
-                throw new BuildException(ex);
-            }
-            else
-            {
-                _log.error(ex);
-            }
+            handleException(ex, ex.getMessage());
         }
     }
 }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToDatabaseCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToDatabaseCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToDatabaseCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToDatabaseCommand.java
 Wed Apr 18 22:52:46 2007
@@ -178,14 +178,7 @@
         }
         catch (Exception ex)
         {
-            if (ex instanceof BuildException)
-            {
-                throw (BuildException)ex;
-            }
-            else
-            {
-                throw new BuildException(ex);
-            }
+            handleException(ex, ex.getMessage());
         }
         finally
         {
@@ -203,7 +196,7 @@
      * @param reader   The data reader
      * @param dataFile The schema file
      */
-    private void readSingleDataFile(Task task, DataReader reader, File 
dataFile)
+    private void readSingleDataFile(Task task, DataReader reader, File 
dataFile) throws BuildException
     {
         if (!dataFile.exists())
         {
@@ -226,15 +219,7 @@
             }
             catch (Exception ex)
             {
-                if (isFailOnError())
-                {
-                    throw new BuildException("Could not parse or write data 
file " + dataFile.getAbsolutePath(), ex);
-                }
-                else
-                {
-                    _log.error("Could not parse or write data file " + 
dataFile.getAbsolutePath(),
-                               ex);
-                }
+                handleException(ex, "Could not parse or write data file " + 
dataFile.getAbsolutePath());
             }
         }
     }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToFileCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToFileCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToFileCommand.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDataToFileCommand.java 
Wed Apr 18 22:52:46 2007
@@ -91,7 +91,7 @@
         }
         catch (Exception ex)
         {
-            throw new BuildException(ex);
+            handleException(ex, ex.getMessage());
         }
     }
 

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDtdToFileCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDtdToFileCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDtdToFileCommand.java 
(original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteDtdToFileCommand.java 
Wed Apr 18 22:52:46 2007
@@ -22,8 +22,6 @@
 import java.io.File;
 import java.io.FileWriter;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.ddlutils.io.DataDtdWriter;
 import org.apache.ddlutils.model.Database;
 import org.apache.tools.ant.BuildException;
@@ -36,11 +34,8 @@
  * @version $Revision: 289996 $
  * @ant.task name="writeDtdToFile"
  */
-public class WriteDtdToFileCommand implements Command
+public class WriteDtdToFileCommand extends Command
 {
-    /** The log. */
-    private final Log _log = LogFactory.getLog(getClass());
-
     /** The file to output the DTD to. */
     private File _outputFile;
 
@@ -88,7 +83,7 @@
         }
         catch (Exception ex)
         {
-            throw new BuildException("Failed to write to output file " + 
_outputFile.getAbsolutePath(), ex);
+            handleException(ex, "Failed to write to output file " + 
_outputFile.getAbsolutePath());
         }
     }
 }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaSqlToFileCommand.java
 Wed Apr 18 22:52:46 2007
@@ -178,14 +178,7 @@
         }
         catch (Exception ex)
         {
-            if (isFailOnError())
-            {
-                throw new BuildException(ex);
-            }
-            else
-            {
-                _log.error(ex);
-            }
+            handleException(ex, ex.getMessage());
         }
     }
 }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToDatabaseCommand.java
 Wed Apr 18 22:52:46 2007
@@ -61,7 +61,8 @@
     }
 
     /**
-     * Determines whether to drop tables and the associated constraints if 
necessary.
+     * Determines whether to drop tables and the associated constraints before 
re-creating them
+     * (this implies <code>alterDatabase</code> is <code>false</code>).
      * 
      * @return <code>true</code> if drops shall be performed
      */
@@ -131,14 +132,7 @@
         }
         catch (Exception ex)
         {
-            if (isFailOnError())
-            {
-                throw new BuildException(ex);
-            }
-            else
-            {
-                _log.error(ex);
-            }
+            handleException(ex, ex.getMessage());
         }
     }
 }

Modified: 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToFileCommand.java
URL: 
http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToFileCommand.java?view=diff&rev=530281&r1=530280&r2=530281
==============================================================================
--- 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToFileCommand.java
 (original)
+++ 
db/ddlutils/trunk/src/java/org/apache/ddlutils/task/WriteSchemaToFileCommand.java
 Wed Apr 18 22:52:46 2007
@@ -22,8 +22,6 @@
 import java.io.File;
 import java.io.FileWriter;
 
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
 import org.apache.ddlutils.io.DatabaseIO;
 import org.apache.ddlutils.model.Database;
 import org.apache.tools.ant.BuildException;
@@ -35,11 +33,8 @@
  * @version $Revision: 289996 $
  * @ant.task name="writeSchemaToFile"
  */
-public class WriteSchemaToFileCommand implements Command
+public class WriteSchemaToFileCommand extends Command
 {
-    /** The log. */
-    private final Log _log = LogFactory.getLog(getClass());
-
     /** The file to output the schema to. */
     private File _outputFile;
 
@@ -87,7 +82,7 @@
         }
         catch (Exception ex)
         {
-            throw new BuildException("Failed to write to output file " + 
_outputFile.getAbsolutePath(), ex);
+            handleException(ex, "Failed to write to output file " + 
_outputFile.getAbsolutePath());
         }
     }
 }


Reply via email to