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    }