[jboss-cvs] JBossAS SVN: r66706 - in projects/vfs/trunk/src: main/java/org/jboss/virtual/plugins/context and 4 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Sat Nov 3 13:02:25 EDT 2007
Author: alesj
Date: 2007-11-03 13:02:24 -0400 (Sat, 03 Nov 2007)
New Revision: 66706
Added:
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractContextFactory.java
Modified:
projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContextFactory.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarContextFactory.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/vfs/helpers/PathTokenizer.java
projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java
projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/FileVFSContextUnitTestCase.java
projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARCacheUnitTestCase.java
projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARVFSContextUnitTestCase.java
Log:
Initial '..' support.
Handling vfs* forms of the known handlers.
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -21,21 +21,27 @@
*/
package org.jboss.virtual;
-import org.jboss.logging.Logger;
-import org.jboss.util.StringPropertyReplacer;
-import org.jboss.virtual.spi.LinkInfo;
-
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.util.*;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.StringTokenizer;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
+import org.jboss.logging.Logger;
+import org.jboss.util.StringPropertyReplacer;
+import org.jboss.virtual.spi.LinkInfo;
+
/**
* VFS Utilities
*
@@ -358,7 +364,6 @@
String urispec = url.toExternalForm();
// Escape any spaces
urispec = urispec.replaceAll(" ", "%20");
- URI uri = new URI(urispec);
- return uri;
+ return new URI(urispec);
}
}
Added: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractContextFactory.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractContextFactory.java (rev 0)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractContextFactory.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -0,0 +1,75 @@
+/*
+* JBoss, Home of Professional Open Source
+* Copyright 2006, JBoss Inc., and individual contributors as indicated
+* by the @authors tag. See the copyright.txt in the distribution for a
+* full listing of individual contributors.
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/
+package org.jboss.virtual.plugins.context;
+
+import java.net.URL;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+
+import org.jboss.virtual.spi.VFSContextFactory;
+
+/**
+ * Abstract context factory.
+ *
+ * @author <a href="mailto:ales.justin at jboss.com">Ales Justin</a>
+ */
+public abstract class AbstractContextFactory implements VFSContextFactory
+{
+ private String[] protocols;
+
+ protected AbstractContextFactory(String... protocols)
+ {
+ this.protocols = protocols;
+ }
+
+ public String[] getProtocols()
+ {
+ return protocols;
+ }
+
+ protected static URL fromVFS(URL url) throws MalformedURLException
+ {
+ String externalForm = url.toExternalForm();
+ if (externalForm.startsWith("vfs"))
+ return new URL(externalForm.substring(3));
+
+ return url;
+ }
+
+ protected static URI fromVFS(URI uri) throws URISyntaxException
+ {
+ String scheme = uri.getScheme();
+ if (scheme.startsWith("vfs"))
+ return new URI(
+ scheme.substring(3),
+ uri.getUserInfo(),
+ uri.getHost(),
+ uri.getPort(),
+ uri.getPath(),
+ uri.getQuery(),
+ uri.getFragment()
+ );
+
+ return uri;
+ }
+}
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 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -274,8 +274,17 @@
{
if (current.isLeaf())
throw new IOException("File cannot have children: " + current);
- if (current instanceof StructuredVirtualFileHandler)
+
+ if (PathTokenizer.isReverseToken(tokens[i]))
{
+ VirtualFileHandler parent = current.getParent();
+ if (parent == null)
+ throw new IOException("Using reverse path on top file handler: " + current + ", " + path);
+ else
+ current = parent;
+ }
+ else if (current instanceof StructuredVirtualFileHandler)
+ {
StructuredVirtualFileHandler structured = (StructuredVirtualFileHandler) current;
current = structured.createChildHandler(tokens[i]);
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileHandler.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileHandler.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -151,11 +151,10 @@
if( file.canRead() == true )
tmpFiles.add(file);
}
- files = new File[tmpFiles.size()];
- tmpFiles.toArray(files);
- if (files.length == 0)
+ if (tmpFiles.isEmpty())
return Collections.emptyList();
+ files = tmpFiles.toArray(new File[tmpFiles.size()]);
FileSystemContext context = getVFSContext();
List<VirtualFileHandler> result = new ArrayList<VirtualFileHandler>();
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContextFactory.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContextFactory.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileSystemContextFactory.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -21,14 +21,14 @@
*/
package org.jboss.virtual.plugins.context.file;
+import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URISyntaxException;
import java.net.URL;
-import java.io.IOException;
+import org.jboss.virtual.plugins.context.AbstractContextFactory;
import org.jboss.virtual.spi.VFSContext;
-import org.jboss.virtual.spi.VFSContextFactory;
/**
* A file system context factory
@@ -37,21 +37,18 @@
* @author adrian at jboss.org
* @version $Revision: 44217 $
*/
-public class FileSystemContextFactory implements VFSContextFactory
+public class FileSystemContextFactory extends AbstractContextFactory
{
- /** The protocols supported */
- private static final String[] PROTOCOLS = { "file" };
-
- public String[] getProtocols()
+ public FileSystemContextFactory()
{
- return PROTOCOLS;
+ super("file", "vfsfile");
}
public VFSContext getVFS(URL root) throws IOException
{
try
{
- return new FileSystemContext(root);
+ return new FileSystemContext(fromVFS(root));
}
catch(URISyntaxException e)
{
@@ -60,8 +57,18 @@
throw ex;
}
}
+
public VFSContext getVFS(URI root) throws IOException
{
- return new FileSystemContext(root);
+ try
+ {
+ return new FileSystemContext(fromVFS(root));
+ }
+ catch(URISyntaxException e)
+ {
+ MalformedURLException ex = new MalformedURLException("non-URI compliant URI");
+ ex.initCause(e);
+ throw ex;
+ }
}
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarContextFactory.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarContextFactory.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarContextFactory.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -27,8 +27,8 @@
import java.net.URISyntaxException;
import java.net.URL;
+import org.jboss.virtual.plugins.context.AbstractContextFactory;
import org.jboss.virtual.spi.VFSContext;
-import org.jboss.virtual.spi.VFSContextFactory;
/**
* A jar context factory
@@ -37,21 +37,18 @@
* @author adrian at jboss.org
* @version $Revision: 44217 $
*/
-public class JarContextFactory implements VFSContextFactory
+public class JarContextFactory extends AbstractContextFactory
{
- /** The protocols supported */
- private static final String[] PROTOCOLS = { "jar" };
-
- public String[] getProtocols()
+ public JarContextFactory()
{
- return PROTOCOLS;
+ super("jar", "vfsjar");
}
public VFSContext getVFS(URL root) throws IOException
{
try
{
- return new JarContext(root);
+ return new JarContext(fromVFS(root));
}
catch(URISyntaxException e)
{
@@ -60,17 +57,9 @@
throw ex;
}
}
+
public VFSContext getVFS(URI root) throws IOException
{
- try
- {
- return new JarContext(root.toURL());
- }
- catch(URISyntaxException e)
- {
- MalformedURLException ex = new MalformedURLException("non-URI compliant URL");
- ex.initCause(e);
- throw ex;
- }
+ return getVFS(root.toURL());
}
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/vfs/helpers/PathTokenizer.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/vfs/helpers/PathTokenizer.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/vfs/helpers/PathTokenizer.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -31,6 +31,9 @@
*/
public class PathTokenizer
{
+ /** The reverse path const */
+ private static final String REVERSE_PATH = "..";
+
/**
* Utility class
*/
@@ -63,8 +66,8 @@
if (token.equals(""))
throw new IllegalArgumentException("A path element is empty: " + path);
- if (token.equals(".") || token.equals(".."))
- throw new IllegalArgumentException("Reverse paths are not allowed (containing a . or ..), use getParent(): " + path);
+ if (token.equals("."))
+ throw new IllegalArgumentException("Single . in path is not allowed: " + path);
tokens[i++] = token;
}
@@ -98,4 +101,15 @@
buffer.append(tokens[tokens.length-1]);
return buffer.toString();
}
+
+ /**
+ * Is reverse token.
+ *
+ * @param token the token to check
+ * @return true if token matches reverse path token
+ */
+ public static boolean isReverseToken(String token)
+ {
+ return REVERSE_PATH.equals(token);
+ }
}
Modified: projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java
===================================================================
--- projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/AbstractVFSContextTest.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -48,6 +48,10 @@
protected abstract VFSContext getVFSContext(String name) throws Exception;
+ protected abstract VFSContext getParentVFSContext() throws Exception;
+
+ protected abstract String getSuffix();
+
/* TODO URI testing
public void testRootURI() throws Exception
{
@@ -60,8 +64,10 @@
URI rootURI = context.getRootURI();
VFS vfs = context.getVFS();
VirtualFile rootFile = vfs.getRoot();
-
- assertEquals(new URI("vfs" + rootURI), rootFile.toURI());
+
+ URI uri = new URI("vfs" + rootURI);
+ URI rfUri = rootFile.toURI();
+ assertEquals(uri, rfUri);
}
public void testGetRoot() throws Exception
@@ -193,6 +199,26 @@
}
}
+ public void testSimpleReversePath() throws Exception
+ {
+ checkReversePath("simple" + getSuffix() + "/../complex" + getSuffix() + "/subfolder/subsubfolder/../subchild", "subchild");
+ }
+
+ public void testComplexReversePath() throws Exception
+ {
+ checkReversePath("complex" + getSuffix() + "/../simple" + getSuffix() + "/child", "child");
+ }
+
+ public void checkReversePath(String path, String fileName) throws Exception
+ {
+ VFSContext context = getParentVFSContext();
+ VirtualFileHandler root = context.getRoot();
+ VirtualFileHandler child = context.findChild(root, path);
+ assertNotNull(child);
+ assertTrue(child.isLeaf());
+ assertEquals(fileName, child.getName());
+ }
+
public void testVisit() throws Exception
{
VFSContext context = getVFSContext("children");
Modified: projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/FileVFSContextUnitTestCase.java
===================================================================
--- projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/FileVFSContextUnitTestCase.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/FileVFSContextUnitTestCase.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -52,4 +52,15 @@
URL url = getResource("/vfs/context/file/" + name + "/");
return new FileSystemContext(url);
}
+
+ protected VFSContext getParentVFSContext() throws Exception
+ {
+ URL url = getResource("/vfs/context/file/");
+ return new FileSystemContext(url);
+ }
+
+ protected String getSuffix()
+ {
+ return "";
+ }
}
Modified: projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARCacheUnitTestCase.java
===================================================================
--- projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARCacheUnitTestCase.java 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARCacheUnitTestCase.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -74,7 +74,7 @@
}
// If we don't delete, VFS will give ZIP errors (related issue?)
- assertTrue(testFile.delete());
+ assertTrue("test file deleted: " + testFile, testFile.delete());
// Create a new test.jar with manifest v2
{
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 2007-11-03 15:58:46 UTC (rev 66705)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/test/JARVFSContextUnitTestCase.java 2007-11-03 17:02:24 UTC (rev 66706)
@@ -21,15 +21,16 @@
*/
package org.jboss.test.virtual.test;
+import java.net.URL;
+
import junit.framework.Test;
import junit.framework.TestSuite;
import org.jboss.virtual.VFS;
import org.jboss.virtual.plugins.context.jar.JarContext;
import org.jboss.virtual.plugins.context.jar.JarUtils;
+import org.jboss.virtual.plugins.context.file.FileSystemContext;
import org.jboss.virtual.spi.VFSContext;
-import java.net.URL;
-
/**
* JARVFSContextUnitTestCase.
*
@@ -57,7 +58,17 @@
return new JarContext(url);
}
+ protected VFSContext getParentVFSContext() throws Exception
+ {
+ URL url = getResource("/vfs/context/jar/");
+ return new FileSystemContext(url);
+ }
+ protected String getSuffix()
+ {
+ return ".jar";
+ }
+
/**
* Was having problems with a jar entry as root of VFS.
*
More information about the jboss-cvs-commits
mailing list