Author: xavier
Date: Thu Aug 28 08:54:58 2008
New Revision: 689862
URL: http://svn.apache.org/viewvc?rev=689862&view=rev
Log:
IMPROVEMENT: in Ivy API, let users first locate an Artifact, then download it
in a second step. This will be used to fix IVYDE-117, and could also be useful
to allow a report only resolve, which does not download any artifact but only
locate them (a kind of dry run).
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/IvyPatternHelper.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/ArtifactOrigin.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/RepositoryCacheManager.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/download/EndArtifactDownloadEvent.java
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DualResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IvyRepResolver.java
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java
ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/ant/IvyArtifactReport.java Thu
Aug 28 08:54:58 2008
@@ -222,7 +222,7 @@
ArtifactDownloadReport artifact)
throws IOException, SAXException {
ArtifactOrigin origin = artifact.getArtifactOrigin();
- if (origin != ArtifactOrigin.UNKNOWN && origin != null) {
+ if (!ArtifactOrigin.isUnknown(origin)) {
String originName = origin.getLocation();
boolean isOriginLocal = origin.isLocal();
Modified: ant/ivy/core/trunk/src/java/org/apache/ivy/core/IvyPatternHelper.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/IvyPatternHelper.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/IvyPatternHelper.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/IvyPatternHelper.java Thu
Aug 28 08:54:58 2008
@@ -438,14 +438,14 @@
origin = cacheManager.getSavedArtifactOrigin(artifact);
- if (origin == ArtifactOrigin.UNKNOWN) {
+ if (ArtifactOrigin.isUnknown(origin)) {
Message.debug("no artifact origin found for " + artifact +
" in "
+ cacheManager);
return null;
}
}
- if (origin == ArtifactOrigin.UNKNOWN) {
+ if (ArtifactOrigin.isUnknown(origin)) {
return null;
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/ArtifactOrigin.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/ArtifactOrigin.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/ArtifactOrigin.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/ArtifactOrigin.java
Thu Aug 28 08:54:58 2008
@@ -17,6 +17,9 @@
*/
package org.apache.ivy.core.cache;
+import org.apache.ivy.core.module.descriptor.Artifact;
+import org.apache.ivy.util.Checks;
+
/**
* This class contains information about the origin of an artifact.
*
@@ -24,10 +27,22 @@
* @see org.apache.ivy.plugins.resolver.util.ResolvedResource
*/
public class ArtifactOrigin {
+ private static final String UNKNOWN = "UNKNOWN";
+
/**
* ArtifactOrigin instance used when the origin is unknown.
*/
- public static final ArtifactOrigin UNKNOWN = new ArtifactOrigin(false,
"UNKNOWN");
+ public static final ArtifactOrigin unkwnown(Artifact artifact) {
+ return new ArtifactOrigin(artifact, false, UNKNOWN);
+ }
+
+ public static final boolean isUnknown(ArtifactOrigin artifact) {
+ return artifact == null || UNKNOWN.equals(artifact.getLocation());
+ }
+
+ public static final boolean isUnknown(String location) {
+ return location == null || UNKNOWN.equals(location);
+ }
private static final int MAGIC_HASH_VALUE = 31;
@@ -35,16 +50,23 @@
private String location;
+ private Artifact artifact;
+
/**
* Create a new instance
*
+ * @param artifact
+ * the artifact pointed by this location. Must not be
<code>null</code>.
* @param isLocal
* <code>boolean</code> value indicating if the resource is
local (on the
* filesystem).
* @param location
- * the location of the resource (normally a url)
+ * the location of the resource (normally a url). Must not be
<code>null</code>.
*/
- public ArtifactOrigin(boolean isLocal, String location) {
+ public ArtifactOrigin(Artifact artifact, boolean isLocal, String location)
{
+ Checks.checkNotNull(artifact, "artifact");
+ Checks.checkNotNull(location, "location");
+ this.artifact = artifact;
this.isLocal = isLocal;
this.location = location;
}
@@ -66,6 +88,15 @@
public String getLocation() {
return location;
}
+
+ /**
+ * Return the artifact that this location is pointing at.
+ *
+ * @return the artifact that this location is pointing at.
+ */
+ public Artifact getArtifact() {
+ return artifact;
+ }
public String toString() {
return "ArtifactOrigin { isLocal=" + isLocal + ", location=" +
location + "}";
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManager.java
Thu Aug 28 08:54:58 2008
@@ -342,7 +342,7 @@
public File getArchiveFileInCache(Artifact artifact, ArtifactOrigin
origin) {
File archive = new File(getRepositoryCacheRoot(),
getArchivePathInCache(artifact, origin));
if (!archive.exists()
- && origin != null && origin != ArtifactOrigin.UNKNOWN &&
origin.isLocal()) {
+ && !ArtifactOrigin.isUnknown(origin) && origin.isLocal()) {
File original = new File(origin.getLocation());
if (original.exists()) {
return original;
@@ -359,7 +359,7 @@
*/
private File getArchiveFileInCache(
Artifact artifact, ArtifactOrigin origin, boolean useOrigin) {
- if (useOrigin && origin != null && origin != ArtifactOrigin.UNKNOWN &&
origin.isLocal()) {
+ if (useOrigin && !ArtifactOrigin.isUnknown(origin) &&
origin.isLocal()) {
return new File(origin.getLocation());
} else {
return new File(getRepositoryCacheRoot(),
getArchivePathInCache(artifact, origin));
@@ -452,7 +452,7 @@
ModuleRevisionId mrid = artifact.getModuleRevisionId();
if (!lockMetadataArtifact(mrid)) {
Message.error("impossible to acquire lock for " + mrid);
- return ArtifactOrigin.UNKNOWN;
+ return ArtifactOrigin.unkwnown(artifact);
}
try {
PropertiesFile cdf =
getCachedDataFile(artifact.getModuleRevisionId());
@@ -462,10 +462,10 @@
if (location == null) {
// origin has not been specified, return null
- return ArtifactOrigin.UNKNOWN;
+ return ArtifactOrigin.unkwnown(artifact);
}
- return new ArtifactOrigin(isLocal, location);
+ return new ArtifactOrigin(artifact, isLocal, location);
} finally {
unlockMetadataArtifact(mrid);
}
@@ -772,20 +772,20 @@
try {
ResolvedResource artifactRef =
resourceResolver.resolve(artifact);
if (artifactRef != null) {
- origin = new
ArtifactOrigin(artifactRef.getResource().isLocal(),
+ origin = new ArtifactOrigin(
+ artifact,
+ artifactRef.getResource().isLocal(),
artifactRef.getResource().getName());
if (useOrigin && artifactRef.getResource().isLocal()) {
saveArtifactOrigin(artifact, origin);
- archiveFile = getArchiveFileInCache(artifact,
- origin);
+ archiveFile = getArchiveFileInCache(artifact,
origin);
adr.setDownloadStatus(DownloadStatus.NO);
adr.setSize(archiveFile.length());
adr.setArtifactOrigin(origin);
adr.setLocalFile(archiveFile);
} else {
// refresh archive file now that we better now its
origin
- archiveFile = getArchiveFileInCache(artifact,
- origin, useOrigin);
+ archiveFile = getArchiveFileInCache(artifact,
origin, useOrigin);
if
(ResourceHelper.equals(artifactRef.getResource(), archiveFile)) {
throw new IllegalStateException("invalid
settings for '"
+ resourceResolver
@@ -1026,7 +1026,8 @@
private ArtifactOrigin getDefaultMetadataArtifactOrigin(ModuleRevisionId
mrid) {
// it's important to say the origin is not local to make sure it won't
ever be used for
// anything else than original token
- return new ArtifactOrigin(false, getIvyFileInCache(mrid).getPath());
+ return new ArtifactOrigin(
+ DefaultArtifact.newIvyArtifact(mrid, null), false,
getIvyFileInCache(mrid).getPath());
}
private Artifact getDefaultMetadataArtifact(ModuleRevisionId mrid) {
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/RepositoryCacheManager.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/RepositoryCacheManager.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/RepositoryCacheManager.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/core/cache/RepositoryCacheManager.java
Thu Aug 28 08:54:58 2008
@@ -54,8 +54,10 @@
ModuleDescriptor descriptor, String metadataResolverName, String
artifactResolverName);
/**
- * Returns the artifact origin of the given artifact as saved in this
cache, or
- * [EMAIL PROTECTED] ArtifactOrigin#UNKNOWN} if the origin is unknown.
+ * Returns the artifact origin of the given artifact as saved in this
cache.
+ * <p>
+ * If the origin is unknown, the returned ArtifactOrigin instance will
return true when
+ * [EMAIL PROTECTED] ArtifactOrigin#isUnknown(ArtifactOrigin)} is called.
*
* @param artifact
* the artifact for which the saved artifact origin should be
returned.
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/download/EndArtifactDownloadEvent.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/download/EndArtifactDownloadEvent.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/download/EndArtifactDownloadEvent.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/core/event/download/EndArtifactDownloadEvent.java
Thu Aug 28 08:54:58 2008
@@ -43,7 +43,7 @@
addAttribute("file", dest.getAbsolutePath());
addAttribute("duration",
String.valueOf(this.report.getDownloadTimeMillis()));
ArtifactOrigin origin = report.getArtifactOrigin();
- if (origin != null && origin != ArtifactOrigin.UNKNOWN) {
+ if (!ArtifactOrigin.isUnknown(origin)) {
addAttribute("origin", origin.getLocation());
addAttribute("local", String.valueOf(origin.isLocal()));
} else {
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
--- ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
(original)
+++ ant/ivy/core/trunk/src/java/org/apache/ivy/core/resolve/ResolveEngine.java
Thu Aug 28 08:54:58 2008
@@ -38,6 +38,7 @@
import org.apache.ivy.Ivy;
import org.apache.ivy.core.IvyContext;
import org.apache.ivy.core.LogOptions;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.cache.ResolutionCacheManager;
import org.apache.ivy.core.event.EventManager;
import org.apache.ivy.core.event.download.PrepareDownloadEvent;
@@ -394,12 +395,56 @@
* @param artifact
* the artifact to download
* @return a report concerning the download
+ * @see #download(ArtifactOrigin, DownloadOptions)
*/
public ArtifactDownloadReport download(Artifact artifact, DownloadOptions
options) {
DependencyResolver resolver =
settings.getResolver(artifact.getModuleRevisionId());
DownloadReport r = resolver.download(new Artifact[] {artifact},
options);
return r.getArtifactReport(artifact);
}
+
+ /**
+ * Locates an artifact in dependency resolvers, and return its location if
it can be located and
+ * actually exists, or an unknown [EMAIL PROTECTED] ArtifactOrigin} in
other cases.
+ *
+ * @param artifact
+ * the artifact to locate.
+ * @return the artifact location, should be tested with
+ * [EMAIL PROTECTED] ArtifactOrigin#isUnknown(ArtifactOrigin)} to
check if the artifact has
+ * actually been located.
+ */
+ public ArtifactOrigin locate(Artifact artifact) {
+ DependencyResolver resolver =
settings.getResolver(artifact.getModuleRevisionId());
+ return resolver.locate(artifact);
+ }
+
+ /**
+ * Materialize an artifact already located.
+ * <p>
+ * Not used internally, useful especially for IDE plugins needing to
download artifact one by
+ * one (for source or javadoc artifact, for instance).
+ * </p>
+ * <p>
+ * Materialized artifact file can be accessed using
+ * [EMAIL PROTECTED] ArtifactDownloadReport#getLocalFile()}.
+ * </p>
+ * <p>
+ * It is possible to track the progression of the download using classical
ivy progress
+ * monitoring feature (see addTransferListener).
+ * </p>
+ *
+ * @param origin
+ * the artifact origin to materialize
+ * @return a report concerning the download
+ * @see #download(Artifact, DownloadOptions)
+ * @see #locate(Artifact)
+ */
+ public ArtifactDownloadReport download(ArtifactOrigin origin,
DownloadOptions options) {
+ DependencyResolver resolver = settings.getResolver(
+ origin.getArtifact().getModuleRevisionId());
+ return resolver.download(origin, options);
+ }
+
/**
* Resolve the dependencies of a module without downloading corresponding
artifacts. The module
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/parser/m2/PomModuleDescriptorParser.java
Thu Aug 28 08:54:58 2008
@@ -28,6 +28,7 @@
import java.util.Map;
import org.apache.ivy.core.IvyContext;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DefaultArtifact;
import org.apache.ivy.core.module.descriptor.DefaultDependencyDescriptor;
@@ -263,21 +264,27 @@
Message.debug("no resolver found for " + mrid
+ ": no source or javadoc artifact lookup");
} else {
- String mainArtifact = resolver.locate(mdBuilder.getMainArtifact());
+ ArtifactOrigin mainArtifact =
resolver.locate(mdBuilder.getMainArtifact());
- String sourceArtifact =
resolver.locate(mdBuilder.getSourceArtifact());
- if (sourceArtifact != null &&
!sourceArtifact.equals(mainArtifact)) {
- Message.debug("source artifact found for " + mrid);
- mdBuilder.addSourceArtifact();
- } else {
- Message.debug("no source artifact found for " + mrid);
- }
- String javadocArtifact =
resolver.locate(mdBuilder.getJavadocArtifact());
- if (javadocArtifact != null &&
!javadocArtifact.equals(mainArtifact)) {
- Message.debug("javadoc artifact found for " + mrid);
- mdBuilder.addJavadocArtifact();
- } else {
- Message.debug("no javadoc artifact found for " + mrid);
+ if (!ArtifactOrigin.isUnknown(mainArtifact)) {
+ String mainArtifactLocation = mainArtifact.getLocation();
+
+ ArtifactOrigin sourceArtifact =
resolver.locate(mdBuilder.getSourceArtifact());
+ if (!ArtifactOrigin.isUnknown(sourceArtifact)
+ &&
!sourceArtifact.getLocation().equals(mainArtifactLocation)) {
+ Message.debug("source artifact found for " + mrid);
+ mdBuilder.addSourceArtifact();
+ } else {
+ Message.debug("no source artifact found for " + mrid);
+ }
+ ArtifactOrigin javadocArtifact =
resolver.locate(mdBuilder.getJavadocArtifact());
+ if (!ArtifactOrigin.isUnknown(javadocArtifact)
+ &&
!javadocArtifact.getLocation().equals(mainArtifactLocation)) {
+ Message.debug("javadoc artifact found for " + mrid);
+ mdBuilder.addJavadocArtifact();
+ } else {
+ Message.debug("no javadoc artifact found for " + mrid);
+ }
}
}
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/report/XmlReportParser.java
Thu Aug 28 08:54:58 2008
@@ -133,12 +133,12 @@
new
File(attributes.getValue("original-local-location")));
}
if (attributes.getValue("origin-location") != null) {
- if (ArtifactOrigin.UNKNOWN.getLocation().equals(
- attributes.getValue("origin-location"))) {
- madr.setArtifactOrigin(ArtifactOrigin.UNKNOWN);
+ if
(ArtifactOrigin.isUnknown(attributes.getValue("origin-location"))) {
+
madr.setArtifactOrigin(ArtifactOrigin.unkwnown(madr.getArtifact()));
} else {
madr.setArtifactOrigin(
new ArtifactOrigin(
+ madr.getArtifact(),
parseBoolean(attributes.getValue("origin-is-local")),
attributes.getValue("origin-location")));
}
@@ -171,12 +171,12 @@
ArtifactDownloadReport aReport = (ArtifactDownloadReport)
revisionArtifacts.get(revisionArtifacts.size() - 1);
- if (ArtifactOrigin.UNKNOWN.getLocation().equals(
- attributes.getValue("location"))) {
- aReport.setArtifactOrigin(ArtifactOrigin.UNKNOWN);
+ if
(ArtifactOrigin.isUnknown(attributes.getValue("location"))) {
+
aReport.setArtifactOrigin(ArtifactOrigin.unkwnown(aReport.getArtifact()));
} else {
aReport.setArtifactOrigin(
new ArtifactOrigin(
+ aReport.getArtifact(),
parseBoolean(attributes.getValue("is-local")),
attributes.getValue("location")));
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/AbstractResolver.java
Thu Aug 28 08:54:58 2008
@@ -190,6 +190,14 @@
public String getTypeName() {
return getClass().getName();
}
+
+ /**
+ * Default implementation downloads the artifact without taking advantage
of its location
+ */
+ public ArtifactDownloadReport download(ArtifactOrigin artifact,
DownloadOptions options) {
+ DownloadReport r = download(new Artifact[] {artifact.getArtifact()},
options);
+ return r.getArtifactReport(artifact.getArtifact());
+ }
public boolean exists(Artifact artifact) {
return locate(artifact) != null;
@@ -199,7 +207,7 @@
* Default implementation actually download the artifact Subclasses should
overwrite this to
* avoid the download
*/
- public String locate(Artifact artifact) {
+ public ArtifactOrigin locate(Artifact artifact) {
DownloadReport dr = download(new Artifact[] {artifact}, new
DownloadOptions());
if (dr == null) {
/*
@@ -211,8 +219,7 @@
+ " when trying to download " + artifact);
}
ArtifactDownloadReport adr = dr.getArtifactReport(artifact);
- return adr.getDownloadStatus() == DownloadStatus.FAILED ||
adr.getArtifactOrigin() == null
- ? null : adr.getArtifactOrigin().getLocation();
+ return adr.getDownloadStatus() == DownloadStatus.FAILED ? null :
adr.getArtifactOrigin();
}
public LatestStrategy getLatestStrategy() {
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/BasicResolver.java
Thu Aug 28 08:54:58 2008
@@ -38,6 +38,7 @@
import org.apache.ivy.core.IvyContext;
import org.apache.ivy.core.IvyPatternHelper;
import org.apache.ivy.core.LogOptions;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.cache.ModuleDescriptorWriter;
import org.apache.ivy.core.cache.RepositoryCacheManager;
import org.apache.ivy.core.module.descriptor.Artifact;
@@ -68,6 +69,7 @@
import org.apache.ivy.plugins.resolver.util.MDResolvedResource;
import org.apache.ivy.plugins.resolver.util.ResolvedResource;
import org.apache.ivy.plugins.resolver.util.ResourceMDParser;
+import org.apache.ivy.util.Checks;
import org.apache.ivy.util.ChecksumHelper;
import org.apache.ivy.util.HostUtil;
import org.apache.ivy.util.Message;
@@ -731,6 +733,30 @@
protected void clearArtifactAttempts() {
artattempts.clear();
}
+
+ public ArtifactDownloadReport download(final ArtifactOrigin origin,
DownloadOptions options) {
+ Checks.checkNotNull(origin, "origin");
+ return getRepositoryCacheManager().download(
+ origin.getArtifact(),
+ new ArtifactResourceResolver() {
+ public ResolvedResource resolve(Artifact artifact) {
+ try {
+ Resource resource = getResource(origin.getLocation());
+ if (resource == null) {
+ return null;
+ }
+ String revision =
origin.getArtifact().getModuleRevisionId().getRevision();
+ return new ResolvedResource(resource, revision);
+ } catch (IOException e) {
+ return null;
+ }
+ }
+ },
+ downloader,
+ getCacheDownloadOptions(options));
+ }
+
+ protected abstract Resource getResource(String source) throws IOException;
public boolean exists(Artifact artifact) {
ResolvedResource artifactRef = getArtifactRef(artifact, null);
@@ -740,10 +766,17 @@
return false;
}
- public String locate(Artifact artifact) {
+ public ArtifactOrigin locate(Artifact artifact) {
+ ArtifactOrigin origin =
getRepositoryCacheManager().getSavedArtifactOrigin(artifact);
+ if (!ArtifactOrigin.isUnknown(origin)) {
+ return origin;
+ }
ResolvedResource artifactRef = getArtifactRef(artifact, null);
if (artifactRef != null && artifactRef.getResource().exists()) {
- return artifactRef.getResource().getName();
+ return new ArtifactOrigin(
+ artifact,
+ artifactRef.getResource().isLocal(),
+ artifactRef.getResource().getName());
}
return null;
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/CacheResolver.java
Thu Aug 28 08:54:58 2008
@@ -112,7 +112,7 @@
if (artifactRef != null) {
Message.verbose("\t[NOT REQUIRED] " + artifacts[i]);
ArtifactOrigin origin = new ArtifactOrigin(
- true, artifactRef.getResource().getName());
+ artifacts[i], true, artifactRef.getResource().getName());
File archiveFile = ((FileResource)
artifactRef.getResource()).getFile();
adr.setDownloadStatus(DownloadStatus.NO);
adr.setSize(archiveFile.length());
@@ -130,7 +130,7 @@
return super.exists(artifact);
}
- public String locate(Artifact artifact) {
+ public ArtifactOrigin locate(Artifact artifact) {
ensureConfigured();
return super.locate(artifact);
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/ChainResolver.java
Thu Aug 28 08:54:58 2008
@@ -25,6 +25,7 @@
import java.util.Iterator;
import java.util.List;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
@@ -302,6 +303,30 @@
return false;
}
+ public ArtifactOrigin locate(Artifact artifact) {
+ for (Iterator iter = chain.iterator(); iter.hasNext();) {
+ DependencyResolver resolver = (DependencyResolver) iter.next();
+ ArtifactOrigin origin = resolver.locate(artifact);
+ if (!ArtifactOrigin.isUnknown(origin)) {
+ return origin;
+ }
+ }
+ return ArtifactOrigin.unkwnown(artifact);
+ }
+
+ public ArtifactDownloadReport download(ArtifactOrigin artifact,
DownloadOptions options) {
+ for (Iterator iter = chain.iterator(); iter.hasNext();) {
+ DependencyResolver resolver = (DependencyResolver) iter.next();
+ ArtifactDownloadReport adr = resolver.download(artifact, options);
+ if (adr.getDownloadStatus() != DownloadStatus.FAILED) {
+ return adr;
+ }
+ }
+ ArtifactDownloadReport adr = new
ArtifactDownloadReport(artifact.getArtifact());
+ adr.setDownloadStatus(DownloadStatus.FAILED);
+ return adr;
+ }
+
private static void setLatest(DependencyResolver resolver, LatestStrategy
latest) {
if (resolver instanceof HasLatestStrategy) {
HasLatestStrategy r = (HasLatestStrategy) resolver;
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DependencyResolver.java
Thu Aug 28 08:54:58 2008
@@ -22,10 +22,12 @@
import java.text.ParseException;
import java.util.Map;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.cache.RepositoryCacheManager;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ArtifactDownloadReport;
import org.apache.ivy.core.report.DownloadReport;
import org.apache.ivy.core.resolve.DownloadOptions;
import org.apache.ivy.core.resolve.ResolveData;
@@ -84,12 +86,29 @@
* </p>
*
* @param artifacts
- * an array of artifacts to download
+ * an array of artifacts to download. Must not be
<code>null</code>.
* @param options
- * options to apply for this download
+ * options to apply for this download. Must not be
<code>null</code>.
* @return a DownloadReport with details about each Artifact download.
*/
DownloadReport download(Artifact[] artifacts, DownloadOptions options);
+
+ /**
+ * Download an artifact according to the given DownloadOptions.
+ * <p>
+ * This methods is an alternative to [EMAIL PROTECTED]
#download(Artifact[], DownloadOptions)}, which
+ * locates and downloads a set of artifacts. This method uses an [EMAIL
PROTECTED] ArtifactOrigin}, and as
+ * such is only used to materialize an already located Artifact.
+ * </p>
+ *
+ * @param artifact
+ * the location of the artifact to download. Must not be
<code>null</code>.
+ * @param options
+ * options to apply for this download. Must not be
<code>null</code>.
+ * @return a report detailing how the download has gone, is never
<code>null</code>.
+ */
+ ArtifactDownloadReport download(ArtifactOrigin artifact, DownloadOptions
options);
+
/**
* Returns <code>true</code> if the given artifact can be located by this
resolver and
@@ -103,15 +122,15 @@
boolean exists(Artifact artifact);
/**
- * Locates the given artifact and returns a String identifying its
location if it can be located
- * by this resolver and if it actually exists, or <code>null</code> in
other cases.
+ * Locates the given artifact and returns its location if it can be
located by this resolver and
+ * if it actually exists, or <code>null</code> in other cases.
*
* @param artifact
* the artifact which should be located
- * @return a String identifying the artifact location, or
<code>null</code> if it can't be
- * located or doesn't exist.
+ * @return the artifact location, or <code>null</code> if it can't be
located by this resolver
+ * or doesn't exist.
*/
- String locate(Artifact artifact);
+ ArtifactOrigin locate(Artifact artifact);
void publish(Artifact artifact, File src, boolean overwrite) throws
IOException;
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DualResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DualResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DualResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/DualResolver.java
Thu Aug 28 08:54:58 2008
@@ -21,9 +21,11 @@
import java.io.IOException;
import java.text.ParseException;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ArtifactDownloadReport;
import org.apache.ivy.core.report.DownloadReport;
import org.apache.ivy.core.resolve.DownloadOptions;
import org.apache.ivy.core.resolve.ResolveData;
@@ -158,11 +160,27 @@
}
public boolean exists(Artifact artifact) {
- return artifactResolver.exists(artifact);
+ if (artifact.isMetadata()) {
+ return ivyResolver.exists(artifact);
+ } else {
+ return artifactResolver.exists(artifact);
+ }
+ }
+
+ public ArtifactOrigin locate(Artifact artifact) {
+ if (artifact.isMetadata()) {
+ return ivyResolver.locate(artifact);
+ } else {
+ return artifactResolver.locate(artifact);
+ }
}
- public String locate(Artifact artifact) {
- return artifactResolver.locate(artifact);
+ public ArtifactDownloadReport download(ArtifactOrigin artifact,
DownloadOptions options) {
+ if (artifact.getArtifact().isMetadata()) {
+ return ivyResolver.download(artifact, options);
+ } else {
+ return artifactResolver.download(artifact, options);
+ }
}
public boolean isAllownomd() {
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IBiblioResolver.java
Thu Aug 28 08:54:58 2008
@@ -32,6 +32,7 @@
import javax.xml.parsers.ParserConfigurationException;
import org.apache.ivy.core.IvyPatternHelper;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DefaultArtifact;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
@@ -508,7 +509,7 @@
return super.exists(artifact);
}
- public String locate(Artifact artifact) {
+ public ArtifactOrigin locate(Artifact artifact) {
ensureConfigured(getSettings());
return super.locate(artifact);
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IvyRepResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IvyRepResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IvyRepResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/IvyRepResolver.java
Thu Aug 28 08:54:58 2008
@@ -31,6 +31,7 @@
import java.util.Map;
import org.apache.ivy.core.IvyPatternHelper;
+import org.apache.ivy.core.cache.ArtifactOrigin;
import org.apache.ivy.core.module.descriptor.Artifact;
import org.apache.ivy.core.module.descriptor.DependencyDescriptor;
import org.apache.ivy.core.report.DownloadReport;
@@ -291,7 +292,7 @@
return super.exists(artifact);
}
- public String locate(Artifact artifact) {
+ public ArtifactOrigin locate(Artifact artifact) {
ensureArtifactConfigured(getSettings());
return super.locate(artifact);
}
Modified:
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
(original)
+++
ant/ivy/core/trunk/src/java/org/apache/ivy/plugins/resolver/RepositoryResolver.java
Thu Aug 28 08:54:58 2008
@@ -152,6 +152,10 @@
return found;
}
}
+
+ protected Resource getResource(String source) throws IOException {
+ return repository.getResource(source);
+ }
/**
* List all revisions as resolved resources for the given artifact in the
given repository using
Modified:
ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java
(original)
+++
ant/ivy/core/trunk/test/java/org/apache/ivy/core/cache/DefaultRepositoryCacheManagerTest.java
Thu Aug 28 08:54:58 2008
@@ -52,7 +52,7 @@
cacheManager.setBasedir(f);
artifact = createArtifact("org", "module", "rev", "name", "type",
"ext");
- origin = new ArtifactOrigin(true, "/some/where");
+ origin = new ArtifactOrigin(artifact, true, "/some/where");
cacheManager.saveArtifactOrigin(artifact, origin);
}
@@ -69,7 +69,7 @@
artifact = createArtifact("org", "module", "rev", "name", "type2",
"ext");
found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
}
public void testUniqueness() {
@@ -77,27 +77,27 @@
artifact = createArtifact("org1", "module", "rev", "name", "type",
"ext");
ArtifactOrigin found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
artifact = createArtifact("org", "module1", "rev", "name", "type",
"ext");
found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
artifact = createArtifact("org", "module", "rev1", "name", "type",
"ext");
found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
artifact = createArtifact("org", "module", "rev", "name1", "type",
"ext");
found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
artifact = createArtifact("org", "module", "rev", "name", "type1",
"ext");
found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
artifact = createArtifact("org", "module", "rev", "name", "type",
"ext1");
found = cacheManager.getSavedArtifactOrigin(artifact);
- assertEquals(ArtifactOrigin.UNKNOWN, found);
+ assertTrue(ArtifactOrigin.isUnknown(found));
}
protected Artifact createArtifact(String org, String module, String rev,
String name,
Modified:
ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java
URL:
http://svn.apache.org/viewvc/ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java?rev=689862&r1=689861&r2=689862&view=diff
==============================================================================
---
ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java
(original)
+++
ant/ivy/core/trunk/test/java/org/apache/ivy/core/resolve/ResolveEngineTest.java
Thu Aug 28 08:54:58 2008
@@ -18,11 +18,17 @@
package org.apache.ivy.core.resolve;
import java.io.File;
+import java.util.Date;
import junit.framework.TestCase;
import org.apache.ivy.Ivy;
+import org.apache.ivy.core.cache.ArtifactOrigin;
+import org.apache.ivy.core.module.descriptor.Artifact;
+import org.apache.ivy.core.module.descriptor.DefaultArtifact;
import org.apache.ivy.core.module.id.ModuleRevisionId;
+import org.apache.ivy.core.report.ArtifactDownloadReport;
+import org.apache.ivy.core.report.DownloadStatus;
import org.apache.ivy.core.report.ResolveReport;
import org.apache.ivy.util.CacheCleaner;
@@ -58,6 +64,35 @@
assertNotNull("The ResolveReport may never be null", report);
assertTrue(report.hasError());
}
+
+ public void testLocateThenDownload() throws Exception {
+ ResolveEngine engine = new ResolveEngine(ivy.getSettings(),
+ ivy.getEventManager(), ivy.getSortEngine());
+
+ testLocateThenDownload(
+ engine,
+
DefaultArtifact.newIvyArtifact(ModuleRevisionId.parse("org1#mod1.1;1.0"), new
Date()),
+ new File("test/repositories/1/org1/mod1.1/ivys/ivy-1.0.xml"));
+ testLocateThenDownload(
+ engine,
+ new DefaultArtifact(ModuleRevisionId.parse("org1#mod1.1;1.0"), new
Date(), "mod1.1", "jar", "jar"),
+ new File("test/repositories/1/org1/mod1.1/jars/mod1.1-1.0.jar"));
+ }
+
+ private void testLocateThenDownload(ResolveEngine engine, Artifact
artifact, File artifactFile) {
+ ArtifactOrigin origin = engine.locate(artifact);
+ assertNotNull(origin);
+ assertTrue(origin.isLocal());
+ assertEquals(
+ artifactFile.getAbsolutePath(),
+ new File(origin.getLocation()).getAbsolutePath());
+
+ ArtifactDownloadReport r = engine.download(origin, new
DownloadOptions());
+ assertNotNull(r);
+ assertEquals(DownloadStatus.SUCCESSFUL, r.getDownloadStatus());
+ assertNotNull(r.getLocalFile());
+ assertTrue(r.getLocalFile().exists());
+ }
private void createCache() {
cache.mkdirs();