use of org.commonjava.atlas.maven.ident.version.SingleVersion 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<>();
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<>(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.atlas.maven.ident.version.SingleVersion in project galley by Commonjava.
the class VersionResolverImpl method resolveFirstSnapshotRefWithLocation.
private ProjectVersionRefLocation resolveFirstSnapshotRefWithLocation(final List<? extends Location> locations, final ProjectVersionRef ref, final VersionSelectionStrategy selectionStrategy, final EventMetadata eventMetadata) throws TransferException {
for (final Location location : locations) {
final Map<SingleVersion, Location> available = new TreeMap<>();
try {
final MavenMetadataView metadata = metadataReader.getMetadata(ref, Collections.singletonList(location), eventMetadata);
if (metadata != null) {
addSnapshotFrom(metadata, location, ref, available);
}
} catch (final GalleyMavenException e) {
debug("Failed to resolve/parse metadata for snapshot version of: %s from: %s.", e, ref, location);
}
if (!available.isEmpty()) {
final List<SingleVersion> versions = new ArrayList<>(available.keySet());
Collections.sort(versions);
final SingleVersion selected = selectionStrategy.select(versions);
if (selected == null) {
continue;
}
return new ProjectVersionRefLocation(ref.selectVersion(selected), available.get(selected));
}
}
return null;
}
use of org.commonjava.atlas.maven.ident.version.SingleVersion in project galley by Commonjava.
the class VersionResolverImpl method addSnapshotFrom.
private void addSnapshotFrom(final MavenMetadataView metadata, final Location location, final ProjectVersionRef ref, final Map<SingleVersion, Location> available) throws GalleyMavenException {
final String version = metadata.resolveSingleValue(SNAP_VERSION_XPATH);
logger.debug("Latest snapshot version in metadata is: {}", version);
if (version != null) {
try {
final SingleVersion ver = VersionUtils.createSingleVersion(version);
if (!available.containsKey(ver)) {
logger.debug("Found candidate snapshot: {}", ver);
available.put(ver, location);
}
} catch (final InvalidVersionSpecificationException e) {
debug("Unparsable version spec found in metadata: '%s' for: %s from: %s", e, version, ref, location);
}
}
}
use of org.commonjava.atlas.maven.ident.version.SingleVersion 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<>();
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<>(available.keySet());
Collections.sort(versions);
final List<ProjectVersionRefLocation> result = new ArrayList<>();
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.atlas.maven.ident.version.SingleVersion in project offliner by release-engineering.
the class OfflinerUtils method generateMetadata.
/**
* Given a list of Maven POM files, generate appropriate Maven repository metadata files by parsing the POM's paths
* and extracting GroupId / ArtifactId / Version information.
* @param pomPaths List of POM paths to parse
* @param outputRootPath
*/
public static void generateMetadata(Set<String> pomPaths, final String outputRootPath) {
Map<ProjectRef, List<SingleVersion>> metas = new HashMap<>();
for (String path : pomPaths) {
ArtifactPathInfo artifactPathInfo = ArtifactPathInfo.parse(path);
ProjectVersionRef gav = artifactPathInfo.getProjectId();
List<SingleVersion> singleVersions = new ArrayList<SingleVersion>();
if (!metas.isEmpty() && metas.containsKey(gav.asProjectRef())) {
singleVersions = metas.get(gav.asProjectRef());
}
singleVersions.add((SingleVersion) gav.getVersionSpec());
metas.put(gav.asProjectRef(), singleVersions);
}
for (ProjectRef ga : metas.keySet()) {
List<SingleVersion> singleVersions = metas.get(ga);
Collections.sort(singleVersions);
Metadata master = new Metadata();
master.setGroupId(ga.getGroupId());
master.setArtifactId(ga.getArtifactId());
Versioning versioning = new Versioning();
for (SingleVersion v : singleVersions) {
versioning.addVersion(v.renderStandard());
}
String latest = singleVersions.get(singleVersions.size() - 1).renderStandard();
versioning.setLatest(latest);
versioning.setRelease(latest);
master.setVersioning(versioning);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
File metadataFile = Paths.get(outputRootPath, ga.getGroupId().replace('.', File.separatorChar), ga.getArtifactId(), "maven-metadata.xml").toFile();
try {
new MetadataXpp3Writer().write(baos, master);
FileUtils.writeByteArrayToFile(metadataFile, baos.toByteArray());
} catch (IOException e) {
e.printStackTrace();
System.err.printf("\n\nFailed to generate maven-metadata file: %s. See above for more information.\n", metadataFile);
}
}
}
Aggregations