[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