Author: rgoers
Date: Sun Apr 26 07:46:32 2009
New Revision: 768678

URL: http://svn.apache.org/viewvc?rev=768678&view=rev
Log:
Allow CatalogResolver to interpolate catalog entries.

Added:
    
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
   (with props)
    
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
   (with props)
Modified:
    
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
    
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java
    
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
    
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java

Modified: 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java?rev=768678&r1=768677&r2=768678&view=diff
==============================================================================
--- 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/DefaultConfigurationBuilder.java
 Sun Apr 26 07:46:32 2009
@@ -755,6 +755,7 @@
             EntityResolver resolver = (EntityResolver) 
BeanHelper.createBean(decl, CatalogResolver.class);
             BeanHelper.setProperty(resolver, "fileSystem", getFileSystem());
             BeanHelper.setProperty(resolver, "baseDir", getBasePath());
+            BeanHelper.setProperty(resolver, "substitutor", getSubstitutor()); 
           
             setEntityResolver(resolver);
         }
     }

Modified: 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java?rev=768678&r1=768677&r2=768678&view=diff
==============================================================================
--- 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java
 (original)
+++ 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/VFSFileSystem.java
 Sun Apr 26 07:46:32 2009
@@ -285,8 +285,10 @@
 
     public URL locateFromURL(String basePath, String fileName)
     {
-        if ((basePath != null && UriParser.extractScheme(basePath) == null)
-            || (basePath == null && UriParser.extractScheme(fileName) == null))
+        String fileScheme = UriParser.extractScheme(fileName);
+
+        // Use DefaultFileSystem if basePath and fileName don't have a scheme.
+        if ((basePath == null || UriParser.extractScheme(basePath) == null) && 
fileScheme == null)
         {
             return super.locateFromURL(basePath, fileName);
         }
@@ -295,7 +297,8 @@
             FileSystemManager fsManager = VFS.getManager();
 
             FileObject file;
-            if (basePath != null)
+            // Only use the base path if the file name doesn't have a scheme.
+            if (basePath != null && fileScheme == null)
             {
                 FileObject base = fsManager.resolveFile(basePath);
                 if (base.getType() == FileType.FILE)

Modified: 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java?rev=768678&r1=768677&r2=768678&view=diff
==============================================================================
--- 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
 (original)
+++ 
commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/resolver/CatalogResolver.java
 Sun Apr 26 07:46:32 2009
@@ -24,6 +24,7 @@
 import org.apache.commons.configuration2.FileSystem;
 import org.apache.commons.configuration2.ConfigurationException;
 import org.apache.commons.configuration2.ConfigurationUtils;
+import org.apache.commons.lang.text.StrSubstitutor;
 import org.apache.xml.resolver.readers.CatalogReader;
 import org.apache.xml.resolver.CatalogException;
 
@@ -122,6 +123,15 @@
     }
 
     /**
+     * Set the StrSubstitutor.
+     * @param substitutor The StrSubstitutor.
+     */
+    public void setSubstitutor(StrSubstitutor substitutor)
+    {
+        manager.setSubstitutor(substitutor);
+    }
+
+    /**
      * Enables debug logging of xml-commons Catalog processing.
      * @param debug True if debugging should be enabled, false otherwise.
      */
@@ -242,6 +252,9 @@
         /** The base directory */
         private String baseDir = System.getProperty("user.dir");
 
+        /** The String Substitutor */
+        private StrSubstitutor substitutor;
+
         /**
          * Set the FileSystem
          * @param fileSystem The FileSystem in use.
@@ -280,6 +293,16 @@
         {
             return this.baseDir;
         }
+
+        public void setSubstitutor(StrSubstitutor substitutor)
+        {
+            this.substitutor = substitutor;
+        }
+
+        public StrSubstitutor getStrSubstitutor()
+        {
+            return this.substitutor;
+        }
     }
 
     /**
@@ -425,5 +448,18 @@
                 parsePendingCatalogs();
             }
         }
+
+        /**
+         * Perform character normalization on a URI reference.
+         *
+         * @param uriref The URI reference
+         * @return The normalized URI reference.
+         */
+        protected String normalizeURI(String uriref)
+        {
+            StrSubstitutor substitutor = ((CatalogManager) 
catalogManager).getStrSubstitutor();
+            String resolved = substitutor != null ? 
substitutor.replace(uriref) : uriref;
+            return super.normalizeURI(resolved);
+        }       
     }
 }

