/*
* Copyright (c) 1998-2011 Caucho Technology -- all rights reserved
*
* This file is part of Resin(R) Open Source
*
* Each copy or derived work must preserve the copyright notice and this
* notice unmodified.
*
* Resin Open Source is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* Resin Open Source is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE, or any warranty
* of NON-INFRINGEMENT. See the GNU General Public License for more
* details.
*
* You should have received a copy of the GNU General Public License
* along with Resin Open Source; if not, write to the
*
* Free Software Foundation, Inc.
* 59 Temple Place, Suite 330
* Boston, MA 02111-1307 USA
*
* @author Emil Ong
*/
package com.caucho.maven;
import com.caucho.env.repository.CommitBuilder;
import com.caucho.server.admin.DeployClient;
import com.caucho.server.admin.WebAppDeployClient;
import com.caucho.server.admin.StatusQuery;
import com.caucho.vfs.Path;
import com.caucho.vfs.Vfs;
import java.io.IOException;
import java.util.HashMap;
import java.util.Properties;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.logging.Log;
/**
* The MavenDeploy
*/
abstract public class AbstractDeployMojo extends AbstractMojo
{
private String _server;
private int _port = -1;
private String _user;
private String _message;
private String _password;
private String _stage = "production";
private String _virtualHost = "default";
private String _contextRoot;
private String _version;
/**
* Sets the ip address of the host that resin is running on
* @parameter
*/
public void setServer(String server)
{
_server = server;
}
public String getServer()
{
return _server;
}
/**
* Sets the HTTP port that the resin instance is listening to
* @parameter
*/
public void setPort(int port)
{
_port = port;
}
public int getPort()
{
return _port;
}
/**
* Sets the user name for the deployment service
* @parameter
*/
public void setUser(String user)
{
_user = user;
}
public String getUser()
{
return _user;
}
/**
* Sets the password for the deployment service
* @parameter
*/
public void setPassword(String password)
{
_password = password;
}
public String getPassword()
{
return _password;
}
/**
* Sets the commit message for the deploy
* @parameter
*/
public void setCommitMessage(String message)
{
_message = message;
}
public String getCommitMessage()
{
return _message;
}
/**
* Sets the stage in which to deploy the webapp (defaults to default)
* @parameter
*/
public void setStage(String stage)
{
_stage = stage;
}
public String getStage()
{
return _stage;
}
/**
* Sets the virtual host to which to deploy the webapp (defaults to default)
* @parameter
*/
public void setVirtualHost(String virtualHost)
{
_virtualHost = virtualHost;
}
public String getVirtualHost()
{
return _virtualHost;
}
/**
* Sets the context path of the webapp (defaults to /${finalName})
* @parameter
*/
public void setContextRoot(String contextRoot)
{
_contextRoot = contextRoot;
}
public String getContextRoot()
{
return _contextRoot;
}
/**
* Sets the version for the deploy
* @parameter
*/
public void setVersion(String version)
{
_version = version;
}
public String getVersion()
{
return _version;
}
abstract protected String getMojoName();
protected void validate()
throws MojoExecutionException
{
if (_server == null)
throw new MojoExecutionException("server is required by " + getMojoName());
if (_port == -1)
throw new MojoExecutionException("port is required by " + getMojoName());
if (_user == null)
throw new MojoExecutionException("user is required by " + getMojoName());
}
protected CommitBuilder buildWarTag()
{
CommitBuilder commit = new CommitBuilder();
commit.type("webapp");
if (_stage != null)
commit.stage(_stage);
commit.tagKey(_virtualHost + _contextRoot);
return commit;
}
protected CommitBuilder buildVersionedWarTag()
{
return buildWarTag();
/*
return WebAppDeployClient.createTag(_stage,
_virtualHost,
_contextRoot,
_version);
*/
}
protected HashMap<String,String> getCommitAttributes()
{
HashMap<String,String> attributes = new HashMap<String,String>();
attributes.put(DeployClient.USER_ATTRIBUTE, _user);
attributes.put(DeployClient.MESSAGE_ATTRIBUTE, _message);
attributes.put(DeployClient.VERSION_ATTRIBUTE, _version);
attributes.put("user.name",
System.getProperties().getProperty("user.name"));
attributes.put("client", "maven (" + getClass().getSimpleName() + ")");
return attributes;
}
/**
* Set parameter values with system properties to support
* command line overrides.
**/
protected void processSystemProperties()
throws MojoExecutionException
{
Properties properties = System.getProperties();
String server = properties.getProperty("resin.server");
String port = properties.getProperty("resin.port");
String user = properties.getProperty("resin.user");
String password = properties.getProperty("resin.password");
String message = properties.getProperty("resin.commitMessage");
String stage = properties.getProperty("resin.stage");
String virtualHost = properties.getProperty("resin.virtualHost");
String contextRoot = properties.getProperty("resin.contextRoot");
String version = properties.getProperty("resin.version");
if (server != null)
_server = server;
if (port != null)
_port = Integer.parseInt(port);
if (user != null)
_user = user;
if (password != null)
_password = password;
if (message != null)
_message = message;
if (stage != null)
_stage = stage;
if (virtualHost != null)
_virtualHost = virtualHost;
if (contextRoot != null)
_contextRoot = contextRoot;
if (version != null)
_version = version;
}
protected void printParameters()
{
Log log = getLog();
log.debug(getMojoName() + " parameters");
log.debug(" server = " + _server);
log.debug(" port = " + _port);
log.debug(" user = " + _user);
log.debug(" password = " + _password);
log.debug(" commitMessage = " + _message);
log.debug(" stage = " + _stage);
log.debug(" virtualHost = " + _virtualHost);
log.debug(" contextRoot = " + _contextRoot);
log.debug(" version = " + _version);
}
protected abstract void doTask(WebAppDeployClient client)
throws MojoExecutionException;
/**
* Executes the task
*/
public void execute()
throws MojoExecutionException
{
processSystemProperties();
if (getLog().isDebugEnabled())
printParameters();
validate();
doTask(new WebAppDeployClient(_server, _port, _user, _password));
}
}