You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by eb...@apache.org on 2009/06/21 15:03:28 UTC

svn commit: r787006 - in /commons/proper/configuration/branches/configuration2_experimental/src: main/java/org/apache/commons/configuration2/plist/ test/java/org/apache/commons/configuration2/plist/ test/resources/

Author: ebourg
Date: Sun Jun 21 13:03:27 2009
New Revision: 787006

URL: http://svn.apache.org/viewvc?rev=787006&view=rev
Log:
Fixed empty dictionaries <dict/> (CONFIGURATION-362)

Modified:
    commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/plist/XMLPropertyListConfiguration.java
    commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/plist/TestXMLPropertyListConfiguration.java
    commons/proper/configuration/branches/configuration2_experimental/src/test/resources/test.plist.xml

Modified: commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/plist/XMLPropertyListConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/plist/XMLPropertyListConfiguration.java?rev=787006&r1=787005&r2=787006&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/plist/XMLPropertyListConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/main/java/org/apache/commons/configuration2/plist/XMLPropertyListConfiguration.java Sun Jun 21 13:03:27 2009
@@ -278,35 +278,51 @@
     }
 
     /**
+     * Returns the sequence of space characters to indent at the specified level.
+     */
+    private String getPadding(int level)
+    {
+        return StringUtils.repeat(" ", level * INDENT_SIZE);
+    }
+
+    /**
      * Append a node to the writer, indented according to a specific level.
      */
     private void printNode(PrintWriter out, int indentLevel, ConfigurationNode node)
     {
-        String padding = StringUtils.repeat(" ", indentLevel * INDENT_SIZE);
+        String padding = getPadding(indentLevel);
 
         if (node.getName() != null)
         {
             out.println(padding + "<key>" + StringEscapeUtils.escapeXml(node.getName()) + "</key>");
         }
 
-        List<ConfigurationNode> children = node.getChildren();
-        if (!children.isEmpty())
+        if (node.getValue() == null)
         {
-            out.println(padding + "<dict>");
-
-            Iterator<ConfigurationNode> it = children.iterator();
-            while (it.hasNext())
+            List<ConfigurationNode> children = node.getChildren();
+            
+            if (children.isEmpty())
+            {
+                out.println(padding + "<dict/>");
+            }
+            else
             {
-                ConfigurationNode child = it.next();
-                printNode(out, indentLevel + 1, child);
+                out.println(padding + "<dict>");
 
-                if (it.hasNext())
+                Iterator<ConfigurationNode> it = children.iterator();
+                while (it.hasNext())
                 {
-                    out.println();
+                    ConfigurationNode child = it.next();
+                    printNode(out, indentLevel + 1, child);
+
+                    if (it.hasNext())
+                    {
+                        out.println();
+                    }
                 }
-            }
 
-            out.println(padding + "</dict>");
+                out.println(padding + "</dict>");
+            }
         }
         else
         {
@@ -320,7 +336,7 @@
      */
     private void printValue(PrintWriter out, int indentLevel, Object value)
     {
-        String padding = StringUtils.repeat(" ", indentLevel * INDENT_SIZE);
+        String padding = getPadding(indentLevel);
 
         if (value instanceof Date)
         {
@@ -397,13 +413,17 @@
         }
         else if (value instanceof byte[])
         {
-            String base64 = new String(Base64.encodeBase64((byte[]) value));
+            String base64 = Base64.encodeBase64((byte[]) value);
             out.println(padding + "<data>" + StringEscapeUtils.escapeXml(base64) + "</data>");
         }
-        else
+        else if (value != null)
         {
             out.println(padding + "<string>" + StringEscapeUtils.escapeXml(String.valueOf(value)) + "</string>");
         }
+        else
+        {
+            out.println(padding + "<string/>");
+        }
     }
 
     /**
@@ -502,6 +522,7 @@
             }
             else
             {
+                PListNode node = (PListNode) peek();
                 if ("string".equals(qName))
                 {
                     ((PListNode) peek()).addValue(buffer.toString());

Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/plist/TestXMLPropertyListConfiguration.java
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/plist/TestXMLPropertyListConfiguration.java?rev=787006&r1=787005&r2=787006&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/plist/TestXMLPropertyListConfiguration.java (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/java/org/apache/commons/configuration2/plist/TestXMLPropertyListConfiguration.java Sun Jun 21 13:03:27 2009
@@ -271,8 +271,30 @@
             {
                 assertEquals("Value of the '" + key + "' property", config.getProperty(key), checkConfig.getProperty(key));
             }
+        }
+    }
+    
+    public void testSaveEmptyDictionary() throws Exception
+    {
+        File savedFile = new File("target/testsave.plist.xml");
 
+        // remove the file previously saved if necessary
+        if (savedFile.exists())
+        {
+            assertTrue(savedFile.delete());
         }
+        
+        // save the configuration
+        String filename = savedFile.getAbsolutePath();
+        config.save(filename);
+
+        assertTrue("The saved file doesn't exist", savedFile.exists());
+
+        // read the configuration and compare the properties
+        Configuration checkConfig = new XMLPropertyListConfiguration(new File(filename));
+        
+        assertEquals(null, config.getProperty("empty-dictionary"));
+        assertEquals(null, checkConfig.getProperty("empty-dictionary"));
     }
 
     /**

Modified: commons/proper/configuration/branches/configuration2_experimental/src/test/resources/test.plist.xml
URL: http://svn.apache.org/viewvc/commons/proper/configuration/branches/configuration2_experimental/src/test/resources/test.plist.xml?rev=787006&r1=787005&r2=787006&view=diff
==============================================================================
--- commons/proper/configuration/branches/configuration2_experimental/src/test/resources/test.plist.xml (original)
+++ commons/proper/configuration/branches/configuration2_experimental/src/test/resources/test.plist.xml Sun Jun 21 13:03:27 2009
@@ -80,5 +80,8 @@
             </dict>
         </dict>
 
+        <key>empty-dictionary</key>
+        <dict/>
+
     </dict>
 </plist>