You are viewing a plain text version of this content. The canonical link for it is here.
Posted to svn@forrest.apache.org by rg...@apache.org on 2005/11/21 03:37:26 UTC

svn commit: r345813 - /forrest/trunk/main/java/org/apache/forrest/conf/ForrestConfModule.java

Author: rgardler
Date: Sun Nov 20 18:37:20 2005
New Revision: 345813

URL: http://svn.apache.org/viewcvs?rev=345813&view=rev
Log:
add a new type of property file that does not need properties to be predefined in forrest.xconf, see FOR-588 for more information

Modified:
    forrest/trunk/main/java/org/apache/forrest/conf/ForrestConfModule.java

Modified: forrest/trunk/main/java/org/apache/forrest/conf/ForrestConfModule.java
URL: http://svn.apache.org/viewcvs/forrest/trunk/main/java/org/apache/forrest/conf/ForrestConfModule.java?rev=345813&r1=345812&r2=345813&view=diff
==============================================================================
--- forrest/trunk/main/java/org/apache/forrest/conf/ForrestConfModule.java (original)
+++ forrest/trunk/main/java/org/apache/forrest/conf/ForrestConfModule.java Sun Nov 20 18:37:20 2005
@@ -16,12 +16,18 @@
  */
 package org.apache.forrest.conf;
 
+import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.MalformedURLException;
 import java.util.Enumeration;
 import java.util.Map;
 
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.FactoryConfigurationError;
+import javax.xml.parsers.ParserConfigurationException;
+
 import org.apache.avalon.framework.activity.Initializable;
 import org.apache.avalon.framework.configuration.Configuration;
 import org.apache.avalon.framework.configuration.ConfigurationException;
@@ -31,10 +37,16 @@
 import org.apache.avalon.framework.thread.ThreadSafe;
 import org.apache.cocoon.components.modules.input.DefaultsModule;
 import org.apache.cocoon.components.modules.input.InputModule;
+import org.apache.cocoon.xml.XMLConsumer;
 import org.apache.commons.lang.SystemUtils;
 import org.apache.excalibur.source.Source;
 import org.apache.excalibur.source.SourceNotFoundException;
 import org.apache.excalibur.source.SourceResolver;
+import org.apache.xerces.parsers.DOMParser;
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
+import org.xml.sax.SAXException;
 
 /**
  * Input module for accessing the base properties used in Forrest. The main
@@ -62,7 +74,11 @@
           attributeValue = this.getAttributeValues(name, modeConf,
                           objectModel)[0].toString();
         } catch (NullPointerException npe) {
-          throw new ConfigurationException("Unable to get attribute value for " + name);
+          original = "(not defined in forrest.xconf)";
+          attributeValue = filteringProperties.getProperty(name);
+          if (attributeValue == null) {
+            throw new ConfigurationException("Unable to get attribute value for " + name);
+          }
         }
 
         if (debugging()) {
@@ -111,9 +127,23 @@
         filteringProperties.setProperty("context.home", contextHome);
 
         //NOTE: the first values set get precedence, as in AntProperties
+        
+        String forrestPropertiesStringURI;
+        
+        // get the values from properties.xml
+        try {
+          forrestPropertiesStringURI = projectHome
+                        + SystemUtils.FILE_SEPARATOR + "forrest.properties.xml";
+
+          filteringProperties = loadXMLPropertiesFromURI(filteringProperties,
+            forrestPropertiesStringURI);
+        } catch (FileNotFoundException e) {
+            if (debugging())
+                debug("Unable to find forrest.properties.xml, ignoring.");
+        }
 
         // get forrest.properties and load the values
-        String forrestPropertiesStringURI = projectHome
+        forrestPropertiesStringURI = projectHome
                         + SystemUtils.FILE_SEPARATOR + "forrest.properties";
 
         filteringProperties = loadAntPropertiesFromURI(filteringProperties,
@@ -149,6 +179,61 @@
     }
 
     /**
+     * @param propertiesStringURI
+     * @throws IOException 
+     * @throws MalformedURLException 
+     * @throws MalformedURLException
+     * @throws IOException
+     * @throws ParserConfigurationException 
+     * @throws SAXException 
+     * @throws SourceNotFoundException
+     */
+    private AntProperties loadXMLPropertiesFromURI(
+                    AntProperties precedingProperties,
+                    String propertiesStringURI) throws MalformedURLException, IOException, ParserConfigurationException, SAXException {
+
+    	Source source = null;
+        InputStream in = null;
+        try {
+            if (debugging())
+                debug("Searching for forrest.properties.xml in" + source.getURI());
+            
+            source = m_resolver.resolveURI(propertiesStringURI);
+
+            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+            DocumentBuilder builder = factory.newDocumentBuilder();
+            Document document = builder.parse(source.getURI());
+            
+            NodeList nl = document.getElementsByTagName("property");
+            if(nl != null && nl.getLength() > 0) {
+              for(int i = 0 ; i < nl.getLength();i++) {
+                Element el = (Element)nl.item(i);
+                filteringProperties.setProperty(el.getAttribute("name"), el.getAttribute("value"));
+              }
+            }
+
+            if (debugging())
+                debug("Loaded:" + propertiesStringURI
+                                + filteringProperties.toString());
+            
+        } finally {
+            if (source != null) {
+                m_resolver.release(source);
+            }
+            if (in != null) {
+                try {
+                    in.close();
+                } catch (IOException e) {}
+            }
+        }
+
+        System.out.println("Loaded:" + propertiesStringURI
+                + filteringProperties.getProperty("daisy.navigation.docID"));
+        
+        return filteringProperties;
+    }
+    
+    /**
      * @param antPropertiesStringURI
      * @throws MalformedURLException
      * @throws IOException
@@ -186,6 +271,10 @@
                 } catch (IOException e) {}
             }
         }
+        
+
+        System.out.println("Loaded:" + antPropertiesStringURI
+                + filteringProperties.getProperty("daisy.navigation.docID"));
 
         return filteringProperties;
     }