]> git.argeo.org Git - lgpl/argeo-commons.git/blobdiff - server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jcr/JcrUtils.java
Add query in JCR controller
[lgpl/argeo-commons.git] / server / runtime / org.argeo.server.jackrabbit / src / main / java / org / argeo / jcr / JcrUtils.java
index 91ca780b132b6d2eccaeb784e41f3340b2be4020..d3174a1cace4427be061598273b2039b529968c7 100644 (file)
@@ -3,6 +3,7 @@ package org.argeo.jcr;
 import java.util.Calendar;
 import java.util.StringTokenizer;
 
+import javax.jcr.NamespaceRegistry;
 import javax.jcr.Node;
 import javax.jcr.NodeIterator;
 import javax.jcr.Property;
@@ -39,6 +40,12 @@ public class JcrUtils {
                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");
@@ -53,28 +60,35 @@ public class JcrUtils {
        }
 
        public static String dateAsPath(Calendar cal) {
-               StringBuffer buf = new StringBuffer(11);
-               buf.append(cal.get(Calendar.YEAR));// 4
+               StringBuffer buf = new StringBuffer(14);
+               buf.append('Y').append(cal.get(Calendar.YEAR));// 5
                buf.append('/');// 1
                int month = cal.get(Calendar.MONTH) + 1;
+               buf.append('M');
                if (month < 10)
                        buf.append(0);
-               buf.append(month);// 2
+               buf.append(month);// 3
                buf.append('/');// 1
                int day = cal.get(Calendar.DAY_OF_MONTH);
                if (day < 10)
                        buf.append(0);
-               buf.append(day);// 2
+               buf.append('D').append(day);// 3
                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);
@@ -116,6 +130,39 @@ public class JcrUtils {
                }
        }
 
+       public static void registerNamespaceSafely(Session session, String prefix,
+                       String uri) {
+               try {
+                       registerNamespaceSafely(session.getWorkspace()
+                                       .getNamespaceRegistry(), prefix, uri);
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot find namespace registry", e);
+               }
+       }
+
+       public static void registerNamespaceSafely(NamespaceRegistry nr,
+                       String prefix, String uri) {
+               try {
+                       String[] prefixes = nr.getPrefixes();
+                       for (String pref : prefixes)
+                               if (pref.equals(prefix)) {
+                                       String registeredUri = nr.getURI(pref);
+                                       if (!registeredUri.equals(uri))
+                                               throw new ArgeoException("Prefix " + pref
+                                                               + " already registered for URI "
+                                                               + registeredUri
+                                                               + " which is different from provided URI "
+                                                               + uri);
+                                       else
+                                               return;// skip
+                               }
+                       nr.registerNamespace(prefix, uri);
+               } catch (RepositoryException e) {
+                       throw new ArgeoException("Cannot register namespace " + uri
+                                       + " under prefix " + prefix, e);
+               }
+       }
+
        /** Recursively outputs the contents of the given node. */
        public static void debug(Node node) throws RepositoryException {
                // First output the node path
@@ -134,6 +181,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()) {