[jboss-cvs] JBossAS SVN: r72285 - in projects/vfs/trunk/src: main/java/org/jboss/virtual/plugins/context and 5 other directories.
jboss-cvs-commits at lists.jboss.org
jboss-cvs-commits at lists.jboss.org
Wed Apr 16 10:40:05 EDT 2008
Author: alesj
Date: 2008-04-16 10:40:05 -0400 (Wed, 16 Apr 2008)
New Revision: 72285
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/DelegatingHandler.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/jar/AbstractStructuredJarHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryContents.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/NoCopyNestedJarHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/SynthenticDirEntryHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/vfs/AssembledDirectoryHandler.java
projects/vfs/trunk/src/main/java/org/jboss/virtual/spi/VirtualFileHandler.java
projects/vfs/trunk/src/test/java/org/jboss/test/virtual/support/AbstractMockVirtualFileHandler.java
Log:
Initial commit on the unpack.
TODO on tests.
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/VFSUtils.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -21,8 +21,11 @@
*/
package org.jboss.virtual;
+import java.io.File;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
+import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URI;
import java.net.URISyntaxException;
@@ -40,6 +43,9 @@
import org.jboss.logging.Logger;
import org.jboss.util.StringPropertyReplacer;
+import org.jboss.virtual.plugins.context.file.FileSystemContext;
+import org.jboss.virtual.plugins.context.jar.AbstractJarHandler;
+import org.jboss.virtual.plugins.context.jar.NestedJarHandler;
import org.jboss.virtual.spi.LinkInfo;
import org.jboss.virtual.spi.VFSContext;
import org.jboss.virtual.spi.VirtualFileHandler;
@@ -398,6 +404,9 @@
*/
private static Map<String, String> getOptions(VirtualFile file)
{
+ if (file == null)
+ throw new IllegalArgumentException("Null file");
+
VirtualFileHandler handler = file.getHandler();
VFSContext context = handler.getVFSContext();
return context.getOptions();
@@ -443,4 +452,99 @@
options.remove(USE_COPY_QUERY);
}
+
+ /**
+ * Unpack the artifact under original param.
+ *
+ * @param file the file to unpack
+ * @return unpacked file
+ * @throws IOException for any io error
+ * @throws URISyntaxException for any uri error
+ */
+ public static VirtualFile unpack(VirtualFile file) throws IOException, URISyntaxException
+ {
+ if (file == null)
+ throw new IllegalArgumentException("Null file");
+ if (file.isLeaf())
+ return file;
+
+ VirtualFileHandler handler = file.getHandler();
+ // already unpacked
+ if (handler instanceof NestedJarHandler)
+ return file;
+ if (handler instanceof AbstractJarHandler == false)
+ throw new IllegalArgumentException("Can only handle jar files: " + file);
+
+ File unpacked = File.createTempFile("nestedjar", null);
+ unpack(handler, unpacked);
+ FileSystemContext fileSystemContext = new FileSystemContext(unpacked);
+ VirtualFileHandler newHandler = fileSystemContext.getRoot();
+ VirtualFileHandler parent = handler.getParent();
+ if (parent != null)
+ parent.replaceChild(handler, newHandler);
+
+ return newHandler.getVirtualFile();
+ }
+
+ /**
+ * Unpack the root into file.
+ * Repeat this on the root's children.
+ *
+ * @param root the root
+ * @param file the file
+ * @throws IOException for any error
+ */
+ private static void unpack(VirtualFileHandler root, File file) throws IOException
+ {
+ rewrite(root, file);
+ List<VirtualFileHandler> children = root.getChildren(true);
+ if (children != null && children.isEmpty() == false)
+ {
+ for (VirtualFileHandler handler : children)
+ {
+ File next = new File(file, handler.getName());
+ unpack(handler, next);
+ }
+ }
+ }
+
+ /**
+ * Rewrite contents of handler into file.
+ *
+ * @param handler the handler
+ * @param file the file
+ * @throws IOException for any error
+ */
+ private static void rewrite(VirtualFileHandler handler, File file) throws IOException
+ {
+ OutputStream out = new FileOutputStream(file);
+ InputStream in = handler.openStream();
+ try
+ {
+ byte[] bytes = new byte[1024];
+ while (in.available() > 0)
+ {
+ int length = in.read(bytes);
+ if (length > 0)
+ out.write(bytes, 0, length);
+ }
+ }
+ finally
+ {
+ try
+ {
+ in.close();
+ }
+ catch (IOException ignored)
+ {
+ }
+ try
+ {
+ out.close();
+ }
+ catch (IOException ignored)
+ {
+ }
+ }
+ }
}
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-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/AbstractVirtualFileHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -399,6 +399,27 @@
return null;
}
+ public void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ internalReplaceChild(original, replacement);
+ if (replacement instanceof AbstractVirtualFileHandler)
+ {
+ AbstractVirtualFileHandler avfh = (AbstractVirtualFileHandler)replacement;
+ avfh.parent = this;
+ }
+ }
+
+ /**
+ * Replace original child with unpacked replacement.
+ *
+ * @param original the original
+ * @param replacement the replacement
+ */
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ throw new UnsupportedOperationException("Replacement is unsupported: " + toString());
+ }
+
@Override
public String toString()
{
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/DelegatingHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/DelegatingHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/DelegatingHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -114,4 +114,9 @@
{
return delegate.toURL();
}
+
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ delegate.replaceChild(original, replacement);
+ }
}
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 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/file/FileHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -217,6 +217,11 @@
return structuredFindChild(path);
}
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ childCache.put(original.getName(), replacement);
+ }
+
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException
{
in.defaultReadObject();
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/AbstractStructuredJarHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/AbstractStructuredJarHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/AbstractStructuredJarHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -316,6 +316,13 @@
return vfh;
}
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ entries.remove(original);
+ entries.add(replacement);
+ entryMap.put(original.getName(), replacement);
+ }
+
/**
* Restore the jar file
*
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryContents.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryContents.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryContents.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -238,6 +238,13 @@
return entryURL.toURI();
}
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ entryChildren.remove(original);
+ entryChildren.add(replacement);
+ entryMap.put(original.getName(), replacement);
+ }
+
public String toString()
{
StringBuffer tmp = new StringBuffer(super.toString());
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/JarEntryHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -163,4 +163,11 @@
{
return structuredFindChild(path);
}
+
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ entryChildren.remove(original);
+ entryChildren.add(replacement);
+ entryMap.put(original.getName(), replacement);
+ }
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/NoCopyNestedJarHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/NoCopyNestedJarHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/NoCopyNestedJarHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -134,4 +134,9 @@
{
return njar.getChildren(ignoreErrors);
}
+
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ njar.internalReplaceChild(original, replacement);
+ }
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/SynthenticDirEntryHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/SynthenticDirEntryHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/jar/SynthenticDirEntryHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -180,4 +180,11 @@
{
return structuredFindChild(path);
}
+
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ entryChildren.remove(original);
+ entryChildren.add(replacement);
+ entryMap.put(original.getName(), replacement);
+ }
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/vfs/AssembledDirectoryHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/vfs/AssembledDirectoryHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/plugins/context/vfs/AssembledDirectoryHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -148,4 +148,11 @@
{
return getVfsUrl();
}
+
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ children.remove(original);
+ children.add(replacement);
+ childrenMap.put(original.getName(), replacement);
+ }
}
Modified: projects/vfs/trunk/src/main/java/org/jboss/virtual/spi/VirtualFileHandler.java
===================================================================
--- projects/vfs/trunk/src/main/java/org/jboss/virtual/spi/VirtualFileHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/main/java/org/jboss/virtual/spi/VirtualFileHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -193,4 +193,12 @@
* Close the resources
*/
void close();
+
+ /**
+ * Replace child.
+ *
+ * @param original the original
+ * @param replacement the replacement
+ */
+ void replaceChild(VirtualFileHandler original, VirtualFileHandler replacement);
}
Modified: projects/vfs/trunk/src/test/java/org/jboss/test/virtual/support/AbstractMockVirtualFileHandler.java
===================================================================
--- projects/vfs/trunk/src/test/java/org/jboss/test/virtual/support/AbstractMockVirtualFileHandler.java 2008-04-16 14:10:52 UTC (rev 72284)
+++ projects/vfs/trunk/src/test/java/org/jboss/test/virtual/support/AbstractMockVirtualFileHandler.java 2008-04-16 14:40:05 UTC (rev 72285)
@@ -269,6 +269,12 @@
return MockVFSContext.createMockURL(uri);
}
+ protected void internalReplaceChild(VirtualFileHandler original, VirtualFileHandler replacement)
+ {
+ children.remove(original);
+ children.add(replacement);
+ }
+
@Override
public VirtualFileHandler getParent() throws IOException
{
More information about the jboss-cvs-commits
mailing list