in repository/service/src/main/java/org/apache/karaf/cave/repository/service/maven/MavenServlet.java [596:641]
protected MavenCoord convertArtifactPathToCoord(String path) throws InvalidMavenArtifactRequest {
if (path == null) {
throw new InvalidMavenArtifactRequest("Cannot match request path to maven url, request path is empty.");
}
Matcher pathMatcher = ARTIFACT_REQUEST_URL_REGEX.matcher(path);
if (pathMatcher.matches()) {
String groupId = pathMatcher.group(1).replaceAll("/", ".");
String artifactId = pathMatcher.group(2);
String version = pathMatcher.group(3);
String filename = pathMatcher.group(4);
String extension;
String classifier = "";
String filePerfix = artifactId + "-" + version;
String stripedFileName;
if (version.endsWith("SNAPSHOT")) {
String baseVersion = version.replaceAll("-SNAPSHOT", "");
String timestampedFileName = filename.substring(artifactId.length() + baseVersion.length() + 2);
//Check if snapshot is timestamped and override the version. @{link Artifact} will still treat it as a SNAPSHOT.
//and also in case of artifact installation the proper filename will be used.
Matcher ts = SNAPSHOT_TIMESTAMP_PATTERN.matcher(timestampedFileName);
if (ts.matches()) {
version = baseVersion + "-" + ts.group(1);
filePerfix = artifactId + "-" + version;
}
stripedFileName = filename.replaceAll(SNAPSHOT_TIMESTAMP_REGEX, "SNAPSHOT");
stripedFileName = stripedFileName.substring(filePerfix.length());
} else {
stripedFileName = filename.substring(filePerfix.length());
}
if (stripedFileName.startsWith("-") && stripedFileName.contains(".")) {
classifier = stripedFileName.substring(1, stripedFileName.indexOf('.'));
}
extension = stripedFileName.substring(stripedFileName.indexOf('.') + 1);
MavenCoord coord = new MavenCoord();
coord.groupId = groupId;
coord.artifactId = artifactId;
coord.type = extension;
coord.classifier = classifier;
coord.version = version;
return coord;
}
return null;
}