]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java
e6e8efad1ed3bb8fe08a4edbbcd748076e5dc080
[lgpl/argeo-commons.git] / org.argeo.core / src / org / argeo / fm / jcr / JcrModel.java
1 package org.argeo.fm.jcr;
2
3 import javax.jcr.Node;
4 import javax.jcr.Property;
5 import javax.jcr.RepositoryException;
6
7 import freemarker.template.SimpleScalar;
8 import freemarker.template.TemplateHashModel;
9 import freemarker.template.TemplateModel;
10 import freemarker.template.TemplateModelException;
11 import freemarker.template.TemplateNodeModel;
12 import freemarker.template.TemplateSequenceModel;
13
14 public class JcrModel implements TemplateNodeModel, TemplateHashModel {
15 private final Node node;
16
17 public JcrModel(Node node) {
18 this.node = node;
19 }
20
21 @Override
22 public TemplateSequenceModel getChildNodes() throws TemplateModelException {
23 try {
24 return new NodeIteratorModel(node.getNodes());
25 } catch (RepositoryException e) {
26 throw new TemplateModelException("Cannot list children of " + node, e);
27 }
28 }
29
30 @Override
31 public String getNodeName() throws TemplateModelException {
32 try {
33 return node.getName();
34 } catch (RepositoryException e) {
35 throw new TemplateModelException("Cannot get name of " + node, e);
36 }
37 }
38
39 @Override
40 public String getNodeNamespace() throws TemplateModelException {
41 // TODO find out namespace
42 return null;
43 }
44
45 @Override
46 public String getNodeType() throws TemplateModelException {
47 try {
48 return node.getPrimaryNodeType().getName();
49 } catch (RepositoryException e) {
50 throw new TemplateModelException("Cannot get node type of " + node, e);
51 }
52 }
53
54 @Override
55 public TemplateNodeModel getParentNode() throws TemplateModelException {
56 try {
57 Node parent = node.getParent();
58 if (parent == null)
59 return null;
60 return new JcrModel(parent);
61 } catch (RepositoryException e) {
62 throw new TemplateModelException("Cannot get parent of " + node, e);
63 }
64 }
65
66 @Override
67 public TemplateModel get(String key) throws TemplateModelException {
68 try {
69 Property property = node.getProperty(key);
70 if (property == null)
71 return null;
72 return new SimpleScalar(property.getString());
73 } catch (RepositoryException e) {
74 throw new TemplateModelException("Cannot get property " + key + " of " + node, e);
75 }
76 }
77
78 @Override
79 public boolean isEmpty() throws TemplateModelException {
80 // JCR default properties always accessible
81 return false;
82 }
83
84 // HASH
85
86 }