package org.jboss.shrinkwrap.resolver.impl.maven;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.eclipse.aether.artifact.Artifact;
import org.eclipse.aether.resolution.VersionRangeResult;
import org.eclipse.aether.version.Version;
import org.jboss.shrinkwrap.resolver.api.maven.MavenVersionRangeResult;
import org.jboss.shrinkwrap.resolver.api.maven.PackagingType;
import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinate;
import org.jboss.shrinkwrap.resolver.api.maven.coordinate.MavenCoordinates;
public class MavenVersionRangeResultImpl implements MavenVersionRangeResult {
private final Artifact artifact;
private final VersionRangeResult versionRangeResult;
private List<MavenCoordinate> versions;
public MavenVersionRangeResultImpl(final Artifact artifact, final VersionRangeResult versionRangeResult) {
this.artifact = artifact;
this.versionRangeResult = versionRangeResult;
}
@Override
public MavenCoordinate getLowestVersion() {
return getCoordinate(versionRangeResult.getLowestVersion());
}
@Override
public MavenCoordinate getHighestVersion() {
return getCoordinate(versionRangeResult.getHighestVersion());
}
@Override
public List<MavenCoordinate> getVersions() {
if (versions == null) {
final List<Version> versions = versionRangeResult.getVersions();
final List<MavenCoordinate> coordinates = new ArrayList<MavenCoordinate>(versions.size());
for (final Version version : versions) {
coordinates.add(getCoordinate(version));
}
this.versions = Collections.unmodifiableList(coordinates);
}
return versions;
}
private MavenCoordinate getCoordinate(final Version version) {
if(version == null) {
return null;
}
return MavenCoordinates.createCoordinate(artifact.getGroupId(), artifact.getArtifactId(), version.toString(), PackagingType.of(artifact.getExtension()), artifact.getClassifier());
}
@Override
public String toString() {
final StringBuilder versionsBuilder = new StringBuilder("{");
boolean first = true;
for (final MavenCoordinate version : getVersions()) {
if (first) {
first = false;
} else {
versionsBuilder.append(',');
}
versionsBuilder.append(version.getVersion());
}
versionsBuilder.append("}");
return "MavenResolvedVersionsImpl[" +
"artifact=" + artifact +
", versions=" + versionsBuilder.toString() +
']';
}
}