From fcaea668ae2fb4a7319f4d37c3f505a077c139cc Mon Sep 17 00:00:00 2001 From: miettinen Date: Fri, 30 Aug 2013 05:41:24 +0000 Subject: [PATCH] Save sensitivity analysis results (refs #4243). A few little fixes. git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@27794 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 155229 -> 155492 bytes .../graph/Sysdyn.pgraph | 6 +- .../org/simantics/sysdyn/SysdynResource.java | 9 ++ org.simantics.sysdyn.ui/icons/chart_bar_3.png | Bin 0 -> 625 bytes .../icons/chart_bar_3_blackAndWhite.png | Bin 0 -> 553 bytes .../icons/time_rainbow.png | Bin 0 -> 944 bytes org.simantics.sysdyn.ui/plugin.xml | 52 +++++- .../ActivateResultSetDatasetAction.java | 75 +++++++++ .../contributions/AbstractNodeImager.java | 2 +- .../contributions/SimulationResult.java | 15 +- .../SimulationResultDecorator.java | 9 +- .../contributions/SimulationResultSet.java | 43 +++++ .../SimulationResultSetDecorator.java | 51 ++++++ .../SimulationResultSetImager.java | 36 +++++ .../SimulationResultSetLabeler.java | 28 ++++ .../ui/browser/nodes/ExperimentNode.java | 4 + .../nodes/SimulationResultSetNode.java | 84 ++++++++++ .../handlers/ToggleResultSetActivation.java | 76 +++++++++ .../sysdyn/ui/project/SysdynProject.java | 8 + .../sysdyn/manager/ActiveResults.java | 9 ++ .../sysdyn/manager/SaveResultJob.java | 2 +- .../sysdyn/manager/SaveResultSetJob.java | 153 ++++++++++++++++++ .../SysdynSensitivityAnalysisExperiment.java | 4 +- 23 files changed, 652 insertions(+), 14 deletions(-) create mode 100644 org.simantics.sysdyn.ui/icons/chart_bar_3.png create mode 100644 org.simantics.sysdyn.ui/icons/chart_bar_3_blackAndWhite.png create mode 100644 org.simantics.sysdyn.ui/icons/time_rainbow.png create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/actions/ActivateResultSetDatasetAction.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSet.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetDecorator.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetImager.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetLabeler.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/SimulationResultSetNode.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ToggleResultSetActivation.java create mode 100644 org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultSetJob.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index c032924cb0bfc845c9fa07d76e3d7eee04a7008a..93d42bb80feeec5277b605d961ed3b647e4a9b11 100644 GIT binary patch literal 155492 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 SYSDYN.Experiment.result --> SYSDYN.Result -- SYSDYN.Experiment.resultSet --> SYSDYN.ResultSet -- SYSDYN.Result.time --> L0.Long -- SYSDYN.HistoryDataset.columns --> L0.Boolean -- SYSDYN.HistoryDataset.sheet --> SHEET.Spreadsheet -- SYSDYN.Experiment.result --> SYSDYN.Result RLI-C%<%A;cV^J$aqFPamf6f0#Z z6t1LgJjO+5pWZsLx?e!p+cdQ+M+PFMPF9#YRpoHMVk7qD-vp|+iFH9T6d@84XF?PP zOpixv6HmVFD^YU)p2+b!QWP}wGalIM0xlRCP#hZyDZKFcdx!U5-5(`N!U*bhg4Gqu z$@8=~O;Gc{7XL@0BsT;)AxIL&)<3aae5BD-ES$c^7@mJgl-C)`SoTViO-ujI)-VVu zoX|=gTS;g4EtE+LS%%~WdL`L1^Xt#qFcGOKNpeq|doIj8TD!V5C%*$!(jur;@H&HD zi7O~4r%1G=ojbJgq?u!O>>@su?hzhmGstVh&5^Do&gQidC4IK)|F(LX5jRkG-#iQe?##_eP^;i}W`a%;W6|29`@lFMOD(gbmr3}-@aQlv*O$5v zX|IG-BesLpo}>oW37yPiY|3i7LVd7K+D^LxdnFt_LdAEm#uG-0P{0|XC=G+vDt&#B zrpfNl1h9B%L8MYetRuFHMRkQC3d+Kfw?ZbS-$Ib#oo74V=D_t6^-EQEGWqpcK=9ZIA#TlPlUl7t zp6Bd#JGR^H?O%eY04XKbT0GAqNfHW$0-a9hZ9boWDhZa$WnQn>$+8Tk6jI6@@T%47 ze@T4b_h~d5WLZYL-9{#~o}o8+N-LgTdfQk|YV0N(CVVK@gDVIdL3wI2?$gi1~b; zpU-Ff^?L0s77OoHVvHfnvUh=$5@QVgexFvW#b`9bTKn;k{w7J&6s8Kz00000NkvXXu0mjftC#VE literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/icons/time_rainbow.png b/org.simantics.sysdyn.ui/icons/time_rainbow.png new file mode 100644 index 0000000000000000000000000000000000000000..579887f01fa4d351af623605b9073049cfb416b0 GIT binary patch literal 944 zcmV;h15f;kP)2zCX8MTGE4|GGJ3L=6aL&U>C*bW{x zJPpUDC&3K_r*>Y(KyaHd*J{7!sB5Qd>FC;NI~r@!ByG|+c|V%ZzlSlIh$o-hb9jFI zE)V?ASROA!7eCtTkhBvHXK}kEOG>3IFm*GdYy51MU1xgVJvH{9fYD2*&iVbhw*yVR zc84#7!yQ0~D%x6{%+d_;*&$uc%V%Cc`svAk0fsMr_(`NS_+GH-5NShUdR`@!H7HjE z0maFaEnWg*fqSDDNT$l~A3pK<$A1H^e|@^U*1s~isq=_D6L+w(R^aK@Aby_}frX4( zVSF}?*I{LgZ;spF^%shT}r6WJ%HO&`mdbza%CiJ&6LXc}IhhsFjU zz5828=Bun&w^G-<(OogJ#~vA2trla4Cm7+ExeQNjuEi(|WLak5`uF5il~SQV|G*Gi z8{GVU=^Bxt1-iz5du{Q#XYMaFh6Zgy2*1-4AilE7fm#=ZiooM`vlNRlFgU{W)FdxP zqtxBHNoe{efm(sRr_mwT*xITIS+4qXd6SVpW=802cQJM+iR=K6Q>Lq9JFd|maLKuc<8Yq!&2@|`5?|!k zIG@xx8!IBce4u+#OU2)6ZE?$b+0V#ijtzUHNfh`QV<;%4+QH{vBIn{DBZd6KV9mKAJ*0?r0I36@GQW<#Y*O@dZL= zkI=H-`9z{RE&*H}p8RR=?vCo8GxwgAjobE)s77?=F76gD@)HL6jXthw8fw0SkkKO+ z6YJkDrS)SgTKU31&UE&J!=2^z+)-<#)U|Ia-q7$;)M9J5@}OSfd{U=IdsS%3@ce8n z^X8S)y|(~tj{}aJ{Bj(417M*sG+2q#Y;6mXDi(=pMK&Z$Vl|;osHT{EwD}8|32ZaB S$MRYL0000 @@ -898,6 +898,22 @@ + + + + + + + + + + + + @@ -1571,6 +1596,10 @@ args="org.simantics.sysdyn.ui.browser.nodes.SimulationResultNode" property="org.simantics.sysdyn.ui.nodeClass"> + + @@ -1840,6 +1869,10 @@ class="org.simantics.sysdyn.ui.browser.contributions.SimulationResult" preference="2.0"> + + @@ -2007,6 +2040,10 @@ class="org.simantics.sysdyn.ui.browser.contributions.SimulationResultLabeler" preference="2.0"> + + @@ -2163,6 +2200,10 @@ class="org.simantics.sysdyn.ui.browser.contributions.SimulationResultImager" preference="2.0"> + + @@ -2202,6 +2243,10 @@ class="org.simantics.sysdyn.ui.browser.contributions.SimulationResultDecorator" preference="2.0"> + + @@ -2230,6 +2275,11 @@ name="Activate result in charts" priority="250.0"> + + results = graph.getObjects(resultSet, sr.Experiment_result); + for (Resource result : results) { + if (graph.hasStatement(result, sr.Result_showResult)) { + resultShown = true; + break; + } + } + for (Resource result : results) { + if (resultShown) { + graph.denyStatement(result, sr.Result_showResult, result); + } else { + graph.claim(result, sr.Result_showResult, result); + } + } + } + } + }); + e.consume(); + } + + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java index 98fa0ce0..802a846a 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/AbstractNodeImager.java @@ -82,7 +82,7 @@ public class AbstractNodeImager extends ImagerContributor else if(graph.isInstanceOf(node.data, sr.GameExperiment)) image = "icons/time_go.png"; else if(graph.isInstanceOf(node.data, sr.SensitivityAnalysisExperiment)) - image = "icons/rainbow.png"; + image = "icons/time_rainbow.png"; else image = "icons/time.png"; } else if (node instanceof InputNode) diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResult.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResult.java index dfa9897a..f7bd86f0 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResult.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResult.java @@ -27,19 +27,22 @@ import org.simantics.layer0.Layer0; import org.simantics.sysdyn.SysdynResource; import org.simantics.sysdyn.ui.browser.nodes.ExperimentNode; import org.simantics.sysdyn.ui.browser.nodes.HistoryDataNode; +import org.simantics.sysdyn.ui.browser.nodes.SimulationResultNode; +import org.simantics.sysdyn.ui.browser.nodes.SimulationResultSetNode; -public class SimulationResult extends ViewpointContributor { +public class SimulationResult extends ViewpointContributor> { - @SuppressWarnings("unchecked") @Override - public Collection getContribution(ReadGraph graph, ExperimentNode experiment) throws DatabaseException { + public Collection getContribution(ReadGraph graph, AbstractNode node) throws DatabaseException { ArrayList> result = new ArrayList>(); SysdynResource sr = SysdynResource.getInstance(graph); - for(final Resource r : graph.syncRequest(new ObjectsWithType(experiment.data, sr.Experiment_result, sr.Result))) { + if (!(node instanceof ExperimentNode || node instanceof SimulationResultSetNode)) + return result; + for(final Resource r : graph.syncRequest(new ObjectsWithType(node.data, sr.Experiment_result, sr.Result))) { if(graph.isInstanceOf(r, sr.HistoryDataset)) { - result.add(graph.adapt(r, AbstractNode.class)); - } else { result.add(new HistoryDataNode(r)); + } else { + result.add(new SimulationResultNode(r)); String resultPath = (String)graph.getPossibleRelatedValue(r, sr.Result_resultFile); File file = new File(resultPath); diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultDecorator.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultDecorator.java index 442e91a0..3676eba1 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultDecorator.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultDecorator.java @@ -35,7 +35,14 @@ public class SimulationResultDecorator extends LabelDecoratorContributor F decorateFont(F font, String column, int itemIndex) { + return (F) ((FontDescriptor) font).withStyle(SWT.NORMAL); + } + }; } } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSet.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSet.java new file mode 100644 index 00000000..dfbe8811 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSet.java @@ -0,0 +1,43 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import java.util.ArrayList; +import java.util.Collection; + +import org.simantics.browsing.ui.graph.contributor.viewpoint.ViewpointContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.browser.nodes.ExperimentNode; +import org.simantics.sysdyn.ui.browser.nodes.SimulationResultSetNode; + +public class SimulationResultSet extends ViewpointContributor { + + @Override + public Collection getContribution(ReadGraph graph, ExperimentNode experiment) throws DatabaseException { + ArrayList results = new ArrayList(); + SysdynResource sr = SysdynResource.getInstance(graph); + for(final Resource r : graph.syncRequest(new ObjectsWithType(experiment.data, sr.Experiment_resultSet, sr.ResultSet))) { + results.add(new SimulationResultSetNode(r)); + } + return results; + } + + @Override + public String getViewpointId() { + return "Standard"; + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetDecorator.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetDecorator.java new file mode 100644 index 00000000..2491ee51 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetDecorator.java @@ -0,0 +1,51 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import org.eclipse.jface.resource.FontDescriptor; +import org.eclipse.swt.SWT; +import org.simantics.browsing.ui.content.LabelDecorator; +import org.simantics.browsing.ui.graph.contributor.labeler.LabelDecoratorContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.browser.nodes.SimulationResultSetNode; + +public class SimulationResultSetDecorator extends LabelDecoratorContributor{ + + @Override + public LabelDecorator getDecorator(ReadGraph graph, SimulationResultSetNode resultSet) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + for (Resource result : graph.getObjects(resultSet.data, sr.Experiment_result)) { + if (graph.hasStatement(result, sr.Result_showResult)) { + return new LabelDecorator.Stub() { + + @SuppressWarnings("unchecked") + @Override + public F decorateFont(F font, String column, int itemIndex) { + return (F) ((FontDescriptor) font).withStyle(SWT.BOLD); + } + }; + } + } + return new LabelDecorator.Stub() { + + @SuppressWarnings("unchecked") + @Override + public F decorateFont(F font, String column, int itemIndex) { + return (F) ((FontDescriptor) font).withStyle(SWT.NORMAL); + } + }; + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetImager.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetImager.java new file mode 100644 index 00000000..88c73806 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetImager.java @@ -0,0 +1,36 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import org.eclipse.jface.resource.ImageDescriptor; +import org.simantics.browsing.ui.swt.ImagerContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.Activator; +import org.simantics.sysdyn.ui.browser.nodes.SimulationResultSetNode; + +public class SimulationResultSetImager extends ImagerContributor{ + + @Override + public ImageDescriptor getDescriptor(ReadGraph graph, SimulationResultSetNode resultSet) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + for (Resource result : graph.getObjects(resultSet.data, sr.Experiment_result)) { + if (graph.hasStatement(result, sr.Result_showResult)) { + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/chart_bar_3.png")); + } + } + return ImageDescriptor.createFromURL(Activator.getDefault().getBundle().getResource("icons/chart_bar_3_blackAndWhite.png")); + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetLabeler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetLabeler.java new file mode 100644 index 00000000..16c42593 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/contributions/SimulationResultSetLabeler.java @@ -0,0 +1,28 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.contributions; + +import org.simantics.browsing.ui.graph.contributor.labeler.LabelerContributor; +import org.simantics.db.ReadGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.layer0.Layer0; +import org.simantics.sysdyn.ui.browser.nodes.SimulationResultSetNode; + +public class SimulationResultSetLabeler extends LabelerContributor{ + + @Override + public String getLabel(ReadGraph graph, SimulationResultSetNode resultSet) throws DatabaseException { + String name = graph.getPossibleRelatedValue(resultSet.data, Layer0.getInstance(graph).HasLabel); + return name == null ? "Experiment (no name)" : name; + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/ExperimentNode.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/ExperimentNode.java index d272900f..deeb8dd7 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/ExperimentNode.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/ExperimentNode.java @@ -77,6 +77,10 @@ public class ExperimentNode extends AbstractNode implements IDoubleCli if(results != null) for(Resource result : results) SimulationResultNode.unlinkResult(graph, result); + Collection resultSets = graph.getObjects(data, SysdynResource.getInstance(graph).Experiment_resultSet); + if(resultSets != null) + for(Resource resultSet : resultSets) + SimulationResultSetNode.unlinkResultSet(graph, resultSet); RemoverUtil.remove(graph, data); } }); diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/SimulationResultSetNode.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/SimulationResultSetNode.java new file mode 100644 index 00000000..194e1c9e --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/browser/nodes/SimulationResultSetNode.java @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (c) 2010, 2012 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.browser.nodes; + +import org.simantics.browsing.ui.common.node.AbstractNode; +import org.simantics.browsing.ui.common.node.DeleteException; +import org.simantics.browsing.ui.common.node.IDeletableNode; +import org.simantics.browsing.ui.common.node.IDoubleClickableNode; +import org.simantics.browsing.ui.common.node.IModifiableNode; +import org.simantics.browsing.ui.content.Labeler.Modifier; +import org.simantics.browsing.ui.graph.impl.LabelModifier; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.ObjectsWithType; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.CancelTransactionException; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.layer0.util.RemoverUtil; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.ui.handlers.ToggleResultSetActivation; +import org.simantics.ui.SimanticsUI; +import org.simantics.utils.ui.ExceptionUtils; + +public class SimulationResultSetNode extends AbstractNode implements IDoubleClickableNode, IDeletableNode, IModifiableNode { + + public SimulationResultSetNode(Resource resource) { + super(resource); + } + + + @Override + public Modifier getModifier(String columnId) { + LabelModifier modifier = new LabelModifier(SimanticsUI.getSession(), data) { + @Override + public String isValid(String label) { + if (label.isEmpty()) + return "Empty label not allowed"; + return null; + } + }; + return modifier; + } + + + @Override + public void delete() throws DeleteException { + try { + SimanticsUI.getSession().syncRequest(new WriteRequest() { + @Override + public void perform(WriteGraph graph) throws DatabaseException, CancelTransactionException { + unlinkResultSet(graph, data); + } + }); + } catch (DatabaseException e) { + ExceptionUtils.logAndShowError(e); + } + + } + + + public static void unlinkResultSet(WriteGraph graph, Resource resultSet) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + for (Resource result : graph.syncRequest(new ObjectsWithType(resultSet, sr.Experiment_result, sr.Result))) { + SimulationResultNode.unlinkResult(graph, result); + } + RemoverUtil.remove(graph, resultSet); + } + + @Override + public boolean handleDoubleClick() { + Resource[] resources = {data}; + ToggleResultSetActivation.toggleActivation(resources); + return true; + } +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ToggleResultSetActivation.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ToggleResultSetActivation.java new file mode 100644 index 00000000..a667a8c0 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/ToggleResultSetActivation.java @@ -0,0 +1,76 @@ +/******************************************************************************* + * Copyright (c) 2010, 2011 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.ui.handlers; + +import java.util.Collection; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.jface.viewers.ISelection; +import org.eclipse.ui.handlers.HandlerUtil; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.ui.SimanticsUI; +import org.simantics.ui.utils.ResourceAdaptionUtils; + +public class ToggleResultSetActivation extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + ISelection sel = HandlerUtil.getCurrentSelection(event); + Resource[] resources = ResourceAdaptionUtils.toResources(sel); + if (resources.length == 0) + return null; + + toggleActivation(resources); + + return null; + } + + public static void toggleActivation(final Resource[] resources) { + try { + SimanticsUI.getSession().syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + for(Resource r : resources) { + // If there is at least one result which shown, clear them all. + // If not one result is shown, show them all. + boolean resultShown = false; + Collection results = graph.getObjects(r, sr.Experiment_result); + for (Resource result : results) { + if (graph.hasStatement(result, sr.Result_showResult)) { + resultShown = true; + break; + } + } + for (Resource result : results) { + if (resultShown) { + graph.denyStatement(result, sr.Result_showResult, result); + } else { + graph.claim(result, sr.Result_showResult, result); + } + } + } + } + + }); + } catch (DatabaseException e) { + + } + } +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java index 5fd9af0b..5f00db8b 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/project/SysdynProject.java @@ -229,6 +229,14 @@ public class SysdynProject extends AbstractProjectFeature { if(result != null) resultPaths.put(resultFile, result); } } + for(Resource resultSet : graph.getObjects(experiment, sr.Experiment_resultSet)) { + for(Resource result : graph.getObjects(resultSet, sr.Experiment_result)) { + if(!graph.isInstanceOf(result, sr.HistoryDataset)) { + String resultFile = (String)graph.getPossibleRelatedValue(result, sr.Result_resultFile); + if(result != null) resultPaths.put(resultFile, result); + } + } + } } } } diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/ActiveResults.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/ActiveResults.java index 5e1f3fa6..6ae1b035 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/ActiveResults.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/ActiveResults.java @@ -54,6 +54,15 @@ public class ActiveResults implements Read>{ result.add(r); } } + Collection experimentResultSets = graph.getObjects(experiment, SR.Experiment_resultSet); + for(Resource resultSet : experimentResultSets) { + experimentResults = graph.getObjects(resultSet, SR.Experiment_result); + for(Resource r : experimentResults) { + if(graph.hasStatement(r, SR.Result_showResult)) { + result.add(r); + } + } + } } return result; diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultJob.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultJob.java index 7b0ea6ba..caf06b3d 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultJob.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultJob.java @@ -56,7 +56,7 @@ public class SaveResultJob extends Job { protected IStatus run(IProgressMonitor monitor) { this.monitor = monitor; int resultItemsNumber = sysdynResult.numberOfVariables(); - monitor.beginTask("Save result", resultItemsNumber * 2); + monitor.beginTask("Save result", resultItemsNumber * 2 + 1); try { // Create result file file = session.syncRequest(new Read() { diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultSetJob.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultSetJob.java new file mode 100644 index 00000000..21385549 --- /dev/null +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SaveResultSetJob.java @@ -0,0 +1,153 @@ +/******************************************************************************* + * Copyright (c) 2010, 2013 Association for Decentralized Information Management in + * Industry THTH ry. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * VTT Technical Research Centre of Finland - initial API and implementation + *******************************************************************************/ +package org.simantics.sysdyn.manager; + +import java.io.File; +import java.util.ArrayList; +import java.util.UUID; + +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Platform; +import org.eclipse.core.runtime.Status; +import org.eclipse.core.runtime.jobs.Job; +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.Session; +import org.simantics.db.WriteGraph; +import org.simantics.db.common.request.WriteRequest; +import org.simantics.db.common.request.WriteResultRequest; +import org.simantics.db.common.utils.NameUtils; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.request.Read; +import org.simantics.layer0.Layer0; +import org.simantics.layer0.utils.direct.GraphUtils; +import org.simantics.sysdyn.SysdynResource; + +/** + * Class for saving simulation result sets. + * @author Tuomas Miettinen + * + */ +public class SaveResultSetJob extends Job { + + private final ArrayList sysdynResults; + private final SysdynExperiment experiment; + private final Session session; + private IProgressMonitor monitor; + private File file; + + public SaveResultSetJob(final SysdynExperiment experiment, Session session, final ArrayList results) { + super("Save Results"); + this.experiment = experiment; + this.sysdynResults = results; + this.session = session; + } + + @Override + protected IStatus run(IProgressMonitor monitor) { + this.monitor = monitor; + if (sysdynResults == null || sysdynResults.size() == 0) + return Status.CANCEL_STATUS; + int resultItemsNumber = sysdynResults.get(0).numberOfVariables() * sysdynResults.size(); + monitor.beginTask("Save results", resultItemsNumber * 2 + 2); + + try { + // Create a ResultSet, under which the individual results are stored, and + // add it under the experiment within the model browser. + + final Resource resultSetResource = session.syncRequest(new WriteResultRequest() { + + @Override + public Resource perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + Resource model = graph.getSingleObject(experiment.getResource(), l0.PartOf); + String name = NameUtils.findFreshName(graph, "ResultSet", model, l0.ConsistsOf, "%s%d"); + + SysdynResource sr = SysdynResource.getInstance(graph); + Resource res = GraphUtils.create2(graph, sr.ResultSet, + l0.HasLabel, name, + l0.HasName, name, + l0.PartOf, model, + sr.Result_time, System.currentTimeMillis()); + graph.claim(experiment.getResource(), sr.Experiment_resultSet, res); + return res; + } + }); + monitor.worked(1); + + // Save the individual results + for (int i = 0; i < sysdynResults.size(); ++i) { + MemoryResult result = sysdynResults.get(i); + final String name = new Integer(i+1).toString(); + // Create result file + file = session.syncRequest(new Read() { + + @Override + public File perform(ReadGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + Resource model = graph.getSingleObject(experiment.getResource(), l0.PartOf); + Resource project = graph.getSingleObject(model, l0.PartOf); + String projectName = graph.getPossibleRelatedValue(project, l0.HasName); + File root = new File(Platform.getLocation().toOSString(), "www.simantics.org"); + if(!root.isDirectory()) root.mkdir(); + File projectRoot = new File(root, projectName); + if(!projectRoot.isDirectory()) projectRoot.mkdir(); + File file = new File( projectRoot, UUID.randomUUID().toString() + ".dbb"); + return file; + } + }); + + // Start the saving operation + Thread saveThread = experiment.getSaveThread(result, file, SaveResultSetJob.this.monitor); + saveThread.run(); + + // Add the result under the ResultSet within the model browser. + session.syncRequest(new WriteRequest() { + + @Override + public void perform(WriteGraph graph) throws DatabaseException { + Layer0 l0 = Layer0.getInstance(graph); + String resultSetName = graph.getRelatedValue(resultSetResource, l0.HasName); + + SysdynResource sr = SysdynResource.getInstance(graph); + Resource res = GraphUtils.create2(graph, sr.Result, + l0.HasLabel, name, + l0.HasName, resultSetName + "#" + name, + sr.Result_resultFile, file.getAbsolutePath(), + sr.Result_time, System.currentTimeMillis()); + graph.claim(resultSetResource, sr.Experiment_result, res); + } + }); + + } + + } catch (DatabaseException e1) { + // TODO Auto-generated catch block + e1.printStackTrace(); + } + + monitor.done(); + return Status.OK_STATUS; + } + + @Override + public boolean belongsTo(Object family) { + return "SaveResultSetJob".equals(family); + } + + @Override + protected void canceling() { + + } + +} diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java index 182f0430..c543e95d 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java @@ -322,8 +322,8 @@ public class SysdynSensitivityAnalysisExperiment extends SysdynExperiment { public void saveState() { if(results == null || !(results instanceof ArrayList)) return; - //SaveResultJob saveResultJob = new SaveResultJob(SysdynSensitivityAnalysisExperiment.this, session, results); - //saveResultJob.schedule(); + SaveResultSetJob saveResultSetJob = new SaveResultSetJob((SysdynExperiment)this, session, results); + saveResultSetJob.schedule(); } @Override -- 2.47.1