[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