[jboss-cvs] JBossAS SVN: r97918 - in projects/vfs/branches/dml-zip-rework/src: main/java/org/jboss/vfs/spi and 1 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Wed Dec 16 18:02:33 EST 2009


Author: johnbailey
Date: 2009-12-16 18:02:32 -0500 (Wed, 16 Dec 2009)
New Revision: 97918

Modified:
   projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/VirtualFileAssembly.java
   projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/spi/AssemblyFileSystem.java
   projects/vfs/branches/dml-zip-rework/src/test/java/org/jboss/test/vfs/AssemblyFileSystemTest.java
Log:
Updated VirtualFileAssembly to correctly handle assembly directories responding to exists and isDirectory

Modified: projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/VirtualFileAssembly.java
===================================================================
--- projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/VirtualFileAssembly.java	2009-12-16 22:46:15 UTC (rev 97917)
+++ projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/VirtualFileAssembly.java	2009-12-16 23:02:32 UTC (rev 97918)
@@ -26,11 +26,13 @@
 import java.io.File;
 import java.io.IOException;
 import java.security.SecureRandom;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
 import java.util.Queue;
 import java.util.Random;
+import java.util.Set;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.Executors;
@@ -104,6 +106,26 @@
       Path path = new Path(VFSUtils.getRelativePath(mountPoint, target));
       return rootNode.getFile(path, mountPoint);
    }
+   
+   /**
+    * Returns a list of all the names of the children in the assembly.  
+    * @return
+    */
+   public Set<String> getChildNames(VirtualFile mountPoint, VirtualFile target) {
+      if(mountPoint.equals(target)) {
+         return rootNode.children.keySet();
+      }
+      AssemblyNode node = rootNode.find(new Path(VFSUtils.getRelativePath(mountPoint, target)));
+      if(node != null) {
+         return node.children.keySet();
+      }
+      return Collections.emptySet();
+   }
+   
+   public boolean contains(VirtualFile mountPoint, VirtualFile target) {
+      Path path = new Path(VFSUtils.getRelativePath(mountPoint, target));
+      return rootNode.find(path) != null;
+   }
 
    /**
     * Close the assembly and nested resources.

Modified: projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/spi/AssemblyFileSystem.java
===================================================================
--- projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/spi/AssemblyFileSystem.java	2009-12-16 22:46:15 UTC (rev 97917)
+++ projects/vfs/branches/dml-zip-rework/src/main/java/org/jboss/vfs/spi/AssemblyFileSystem.java	2009-12-16 23:02:32 UTC (rev 97918)
@@ -26,10 +26,12 @@
 import java.io.InputStream;
 import java.io.FileNotFoundException;
 import java.security.CodeSigner;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 
+import org.jboss.vfs.VFSUtils;
 import org.jboss.vfs.VirtualFile;
 import org.jboss.vfs.VirtualFileAssembly;
 import org.jboss.logging.Logger;
@@ -63,8 +65,15 @@
 
     /** {@inheritDoc} */
     public boolean exists(VirtualFile mountPoint, VirtualFile target) {
+        if(mountPoint.equals(target)) 
+        {
+           return true;
+        }
         VirtualFile assemblyFile = assembly.getFile(mountPoint, target);
-        return assemblyFile != null && assemblyFile.exists();
+        if(assemblyFile != null) {
+           return assemblyFile.exists();
+        }
+        return assembly.contains(mountPoint, target);
     }
 
     /** {@inheritDoc} */
@@ -77,7 +86,7 @@
     public List<String> getDirectoryEntries(VirtualFile mountPoint, VirtualFile target) {
         VirtualFile assemblyFile = assembly.getFile(mountPoint, target);
         if (assemblyFile == null) {
-            return Collections.<String>emptyList();
+           return new ArrayList<String>(assembly.getChildNames(mountPoint, target));
         }
         List<String> directoryEntries = new LinkedList<String>();
         for (VirtualFile child : assemblyFile.getChildren()) {
@@ -100,8 +109,12 @@
 
     /** {@inheritDoc} */
     public boolean isDirectory(VirtualFile mountPoint, VirtualFile target) {
+        if(mountPoint.equals(target))
+           return true;
         VirtualFile assemblyFile = assembly.getFile(mountPoint, target);
-        return assemblyFile != null && assemblyFile.isDirectory();
+        if(assemblyFile != null)
+           return assemblyFile.isDirectory();
+        return assembly.contains(mountPoint, target);
     }
 
     /** {@inheritDoc} */

Modified: projects/vfs/branches/dml-zip-rework/src/test/java/org/jboss/test/vfs/AssemblyFileSystemTest.java
===================================================================
--- projects/vfs/branches/dml-zip-rework/src/test/java/org/jboss/test/vfs/AssemblyFileSystemTest.java	2009-12-16 22:46:15 UTC (rev 97917)
+++ projects/vfs/branches/dml-zip-rework/src/test/java/org/jboss/test/vfs/AssemblyFileSystemTest.java	2009-12-16 23:02:32 UTC (rev 97918)
@@ -1,5 +1,7 @@
 package org.jboss.test.vfs;
 
+import static org.junit.Assert.*;
+
 import java.io.Closeable;
 import java.io.File;
 import java.net.URL;
@@ -113,6 +115,57 @@
          VFSUtils.safeClose(assemblyHandle);
       }
    }
+   
+   @Test
+   public void testFileExistence() throws Exception {
+      VirtualFileAssembly assembly = new VirtualFileAssembly();
+      VirtualFile assemblyLocation = VFS.getChild("/assembly");
+      Closeable assemblyHandle = VFS.mountAssembly(assembly, assemblyLocation);
+      try {
+         assertTrue(assemblyLocation.exists());
+         
+         assertFalse(assemblyLocation.getChild("lib").exists());
+         
+         URL jarURL = getResource("/vfs/test/jar1.jar");
+         VirtualFile jarFile = VFS.getChild(jarURL);
+         assembly.add("lib/jar.jar", jarFile);
+         
+         assertTrue(assemblyLocation.getChild("lib").exists());
+         
+         assertTrue(assemblyLocation.getChild("lib/jar.jar").exists());
+         
+         VirtualFile bogusFile = VFS.getChild("/bogus.jar");
+         
+         assembly.add(bogusFile);
+         
+         assertFalse(assemblyLocation.getChild("bogus.jar").exists());
+      }
+      finally {
+         VFSUtils.safeClose(assemblyHandle);
+      }
+   }
+   
+   @Test
+   public void testIsDirectory() throws Exception
+   {
+      VirtualFileAssembly assembly = new VirtualFileAssembly();
+      VirtualFile assemblyLocation = VFS.getChild("/assembly");
+      Closeable assemblyHandle = VFS.mountAssembly(assembly, assemblyLocation);
+      try {
+         assertTrue(assemblyLocation.isDirectory());
+         
+         URL jarURL = getResource("/vfs/test/jar1.jar");
+         VirtualFile jarFile = VFS.getChild(jarURL);
+         assembly.add("lib/jar.jar", jarFile);
+         
+         assertTrue(assemblyLocation.getChild("lib").isDirectory());
+         
+         assertFalse(assemblyLocation.getChild("lib/jar.jar").isDirectory());
+      }
+      finally {
+         VFSUtils.safeClose(assemblyHandle);
+      }      
+   }
 
    @Test
    public void assertMapped(VirtualFile expected, VirtualFile actual) throws Exception {




More information about the jboss-cvs-commits mailing list