package net.sourceforge.phpeclipse.wiki.export; 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 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 WikiExporter { public static final String HTML_EXTENSION = ".html"; public static final String WORKSPACE = "workspace"; // private File exportDirectory; // private ExportLinkMaker exportLinkMaker; private TreeSet index; public WikiExporter() { // 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); // 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((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(""); // writer.println(""); // writer.println(""); // writer.println(" "); // writer.print(" Index"); // writer.println(" "); // writer.println(" "); // // Iterator iterator = index.iterator(); // while (iterator.hasNext()) { // String name = (String) iterator.next(); // writer.print("
"); // writer.println("" + name + ""); // } // // writer.println(" "); // writer.println(" "); // writer.flush(); // writer.close(); // } // private void exportLinkedResources() throws IOException { // if (!exportLinkMaker.hasLinkedDocuments()) { // return; // } // File workspaceExport = new File(exportDirectory, WikiExporter.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(); } } } private boolean isWikiFile(IResource resource) { return resource instanceof IFile && resource.getFileExtension().equals("wp"); } // private File createHtmlFile(String name) { // return new File(exportDirectory, name + WikiExporter.HTML_EXTENSION); // } }