You are viewing a plain text version of this content. The canonical link for it is here.
Posted to graffito-commits@incubator.apache.org by cl...@apache.org on 2006/07/27 22:02:47 UTC

svn commit: r426267 - /incubator/graffito/trunk/jcr/spring/src/java/org/apache/portals/graffito/jcr/spring/JackrabbitSessionFactory.java

Author: clombart
Date: Thu Jul 27 15:02:47 2006
New Revision: 426267

URL: http://svn.apache.org/viewvc?rev=426267&view=rev
Log:
Apply patch provided by Jukka for issue GRFT-94

Modified:
    incubator/graffito/trunk/jcr/spring/src/java/org/apache/portals/graffito/jcr/spring/JackrabbitSessionFactory.java

Modified: incubator/graffito/trunk/jcr/spring/src/java/org/apache/portals/graffito/jcr/spring/JackrabbitSessionFactory.java
URL: http://svn.apache.org/viewvc/incubator/graffito/trunk/jcr/spring/src/java/org/apache/portals/graffito/jcr/spring/JackrabbitSessionFactory.java?rev=426267&r1=426266&r2=426267&view=diff
==============================================================================
--- incubator/graffito/trunk/jcr/spring/src/java/org/apache/portals/graffito/jcr/spring/JackrabbitSessionFactory.java (original)
+++ incubator/graffito/trunk/jcr/spring/src/java/org/apache/portals/graffito/jcr/spring/JackrabbitSessionFactory.java Thu Jul 27 15:02:47 2006
@@ -16,8 +16,9 @@
  */
 package org.apache.portals.graffito.jcr.spring;
 
+import javax.jcr.NamespaceException;
+import javax.jcr.NamespaceRegistry;
 import javax.jcr.RepositoryException;
-import javax.jcr.Session;
 
 import org.apache.portals.graffito.jcr.repository.RepositoryUtil;
 import org.springmodules.jcr.JcrSessionFactory;
@@ -38,34 +39,45 @@
 	 * @param session
 	 * @throws RepositoryException
 	 */
-	protected void registerNamespaces() throws RepositoryException {
+    protected void registerNamespaces() throws RepositoryException {
+        NamespaceRegistry registry =
+            getSession().getWorkspace().getNamespaceRegistry();
 
-		Session session = getSession();
-        try
-        {
-           String[] jcrNamespaces = session.getWorkspace().getNamespaceRegistry().getPrefixes();
-           boolean createGraffitoNamespace = true;
-           for (int i = 0; i < jcrNamespaces.length; i++)
-           {
-               if (jcrNamespaces[i].equals(RepositoryUtil.GRAFFITO_NAMESPACE_PREFIX))
-               {
-                   createGraffitoNamespace = false;
-                  
-               }
-           }
-            
-           if (createGraffitoNamespace)
-           {
-               session.getWorkspace().getNamespaceRegistry().registerNamespace(RepositoryUtil.GRAFFITO_NAMESPACE_PREFIX,RepositoryUtil.GRAFFITO_NAMESPACE);               
-           }
-           
-       }
-       catch (Exception e)
-       {
-           throw new RepositoryException(e.getMessage());
-       }
-       
-       super.registerNamespaces();
-	}
+        // Keep trying until the Graffito namespace has been registered
+        int n = 0;
+        String prefix = null;
+        while (prefix == null) {
+            try {
+                // Is the Graffito namespace registered?
+                prefix = registry.getPrefix(RepositoryUtil.GRAFFITO_NAMESPACE);
+            } catch (NamespaceException e1) {
+                // No, try to register it with the default prefix
+                prefix = RepositoryUtil.GRAFFITO_NAMESPACE_PREFIX;
+                // ... and a sequence number if the first attempt failed 
+                if (n++ > 0) {
+                    prefix = prefix + n;
+                }
+                try {
+                    // Is this prefix registered to the Graffito namespace?
+                    if (!RepositoryUtil.GRAFFITO_NAMESPACE.equals(
+                            registry.getURI(prefix))) {
+                        // No, but it *is* registered. Try the next prefix...
+                        prefix = null;
+                    }
+                } catch (NamespaceException e2) {
+                    try {
+                        // No, and it's not registered. Try registering it:
+                        registry.registerNamespace(
+                                prefix, RepositoryUtil.GRAFFITO_NAMESPACE);
+                    } catch (NamespaceException e3) {
+                        // Registration failed. Try the next prefix...
+                        prefix = null;
+                    }
+                }
+            }
+        }
+
+        super.registerNamespaces();
+    }
 
 }