com.baremetalstudios.mapleide.datatransfer.ArchiveFileManipulations.java Source code

Java tutorial

Introduction

Here is the source code for com.baremetalstudios.mapleide.datatransfer.ArchiveFileManipulations.java

Source

/*******************************************************************************
 * 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 com.baremetalstudios.mapleide.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;

/**
 * @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, Messages messages) {
        if (fileName.length() == 0) {
            return false;
        }

        TarFile tarFile = null;
        try {
            tarFile = new TarFile(fileName, messages);
        } 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(Messages messages, ILeveledImportStructureProvider structureProvider,
            Shell shell) {
        if (structureProvider instanceof ZipLeveledStructureProvider) {
            closeZipFile(messages, ((ZipLeveledStructureProvider) structureProvider).getZipFile(), shell);
        }
        if (structureProvider instanceof TarLeveledStructureProvider) {
            closeTarFile(messages, ((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(Messages messages, ZipFile file, Shell shell) {
        try {
            file.close();
        } catch (IOException e) {
            displayErrorDialog(NLS.bind(messages.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(Messages messages, TarFile file, Shell shell) {
        try {
            file.close();
        } catch (IOException e) {
            displayErrorDialog(NLS.bind(messages.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;
    }
}