package org.argeo.init.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);
}
A2Branch getOrAddBranch(String branchId) {
if (branches.containsKey(branchId))
return branches.get(branchId);
else
return new A2Branch(this, branchId);
}
A2Module getOrAddModule(Version version, Object locator) {
A2Branch branch = getOrAddBranch(A2Branch.versionToBranchId(version));
A2Module module = branch.getOrAddModule(version, locator);
return module;
}
A2Branch last() {
return branches.get(branches.lastKey());
}
A2Contribution getContribution() {
return contribution;
}
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(')');
}
}
}