blob: 14450434df7a0f2e36fea36986cfe962325abb7e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
* 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
*
* Contributors:
* IBM Corporation - initial implementation
* Red Hat, Inc - Extracted methods from WizardArchiveFileResourceImportPage1
*******************************************************************************/
package org.eclipse.ui.internal.wizards.datatransfer;
import java.io.IOException;
import java.util.zip.ZipFile;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
/**
* @since 3.1
*/
public class ArchiveFileManipulations {
/**
* Determine whether the file with the given filename is in .tar.gz or .tar
* format.
*
* @param fileName
* file to test
* @return true if the file is in tar format
*/
public static boolean isTarFile(String fileName) {
if (fileName.length() == 0) {
return false;
}
TarFile tarFile = null;
try {
tarFile = new TarFile(fileName);
} catch (TarException tarException) {
return false;
} catch (IOException ioException) {
return false;
} finally {
if (tarFile != null) {
try {
tarFile.close();
} catch (IOException e) {
// ignore
}
}
}
return true;
}
/**
* Determine whether the file with the given filename is in .zip or .jar
* format.
*
* @param fileName
* file to test
* @return true if the file is in tar format
*/
public static boolean isZipFile(String fileName) {
if (fileName.length() == 0) {
return false;
}
ZipFile zipFile = null;
try {
zipFile = new ZipFile(fileName);
} catch (IOException ioException) {
return false;
} finally {
if (zipFile != null) {
try {
zipFile.close();
} catch (IOException e) {
// ignore
}
}
}
return true;
}
/**
* Closes the given structure provider.
*
* @param structureProvider
* The structure provider to be closed, can be <code>null</code>
* @param shell
* The shell to display any possible Dialogs in
*/
public static void closeStructureProvider(ILeveledImportStructureProvider structureProvider, Shell shell) {
if (structureProvider instanceof ZipLeveledStructureProvider) {
closeZipFile(((ZipLeveledStructureProvider) structureProvider).getZipFile(), shell);
}
if (structureProvider instanceof TarLeveledStructureProvider) {
closeTarFile(((TarLeveledStructureProvider) structureProvider).getTarFile(), shell);
}
}
/**
* Attempts to close the passed zip file, and answers a boolean indicating
* success.
*
* @param file
* The zip file to attempt to close
* @param shell
* The shell to display error dialogs in
* @return Returns true if the operation was successful
*/
public static boolean closeZipFile(ZipFile file, Shell shell) {
try {
file.close();
} catch (IOException e) {
displayErrorDialog(
NLS.bind(DataTransferMessages.ZipImport_couldNotClose, file.getName()),
shell);
return false;
}
return true;
}
/**
* Attempts to close the passed tar file, and answers a boolean indicating
* success.
*
* @param file
* The tar file to attempt to close
* @param shell
* The shell to display error dialogs in
* @return Returns true if the operation was successful
* @since 3.4
*/
public static boolean closeTarFile(TarFile file, Shell shell) {
try {
file.close();
} catch (IOException e) {
displayErrorDialog(
NLS.bind(DataTransferMessages.ZipImport_couldNotClose, file.getName()),
shell);
return false;
}
return true;
}
/**
* Display an error dialog with the specified message.
*
* @param message
* the error message
*/
protected static void displayErrorDialog(String message, Shell shell) {
MessageDialog.open(MessageDialog.ERROR, shell, getErrorDialogTitle(), message, SWT.SHEET);
}
/**
* Get the title for an error dialog. Subclasses should override.
*/
protected static String getErrorDialogTitle() {
return IDEWorkbenchMessages.WizardExportPage_internalErrorTitle;
}
}