001    package com.khubla.pragmatach.examples.jcrexample.html;
002    
003    import java.util.HashSet;
004    import java.util.Set;
005    
006    import javax.jcr.Node;
007    import javax.jcr.NodeIterator;
008    import javax.jcr.Property;
009    import javax.jcr.PropertyIterator;
010    import javax.jcr.RepositoryException;
011    import javax.jcr.Session;
012    
013    import com.khubla.pragmatach.framework.annotation.Controller;
014    import com.khubla.pragmatach.framework.annotation.Route;
015    import com.khubla.pragmatach.framework.annotation.View;
016    import com.khubla.pragmatach.framework.api.PragmatachException;
017    import com.khubla.pragmatach.framework.api.Response;
018    import com.khubla.pragmatach.plugin.freemarker.FreemarkerController;
019    import com.khubla.pragmatach.plugin.jcr.JCRSessionFactory;
020    
021    /**
022     * @author tome
023     */
024    @Controller(name = "HTMLNodeChildrenController")
025    @View(view = "jcrnode.html")
026    public class HTMLNodeController extends FreemarkerController {
027       /***
028        * JCRSessionFactory
029        */
030       protected final JCRSessionFactory jcrSessionFactory = new JCRSessionFactory();
031       /**
032        * the node
033        */
034       private Node node;
035       /**
036        * subnodes
037        */
038       private Set<Node> subnodes;
039       /**
040        * current node path
041        */
042       private String jcrPath = "";
043    
044       public String getJcrPath() {
045          return jcrPath;
046       }
047    
048       public Node getNode() {
049          return node;
050       }
051    
052       public Set<Node> getSubnodes() {
053          return subnodes;
054       }
055    
056       public Set<Property> nodeProperties(Node node) throws RepositoryException {
057          final Set<Property> ret = new HashSet<Property>();
058          final PropertyIterator propertyIterator = node.getProperties();
059          while (propertyIterator.hasNext()) {
060             /*
061              * property
062              */
063             ret.add(propertyIterator.nextProperty());
064          }
065          return ret;
066       }
067    
068       private void readSubNodes(Node node) throws RepositoryException {
069          subnodes = new HashSet<Node>();
070          final NodeIterator nodeIterator = node.getNodes();
071          while (nodeIterator.hasNext()) {
072             /*
073              * node
074              */
075             subnodes.add(nodeIterator.nextNode());
076          }
077       }
078    
079       @Route(uri = "example/html/")
080       public Response render() throws PragmatachException {
081          try {
082             final Session session = jcrSessionFactory.getSession();
083             node = session.getRootNode();
084             readSubNodes(node);
085             jcrPath = "";
086             return super.render();
087          } catch (final Exception e) {
088             throw new PragmatachException("Exception in render", e);
089          }
090       }
091    
092       @Route(uri = "example/html/*")
093       public Response render(String[] nodeName) throws PragmatachException {
094          try {
095             final Session session = jcrSessionFactory.getSession();
096             /*
097              * get the node path and remove the leading slashie
098              */
099             jcrPath = (getJcrPath() + buildWildcardResourceURI(nodeName)).substring(1) + "/";
100             node = session.getRootNode().getNode(jcrPath);
101             readSubNodes(node);
102             return super.render();
103          } catch (final Exception e) {
104             throw new PragmatachException("Exception in render", e);
105          }
106       }
107    
108       public void setJcrPath(String jcrPath) {
109          this.jcrPath = jcrPath;
110       }
111    
112       public void setNode(Node node) {
113          this.node = node;
114       }
115    
116       public void setSubnodes(Set<Node> subnodes) {
117          this.subnodes = subnodes;
118       }
119    }