Modified: 
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java?rev=768678&r1=768677&r2=768678&view=diff
==============================================================================
--- 
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java
 (original)
+++ 
commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/TestVFSConfigurationBuilder.java
 Sun Apr 26 07:46:32 2009
@@ -76,6 +76,9 @@
     private static final File VALIDATION_FILE = ConfigurationAssert
             .getTestFile("testValidation.xml");
 
+    private static final File VALIDATION2_FILE = ConfigurationAssert
+            .getTestFile("testValidation2.xml");
+
     private static final File MULTI_TENENT_FILE = ConfigurationAssert
             .getTestFile("testMultiTenentConfigurationBuilder.xml");
 
@@ -109,7 +112,7 @@
     {
         FileSystem.resetDefaultFileSystem();
         super.tearDown();
-    }    
+    }
 
     /**
      * Tests the isReservedNode() method of ConfigurationDeclaration.
@@ -848,6 +851,15 @@
         assertEquals("Incorrect value retrieved","value1",value);
     }
 
+    public void testValidation2() throws Exception
+    {
+        factory.setFile(VALIDATION2_FILE);
+        factory.getConfiguration(true);
+        String value = System.getProperty("key1");
+        assertNotNull("The test key was not located", value);
+        assertEquals("Incorrect value retrieved","value1",value);
+    }
+
     public void testMultiTenentConfiguration() throws Exception
     {
         factory.setFile(MULTI_TENENT_FILE);

Added: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml?rev=768678&view=auto
==============================================================================
--- 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
 (added)
+++ 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
 Sun Apr 26 07:46:32 2009
@@ -0,0 +1,10 @@
+<?xml version="1.0"?>
+<catalog xmlns="urn:oasis:names:tc:entity:xmlns:xml:catalog">
+
+  <public publicId="-//Apache//DTD Resolver Test V1.0//EN"
+          uri="resolver.dtd"/>
+  <rewriteSystem systemIdStartString="http://java.sun.com/dtd/";
+                 rewritePrefix="./"/>
+  <rewriteSystem systemIdStartString="http://commons.apache.org/";
+                 rewritePrefix="file://${sys:user.dir}/target/test-classes/"/>
+</catalog>
\ No newline at end of file

Propchange: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/catalog2.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml?rev=768678&view=auto
==============================================================================
--- 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
 (added)
+++ 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
 Sun Apr 26 07:46:32 2009
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+<!-- Test configuration definition file that demonstrates complex 
initialization -->
+<configuration>
+  <header>
+    <result delimiterParsingDisabled="true">
+      <nodeCombiner 
config-class="org.apache.commons.configuration2.tree.OverrideCombiner"/>
+      <expressionEngine 
config-class="org.apache.commons.configuration2.tree.xpath.XPathExpressionEngine"/>
+    </result>
+    <entity-resolver 
catalogFiles="file://${sys:user.dir}/target/test-classes/catalog2.xml"/>
+  </header>
+  <system/>
+  <properties fileName="test.properties.xml" throwExceptionOnMissing="true"
+    config-name="properties">
+  </properties>
+  <xml fileName="file://${sys:user.dir}/target/test-classes/sample.xml" 
config-name="xml" schemaValidation="true"/>
+</configuration>
\ No newline at end of file

Propchange: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: 
commons/proper/configuration/branches/configuration2_experimental/src/test/resources/testValidation2.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml


Reply via email to