use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class FileCacheProviderTest method testGetDetachedFile.
@Test
public void testGetDetachedFile() throws Exception {
final String content = "This is a test";
final Location loc = new SimpleLocation("http://foo.com");
final String fname = "/path/to/my/file.txt";
final ConcreteResource resource = new ConcreteResource(loc, fname);
final CacheProvider provider = getCacheProvider();
final OutputStream out = provider.openOutputStream(resource);
out.write(content.getBytes("UTF-8"));
out.close();
File file = provider.asAdminView().getDetachedFile(resource);
assertThat(provider.exists(resource), equalTo(true));
assertTrue(file.exists());
}
use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class VersionResolverImpl method resolveLatestMultiRefWithLocation.
private ProjectVersionRefLocation resolveLatestMultiRefWithLocation(final List<? extends Location> locations, final ProjectVersionRef ref, final VersionSelectionStrategy selectionStrategy, final EventMetadata eventMetadata) throws TransferException {
final Map<SingleVersion, Location> available = new TreeMap<SingleVersion, Location>();
for (final Location location : locations) {
try {
final MavenMetadataView metadata = metadataReader.getMetadata(ref.asProjectRef(), Collections.singletonList(location), eventMetadata);
if (metadata != null) {
final List<String> versions = metadata.resolveValues("/metadata/versioning/versions/version");
if (versions != null) {
for (final String version : versions) {
try {
final SingleVersion spec = VersionUtils.createSingleVersion(version);
if (!available.containsKey(spec)) {
available.put(spec, location);
}
} catch (final InvalidVersionSpecificationException e) {
debug("Unparsable version spec found in metadata: '%s' for: %s from: %s.", e, version, ref, location);
}
}
}
}
} catch (final GalleyMavenException e) {
debug("Failed to resolve/parse metadata for variable version of: '%s' from: %s.", e, ref, location);
}
}
if (!available.isEmpty()) {
final VersionSpec spec = ref.getVersionSpec();
final List<SingleVersion> versions = new ArrayList<SingleVersion>(available.keySet());
Collections.sort(versions);
while (!versions.isEmpty()) {
final SingleVersion selected = selectionStrategy.select(versions);
if (selected == null) {
return null;
}
versions.remove(selected);
if (selected.isConcrete() && spec.contains(selected)) {
return new ProjectVersionRefLocation(ref.selectVersion(selected), available.get(selected));
}
}
}
return null;
}
use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class VersionResolverImpl method resolveAllSnapshotRefsWithLocations.
private List<ProjectVersionRefLocation> resolveAllSnapshotRefsWithLocations(final List<? extends Location> locations, final ProjectVersionRef ref, final VersionSelectionStrategy selectionStrategy, final EventMetadata eventMetadata) throws TransferException {
final Map<SingleVersion, Location> available = new TreeMap<SingleVersion, Location>();
for (final Location location : locations) {
try {
final MavenMetadataView metadata = metadataReader.getMetadata(ref, Collections.singletonList(location), eventMetadata);
if (metadata != null) {
final String latest = metadata.resolveSingleValue("/metadata/versioning/latest");
if (latest != null) {
try {
final SingleVersion ver = VersionUtils.createSingleVersion(latest);
if (ver.isSnapshot()) {
if (!available.containsKey(ver)) {
available.put(ver, location);
}
}
} catch (final InvalidVersionSpecificationException e) {
debug("Unparsable version spec found in metadata: '%s' for: %s from: %s", e, latest, ref, location);
}
}
}
} catch (final GalleyMavenException e) {
debug("Failed to resolve/parse metadata for snapshot version of: %s from: %s.", e, ref, location);
}
}
if (!available.isEmpty()) {
return Collections.emptyList();
}
final List<SingleVersion> versions = new ArrayList<SingleVersion>(available.keySet());
Collections.sort(versions);
final List<ProjectVersionRefLocation> result = new ArrayList<ProjectVersionRefLocation>();
while (!versions.isEmpty()) {
final SingleVersion selected = selectionStrategy.select(versions);
if (selected != null) {
versions.remove(selected);
result.add(new ProjectVersionRefLocation(ref.selectVersion(selected), available.get(selected)));
}
}
return result;
}
use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class SimpleUrlLocationResolver method resolve.
@Override
public final Location resolve(final String spec) throws TransferException {
final Location location = new SimpleLocation(spec);
final List<Location> locations = locationExpander.expand(location);
if (locations == null || locations.isEmpty()) {
throw new TransferException("Invalid location: '%s'. Location expansion returned no results.", spec);
}
for (final Iterator<Location> iterator = new ArrayList<Location>(locations).iterator(); iterator.hasNext(); ) {
final Location loc = iterator.next();
// normally, this will probably throw an exception if no transport is available.
// in case it's not, remove the location if the transport is null.
final Transport transport = transportManager.getTransport(loc);
if (transport == null) {
iterator.remove();
}
}
if (locations == null || locations.isEmpty()) {
throw new TransferException("Invalid location: '%s'. No transports available for expanded locations.", spec);
}
return location;
}
use of org.commonjava.maven.galley.model.Location in project galley by Commonjava.
the class AbstractTransferManagerTest method retrieve_cacheIfMissing.
/**
* Test that remote content will be downloaded then cached.
*/
@Test
public void retrieve_cacheIfMissing() throws Exception {
final String testContent = "This is a test " + System.currentTimeMillis();
final Location loc = new SimpleLocation("file:///test-repo");
final String path = "/path/to/test.txt";
final ConcreteResource resource = new ConcreteResource(loc, path);
// put in the content that we want to "download"
getTransport().registerDownload(resource, new TestDownload(testContent.getBytes()));
// now, use the manager to retrieve() the path...the remote content should come through here.
Transfer transfer = getTransferManagerImpl().retrieve(resource);
assertTransferContent(transfer, testContent);
// now, the right content should be cached.
// So, we'll put in some wrong content that will cause problems if the cache isn't used.
getTransport().registerDownload(resource, new TestDownload("This is WRONG".getBytes()));
// now, use the manager to retrieve() the path again...the cached content should come through here.
transfer = getTransferManagerImpl().retrieve(resource);
assertTransferContent(transfer, testContent);
}
Aggregations