001 package com.khubla.pragmatach.plugin.jcr; 002 003 import javax.jcr.Node; 004 import javax.jcr.Session; 005 006 import com.khubla.pragmatach.framework.api.PragmatachException; 007 import com.khubla.pragmatach.framework.api.Response; 008 009 /** 010 * @author tome 011 */ 012 public class JCRJSONController extends JCRController { 013 private Node getNode(String[] nodeName) throws PragmatachException { 014 try { 015 /* 016 * session 017 */ 018 final Session session = jcrSessionFactory.getSession(); 019 /* 020 * check 021 */ 022 if (null != session) { 023 final Node root = session.getRootNode(); 024 if (null == nodeName) { 025 return root; 026 } else { 027 return root.getNode(buildWildcardResourceURI(nodeName)); 028 } 029 } else { 030 throw new PragmatachException("Unable to get session"); 031 } 032 } catch (final Exception e) { 033 throw new PragmatachException("Exception in getNode", e); 034 } 035 } 036 037 /** 038 * render children 039 */ 040 public Response renderChildren(String[] nodeName) throws PragmatachException { 041 try { 042 final Node node = getNode(nodeName); 043 if (null != node) { 044 return new JCRResponse(getCacheHeaders(), PragmatachJCRToJSON.renderSubnodeNames(node)); 045 } else { 046 throw new Exception("Unable to get node '" + nodeName + "'"); 047 } 048 } catch (final Exception e) { 049 throw new PragmatachException("Exception in render", e); 050 } 051 } 052 053 /** 054 * render properties 055 */ 056 public Response renderProperties(String[] nodeName) throws PragmatachException { 057 try { 058 final Node node = getNode(nodeName); 059 if (null != node) { 060 return new JCRResponse(getCacheHeaders(), PragmatachJCRToJSON.renderNodeProperties(node)); 061 } else { 062 throw new Exception("Unable to get node '" + nodeName + "'"); 063 } 064 } catch (final Exception e) { 065 throw new PragmatachException("Exception in render", e); 066 } 067 } 068 }