package de.ugoe.cs.swe.bnftools.ui.formatter; import java.io.BufferedWriter; import java.io.File; import java.io.FileInputStream; import java.io.FileWriter; import java.io.IOException; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.runtime.Platform; import org.eclipse.emf.ecore.EObject; import org.eclipse.ui.PlatformUI; import org.eclipse.xtext.parsetree.NodeAdapter; import org.eclipse.xtext.parsetree.NodeUtil; import org.eclipse.xtext.ui.editor.XtextEditor; import org.eclipse.xtext.ui.editor.model.XtextDocument; import org.osgi.framework.Bundle; import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder; public class HtmlFormatterHandler extends AbstractHandler { public Object execute(ExecutionEvent event) throws ExecutionException { XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench() .getActiveWorkbenchWindow().getActivePage().getActiveEditor(); // TODO: better error handling if (!(editor.getDocument() instanceof XtextDocument)) { return null; } XtextDocument doc = (XtextDocument) editor.getDocument(); IContainer parent = editor.getResource().getParent(); EObject root = doc.readOnly(new RootEObjectFinder()); NodeAdapter rootNode = NodeUtil.getNodeAdapter(root); FormatterConfig config = new FormatterConfig(); EbnfHtmlFormatterVisitor visitor = new EbnfHtmlFormatterVisitor( rootNode.getParserNode().getElement(), config); visitor.accept(); Bundle bundle = Platform.getBundle("de.ugoe.cs.swe.bnftools.ebnf.ui"); String bundlePath = bundle.getLocation().replaceAll("reference:file:",""); String resourcePath = bundle.getResource("resources/html-header.html").getPath(); String result = ""; try { result = readFileAsString(bundlePath + resourcePath); } catch (IOException e) { } result = result + visitor.getBuf(); // System.out.println(visitor.getBuf()); String filename = editor.getResource().getLocation().toPortableString().toString() + ".html"; // System.out.println(filename); writeFile(result, filename); return null; } private String readFileAsString(String filePath) throws java.io.IOException{ byte[] buffer = new byte[(int) new File(filePath).length()]; FileInputStream f = new FileInputStream(filePath); f.read(buffer); return new String(buffer); } private void writeFile(String str, String filename) { try { FileWriter fstream = new FileWriter(filename); BufferedWriter out = new BufferedWriter(fstream); out.write(str); out.close(); } catch (Exception e) {// Catch exception if any System.err.println("Error: " + e.getMessage()); } } }