Introduce namespace support
[lgpl/argeo-commons.git] / org.argeo.cms.jcr / src / org / argeo / cms / jcr / gcr / JcrContentProvider.java
index 5e4a1b337133bee93ae36e859cba152dbea0c56f..761c087f0f9551732b57c01e12e6ce36097b11e1 100644 (file)
@@ -1,18 +1,30 @@
 package org.argeo.cms.jcr.gcr;
 
+import java.util.Arrays;
+import java.util.Iterator;
+
 import javax.jcr.Repository;
+import javax.jcr.RepositoryException;
 import javax.jcr.Session;
+import javax.xml.namespace.NamespaceContext;
 
 import org.argeo.api.gcr.Content;
 import org.argeo.api.gcr.spi.ContentProvider;
+import org.argeo.api.gcr.spi.ProvidedSession;
 import org.argeo.cms.jcr.CmsJcrUtils;
+import org.argeo.jcr.JcrException;
+import org.argeo.jcr.JcrUtils;
 
-public class JcrContentProvider implements ContentProvider {
+public class JcrContentProvider implements ContentProvider, NamespaceContext {
        private Repository jcrRepository;
-       private Session jcrSession;
+       private Session adminSession;
 
        public void init() {
-               jcrSession = CmsJcrUtils.openDataAdminSession(jcrRepository, null);
+               adminSession = CmsJcrUtils.openDataAdminSession(jcrRepository, null);
+       }
+
+       public void destroy() {
+               JcrUtils.logoutQuietly(adminSession);
        }
 
        public void setJcrRepository(Repository jcrRepository) {
@@ -20,15 +32,39 @@ public class JcrContentProvider implements ContentProvider {
        }
 
        @Override
-       public Content get() {
+       public Content get(ProvidedSession session, String mountPath, String relativePath) {
+               // TODO Auto-generated method stub
                return null;
        }
 
+       /*
+        * NAMESPACE CONTEXT
+        */
        @Override
-       public Content get(String relativePath) {
-               // TODO Auto-generated method stub
-               return null;
+       public String getNamespaceURI(String prefix) {
+               try {
+                       return adminSession.getNamespaceURI(prefix);
+               } catch (RepositoryException e) {
+                       throw new JcrException(e);
+               }
+       }
+
+       @Override
+       public String getPrefix(String namespaceURI) {
+               try {
+                       return adminSession.getNamespacePrefix(namespaceURI);
+               } catch (RepositoryException e) {
+                       throw new JcrException(e);
+               }
+       }
+
+       @Override
+       public Iterator<String> getPrefixes(String namespaceURI) {
+               try {
+                       return Arrays.asList(adminSession.getNamespacePrefix(namespaceURI)).iterator();
+               } catch (RepositoryException e) {
+                       throw new JcrException(e);
+               }
        }
 
-       
 }