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; }
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; }