]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jcr/JcrUtils.java
Add utilities
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / jcr / JcrUtils.java
index 5a46a763792d3db39c55432c4e83b78de8e141cf..8792a36de3aeb3e79d02f2376c68aaf9baee4660 100644 (file)
@@ -1,5 +1,6 @@
 package org.argeo.jcr;
 
+import java.util.Calendar;
 import java.util.StringTokenizer;
 
 import javax.jcr.Node;
@@ -9,6 +10,8 @@ import javax.jcr.PropertyIterator;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
 import javax.jcr.Value;
+import javax.jcr.query.Query;
+import javax.jcr.query.QueryResult;
 
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -17,6 +20,31 @@ import org.argeo.ArgeoException;
 public class JcrUtils {
        private final static Log log = LogFactory.getLog(JcrUtils.class);
 
+       public static Node querySingleNode(Query query) {
+               NodeIterator nodeIterator;
+               try {
+                       QueryResult queryResult = query.execute();
+                       nodeIterator = queryResult.getNodes();
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot execute query " + query, e);
+               }
+               Node node;
+               if (nodeIterator.hasNext())
+                       node = nodeIterator.nextNode();
+               else
+                       return null;
+
+               if (nodeIterator.hasNext())
+                       throw new ArgeoException("Query returned more than one node.");
+               return node;
+       }
+       
+       public static String removeForbiddenCharacters(String str){
+               return str.replace('[', '_').replace(']', '_')
+               .replace('/', '_').replace('*', '_');
+
+       }
+
        public static String parentPath(String path) {
                if (path.equals("/"))
                        throw new ArgeoException("Root path '/' has no parent path");
@@ -30,16 +58,44 @@ public class JcrUtils {
                return pathT.substring(0, index);
        }
 
+       public static String dateAsPath(Calendar cal) {
+               StringBuffer buf = new StringBuffer(11);
+               buf.append(cal.get(Calendar.YEAR));// 4
+               buf.append('/');// 1
+               int month = cal.get(Calendar.MONTH) + 1;
+               if (month < 10)
+                       buf.append(0);
+               buf.append(month);// 2
+               buf.append('/');// 1
+               int day = cal.get(Calendar.DAY_OF_MONTH);
+               if (day < 10)
+                       buf.append(0);
+               buf.append(day);// 2
+               buf.append('/');// 1
+               return buf.toString();
+
+       }
+
+       public static String hostAsPath(String host) {
+               // TODO : inverse order of the elements (to have org/argeo/test IO
+               // test/argeo/org
+               return host.replace('.', '/');
+       }
+
        public static String lastPathElement(String path) {
                if (path.charAt(path.length() - 1) == '/')
                        throw new ArgeoException("Path " + path + " cannot end with '/'");
                int index = path.lastIndexOf('/');
-               if (index <= 0)
+               if (index < 0)
                        throw new ArgeoException("Cannot find last path element for "
                                        + path);
                return path.substring(index + 1);
        }
 
+       public static Node mkdirs(Session session, String path) {
+               return mkdirs(session, path, null, false);
+       }
+
        public static Node mkdirs(Session session, String path, String type,
                        Boolean versioning) {
                try {
@@ -90,6 +146,8 @@ public class JcrUtils {
 
                // Then output the properties
                PropertyIterator properties = node.getProperties();
+               //log.debug("Property are : ");
+               
                while (properties.hasNext()) {
                        Property property = properties.nextProperty();
                        if (property.getDefinition().isMultiple()) {