/*
 * Copyright (C) The Apache Software Foundation. All rights reserved.
 *
 * This software is published under the terms of the Apache Software License
 * version 1.1, a copy of which has been included with this distribution in
 * the LICENSE file.
 */
package org.apache.myrmidon.libs.core;

import org.apache.myrmidon.api.AbstractTask;
import org.apache.myrmidon.api.TaskException;

/**
 * This is the echo task to display a message.
 *
 * @author <a href="mailto:donaldp@apache.org">Peter Donald</a>
 */
public class Echo 
    extends AbstractTask
{
    private String      m_message;

    public void setMessage( final String message )
    {
        m_message = message;
    }

    public void execute()
        throws TaskException
    {
        getLogger().warn( m_message );
    }
}
