package bndtools.model.repo;
import java.util.Map;
import java.util.SortedSet;
import aQute.bnd.service.Actionable;
import aQute.bnd.service.RepositoryPlugin;
import aQute.bnd.service.Strategy;
import aQute.bnd.version.Version;
/**
* Abstracts the Bundle in repository views, it wraps the underlying Repository Plugin with the bsn of the bundle. It
* supports {@code Actionable} by implementing its methods but forwarding them to the Repository Plugin.
*/
public class RepositoryBundle extends RepositoryEntry implements Actionable {
public RepositoryBundle(final RepositoryPlugin repo, final String bsn) {
super(repo, bsn, new VersionFinder("latest", Strategy.HIGHEST) {
@Override
Version findVersion() throws Exception {
SortedSet<Version> vs = repo.versions(bsn);
if (vs == null || vs.isEmpty())
return null;
return vs.last();
}
});
}
@Override
public String toString() {
return "RepositoryBundle [repo=" + getRepo() + ", bsn=" + getBsn() + "]";
}
@Override
public String title(Object... target) throws Exception {
try {
if (getRepo() instanceof Actionable) {
String s = ((Actionable) getRepo()).title(getBsn());
if (s != null)
return s;
}
} catch (Exception e) {
// just default
}
return getBsn();
}
@Override
public String tooltip(Object... target) throws Exception {
if (getRepo() instanceof Actionable) {
String s = ((Actionable) getRepo()).tooltip(getBsn());
if (s != null)
return s;
}
return null;
}
@Override
public Map<String,Runnable> actions(Object... target) throws Exception {
Map<String,Runnable> map = null;
try {
if (getRepo() instanceof Actionable) {
map = ((Actionable) getRepo()).actions(getBsn());
}
} catch (Exception e) {
// just default
}
return map;
}
public String getText() {
try {
return title();
} catch (Exception e) {
return getBsn();
}
}
}