/* * Copyright (c) 2002 Team in a Box Ltd. All rights reserved. This file is made available under the terms and conditions of the * Common Public License v 1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/cpl-v1.0.html * * Contributors: Team in a Box Ltd http://www.teaminabox.co.uk/ */ package net.sourceforge.phpeclipse.wiki.export; import java.io.File; import java.lang.reflect.InvocationTargetException; import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin; import net.sourceforge.phpeclipse.wiki.preferences.Util; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; public final class WikiExportWizard extends Wizard implements INewWizard { static final QualifiedName DIRECTORY_QUALIFIED_NAME = new QualifiedName(WikiEditorPlugin.PLUGIN_ID, "exportDirectory"); private WikiExportWizardPage page; private ISelection selection; public WikiExportWizard() { super(); setNeedsProgressMonitor(true); } public void addPages() { page = new WikiExportWizardPage(selection); addPage(page); } public boolean performFinish() { persistExportProperties(); final IContainer folder = page.getFolder(); final String exportDirectory = page.getExportDirectoryPath(); return runOperationForContainer(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { startExport(monitor, folder, exportDirectory); } catch (Exception e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }); } private boolean runOperationForContainer(IRunnableWithProgress op) { try { getContainer().run(true, true, op); } catch (InterruptedException e) { return false; } catch (InvocationTargetException e) { WikiEditorPlugin.getDefault().log("", e); MessageDialog.openError(getShell(), "Error", e.getTargetException().getMessage()); return false; } return true; } private void startExport(IProgressMonitor monitor, IContainer folder, String exportDirectory) throws CoreException { try { final String srcBasePath = Util.getWikiTextsPath(folder); new WikiExporter().export(folder, exportDirectory, srcBasePath, monitor); } catch (Exception ioex) { throw new CoreException(new Status(IStatus.ERROR, "Failed to write Wiki Documents", IStatus.OK, ioex.getMessage(), ioex)); } } private void persistExportProperties() { IProject project = page.getFolder().getProject(); try { project.setPersistentProperty(WikiExportWizard.DIRECTORY_QUALIFIED_NAME, new File(page.getExportDirectoryPath()) .getAbsolutePath()); } catch (CoreException cex) { noteException(cex); } } private void noteException(CoreException cex) { WikiEditorPlugin.getDefault().log("Export Error", cex); throw new RuntimeException("An error occurred. Please see the log for details."); } public void init(IWorkbench workbench, IStructuredSelection selection) { this.selection = selection; } }