]> git.argeo.org Git - gpl/argeo-jcr.git/blobdiff - org.argeo.cms.jcr/src/org/argeo/jcr/Jcr.java
Merge tag 'v2.3.15' into testing
[gpl/argeo-jcr.git] / org.argeo.cms.jcr / src / org / argeo / jcr / Jcr.java
index 49b008d70751e24e4f362c9e5e2b9caab66f06cc..bdeaac707511d554403fcea465b8fc80780f9de5 100644 (file)
@@ -49,11 +49,15 @@ public class Jcr {
        /**
         * The name of a node which will be serialized as XML text, as per section 7.3.1
         * of the JCR 2.0 specifications.
+        * 
+        * @see Workspace#NAME_JCR_XMLTEXT
         */
        public final static String JCR_XMLTEXT = "jcr:xmltext";
        /**
         * The name of a property which will be serialized as XML text, as per section
         * 7.3.1 of the JCR 2.0 specifications.
+        * 
+        * @see Workspace#NAME_JCR_XMLCHARACTERS
         */
        public final static String JCR_XMLCHARACTERS = "jcr:xmlcharacters";
        /**
@@ -427,6 +431,20 @@ public class Jcr {
                }
        }
 
+       /**
+        * Whether this node has this property.
+        * 
+        * @see Node#hasProperty(String)
+        * @throws JcrException caused by {@link RepositoryException}
+        */
+       public static boolean hasProperty(Node node, String property) {
+               try {
+                       return node.hasProperty(property);
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot check whether " + node + " has property " + property, e);
+               }
+       }
+
        /**
         * Set a property to the given value, or remove it if the value is
         * <code>null</code>.
@@ -599,6 +617,7 @@ public class Jcr {
                }
        }
 
+       @SuppressWarnings("unchecked")
        public static <T> T getAs(Node node, String property, Class<T> clss) {
                if (String.class.isAssignableFrom(clss)) {
                        return (T) get(node, property);
@@ -609,6 +628,23 @@ public class Jcr {
                }
        }
 
+       /**
+        * Retrieve a {@link PropertyType#DATE} property as an {@link Instant}.
+        * 
+        * @return the property value, or <code>null</code> if not found.
+        */
+       public static Instant getAsInstant(Node node, String property) {
+               try {
+                       if (!node.hasProperty(property))
+                               return null;
+                       Calendar calendar = node.getProperty(property).getDate();
+                       return calendar.getTime().toInstant();
+               } catch (RepositoryException e) {
+                       throw new JcrException("Cannot get property " + property + " of " + node + " as an instant.", e);
+               }
+
+       }
+
        /**
         * Get a multiple property as a list, doing a best effort to cast it as the
         * target list.