1 package org.simantics.charts.export;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Collections;
\r
5 import java.util.List;
\r
7 import org.eclipse.core.runtime.IProgressMonitor;
\r
8 import org.simantics.Simantics;
\r
9 import org.simantics.databoard.binding.error.BindingException;
\r
10 import org.simantics.databoard.binding.mutable.Variant;
\r
11 import org.simantics.databoard.util.Bean;
\r
12 import org.simantics.db.exception.DatabaseException;
\r
13 import org.simantics.export.core.ExportContext;
\r
14 import org.simantics.export.core.error.ExportException;
\r
15 import org.simantics.export.core.intf.ExportClass;
\r
16 import org.simantics.export.core.manager.Content;
\r
17 import org.simantics.history.History;
\r
18 import org.simantics.history.HistoryException;
\r
19 import org.simantics.history.HistoryManager;
\r
20 import org.simantics.history.ItemManager;
\r
21 import org.simantics.history.util.subscription.SamplingFormat;
\r
22 import org.simantics.simulation.experiment.IExperiment;
\r
23 import org.simantics.simulation.experiment.IHistoryExperiment;
\r
24 import org.simantics.simulation.export.CSVItemsQuery;
\r
25 import org.simantics.simulation.export.CSVItemsQuery.CSVItem;
\r
26 import org.simantics.simulation.export.CSVWriter;
\r
27 import org.simantics.simulation.export.ExperimentExportClass;
\r
28 import org.simantics.simulation.project.ExperimentManager;
\r
29 import org.simantics.simulation.project.IExperimentManager;
\r
30 import org.simantics.utils.datastructures.MapList;
\r
32 public class ExportChartCSV extends org.simantics.simulation.export.ExperimentExportClass implements ExportClass {
\r
36 public void export(List<Content> contents,
\r
38 ExportContext context,
\r
40 IProgressMonitor monitor,
\r
41 MapList<Content, Content> attachmentMap
\r
42 ) throws ExportException {
\r
44 // Flush all experiments, just in case.
\r
45 IExperimentManager em = Simantics.getProject().getHint( ExperimentManager.KEY_EXPERIMENT_MANAGER );
\r
47 for (IExperiment exp : em.getExperiments()) {
\r
48 if ( exp instanceof IHistoryExperiment ) {
\r
49 IHistoryExperiment he = (IHistoryExperiment) exp;
\r
52 } catch (HistoryException e) {
\r
58 CSVWriter writer = (CSVWriter) writer_;
\r
60 List<HistoryManager> historiesToClose = new ArrayList<HistoryManager>();
\r
62 List<org.simantics.simulation.export.ExperimentExportClass.ModelRef> models = ExperimentExportClass.getResult(context, options, true);
\r
64 // Label format is the following
\r
65 // "MODEL EXPERIMENT/RUN ITEM"
\r
66 // MODEL is omited, if itemCount <= 1
\r
67 // RUN is omited, if runCount <= 1
\r
69 int modelCount = models.size();
\r
70 for (ModelRef model : models) runCount += model.enabledRunCount();
\r
72 List<CSVItem> items = new ArrayList<CSVItem>();
\r
73 for (Content content : contents) {
\r
74 items.addAll( context.session.syncRequest( new CSVItemsQuery( content.url ) ) );
\r
78 for (ModelRef model : models) {
\r
79 for (ExperimentRef experiment : model.experiments) {
\r
80 if ( experiment.runs.isEmpty() ) continue;
\r
81 for (RunRef run : experiment.runs) {
\r
82 if ( run.historyFolder == null || !run.historyFolder.exists() ) continue;
\r
84 HistoryManager history = History.openFileHistory( run.historyFolder );
\r
85 historiesToClose.add( history );
\r
86 ItemManager im = new ItemManager( history.getItems() );
\r
88 for ( CSVItem item : items ) {
\r
89 if ( !item.modelUri.equals( model.uri ) ) continue;
\r
90 StringBuilder labelBuilder = new StringBuilder();
\r
91 labelBuilder.append( item.label );
\r
92 if ( modelCount>1 ) {
\r
93 labelBuilder.append(" (");
\r
94 labelBuilder.append(model.label);
\r
95 labelBuilder.append(")");
\r
98 labelBuilder.append(" (");
\r
99 labelBuilder.append( experiment.label );
\r
100 labelBuilder.append( "\\" );
\r
101 labelBuilder.append( run.label );
\r
102 labelBuilder.append(")");
\r
105 List<Bean> historyItems = im.search("variableId", item.variableReference);
\r
106 Collections.sort(historyItems, SamplingFormat.INTERVAL_COMPARATOR);
\r
107 if (items.isEmpty()) continue;
\r
108 Bean config = historyItems.get(0);
\r
109 String historyId = (String) config.getFieldUnchecked("id");
\r
111 writer.addItem(history, historyId, labelBuilder.toString(), item.variableReference, item.unit);
\r
118 } catch (DatabaseException e) {
\r
119 throw new ExportException( e );
\r
120 } catch (HistoryException e) {
\r
121 throw new ExportException( e );
\r
122 } catch (BindingException e) {
\r
123 throw new ExportException( e );
\r
125 for (HistoryManager history : historiesToClose) history.close();
\r
131 public List<String> validate(String contentUri, ExportContext context, Variant options) {
\r
132 return Collections.emptyList();
\r