]> gerrit.simantics Code Review - simantics/sysdyn.git/commitdiff
refs #4971
authorjussi.koskela <jussi.koskela@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Wed, 18 Jun 2014 13:50:38 +0000 (13:50 +0000)
committerjussi.koskela <jussi.koskela@ac1ea38d-2e2b-0410-8846-a27921b304fc>
Wed, 18 Jun 2014 13:50:38 +0000 (13:50 +0000)
git-svn-id: https://www.simantics.org/svn/simantics/sysdyn/trunk@29656 ac1ea38d-2e2b-0410-8846-a27921b304fc

org.simantics.sysdyn/scl/Sysdyn.scl
org.simantics.sysdyn/src/org/simantics/sysdyn/utils/DocumentationUtils.java

index 7b48a7f45b7753970c837b54622691cb2813f403..12e7ef77425a5d194c3d4fbcfc5e81ca4caf3173 100644 (file)
@@ -92,6 +92,7 @@ importJava "org.simantics.sysdyn.utils.DocumentationUtils" where
 \r
     lastValue :: Resource -> String -> String -> Double\r
     lastValue2 :: Variable -> String -> <ReadGraph> Variable\r
+    lastValueIndexed :: Variable -> String -> <ReadGraph> Variable\r
     equation :: Variable -> String -> <ReadGraph> Variable\r
 \r
 importJava "org.simantics.sysdyn.manager.SysdynExperiments" where\r
index 0d5c613136044ea90016598c8c14261fd9848ea4..28ec9bf63d30876ba1c70d162eb4bf4281f388db 100644 (file)
@@ -7,6 +7,8 @@ import java.util.Comparator;
 import java.util.Date;\r
 import java.util.List;\r
 import java.util.concurrent.TimeUnit;\r
+import java.util.regex.Matcher;\r
+import java.util.regex.Pattern;\r
 \r
 import org.eclipse.core.runtime.NullProgressMonitor;\r
 import org.simantics.Simantics;\r
@@ -19,6 +21,7 @@ import org.simantics.db.common.request.UniqueRead;
 import org.simantics.db.common.request.WriteRequest;\r
 import org.simantics.db.common.utils.ListUtils;\r
 import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.exception.MissingVariableException;\r
 import org.simantics.db.layer0.util.EvaluatingListener;\r
 import org.simantics.db.layer0.util.EvaluatingListener.Criterion;\r
 import org.simantics.db.layer0.util.EvaluatingListener.Evaluation;\r
@@ -43,6 +46,7 @@ import org.simantics.sysdyn.representation.Variability;
 import org.simantics.sysdyn.representation.Variable;\r
 import org.simantics.sysdyn.utils.imports.ImportUtils;\r
 import org.simantics.utils.DataContainer;\r
+import org.simantics.utils.datastructures.Pair;\r
 \r
 public class DocumentationUtils {\r
     \r
@@ -568,6 +572,37 @@ public class DocumentationUtils {
        \r
     }\r
 \r
+    /**\r
+     * Splits indexed variable reference into name and indices part.\r
+     * \r
+     * @param path\r
+     */\r
+    public static Pair<String, String> splitToNameAndIndices(String reference) {\r
+       final Pattern indexPattern = Pattern.compile("^([^\\[]*)\\[([^\\]]*)]$");\r
+       Matcher m = indexPattern.matcher(reference);\r
+       \r
+       if (m.matches()) {\r
+               String name = m.group(1);\r
+               String indices = m.group(2).trim().replaceAll("\\s*,\\s*", ",");\r
+               return Pair.make(name, indices);\r
+       } else {\r
+               return Pair.make(reference, "");\r
+       }\r
+\r
+    }\r
+    \r
+    public static org.simantics.db.layer0.variable.Variable lastValueIndexed(ReadGraph graph, org.simantics.db.layer0.variable.Variable run, String path) throws DatabaseException {\r
+       \r
+       if(run == null) return null;\r
+\r
+       Pair<String, String> nameAndIndices = splitToNameAndIndices(path);\r
+\r
+       org.simantics.db.layer0.variable.Variable v = run.browsePossible(graph, "/" + nameAndIndices.first + "#value#" + nameAndIndices.second);\r
+       if(v == null) throw new MissingVariableException("No variable for SysDyn reference path: " + path);\r
+       \r
+       return v;\r
+    }    \r
+    \r
     public static org.simantics.db.layer0.variable.Variable equation(ReadGraph graph, org.simantics.db.layer0.variable.Variable run, String path) throws DatabaseException {\r
 \r
        if(run == null) return null;\r