package org.apache.maven.artifact.deployer;

/* ====================================================================
 *   Copyright 2001-2004 The Apache Software Foundation.
 *
 *   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.
 * ====================================================================
 */

import org.apache.maven.MavenException;
import org.apache.maven.project.Project;
import org.apache.maven.repository.ArtifactTypeHandler;
import org.apache.maven.repository.DefaultArtifactTypeHandler;

/**
 * 
 * The Bean which provides access to Artifact Deployement API
 * from jelly scripts.
 * 
 * @author <a href="mailto:michal.maczka@dimatics.com">Michal Maczka</a> 
 * @version $Id$
 */
public class DeployBean
{
    private ArtifactDeployer artifactDeployer;

    private Project project;
    private String artifact;
    private String type;
    private ArtifactTypeHandler typeHandler;

    public DeployBean()
    {  
        artifactDeployer = new DefaultArtifactDeployer();
    }

    public ArtifactTypeHandler getTypeHandler()
    {
        return typeHandler;
    }

    /**
     * @param typeHandler
     */
    public void setTypeHandler(ArtifactTypeHandler typeHandler)
    {
        this.typeHandler = typeHandler;
    }

    public String getArtifact()
    {
        return artifact;
    }

    /**
     * @param artifact
     */
    public void setArtifact(String artifact)
    {
        this.artifact = artifact;
    }

    public Project getProject()
    {
        return project;
    }

    /**
     * @param project
     */
    public void setProject(Project project)
    {
        this.project = project;
    }

    public String getType()
    {
        return type;
    }

    /**
     * @param type
     */
    public void setType(String type)
    {
        this.type = type;
    }

    /**
     * 
     * @throws MavenException
     */
    protected void checkAttributes() throws MavenException
    {
        if (project == null)
        {
            throw new MavenException("attribute 'project' is required");
        }

        if (artifact == null)
        {
            throw new MavenException("attribute 'artifact' is required");
        }
        if (type == null)
        {
            throw new MavenException("attribute 'type' is required");
        }
        if (typeHandler == null)
        {
            typeHandler = new DefaultArtifactTypeHandler();
        }
    }

    /**
     * 
     */
    public void deploy() throws MavenException
    {
        checkAttributes();
        artifactDeployer.deploy(artifact, type, project, typeHandler);
    }

    /**
     * 
     */
    public void deploySnapshot() throws MavenException
    {
        checkAttributes();
        artifactDeployer.deploySnapshot(artifact, type, project, typeHandler);
    }

    /**
     * 
     */
    public void install() throws MavenException
    {
        checkAttributes();
        artifactDeployer.install(artifact, type, project, typeHandler);
    }

    /**
     * 
     */
    public void installSnapshot() throws MavenException
    {
        checkAttributes();
        artifactDeployer.installSnapshot(artifact, type, project, typeHandler);
    }

}
