001 package org.apache.torque.mojo;
002
003 import org.apache.maven.plugin.MojoExecutionException;
004 import org.apache.tools.ant.Project;
005 import org.apache.tools.ant.Task;
006 import org.apache.torque.util.MojoAntBuildListener;
007 import org.kuali.core.db.torque.FilteredPropertyCopier;
008
009 /**
010 * A base class for mojos that wrap an Ant Task
011 */
012 public class AntTaskMojo extends BaseMojo {
013
014 /**
015 * The ant task to be executed by this mojo.
016 */
017 private Task antTask;
018
019 /**
020 * The ant project for the ant task.
021 */
022 private Project antProject;
023
024 /**
025 * Configures the Ant task which is wrapped by this mojo.
026 */
027 protected void configureTask() throws MojoExecutionException {
028 if (getAntTask() == null) {
029 throw new IllegalArgumentException("Ant task is null");
030 }
031
032 // Attach our task to a project
033 setAntProject(getIniatializedAntProject());
034 getAntTask().setProject(getAntProject());
035 try {
036 // Copy configuration from the mojo to the task
037 FilteredPropertyCopier copier = new FilteredPropertyCopier();
038 // There is a setProject() method on an Ant Task that expects an Ant Project. This conflicts with
039 // getProject() from the mojo which returns a Maven Project
040 copier.addExclude("project");
041 copier.addExclude("driverProperties");
042 copier.copyProperties(getAntTask(), this);
043 } catch (Exception e) {
044 throw new MojoExecutionException("Error copying properties", e);
045 }
046 }
047
048 /**
049 * Configure the Ant task and then execute it
050 */
051 @Override
052 public void executeMojo() throws MojoExecutionException {
053 configureTask();
054 getAntTask().execute();
055 }
056
057 /**
058 * Return an Ant project that informs Maven about logging events
059 */
060 protected Project getIniatializedAntProject() {
061 getLog().info("Initializing the Ant Project");
062 // Create a new Ant Project
063 Project antProject = new Project();
064 // initialize it
065 antProject.init();
066 // Add a listener that gets notified about log messages
067 antProject.addBuildListener(new MojoAntBuildListener(getLog()));
068 // Return the initialized ant project
069 return antProject;
070 }
071
072 public Project getAntProject() {
073 return antProject;
074 }
075
076 public void setAntProject(Project antProject) {
077 this.antProject = antProject;
078 }
079
080 public Task getAntTask() {
081 return antTask;
082 }
083
084 public void setAntTask(Task antTask) {
085 this.antTask = antTask;
086 }
087 }