X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjcr%2FJcrUtils.java;h=d3174a1cace4427be061598273b2039b529968c7;hb=c69f105ffc363f6e425567fb705003408577162c;hp=ddbb7c71f006c5f4d60fd5572fde53aef4a75340;hpb=f0e8b8dc680eb131d11e53180c3912ece49f37fc;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jcr/JcrUtils.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jcr/JcrUtils.java index ddbb7c71f..d3174a1ca 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jcr/JcrUtils.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jcr/JcrUtils.java @@ -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,23 +60,30 @@ 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 '/'"); @@ -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()) {