/* * Copyright (c) 2012 Data Harmonisation Panel * * All rights reserved. This program and the accompanying materials are made * available under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of the License, * or (at your option) any later version. * * You should have received a copy of the GNU Lesser General Public License * along with this distribution. If not, see <http://www.gnu.org/licenses/>. * * Contributors: * HUMBOLDT EU Integrated Project #030962 * Data Harmonisation Panel <http://www.dhpanel.eu> */ package eu.esdihumboldt.hale.ui.application.handler; import java.awt.Desktop; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import org.apache.commons.io.FileUtils; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.commands.IHandler; import eu.esdihumboldt.hale.ui.application.internal.HALEApplicationPlugin; import eu.esdihumboldt.hale.ui.util.ExceptionHelper; /** * This class is the handler for opening a PDF-manual. * * @author Michel Krämer */ public class ShowHandbookHandler extends AbstractHandler implements IHandler { /** * The name of the PDF file to open */ private static final String PDFFILE = "hale_manual_en.pdf"; //$NON-NLS-1$ /** * @see IHandler#execute(ExecutionEvent) */ @Override public Object execute(ExecutionEvent event) throws ExecutionException { String tempDirName = System.getProperty("java.io.tmpdir"); //$NON-NLS-1$ if (!tempDirName.endsWith("/")) { //$NON-NLS-1$ tempDirName = tempDirName + "/"; //$NON-NLS-1$ } tempDirName = tempDirName + HALEApplicationPlugin.PLUGIN_ID + "/"; //$NON-NLS-1$ File tempDir = new File(tempDirName); tempDir.mkdirs(); tempDir.deleteOnExit(); File pdfFile = new File(tempDirName + PDFFILE); if (pdfFile.exists()) { FileUtils.deleteQuietly(pdfFile); } pdfFile.deleteOnExit(); URL pdfUrl = this.getClass().getResource("/documentation/" + PDFFILE); //$NON-NLS-1$ if (pdfUrl == null) { throw new RuntimeException("Manual could not be retrieved."); //$NON-NLS-1$ } InputStream in; try { in = pdfUrl.openStream(); } catch (IOException e) { ExceptionHelper.handleException("Could not open Streaming.", //$NON-NLS-1$ HALEApplicationPlugin.PLUGIN_ID, e); return null; } FileOutputStream fos = null; byte[] buffer = new byte[4096]; int read; try { fos = new FileOutputStream(pdfFile); while ((read = in.read(buffer)) != -1) { fos.write(buffer, 0, read); } } catch (IOException e) { ExceptionHelper.handleException("Error while reading the file.", //$NON-NLS-1$ HALEApplicationPlugin.PLUGIN_ID, e); return null; } finally { try { if (fos != null) { fos.close(); } in.close(); } catch (IOException e) { // ignore } } try { Desktop.getDesktop().open(pdfFile); } catch (IOException e) { ExceptionHelper.handleException("The file could not be opened", //$NON-NLS-1$ HALEApplicationPlugin.PLUGIN_ID, e); } return null; } }