[jboss-cvs] JBossAS SVN: r74567 - in projects/vfs/trunk/src: main/java/org/jboss/virtual/plugins/context and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Sat Jun 14 14:08:31 EDT 2008


Author: alesj
Date: 2008-06-14 14:08:31 -0400 (Sat, 14 Jun 2008)
New Revision: 74567

Modified:
   projects/vfs/trunk/src/main/java/org/jboss/virtual/VirtualFile.java
   projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java
   projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARSerializationUnitTestCase.java
   projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARVFSContextUnitTestCase.java
Log:
Additional tests.
Fix transient streams.

Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/VirtualFile.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/VirtualFile.java	2008-06-14 16:36:59 UTC (rev 74566)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/VirtualFile.java	2008-06-14 18:08:31 UTC (rev 74567)
@@ -33,11 +33,11 @@
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicBoolean;
 
-import org.jboss.util.collection.WeakSet;
 import org.jboss.virtual.plugins.vfs.helpers.FilterVirtualFileVisitor;
 import org.jboss.virtual.plugins.vfs.helpers.MatchAllVirtualFileFilter;
 import org.jboss.virtual.spi.VFSContext;
 import org.jboss.virtual.spi.VirtualFileHandler;
+import org.jboss.util.collection.WeakSet;
 
 /**
  * A virtual file as seen by the user
@@ -54,10 +54,10 @@
    private final VirtualFileHandler handler;
 
    /** Whether we are closed */
-   private AtomicBoolean closed = new AtomicBoolean(false);
+   private final AtomicBoolean closed = new AtomicBoolean(false);
 
    /** The open streams */
-   private transient final Set<InputStream> streams = Collections.synchronizedSet(new WeakSet());
+   private transient Set<InputStream> streams;
 
    /**
     * Create a new VirtualFile.
@@ -214,15 +214,36 @@
    public InputStream openStream() throws IOException
    {
       InputStream result = getHandler().openStream();
+      checkStreams();
       streams.add(result);
       return result;
    }
 
    /**
+    * Check if streams set exist.
+    */
+   protected void checkStreams()
+   {
+      if (streams == null)
+      {
+         synchronized (closed)
+         {
+            // double null check, so that possible
+            // waiting threads don't override streams
+            if (streams == null)
+               streams = Collections.synchronizedSet(new WeakSet());
+         }
+      }
+   }
+
+   /**
     * Close the streams
     */
    public void closeStreams()
    {
+      if (streams == null)
+         return;
+
       // Close the streams
       for (InputStream stream : streams)
       {

Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java	2008-06-14 16:36:59 UTC (rev 74566)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java	2008-06-14 18:08:31 UTC (rev 74567)
@@ -422,9 +422,10 @@
          if (current == null || current.isLeaf())
             return null;
 
-         if (PathTokenizer.isCurrentToken(tokens.get(i)) == false)
+         String token = tokens.get(i);
+         if (PathTokenizer.isCurrentToken(token) == false)
          {
-            if (PathTokenizer.isReverseToken(tokens.get(i)))
+            if (PathTokenizer.isReverseToken(token))
             {
                VirtualFileHandler parent = current.getParent();
                if (parent == null) // TODO - still IOE or null?
@@ -435,7 +436,7 @@
             else if (current instanceof StructuredVirtualFileHandler)
             {
                StructuredVirtualFileHandler structured = (StructuredVirtualFileHandler) current;
-               current = structured.createChildHandler(tokens.get(i));
+               current = structured.createChildHandler(token);
             }
             else
             {

Modified: projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARSerializationUnitTestCase.java
===================================================================
--- projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARSerializationUnitTestCase.java	2008-06-14 16:36:59 UTC (rev 74566)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARSerializationUnitTestCase.java	2008-06-14 18:08:31 UTC (rev 74567)
@@ -202,6 +202,9 @@
       testText(textThree);
       textThree = two.findChild("level3.zip/test3.txt");
       testText(textThree);
+
+      textThree = serializeDeserialize(textThree, VirtualFile.class);
+      testText(textThree);
    }
 
    protected void testText(VirtualFile file) throws Exception

Modified: projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARVFSContextUnitTestCase.java
===================================================================
--- projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARVFSContextUnitTestCase.java	2008-06-14 16:36:59 UTC (rev 74566)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARVFSContextUnitTestCase.java	2008-06-14 18:08:31 UTC (rev 74567)
@@ -198,6 +198,10 @@
       // test folder
       testInnerEntryOverURL(urlString, "/complex.jar/subfolder", true);
       testInnerEntryOverURL(urlString, "/complex.jar/subfolder/subsubfolder", true);
+      // 3 level zips
+      url = getResource("/vfs/test/level1.zip");
+      urlString = url.toExternalForm();
+      testInnerEntryOverURL(urlString, "/level2.zip/level3.zip/test3.txt", false);
    }
 
    protected void testInnerEntryOverURL(String urlString, String entry, boolean result) throws IOException




More information about the jboss-cvs-commits mailing list