001 /**
002 * Copyright 2004-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.apache.torque.mojo;
017
018 import org.apache.maven.plugin.MojoExecutionException;
019 import org.apache.tools.ant.Project;
020 import org.apache.tools.ant.Task;
021 import org.apache.torque.util.MojoAntBuildListener;
022 import org.kuali.core.db.torque.FilteredPropertyCopier;
023
024 /**
025 * A base class for mojos that wrap an Ant Task
026 */
027 public class AntTaskMojo extends BaseMojo {
028
029 /**
030 * The ant task to be executed by this mojo.
031 */
032 private Task antTask;
033
034 /**
035 * The ant project for the ant task.
036 */
037 private Project antProject;
038
039 /**
040 * Configures the Ant task which is wrapped by this mojo.
041 */
042 protected void configureTask() throws MojoExecutionException {
043 if (getAntTask() == null) {
044 throw new IllegalArgumentException("Ant task is null");
045 }
046
047 // Attach our task to a project
048 setAntProject(getIniatializedAntProject());
049 getAntTask().setProject(getAntProject());
050 try {
051 // Copy configuration from the mojo to the task
052 FilteredPropertyCopier copier = new FilteredPropertyCopier();
053 // There is a setProject() method on an Ant Task that expects an Ant Project. This conflicts with
054 // getProject() from the mojo which returns a Maven Project
055 copier.addExclude("project");
056 copier.addExclude("driverProperties");
057 copier.copyProperties(getAntTask(), this);
058 } catch (Exception e) {
059 throw new MojoExecutionException("Error copying properties", e);
060 }
061 }
062
063 /**
064 * Configure the Ant task and then execute it
065 */
066 @Override
067 public void executeMojo() throws MojoExecutionException {
068 configureTask();
069 getAntTask().execute();
070 }
071
072 /**
073 * Return an Ant project that informs Maven about logging events
074 */
075 protected Project getIniatializedAntProject() {
076 getLog().info("Initializing the Ant Project");
077 // Create a new Ant Project
078 Project antProject = new Project();
079 // initialize it
080 antProject.init();
081 // Add a listener that gets notified about log messages
082 antProject.addBuildListener(new MojoAntBuildListener(getLog()));
083 // Return the initialized ant project
084 return antProject;
085 }
086
087 public Project getAntProject() {
088 return antProject;
089 }
090
091 public void setAntProject(Project antProject) {
092 this.antProject = antProject;
093 }
094
095 public Task getAntTask() {
096 return antTask;
097 }
098
099 public void setAntTask(Task antTask) {
100 this.antTask = antTask;
101 }
102 }