%@ page import="javax.jcr.*" %><%
%><%@ page import="org.apache.slide.jcr.core.PasswordCredentials" %><%
%><%@ page import="org.apache.slide.jcr.remote.client.RemoteRepositoryFactory" %><%
%><%@ page import="org.apache.log4j.PropertyConfigurator" %><%
%><%@ page import="org.apache.log4j.Logger" %><%
%><%@ page import="java.io.*" %><%
%><%@ page import="javax.servlet.http.*" %><%
%><%@ page import="BrowserNode" %><%
%><%@ page import="JcrBrowser" %><%
%><%@ page session="true" %><%!
private static Logger log = Logger.getLogger("JCRBrowser");
%><%
/**
* This example is a simple application which browses a jcr repository.
*
* Actions:
* - browse repository
* - create node (folder, file, hierarchy, node)
* - create property
* - delete node/property
* - copy and move
* - import and export nodes
* - upload content (string and binary)
*/
// read from url
String scriptUrl = request.getRequestURI();
String showpath;
String oriShowpath = request.getParameter("showpath");
if (oriShowpath == null || oriShowpath.equals("")) {
oriShowpath = "/";
showpath = oriShowpath;
} else {
showpath = oriShowpath + "/";
}
String startNode = request.getParameter("startnode");
// retrieve ticket (from session or while logging into repository)
Ticket ticket = null;
try {
ticket = (Ticket) session.getValue("ticket");
if (ticket == null) {
// try to read from request and connect
String uid = request.getParameter("uid");
String pw = request.getParameter("pw");
String repName = (request.getParameter("rep") == null) ? "jcr" : request.getParameter("rep");
String host = (request.getParameter("host") == null) ? "localhost" : request.getParameter("host");
if (uid != null && pw != null) {
try {
Repository rep = RemoteRepositoryFactory.getInstance().getRemoteRepository("//" + host + "/" + repName);
ticket = rep.connect(new PasswordCredentials(uid, pw.toCharArray()));
session.putValue("ticket", ticket);
} catch (Exception e) {
%><%
}
}
}
} catch (Exception e) {
// Something wrong
%><%
ticket = null;
}
// access repository if ticket is "valid" otherwise go to the login screen
if (ticket != null) {
Node root = ticket.getRootNode();
// load start node
Node sNode = (startNode != null && !startNode.equals("")) ? (Node) root.getElement(startNode.substring(1)) : root;
startNode = (startNode != null && !startNode.equals("")) ? "&startnode=" + startNode : "";
Element showpathElem = root.getElement(oriShowpath.substring(1));
// proceed requested actions (jcrExplorer: browse,copy,move,add,delete,upload
if (request.getParameter("browser") != null) {
// thats the jcr linkbrowser window (for copy and move)
if(request.getParameter("browser").equals("iframe")) {
%><%
%>
<%
%><%
%><%
%><%
%><%
// build tree
JcrBrowser browser = new JcrBrowser();
Object[] flatTree = browser.getFlatTree(sNode, showpath);
startNode += "&browser=iframe&handle=" + request.getParameter("handle") + "&jcraction=" + request.getParameter("jcraction");
for (int i = 0; i < flatTree.length; i++) {
BrowserNode aBrowserNode = (BrowserNode) flatTree[i];
Element aElem = aBrowserNode.getElement();
int level = aBrowserNode.getLevel();
String spaces = getTreeSpaces(aBrowserNode.getTreeHelper(),false);
String icon = "";
if (aElem.isNode()) {
Node aNode = (Node) aElem;
if (aNode.isHierarchyNode()) {
icon = (!aNode.isFile()) ? "" : "";
} else {
icon = "";
}
icon = "" + icon + "";
String isClicked = (aBrowserNode.getIsClicked()) ? "name=\"stop\"" : "";
String title = "";
if (aNode.hasElements()) {
if (aBrowserNode.getIsActive()) {
String parentHandle = "/";
try {
parentHandle = aNode.getAncestor(1).getPath();
} catch (ElementNotFoundException e) {
// do nothing
}
if (parentHandle.equals("")) {
parentHandle = "/";
}
title += (aBrowserNode.getLastElem()) ? "" + icon + aNode.getName() :
"" + icon + aNode.getName();
} else {
title += (aBrowserNode.getLastElem()) ? "" + icon + aNode.getName() :
"" + icon + aNode.getName();
}
} else {
title += (aBrowserNode.getLastElem()) ? "" + icon + aNode.getName() : "" + icon + aNode.getName();
}
// output
%><%
%><%= spaces %><%= title %> | <%
%>
<%
} else {
// it is a property
Property aProp = (Property) aElem;
icon = "";
String title = (aBrowserNode.getLastElem()) ? "" + icon + aProp.getName() : " | " + icon + " | "+aProp.getName();
String strVal = null;
// output
%> | <%
%><%= spaces %><%= title %> |
| <%
%>
<%
}
}
%>
<%
%><%
%><%
} else {
%>
JcrLinkBrowser (<%= request.getParameter("jcraction") %>)
<%
}
} else if (showpathElem.isProperty() && request.getParameter("mode") == null) {
// display the property
Property aProp = (Property) showpathElem;
if (aProp.getType() == PropertyType.BINARY) {
response.setContentType("application/octet-stream");
OutputStream os = response.getOutputStream();
InputStream is = aProp.toStream();
byte[] buffer = new byte[8192];
int read = 0;
while ((read = is.read(buffer)) > 0) {
os.write(buffer, 0, read);
}
is.close();
} else {
response.setContentType("text/plain");
out.write(aProp.toString());
}
} else if (showpathElem.isProperty()) {
// upload dialog
Property aProp = (Property) showpathElem;
if (request.getParameter("mode").equals("save")) {
try {
if (aProp.getType() == PropertyType.BINARY) {
String filename = request.getParameter(aProp.getPath());
File file = new File(filename);
aProp.setValue(new FileInputStream(file));%>filename:<%= filename %><%
} else {
aProp.setValue(request.getParameter(aProp.getPath()));
}
} catch (Exception e) {
%><%
}
String ck = Long.toString(System.currentTimeMillis());
%>JCR Explorersaving...
<%
} else {
String ck = Long.toString(System.currentTimeMillis());
boolean isBinary = aProp.getType() == PropertyType.BINARY;
String htmlTitle = (isBinary) ? "Upload File" : " Edit";
%>
<%= htmlTitle %>
<%
if (isBinary) {
%>
<%
}
} else {
// perform action if requeted by user (delete,create,move,copy)
if (request.getParameter("jcraction") != null && request.getParameter("handle") != null) {
// we have something to do
String jcraction = request.getParameter("jcraction");
String handle = request.getParameter("handle");
Node rootNode = (Node) root;
if (jcraction.equals("delete")) {
try {
rootNode.remove(handle.substring(1));
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("move")) {
try {
String dest = request.getParameter("desthandle");
Element srcElem = rootNode.getElement(handle.substring(1));
if (srcElem.isNode()) {
Node srcNode = (Node) srcElem;
srcNode.moveTo(dest);
}
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("copy")) {
try {
String dest = request.getParameter("desthandle");
Element srcElem = rootNode.getElement(handle.substring(1));
if (srcElem.isNode()) {
Node srcNode = (Node) srcElem;
srcNode.copyTo(dest);
} else {
%><%
}
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("addnode")) {
try {
rootNode.addNode(handle.substring(1),true);
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("addhnode")) {
try {
rootNode.addHierarchyNode(handle.substring(1),true);
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("addfol")) {
try {
rootNode.addFolder(handle.substring(1),true);
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("addfile")) {
try {
rootNode.addFile(handle.substring(1),true);
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("addprop")) {
try {
rootNode.addProperty(handle.substring(1),true);
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("import")) {
try {
String filename = request.getParameter("file");
File file = new File(filename);
Node aNode = rootNode.getNode(handle.substring(1));
aNode.addNode(new FileInputStream(file), true);
} catch (Exception e) {
%><%
}
} else if (jcraction.equals("export")) {
try {
FileOutputStream fos = new FileOutputStream(request.getParameter("filename"));
Node aNode = rootNode.getNode(handle.substring(1));
aNode.serialize(fos,false,false);
fos.close();
} catch (Exception e) {
%><%
}
}
}
// jcr explorer
JcrBrowser browser = new JcrBrowser();
Object[] flatTree = browser.getFlatTree(sNode, showpath);
%><%
%><%
%>jcr browser<%
%><%
%><%
%><%
%>
<%
%><%
%><%
%><%
%><%
%><%
%><%
}
} else {
// login page
String ck = Long.toString(System.currentTimeMillis());
%>
<%
}%><%!
private String getTreeSpaces(String treeHelper, boolean big) {
String out = "";
for(int i = 1; i < treeHelper.length(); i++) {
if (treeHelper.charAt(i) == '0') {
if (big) {
out += "";
} else {
out += "";
}
} else {
out += "";
}
}
return out;
}
private String getSelectBox(Object[] flatTree) {
String out = "";
}
%>