### Eclipse Workspace Patch 1.0
#P org.eclipse.rse.services
Index: clientserver/org/eclipse/rse/services/clientserver/archiveutils/ArchiveHandlerManager.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/archiveutils/ArchiveHandlerManager.java,v
retrieving revision 1.10
diff -u -r1.10 ArchiveHandlerManager.java
--- clientserver/org/eclipse/rse/services/clientserver/archiveutils/ArchiveHandlerManager.java 11 Feb 2008 16:38:31 -0000 1.10
+++ clientserver/org/eclipse/rse/services/clientserver/archiveutils/ArchiveHandlerManager.java 15 Feb 2008 03:05:35 -0000
@@ -25,6 +25,7 @@
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
import java.util.HashMap;
+import java.util.Iterator;
/**
* This class manages all the Archive Handlers that correspond to the archive file that the system
@@ -40,6 +41,7 @@
public static final String VIRTUAL_SEPARATOR = "#virtual#/"; //$NON-NLS-1$
public static final String VIRTUAL_CANONICAL_SEPARATOR = "#virtual#"; //$NON-NLS-1$
public static final String VIRTUAL_FOLDER_SEPARATOR = "/"; //$NON-NLS-1$
+ public static final String EXTENSION_SEPARATOR = "."; //$NON-NLS-1$
// the singleton instance
protected static ArchiveHandlerManager _instance = new ArchiveHandlerManager();
@@ -116,7 +118,7 @@
}
else
{
- if (_handlerTypes.containsKey(getExtension(file)))
+ if (getRegisteredExtension(file)!=null)
{
return true;
}
@@ -136,6 +138,10 @@
*/
public boolean isRegisteredArchive(String filename)
{
+ return getRegisteredExtension(filename) == null?false:true;
+ //the code below doesn't support extension like fool.tar.gz,
+ //changed to compare file name against registered extensions
+ /*
if (_handlerTypes.containsKey(getExtension(filename)))
{
return true;
@@ -144,13 +150,49 @@
{
return false;
}
+ */
}
+
+ /**
+ * check if the file extension is registered archive type.
+ * notice here, the getExtension method does't work for name like fool.tar.gz
+ * @param file the file to check
+ * @return extension or null
+ */
+ protected String getRegisteredExtension(File file)
+ {
+ String fileName = file.getName();
+ return getRegisteredExtension(fileName);
+
+ }
+ /**
+ * check if the file extension is registered archive type.
+ * notice here, the getExtension method does't work for name like fool.tar.gz
+ * @param fileName the file name to check
+ * @return extension or null
+ */
+ protected String getRegisteredExtension(String fileName)
+ {
+ Iterator itor = _handlerTypes.keySet().iterator();
+ while(itor.hasNext())
+ {
+ String ext = ((String)itor.next()).toLowerCase();
+ if (fileName.endsWith(EXTENSION_SEPARATOR + ext))
+ {
+ return ext;
+ }
+
+ }
+ return null;
+ }
+
/**
* @param file the file whose extension we are computing.
* @return the extension of file
. "Extension" is
* defined as any letters in the filename after the last ".".
* Returns "" if there is no extension.
*/
+ /*
protected String getExtension(File file)
{
String filename = file.getName();
@@ -158,6 +200,8 @@
if (i == -1) return ""; //$NON-NLS-1$
return filename.substring(i+1).toLowerCase();
}
+ */
+
/**
* @param filename the name of the file whose extension we are computing.
@@ -165,12 +209,14 @@
* defined as any letters in the filename after the last ".".
* Returns "" if there is no extension.
*/
+ /*
protected String getExtension(String filename)
{
int i = filename.lastIndexOf("."); //$NON-NLS-1$
if (i == -1) return ""; //$NON-NLS-1$
return filename.substring(i+1).toLowerCase();
}
+ */
/**
* Given the absolute path to a virtual object, returns that object
@@ -212,8 +258,8 @@
}
else {
// find registered handler based on file's extension
- String ext = getExtension(file);
- if (!_handlerTypes.containsKey(ext))
+ String ext = getRegisteredExtension(file);
+ if (ext == null)
{
//System.out.println("Unknown archive file type: " + ext);
return null;
Index: clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTarHandler.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTarHandler.java,v
retrieving revision 1.12
diff -u -r1.12 SystemTarHandler.java
--- clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTarHandler.java 23 Jan 2008 03:57:16 -0000 1.12
+++ clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTarHandler.java 15 Feb 2008 03:05:36 -0000
@@ -30,6 +30,7 @@
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
+import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilePermission;
import java.io.IOException;
@@ -1230,7 +1231,7 @@
// open a new temp file which will be our destination for the new tar file
outputTempFile = new File(file.getAbsolutePath() + "temp"); //$NON-NLS-1$
- outStream = new TarOutputStream(new FileOutputStream(outputTempFile));
+ outStream = getTarOutputStream(outputTempFile);
// get all the entries in the current tar
VirtualChild[] children = getVirtualChildrenList(archiveOperationMonitor);
@@ -1670,7 +1671,7 @@
// open a new temp file which will be our destination for the new tar file
File outputTempFile = new File(getArchive().getAbsolutePath() + "temp"); //$NON-NLS-1$
- TarOutputStream outStream = new TarOutputStream(new FileOutputStream(outputTempFile));
+ TarOutputStream outStream = getTarOutputStream(outputTempFile);
// get all the entries
VirtualChild[] children = getVirtualChildrenList(archiveOperationMonitor);
@@ -1779,7 +1780,7 @@
// open a new temp file which will be our destination for the new tar file
outputTempFile = new File(file.getAbsolutePath() + "temp"); //$NON-NLS-1$
- TarOutputStream outStream = new TarOutputStream(new FileOutputStream(outputTempFile));
+ TarOutputStream outStream = getTarOutputStream(outputTempFile);
// get all the entries in the current tar
VirtualChild[] children = getVirtualChildrenList(archiveOperationMonitor);
@@ -1905,7 +1906,7 @@
// open a new temp file which will be our destination for the new tar file
outputTempFile = new File(file.getAbsolutePath() + "temp"); //$NON-NLS-1$
- TarOutputStream outStream = new TarOutputStream(new FileOutputStream(outputTempFile));
+ TarOutputStream outStream = getTarOutputStream(outputTempFile);
// get all the entries
VirtualChild[] children = getVirtualChildrenList(archiveOperationMonitor);
@@ -2192,7 +2193,7 @@
// open a new temp file which will be our destination for the new tar file
outputTempFile = new File(file.getAbsolutePath() + "temp"); //$NON-NLS-1$
- outStream = new TarOutputStream(new FileOutputStream(outputTempFile));
+ outStream = getTarOutputStream(outputTempFile);
// get all the entries
VirtualChild[] children = getVirtualChildrenList(archiveOperationMonitor);
@@ -2343,7 +2344,7 @@
try {
// create output stream
- TarOutputStream outStream = new TarOutputStream(new FileOutputStream(file));
+ TarOutputStream outStream = getTarOutputStream(file);
// close output stream, so we have an empty tar file
outStream.close();
@@ -2601,4 +2602,16 @@
archiveOperationMonitor.setDone(true);
}
}
+
+ /**
+ * get the tar output stream from file,
+ * this method can be override by subclass to return compressed output steam if needed
+ * @param outputFile the output file to create stream
+ * @return OutputStream the output stream to write
+ * @throws FileNotFoundException when the output file doesn't exists
+ */
+ protected TarOutputStream getTarOutputStream(File outputFile) throws FileNotFoundException {
+ TarOutputStream outStream = new TarOutputStream(new FileOutputStream(outputFile));
+ return outStream;
+ }
}
Index: clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TarFile.java
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.services/clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TarFile.java,v
retrieving revision 1.3
diff -u -r1.3 TarFile.java
--- clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TarFile.java 5 Jun 2007 10:37:07 -0000 1.3
+++ clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TarFile.java 15 Feb 2008 03:05:34 -0000
@@ -195,7 +195,7 @@
* @return the input stream for the tar file.
* @throws FileNotFoundException if the file does not exist.
*/
- private InputStream getInputStream() throws FileNotFoundException {
+ protected InputStream getInputStream() throws FileNotFoundException {
FileInputStream stream = new FileInputStream(file);
return stream;
}
Index: clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TgzFile.java
===================================================================
RCS file: clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TgzFile.java
diff -N clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TgzFile.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ clientserver/org/eclipse/rse/internal/services/clientserver/archiveutils/TgzFile.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,60 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Eclipse.org.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.rse.internal.services.clientserver.archiveutils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.zip.GZIPInputStream;
+
+/**
+ * This class is used to read entries from tar.gz file
+ * It read compressed data from GZIPInputStream
+ * @author jma
+ */
+public class TgzFile extends TarFile {
+
+ /**
+ * Opens a tar.gz file for reading given the specified File object.
+ * @param file the tar.gz file to be opened for reading.
+ * @throws FileNotFoundException if the file does not exist.
+ * @throws IOException if an I/O error occurs.
+ */
+ public TgzFile(File file) throws FileNotFoundException, IOException {
+ super(file);
+ }
+
+ /**
+ * Opens a tar.gz file for reading given the file name.
+ * @param name the name of the tar file to be opened for reading.
+ * @throws FileNotFoundException if the file with the given name does not exist.
+ * @throws IOException if an I/O error occurs.
+ */
+ public TgzFile(String name) throws FileNotFoundException, IOException {
+ super(name);
+ }
+
+ /**
+ * Gets the input stream for the tar.gz file.
+ * Get file input steam from superclass, wrap it using GZipInputSteam
+ * @return the input stream for the tar file.
+ * @throws FileNotFoundException if the file does not exist.
+ */
+ protected InputStream getInputStream() throws FileNotFoundException {
+ InputStream fileInputStream = super.getInputStream();
+ GZIPInputStream zipInputStream = null;
+ try{
+ zipInputStream = new GZIPInputStream(fileInputStream);
+ } catch (IOException ioe) {
+ throw new FileNotFoundException(ioe.getMessage());
+ }
+ return zipInputStream;
+ }
+
+}
Index: clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTgzHandler.java
===================================================================
RCS file: clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTgzHandler.java
diff -N clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTgzHandler.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ clientserver/org/eclipse/rse/services/clientserver/archiveutils/SystemTgzHandler.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,48 @@
+/*******************************************************************************
+ * Copyright (c) 2008 Eclipse.org.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ */
+package org.eclipse.rse.services.clientserver.archiveutils;
+
+import java.io.File;
+import java.io.IOException;
+
+import org.eclipse.rse.internal.services.clientserver.archiveutils.TarFile;
+import org.eclipse.rse.internal.services.clientserver.archiveutils.TgzFile;
+
+/**
+ * handler class for .tar.gz and .tgz files
+ * @author jma
+ *
+ */
+public class SystemTgzHandler extends SystemTarHandler {
+
+ /**
+ * constructor for the tgz handler
+ * @param file the .tar.gz or .tgz file
+ */
+ public SystemTgzHandler(File file) throws IOException {
+ super(file);
+ }
+
+ /**
+ * Gets a tar.gz file from the underlying file.
+ * @return the tar file, or null
if the tar file does not exist.
+ */
+ protected TarFile getTarFile() {
+
+ TarFile tarFile = null;
+
+ try {
+ tarFile = new TgzFile(file);
+ }
+ catch (IOException e) {
+ // TODO: log error
+ }
+
+ return tarFile;
+ }
+}
#P org.eclipse.rse.files.ui
Index: plugin.xml
===================================================================
RCS file: /cvsroot/dsdp/org.eclipse.tm.rse/plugins/org.eclipse.rse.files.ui/plugin.xml,v
retrieving revision 1.22
diff -u -r1.22 plugin.xml
--- plugin.xml 16 Jan 2008 18:28:19 -0000 1.22
+++ plugin.xml 15 Feb 2008 03:05:40 -0000
@@ -309,6 +309,18 @@
id="org.eclipse.rse.services.clientserver.archiveutils.systemjarhandler">
+
+
+
+