/** * Writes the View of APIs resource tree for specified resourceNode and its descendants. * * @param resourceNode for which the view is written. * @param baseUrl Used for shortening the URI id's of resources and limiting API scope. * @param maxSiblings limits number of children for one resource. * @param sb StringBuilder in which the view is written. */ private void writeResourceNodeTreeView( ResourceNode resourceNode, String baseUrl, int maxSiblings, StringBuilder sb) { String temp; sb.append("<li>"); temp = resourceNode.getCurrentResource().getUrl().replaceFirst(baseUrl, ""); if (temp.length() == 0) { temp = "/"; } sb.append(temp); sb.append( " <a class=\"right\" href=\"#\" onclick=\"toggleVisibility(document.getElementById(\'" + HttpValidator.toSafeId(resourceNode.getCurrentResource().getUrl()) + "\')); return false\" > more info</a> "); if (resourceNode.getViolationMessages().size() > 0) { for (String violationKey : resourceNode.getViolationMessages().keySet()) { String messagesDisp = ""; for (String vilationMessages : resourceNode.getViolationMessages().get(violationKey).getMessages()) { messagesDisp = messagesDisp + ", " + vilationMessages; } if (messagesDisp.startsWith(", ")) { messagesDisp = messagesDisp.substring(2); } sb.append( " <img src=\"../redDot.gif\" alt=\" x \" title=\"" + violationKey + ": " + messagesDisp + "\" height=\"13\" width=\"13\" /> "); } } if (resourceNode.getNonViolationMessages().size() > 0) { for (String violationKey : resourceNode.getNonViolationMessages().keySet()) { String messagesDisp = ""; for (String vilationMessages : resourceNode.getNonViolationMessages().get(violationKey).getMessages()) { messagesDisp = messagesDisp + ", " + vilationMessages; } if (messagesDisp.startsWith(", ")) { messagesDisp = messagesDisp.substring(2); } sb.append( " <img class=\"right\" src=\"../orangeDot.gif\" alt=\" ? \" title=\"" + violationKey + ": " + messagesDisp + "\" height=\"13\" width=\"13\" /> "); } } if (resourceNode.getDescendants().size() > 0) { sb.append("\n<ul>\n"); try { for (ResourceNode rs : resourceNode.getDescendants().subList(0, maxSiblings)) { writeResourceNodeTreeView(rs, baseUrl, maxSiblings, sb); } int overSize = resourceNode.getDescendants().size() - maxSiblings; if (overSize > 0) { sb.append("<li>...and " + overSize + " more.</li>"); } } catch (java.lang.IndexOutOfBoundsException e) { for (ResourceNode rs : resourceNode.getDescendants()) { writeResourceNodeTreeView(rs, baseUrl, maxSiblings, sb); } } sb.append("</ul>\n"); } sb.append("</li>"); sb.append("\n"); }