1 package net.sf.statcvs.pages;
2
3 import java.util.Iterator;
4
5 import net.sf.statcvs.Messages;
6 import net.sf.statcvs.model.Directory;
7
8
9
10
11
12
13
14 public class DirectoryTreeFormatter {
15 private static final int SPACE_COUNT = 4;
16
17 private final Directory directory;
18 private final boolean withRootLinks;
19
20 public DirectoryTreeFormatter(final Directory directory, final boolean withRootLinks) {
21 this.directory = directory;
22 this.withRootLinks = withRootLinks;
23 }
24
25 private String getRootLinks(Directory dir) {
26 String result = getFormattedName(dir, false, true);
27 while (!dir.isRoot()) {
28 final Directory parent = dir.getParent();
29 result = getFormattedName(parent, true, false) + "/" + result;
30 dir = parent;
31 }
32 return result;
33 }
34
35 public String getFormatted() {
36 final StringBuffer result = new StringBuffer("<p class=\"dirtree\">\n");
37 final Iterator it = this.directory.getSubdirectoriesRecursive().iterator();
38 if (this.withRootLinks) {
39 final Directory current = (Directory) it.next();
40 result.append(getRootLinks(current)).append("<br/>\n");
41 }
42 while (it.hasNext()) {
43 final Directory subdirectory = (Directory) it.next();
44 format(subdirectory, 0, result);
45 }
46 result.append("</p>\n");
47 return result.toString();
48 }
49
50 private void format(final Directory dir, final int currentDepth, final StringBuffer s) {
51 s.append(getSpaces(dir.getDepth() - currentDepth));
52 if (dir.isEmpty()) {
53 s.append(HTML.getIcon(ReportSuiteMaker.DELETED_DIRECTORY_ICON, Messages.getString("DELETED_DIRECTORY_ICON")));
54 } else {
55 s.append(HTML.getIcon(ReportSuiteMaker.DIRECTORY_ICON, Messages.getString("DIRECTORY_ICON")));
56 }
57 s.append(" \n").append(getFormattedName(dir, true, false));
58 s.append(" \n(").append(dir.getCurrentFileCount()).append(" ");
59 s.append(Messages.getString("DIRECTORY_TREE_FILES")).append(", ");
60 s.append(dir.getCurrentLOC()).append(" ");
61 s.append(Messages.getString("DIRECTORY_TREE_LINES")).append(")<br />\n");
62 }
63
64 private String getFormattedName(final Directory directory, final boolean link, final boolean bold) {
65 String name = directory.isRoot() ? Messages.getString("NAVIGATION_ROOT") : directory.getName();
66 if (link) {
67 final String url = DirectoryPageMaker.getURL(directory);
68 name = HTML.getLink(url, name);
69 } else {
70 name = HTML.escape(name);
71 }
72 if (bold) {
73 return "<strong>" + name + "</strong>";
74 }
75 return name;
76 }
77
78 private String getSpaces(final int count) {
79 final StringBuffer result = new StringBuffer();
80 for (int i = 0; i < count * SPACE_COUNT; i++) {
81 result.append(" ");
82 }
83 return result.toString();
84 }
85 }