X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.core%2Fsrc%2Forg%2Fargeo%2Ffm%2Fjcr%2FJcrModel.java;h=6a834142e4b963c7cb18f98a05dd3e1e13a4e9ed;hb=f8a1ec1e30180672eb9826ef47924ed43b3c6b3d;hp=5cae5c1a86394737dd9bc6bff2128266fed6af91;hpb=5f1074b1658db47705b0b532099e19ba918c5745;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java b/org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java index 5cae5c1a8..6a834142e 100644 --- a/org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java +++ b/org.argeo.core/src/org/argeo/fm/jcr/JcrModel.java @@ -1,5 +1,8 @@ package org.argeo.fm.jcr; +import java.util.ArrayList; +import java.util.List; + import javax.jcr.Node; import javax.jcr.Property; import javax.jcr.PropertyIterator; @@ -80,12 +83,23 @@ public class JcrModel implements TemplateNodeModel, TemplateHashModel { if ("jcr:properties".equals(key)) return new PropertiesModel(); if ("jcr:parent".equals(key)) - return node.getParent() != null ? new JcrModel(node.getParent()) : null; - - Property property = node.getProperty(key); - if (property == null) - return null; - return new SimpleScalar(property.getString()); + return !"/".equals(node.getPath()) ? new JcrModel(node.getParent()) : null; + + Property property; + if (!node.hasProperty(key)) { + List props = new ArrayList<>(); + PropertyIterator pit = node.getProperties("*:" + key); + while (pit.hasNext()) + props.add(pit.nextProperty()); + if (props.size() == 0) + return null; + if (props.size() > 1) + throw new TemplateModelException( + "Too many properties match " + key + " (" + props + "), use prefix with \\: escape"); + property = props.get(0); + } else + property = node.getProperty(key); + return propertyValues(property); } catch (RepositoryException e) { throw new TemplateModelException("Cannot get property " + key + " of " + node, e); }