From c29b55be4038c38707c030db0862f3fbf7a7ffc1 Mon Sep 17 00:00:00 2001 From: miettinen Date: Fri, 15 Mar 2013 07:02:42 +0000 Subject: [PATCH] Initial version of the user interface for the sensitivity analysis simulation (refs #4171). Currently there is little functionality under the interface. git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@27102 ac1ea38d-2e2b-0410-8846-a27921b304fc --- org.simantics.sysdyn.ontology/graph.tg | Bin 145235 -> 146144 bytes .../graph/Sysdyn.pgraph | 8 + .../org/simantics/sysdyn/SysdynResource.java | 33 ++++ org.simantics.sysdyn.ui/icons/rainbow.png | Bin 0 -> 655 bytes org.simantics.sysdyn.ui/plugin.xml | 134 ++++++++++++++- .../contributions/AbstractNodeImager.java | 2 + ...java => NewGameExperimentNodeHandler.java} | 2 +- ...sitivityAnalysisExperimentNodeHandler.java | 47 ++++++ .../RunSensitivityAnalysisExperiment.java | 69 ++++++++ .../SaveResultsHandler.java | 45 +++++ .../sensitivityAnalysis/ToggleSimulation.java | 87 ++++++++++ .../SysdynExperimentManagerListener.java | 11 +- .../ResourceSelectionProcessor.java | 13 +- .../SensitivityAnalysisExperimentTab.java | 115 +++++++++++++ .../factories/IntegerPropertyFactory.java | 43 +++++ .../factories/IntegerPropertyModifier.java | 39 +++++ .../simantics/sysdyn/manager/SysdynModel.java | 10 +- .../SysdynSensitivityAnalysisExperiment.java | 158 ++++++++++++++++++ 18 files changed, 805 insertions(+), 11 deletions(-) create mode 100644 org.simantics.sysdyn.ui/icons/rainbow.png rename org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/{NewGameExperimentNodeHanlder.java => NewGameExperimentNodeHandler.java} (94%) create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewSensitivityAnalysisExperimentNodeHandler.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/RunSensitivityAnalysisExperiment.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/SaveResultsHandler.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/ToggleSimulation.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/SensitivityAnalysisExperimentTab.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/factories/IntegerPropertyFactory.java create mode 100644 org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/factories/IntegerPropertyModifier.java create mode 100644 org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java diff --git a/org.simantics.sysdyn.ontology/graph.tg b/org.simantics.sysdyn.ontology/graph.tg index 138c666ddf7ebd40296ee66842597ac8e4c07a96..a7b7d77e4d60bc63d49fa91846c27fd24e7fbb2d 100644 GIT binary patch literal 146144 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 literal 145235 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

j@Q3m-A{sSh~l`xEeo4W02rUWfR>Ho+P% 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 SYSDYN.SensitivityAnalysisExperiment.propabilityDistribution --> L0.String -- SYSDYN.SensitivityAnalysisExperiment.variedParameter --> SYSDYN.Auxiliary -- SYSDYN.SensitivityAnalysisExperiment.variedParameter --> L0.String -- SYSDYN.SensitivityAnalysisExperiment.minValue --> L0.Double -- SYSDYN.SensitivityAnalysisExperiment.maxValue --> L0.Double -- SYSDYN.SensitivityAnalysisExperiment.numValues --> L0.Integer u8hXXmW8$M^Z}tgueu#dCAu^FHtQeV(HM&<>-oby}}zNt6*; zqOz!R7;sXQCXnvAh%NsOY!BYTPS6Ya_FvE=N~N0XvE{pt>_abd<38j9C$Sf5#*g^{ z6#d#i;i$++U%QNK=q`5eyJ3V~u*Q$0G+EWp#2~B(nj<_bDs2zkL~hK7Lhu+$HfYV9 zg88}w#kZGWr6!PHZ*X)j?F`*Ue##H?v8xKkTTpy+9>!)Dj4xM}tnU%z-?{#Jvq5LV z)@YN0%~$O(K6n)LZPSD2E1d`=S}^f`2uGvZfdMJLnQPaaO}!IFvKxB>&n|bMcm4$0 zUpC_Oiw1-@0yr|I9f+!ueRKzf;l|(20%tyTVPvrtXKnCG%!j^695MYP&h*dy8jxmG zh3GwXFus{<)0uFafajiFK;M%%ru8Id^v`&@kgN`{8&+n{jEe5+VD{Q{CLD|<6d0af zLr+L2Y>HMnV2KT5NtiRE;&b?xw@c1+=e2n-zL{&& zned;z;Q))>W;sY6uKp4No)iE8002ovPDHLkV1im2E0q8M literal 0 HcmV?d00001 diff --git a/org.simantics.sysdyn.ui/plugin.xml b/org.simantics.sysdyn.ui/plugin.xml index 420781a5..46659c96 100644 --- a/org.simantics.sysdyn.ui/plugin.xml +++ b/org.simantics.sysdyn.ui/plugin.xml @@ -194,6 +194,10 @@ id="org.simantics.sysdyn.ui.gameExperiment" name="Game experiment"> + + @@ -459,6 +463,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -563,6 +647,23 @@ + + + + + + + + + + + + + + + + + + + + @@ -1627,9 +1755,13 @@ commandId="org.simantics.sysdyn.ui.newPlaybackExperiment"> + + 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 966a8b47..7b41ca14 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 @@ -76,6 +76,8 @@ public class AbstractNodeImager extends ImagerContributor image = "icons/timeline_marker.png"; 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"; else image = "icons/time.png"; } else if (node instanceof InputNode) diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHanlder.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHandler.java similarity index 94% rename from org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHanlder.java rename to org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHandler.java index fb83a750..7d759c34 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHanlder.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewGameExperimentNodeHandler.java @@ -23,7 +23,7 @@ import org.simantics.sysdyn.manager.SysdynGameExperiment; * @author Teemu Lempinen * */ -public class NewGameExperimentNodeHanlder extends NewExperimentNodeHandler { +public class NewGameExperimentNodeHandler extends NewExperimentNodeHandler { protected Resource getExperimentType(ReadGraph g) { return SysdynResource.getInstance(g).GameExperiment; diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewSensitivityAnalysisExperimentNodeHandler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewSensitivityAnalysisExperimentNodeHandler.java new file mode 100644 index 00000000..26d63daf --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/newComponents/NewSensitivityAnalysisExperimentNodeHandler.java @@ -0,0 +1,47 @@ +/******************************************************************************* + * Copyright (c) 2007, 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.newComponents; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.sysdyn.SysdynResource; +import org.simantics.sysdyn.manager.SysdynSensitivityAnalysisExperiment; + +/** + * Creates a new sensitivity analysis experiment. + * + * @author Tuomas Miettinen + * + */ +public class NewSensitivityAnalysisExperimentNodeHandler extends NewExperimentNodeHandler { + + @Override + protected void configureExperiment(WriteGraph graph, Resource experiment) throws DatabaseException { + SysdynResource sr = SysdynResource.getInstance(graph); + graph.claimLiteral(experiment, sr.SensitivityAnalysisExperiment_minValue, SysdynSensitivityAnalysisExperiment.DEFAULT_MIN_VALUE); + graph.claimLiteral(experiment, sr.SensitivityAnalysisExperiment_maxValue, SysdynSensitivityAnalysisExperiment.DEFAULT_MAX_VALUE); + graph.claimLiteral(experiment, sr.SensitivityAnalysisExperiment_numValues, SysdynSensitivityAnalysisExperiment.DEFAULT_NUM_VALUES); + graph.claimLiteral(experiment, sr.SensitivityAnalysisExperiment_propabilityDistribution, "uniform"); + } + + @Override + protected Resource getExperimentType(ReadGraph g) { + return SysdynResource.getInstance(g).SensitivityAnalysisExperiment; + } + + @Override + protected String getNameSuggestion() { + return "Sensitivity Experiment"; + } +} \ No newline at end of file diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/RunSensitivityAnalysisExperiment.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/RunSensitivityAnalysisExperiment.java new file mode 100644 index 00000000..9702a8e2 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/RunSensitivityAnalysisExperiment.java @@ -0,0 +1,69 @@ +/******************************************************************************* + * Copyright (c) 2010 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.sensitivityAnalysis; + + +import java.util.Map; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.ui.commands.IElementUpdater; +import org.eclipse.ui.menus.UIElement; +import org.simantics.simulation.experiment.ExperimentState; +import org.simantics.simulation.experiment.IDynamicExperiment; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.manager.SysdynExperiment; +import org.simantics.sysdyn.ui.utils.HandlerUtils; +import org.simantics.ui.SimanticsUI; + +/** + * Handler for starting a sensitivity analysis simulation + * @author Tuomas Miettinen + * + */ +public class RunSensitivityAnalysisExperiment extends AbstractHandler implements IElementUpdater { + + public static final String COMMAND = "org.simantics.sysdyn.ui.runSensitivityAnalysis"; + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + // Current functionality is normal run experiment + + HandlerUtils.saveEquation(event); + + IExperimentManager manager = + SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment instanceof IDynamicExperiment) + ((IDynamicExperiment)experiment).simulate(true); + return null; + } + + // What does this method do, is this needed? + @SuppressWarnings("rawtypes") + @Override + public void updateElement(UIElement element, Map parameters) { + IExperimentManager manager = + SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment instanceof SysdynExperiment) { + ExperimentState state = experiment.getState(); + if(state == ExperimentState.RUNNING) { + this.setBaseEnabled(false); + } else { + this.setBaseEnabled(true); + } + } + } +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/SaveResultsHandler.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/SaveResultsHandler.java new file mode 100644 index 00000000..e0bc013b --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/SaveResultsHandler.java @@ -0,0 +1,45 @@ +/******************************************************************************* + * Copyright (c) 2010 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.sensitivityAnalysis; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.simantics.simulation.experiment.IDynamicExperiment; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.ui.utils.HandlerUtils; +import org.simantics.ui.SimanticsUI; + +/** + * Save the results of a sensitivity analysis experiment + * @author Tuomas Miettinen + * + */ +public class SaveResultsHandler extends AbstractHandler { + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + // Current functionality is normal run experiment + + HandlerUtils.saveEquation(event); + + IExperimentManager manager = + SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment instanceof IDynamicExperiment) { + ((IDynamicExperiment)experiment).saveState(); + } + return null; + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/ToggleSimulation.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/ToggleSimulation.java new file mode 100644 index 00000000..291f936f --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/handlers/sensitivityAnalysis/ToggleSimulation.java @@ -0,0 +1,87 @@ +/******************************************************************************* + * Copyright (c) 2010 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.sensitivityAnalysis; + + +import java.util.Map; + +import org.eclipse.core.commands.AbstractHandler; +import org.eclipse.core.commands.Command; +import org.eclipse.core.commands.ExecutionEvent; +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.State; +import org.eclipse.ui.PlatformUI; +import org.eclipse.ui.commands.ICommandService; +import org.eclipse.ui.commands.IElementUpdater; +import org.eclipse.ui.menus.UIElement; +import org.simantics.simulation.experiment.IExperiment; +import org.simantics.simulation.project.IExperimentManager; +import org.simantics.sysdyn.manager.SysdynExperiment; +import org.simantics.sysdyn.ui.utils.HandlerUtils; +import org.simantics.ui.SimanticsUI; + +/** + * Handle for the Toggle Simulation button. When the button is down, the + * simulation is run every time the model is changed. + * @author Tuomas Miettinen + * + */ +public class ToggleSimulation extends AbstractHandler implements IElementUpdater { + + public static final String COMMAND = "org.simantics.sysdyn.ui.toggleSensitivityAnalysisSimulation"; + public static final String STATE = "org.simantics.sysdyn.ui.toggleSensitivityAnalysisSimulation.state"; + + @Override + public Object execute(ExecutionEvent event) throws ExecutionException { + // Current functionality is normal run experiment + + ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); + Command command = service.getCommand(COMMAND); + State state = command.getState(STATE); + Boolean value = (Boolean) state.getValue(); + value = !value; + state.setValue(value); + service.refreshElements(RunSensitivityAnalysisExperiment.COMMAND, null); + + IExperimentManager manager = + SimanticsUI.getProject().getHint(IExperimentManager.KEY_EXPERIMENT_MANAGER); + IExperiment experiment = manager.getActiveExperiment(); + if(experiment instanceof SysdynExperiment) { + if(getState()) { + ((SysdynExperiment)experiment).toggleSimulation(true); + } else { + ((SysdynExperiment)experiment).toggleSimulation(false); + } + } + + HandlerUtils.saveEquation(event); + + return null; + } + + public static Boolean getState() { + ICommandService service = (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); + Command command = service.getCommand(COMMAND); + State state = command.getState(STATE); + return (Boolean)state.getValue(); + } + + @SuppressWarnings("rawtypes") + @Override + public void updateElement(UIElement element, Map parameters) { + ICommandService commandService = + (ICommandService) PlatformUI.getWorkbench().getService(ICommandService.class); + Command command = commandService.getCommand(COMMAND); + boolean checked = (Boolean) command.getState(STATE).getValue(); + element.setChecked(checked); + } +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java index 4201112a..d9c50e81 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/listeners/SysdynExperimentManagerListener.java @@ -26,13 +26,15 @@ import org.simantics.simulation.project.IExperimentManagerListener; import org.simantics.sysdyn.manager.SysdynExperiment; import org.simantics.sysdyn.manager.SysdynGameExperiment; import org.simantics.sysdyn.manager.SysdynPlaybackExperiment; +import org.simantics.sysdyn.manager.SysdynSensitivityAnalysisExperiment; public class SysdynExperimentManagerListener implements IExperimentManagerListener{ public static final String BASIC_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.basicExperiment"; public static final String PLAYBACK_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.playbackExperiment"; public static final String GAME_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.gameExperiment"; - + public static final String SENSITIVITY_ANALYSIS_EXPERIMENT_CONTEXT = "org.simantics.sysdyn.ui.sensitivityAnalysisExperiment"; + static Set managers = new HashSet(); @@ -72,8 +74,11 @@ public class SysdynExperimentManagerListener implements IExperimentManagerListen contextActivations.add(contextService.activateContext(PLAYBACK_EXPERIMENT_CONTEXT)); experiment.addListener(new SysdynPlaybackExperimentListener((SysdynPlaybackExperiment)experiment)); } else if(experiment instanceof SysdynGameExperiment) { - contextActivations.add(contextService.activateContext(GAME_EXPERIMENT_CONTEXT)); - // TODO: some listener? + contextActivations.add(contextService.activateContext(GAME_EXPERIMENT_CONTEXT)); + // TODO: some listener? + } else if(experiment instanceof SysdynSensitivityAnalysisExperiment) { + contextActivations.add(contextService.activateContext(SENSITIVITY_ANALYSIS_EXPERIMENT_CONTEXT)); + // TODO: some listener? } else if(experiment instanceof SysdynExperiment) { contextActivations.add(contextService.activateContext(BASIC_EXPERIMENT_CONTEXT)); } diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java index ab4c39b5..28e01ecc 100644 --- a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/ResourceSelectionProcessor.java @@ -295,7 +295,7 @@ public class ResourceSelectionProcessor implements SelectionProcessor { + + final private String propertyURI; + + public IntegerPropertyFactory(String propertyURI) { + this.propertyURI = propertyURI; + } + + @Override + public Object getIdentity(Object inputContents) { + return new Triple((Resource)inputContents, propertyURI, getClass()); + } + + @Override + public String perform(ReadGraph graph, Resource issue) throws DatabaseException { + + Integer value = graph.getPossibleRelatedValue(issue, graph.getResource(propertyURI)); + if (value != null) + return value.toString(); + else + return ""; + } + +} diff --git a/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/factories/IntegerPropertyModifier.java b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/factories/IntegerPropertyModifier.java new file mode 100644 index 00000000..fb612405 --- /dev/null +++ b/org.simantics.sysdyn.ui/src/org/simantics/sysdyn/ui/properties/widgets/factories/IntegerPropertyModifier.java @@ -0,0 +1,39 @@ +/******************************************************************************* + * Copyright (c) 2010 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.properties.widgets.factories; + +import org.simantics.browsing.ui.swt.widgets.impl.TextModifyListenerImpl; +import org.simantics.databoard.Bindings; +import org.simantics.db.Resource; +import org.simantics.db.WriteGraph; +import org.simantics.db.exception.DatabaseException; +import org.simantics.db.management.ISessionContext; + +public class IntegerPropertyModifier extends TextModifyListenerImpl { + + final private String propertyURI; + + public IntegerPropertyModifier(ISessionContext context, String propertyURI) { + this.propertyURI = propertyURI; + } + + @Override + public void applyText(WriteGraph graph, Resource input, String text) throws DatabaseException { + if (text == null || text.equals("")) { + if(graph.hasStatement(input, graph.getResource(propertyURI))) + graph.deny(input, graph.getResource(propertyURI)); + } else { + graph.claimLiteral(input, graph.getResource(propertyURI), Integer.parseInt(text), Bindings.INTEGER); + } + } + +} diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java index b5c5e6e0..bfe35fa1 100644 --- a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynModel.java @@ -74,12 +74,12 @@ public class SysdynModel implements IMappingListener, IModel, VariableSubscripti private Configuration configuration; - private Set modules = new HashSet(); + private final Set modules = new HashSet(); private ArrayList displayedResults; - private ArrayList listeningHistories = new ArrayList(); + private final ArrayList listeningHistories = new ArrayList(); - private CopyOnWriteArrayList modificationListeners = + private final CopyOnWriteArrayList modificationListeners = new CopyOnWriteArrayList(); @SuppressWarnings("rawtypes") @@ -88,7 +88,7 @@ public class SysdynModel implements IMappingListener, IModel, VariableSubscripti protected volatile VariableValueSubscription[] variableValueSubscriptionsSnapshot = null; @SuppressWarnings("rawtypes") - private Map services = new HashMap(); + private final Map services = new HashMap(); /** * Recursively read all module configurations that are used in @@ -413,6 +413,8 @@ public class SysdynModel implements IMappingListener, IModel, VariableSubscripti exp = new SysdynPlaybackExperiment(experiment, modelResource); } else if(g.isInstanceOf(experiment, sr.GameExperiment)) { exp = new SysdynGameExperiment(experiment, modelResource); + } else if(g.isInstanceOf(experiment, sr.SensitivityAnalysisExperiment)) { + exp = new SysdynSensitivityAnalysisExperiment(experiment, modelResource); } else if(g.isInstanceOf(experiment, sr.BasicExperiment)) { exp = new SysdynExperiment(experiment, modelResource); } else { diff --git a/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java new file mode 100644 index 00000000..c7da1528 --- /dev/null +++ b/org.simantics.sysdyn/src/org/simantics/sysdyn/manager/SysdynSensitivityAnalysisExperiment.java @@ -0,0 +1,158 @@ +/******************************************************************************* + * Copyright (c) 2007, 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.manager; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.concurrent.ScheduledExecutorService; + +import org.simantics.db.ReadGraph; +import org.simantics.db.Resource; +import org.simantics.simulation.experiment.IDynamicExperiment; + +/** + * Sensitivity analysis experiment + * @author Tuomas Miettinen + * + */ +public class SysdynSensitivityAnalysisExperiment extends SysdynExperiment implements IDynamicExperiment { + + public enum Distribution { + UNIFORM, + NORMAL + } + + private final Distribution propabilityDistribution = DEFAULT_PROPABILITY_DISTRIBUTION; + + public static Distribution DEFAULT_PROPABILITY_DISTRIBUTION = Distribution.UNIFORM; + public static double DEFAULT_MIN_VALUE = 1.0; + public static double DEFAULT_MAX_VALUE = 3.0; + public static int DEFAULT_NUM_VALUES = 3; + + private final Collection timeListeners = new ArrayList(); + + ScheduledExecutorService playbackExecutionService; + //SensitivityAnalysisConfiguration playbackConfiguration; + + public SysdynSensitivityAnalysisExperiment(Resource experiment, Resource model) { + super(experiment, model); + } + + + /** + * Interrupts a possible ongoing playback + * + * @param time + */ +// public void setTimeInterrupting(double time) { +// stopPlayback(); +// setTime(time); +// } +// +// /** +// * Sets a new time and continues playback from that point if +// * playback was running +// * @param time +// */ +// public void setTimeAndContinue(double time) { +// if(isPlaybackRunning()) { +// stopPlayback(); +// setTime(time); +// startPlayback(500); +// } else { +// setTime(time); +// } +// } +/* + private void setTime(double time) { + this.time = time; + resultsChanged(); + } + + public double getTime() { + return this.time; + } + + public double getStartTime() { + return this.startTime; + } + + public double getEndTime() { + return this.endTime; + } + + public void setPlaybackDuration(long duration) { + this.playbackDuration = duration; + if(isPlaybackRunning()) { + //Restart playback with different time settings + startPlayback(); + } + } + + public long getPlaybackDuration() { + return this.playbackDuration; + } + + @Override + public void init(ReadGraph g) { + super.init(g); + this.session = g.getSession(); + session.asyncRequest(new ReadRequest() { + + @Override + public void run(ReadGraph graph) throws DatabaseException { + changeState(ExperimentState.RUNNING); + final Resource configuration = graph.getPossibleObject(model, SimulationResource.getInstance(graph).HasConfiguration); + sysdynModel = SysdynModelManager.getInstance(session).getModel(graph, configuration); + toggleActivation(graph, true); + //getPlaybackConfiguration(graph); + startSimulationJob(); + } + }); + } + + + + private class SensitivityAnalysisConfiguration { + public double simulationDuration, simulationStepLength, intervals, endTime, startTime; + public long playbackDuration; + } + + @Override + protected void localStateChange() { + super.localStateChange(); + } + + // TIME LISTENERS + public void addTimeListener(Runnable timeListener) { + if(!this.timeListeners.contains(timeListener)) + this.timeListeners.add(timeListener); + } + + public Collection getTimeListeners() { + return this.timeListeners; + } + + public void removeTimeListener(Runnable timeListener) { + this.timeListeners.remove(timeListener); + } + + @Override + public void resultsChanged() { + for(Runnable listener : timeListeners) { + listener.run(); + } + super.resultsChanged(); + + } +*/ +} -- 2.47.1