[jboss-cvs] JBossAS SVN: r96318 - in projects/vfs/branches/Branch_2_2/src: main/java/org/jboss/virtual/plugins/context and 5 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Nov 12 18:44:50 EST 2009


Author: alesj
Date: 2009-11-12 18:44:44 -0500 (Thu, 12 Nov 2009)
New Revision: 96318

Added:
   projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/
   projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild1
   projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild2
   projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild3
Modified:
   projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/VFSUtils.java
   projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java
   projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/support/MockVirtualFileVisitor.java
   projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java
   projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVirtualFileHandlerTest.java
   projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/JARVirtualFileHandlerUnitTestCase.java
   projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSAllTestSuite.java
   projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSOutputterTestCase.java
   projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/jar/children.jar
Log:
[JBVFS-127]; fix visitor pattern.

Modified: projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/VFSUtils.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/VFSUtils.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/VFSUtils.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -25,6 +25,8 @@
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.UnsupportedEncodingException;
+import java.io.Writer;
+import java.io.StringWriter;
 import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URISyntaxException;
@@ -36,6 +38,7 @@
 import java.util.Map;
 import java.util.Properties;
 import java.util.StringTokenizer;
+import java.util.HashMap;
 import java.util.jar.Attributes;
 import java.util.jar.JarFile;
 import java.util.jar.Manifest;
@@ -1165,53 +1168,92 @@
     */
    public static String outputContents(VirtualFile file)
    {
+      StringWriter writer = new StringWriter();
+      outputContents(file, writer);
+      return writer.toString();
+   }
+
+   /**
+    * Output contents to writer.
+    *
+    * @param file the file
+    * @param writer the writer
+    */
+   public static void outputContents(VirtualFile file, Writer writer)
+   {
+      if (writer == null)
+         throw new IllegalArgumentException("Null writer.");
+
       try
       {
-         VirtualFileOutputter outputter = new VirtualFileOutputter(file.toURI().toString());
-         outputter.outputContents(0, file);
-         return outputter.getOutput();
+         //writer.write("Contents of " + file.toURI() + "\n");
+         VirtualFileOutputter.visit(file, writer);
       }
-      catch(Exception e)
+      catch (Exception e)
       {
          throw new RuntimeException("ERROR displaying the contents of " + file.getName(), e);
       }
    }
-   
-   
-   private static class VirtualFileOutputter
+
+   /**
+    * Output visitor.
+    */
+   private static class VirtualFileOutputter implements VirtualFileVisitor
    {
-      StringBuilder sb;
+      private Writer writer;
+      private Map<VirtualFile, Integer> levels;
 
-      private VirtualFileOutputter(String uri)
+      private VirtualFileOutputter(Writer writer, Map<VirtualFile, Integer> levels)
       {
-         sb = new StringBuilder("Contents of " + uri + "\n");
+         this.writer = writer;
+         // prepare levels
+         this.levels = levels;
       }
-      
-      private String getOutput()
+
+      static void visit(VirtualFile file, Writer writer) throws IOException
       {
-         return sb.toString();
+         Map<VirtualFile, Integer> levels = new HashMap<VirtualFile, Integer>();
+         levels.put(file.getParent(), 0);
+         VirtualFileOutputter visitor = new VirtualFileOutputter(writer, levels);
+         file.visit(visitor);
       }
-      
-      private void outputContents(int level, VirtualFile file) throws Exception
+
+      public VisitorAttributes getAttributes()
       {
-         String suffix = file.isLeaf() ? "" : "/";
-         writeToBuffer(level, file.getName() + suffix);
-         if (!file.isLeaf())
+         VisitorAttributes attributes = new VisitorAttributes();
+         attributes.setIncludeRoot(true);
+         attributes.setRecurseFilter(VisitorAttributes.RECURSE_ALL);
+         return attributes;
+      }
+
+      public void visit(VirtualFile file)
+      {
+         try
          {
-            for (VirtualFile child : file.getChildren())
+            VirtualFile parent = file.getParent();
+            int level = levels.get(parent);
+            String suffix = "";
+            if (file.isLeaf() == false)
             {
-               outputContents(level + 1, child);
+               suffix = "/";
+               levels.put(file, level + 1);
             }
+            String string = file.getName() + suffix;
+            writeToBuffer(level, string);
          }
+         catch (IOException e)
+         {
+            throw new RuntimeException("Cannot handle file: " + file, e);
+         }
       }
       
-      private void writeToBuffer(int level, String s)
+      private void writeToBuffer(int level, String string) throws IOException
       {
          for (int i = 0 ; i < level ; i++)
-            sb.append("  ");
+            writer.append("  ");
          
-         sb.append(s);
-         sb.append("\n");
+         writer.append(string);
+         writer.append("\n");
       }
    }
 }

