package org.argeo.api.a2; import java.util.Collections; import java.util.SortedMap; import java.util.TreeMap; import org.osgi.framework.Version; /** * The logical name of a software package. In OSGi's case this is * Bundle-SymbolicName. This is the equivalent of Maven's artifact * id. */ public class A2Component implements Comparable { private final A2Contribution contribution; private final String id; final SortedMap branches = Collections.synchronizedSortedMap(new TreeMap<>()); public A2Component(A2Contribution contribution, String id) { this.contribution = contribution; this.id = id; contribution.components.put(id, this); } public Iterable listBranches(Object filter) { return branches.values(); } A2Branch getOrAddBranch(String branchId) { if (!branches.containsKey(branchId)) { A2Branch a2Branch = new A2Branch(this, branchId); branches.put(branchId, a2Branch); } return branches.get(branchId); } A2Module getOrAddModule(Version version, Object locator) { A2Branch branch = getOrAddBranch(A2Branch.versionToBranchId(version)); A2Module module = branch.getOrAddModule(version, locator); return module; } public A2Branch last() { return branches.get(branches.lastKey()); } public A2Contribution getContribution() { return contribution; } public String getId() { return id; } @Override public int compareTo(A2Component o) { return id.compareTo(o.id); } @Override public int hashCode() { return id.hashCode(); } @Override public boolean equals(Object obj) { if (obj instanceof A2Component) { A2Component o = (A2Component) obj; return contribution.equals(o.contribution) && id.equals(o.id); } else return false; } @Override public String toString() { return contribution.getId() + ":" + id; } void asTree(String prefix, StringBuffer buf) { if (prefix == null) prefix = ""; A2Branch lastBranch = last(); SortedMap displayMap = new TreeMap<>(Collections.reverseOrder()); displayMap.putAll(branches); for (String branchId : displayMap.keySet()) { A2Branch branch = displayMap.get(branchId); if (!lastBranch.equals(branch)) { buf.append('\n'); buf.append(prefix); } else { buf.append(" -"); } buf.append(prefix); buf.append(branchId); A2Module first = branch.first(); A2Module last = branch.last(); buf.append(" (").append(last.getVersion()); if (!first.equals(last)) buf.append(" ... ").append(first.getVersion()); buf.append(')'); } } }