<%@ page import="javax.jcr.*" %><% %><%@ 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 %><% %><% %><% } else { // it is a property Property aProp = (Property) aElem; icon = ""; String title = (aBrowserNode.getLastElem()) ? "<% %><% %><% } } %>
<%= spaces %><%= title %>
" + icon + aProp.getName() : "" + icon + ""+aProp.getName(); String strVal = null; // output %>
<%= spaces %><%= title %>
<% %><% %><% } else { %> JcrLinkBrowser (<%= request.getParameter("jcraction") %>)
<% if (request.getParameter("jcraction").equals("copy")) { %>Destination (add label):
<% } else { %>Destination:
<% }%>
','<%= request.getParameter("handle") %>')"/>
<% } } else if (!showpathElem.isNode() && 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.isNode()) { // 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 { %><% String val = aProp.toString(); if(val.length() < 100) { val = JcrBrowser.escapeHTML(val); %><% } else { %><% } }%>
<% } } 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 = 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<% %><% %><% %><% %>





<% %><% %><% String selBox = getSelectBox(flatTree); Node parent = sNode.getPath().equals("/") ? sNode : sNode.getParent(); %><% %><% // build tree for (int i = 0; i < flatTree.length; i++) { BrowserNode aBrowserNode = (BrowserNode) flatTree[i]; Element aElem = aBrowserNode.getElement(); int level = aBrowserNode.getLevel(); boolean isBig = aBrowserNode.isBig(); String spaces = getTreeSpaces(aBrowserNode.getTreeHelper(),isBig); String icon = ""; if (aElem.isNode()) { Node aNode = (Node) aElem; if (aNode.isHierarchyNode()) { icon = (!aNode.isFile()) ? "" : ""; } else { 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 %><% %><% %><% %><% } else { // it is a property Property aProp = (Property) aElem; String big = (isBig) ? "99" : ""; String valign = (isBig) ? "top" : "center"; icon = ""; String title = (aBrowserNode.getLastElem()) ? "<% %><% if (aProp.getType() == PropertyType.BINARY) { strVal = "\"View"; %><% } else { if (!isBig) { %><% } else { %><% } } %><% } } %>
<% %><% %><% %><% %><% %><% %><% %>
Select Start Node<%= selBox %>Up (<%= parent.getPath() %>)
<% %>
<%= spaces %><%= title %>[Node]
" + icon + aProp.getName() : "" + icon + ""+aProp.getName(); String strVal = null; if (aProp.hasValue()) { Value propVal = aProp.getValue(); if (aProp.getType() == PropertyType.STRING) { strVal = propVal.getString(); } else { strVal = "[" + aProp.getType() + "]"; } } strVal = (strVal == null) ? "" : strVal; strVal = JcrBrowser.escapeHTML(strVal); // output %>
<%= spaces %><%= title %>
<%= strVal %>Upload File
<% %>
<% %><% %>
<% %>
<% %><% %><% %><% } } else { // login page String ck = Long.toString(System.currentTimeMillis()); %>
user id:
password:
repository name:
hostname:
<% }%><%! 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 = ""; } %>