[MRESOLVER-540] TransferResource can reveal more about resource (#474)
Provide extra information about the resource being transferred.
---
https://issues.apache.org/jira/browse/MRESOLVER-540
diff --git a/maven-resolver-api/src/main/java/org/eclipse/aether/transfer/TransferResource.java b/maven-resolver-api/src/main/java/org/eclipse/aether/transfer/TransferResource.java
index 824c40a..8d9fefb 100644
--- a/maven-resolver-api/src/main/java/org/eclipse/aether/transfer/TransferResource.java
+++ b/maven-resolver-api/src/main/java/org/eclipse/aether/transfer/TransferResource.java
@@ -34,6 +34,8 @@
private final String resourceName;
+ private final Object resource;
+
private final Path path;
private final long startTime;
@@ -62,7 +64,7 @@
@Deprecated
public TransferResource(
String repositoryId, String repositoryUrl, String resourceName, File file, RequestTrace trace) {
- this(repositoryId, repositoryUrl, resourceName, file != null ? file.toPath() : null, trace);
+ this(repositoryId, repositoryUrl, resourceName, file != null ? file.toPath() : null, null, trace);
}
/**
@@ -75,12 +77,18 @@
* @param resourceName The relative path to the resource within the repository, may be {@code null}. A leading slash
* (if any) will be automatically removed.
* @param path The source/target file involved in the transfer, may be {@code null}.
+ * @param resource The representation of this resource, may be {@code null}.
* @param trace The trace information, may be {@code null}.
*
* @since 2.0.0
*/
public TransferResource(
- String repositoryId, String repositoryUrl, String resourceName, Path path, RequestTrace trace) {
+ String repositoryId,
+ String repositoryUrl,
+ String resourceName,
+ Path path,
+ Object resource,
+ RequestTrace trace) {
if (repositoryId == null || repositoryId.isEmpty()) {
this.repositoryId = "";
} else {
@@ -104,10 +112,9 @@
}
this.path = path;
-
+ this.resource = resource;
this.trace = trace;
-
- startTime = System.currentTimeMillis();
+ this.startTime = System.currentTimeMillis();
}
/**
@@ -141,6 +148,18 @@
}
/**
+ * The representation of "resource", if any. The content of this field may be
+ * {@link org.eclipse.aether.artifact.Artifact} or {@link org.eclipse.aether.metadata.Metadata} or {@code null}
+ * in case of some legacy flow. Preferred way to handle returned value is with {@link instanceof}.
+ *
+ * @return The representation of this resource, may be {@code null}.
+ * @since 2.0.0
+ */
+ public Object getResource() {
+ return resource;
+ }
+
+ /**
* Gets the local file being uploaded or downloaded. When the repository system merely checks for the existence of a
* remote resource, no local file will be involved in the transfer.
*
diff --git a/maven-resolver-api/src/test/java/org/eclipse/aether/transfer/TransferEventTest.java b/maven-resolver-api/src/test/java/org/eclipse/aether/transfer/TransferEventTest.java
index 6b4c0fe..319a5b2 100644
--- a/maven-resolver-api/src/test/java/org/eclipse/aether/transfer/TransferEventTest.java
+++ b/maven-resolver-api/src/test/java/org/eclipse/aether/transfer/TransferEventTest.java
@@ -19,7 +19,6 @@
package org.eclipse.aether.transfer;
import java.nio.ByteBuffer;
-import java.nio.file.Path;
import org.eclipse.aether.RepositorySystemSession;
import org.junit.jupiter.api.Test;
@@ -31,7 +30,7 @@
*/
public class TransferEventTest {
- private static final TransferResource res = new TransferResource("none", "file://nil", "void", (Path) null, null);
+ private static final TransferResource res = new TransferResource("none", "file://nil", "void", null, null, null);
private static final RepositorySystemSession session = mock(RepositorySystemSession.class);
diff --git a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
index 572f2a6..10d93ef 100644
--- a/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
+++ b/maven-resolver-connector-basic/src/main/java/org/eclipse/aether/connector/basic/BasicRepositoryConnector.java
@@ -31,15 +31,17 @@
import java.util.concurrent.atomic.AtomicBoolean;
import org.eclipse.aether.RepositorySystemSession;
-import org.eclipse.aether.RequestTrace;
import org.eclipse.aether.metadata.Metadata;
import org.eclipse.aether.repository.RemoteRepository;
import org.eclipse.aether.spi.checksums.ProvidedChecksumsSource;
import org.eclipse.aether.spi.connector.ArtifactDownload;
+import org.eclipse.aether.spi.connector.ArtifactTransfer;
import org.eclipse.aether.spi.connector.ArtifactUpload;
import org.eclipse.aether.spi.connector.MetadataDownload;
+import org.eclipse.aether.spi.connector.MetadataTransfer;
import org.eclipse.aether.spi.connector.MetadataUpload;
import org.eclipse.aether.spi.connector.RepositoryConnector;
+import org.eclipse.aether.spi.connector.Transfer;
import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmFactory;
import org.eclipse.aether.spi.connector.checksum.ChecksumAlgorithmHelper;
import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy;
@@ -191,7 +193,7 @@
for (MetadataDownload transfer : safeMetadataDownloads) {
URI location = layout.getLocation(transfer.getMetadata(), false);
- TransferResource resource = newTransferResource(location, transfer.getPath(), transfer.getTrace());
+ TransferResource resource = newTransferResource(location, transfer);
TransferEvent.Builder builder = newEventBuilder(resource, false, false);
MetadataTransportListener listener = new MetadataTransportListener(transfer, repository, builder);
@@ -231,7 +233,7 @@
URI location = layout.getLocation(transfer.getArtifact(), false);
- TransferResource resource = newTransferResource(location, transfer.getPath(), transfer.getTrace());
+ TransferResource resource = newTransferResource(location, transfer);
TransferEvent.Builder builder = newEventBuilder(resource, false, transfer.isExistenceCheck());
ArtifactTransportListener listener = new ArtifactTransportListener(transfer, repository, builder);
@@ -282,7 +284,7 @@
for (ArtifactUpload transfer : safeArtifactUploads) {
URI location = layout.getLocation(transfer.getArtifact(), true);
- TransferResource resource = newTransferResource(location, transfer.getPath(), transfer.getTrace());
+ TransferResource resource = newTransferResource(location, transfer);
TransferEvent.Builder builder = newEventBuilder(resource, true, false);
ArtifactTransportListener listener = new ArtifactTransportListener(transfer, repository, builder);
@@ -304,7 +306,7 @@
for (MetadataUpload transfer : transferGroup) {
URI location = layout.getLocation(transfer.getMetadata(), true);
- TransferResource resource = newTransferResource(location, transfer.getPath(), transfer.getTrace());
+ TransferResource resource = newTransferResource(location, transfer);
TransferEvent.Builder builder = newEventBuilder(resource, true, false);
MetadataTransportListener listener = new MetadataTransportListener(transfer, repository, builder);
@@ -368,8 +370,28 @@
return (items != null) ? items : Collections.emptyList();
}
- private TransferResource newTransferResource(URI path, Path file, RequestTrace trace) {
- return new TransferResource(repository.getId(), repository.getUrl(), path.toString(), file, trace);
+ private TransferResource newTransferResource(URI path, Transfer transfer) {
+ if (transfer instanceof ArtifactTransfer) {
+ ArtifactTransfer artifactTransfer = (ArtifactTransfer) transfer;
+ return new TransferResource(
+ repository.getId(),
+ repository.getUrl(),
+ path.toString(),
+ artifactTransfer.getPath(),
+ artifactTransfer.getArtifact(),
+ artifactTransfer.getTrace());
+ } else if (transfer instanceof MetadataTransfer) {
+ MetadataTransfer metadataTransfer = (MetadataTransfer) transfer;
+ return new TransferResource(
+ repository.getId(),
+ repository.getUrl(),
+ path.toString(),
+ metadataTransfer.getPath(),
+ metadataTransfer.getMetadata(),
+ metadataTransfer.getTrace());
+ } else {
+ throw new IllegalArgumentException("Accepting only artifact or metadata transfers");
+ }
}
private TransferEvent.Builder newEventBuilder(TransferResource resource, boolean upload, boolean peek) {
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProviderTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProviderTest.java
index af434cc..e2f7223 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProviderTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/DefaultChecksumPolicyProviderTest.java
@@ -18,8 +18,6 @@
*/
package org.eclipse.aether.internal.impl;
-import java.nio.file.Path;
-
import org.eclipse.aether.DefaultRepositorySystemSession;
import org.eclipse.aether.internal.test.util.TestUtils;
import org.eclipse.aether.repository.RemoteRepository;
@@ -49,7 +47,7 @@
session = TestUtils.newSession();
provider = new DefaultChecksumPolicyProvider();
repository = new RemoteRepository.Builder("test", "default", "file:/void").build();
- resource = new TransferResource(repository.getId(), repository.getUrl(), "file.txt", (Path) null, null);
+ resource = new TransferResource(repository.getId(), repository.getUrl(), "file.txt", null, null, null);
}
@AfterEach
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java
index a357ea9..3fd5229 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/FailChecksumPolicyTest.java
@@ -18,8 +18,6 @@
*/
package org.eclipse.aether.internal.impl;
-import java.nio.file.Path;
-
import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy.ChecksumKind;
import org.eclipse.aether.transfer.ChecksumFailureException;
import org.eclipse.aether.transfer.TransferResource;
@@ -36,7 +34,7 @@
@BeforeEach
void setup() {
- policy = new FailChecksumPolicy(new TransferResource("null", "file:/dev/null", "file.txt", (Path) null, null));
+ policy = new FailChecksumPolicy(new TransferResource("null", "file:/dev/null", "file.txt", null, null, null));
exception = new ChecksumFailureException("test");
}
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryConnector.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryConnector.java
index 091015c..b08bb2e 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryConnector.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/RecordingRepositoryConnector.java
@@ -18,7 +18,6 @@
*/
package org.eclipse.aether.internal.impl;
-import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
@@ -165,7 +164,7 @@
return;
}
TransferEvent.Builder event = new TransferEvent.Builder(
- session, new TransferResource(null, null, null, (Path) null, transfer.getTrace()));
+ session, new TransferResource(null, null, null, null, null, transfer.getTrace()));
event.setType(TransferEvent.EventType.INITIATED);
listener.transferInitiated(event.build());
}
@@ -176,7 +175,7 @@
return;
}
TransferEvent.Builder event = new TransferEvent.Builder(
- session, new TransferResource(null, null, null, (Path) null, transfer.getTrace()));
+ session, new TransferResource(null, null, null, null, null, transfer.getTrace()));
event.setException(transfer.getException());
if (transfer.getException() != null) {
listener.transferFailed(
diff --git a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java
index fefea63..db657b1 100644
--- a/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java
+++ b/maven-resolver-impl/src/test/java/org/eclipse/aether/internal/impl/WarnChecksumPolicyTest.java
@@ -18,8 +18,6 @@
*/
package org.eclipse.aether.internal.impl;
-import java.nio.file.Path;
-
import org.eclipse.aether.spi.connector.checksum.ChecksumPolicy.ChecksumKind;
import org.eclipse.aether.transfer.ChecksumFailureException;
import org.eclipse.aether.transfer.TransferResource;
@@ -36,7 +34,7 @@
@BeforeEach
void setup() {
- policy = new WarnChecksumPolicy(new TransferResource("null", "file:/dev/null", "file.txt", (Path) null, null));
+ policy = new WarnChecksumPolicy(new TransferResource("null", "file:/dev/null", "file.txt", null, null, null));
exception = new ChecksumFailureException("test");
}