]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.charts/src/org/simantics/charts/export/ExportChartCSV.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / export / ExportChartCSV.java
1 package org.simantics.charts.export;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collections;\r
5 import java.util.List;\r
6 \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
31 \r
32 public class ExportChartCSV extends org.simantics.simulation.export.ExperimentExportClass implements ExportClass {\r
33 \r
34         \r
35         @Override\r
36         public void export(List<Content> contents, \r
37                         Object writer_,\r
38                         ExportContext context, \r
39                         Variant options,\r
40                         IProgressMonitor monitor, \r
41                         MapList<Content, Content> attachmentMap\r
42                         ) throws ExportException {\r
43                 \r
44                 // Flush all experiments, just in case.\r
45                 IExperimentManager em = Simantics.getProject().getHint( ExperimentManager.KEY_EXPERIMENT_MANAGER );\r
46                 if ( em != null ) {\r
47                         for (IExperiment exp : em.getExperiments()) {\r
48                                 if ( exp instanceof IHistoryExperiment ) {\r
49                                         IHistoryExperiment he = (IHistoryExperiment) exp;\r
50                                         try {\r
51                                                 he.flushHistory();\r
52                                         } catch (HistoryException e) {\r
53                                         }\r
54                                 }\r
55                         }\r
56                 }\r
57                 \r
58                 CSVWriter writer = (CSVWriter) writer_;\r
59                 \r
60                 List<HistoryManager> historiesToClose = new ArrayList<HistoryManager>(); \r
61                 try {\r
62                         List<org.simantics.simulation.export.ExperimentExportClass.ModelRef> models = ExperimentExportClass.getResult(context, options, true);                  \r
63 \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
68                         int runCount = 0;\r
69                         int modelCount = models.size();\r
70                         for (ModelRef model : models) runCount += model.enabledRunCount();\r
71                         \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
75                         }\r
76 \r
77                         // \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
83                         \r
84                                                 HistoryManager history = History.openFileHistory( run.historyFolder );\r
85                                                 historiesToClose.add( history );\r
86                                         ItemManager im = new ItemManager( history.getItems() );\r
87                                                 \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
96                                                         }\r
97                                                         if ( runCount>1 ) {\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
103                                                         }\r
104                                                         \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
110                                                                                                                 \r
111                                                         writer.addItem(history, historyId, labelBuilder.toString(), item.variableReference, item.unit);\r
112                                                 }\r
113                                                 \r
114                                         }\r
115                                 }\r
116                         }\r
117                                         \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
124                 } finally {\r
125                         for (HistoryManager history : historiesToClose) history.close();\r
126                 }\r
127                 \r
128         }\r
129 \r
130         @Override\r
131         public List<String> validate(String contentUri, ExportContext context, Variant options) {\r
132                 return Collections.emptyList();\r
133         }\r
134         \r
135 }\r