* works only for 100% correctly generated HTML from the preview renderer.
* not very stable at the moment!
public void selectionChanged(IAction action, ISelection selection) {
}
+ public static void createFragmentPage(IFile file, StringBuffer htmlBuffer) {
+ BufferedInputStream stream = null;
+ try {
+// String templateFileName = Util.getLocalTemplate(file);
+ // String cssUrl = Util.getLocalCssUrl(file);
+ String srcBasePath = Util.getWikiTextsPath(file);
+ String binBasePath = Util.getProjectsWikiOutputPath(file.getProject(), WikiEditorPlugin.HTML_OUTPUT_PATH);
+ IContentRenderer renderer = RendererFactory.createContentRenderer(file.getProject());
+ stream = new BufferedInputStream(file.getContents());
+
+ String fileName = Util.getHTMLFileName(file, binBasePath, srcBasePath);
+ String content = new String(getInputStreamAsCharArray(stream, -1, "utf-8"));
+ String filePath = file.getLocation().toString(); // file.getProjectRelativePath().toString()
+ if (filePath.startsWith(srcBasePath)) {
+ filePath = filePath.substring(srcBasePath.length() + 1);
+ }
+ // calculate the <i>depth</i> of the file (i.e. ../../../ as much as needed)
+ int index = 0;
+ int level = 0;
+ while (index >= 0) {
+ index = fileName.indexOf('/', index);
+ if (index >= 0) {
+ level++;
+ index++;
+ }
+ }
+ renderer.render(null, content, htmlBuffer, level, false);
+
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ try {
+ if (stream != null) {
+ stream.close();
+ }
+ } catch (IOException e) {
+ }
+ }
+
+ }
+
public static void createPage(IFile file) {
String templateFileName = Util.getLocalTemplate(file);
String cssUrl = Util.getLocalCssUrl(file);
createPage(templateFileName, file, binBasePath, srcBasePath);
}
- public static void createPage(String templateFileName, IFile file, String binBasepath, String srcBasePath) {
+ public static void createPage(String templateFileName, IFile file, String binBasePath, String srcBasePath) {
// only interested in files with the "wp" extension
if ("wp".equalsIgnoreCase(file.getFileExtension())) {
try {
IContentRenderer renderer = RendererFactory.createContentRenderer(file.getProject());
- convertWikiFile(templateFileName, file, binBasepath, srcBasePath, renderer);
+ convertWikiFile(templateFileName, file, binBasePath, srcBasePath, renderer);
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
// TODO Auto-generated catch block
e1.printStackTrace();
} catch (Exception e) {
- // TODO Auto-generated catch block
+ // TODO Auto-generated catch block
e.printStackTrace();
}
} else {
InputStream contentStream = null;
try {
- String filename = Util.getHTMLFileName(file, binBasepath, srcBasePath);
+ String filename = Util.getHTMLFileName(file, binBasePath, srcBasePath);
if (filename != null) {
int index = filename.lastIndexOf('/');
if (index >= 0) {
}
}
- public static void convertWikiFile(String templateFileName, IFile file, String binBasePath, String srcBasePath, IContentRenderer renderer)
- throws CoreException {
+ public static void convertWikiFile(String templateFileName, IFile file, String binBasePath, String srcBasePath,
+ IContentRenderer renderer) throws CoreException {
StringBuffer htmlBuffer = new StringBuffer();
convertWikiBuffer(templateFileName, htmlBuffer, file, renderer, true);
String htmlName = Util.getHTMLFileName(file, binBasePath, srcBasePath);
return;
}
- public static void convertWikiBuffer(String templateFileName, StringBuffer htmlBuffer, IFile file, IContentRenderer renderer, boolean completeHTML)
- throws CoreException {
+ public static void convertWikiBuffer(String templateFileName, StringBuffer htmlBuffer, IFile file, IContentRenderer renderer,
+ boolean completeHTML) throws CoreException {
BufferedInputStream stream = new BufferedInputStream(file.getContents());
try {
String content = new String(getInputStreamAsCharArray(stream, -1, null));
String srcPath = Util.getWikiTextsPath(file);
String filePath = file.getLocation().toString(); // file.getProjectRelativePath().toString()
if (filePath.startsWith(srcPath)) {
- filePath = filePath.substring(srcPath.length()+1);
+ filePath = filePath.substring(srcPath.length() + 1);
}
createWikiBuffer(templateFileName, htmlBuffer, filePath, content, renderer, completeHTML);
} catch (IOException e) {
* @param content
* @param renderer
*/
- public static void createWikiBuffer(String templateFileName, StringBuffer htmlBuffer, String fileName, String content, IContentRenderer renderer,
- boolean completeHTML) {
+ public static void createWikiBuffer(String templateFileName, StringBuffer htmlBuffer, String fileName, String content,
+ IContentRenderer renderer, boolean completeHTML) {
// calculate the <i>depth</i> of the file (i.e. ../../../ as much as needed)
int index = 0;
int level = 0;
import java.util.Map;
import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
-import net.sourceforge.phpeclipse.wiki.export.WikiExporter;
+import net.sourceforge.phpeclipse.wiki.export.html.WikiHTMLExporter;
import net.sourceforge.phpeclipse.wiki.preferences.Util;
import org.eclipse.core.internal.resources.Folder;
private void fullBuild(IProgressMonitor monitor) throws CoreException, IOException {
try {
- WikiExporter wikiExporter = new WikiExporter();
+ WikiHTMLExporter wikiExporter = new WikiHTMLExporter();
String srcBasePath = Util.getProjectsWikiTextsPath(fProject);
String basePath = Util.getProjectsWikiOutputPath(fProject, WikiEditorPlugin.HTML_OUTPUT_PATH);
wikiExporter.export(fProject, basePath, srcBasePath, monitor);
public class BrowserUtil {
public static void setBrowserPreview(ITextEditor editor) {
+
IWorkbenchPage page = WikiEditorPlugin.getDefault().getActivePage();
try {
IViewPart part = page.findView(BrowserView.ID_BROWSER);
--- /dev/null
+/*
+ * 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.html;
+
+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 WikiHTMLExportWizard extends Wizard implements INewWizard {
+ static final QualifiedName DIRECTORY_QUALIFIED_NAME = new QualifiedName(WikiEditorPlugin.PLUGIN_ID, "exportDirectory");
+
+ private WikiHTMLExportWizardPage page;
+
+ private ISelection selection;
+
+ public WikiHTMLExportWizard() {
+ super();
+ setNeedsProgressMonitor(true);
+ }
+
+ public void addPages() {
+ page = new WikiHTMLExportWizardPage(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 WikiHTMLExporter().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(WikiHTMLExportWizard.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;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.html;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.dialogs.ContainerSelectionDialog;
+
+public final class WikiHTMLExportWizardPage extends WizardPage implements IPropertyChangeListener, SelectionListener {
+ private StringFieldEditor folderText;
+
+ private StringFieldEditor exportDirectoryText;
+
+ private ISelection selection;
+
+ public WikiHTMLExportWizardPage(ISelection selection) {
+ super(WikiEditorPlugin.getResourceString("Export.wizardTitle"));
+ setTitle(WikiEditorPlugin.getResourceString("Export.wizardTitle"));
+ setDescription(WikiEditorPlugin.getResourceString("Export.wizardDescription"));
+ this.selection = selection;
+ }
+
+ public void createControl(Composite parent) {
+ Composite rootComposite = createControlsContainer(parent);
+
+ try {
+ initialize();
+ } catch (RuntimeException rex) {
+ throw rex;
+ } catch (CoreException cex) {
+ WikiEditorPlugin.getDefault().log("", cex);
+ throw new RuntimeException("Caught CoreException. See log for details.");
+ }
+ dialogChanged();
+ setControl(rootComposite);
+ }
+
+ private Composite createControlsContainer(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 1;
+ layout.verticalSpacing = 20;
+ container.setLayout(layout);
+ container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+
+ createCommonControls(container);
+ return container;
+ }
+
+ private void createCommonControls(Composite parent) {
+ Composite container = new Composite(parent, SWT.NULL);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 3;
+ layout.verticalSpacing = 9;
+ container.setLayout(layout);
+ container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+
+ createFolderControls(container);
+ createExportDirectoryControls(container);
+ }
+
+ private void createExportDirectoryControls(Composite container) {
+ exportDirectoryText = addStringFieldEditor(container, WikiEditorPlugin.getResourceString("Export.wizardExportDirectory"));
+
+ Button button = new Button(container, SWT.PUSH);
+ button.setText(WikiEditorPlugin.getResourceString("Export.wizardBrowse"));
+ button.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ handleBrowseHtmlExportLocation();
+ }
+ });
+ }
+
+ private void createFolderControls(Composite container) {
+ folderText = addStringFieldEditor(container, WikiEditorPlugin.getResourceString("Export.wizardFolder"));
+
+ Button button = new Button(container, SWT.PUSH);
+ button.setText(WikiEditorPlugin.getResourceString("Export.wizardBrowse"));
+ button.addSelectionListener(new SelectionAdapter() {
+ public void widgetSelected(SelectionEvent e) {
+ try {
+ handleBrowseFolders();
+ } catch (CoreException cex) {
+ WikiEditorPlugin.getDefault().log("", cex);
+ throw new RuntimeException("Caught CoreException. See log for details.");
+ }
+ }
+ });
+ }
+
+ private StringFieldEditor addStringFieldEditor(Composite container, String labelText) {
+ Label label = new Label(container, SWT.NULL);
+ label.setText(labelText);
+
+ Composite editorComposite = new Composite(container, SWT.NULL);
+ editorComposite.setLayout(new GridLayout());
+ editorComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ StringFieldEditor editor = new StringFieldEditor("", "", editorComposite);
+
+ editor.setPropertyChangeListener(this);
+
+ return editor;
+ }
+
+ private void initialize() throws CoreException {
+ if (selection == null || selection.isEmpty() || !(selection instanceof IStructuredSelection)) {
+ return;
+ }
+
+ IStructuredSelection ssel = (IStructuredSelection) selection;
+ if (ssel.size() == 1) {
+ initialiseFromSelectedObject(ssel.getFirstElement());
+ }
+ }
+
+ private void initialiseFromSelectedObject(Object obj) throws CoreException {
+ if (obj instanceof IFolder || obj instanceof IProject) {
+ initialiseFolder(((IResource) obj));
+ }
+ }
+
+ private void initialiseFolder(IResource resource) throws CoreException {
+ folderText.setStringValue(resource.getFullPath().toString());
+ initialiseExportDirectoryText(resource);
+ }
+
+ private void initialiseExportDirectoryText(IResource resource) throws CoreException {
+ String exportDir = resource.getProject().getPersistentProperty(WikiHTMLExportWizard.DIRECTORY_QUALIFIED_NAME);
+ if (exportDir != null) {
+ exportDirectoryText.setStringValue(exportDir);
+ } else {
+ exportDirectoryText.setStringValue("");
+ }
+ }
+
+ private void handleBrowseHtmlExportLocation() {
+ DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SINGLE | SWT.OPEN);
+ String path = dialog.open();
+ if (path != null) {
+ exportDirectoryText.setStringValue(path);
+ }
+ }
+
+ private void handleBrowseFolders() throws CoreException {
+ ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), false,
+ WikiEditorPlugin.getResourceString("Export.wizardSelectFolder"));
+ if (dialog.open() == Window.OK) {
+ Object[] result = dialog.getResult();
+ if (result != null && result.length == 1) {
+ IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember((IPath) result[0]);
+ if (resource instanceof IFile) {
+ return;
+ }
+ initialiseFolder(resource);
+ }
+ }
+ }
+
+ private void dialogChanged() {
+ if (getFolderText().length() == 0) {
+ updateStatus("Folder must be specified");
+ } else if (getExportDirectoryPath().length() == 0) {
+ updateStatus("Directory must be specified");
+ } else {
+ updateStatus(null);
+ }
+ }
+
+ private void updateStatus(String message) {
+ setErrorMessage(message);
+ setPageComplete(message == null);
+ }
+
+ public String getExportDirectoryPath() {
+ return exportDirectoryText.getStringValue();
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ dialogChanged();
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ dialogChanged();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ dialogChanged();
+ }
+
+ String getFolderText() {
+ return folderText.getStringValue();
+ }
+
+ public IContainer getFolder() {
+ return (IContainer) ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(getFolderText()));
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.sourceforge.phpeclipse.wiki.export.html;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.FileReader;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.nio.MappedByteBuffer;
+import java.nio.channels.FileChannel;
+import java.util.TreeSet;
+
+import net.sourceforge.phpeclipse.wiki.builder.CreatePageAction;
+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.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+
+//import de.java2html.converter.JavaSource2HTMLConverter;
+//import de.java2html.javasource.JavaSource;
+//import de.java2html.javasource.JavaSourceParser;
+//import de.java2html.options.Java2HtmlConversionOptions;
+
+public final class WikiHTMLExporter {
+
+ public static final String HTML_EXTENSION = ".html";
+
+ public static final String WORKSPACE = "workspace";
+
+ // private File exportDirectory;
+
+ // private ExportLinkMaker exportLinkMaker;
+ private TreeSet index;
+
+ public WikiHTMLExporter() {
+ // exportLinkMaker = new ExportLinkMaker();
+ index = new TreeSet(String.CASE_INSENSITIVE_ORDER);
+ }
+
+ public void export(IContainer folder, String exportDirectoryName, String srcBasePath, IProgressMonitor monitor) throws IOException, CoreException,
+ InstantiationException, IllegalAccessException, ClassNotFoundException {
+ // exportDirectory = new File(exportDirectoryName);
+ IResource[] resources = folder.members(IResource.FILE);
+ String templateFileName = Util.getExportTemplate(folder);
+// monitor.beginTask(WikiEditorPlugin.getResourceString("Export.wikiPages"), resources.length + 1);
+ for (int i = 0; i < resources.length; i++) {
+ if (resources[i] instanceof IFile) {
+ monitor.subTask(WikiEditorPlugin.getResourceString("Export.exportFile")+resources[i].getLocation());
+ CreatePageAction.createPage(templateFileName, (IFile) resources[i], exportDirectoryName, srcBasePath);
+ monitor.worked(1);
+ } else if (resources[i] instanceof IFolder) {
+ monitor.subTask(WikiEditorPlugin.getResourceString("Export.exportFolder")+resources[i].getLocation());
+ export((IFolder) resources[i], exportDirectoryName, srcBasePath, monitor);
+ monitor.worked(1);
+ }
+ }
+ }
+
+ private void copy(File source, File dest) throws IOException {
+ FileChannel in = null;
+ FileChannel out = null;
+ try {
+ in = new FileInputStream(source).getChannel();
+ out = new FileOutputStream(dest).getChannel();
+ long size = in.size();
+ MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
+ out.write(buf);
+ } finally {
+ if (in != null) {
+ in.close();
+ }
+ if (out != null) {
+ out.close();
+ }
+ }
+ }
+
+ private boolean isWikiFile(IResource resource) {
+ return resource instanceof IFile && resource.getFileExtension().equals("wp");
+ }
+
+ // private File createHtmlFile(String name) {
+ // return new File(exportDirectory, name + WikiPDFExporter.HTML_EXTENSION);
+ // }
+}
\ No newline at end of file
--- /dev/null
+package net.sourceforge.phpeclipse.wiki.export.pdf;
+
+import java.util.Comparator;
+
+import org.eclipse.core.resources.IFile;
+
+
+public class IFileComparator implements Comparator {
+
+ /* (non-Javadoc)
+ * @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
+ */
+ public int compare(Object o1, Object o2) {
+ if (o1 instanceof IFile && o2 instanceof IFile) {
+ IFile f1 = (IFile) o1;
+ IFile f2 = (IFile) o2;
+ return f1.getName().compareTo(f2.getName());
+ }
+ return 0;
+ }
+}
--- /dev/null
+package net.sourceforge.phpeclipse.wiki.export.pdf;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceVisitor;
+import org.eclipse.core.runtime.CoreException;
+
+public class WikiFilesVisitor implements IResourceVisitor {
+ List list;
+
+ public WikiFilesVisitor() {
+ list = new ArrayList(100);
+ }
+
+ public boolean visit(IResource resource) {
+ switch (resource.getType()) {
+ case IResource.FILE:
+ if (resource.getFileExtension().equalsIgnoreCase(WikiEditorPlugin.WP_EXTENSION)) {
+ list.add(resource);
+ }
+ break;
+// case IResource.FOLDER:
+// try {
+// resource.accept(this);
+// } catch (CoreException e) {
+// e.printStackTrace();
+// }
+// break;
+ }
+ return true;
+ }
+ /**
+ * @return Returns the list.
+ */
+ public List getList() {
+ return list;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.pdf;
+
+import java.io.File;
+import java.lang.reflect.InvocationTargetException;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.QualifiedName;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+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 WikiPDFExportWizard extends Wizard implements INewWizard {
+ static final QualifiedName DIRECTORY_QUALIFIED_NAME = new QualifiedName(WikiEditorPlugin.PLUGIN_ID, "exportDirectory");
+
+ private WikiPDFExportWizardPage page;
+
+ private IStructuredSelection selection;
+
+ public WikiPDFExportWizard() {
+ super();
+ setNeedsProgressMonitor(true);
+ }
+
+ public void addPages() {
+ page = new WikiPDFExportWizardPage(selection);
+ addPage(page);
+ }
+
+ public boolean performFinish() {
+ return page.finish();
+ }
+
+ 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 persistExportProperties() {
+ IProject project = page.getFolder().getProject();
+ try {
+ project.setPersistentProperty(WikiPDFExportWizard.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;
+ }
+}
\ No newline at end of file
--- /dev/null
+/*
+ * 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.pdf;
+
+import java.lang.reflect.InvocationTargetException;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.core.resources.IContainer;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IFolder;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.jface.dialogs.ErrorDialog;
+import org.eclipse.jface.dialogs.IDialogSettings;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.preference.StringFieldEditor;
+import org.eclipse.jface.util.IPropertyChangeListener;
+import org.eclipse.jface.util.PropertyChangeEvent;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.window.Window;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.graphics.Font;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Combo;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.DirectoryDialog;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.FileDialog;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Widget;
+import org.eclipse.ui.dialogs.ContainerSelectionDialog;
+import org.eclipse.ui.dialogs.WizardExportResourcesPage;
+import org.eclipse.ui.internal.ide.IDEWorkbenchMessages;
+
+public final class WikiPDFExportWizardPage extends WizardExportResourcesPage implements IPropertyChangeListener, SelectionListener {
+ private StringFieldEditor folderText;
+
+ private static final String[] PDF_EXTENSION = { "pdf" };
+
+ //dialog store id constants
+ private static final String STORE_DESTINATION_NAMES_ID = "WikiPDFExportWizardPage.STORE_DESTINATION_NAMES_ID"; //$NON-NLS-1$
+
+ private static final String STORE_OVERWRITE_EXISTING_FILES_ID = "WikiPDFExportWizardPage.STORE_OVERWRITE_EXISTING_FILES_ID"; //$NON-NLS-1$
+
+ private StringFieldEditor exportFileText;
+
+ private Combo destinationNameField;
+
+ private Button destinationBrowseButton;
+
+ protected Button overwriteExistingFilesCheckbox;
+
+ private ISelection selection;
+
+ public WikiPDFExportWizardPage(IStructuredSelection selection) {
+ super(WikiEditorPlugin.getResourceString("Export.wizardTitle"), selection);
+ setTitle(WikiEditorPlugin.getResourceString("Export.wizardTitle"));
+ setDescription(WikiEditorPlugin.getResourceString("Export.wizardDescription"));
+ this.selection = selection;
+ }
+
+ /**
+ * Create the export destination specification widgets
+ *
+ * @param parent
+ * org.eclipse.swt.widgets.Composite
+ */
+ protected void createDestinationGroup(Composite parent) {
+
+ Font font = parent.getFont();
+ // destination specification group
+ Composite destinationSelectionGroup = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ layout.numColumns = 3;
+ destinationSelectionGroup.setLayout(layout);
+ destinationSelectionGroup.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
+ destinationSelectionGroup.setFont(font);
+
+ Label destinationLabel = new Label(destinationSelectionGroup, SWT.NONE);
+ destinationLabel.setText("PDF output filename:");
+ destinationLabel.setFont(font);
+
+ // destination name entry field
+ destinationNameField = new Combo(destinationSelectionGroup, SWT.SINGLE | SWT.BORDER);
+ destinationNameField.addListener(SWT.Modify, this);
+ destinationNameField.addListener(SWT.Selection, this);
+ GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
+ data.widthHint = SIZING_TEXT_FIELD_WIDTH;
+ destinationNameField.setLayoutData(data);
+ destinationNameField.setFont(font);
+
+ // destination browse button
+ destinationBrowseButton = new Button(destinationSelectionGroup, SWT.PUSH);
+ destinationBrowseButton.setText("Browse..."); //$NON-NLS-1$
+ destinationBrowseButton.addListener(SWT.Selection, this);
+ destinationBrowseButton.setFont(font);
+ setButtonLayoutData(destinationBrowseButton);
+
+ new Label(parent, SWT.NONE); // vertical spacer
+ }
+ /**
+ * Create the options specification widgets.
+ *
+ * @param parent org.eclipse.swt.widgets.Composite
+ */
+ protected void createOptionsGroup(Composite parent) {
+ // options group
+ Group optionsGroup = new Group(parent, SWT.NONE);
+ GridLayout layout = new GridLayout();
+ optionsGroup.setLayout(layout);
+ optionsGroup.setLayoutData(
+ new GridData(
+ GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ optionsGroup.setText(IDEWorkbenchMessages.getString("WizardExportPage.options")); //$NON-NLS-1$
+ optionsGroup.setFont(parent.getFont());
+
+ createOptionsGroupButtons(optionsGroup);
+
+ }
+ /**
+ * Create the buttons in the options group.
+ */
+
+ protected void createOptionsGroupButtons(Group optionsGroup) {
+
+ Font font = optionsGroup.getFont();
+ createOverwriteExisting(optionsGroup, font);
+
+// createDirectoryStructureOptions(optionsGroup, font);
+ }
+ /**
+ * Create the button for checking if we should ask if we are going to overwrite existing files.
+ *
+ * @param optionsGroup
+ * @param font
+ */
+ protected void createOverwriteExisting(Group optionsGroup, Font font) {
+ // overwrite... checkbox
+ overwriteExistingFilesCheckbox = new Button(optionsGroup, SWT.CHECK | SWT.LEFT);
+ overwriteExistingFilesCheckbox.setText("Overwrite existing files"); //$NON-NLS-1$
+ overwriteExistingFilesCheckbox.setFont(font);
+ }
+
+ /**
+ * Handle all events and enablements for widgets in this page
+ *
+ * @param e
+ * Event
+ */
+ public void handleEvent(Event e) {
+ Widget source = e.widget;
+
+ if (source == destinationBrowseButton)
+ handleDestinationBrowseButtonPressed();
+
+ updatePageCompletion();
+ }
+
+ /**
+ * Open an appropriate destination browser so that the user can specify a source to import from
+ */
+ protected void handleDestinationBrowseButtonPressed() {
+ DirectoryDialog dialog = new DirectoryDialog(getContainer().getShell(), SWT.SAVE);
+ dialog.setMessage("Select destination");
+ dialog.setText("Select title");
+ dialog.setFilterPath(getDestinationValue());
+ String selectedDirectoryName = dialog.open();
+
+ if (selectedDirectoryName != null) {
+ setErrorMessage(null);
+ setDestinationValue(selectedDirectoryName);
+ }
+ }
+
+ /**
+ * Answer the contents of self's destination specification widget
+ *
+ * @return java.lang.String
+ */
+ protected String getDestinationValue() {
+ return destinationNameField.getText().trim();
+ }
+
+ /**
+ * Set the contents of the receivers destination specification widget to the passed value
+ *
+ */
+ protected void setDestinationValue(String value) {
+ destinationNameField.setText(value);
+ }
+
+ /**
+ * Hook method for saving widget values for restoration by the next instance of this class.
+ */
+ protected void internalSaveWidgetValues() {
+ // update directory names history
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ String[] directoryNames = settings.getArray(STORE_DESTINATION_NAMES_ID);
+ if (directoryNames == null)
+ directoryNames = new String[0];
+
+ directoryNames = addToHistory(directoryNames, getDestinationValue());
+ settings.put(STORE_DESTINATION_NAMES_ID, directoryNames);
+
+ // options
+ settings.put(STORE_OVERWRITE_EXISTING_FILES_ID, overwriteExistingFilesCheckbox.getSelection());
+
+ // settings.put(
+ // STORE_CREATE_STRUCTURE_ID,
+ // createDirectoryStructureButton.getSelection());
+
+ }
+ }
+
+ /**
+ * Hook method for restoring widget values to the values that they held last time this wizard was used to completion.
+ */
+ protected void restoreWidgetValues() {
+ IDialogSettings settings = getDialogSettings();
+ if (settings != null) {
+ String[] directoryNames = settings.getArray(STORE_DESTINATION_NAMES_ID);
+ if (directoryNames == null)
+ return; // ie.- no settings stored
+
+ // destination
+ setDestinationValue(directoryNames[0]);
+ for (int i = 0; i < directoryNames.length; i++)
+ addDestinationItem(directoryNames[i]);
+
+ // options
+ overwriteExistingFilesCheckbox.setSelection(settings.getBoolean(STORE_OVERWRITE_EXISTING_FILES_ID));
+
+ // boolean createDirectories =
+ // settings.getBoolean(STORE_CREATE_STRUCTURE_ID);
+ // createDirectoryStructureButton.setSelection(createDirectories);
+ // createSelectionOnlyButton.setSelection(!createDirectories);
+ }
+ }
+ /**
+ * Add the passed value to self's destination widget's history
+ *
+ * @param value java.lang.String
+ */
+ protected void addDestinationItem(String value) {
+ destinationNameField.add(value);
+ }
+ /**
+ * (non-Javadoc) Method declared on IDialogPage.
+ */
+ public void createControl(Composite parent) {
+ super.createControl(parent);
+ giveFocusToDestination();
+ // WorkbenchHelp.setHelp(
+ // getControl(),
+ // IDataTransferHelpContextIds.FILE_SYSTEM_EXPORT_WIZARD_PAGE);
+ }
+
+ /**
+ * Set the current input focus to self's destination entry field
+ */
+ protected void giveFocusToDestination() {
+ destinationNameField.setFocus();
+ }
+
+ // private Composite createControlsContainer(Composite parent) {
+ // Composite container = new Composite(parent, SWT.NULL);
+ // GridLayout layout = new GridLayout();
+ // layout.numColumns = 1;
+ // layout.verticalSpacing = 20;
+ // container.setLayout(layout);
+ // container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ //
+ // createCommonControls(container);
+ // return container;
+ // }
+
+ // private void createCommonControls(Composite parent) {
+ // Composite container = new Composite(parent, SWT.NULL);
+ // GridLayout layout = new GridLayout();
+ // layout.numColumns = 3;
+ // layout.verticalSpacing = 9;
+ // container.setLayout(layout);
+ // container.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ //
+ // createFolderControls(container);
+ // createExportDirectoryControls(container);
+ // }
+
+ // private void createExportDirectoryControls(Composite container) {
+ // exportFileText = addStringFieldEditor(container, WikiEditorPlugin.getResourceString("Export.wizardExportDirectory"));
+ //
+ // Button button = new Button(container, SWT.PUSH);
+ // button.setText(WikiEditorPlugin.getResourceString("Export.wizardBrowse"));
+ // button.addSelectionListener(new SelectionAdapter() {
+ // public void widgetSelected(SelectionEvent e) {
+ // handleBrowseHtmlExportLocation();
+ // }
+ // });
+ // }
+
+ // private void createFolderControls(Composite container) {
+ // folderText = addStringFieldEditor(container, WikiEditorPlugin.getResourceString("Export.wizardFolder"));
+ //
+ // Button button = new Button(container, SWT.PUSH);
+ // button.setText(WikiEditorPlugin.getResourceString("Export.wizardBrowse"));
+ // button.addSelectionListener(new SelectionAdapter() {
+ // public void widgetSelected(SelectionEvent e) {
+ // try {
+ // handleBrowseFolders();
+ // } catch (CoreException cex) {
+ // WikiEditorPlugin.getDefault().log("", cex);
+ // throw new RuntimeException("Caught CoreException. See log for details.");
+ // }
+ // }
+ // });
+ // }
+
+ // private StringFieldEditor addStringFieldEditor(Composite container, String labelText) {
+ // Label label = new Label(container, SWT.NULL);
+ // label.setText(labelText);
+ //
+ // Composite editorComposite = new Composite(container, SWT.NULL);
+ // editorComposite.setLayout(new GridLayout());
+ // editorComposite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL));
+ // StringFieldEditor editor = new StringFieldEditor("", "", editorComposite);
+ //
+ // editor.setPropertyChangeListener(this);
+ //
+ // return editor;
+ // }
+
+ private void initialize() throws CoreException {
+ if (selection == null || selection.isEmpty() || !(selection instanceof IStructuredSelection)) {
+ return;
+ }
+
+ IStructuredSelection ssel = (IStructuredSelection) selection;
+ if (ssel.size() == 1) {
+ initialiseFromSelectedObject(ssel.getFirstElement());
+ }
+ }
+
+ private void initialiseFromSelectedObject(Object obj) throws CoreException {
+ if (obj instanceof IFolder || obj instanceof IProject) {
+ initialiseFolder(((IResource) obj));
+ }
+ }
+
+ private void initialiseFolder(IResource resource) throws CoreException {
+ folderText.setStringValue(resource.getFullPath().toString());
+ initialiseExportDirectoryText(resource);
+ }
+
+ private void initialiseExportDirectoryText(IResource resource) throws CoreException {
+ String exportDir = resource.getProject().getPersistentProperty(WikiPDFExportWizard.DIRECTORY_QUALIFIED_NAME);
+ if (exportDir != null) {
+ exportFileText.setStringValue(exportDir);
+ } else {
+ exportFileText.setStringValue("");
+ }
+ }
+
+ private void handleBrowseHtmlExportLocation() {
+ FileDialog dialog = new FileDialog(getShell(), SWT.SINGLE | SWT.OPEN);
+ dialog.setFilterExtensions(PDF_EXTENSION);
+ String path = dialog.open();
+ if (path != null) {
+ exportFileText.setStringValue(path);
+ }
+ }
+
+ private void handleBrowseFolders() throws CoreException {
+ ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), ResourcesPlugin.getWorkspace().getRoot(), false,
+ WikiEditorPlugin.getResourceString("Export.wizardSelectFolder"));
+ if (dialog.open() == Window.OK) {
+ Object[] result = dialog.getResult();
+ if (result != null && result.length == 1) {
+ IResource resource = ResourcesPlugin.getWorkspace().getRoot().findMember((IPath) result[0]);
+ if (resource instanceof IFile) {
+ return;
+ }
+ initialiseFolder(resource);
+ }
+ }
+ }
+
+ private void dialogChanged() {
+ if (getFolderText().length() == 0) {
+ updateStatus("Folder must be specified");
+ } else if (getExportDirectoryPath().length() == 0) {
+ updateStatus("Directory must be specified");
+ } else {
+ updateStatus(null);
+ }
+ }
+
+ private void updateStatus(String message) {
+ setErrorMessage(message);
+ setPageComplete(message == null);
+ }
+
+ public String getExportDirectoryPath() {
+ return exportFileText.getStringValue();
+ }
+
+ public void propertyChange(PropertyChangeEvent event) {
+ dialogChanged();
+ }
+
+ public void widgetSelected(SelectionEvent e) {
+ dialogChanged();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ dialogChanged();
+ }
+
+ String getFolderText() {
+ return folderText.getStringValue();
+ }
+
+ public IContainer getFolder() {
+ return (IContainer) ResourcesPlugin.getWorkspace().getRoot().findMember(new Path(getFolderText()));
+ }
+
+ protected boolean executeExportOperation(WikiPDFExporter op) {
+ // op.setCreateLeadupStructure(
+ // createDirectoryStructureButton.getSelection());
+ op.setOverwriteFiles(overwriteExistingFilesCheckbox.getSelection());
+
+ try {
+ getContainer().run(true, true, op);
+ } catch (InterruptedException e) {
+ return true;
+ } catch (InvocationTargetException e) {
+ displayErrorDialog(e.getTargetException());
+ return true;
+ }
+
+ IStatus status = op.getStatus();
+ if (!status.isOK()) {
+ ErrorDialog.openError(getContainer().getShell(), "PDF export problems", //$NON-NLS-1$
+ null, // no special message
+ status);
+ return true;
+ }
+
+ return true;
+ }
+
+ /**
+ * The Finish button was pressed. Try to do the required work now and answer a boolean indicating success. If false is returned
+ * then the wizard will not close.
+ *
+ * @return boolean
+ */
+ public boolean finish() {
+ // if (!ensureTargetIsValid(new File(getDestinationValue())))
+ // return false;
+
+ List resourcesToExport = getWhiteCheckedResources();
+
+ //Save dirty editors if possible but do not stop if not all are saved
+ saveDirtyEditors();
+ // about to invoke the operation so save our state
+ saveWidgetValues();
+
+ if (resourcesToExport.size() > 0)
+ return executeExportOperation(new WikiPDFExporter(resourcesToExport, getDestinationValue(), this));
+
+ MessageDialog.openInformation(getContainer().getShell(), "PDF export", //$NON-NLS-1$
+ "No file selected"); //$NON-NLS-1$
+
+ return false;
+ }
+}
\ No newline at end of file
--- /dev/null
+package net.sourceforge.phpeclipse.wiki.export.pdf;
+
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.StringReader;
+import java.lang.reflect.InvocationTargetException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import net.sourceforge.phpeclipse.wiki.builder.CreatePageAction;
+import net.sourceforge.phpeclipse.wiki.editor.WikiEditorPlugin;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.MultiStatus;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.dialogs.IOverwriteQuery;
+
+import com.lowagie.text.Document;
+import com.lowagie.text.DocumentException;
+import com.lowagie.text.html.HtmlParser;
+import com.lowagie.text.pdf.PdfWriter;
+
+//import de.java2html.converter.JavaSource2HTMLConverter;
+//import de.java2html.javasource.JavaSource;
+//import de.java2html.javasource.JavaSourceParser;
+//import de.java2html.options.Java2HtmlConversionOptions;
+
+public final class WikiPDFExporter implements IRunnableWithProgress {
+ //The constants for the overwrite 3 state
+ private static final int OVERWRITE_NOT_SET = 0;
+
+ private static final int OVERWRITE_NONE = 1;
+
+ private static final int OVERWRITE_ALL = 2;
+
+ private int overwriteState = OVERWRITE_NOT_SET;
+
+ private List errorTable = new ArrayList(1);
+
+ private List fResourcesToExport;
+
+ private IPath fPath;
+
+ private IOverwriteQuery fOverwriteCallback;
+
+ public WikiPDFExporter(List resources, String destinationPath, IOverwriteQuery overwriteImplementor) {
+ super();
+ fResourcesToExport = resources;
+ fPath = new Path(destinationPath);
+ fOverwriteCallback = overwriteImplementor;
+ }
+
+ // public void export(IContainer folder, String exportDirectoryName, String srcBasePath, IProgressMonitor monitor) throws
+ // IOException, CoreException,
+ // InstantiationException, IllegalAccessException, ClassNotFoundException {
+ // // exportDirectory = new File(exportDirectoryName);
+ // IResource[] resources = folder.members(IResource.FILE);
+ // String templateFileName = Util.getExportTemplate(folder);
+ //// monitor.beginTask(WikiEditorPlugin.getResourceString("Export.wikiPages"), resources.length + 1);
+ // for (int i = 0; i < resources.length; i++) {
+ // if (resources[i] instanceof IFile) {
+ // monitor.subTask(WikiEditorPlugin.getResourceString("Export.exportFile")+resources[i].getLocation());
+ // CreatePageAction.createPage(templateFileName, (IFile) resources[i], exportDirectoryName, srcBasePath);
+ // monitor.worked(1);
+ // } else if (resources[i] instanceof IFolder) {
+ // monitor.subTask(WikiEditorPlugin.getResourceString("Export.exportFolder")+resources[i].getLocation());
+ // export((IFolder) resources[i], exportDirectoryName, srcBasePath, monitor);
+ // monitor.worked(1);
+ // }
+ // }
+ // // monitor.subTask(WikiEditorPlugin.getResourceString("Export.linkedResources"));
+ // // exportLinkedResources();
+ // // createIndex();
+ //// monitor.worked(1);
+ // }
+
+ /**
+ * TODO: This is a horrible hack for a quick solution.
+ */
+ // private void createIndex() throws IOException {
+ // File indexFile = createHtmlFile("index");
+ //
+ // PrintWriter writer = new PrintWriter(new FileWriter(indexFile));
+ // writer.println("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");
+ // writer.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01//EN\" \"http://www.w3.org/TR/html4/strict.dtd\">");
+ // writer.println("<html>");
+ // writer.println(" <head>");
+ // writer.print(" <title>Index</title>");
+ // writer.println(" </head>");
+ // writer.println(" <body>");
+ //
+ // Iterator iterator = index.iterator();
+ // while (iterator.hasNext()) {
+ // String name = (String) iterator.next();
+ // writer.print(" <br/>");
+ // writer.println("<a href=\"" + name + ".html\">" + name + "</a>");
+ // }
+ //
+ // writer.println(" </body>");
+ // writer.println(" </html>");
+ // writer.flush();
+ // writer.close();
+ // }
+ // private void exportLinkedResources() throws IOException {
+ // if (!exportLinkMaker.hasLinkedDocuments()) {
+ // return;
+ // }
+ // File workspaceExport = new File(exportDirectory, WikiPDFExporter.WORKSPACE);
+ // if (!workspaceExport.exists()) {
+ // workspaceExport.mkdir();
+ // }
+ // HashMap map = exportLinkMaker.getLinkedResources();
+ // Iterator iterator = map.keySet().iterator();
+ // while (iterator.hasNext()) {
+ // IResource resource = (IResource) iterator.next();
+ // String location = (String) map.get(resource);
+ // export(resource, location);
+ // }
+ // }
+ // private void export(IResource resource, String location) throws IOException {
+ // File destination = new File(exportDirectory, location);
+ //
+ // if (destination.isDirectory()) {
+ // return;
+ // }
+ // if (!destination.exists()) {
+ // destination.getParentFile().mkdirs();
+ // }
+ // File source = new File(resource.getLocation().toString());
+ // if (isJavaResource(resource)) {
+ // javaToHtml(source, new File(destination.getParentFile(), destination.getName()));
+ // } else {
+ // copy(source, destination);
+ // }
+ // }
+ // private boolean isJavaResource(IResource resource) {
+ // return "java".equals(resource.getFileExtension());
+ // }
+ // private void javaToHtml(File source, File destination) throws IOException {
+ // JavaSource java = new JavaSourceParser().parse(new FileReader(source));
+ // JavaSource2HTMLConverter converter = new JavaSource2HTMLConverter(java);
+ // Java2HtmlConversionOptions options = Java2HtmlConversionOptions.getDefault();
+ // options.setShowLineNumbers(true);
+ // options.setShowFileName(true);
+ // options.setShowJava2HtmlLink(true);
+ // converter.setConversionOptions(options);
+ // FileWriter writer = new FileWriter(destination);
+ // converter.convert(writer);
+ // writer.flush();
+ // writer.close();
+ // }
+ // private void copy(File source, File dest) throws IOException {
+ // FileChannel in = null;
+ // FileChannel out = null;
+ // try {
+ // in = new FileInputStream(source).getChannel();
+ // out = new FileOutputStream(dest).getChannel();
+ // long size = in.size();
+ // MappedByteBuffer buf = in.map(FileChannel.MapMode.READ_ONLY, 0, size);
+ // out.write(buf);
+ // } finally {
+ // if (in != null) {
+ // in.close();
+ // }
+ // if (out != null) {
+ // out.close();
+ // }
+ // }
+ // }
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.operation.IRunnableWithProgress#run(org.eclipse.core.runtime.IProgressMonitor)
+ */
+public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+
+ WikiFilesVisitor visitor = new WikiFilesVisitor();
+ for (int i = 0; i < fResourcesToExport.size(); i++) {
+ try {
+ ((IResource) fResourcesToExport.get(i)).accept(visitor);
+ } catch (CoreException e) {
+ e.printStackTrace();
+ }
+ }
+
+ List list = visitor.getList();
+ Collections.sort(list, new IFileComparator());
+ IFile file;
+ StringBuffer htmlBuffer = new StringBuffer();
+ htmlBuffer.append("<html><head></head><body>");
+ for (int i = 0; i < list.size(); i++) {
+ try {
+ file = (IFile) list.get(i);
+ monitor.subTask(WikiEditorPlugin.getResourceString("Export.exportFile") + file.getLocation());
+ System.out.println(file.getLocation().toString());
+ // TODO add the real title here:
+ htmlBuffer.append("<h2>"+file.getName()+"</h2><br/>");
+ CreatePageAction.createFragmentPage(file, htmlBuffer);
+ if (i < list.size()-1) {
+// TODO create a boolean flag to determine, if we would like a new page or only horizontal ruler
+ htmlBuffer.append("<hr/>");
+ }
+ System.out.println(htmlBuffer.toString());
+ // CreatePageAction.createPage(templateFileName, (IFile) resources[i], exportDirectoryName, srcBasePath);
+ monitor.worked(1);
+ } catch (Exception e) {
+ addError("PDF export exception", e);
+ }
+ }
+ htmlBuffer.append("</body></html>");
+
+ StringReader stream = null;
+ String pdffilename = fPath.toString();
+ FileOutputStream os = null;
+ try {
+
+ HtmlParser parser = new HtmlParser();
+ Document document = new Document();
+ document.open();
+ os = new FileOutputStream(pdffilename);
+ monitor.subTask("Generating PDF file: "+pdffilename);
+ stream = new StringReader(htmlBuffer.toString());
+ PdfWriter pdfWriter = PdfWriter.getInstance(document, os);
+// pdfWriter.s
+ parser.go(document, stream);
+ } catch (FileNotFoundException e) {
+ e.printStackTrace();
+ } catch (Exception e) {
+ e.printStackTrace();
+ } finally {
+ if (stream!=null) {
+ stream.close();
+ }
+ if (os!=null) {
+ try {
+ os.close();
+ } catch (IOException e1) {
+ }
+ }
+ }
+
+ System.out.println(fPath.toString());
+ }
+ /**
+ * Add a new entry to the error table with the passed information
+ */
+ protected void addError(String message, Throwable e) {
+ errorTable.add(new Status(IStatus.ERROR, PlatformUI.PLUGIN_ID, 0, message, e));
+ }
+
+ /**
+ * Set this boolean indicating whether exported resources should automatically overwrite existing files when a conflict occurs. If
+ * not query the user.
+ *
+ * @param value
+ * boolean
+ */
+ public void setOverwriteFiles(boolean value) {
+ if (value)
+ overwriteState = OVERWRITE_ALL;
+ }
+
+ /**
+ * Returns the status of the export operation. If there were any errors, the result is a status object containing individual
+ * status objects for each error. If there were no errors, the result is a status object with error code <code>OK</code>.
+ *
+ * @return the status
+ */
+ public IStatus getStatus() {
+ IStatus[] errors = new IStatus[errorTable.size()];
+ errorTable.toArray(errors);
+ return new MultiStatus(PlatformUI.PLUGIN_ID, IStatus.OK, errors, "PDF export problems occured", //$NON-NLS-1$
+ null);
+ }
+
+ // test
+// public static void main(String[] args) {
+// try {
+// HtmlParser parser = new HtmlParser();
+// Document document = new Document();
+// String htmlfilename = "C:/eclipse/wikibooks/wpbin/Synästhesie.html";
+// String pdffilename = "C:/eclipse/wikibooks/wpbin/code_java1.pdf";
+//
+// PdfWriter.getInstance(document, new FileOutputStream(pdffilename));
+// parser.go(document, htmlfilename);
+// } catch (FileNotFoundException e) {
+// e.printStackTrace();
+// } catch (DocumentException e) {
+// e.printStackTrace();
+// }
+// }
+}
\ No newline at end of file