-package org.simantics.simulation.export;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collections;\r
-import java.util.List;\r
-\r
-import org.eclipse.core.runtime.IProgressMonitor;\r
-import org.simantics.Simantics;\r
-import org.simantics.databoard.binding.error.BindingException;\r
-import org.simantics.databoard.binding.mutable.Variant;\r
-import org.simantics.databoard.util.Bean;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.export.core.ExportContext;\r
-import org.simantics.export.core.error.ExportException;\r
-import org.simantics.export.core.intf.ExportClass;\r
-import org.simantics.export.core.manager.Content;\r
-import org.simantics.history.History;\r
-import org.simantics.history.HistoryException;\r
-import org.simantics.history.HistoryManager;\r
-import org.simantics.history.ItemManager;\r
-import org.simantics.history.util.subscription.SamplingFormat;\r
-import org.simantics.simulation.experiment.IExperiment;\r
-import org.simantics.simulation.experiment.IHistoryExperiment;\r
-import org.simantics.simulation.export.CSVItemsQuery.CSVItem;\r
-import org.simantics.simulation.project.ExperimentManager;\r
-import org.simantics.simulation.project.IExperimentManager;\r
-import org.simantics.utils.datastructures.MapList;\r
-\r
-public class ExportSubscriptionCSV extends ExperimentExportClass implements ExportClass {\r
- \r
- @Override\r
- public void export(List<Content> contents, \r
- Object writer_,\r
- ExportContext context, \r
- Variant options,\r
- IProgressMonitor monitor, \r
- MapList<Content, Content> attachmentMap\r
- ) throws ExportException {\r
- \r
- // Flush all experiments, just in case.\r
- IExperimentManager em = Simantics.getProject().getHint( ExperimentManager.KEY_EXPERIMENT_MANAGER );\r
- if ( em != null ) {\r
- for (IExperiment exp : em.getExperiments()) {\r
- if ( exp instanceof IHistoryExperiment ) {\r
- IHistoryExperiment he = (IHistoryExperiment) exp;\r
- try {\r
- he.flushHistory();\r
- } catch (HistoryException e) {\r
- }\r
- }\r
- }\r
- }\r
- \r
- CSVWriter writer = (CSVWriter) writer_; \r
- List<HistoryManager> historiesToClose = new ArrayList<HistoryManager>(); \r
- try {\r
- List<ModelRef> models = ExperimentExportClass.getResult(context, options, true);\r
- \r
- // Label format is the following\r
- // "MODEL EXPERIMENT/RUN ITEM" \r
- // MODEL is omited, if itemCount <= 1\r
- // RUN is omited, if runCount <= 1 \r
- int runCount = 0;\r
- int modelCount = models.size();\r
- for (ModelRef model : models) runCount += model.enabledRunCount();\r
-\r
- List<CSVItem> items = new ArrayList<CSVItem>();\r
- for (Content content : contents) {\r
- items.addAll( context.session.syncRequest( new CSVItemsQuery( content.url ) ) );\r
- }\r
-\r
- // \r
- for (ModelRef model : models) {\r
- for (ExperimentRef experiment : model.experiments) {\r
- if ( experiment.runs.isEmpty() ) continue; \r
- for (RunRef run : experiment.runs) { \r
- if ( run.historyFolder == null || !run.historyFolder.exists() ) continue;\r
- \r
- HistoryManager history = History.openFileHistory( run.historyFolder );\r
- historiesToClose.add( history );\r
- ItemManager im = new ItemManager( history.getItems() );\r
- \r
- for ( CSVItem item : items ) {\r
- if ( !item.modelUri.equals( model.uri ) ) continue;\r
- StringBuilder labelBuilder = new StringBuilder();\r
- labelBuilder.append( item.label );\r
- if ( modelCount>1 ) {\r
- labelBuilder.append(" (");\r
- labelBuilder.append(model.label);\r
- labelBuilder.append(")");\r
- }\r
- if ( runCount>1 ) {\r
- labelBuilder.append(" (");\r
- labelBuilder.append( experiment.label );\r
- labelBuilder.append( "\\" );\r
- labelBuilder.append( run.label );\r
- labelBuilder.append(")");\r
- }\r
- \r
- List<Bean> historyItems = im.search("variableId", item.variableReference);\r
- Collections.sort(historyItems, SamplingFormat.INTERVAL_COMPARATOR);\r
- if (items.isEmpty()) continue;\r
- Bean config = historyItems.get(0);\r
- String historyId = (String) config.getFieldUnchecked("id");\r
- \r
- writer.addItem(history, historyId, labelBuilder.toString(), item.variableReference, item.unit);\r
- }\r
- \r
- }\r
- }\r
- }\r
- \r
- } catch (DatabaseException e) {\r
- throw new ExportException( e );\r
- } catch (HistoryException e) {\r
- throw new ExportException( e );\r
- } catch (BindingException e) {\r
- throw new ExportException( e );\r
- } finally {\r
- for (HistoryManager history : historiesToClose) history.close();\r
- }\r
- \r
- }\r
-\r
- @Override\r
- public List<String> validate(String contentUri, ExportContext context, Variant options) {\r
- return Collections.emptyList();\r
- }\r
- \r
-}\r
-\r
+package org.simantics.simulation.export;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.simantics.Simantics;
+import org.simantics.databoard.binding.error.BindingException;
+import org.simantics.databoard.binding.mutable.Variant;
+import org.simantics.databoard.util.Bean;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.export.core.ExportContext;
+import org.simantics.export.core.error.ExportException;
+import org.simantics.export.core.intf.ExportClass;
+import org.simantics.export.core.manager.Content;
+import org.simantics.history.History;
+import org.simantics.history.HistoryException;
+import org.simantics.history.HistoryManager;
+import org.simantics.history.ItemManager;
+import org.simantics.history.util.subscription.SamplingFormat;
+import org.simantics.simulation.experiment.IExperiment;
+import org.simantics.simulation.experiment.IHistoryExperiment;
+import org.simantics.simulation.export.CSVItemsQuery.CSVItem;
+import org.simantics.simulation.project.ExperimentManager;
+import org.simantics.simulation.project.IExperimentManager;
+import org.simantics.utils.datastructures.MapList;
+
+public class ExportSubscriptionCSV extends ExperimentExportClass implements ExportClass {
+
+ @Override
+ public void export(List<Content> contents,
+ Object writer_,
+ ExportContext context,
+ Variant options,
+ IProgressMonitor monitor,
+ MapList<Content, Content> attachmentMap
+ ) throws ExportException {
+
+ // Flush all experiments, just in case.
+ IExperimentManager em = Simantics.getProject().getHint( ExperimentManager.KEY_EXPERIMENT_MANAGER );
+ if ( em != null ) {
+ for (IExperiment exp : em.getExperiments()) {
+ if ( exp instanceof IHistoryExperiment ) {
+ IHistoryExperiment he = (IHistoryExperiment) exp;
+ try {
+ he.flushHistory();
+ } catch (HistoryException e) {
+ }
+ }
+ }
+ }
+
+ CSVWriter writer = (CSVWriter) writer_;
+ List<HistoryManager> historiesToClose = new ArrayList<HistoryManager>();
+ try {
+ List<ModelRef> models = ExperimentExportClass.getResult(context, options, true);
+
+ // Label format is the following
+ // "MODEL EXPERIMENT/RUN ITEM"
+ // MODEL is omited, if itemCount <= 1
+ // RUN is omited, if runCount <= 1
+ int runCount = 0;
+ int modelCount = models.size();
+ for (ModelRef model : models) runCount += model.enabledRunCount();
+
+ List<CSVItem> items = new ArrayList<CSVItem>();
+ for (Content content : contents) {
+ items.addAll( context.session.syncRequest( new CSVItemsQuery( content.url ) ) );
+ }
+
+ //
+ for (ModelRef model : models) {
+ for (ExperimentRef experiment : model.experiments) {
+ if ( experiment.runs.isEmpty() ) continue;
+ for (RunRef run : experiment.runs) {
+ if ( run.historyFolder == null || !run.historyFolder.exists() ) continue;
+
+ HistoryManager history = History.openFileHistory( run.historyFolder );
+ historiesToClose.add( history );
+ ItemManager im = new ItemManager( history.getItems() );
+
+ for ( CSVItem item : items ) {
+ if ( !item.modelUri.equals( model.uri ) ) continue;
+ StringBuilder labelBuilder = new StringBuilder();
+ labelBuilder.append( item.label );
+ if ( modelCount>1 ) {
+ labelBuilder.append(" (");
+ labelBuilder.append(model.label);
+ labelBuilder.append(")");
+ }
+ if ( runCount>1 ) {
+ labelBuilder.append(" (");
+ labelBuilder.append( experiment.label );
+ labelBuilder.append( "\\" );
+ labelBuilder.append( run.label );
+ labelBuilder.append(")");
+ }
+
+ List<Bean> historyItems = im.search("variableId", item.variableReference);
+ Collections.sort(historyItems, SamplingFormat.INTERVAL_COMPARATOR);
+ if (items.isEmpty()) continue;
+ Bean config = historyItems.get(0);
+ String historyId = (String) config.getFieldUnchecked("id");
+
+ writer.addItem(history, historyId, labelBuilder.toString(), item.variableReference, item.unit);
+ }
+
+ }
+ }
+ }
+
+ } catch (DatabaseException e) {
+ throw new ExportException( e );
+ } catch (HistoryException e) {
+ throw new ExportException( e );
+ } catch (BindingException e) {
+ throw new ExportException( e );
+ } finally {
+ for (HistoryManager history : historiesToClose) history.close();
+ }
+
+ }
+
+ @Override
+ public List<String> validate(String contentUri, ExportContext context, Variant options) {
+ return Collections.emptyList();
+ }
+
+}
+