From commits-return-6183-apmail-jackrabbit-commits-archive=jackrabbit.apache.org@jackrabbit.apache.org Wed Jul 30 15:48:25 2008 Return-Path: Delivered-To: apmail-jackrabbit-commits-archive@www.apache.org Received: (qmail 63916 invoked from network); 30 Jul 2008 15:48:25 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 30 Jul 2008 15:48:25 -0000 Received: (qmail 14249 invoked by uid 500); 30 Jul 2008 15:48:23 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 14226 invoked by uid 500); 30 Jul 2008 15:48:23 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 14121 invoked by uid 99); 30 Jul 2008 15:48:23 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Jul 2008 08:48:23 -0700 X-ASF-Spam-Status: No, hits=-2000.0 required=10.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Wed, 30 Jul 2008 15:47:36 +0000 Received: by eris.apache.org (Postfix, from userid 65534) id 6F801238898A; Wed, 30 Jul 2008 08:48:02 -0700 (PDT) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r681088 - in /jackrabbit/trunk/jackrabbit-core/src: main/java/org/apache/jackrabbit/core/ test/java/org/apache/jackrabbit/core/ Date: Wed, 30 Jul 2008 15:48:01 -0000 To: commits@jackrabbit.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.8 Message-Id: <20080730154802.6F801238898A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jukka Date: Wed Jul 30 08:48:00 2008 New Revision: 681088 URL: http://svn.apache.org/viewvc?rev=681088&view=rev Log: JCR-1612: Reintroduce NamespaceStorage and namespace-caching Preparing for NamespaceStorage by simplifying NamespaceRegistryImpl. The safeRegisterNamespace method was only used by SearchManagerImpl, so moved it to there as a private utility method. Removed: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/NamespaceRegistryImplTest.java Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java?rev=681088&r1=681087&r2=681088&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/NamespaceRegistryImpl.java Wed Jul 30 08:48:00 2008 @@ -277,71 +277,6 @@ } /** - * Returns a prefix that is unique among the already registered prefixes. - * - * @param uriHint namespace uri that serves as hint for the prefix generation - * @return a unique prefix - */ - public String getUniquePrefix(String uriHint) { - // @todo smarter unique prefix generation -/* - int number; - if (uriHint == null || uriHint.length() == 0) { - number = prefixToURI.size() + 1; - } else { - number = uriHint.hashCode(); - } - return "_pre" + number; -*/ - return "_pre" + (prefixToURI.size() + 1); - } - - /** - * Registers a namespace using the given prefix hint. Does nothing - * if the namespace is already registered. If the given prefix hint - * is not yet registered as a prefix, then it is used as the prefix - * of the registered namespace. Otherwise a unique prefix is generated - * based on the given hint. - * - * @param prefixHint the prefix hint - * @param uri the namespace URI - * @throws NamespaceException if an illegal attempt is made to register - * a mapping - * @throws RepositoryException if an unexpected error occurs - * @see #registerNamespace(String, String) - */ - public synchronized void safeRegisterNamespace(String prefixHint, String uri) - throws NamespaceException, RepositoryException { - try { - // Check if the namespace is already registered - getPrefix(uri); - // ... it is, so do nothing. - } catch (NamespaceException e1) { - // ... it is not, try to find a unique prefix. - - // First, check and replace troublesome prefix hints. - if (prefixHint.toLowerCase().startsWith(Name.NS_XML_PREFIX) - || !XMLChar.isValidNCName(prefixHint)) { - prefixHint = "_pre"; - } - - // Then, find an appropriate prefix based on the hint - String prefix = prefixHint; - try { - for (int suffix = 2; true; suffix++) { - // Is this prefix already registered? - getURI(prefix); - // ... it is, generate a new prefix and try again. - prefix = prefixHint + suffix; - } - } catch (NamespaceException e2) { - // ... it is not, register the namespace with this prefix. - registerNamespace(prefix, uri); - } - } - } - - /** * Set an event channel to inform about changes. * * @param eventChannel event channel Modified: jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java?rev=681088&r1=681087&r2=681088&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/main/java/org/apache/jackrabbit/core/SearchManager.java Wed Jul 30 08:48:00 2008 @@ -202,27 +202,28 @@ this.excludedNodeId = excludedNodeId; // register namespaces - nsReg.safeRegisterNamespace(NS_XS_PREFIX, NS_XS_URI); + safeRegisterNamespace(NS_XS_PREFIX, NS_XS_URI); try { if (nsReg.getPrefix(NS_FN_OLD_URI).equals(NS_FN_PREFIX)) { // old uri is mapped to 'fn' prefix -> re-map - String prefix = null; - for (int i = 0; prefix == null; i++) { - try { - nsReg.getURI(NS_FN_OLD_PREFIX + i); - } catch (NamespaceException e) { - // not mapped to uri + String prefix = NS_FN_OLD_PREFIX; + try { + // Find a free prefix + for (int i = 2; true; i++) { + nsReg.getURI(prefix); prefix = NS_FN_OLD_PREFIX + i; } + } catch (NamespaceException e) { + // Re-map the old fn URI to that prefix + nsReg.registerNamespace(prefix, NS_FN_OLD_URI); } - nsReg.registerNamespace(prefix, NS_FN_OLD_URI); } } catch (NamespaceException e) { // does not yet exist - nsReg.safeRegisterNamespace(NS_FN_OLD_PREFIX, NS_FN_OLD_URI); + safeRegisterNamespace(NS_FN_OLD_PREFIX, NS_FN_OLD_URI); } // at this point the 'fn' prefix shouldn't be assigned anymore - nsReg.safeRegisterNamespace(NS_FN_PREFIX, NS_FN_URI); + safeRegisterNamespace(NS_FN_PREFIX, NS_FN_URI); Properties params = config.getParameters(); queryImplClassName = params.getProperty(PARAM_QUERY_IMPL, DEFAULT_QUERY_IMPL_CLASS); @@ -243,6 +244,43 @@ } /** + * Registers a namespace using the given prefix hint. Does nothing + * if the namespace is already registered. If the given prefix hint + * is not yet registered as a prefix, then it is used as the prefix + * of the registered namespace. Otherwise a unique prefix is generated + * based on the given hint. + * + * @param prefixHint the prefix hint + * @param uri the namespace URI + * @throws NamespaceException if an illegal attempt is made to register + * a mapping + * @throws RepositoryException if an unexpected error occurs + * @see #registerNamespace(String, String) + */ + private void safeRegisterNamespace(String prefixHint, String uri) + throws NamespaceException, RepositoryException { + try { + // Check if the namespace is already registered + nsReg.getPrefix(uri); + // ... it is, so do nothing. + } catch (NamespaceException e1) { + // ... it is not, try to find a unique prefix. + String prefix = prefixHint; + try { + for (int suffix = 2; true; suffix++) { + // Is this prefix already registered? + nsReg.getURI(prefix); + // ... it is, generate a new prefix and try again. + prefix = prefixHint + suffix; + } + } catch (NamespaceException e2) { + // ... it is not, register the namespace with this prefix. + nsReg.registerNamespace(prefix, uri); + } + } + } + + /** * Closes this SearchManager and also closes the * {@link FileSystem} configured in {@link SearchConfig}. */ Modified: jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java URL: http://svn.apache.org/viewvc/jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java?rev=681088&r1=681087&r2=681088&view=diff ============================================================================== --- jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java (original) +++ jackrabbit/trunk/jackrabbit-core/src/test/java/org/apache/jackrabbit/core/TestAll.java Wed Jul 30 08:48:00 2008 @@ -33,7 +33,6 @@ TestSuite suite = new TestSuite("Core tests"); suite.addTestSuite(CachingHierarchyManagerTest.class); - suite.addTestSuite(NamespaceRegistryImplTest.class); suite.addTestSuite(ShareableNodeTest.class); suite.addTestSuite(TransientRepositoryTest.class); suite.addTestSuite(XATest.class);