/************************************************************************************* * Copyright (c) 2014 Red Hat, Inc. 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: * JBoss by Red Hat - Initial implementation. ************************************************************************************/ package org.jboss.tools.runtime.core.extract; import java.io.File; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.jboss.tools.runtime.core.RuntimeCoreActivator; import org.jboss.tools.runtime.core.extract.internal.IExtractUtility; import org.jboss.tools.runtime.core.extract.internal.UntarGZUtility; import org.jboss.tools.runtime.core.extract.internal.UntarUtility; import org.jboss.tools.runtime.core.extract.internal.UnzipUtility; public class ExtractUtility { private static final String ZIP_SUFFIX = "zip"; //$NON-NLS-1$ private static final String TAR_SUFFIX = "tar"; //$NON-NLS-1$ private static final String TAR_GZ_SUFFIX = "tar.gz"; //$NON-NLS-1$ private static final String TGZ_SUFFIX = ".tgz"; //$NON-NLS-1$ public static final int FORMAT_ZIP = 1; public static final int FORMAT_TAR = 2; public static final int FORMAT_TGZ = 3; private File file; private IExtractUtility util; public ExtractUtility(File file) { this.file = file; String name = file.getName().toLowerCase(); if( name.endsWith(ZIP_SUFFIX)) { util = new UnzipUtility(file); } else if( name.endsWith(TAR_SUFFIX)) { util = new UntarUtility(file); } else if( name.endsWith(TAR_GZ_SUFFIX) || name.endsWith(TGZ_SUFFIX)) { util = new UntarGZUtility(file); } } public ExtractUtility(File file, int format) { this.file = file; switch(format) { case FORMAT_ZIP: util = new UnzipUtility(file); break; case FORMAT_TAR: util = new UntarUtility(file); break; case FORMAT_TGZ: util = new UntarGZUtility(file); break; } } public File getOriginalFile() { return file; } public IStatus extract(File destination, IOverwrite overwriteQuery, IProgressMonitor monitor) { if( util != null ) { try { return util.extract(destination, overwriteQuery, monitor); } catch(CoreException ce) { return new Status(IStatus.ERROR, RuntimeCoreActivator.PLUGIN_ID, "Error extracting file " + file.getAbsolutePath(), ce); } } return new Status(IStatus.ERROR, RuntimeCoreActivator.PLUGIN_ID, "Unable to discover how to extract file " + file.getAbsolutePath()); } public String getExtractedRootFolder(IProgressMonitor monitor) throws CoreException { if( util != null ) return util.getRoot(monitor); return null; } }