public String getDescription() { return getDescription(0);
public String getDescription(int level) { StringBuffer sb = new StringBuffer(); String indicator = "|--> "; if (level > 0) { sb.append(indicator); }  List subs = getSubs(); int subSize = 0; if (subs != null) { subSize = subs.size(); }  sb.append(toString()); if (subSize > 0) { sb.append(" with " + subSize + " subcategor" + (subSize == 1 ? "y\n" : "ies\n")); } else { sb.append("\n"); }  if (subs != null) { synchronized (this) { StringBuffer sb1 = new StringBuffer();  for (int i = 0; i < level; i++) { sb1.append("     "); }  String spacer = sb1.toString();  for (Iterator it = subs.iterator(); it.hasNext();) { sb.append(spacer + ((SymbolPart) it.next()).getDescription(level + 1)); } } }  return sb.toString();
    public String getDescription() {        return getDescription(0);    }