package org.argeo.slc.factory.m2;
import java.io.File;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Set;
/**
* Static utilities around Maven which are NOT using the Maven APIs (conventions
* based).
*/
public class MavenConventionsUtils {
public final static String MAVEN_CENTRAL_BASE_URL = "https://repo1.maven.org/maven2/";
/**
* Path to the file identified by this artifact without using Maven APIs
* (convention based). Default location of repository (~/.m2/repository) is used
* here.
*
* @see MavenConventionsUtils#artifactToFile(String, Artifact)
*/
public static File artifactToFile(Artifact artifact) {
return artifactToFile(System.getProperty("user.home") + File.separator + ".m2" + File.separator + "repository",
artifact);
}
/**
* Path to the file identified by this artifact without using Maven APIs
* (convention based).
*
* @param repositoryPath path to the related local repository location
* @param artifact the artifact
*/
public static File artifactToFile(String repositoryPath, Artifact artifact) {
return new File(repositoryPath + File.separator + artifact.getGroupId().replace('.', File.separatorChar)
+ File.separator + artifact.getArtifactId() + File.separator + artifact.getVersion() + File.separator
+ artifactFileName(artifact)).getAbsoluteFile();
}
/** The file name of this artifact when stored */
public static String artifactFileName(Artifact artifact) {
return artifact.getArtifactId() + '-' + artifact.getVersion()
+ (artifact.getClassifier().equals("") ? "" : '-' + artifact.getClassifier()) + '.'
+ artifact.getExtension();
}
/** Absolute path to the file */
public static String artifactPath(String artifactBasePath, Artifact artifact) {
return artifactParentPath(artifactBasePath, artifact) + '/' + artifactFileName(artifact);
}
/** Absolute path to the file */
public static String artifactUrl(String repoUrl, Artifact artifact) {
if (repoUrl.endsWith("/"))
return repoUrl + artifactPath("/", artifact).substring(1);
else
return repoUrl + artifactPath("/", artifact);
}
/** Absolute path to the file */
// public static URL mavenCentralUrl(Artifact artifact) {
// return mavenRepoUrl(MAVEN_CENTRAL_BASE_URL, artifact);
// }
/** Absolute path to the file */
public static URL mavenRepoUrl(String repoBase, Artifact artifact) {
String url = artifactUrl(repoBase == null ? MAVEN_CENTRAL_BASE_URL : repoBase, artifact);
try {
return new URL(url);
} catch (MalformedURLException e) {
// it should not happen
throw new IllegalStateException(e);
}
}
/** Absolute path to the directories where the files will be stored */
public static String artifactParentPath(String artifactBasePath, Artifact artifact) {
return artifactBasePath + (artifactBasePath.endsWith("/") ? "" : "/") + artifactParentPath(artifact);
}
/** Absolute path to the directory of this group */
public static String groupPath(String artifactBasePath, String groupId) {
return artifactBasePath + (artifactBasePath.endsWith("/") ? "" : "/") + groupId.replace('.', '/');
}
/** Relative path to the directories where the files will be stored */
public static String artifactParentPath(Artifact artifact) {
return artifact.getGroupId().replace('.', '/') + '/' + artifact.getArtifactId() + '/'
+ artifact.getBaseVersion();
}
public static String artifactsAsDependencyPom(Artifact pomArtifact, Set artifacts, Artifact parent) {
StringBuffer p = new StringBuffer();
// XML header
p.append("\n");
p.append(
"\n");
p.append("4.0.0\n");
// Artifact
if (parent != null) {
p.append("\n");
p.append("").append(parent.getGroupId()).append("\n");
p.append("").append(parent.getArtifactId()).append("\n");
p.append("").append(parent.getVersion()).append("\n");
p.append("\n");
}
p.append("").append(pomArtifact.getGroupId()).append("\n");
p.append("").append(pomArtifact.getArtifactId()).append("\n");
p.append("").append(pomArtifact.getVersion()).append("\n");
p.append("pom\n");
// Dependencies
p.append("\n");
for (Artifact a : artifacts) {
p.append("\t");
p.append("").append(a.getArtifactId()).append("");
p.append("").append(a.getGroupId()).append("");
if (!a.getExtension().equals("jar"))
p.append("").append(a.getExtension()).append("");
p.append("\n");
}
p.append("\n");
// Dependency management
p.append("\n");
p.append("\n");
for (Artifact a : artifacts) {
p.append("\t");
p.append("").append(a.getArtifactId()).append("");
p.append("").append(a.getVersion()).append("");
p.append("").append(a.getGroupId()).append("");
if (a.getExtension().equals("pom")) {
p.append("").append(a.getExtension()).append("");
p.append("import");
}
p.append("\n");
}
p.append("\n");
p.append("\n");
// Repositories
// p.append("\n");
// p.append("argeohttp://maven.argeo.org/argeo\n");
// p.append("\n");
p.append("\n");
return p.toString();
}
/** Singleton */
private MavenConventionsUtils() {
}
}