/**
* Criado em 22/11/2006
*/
package org.objectstyle.woproject.maven2.wobootstrap.utils;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Properties;
import org.apache.commons.lang.StringUtils;
import org.apache.maven.model.Dependency;
import org.apache.maven.model.Model;
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
import org.codehaus.plexus.util.IOUtil;
/**
* This class generates maven project description (POM) for an artifact. The
* generated model includes the transitive dependencies configured into
* bootstrap.properties file.
*
* @author <a href="mailto:hprange@moleque.com.br">Henrique Prange</a>
* @since 2.0
*/
public class PomGenerator {
/**
* Properties that contains the transitive dependencies.
*/
protected static Properties dependencyProperties;
/**
* The version of the pom model.
*/
private static final String MODEL_VERSION = "4.0.0";
/**
* Lazy initialization for <code>dependencieProperties</code>.
*/
private static void loadDependecyProperties() {
if (dependencyProperties != null) {
return;
}
dependencyProperties = new Properties();
try {
dependencyProperties.load(PomGenerator.class.getResourceAsStream("/bootstrap.properties"));
} catch (IOException exception) {
// TODO: hprange, write an info to log instead
exception.printStackTrace();
}
}
/**
* The artifact id.
*/
protected final String artifactId;
/**
* The group id.
*/
protected final String groupId;
/**
* The version of the artifact.
*/
protected final String version;
/**
* Creates a new model generator based on some artifact properties.
*
* @param properties
* The artifact properties
*/
public PomGenerator(Properties properties) {
if (properties == null) {
throw new IllegalArgumentException("The properties must not be null");
}
groupId = properties.getProperty("groupId");
artifactId = properties.getProperty("artifactId");
version = properties.getProperty("version");
}
/**
* Generates the model (POM) for the defined artifact including its
* transitive dependencies.
*
* @return Returns a <code>Model</code> object
*/
public Model generateModel() {
Model model = new Model();
model.setGroupId(groupId);
model.setArtifactId(artifactId);
model.setVersion(version);
model.setModelVersion(MODEL_VERSION);
loadDependecyProperties();
String dependenciesList = dependencyProperties.getProperty("transitive.dependencies." + model.getArtifactId());
if (dependenciesList == null) {
return model;
}
String[] dependencies = StringUtils.split(dependenciesList, ",");
for (int i = 0; i < dependencies.length; i++) {
String dependencyArtifactId = dependencies[i];
Dependency dependency = new Dependency();
dependency.setGroupId(model.getGroupId());
dependency.setArtifactId(StringUtils.trim(dependencyArtifactId));
dependency.setVersion(model.getVersion());
model.addDependency(dependency);
}
return model;
}
/**
* Writes the model (POM) into the specified file.
*
* @param file
* The file
*/
public void writeModel(File file) {
if (file == null) {
throw new NullPointerException("Cannot write to a null file.");
}
FileWriter writer = null;
try {
writer = new FileWriter(file);
new MavenXpp3Writer().write(writer, generateModel());
} catch (IOException exception) {
// TODO: hprange, write an info to log instead
exception.printStackTrace();
} finally {
IOUtil.close(writer);
}
}
}