package aQute.bnd.deployer.repository.aether;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.artifact.DefaultArtifact;
import aQute.bnd.osgi.Jar;
import aQute.bnd.osgi.Verifier;
import aQute.bnd.version.MavenVersion;
import aQute.bnd.version.Version;
final class ConversionUtils {
public static final String JAR_EXTENSION = "jar";
private ConversionUtils() {}
public static final Artifact fromBundleJar(Jar jar) throws Exception {
String groupId;
String artifactId;
String bsn = jar.getBsn();
groupId = jar.getManifest().getMainAttributes().getValue("Maven-GroupId");
if (groupId != null) {
String groupPrefix = groupId + ".";
if (bsn.startsWith(groupPrefix)) {
if (bsn.length() <= groupPrefix.length())
throw new IllegalArgumentException("Artifact ID appears to be empty");
artifactId = bsn.substring(groupPrefix.length());
} else {
artifactId = bsn;
}
} else {
int lastDot = bsn.lastIndexOf('.');
if (lastDot < 0)
throw new IllegalArgumentException(
String.format("Cannot split symbolic name '%s' into group ID and artifact ID", bsn));
if (lastDot == 0)
throw new IllegalArgumentException("Group ID appears to be empty");
if (lastDot >= bsn.length() - 1)
throw new IllegalArgumentException("Artifact ID appear to be empty");
groupId = bsn.substring(0, lastDot);
artifactId = bsn.substring(lastDot + 1);
}
String versionString = jar.getVersion();
if (versionString == null)
versionString = "0";
else if (!Verifier.isVersion(versionString))
throw new IllegalArgumentException("Invalid version " + versionString);
Version version = Version.parseVersion(versionString);
return new DefaultArtifact(groupId, artifactId, JAR_EXTENSION, new MavenVersion(version).toString());
}
public static String maybeMavenCoordsToBsn(String coords) throws IllegalArgumentException {
int colonPos = coords.indexOf(':');
if (colonPos < 0)
// No colons, it's just a plain old bsn
return coords;
if (colonPos == 0)
throw new IllegalArgumentException(String
.format("Cannot convert Maven coordinates to BSN, group ID appears to be empty: '%s'", coords));
int artifactIdStart = colonPos + 1;
if (artifactIdStart >= coords.length())
throw new IllegalArgumentException(String
.format("Cannot convert Maven coordinates to BSN, artifact ID appears to be empty: '%s'", coords));
return String.format("%s.%s", coords.substring(0, colonPos), coords.substring(artifactIdStart));
}
public static String[] getGroupAndArtifactForBsn(String bsn) {
int dotIndex = bsn.lastIndexOf(':');
if (dotIndex < 0)
throw new IllegalArgumentException("Cannot split bsn into group and artifact IDs: " + bsn);
String groupId = bsn.substring(0, dotIndex);
String artifactId = bsn.substring(dotIndex + 1);
return new String[] {
groupId, artifactId
};
}
}