private int displayFeatureTree(FeaturesService admin, Feature feature, int level, boolean last) throws Exception {
int unresolved = 0;
String prefix = repeat(" ", level);
Feature resolved = resolveFeature(admin, feature);
if (resolved != null) {
System.out.println(prefix + " " + resolved.getName() + " " + resolved.getVersion());
} else {
System.out.println(prefix + " " + feature.getName() + " " + feature.getVersion() + " *");
unresolved++;
}
if (bundle) {
List<BundleInfo> bundles = resolved != null ? resolved.getBundles() : feature.getBundles();
for (int i = 0, j = bundles.size(); i < j; i++) {
System.out.println(prefix + " " + (i+1 == j ? "\\" : "+") + " " + bundles.get(i).getLocation());
}
}
List<Feature> dependencies = resolved != null ? resolved.getDependencies() : feature.getDependencies();
for (int i = 0, j = dependencies.size(); i < j; i++) {
Feature toDisplay = resolveFeature(admin, dependencies.get(i));
if (toDisplay == null) {
toDisplay = dependencies.get(i);
}
unresolved += displayFeatureTree(admin, toDisplay, level+1, i + 1 == j);
}