@Override public String binaryRelativize(String binary) { MavenCoordinates coordinates = MavenCoordinates.fromBinaryGAV(binary); if (coordinates == null) { return null; } for (String defaultGroupId : defaultGroupIds) { if (defaultGroupId.equals(coordinates.getGroupId())) { return MavenCoordinates.toBinaryGAV(new MavenCoordinates( null, coordinates.getArtifactId(), coordinates.getVersion(), coordinates.getPackaging(), coordinates.getClassifier(), coordinates.getFileVersion())); } } return null; }
@Override public String configRelativize(String config) { if (!config.startsWith("@")) { return null; } MavenCoordinates coordinates = MavenCoordinates.fromConfigGAV(config); if (coordinates == null) { return null; } for (String defaultGroupId : defaultGroupIds) { if (defaultGroupId.equals(coordinates.getGroupId())) { return MavenCoordinates.toConfigGAV(new MavenCoordinates( null, coordinates.getArtifactId(), coordinates.getVersion(), coordinates.getPackaging(), coordinates.getClassifier(), coordinates.getFileVersion())); } } return null; }
@Override public boolean configEqualsIgnoreVersion(String config1, String config2) { MavenCoordinates coordinates1 = MavenCoordinates.fromConfigGAV(config1); MavenCoordinates coordinates2 = MavenCoordinates.fromConfigGAV(config2); return coordinates1 != null && coordinates2 != null && coordinates1.equalsIgnoreVersion(coordinates2); }
@Override public boolean binaryEqualsIgnoreVersion(String binary1, String binary2) { MavenCoordinates coordinates1 = MavenCoordinates.fromBinaryGAV(binary1); MavenCoordinates coordinates2 = MavenCoordinates.fromBinaryGAV(binary2); return coordinates1 != null && coordinates2 != null && coordinates1.equalsIgnoreVersion(coordinates2); }
@Test public void noGroupId() { MavenCoordinates spec = new MavenCoordinates(null, "component", "2.0-SNAPSHOT", "packaging", null, "2.0-12345678.123456-1"); Assert.assertNull(spec.getGroupId()); Assert.assertEquals(spec.getArtifactId(), "component"); Assert.assertEquals(spec.getPackaging(), "packaging"); Assert.assertEquals(spec.getVersion(), "2.0-SNAPSHOT"); Assert.assertEquals(spec.getFileVersion(), "2.0-12345678.123456-1"); Assert.assertEquals(spec, spec); Assert.assertEquals(spec, new MavenCoordinates(null, "component", "2.0-SNAPSHOT", "packaging", null, "2.0-12345678.123456-1")); Assert.assertEquals(spec.toString(), "component:packaging:2.0-SNAPSHOT(2.0-12345678.123456-1)"); Assert.assertEquals(spec.toGAV(), "component:packaging:2.0-12345678.123456-1"); }
@Override public String configUpgrade(String config, String version) { if (!version.startsWith("@")) { return null; } MavenCoordinates coordinates = MavenCoordinates.fromConfigGAV(config); if (coordinates == null) { return null; } coordinates = new MavenCoordinates(coordinates.getGroupId(), coordinates.getArtifactId(), version.substring(1), coordinates.getPackaging(), coordinates.getClassifier(), null); coordinates = resolve(coordinates); if (coordinates != null) { return MavenCoordinates.toConfigGAV(coordinates); } return configResolve(version); }
@Override public String binaryUpgrade(String binary, String version) { MavenCoordinates coordinates = MavenCoordinates.fromBinaryGAV(binary); if (coordinates == null) { return null; } coordinates = new MavenCoordinates(coordinates.getGroupId(), coordinates.getArtifactId(), version, coordinates.getPackaging(), coordinates.getClassifier(), null); coordinates = resolve(coordinates); if (coordinates != null) { return MavenCoordinates.toBinaryGAV(coordinates); } return binaryResolve(version); }
public MavenCoordinates resolve(MavenCoordinates coordinates) if (coordinates.isResolved()) { return coordinates; if (coordinates.getGroupId() != null) { groupIds = ImmutableList.of(coordinates.getGroupId()); for (String groupId : groupIds) { MavenCoordinates resolvedSpec = new MavenCoordinates(groupId, coordinates.getArtifactId(), coordinates.getVersion(), coordinates.getPackaging(), coordinates.getClassifier(), coordinates.getFileVersion()); if (coordinates.getVersion().contains("SNAPSHOT")) { MavenCoordinates timestampSpec = resolveSnapshotTimestamp(coordinates, groupId); if (timestampSpec != null) { Matcher timestampMatcher = TIMESTAMP_VERSION.matcher(coordinates.getVersion()); if (timestampMatcher.matches()) { MavenCoordinates snapshotSpec = new MavenCoordinates(groupId, coordinates.getArtifactId(), timestampMatcher.group(1) + "-SNAPSHOT", coordinates.getPackaging(), coordinates.getClassifier(), coordinates.getVersion());
uriBuilder.appendPath(coordinates.getGroupId().replace('.', '/')); uriBuilder.appendPath(coordinates.getArtifactId()); uriBuilder.appendPath(coordinates.getVersion()); StringBuilder fileNameBuilder = new StringBuilder().append(coordinates.getArtifactId()).append('-').append(coordinates.getFileVersion()); if (coordinates.getClassifier() != null) { fileNameBuilder.append('-').append(coordinates.getClassifier()); fileNameBuilder.append('.').append(coordinates.getPackaging()); uriBuilder.appendPath(fileNameBuilder.toString());
private MavenCoordinates resolveSnapshotTimestamp(MavenCoordinates coordinates, String groupId) { for (URI repositoryBase : repositoryBases) { try { // load maven metadata file HttpUriBuilder uriBuilder = uriBuilderFrom(repositoryBase); uriBuilder.appendPath(groupId.replace('.', '/')); uriBuilder.appendPath(coordinates.getArtifactId()); uriBuilder.appendPath(coordinates.getVersion()); uriBuilder.appendPath("maven-metadata.xml"); URI uri = uriBuilder.build(); MavenMetadata metadata = MavenMetadata.unmarshalMavenMetadata(toString(uri)); for (SnapshotVersion snapshotVersion : metadata.versioning.snapshotVersions) { if (coordinates.getPackaging().equals(snapshotVersion.extension) && Objects.equal(coordinates.getClassifier(), snapshotVersion.classifier)) { MavenCoordinates timestampSpec = new MavenCoordinates(groupId, coordinates.getArtifactId(), coordinates.getVersion(), coordinates.getPackaging(), coordinates.getClassifier(), snapshotVersion.value); return timestampSpec; } } } catch (Exception ignored) { // no maven-metadata.xml file... hope this is laid out normally } } return null; }
@Override public String configShortName(String config) { if (!config.startsWith("@")) { return null; } MavenCoordinates coordinates = MavenCoordinates.fromConfigGAV(config); if (coordinates == null) { return config.substring(0).replaceAll(":", "_"); } return coordinates.getArtifactId(); }
@Override public String configResolve(String config) { MavenCoordinates coordinates = MavenCoordinates.fromConfigGAV(config); if (coordinates == null) { return null; } coordinates = resolve(coordinates); if (coordinates != null) { return toConfigGAV(coordinates); } return null; }
@Test public void testEquivalence() { EquivalenceTester.equivalenceTester() .addEquivalentGroup( fromConfigGAV("@component:version"), new MavenCoordinates(null, "component", "version", "config", null, null)) .addEquivalentGroup( fromConfigGAV("@group:component:version"), new MavenCoordinates("group", "component", "version", "config", null, null)) .check(); } }
@GET @Path("{groupId}/{artifactId}/{version}/{packaging}/{classifier}") public Response getBinary(@PathParam("groupId") String groupId, @PathParam("artifactId") String artifactId, @PathParam("version") String version, @PathParam("packaging") String packaging, @PathParam("classifier") String classifier) { MavenCoordinates coordinates = new MavenCoordinates(groupId, artifactId, version, packaging, classifier, null); URL binaryUrl = null; try { binaryUrl = repository.binaryToHttpUri(coordinates.toGAV()).toURL(); } catch (MalformedURLException e) { } if (binaryUrl == null) { return Response.status(Status.NOT_FOUND).build(); } return Response.ok(new InputSupplierStreamingOutput(Resources.asByteSource(binaryUrl))).build(); } }
@Override public String binaryResolve(String binary) { MavenCoordinates coordinates = MavenCoordinates.fromBinaryGAV(binary); if (coordinates == null) { return null; } coordinates = resolve(coordinates); if (coordinates != null) { return toBinaryGAV(coordinates); } return null; }
@Test public void testEquivalence() { EquivalenceTester.equivalenceTester() .addEquivalentGroup( MavenCoordinates.fromBinaryGAV("my.group:artifactId:version"), new MavenCoordinates("my.group", "artifactId", "version", DEFAULT_BINARY_PACKAGING, null, null)) .addEquivalentGroup( MavenCoordinates.fromBinaryGAV("my.group:artifactId:packaging:version"), new MavenCoordinates("my.group", "artifactId", "version", "packaging", null, null)) .addEquivalentGroup( MavenCoordinates.fromBinaryGAV("my.group:artifactId:packaging:classifier:version"), new MavenCoordinates("my.group", "artifactId", "version", "packaging", "classifier", null)) .check(); } }
@Test public void testEquivalence() { EquivalenceTester.equivalenceTester() .addEquivalentGroup( MavenCoordinates.fromGAV("my.group:artifactId:packaging:version"), new MavenCoordinates("my.group", "artifactId", "version", "packaging", null, null)) .addEquivalentGroup( MavenCoordinates.fromGAV("my.group:artifactId:packaging:classifier:version"), new MavenCoordinates("my.group", "artifactId", "version", "packaging", "classifier", null)) .check(); } }
private static MavenCoordinates fromGAV(String coordinates, String defaultPackaging) { Matcher matcher = MAVEN_COORDINATES_PATTERN.matcher(coordinates); if (!matcher.matches()) { return null; } List<String> parts = ImmutableList.copyOf(Splitter.on(':').split(coordinates)); if (parts.size() == 5) { return new MavenCoordinates(parts.get(0), parts.get(1), parts.get(4), parts.get(2), parts.get(3), null); } else if (parts.size() == 4) { return new MavenCoordinates(parts.get(0), parts.get(1), parts.get(3), parts.get(2), null, null); } else if (defaultPackaging != null) { if (parts.size() == 3) { return new MavenCoordinates(parts.get(0), parts.get(1), parts.get(2), defaultPackaging, null, null); } else if (parts.size() == 2) { return new MavenCoordinates(null, parts.get(0), parts.get(1), defaultPackaging, null, null); } } return null; }
@Override public URI configToHttpUri(String config) { MavenCoordinates coordinates = MavenCoordinates.fromConfigGAV(config); if (coordinates == null) { return null; } return toHttpUri(coordinates, true); }
@Override public URI binaryToHttpUri(String binary) { MavenCoordinates coordinates = MavenCoordinates.fromBinaryGAV(binary); if (coordinates == null) { return null; } return toHttpUri(coordinates, true); }