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