Life Cycle Task : Custom Task « Ant « Java






Life Cycle Task


/*
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 *
 */
package org.mwrm.ant.tasks;

import java.util.Hashtable;
import java.util.Enumeration;

import org.apache.tools.ant.Project;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.BuildException;

/**
 * <p>At each stage in a task's life cycle, this class displays information
 * to show the internal state of the task and its position with in the project.
 * It takes a <code>name</code> attribute.</p>
 */
public class LifeCycleTask extends Task {

    /** The <code>name</code> attribute of this task. */
    private String name;

    /** The body text of this task. */
    private String text;

    /**
     * <p>The constructor displays the state of the task
     * as it is instantiated.</p>
     */
    public LifeCycleTask() {
        System.out.println("---------------");
        System.out.println("Constructor called");
        System.out.println("Value of name attribute: " + name);
        System.out.println("Value of the body text: " + text);
        System.out.println("Project: " + getProject());
        System.out.println("Location: " + getLocation());
        System.out.println("Target: " + getOwningTarget());
        System.out.println("---------------");
    }

    /**
     * <p>Displays the state of the task at initialization.</p>
     * @see #logAll(String method)
     */
    public final void init() {
        logAll("init()");
    }

    /**
     * <p>Displays the state of the task when Ant runs it.
     * This method also runs some usage checks
     * to ensure the task is being used properly.</p>
     */
    public final void execute() {
        if (name == null) {
            throw new BuildException("You must specify a name attribute in "
                                     + getTaskName() + ".");
        }
        logAll("execute()");

        // Write the name to output
        log(name, Project.MSG_INFO);
    }

    /**
     * <p>Sets the name to display
     * and shows the state of the task afterwards.</p>
     * @param aName The name to display
     */
    public final void setName(final String aName) {
        // The value of the name attribute
        this.name = aName;
        logAll("setName()");
    }

    /**
     * <p>Sets the body text of the task
     * and shows the state of the task afterwards.</p>
     * @param bodyText The body text
     */
    public final void addText(final String bodyText) {
        // If the body text is just whitespace, it might as well be null
        if (bodyText.trim().equals("")) {
            this.text = null;
        } else {
            this.text = bodyText.trim();
        }
        logAll("addText()");
    }

    /** <p>Checks for task references.</p>
     * @return String
     * A string that tells us details of the reference check
     */
    private String referenceCheck() {

        // The default setting
        String setString = "Reference not found.";

        // We need the references that have been set in this project
        Hashtable refs = getProject().getReferences();
        Enumeration e = refs.elements();

        // Let's iterate over them
        while (e.hasMoreElements()) {
            // We want to work with each object, so we'll instantiate an object
            Object obj = e.nextElement();

            // Check to see whether this object is a task
            // If it is, we'll build a string that contains its name and type
            if (obj.getClass().getName().
                equals("org.apache.tools.ant.UnknownElement")
                ||
                obj.getClass().getName().
                equals(this.getClass().getName())) {

                Task aTask = (Task) obj;

                setString =
                    "Reference to " + aTask.getTaskName() + " found, of type "
                    + aTask.getClass().getName() + ". ";
                setString = setString + "Its id is "
                    + aTask.getRuntimeConfigurableWrapper().
            getAttributeMap().get("id") + ".";
            }
        }
        return setString;
    }

    /**
     * <p>A central logging method that all the life-cycle methods call
     * to display the state of the task.
     * It displays the value of the <code>name</code> attribute
     * and other information about the task,
     * including the name of its project and its location in the build file.</p>
     * @param method The name of the method that issued the logging call
     */
    public final void logAll(final String method) {
        log("---------------", Project.MSG_VERBOSE);
        log(method + " called", Project.MSG_VERBOSE);
        log("Value of name attribute: " + name, Project.MSG_VERBOSE);
        log("Value of the body text: " + text, Project.MSG_VERBOSE);
        log("Project: " + getProject().getName(), Project.MSG_VERBOSE);

        // Here we build some information on the location
        // within the build file
        String locationString = getLocation().getFileName();
        locationString = locationString + " at line "
            + getLocation().getLineNumber();

        // Location.getColumnNumber() is for Ant 1.7+
        // Comment it out if you are using Ant 1.6.x
        //locationString = locationString + " and column "
        // + getLocation().getColumnNumber();

        log("Location: " + locationString, Project.MSG_VERBOSE);

        // We could use the Location.toString() method
        //log("Location: " + getLocation(), Project.MSG_VERBOSE);

        log("Target: " + getOwningTarget(), Project.MSG_VERBOSE);

        // referenceCheck() returns a string with information
        // on any references to custom tasks
        log(referenceCheck(), Project.MSG_VERBOSE);

        // If the configuration wrapper is null, we use its
        // run-time equivalent
        if (getWrapper() == null) {
            log("Reference id: "
                + getRuntimeConfigurableWrapper().getAttributeMap().get("id"),
                Project.MSG_VERBOSE);
        } else {
            // This time we use the protected getWrapper() method
            log("Reference id: " + getWrapper().getAttributeMap().get("id"),
                Project.MSG_VERBOSE);
        }

        log("---------------", Project.MSG_VERBOSE);
    }
}


           
       








AntWriteOurOwnTask.zip( 157 k)

Related examples in the same category

1.Create your own Ant task
2.The third-party tasks
3.Ant Write Our Own Task
4.Extend Javadoc Task
5.How to use a Class argument in a custom class attribute