[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