From 8217d73384dd10e8558e0a24c7202d5182012275 Mon Sep 17 00:00:00 2001 From: Tuukka Lehtonen Date: Sun, 23 Apr 2017 16:20:27 +0300 Subject: [PATCH] Export also dynamic issues to issue CSV export file refs #7167 Change-Id: I8070697535fb0f0db64c87bc86cb0d521edb9e10 --- .../issues/ui/handler/ExportIssuesAsCsv.java | 102 +++++++++++------- 1 file changed, 65 insertions(+), 37 deletions(-) diff --git a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/ExportIssuesAsCsv.java b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/ExportIssuesAsCsv.java index 20cf1b335..6659a5227 100644 --- a/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/ExportIssuesAsCsv.java +++ b/bundles/org.simantics.issues.ui/src/org/simantics/issues/ui/handler/ExportIssuesAsCsv.java @@ -15,6 +15,9 @@ import java.io.File; import java.io.PrintStream; import java.lang.reflect.InvocationTargetException; import java.util.Collection; +import java.util.Map; +import java.util.Set; +import java.util.TreeMap; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; @@ -22,7 +25,6 @@ import org.eclipse.core.commands.ExecutionException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubMonitor; import org.eclipse.core.runtime.preferences.InstanceScope; -import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; @@ -42,6 +44,7 @@ import org.simantics.db.exception.DatabaseException; import org.simantics.db.layer0.variable.Variable; import org.simantics.db.request.Read; import org.simantics.issues.common.AllVisibleIssues; +import org.simantics.issues.common.DynamicIssueSources; import org.simantics.issues.ui.internal.Activator; import org.simantics.operation.Layer0X; import org.simantics.simulation.ontology.SimulationResource; @@ -117,46 +120,17 @@ public class ExportIssuesAsCsv extends AbstractHandler { ExceptionUtils.logError(e); } } else { -// boolean result = MessageDialog.openQuestion(parentShell, "Print to stdout?", "Would you like to perform model validation and print the results into stdout?"); -// if (!result) -// return; -// externalOutput.set(System.out); return; } try { - window.getWorkbench().getProgressService().busyCursorWhile(new IRunnableWithProgress() { - @Override - public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { - try { - if (externalOutput.get() == null) - externalOutput.set(new PrintStream(new File(path))); - - final SubMonitor progress = SubMonitor.convert(monitor, "Export issues", IProgressMonitor.UNKNOWN); - Simantics.getSession().syncRequest(new ReadRequest() { - @Override - public void run(ReadGraph graph) throws DatabaseException { - PrintStream out = externalOutput.get(); - - Collection activeIssues = graph.syncRequest(new AllVisibleIssues(Simantics.getProjectResource())); - out.println("# Exported issues (" + activeIssues.size() + ")"); - for (Variable issue : activeIssues) { - String description = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "HasDescription") ); - String severity = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "severity") ); - String resource = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "resource") ); - String path = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "path") ); - out.println(description + ";" + severity + ";" + resource + ";" + path); - progress.worked(1); - } - } - }); - } catch (Exception e) { - throw new InvocationTargetException(e); - } finally { - monitor.done(); - if (externalOutput.get() != System.out) - FileUtils.uncheckedClose(externalOutput.get()); - } + window.getWorkbench().getProgressService().busyCursorWhile(monitor -> { + try (PrintStream out = new PrintStream(new File(path))) { + export(monitor, out); + } catch (Exception e) { + throw new InvocationTargetException(e); + } finally { + monitor.done(); } }); } catch (InvocationTargetException e) { @@ -166,4 +140,58 @@ public class ExportIssuesAsCsv extends AbstractHandler { } } + private void export(IProgressMonitor monitor, PrintStream out) throws DatabaseException { + SubMonitor progress = SubMonitor.convert(monitor, "Export issues", IProgressMonitor.UNKNOWN); + Simantics.getSession().syncRequest(new ReadRequest() { + @Override + public void run(ReadGraph graph) throws DatabaseException { + Collection activeIssues = graph.syncRequest(new AllVisibleIssues(Simantics.getProjectResource())); + out.println("# Exported issues (" + activeIssues.size() + ")"); + for (Variable issue : activeIssues) { + exportIssue(graph, issue, out, 0); + progress.worked(1); + } + + Map dynamicIssueSources = nameMap(graph, + graph.syncRequest(new DynamicIssueSources(Simantics.getProjectResource()))); + if (!dynamicIssueSources.isEmpty()) { + out.println(); + out.println("# Dynamic Issues"); + for (Variable source : dynamicIssueSources.values()) { + exportDynamicIssueSource(progress, graph, source, out, 0); + } + } + } + }); + } + + private Map nameMap(ReadGraph graph, Set sources) throws DatabaseException { + TreeMap sorted = new TreeMap<>(); + for (Variable v : sources) { + String name = v.getPossiblePropertyValue(graph, "HasDescription", Bindings.STRING); + if (name == null) + name = v.getName(graph); + sorted.put(name, v); + } + return sorted; + } + + protected void exportDynamicIssueSource(IProgressMonitor monitor, ReadGraph graph, Variable issue, PrintStream out, int startColumn) throws DatabaseException { + exportIssue(graph, issue, out, startColumn); + for (Variable child : issue.getChildren(graph)) { + exportDynamicIssueSource(monitor, graph, child, out, startColumn+1); + monitor.worked(1); + } + } + + private void exportIssue(ReadGraph graph, Variable issue, PrintStream out, int startColumn) throws DatabaseException { + String description = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "HasDescription") ); + String severity = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "severity") ); + String resource = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "resource") ); + String path = StringUtils.safeString( (String) issue.getPossiblePropertyValue(graph, "path") ); + for (int i = 0; i < startColumn; ++i) + out.print(";"); + out.println(description + ";" + severity + ";" + resource + ";" + path); + } + } \ No newline at end of file -- 2.43.2