// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you 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.apache.cloudstack.wix;
import java.io.File;
import java.io.IOException;
import org.apache.commons.exec.CommandLine;
import org.apache.commons.exec.DefaultExecutor;
import org.apache.commons.exec.ExecuteException;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.bitbucket.joxley.wix.AbstractWixMojo;
/**
*
* @goal heat
*
* @phase package
*
*/
public class HeatMojo extends AbstractWixMojo {
/**
* Directory name to be harvested
*
* @parameter expression="${dir}"
* @required
*
*/
private String dir;
/**
* use template, one of: fragment,module,product
* @parameter expression="${template}" defaults to fragment
*
*/
private String template;
/**
* Output file
*
* @parameter expression="${outputFile}"
*/
private File outputFile;
/**
*
* variable names to be passed to heat command
* @parameter expression="${vars}"
*/
private String vars;
/**
*
* variable names to be passed to heat command
* @parameter expression="${workingDirectory}"
*/
private File workingDirectory;
/**
*
* variable names to be passed to heat command
* @parameter expression="${componentGroup}"
*/
private String componentGroup;
/**
*
* <DirectoryName> directory reference to root directories
* @parameter expression="${directoryName}"
*/
private String directoryName;
@Override
public void execute() throws MojoExecutionException, MojoFailureException {
try {
CommandLine commandLine = new CommandLine("heat");
if(dir != null && !dir.trim().isEmpty()) {
commandLine.addArgument("dir");
commandLine.addArgument(dir);
}
commandLine.addArgument("-gg");
commandLine.addArgument("-cg");
commandLine.addArgument(componentGroup);
commandLine.addArgument("-ke");
commandLine.addArgument("-sfrag");
if(template == null || template.trim().isEmpty()) {
commandLine.addArgument("-template");
commandLine.addArgument("fragment");
} else {
commandLine.addArgument("-template");
commandLine.addArgument(template);
}
if (outputFile != null) {
commandLine.addArgument("-out");
commandLine.addArgument(outputFile.getAbsolutePath());
}
if (directoryName != null) {
commandLine.addArgument("-dr");
commandLine.addArgument(directoryName);
}
if (vars != null) {
commandLine.addArguments(vars, false);
}
DefaultExecutor executor = new DefaultExecutor();
getLog().debug("working directory " + commandLine.toString());
executor.setWorkingDirectory(getWorkingDirectory(workingDirectory));
int exitValue = executor.execute(commandLine);
if (exitValue != 0) {
throw new MojoExecutionException(
"Problem executing heat, return code " + exitValue);
}
} catch (ExecuteException e) {
throw new MojoExecutionException("Problem executing heat", e);
} catch (IOException e) {
throw new MojoExecutionException("Problem executing heat", e);
}
}
}