]>
git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java
5cae5c1a86394737dd9bc6bff2128266fed6af91
1 package org
.argeo
.fm
.jcr
;
4 import javax
.jcr
.Property
;
5 import javax
.jcr
.PropertyIterator
;
6 import javax
.jcr
.RepositoryException
;
7 import javax
.jcr
.Value
;
9 import freemarker
.template
.SimpleScalar
;
10 import freemarker
.template
.TemplateCollectionModel
;
11 import freemarker
.template
.TemplateHashModel
;
12 import freemarker
.template
.TemplateHashModelEx2
;
13 import freemarker
.template
.TemplateModel
;
14 import freemarker
.template
.TemplateModelException
;
15 import freemarker
.template
.TemplateModelIterator
;
16 import freemarker
.template
.TemplateNodeModel
;
17 import freemarker
.template
.TemplateSequenceModel
;
19 public class JcrModel
implements TemplateNodeModel
, TemplateHashModel
{
20 private final Node node
;
22 public JcrModel(Node node
) {
27 public TemplateSequenceModel
getChildNodes() throws TemplateModelException
{
29 return new NodeIteratorModel(node
.getNodes());
30 } catch (RepositoryException e
) {
31 throw new TemplateModelException("Cannot list children of " + node
, e
);
36 public String
getNodeName() throws TemplateModelException
{
38 return node
.getName();
39 } catch (RepositoryException e
) {
40 throw new TemplateModelException("Cannot get name of " + node
, e
);
45 public String
getNodeNamespace() throws TemplateModelException
{
46 // TODO find out namespace
51 public String
getNodeType() throws TemplateModelException
{
53 return node
.getPrimaryNodeType().getName();
54 } catch (RepositoryException e
) {
55 throw new TemplateModelException("Cannot get node type of " + node
, e
);
60 public TemplateNodeModel
getParentNode() throws TemplateModelException
{
62 Node parent
= node
.getParent();
65 return new JcrModel(parent
);
66 } catch (RepositoryException e
) {
67 throw new TemplateModelException("Cannot get parent of " + node
, e
);
74 public TemplateModel
get(String key
) throws TemplateModelException
{
76 if ("jcr:path".equals(key
))
77 return new SimpleScalar(node
.getPath());
78 if ("jcr:name".equals(key
))
79 return new SimpleScalar(node
.getName());
80 if ("jcr:properties".equals(key
))
81 return new PropertiesModel();
82 if ("jcr:parent".equals(key
))
83 return node
.getParent() != null ?
new JcrModel(node
.getParent()) : null;
85 Property property
= node
.getProperty(key
);
88 return new SimpleScalar(property
.getString());
89 } catch (RepositoryException e
) {
90 throw new TemplateModelException("Cannot get property " + key
+ " of " + node
, e
);
95 public boolean isEmpty() throws TemplateModelException
{
99 public Node
getNode() {
103 protected TemplateModel
propertyValues(Property property
) throws RepositoryException
{
104 if (!property
.isMultiple())
105 return new SimpleScalar(property
.getString());
106 Value
[] values
= property
.getValues();
107 StringBuilder sb
= new StringBuilder();
108 for (Value value
: values
) {
109 sb
.append(value
.getString()).append('\n');
111 return new SimpleScalar(sb
.toString());
114 class PropertiesModel
implements TemplateHashModelEx2
{
116 public TemplateModel
get(String key
) throws TemplateModelException
{
117 return JcrModel
.this.get(key
);
121 public boolean isEmpty() throws TemplateModelException
{
126 public TemplateCollectionModel
keys() throws TemplateModelException
{
128 PropertyIterator pit
= node
.getProperties();
129 return new TemplateCollectionModel() {
132 public TemplateModelIterator
iterator() throws TemplateModelException
{
133 return new TemplateModelIterator() {
136 public TemplateModel
next() throws TemplateModelException
{
138 return new SimpleScalar(pit
.nextProperty().getName());
139 } catch (RepositoryException e
) {
140 throw new TemplateModelException("Cannot list properties of " + node
, e
);
145 public boolean hasNext() throws TemplateModelException
{
146 return pit
.hasNext();
151 } catch (RepositoryException e
) {
152 throw new TemplateModelException("Cannot list properties of " + node
, e
);
157 public int size() throws TemplateModelException
{
159 PropertyIterator pit
= node
.getProperties();
160 return (int) pit
.getSize();
161 } catch (RepositoryException e
) {
162 throw new TemplateModelException("Cannot list properties of " + node
, e
);
167 public TemplateCollectionModel
values() throws TemplateModelException
{
169 PropertyIterator pit
= node
.getProperties();
170 return new TemplateCollectionModel() {
173 public TemplateModelIterator
iterator() throws TemplateModelException
{
174 return new TemplateModelIterator() {
177 public TemplateModel
next() throws TemplateModelException
{
179 return propertyValues(pit
.nextProperty());
180 } catch (RepositoryException e
) {
181 throw new TemplateModelException("Cannot list properties of " + node
, e
);
186 public boolean hasNext() throws TemplateModelException
{
187 return pit
.hasNext();
192 } catch (RepositoryException e
) {
193 throw new TemplateModelException("Cannot list properties of " + node
, e
);
198 public KeyValuePairIterator
keyValuePairIterator() throws TemplateModelException
{
200 PropertyIterator pit
= node
.getProperties();
201 return new KeyValuePairIterator() {
204 public boolean hasNext() throws TemplateModelException
{
205 return pit
.hasNext();
209 public KeyValuePair
next() throws TemplateModelException
{
210 Property property
= pit
.nextProperty();
211 return new KeyValuePair() {
214 public TemplateModel
getValue() throws TemplateModelException
{
216 return propertyValues(property
);
217 } catch (RepositoryException e
) {
218 throw new TemplateModelException("Cannot list properties of " + node
, e
);
223 public TemplateModel
getKey() throws TemplateModelException
{
225 return new SimpleScalar(property
.getName());
226 } catch (RepositoryException e
) {
227 throw new TemplateModelException("Cannot list properties of " + node
, e
);
233 } catch (RepositoryException e
) {
234 throw new TemplateModelException("Cannot list properties of " + node
, e
);