All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.n0pe.mojo.asadmin.AbstractAsadminMojo Maven / Gradle / Ivy

/*
 * Copyright (c) 2010, Paul Merlin. All Rights Reserved.
 *
 * 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.n0pe.mojo.asadmin;

import java.io.File;
import java.util.Collections;
import java.util.Map;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.SystemUtils;

import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.project.MavenProject;

import org.n0pe.asadmin.AsAdmin;
import org.n0pe.asadmin.AsAdminException;
import org.n0pe.asadmin.AsAdminCmdList;
import org.n0pe.asadmin.IAsAdminConfig;

/**
 * Base class of all asadmin mojos.
 * Provides common parameters and basic check configuration, implements asadmin configuration provider.
 * 
 * @author Paul Merlin
 */
@SuppressWarnings( "ProtectedField" )
public abstract class AbstractAsadminMojo
        extends AbstractMojo
        implements IAsAdminConfig
{

    /**
     * @parameter default-value="false"
     */
    private boolean skip;
    /**
     * @parameter default-value="ENV"
     * @required
     */
    private String glassfishHome;
    private File glassfishHomeDir;
    /**
     * @parameter default-value="admin"
     * @required
     */
    private String user;
    /**
     * @parameter default-value="HOME"
     * @required
     */
    private String passwordfile;
    /**
     * @parameter default-value="localhost"
     * @required
     */
    private String host;
    /**
     * @parameter default-value="4848"
     * @required
     */
    private String port;
/**
     * @parameter default-value="localhost"
     * @required
     */
    protected String dbHost;
    /**
     * @parameter default-value="1527"
     * @required
     */
    protected String dbPort;
    /**
     * @parameter default-value="false"
     * @required
     */
    private boolean secure;
    /**
     * @parameter default-value="domain1"
     * @required
     */
    protected String domain;
    /**
     * @parameter expression="${project.build.directory}/${project.build.finalName}.${project.artifact.artifactHandler.extension}"
     * @required
     */
    protected String appArchive;
    /**
     * @parameter expression="${project.build.finalName}"
     * @required
     */
    protected String appName;
    /**
     * Overrided context root for WAR archives, default to project.build.finalName.
     * 
     * @parameter expression="${project.build.finalName}"
     */
    protected String contextRoot;
    /**
     * @parameter expression="${project}"
     * @required
     * @readonly
     */
    protected MavenProject mavenProject;

    @Override
    public final void execute()
            throws MojoExecutionException, MojoFailureException
    {
        if ( skip ) {
            getLog().info( "asadmin-maven-plugin execution is skipped" );
            return;
        }
        try {

            checkConfig();

            AsAdmin.getInstance( this ).run( getAsCommandList() );

        } catch ( AsAdminException ex ) {
            throw new MojoExecutionException( ex.getMessage(), ex );
        }
    }

    public Map getEnvironmentVariables()
    {
        return Collections.emptyMap();
    }

    @Override
    public final String getGlassfishHome()
    {
        return glassfishHome;
    }

    @Override
    public final String getUser()
    {
        return user;
    }

    @Override
    public final String getPasswordFile()
    {
        return passwordfile;
    }

    @Override
    public String getHost()
    {
        return host;
    }

    @Override
    public String getPort()
    {
        return port;
    }

    @Override
    public boolean isSecure()
    {
        return secure;
    }

    /**
     * Build and return a list of IAsCommand to be executed.
     * 
     * AbstractAsadminMojo subclasses need to implement this method.
     * 
     * @return A list of IAsCommand to be executed
     * @throws org.apache.maven.plugin.MojoExecutionException MojoExecutionException
     * @throws org.apache.maven.plugin.MojoFailureException MojoFailureException
     */
    protected abstract AsAdminCmdList getAsCommandList()
            throws MojoExecutionException, MojoFailureException;

    private void checkConfig()
            throws MojoExecutionException, MojoFailureException
    {
        if ( StringUtils.isEmpty( glassfishHome ) || "ENV".equals( glassfishHome ) ) {
            if ( SystemUtils.JAVA_VERSION_FLOAT < 1.5 ) {
                throw new MojoExecutionException(
                        "Neither GLASSFISH_HOME, AS_HOME nor the glassfishHome configuration parameter is set! "
                        + "Also, to save you the trouble, environment cannot be read running maven with a VM < 1.5, "
                        + "so set the glassFishHome configuration parameter or use -D." );
            }
            glassfishHome = System.getenv( "GLASSFISH_HOME" );
            if ( StringUtils.isEmpty( glassfishHome ) ) {
                glassfishHome = System.getenv( "AS_HOME" );
            }
        }
        if ( StringUtils.isEmpty( glassfishHome ) ) {
            throw new MojoExecutionException(
                    "Neither GLASSFISH_HOME, AS_HOME nor the glassfishHome configuration parameter is set!" );
        }
        glassfishHomeDir = new File( glassfishHome );
        if ( !glassfishHomeDir.exists() ) {
            throw new MojoFailureException( "The specifed glassfishHome does not exist." );
        }
        if ( StringUtils.isEmpty( passwordfile ) || "HOME".equals( passwordfile ) ) {
            passwordfile = null;
            if ( new File( System.getenv( "HOME" ) + File.separator + ".asadminpass" ).exists() ) {
                passwordfile = System.getenv( "HOME" ) + File.separator + ".asadminpass";
            } else if ( new File( System.getenv( "HOME" ) + File.separator + ".asadmintruststore" ).exists() ) {
                passwordfile = System.getenv( "HOME" ) + File.separator + ".asadmintruststore";
            }
        } else if ( !new File( passwordfile ).exists() ) {
            passwordfile = null;
        }
        if ( StringUtils.isEmpty( passwordfile ) ) {
            throw new MojoFailureException(
                    "Given password file does not exists or cannot find an existing asadmin password file" );
        }
    }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy