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.copyProperties(getAntTask(), this);
042 } catch (Exception e) {
043 throw new MojoExecutionException("Error copying properties", e);
044 }
045 }
046
047 /**
048 * Configure the Ant task and then execute it
049 */
050 public void executeMojo() throws MojoExecutionException {
051 configureTask();
052 getAntTask().execute();
053 }
054
055 /**
056 * Return an Ant project that informs Maven about logging events
057 */
058 protected Project getIniatializedAntProject() {
059 getLog().info("Initializing the Ant Project");
060 // Create a new Ant Project
061 Project antProject = new Project();
062 // initialize it
063 antProject.init();
064 // Add a listener that gets notified about log messages
065 antProject.addBuildListener(new MojoAntBuildListener(getLog()));
066 // Return the initialized ant project
067 return antProject;
068 }
069
070 public Project getAntProject() {
071 return antProject;
072 }
073
074 public void setAntProject(Project antProject) {
075 this.antProject = antProject;
076 }
077
078 public Task getAntTask() {
079 return antTask;
080 }
081
082 public void setAntTask(Task antTask) {
083 this.antTask = antTask;
084 }
085 }