You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@velocity.apache.org by nb...@apache.org on 2008/04/26 00:07:39 UTC

svn commit: r651712 - in /velocity/tools/trunk/src: main/java/org/apache/velocity/tools/config/ main/java/org/apache/velocity/tools/view/ test/java/org/apache/velocity/tools/test/whitebox/

Author: nbubna
Date: Fri Apr 25 15:07:38 2008
New Revision: 651712

URL: http://svn.apache.org/viewvc?rev=651712&view=rev
Log:
make combined configurations easier to debug by tracking source info on them

Modified:
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/EasyFactoryConfiguration.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FactoryConfiguration.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FileFactoryConfiguration.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/PropertiesFactoryConfiguration.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/XmlFactoryConfiguration.java
    velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java
    velocity/tools/trunk/src/test/java/org/apache/velocity/tools/test/whitebox/ConfigTests.java

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/ConfigurationUtils.java Fri Apr 25 15:07:38 2008
@@ -74,7 +74,8 @@
      */
     public static FactoryConfiguration getDefaultTools()
     {
-        FileFactoryConfiguration config = new XmlFactoryConfiguration();
+        FileFactoryConfiguration config =
+            new XmlFactoryConfiguration("ConfigurationUtils.getDefaultTools()");
         config.read(GENERIC_DEFAULTS_PATH);
 
         // view tools and struts tools may not be available
@@ -92,7 +93,8 @@
      */
     public static FactoryConfiguration getGenericTools()
     {
-        FileFactoryConfiguration config = new XmlFactoryConfiguration();
+        FileFactoryConfiguration config =
+            new XmlFactoryConfiguration("ConfigurationUtils.getGenericTools()");
         config.read(GENERIC_DEFAULTS_PATH);
 
         // defaults should *always* be clean!
@@ -108,7 +110,8 @@
      */
     public static FactoryConfiguration getVelocityView()
     {
-        FileFactoryConfiguration config = new XmlFactoryConfiguration();
+        FileFactoryConfiguration config =
+            new XmlFactoryConfiguration("ConfigurationUtils.getVelocityView()");
         config.read(GENERIC_DEFAULTS_PATH);
         config.read(VIEW_DEFAULTS_PATH);
 
@@ -126,7 +129,8 @@
      */
     public static FactoryConfiguration getVelocityStruts()
     {
-        FileFactoryConfiguration config = new XmlFactoryConfiguration();
+        FileFactoryConfiguration config =
+            new XmlFactoryConfiguration("ConfigurationUtils.getVelocityStruts()");
         config.read(GENERIC_DEFAULTS_PATH);
         config.read(VIEW_DEFAULTS_PATH);
         config.read(STRUTS_DEFAULTS_PATH);
@@ -174,7 +178,7 @@
         else
         {
             // start out blank
-            auto = new FactoryConfiguration();
+            auto = new FactoryConfiguration("ConfigurationUtils.getAutoLoaded(false)");
         }
 
         //TODO: look for any Tools classes in the root of the classpath
@@ -365,7 +369,8 @@
         else
         {
             // create a base config to combine the others into
-            FactoryConfiguration config = new FactoryConfiguration();
+            FactoryConfiguration config =
+                new FactoryConfiguration("ConfigurationUtils.findInClassPath("+path+","+caller+")");
             boolean readAConfig = false;
             for (URL resource : found)
             {
@@ -400,13 +405,14 @@
     {
         FileFactoryConfiguration config = null;
         String path = url.toString();
+        String source = "ConfigurationUtils.read("+url.toString()+")";
         if (path.endsWith(".xml"))
         {
-            config = new XmlFactoryConfiguration();
+            config = new XmlFactoryConfiguration(source);
         }
         else if (path.endsWith(".properties"))
         {
-            config = new PropertiesFactoryConfiguration();
+            config = new PropertiesFactoryConfiguration(source);
         }
         else if (path.endsWith(".class"))
         {

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/EasyFactoryConfiguration.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/EasyFactoryConfiguration.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/EasyFactoryConfiguration.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/EasyFactoryConfiguration.java Fri Apr 25 15:07:38 2008
@@ -19,6 +19,7 @@
  * under the License.
  */
 
+import java.util.List;
 import org.apache.velocity.tools.ToolboxFactory;
 
 /**
@@ -98,9 +99,28 @@
      */
     public EasyFactoryConfiguration(boolean includeDefaults)
     {
+        // just give the param name as source
+        this(includeDefaults, String.valueOf(includeDefaults));
+    }
+
+    /**
+     * @param includeDefaults Sets whether this instance should start with the
+     *        {@link ConfigurationUtils#getDefaultTools()} configuration or not.
+     * @param source a string identify where this instance was created, or
+     *        something else useful to identify this instance during debugging
+     */
+    public EasyFactoryConfiguration(boolean includeDefaults, String source)
+    {
+        super(EasyFactoryConfiguration.class, source);
+
         if (includeDefaults)
         {
             addDefaultTools();
+            // now put the root source last, since the defaults were really first
+            // and nothing could have been added prior to them
+            List<String> sources = getSources();
+            String first = sources.remove(0);
+            sources.add(first);
         }
     }
 

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FactoryConfiguration.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FactoryConfiguration.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FactoryConfiguration.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FactoryConfiguration.java Fri Apr 25 15:07:38 2008
@@ -19,7 +19,9 @@
  * under the License.
  */
 
+import java.util.ArrayList;
 import java.util.Collection;
+import java.util.List;
 import java.util.SortedSet;
 import java.util.TreeSet;
 import org.apache.velocity.tools.ToolboxFactory;
@@ -35,6 +37,44 @@
     extends CompoundConfiguration<ToolboxConfiguration>
 {
     private final SortedSet<Data> data = new TreeSet<Data>();
+    private final List<String> sources = new ArrayList<String>();
+
+    public FactoryConfiguration()
+    {
+        this("");
+    }
+    
+    /**
+     * Creates a new instance with the specified source name
+     * combined with this class's name as the initial source.
+     */
+    public FactoryConfiguration(String source)
+    {
+        this(FactoryConfiguration.class, source);
+    }
+
+    /**
+     * Allows subclasses to construct an instance that uses their classname.
+     */
+    protected FactoryConfiguration(Class clazz, String source)
+    {
+        addSource(clazz.getName()+"("+source+")");
+    }
+
+    /**
+     * Returns the list of sources for this configuration info in
+     * order starting from the source name given to this instance
+     * (if any) and going to the most recently added source.
+     */
+    public List<String> getSources()
+    {
+        return this.sources;
+    }
+
+    public void addSource(String source)
+    {
+        this.sources.add(source);
+    }
 
     public void addData(Data newDatum)
     {
@@ -130,6 +170,12 @@
         // add config's Data to our own
         setData(config.getData());
 
+        // add config's sources to our own
+        for (String source : config.getSources())
+        {
+            addSource(source);
+        }
+
         // pass to CompoundConfiguration's to add properties
         super.addConfiguration(config);
     }
@@ -148,8 +194,18 @@
     @Override
     public String toString()
     {
+        return toString(true);
+    }
+
+    public String toString(boolean includeSources)
+    {
         StringBuilder out = new StringBuilder();
-        out.append("\nFactoryConfiguration ");
+        out.append("\nFactoryConfiguration from ");
+        if (includeSources)
+        {
+            out.append(getSources().size());
+            out.append(" sources ");
+        }
         appendProperties(out);
         if (hasData())
         {
@@ -172,6 +228,18 @@
                 out.append(datum);
                 out.append("\n ");
             }
+        }
+        if (includeSources)
+        {
+            int count = 0;
+            for (String source : getSources())
+            {
+                out.append("\n Source ");
+                out.append(count++);
+                out.append(": ");
+                out.append(source);
+            }
+            out.append("\n");
         }
         return out.toString();
     }

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FileFactoryConfiguration.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FileFactoryConfiguration.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FileFactoryConfiguration.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/FileFactoryConfiguration.java Fri Apr 25 15:07:38 2008
@@ -37,6 +37,11 @@
  */
 public abstract class FileFactoryConfiguration extends FactoryConfiguration
 {
+    protected FileFactoryConfiguration(Class clazz, String source)
+    {
+        super(clazz, source);
+    }
+
     /**
      * <p>Reads an configuration from an {@link InputStream}.</p>
      * 
@@ -143,6 +148,8 @@
         try
         {
             read(url, url.openStream(), required, log);
+            // only add the sources which can be read
+            addSource("    .read("+url.toString()+")");
         }
         catch (IOException ioe)
         {

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/PropertiesFactoryConfiguration.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/PropertiesFactoryConfiguration.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/PropertiesFactoryConfiguration.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/PropertiesFactoryConfiguration.java Fri Apr 25 15:07:38 2008
@@ -54,6 +54,16 @@
  */
 public class PropertiesFactoryConfiguration extends FileFactoryConfiguration
 {
+    public PropertiesFactoryConfiguration()
+    {
+        this("");
+    }
+
+    public PropertiesFactoryConfiguration(String source)
+    {
+        super(PropertiesFactoryConfiguration.class, source);
+    }
+
     /**
      * <p>Reads an properties file from an {@link InputStream}
      * and uses it to configure this {@link FactoryConfiguration}.</p>

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/XmlFactoryConfiguration.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/XmlFactoryConfiguration.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/XmlFactoryConfiguration.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/config/XmlFactoryConfiguration.java Fri Apr 25 15:07:38 2008
@@ -38,11 +38,22 @@
 
     public XmlFactoryConfiguration()
     {
-        this(false);
+        this(false, "");
     }
 
     public XmlFactoryConfiguration(boolean supportOldConfig)
     {
+        this(supportOldConfig, String.valueOf(supportOldConfig));
+    }
+
+    public XmlFactoryConfiguration(String source)
+    {
+        this(false, source);
+    }
+
+    public XmlFactoryConfiguration(boolean supportOldConfig, String source)
+    {
+        super(XmlFactoryConfiguration.class, source);
         setRuleSet(new XmlFactoryConfigurationRuleSet());
         this.supportOldXml = supportOldConfig;
     }

Modified: velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java (original)
+++ velocity/tools/trunk/src/main/java/org/apache/velocity/tools/view/VelocityView.java Fri Apr 25 15:07:38 2008
@@ -477,7 +477,7 @@
      */
     protected void configure(final JeeConfig config, final ToolboxFactory factory)
     {
-        FactoryConfiguration factoryConfig = new FactoryConfiguration();
+        FactoryConfiguration factoryConfig = new FactoryConfiguration("VelocityView.configure(config,factory)");
 
         boolean hasOldToolbox = false;
         if (this.deprecationSupportMode)
@@ -722,13 +722,14 @@
 
         // then make sure it's a file type we recognize
         FileFactoryConfiguration config = null;
+        String source = "VelocityView.getConfiguration("+path+","+required+")";
         if (path.endsWith(".xml"))
         {
-            config = new XmlFactoryConfiguration(this.deprecationSupportMode);
+            config = new XmlFactoryConfiguration(this.deprecationSupportMode, source);
         }
         else if (path.endsWith(".properties"))
         {
-            config = new PropertiesFactoryConfiguration();
+            config = new PropertiesFactoryConfiguration(source);
         }
         else
         {

Modified: velocity/tools/trunk/src/test/java/org/apache/velocity/tools/test/whitebox/ConfigTests.java
URL: http://svn.apache.org/viewvc/velocity/tools/trunk/src/test/java/org/apache/velocity/tools/test/whitebox/ConfigTests.java?rev=651712&r1=651711&r2=651712&view=diff
==============================================================================
--- velocity/tools/trunk/src/test/java/org/apache/velocity/tools/test/whitebox/ConfigTests.java (original)
+++ velocity/tools/trunk/src/test/java/org/apache/velocity/tools/test/whitebox/ConfigTests.java Fri Apr 25 15:07:38 2008
@@ -406,6 +406,15 @@
         assertEquals(one.toString(), two.toString());
     }
 
+    protected void assertConfigEquals(FactoryConfiguration one, FactoryConfiguration two)
+    {
+        assertNotNull(one);
+        assertNotNull(two);
+
+        // for now, just compare the toString() output without source info
+        assertEquals(one.toString(false), two.toString(false));
+    }
+
     protected void assertValid(Data valid)
     {
         assertNotNull(valid);