Modified: projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/main/java/org/jboss/virtual/plugins/context/AbstractVFSContext.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -371,10 +371,7 @@
          {
             try
             {
-               if (handler instanceof DelegatingHandler)
-                  child.getVFSContext().visit(child, visitor);
-               else
-                  visit(child, visitor, false, leavesOnly, ignoreErrors, includeHidden, recurseFilter);
+               visit(child, visitor, false, leavesOnly, ignoreErrors, includeHidden, recurseFilter);
             }
             catch (StackOverflowError e)
             {

Modified: projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/support/MockVirtualFileVisitor.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/support/MockVirtualFileVisitor.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/support/MockVirtualFileVisitor.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -66,7 +66,15 @@
    {
       return visited;
    }
-   
+
+   /**
+    * Clear visited.
+    */
+   public void clear()
+   {
+      visited.clear();
+   }
+
    public void visit(VirtualFile file)
    {
       visited.add(file);

Modified: projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -24,6 +24,8 @@
 import java.io.IOException;
 import java.net.URI;
 import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Set;
@@ -32,6 +34,7 @@
 import org.jboss.virtual.VFS;
 import org.jboss.virtual.VFSUtils;
 import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.VisitorAttributes;
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VirtualFileHandler;
 
@@ -176,6 +179,7 @@
       expected.add("child1");
       expected.add("child2");
       expected.add("child3");
+      expected.add("folder");
 
       Set<String> actual = new HashSet<String>();
       for (VirtualFileHandler child : children)
@@ -381,23 +385,52 @@
 
    public void testVisit() throws Exception
    {
-      VFSContext context = getVFSContext("children");
-      VirtualFileHandler root = context.getRoot();
       MockVirtualFileHandlerVisitor visitor = new MockVirtualFileHandlerVisitor();
-      context.visit(root, visitor);
-      
+
       Set<String> expected = new HashSet<String>();
       expected.add("child1");
       expected.add("child2");
       expected.add("child3");
+      expected.add("folder");
 
-      Set<String> actual = new HashSet<String>();
+      assertVisited(visitor, expected);
+   }
+
+   public void testVisitWithRoot() throws Exception
+   {
+      VisitorAttributes attributes = new VisitorAttributes();
+      attributes.setIncludeRoot(true);
+      attributes.setRecurseFilter(VisitorAttributes.RECURSE_ALL);
+      MockVirtualFileHandlerVisitor visitor = new MockVirtualFileHandlerVisitor(attributes);
+
+      Set<String> expected = new HashSet<String>();
+      expected.add("children" + getSuffix());
+      expected.add("child1");
+      expected.add("child2");
+      expected.add("child3");
+      expected.add("folder");
+      expected.add("subchild1");
+      expected.add("subchild2");
+      expected.add("subchild3");
+
+      assertVisited(visitor, expected);
+   }
+
+   protected void assertVisited(MockVirtualFileHandlerVisitor visitor, Set<String> expected) throws Exception
+   {
+      VFSContext context = getVFSContext("children");
+      VirtualFileHandler root = context.getRoot();
+      context.visit(root, visitor);
+
+      Collection<String> actual = new ArrayList<String>();
       for (VirtualFileHandler child : visitor.getVisited())
       {
          if (child.getName().startsWith("META-INF") == false && child.getName().equals(".svn") == false)
             actual.add(child.getName());
       }
-      
+
+      assertEquals(expected + "!=" + actual, expected.size(), actual.size());
+      actual = new HashSet<String>(actual);            
       assertEquals(expected, actual);
    }
 

Modified: projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVirtualFileHandlerTest.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVirtualFileHandlerTest.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/AbstractVirtualFileHandlerTest.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -23,13 +23,19 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Set;
 
+import org.jboss.test.virtual.support.MockVirtualFileVisitor;
 import org.jboss.virtual.VirtualFile;
+import org.jboss.virtual.VisitorAttributes;
+import org.jboss.virtual.plugins.context.file.FileSystemContext;
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VirtualFileHandler;
 
@@ -48,9 +54,16 @@
    
    protected abstract VFSContext getVFSContext(String name) throws Exception;
 
+   protected String getSuffix()
+   {
+      return "";
+   }
+
+   protected abstract URL getRootResource(String name) throws Exception;
+
    protected String getRootName(String name) throws Exception
    {
-      return name;
+      return name + getSuffix();
    }
    
    protected abstract long getRealLastModified(String name, String path) throws Exception;
@@ -124,7 +137,7 @@
     * Test that finding a child and listing its parent result in consistent
     * child handlers.
     * 
-    * @throws Exception
+    * @throws Exception for any error
     */
    public void testSubSubChildPathName() throws Exception
    {
@@ -397,6 +410,7 @@
       expected.add("child1");
       expected.add("child2");
       expected.add("child3");
+      expected.add("folder");
 
       Set<String> actual = new HashSet<String>();
       for (VirtualFileHandler child : children)
@@ -642,4 +656,66 @@
       else
          assertEquals(parent.getVirtualFile(), file.getParent());
    }
+
+   public void testVisit() throws Exception
+   {
+      MockVirtualFileVisitor visitor = new MockVirtualFileVisitor();
+
+      Set<String> expected = new HashSet<String>();
+      expected.add("child1");
+      expected.add("child2");
+      expected.add("child3");
+      expected.add("folder");
+
+      assertVisited(visitor, expected);
+   }
+
+   public void testVisitWithRoot() throws Exception
+   {
+      VisitorAttributes attributes = new VisitorAttributes();
+      attributes.setIncludeRoot(true);
+      attributes.setRecurseFilter(VisitorAttributes.RECURSE_ALL);
+      MockVirtualFileVisitor visitor = new MockVirtualFileVisitor(attributes);
+
+      Set<String> expected = new HashSet<String>();
+      expected.add("children" + getSuffix());
+      expected.add("child1");
+      expected.add("child2");
+      expected.add("child3");
+      expected.add("folder");
+      expected.add("subchild1");
+      expected.add("subchild2");
+      expected.add("subchild3");
+
+      assertVisited(visitor, expected);
+   }
+
+   protected void assertVisited(MockVirtualFileVisitor visitor, Set<String> expected) throws Exception
+   {
+      VFSContext context = getVFSContext("children");
+      assertVisited(visitor, expected, context);
+
+      visitor.clear();
+
+      URL url = getRootResource("children");
+      FileSystemContext fsc = new FileSystemContext(url);
+      assertVisited(visitor, expected, fsc);
+   }
+
+   protected void assertVisited(MockVirtualFileVisitor visitor, Set<String> expected, VFSContext context) throws IOException
+   {
+      VirtualFileHandler root = context.getRoot();
+      root.getVirtualFile().visit(visitor);
+
+      Collection<String> actual = new ArrayList<String>();
+      for (VirtualFile child : visitor.getVisited())
+      {
+         if (child.getName().startsWith("META-INF") == false && child.getName().equals(".svn") == false)
+            actual.add(child.getName());
+      }
+
+      assertEquals(expected + "!=" + actual, expected.size(), actual.size());
+      actual = new HashSet<String>(actual);
+      assertEquals(expected, actual);
+   }
 }

Modified: projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/JARVirtualFileHandlerUnitTestCase.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/JARVirtualFileHandlerUnitTestCase.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/JARVirtualFileHandlerUnitTestCase.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -51,7 +51,13 @@
    {
       return new TestSuite(JARVirtualFileHandlerUnitTestCase.class);
    }
-   
+
+   @Override
+   protected String getSuffix()
+   {
+      return ".jar";
+   }
+
    protected URL getRootResource(String name) throws Exception
    {
       if (name.endsWith(".jar"))
@@ -82,11 +88,6 @@
       return new JarContext(url);
    }
 
-   protected String getRootName(String name) throws Exception
-   {
-      return name + ".jar";
-   }
-
    protected long getRealLastModified(String name, String path) throws Exception
    {
       if (path != null)

Modified: projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSAllTestSuite.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSAllTestSuite.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSAllTestSuite.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -88,6 +88,7 @@
       suite.addTest(VisitorUnitTestCase.suite());
       // utils
       suite.addTest(VFSUtilTestCase.suite());
+      suite.addTest(VFSOutputterTestCase.suite());
       // custom
       suite.addTest(CustomTestCase.suite());
       suite.addTest(VFSResourceTestCase.suite());

Modified: projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSOutputterTestCase.java
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSOutputterTestCase.java	2009-11-12 23:42:55 UTC (rev 96317)
+++ projects/vfs/branches/Branch_2_2/src/test/java/org/jboss/test/virtual/test/VFSOutputterTestCase.java	2009-11-12 23:44:44 UTC (rev 96318)
@@ -30,7 +30,8 @@
 import org.jboss.virtual.VirtualFile;
 
 /**
- * 
+ * Test vfs utils output.
+ *
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  * @version $Revision: 1.1 $
  */
@@ -46,7 +47,6 @@
       return suite(VFSOutputterTestCase.class);
    }
 
-
    public void testOutputJarContents() throws Exception
    {
       URL url = getResource("/vfs/test/jar1.jar");

Added: projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild1
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild1	                        (rev 0)
+++ projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild1	2009-11-12 23:44:44 UTC (rev 96318)
@@ -0,0 +1 @@
+Empty.

Added: projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild2
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild2	                        (rev 0)
+++ projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild2	2009-11-12 23:44:44 UTC (rev 96318)
@@ -0,0 +1 @@
+Empty.

Added: projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild3
===================================================================
--- projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild3	                        (rev 0)
+++ projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/file/children/folder/subchild3	2009-11-12 23:44:44 UTC (rev 96318)
@@ -0,0 +1 @@
+Empty.

Modified: projects/vfs/branches/Branch_2_2/src/test/resources/vfs/context/jar/children.jar
===================================================================
(Binary files differ)




More information about the jboss-cvs-commits mailing list