DefaultNodeTreeHTMLProvider.java
4.75 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
/*
* Decompiled with CFR 0_118.
*
* Could not load the following classes:
* javax.jcr.Node
* javax.jcr.NodeIterator
* javax.jcr.RepositoryException
* javax.jcr.nodetype.NodeType
* javax.servlet.ServletRequest
* javax.servlet.http.HttpServletRequest
* javax.servlet.jsp.JspWriter
* javax.servlet.jsp.PageContext
* org.apache.commons.lang3.StringEscapeUtils
* org.apache.jackrabbit.util.Text
*/
package com.day.crx.explorer.impl.ui;
import com.day.crx.explorer.impl.j2ee.JCRExplorerServlet;
import com.day.crx.explorer.impl.ui.NodeTree;
import com.day.crx.explorer.impl.ui.NodeTreeHTMLProvider;
import java.io.IOException;
import java.util.Collection;
import java.util.TreeMap;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.RepositoryException;
import javax.jcr.nodetype.NodeType;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.jackrabbit.util.Text;
public class DefaultNodeTreeHTMLProvider
implements NodeTreeHTMLProvider {
public void drawLevel(PageContext context, String treeName, Node parentNode, String openNode, String selectedNode) throws IOException, RepositoryException {
if (!parentNode.getPrimaryNodeType().hasOrderableChildNodes()) {
NodeIterator children = parentNode.getNodes();
TreeMap<String, Node> map = new TreeMap<String, Node>();
while (children.hasNext()) {
Node node = children.nextNode();
map.put(node.getPath(), node);
}
for (Node node : map.values()) {
this.drawNode(context, treeName, node, openNode, selectedNode);
this.drawSubNodes(context, treeName, node, openNode, selectedNode);
}
} else {
NodeIterator children = parentNode.getNodes();
while (children.hasNext()) {
Node node = children.nextNode();
this.drawNode(context, treeName, node, openNode, selectedNode);
this.drawSubNodes(context, treeName, node, openNode, selectedNode);
}
}
}
public void drawNode(PageContext context, String treeName, Node node, String openNode, String selectedNode) throws IOException, RepositoryException {
String docroot = JCRExplorerServlet.getDocrootPrefix((HttpServletRequest)context.getRequest());
JspWriter out = context.getOut();
String path = node.getPath();
String id = NodeTree.getIdFromPath(treeName, path);
boolean isOpen = Text.isDescendantOrEqual((String)path, (String)openNode);
boolean isSelected = selectedNode.equals(path);
boolean hasChildren = node.hasNodes();
String imageSrc = node.isModified() ? "/imgs/icons/folder_edit.gif" : (node.isNew() ? "/imgs/icons/folder_new.gif" : JCRExplorerServlet.getNTIcon(node.getPrimaryNodeType()));
String title = Text.getName((String)node.getPath());
if (path.equals("/")) {
title = "/";
}
String nodeClass = "node " + (hasChildren ? (isOpen ? "nOpen" : "nClosed") : "nLeaf");
String nameClass = "nodeName" + (isSelected ? " nnSelected" : "");
out.write("<div id=\"" + StringEscapeUtils.escapeHtml4((String)id) + "\" class=\"" + nodeClass + "\" onClick=\"NodeTree.toggleNode('" + StringEscapeUtils.escapeHtml4((String)treeName) + "', this, event)\">");
out.write("<span class=\"nodeItem\" onClick=\"NodeTree.selectNode('" + StringEscapeUtils.escapeHtml4((String)treeName) + "', this, true, event)\" onContextmenu=\"NodeTree.selectNode('" + StringEscapeUtils.escapeHtml4((String)treeName) + "', this, false, event);try{toggleContextMenu(event);return false;}catch(e){}\";>");
out.write("<img class=\"nodeIcon\" src=\"" + docroot + imageSrc + "\" border=\"0\">");
out.write("<span onMouseEnter=\"NodeTree.addClass(this, 'nnHover')\" onMouseLeave=\"NodeTree.removeClass(this, 'nnHover')\" class=\"" + nameClass + "\">" + StringEscapeUtils.escapeHtml4((String)title) + "</span>");
out.write("</span>");
out.write("</div>");
}
public void drawSubNodes(PageContext context, String treeName, Node node, String openNode, String selectedNode) throws IOException, RepositoryException {
JspWriter out = context.getOut();
String path = node.getPath();
boolean isOpen = Text.isDescendantOrEqual((String)path, (String)openNode);
if (isOpen) {
out.write("<div class=\"subNodes snOpen\">");
this.drawLevel(context, treeName, node, openNode, selectedNode);
out.write("</div>");
} else {
out.write("<div class=\"subNodes snClosed\"></div>");
}
}
}