package org.erlide.cover.ui.actions; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import org.eclipse.jface.action.Action; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.erlide.cover.core.Logger; import org.erlide.cover.ui.Activator; import org.erlide.cover.ui.CoverageHelper; import org.erlide.cover.ui.views.util.ReportGenerator; import org.erlide.cover.views.model.ICoverageObject; import org.erlide.cover.views.model.ObjectType; import org.erlide.cover.views.model.StatsTreeModel; import org.erlide.util.ErlLogger; /** * Exports HTML reports * * @author Aleksandra Lipiec <aleksandra.lipiec@erlang-solutions.com> * */ public class ExportReports extends Action { private final Shell shell; private final Logger log = Activator.getDefault(); public ExportReports(final Shell shell) { this.shell = shell; } @Override public void run() { final FileDialog fd = new FileDialog(shell, SWT.SAVE); fd.setText("Select directory to export your HTML reports"); fd.setFilterExtensions(new String[] { "*.*" }); final String path = fd.open(); log.info(path); if (path == null) { return; } final File report = new File(path); report.mkdir(); treeSave(StatsTreeModel.getInstance().getRoot(), path, path); } // saves reports as a tree private void treeSave(final ICoverageObject obj, final String path, final String lPath) { final String pathIn = obj.getHtmlPath(); final String pathOut = new StringBuffer(path).append(File.separator) .append(obj.getLabel()).append(".html").toString(); log.info("pathOut"); obj.setRelativePath(new StringBuffer(lPath).append(File.separator) .append(obj.getLabel()).append(".html").toString()); if (!obj.getType().equals(ObjectType.MODULE)) { final String linkPath = new StringBuilder(".").append(File.separator) .append(obj.getLabel()).toString(); final String dirPath = new StringBuilder(path).append(File.separator) .append(obj.getLabel()).toString(); final File dir = new File(dirPath); dir.mkdir(); for (final ICoverageObject child : obj.getChildren()) { treeSave(child, dirPath, linkPath); } try { final String report = ReportGenerator.getInstance().getHTMLreport(obj, true); log.info(report); try (final FileWriter writer = new FileWriter(pathOut)) { writer.write(report); } obj.setHtmlPath(pathOut); } catch (final IOException e) { ErlLogger.error(e); } } else { final File input = new File(pathIn); final File output = new File(pathOut); try (final FileReader in = new FileReader(input); final FileWriter out = new FileWriter(output)) { int c; while ((c = in.read()) != -1) { out.write(c); } } catch (final IOException e) { CoverageHelper.reportError("Could not export HTML reports"); ErlLogger.error(e); } } } }