001 /* 002 * JBoss DNA (http://www.jboss.org/dna) 003 * See the COPYRIGHT.txt file distributed with this work for information 004 * regarding copyright ownership. Some portions may be licensed 005 * to Red Hat, Inc. under one or more contributor license agreements. 006 * See the AUTHORS.txt file in the distribution for a full listing of 007 * individual contributors. 008 * 009 * JBoss DNA is free software. Unless otherwise indicated, all code in JBoss DNA 010 * is licensed to you under the terms of the GNU Lesser General Public License as 011 * published by the Free Software Foundation; either version 2.1 of 012 * the License, or (at your option) any later version. 013 * 014 * JBoss DNA is distributed in the hope that it will be useful, 015 * but WITHOUT ANY WARRANTY; without even the implied warranty of 016 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 017 * Lesser General Public License for more details. 018 * 019 * You should have received a copy of the GNU Lesser General Public 020 * License along with this software; if not, write to the Free 021 * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 022 * 02110-1301 USA, or see the FSF site: http://www.fsf.org. 023 */ 024 package org.jboss.dna.repository.util; 025 026 import java.util.Collections; 027 import java.util.HashSet; 028 import java.util.Set; 029 import javax.jcr.RepositoryException; 030 import javax.jcr.Session; 031 import org.jboss.dna.common.util.CheckArg; 032 import org.jboss.dna.graph.property.NamespaceException; 033 import org.jboss.dna.graph.property.NamespaceRegistry; 034 import org.jboss.dna.graph.property.basic.BasicNamespace; 035 036 /** 037 * @author Randall Hauch 038 */ 039 public class JcrNamespaceRegistry implements NamespaceRegistry { 040 041 private final String repositoryWorkspaceName; 042 private final SessionFactory sessionFactory; 043 044 public JcrNamespaceRegistry( SessionFactory sessionFactory, 045 String repositoryWorkspaceName ) { 046 CheckArg.isNotNull(sessionFactory, "sessionFactory"); 047 CheckArg.isNotNull(repositoryWorkspaceName, "repositoryWorkspaceName"); 048 this.repositoryWorkspaceName = repositoryWorkspaceName; 049 this.sessionFactory = sessionFactory; 050 } 051 052 /** 053 * {@inheritDoc} 054 */ 055 public String getDefaultNamespaceUri() { 056 Session session = null; 057 try { 058 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 059 return session.getNamespaceURI(""); 060 } catch (RepositoryException e) { 061 throw new NamespaceException(e); 062 } finally { 063 if (session != null) { 064 session.logout(); 065 } 066 } 067 } 068 069 /** 070 * {@inheritDoc} 071 */ 072 public String getNamespaceForPrefix( String prefix ) { 073 Session session = null; 074 try { 075 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 076 return session.getNamespaceURI(prefix); 077 } catch (RepositoryException e) { 078 throw new NamespaceException(e); 079 } finally { 080 if (session != null) { 081 session.logout(); 082 } 083 } 084 } 085 086 /** 087 * {@inheritDoc} 088 */ 089 public String getPrefixForNamespaceUri( String namespaceUri, 090 boolean generateIfMissing ) { 091 Session session = null; 092 try { 093 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 094 return session.getNamespacePrefix(namespaceUri); 095 } catch (RepositoryException e) { 096 throw new NamespaceException(e); 097 } finally { 098 if (session != null) { 099 session.logout(); 100 } 101 } 102 } 103 104 /** 105 * {@inheritDoc} 106 */ 107 public boolean isRegisteredNamespaceUri( String namespaceUri ) { 108 Session session = null; 109 try { 110 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 111 session.getNamespacePrefix(namespaceUri); 112 return true; 113 } catch (javax.jcr.NamespaceException e) { 114 return false; 115 } catch (RepositoryException e) { 116 throw new NamespaceException(e); 117 } finally { 118 if (session != null) { 119 session.logout(); 120 } 121 } 122 } 123 124 /** 125 * {@inheritDoc} 126 */ 127 public String register( String prefix, 128 String namespaceUri ) { 129 String previousNamespaceUriForPrefix = null; 130 Session session = null; 131 try { 132 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 133 previousNamespaceUriForPrefix = session.getNamespacePrefix(namespaceUri); 134 javax.jcr.NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry(); 135 registry.registerNamespace(prefix, namespaceUri); 136 } catch (RepositoryException e) { 137 throw new NamespaceException(e); 138 } finally { 139 if (session != null) { 140 session.logout(); 141 } 142 } 143 return previousNamespaceUriForPrefix; 144 } 145 146 /** 147 * {@inheritDoc} 148 * 149 * @see org.jboss.dna.graph.property.NamespaceRegistry#unregister(java.lang.String) 150 */ 151 public boolean unregister( String namespaceUri ) { 152 Session session = null; 153 try { 154 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 155 String prefix = session.getNamespacePrefix(namespaceUri); 156 javax.jcr.NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry(); 157 registry.unregisterNamespace(prefix); 158 } catch (javax.jcr.NamespaceException e) { 159 return false; 160 } catch (RepositoryException e) { 161 throw new NamespaceException(e); 162 } finally { 163 if (session != null) { 164 session.logout(); 165 } 166 } 167 return true; 168 } 169 170 /** 171 * {@inheritDoc} 172 */ 173 public Set<String> getRegisteredNamespaceUris() { 174 Session session = null; 175 try { 176 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 177 javax.jcr.NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry(); 178 Set<String> result = new HashSet<String>(); 179 for (String uri : registry.getURIs()) { 180 result.add(uri); 181 } 182 return Collections.unmodifiableSet(result); 183 } catch (RepositoryException e) { 184 throw new NamespaceException(e); 185 } finally { 186 if (session != null) { 187 session.logout(); 188 } 189 } 190 } 191 192 /** 193 * {@inheritDoc} 194 * 195 * @see org.jboss.dna.graph.property.NamespaceRegistry#getNamespaces() 196 */ 197 public Set<Namespace> getNamespaces() { 198 Session session = null; 199 try { 200 session = this.sessionFactory.createSession(this.repositoryWorkspaceName); 201 javax.jcr.NamespaceRegistry registry = session.getWorkspace().getNamespaceRegistry(); 202 Set<Namespace> result = new HashSet<Namespace>(); 203 for (String uri : registry.getURIs()) { 204 String prefix = registry.getPrefix(uri); 205 result.add(new BasicNamespace(prefix, uri)); 206 } 207 return Collections.unmodifiableSet(result); 208 } catch (RepositoryException e) { 209 throw new NamespaceException(e); 210 } finally { 211 if (session != null) { 212 session.logout(); 213 } 214 } 215 } 216 217 }