package aQute.maven.api;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import aQute.bnd.util.dto.DTO;
import aQute.bnd.version.MavenVersionRange;
import aQute.maven.provider.MavenRepository;
public interface IPom {
class Dependency extends DTO {
public boolean optional;
public Program program;
public String version;
public String systemPath;
public MavenScope scope;
public String error;
public String type;
public String classifier;
public Archive getArchive() {
Revision revision = getRevision();
if (revision == null)
return null;
return revision.archive(type, classifier);
}
public Revision getRevision() {
if (version == null)
return null;
if (MavenVersionRange.isRange(version))
throw new IllegalArgumentException("Version is a range, to make a revision you need a version");
return program.version(version);
}
@Override
public String toString() {
return String.format("Dependency [program=%s, version=%s, type=%s, classifier=%s, scope=%s, error=%s]",
program, version, type, classifier, scope, error);
}
public void bindToVersion(MavenRepository repo) throws Exception {
if (MavenVersionRange.isRange(version)) {
MavenVersionRange range = new MavenVersionRange(version);
List<Revision> revisions = repo.getRevisions(program);
for (Iterator<Revision> it = revisions.iterator(); it.hasNext();) {
Revision r = it.next();
if (!range.includes(r.version))
it.remove();
}
if (!revisions.isEmpty()) {
Collections.sort(revisions);
Revision highest = revisions.get(revisions.size() - 1);
version = highest.version.toString();
}
}
}
}
Revision getRevision();
IPom getParent();
String getPackaging();
Archive binaryArchive();
Map<Program,Dependency> getDependencies(MavenScope scope, boolean transitive) throws Exception;
}