]> gerrit.simantics Code Review - simantics/sysdyn.git/blob
ee6fad6b88378e8896df5071a79f95a48daff529
[simantics/sysdyn.git] /
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2012 Association for Decentralized Information Management in\r
3  * Industry THTH ry.\r
4  * All rights reserved. This program and the accompanying materials\r
5  * are made available under the terms of the Eclipse Public License v1.0\r
6  * which accompanies this distribution, and is available at\r
7  * http://www.eclipse.org/legal/epl-v10.html\r
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.sysdyn.ui.properties.widgets.modules;\r
13 \r
14 import java.util.List;\r
15 \r
16 import org.simantics.db.ReadGraph;\r
17 import org.simantics.db.Resource;\r
18 import org.simantics.db.common.request.ObjectsWithType;\r
19 import org.simantics.db.common.utils.NameUtils;\r
20 import org.simantics.db.common.utils.OrderedSetUtils;\r
21 import org.simantics.db.exception.DatabaseException;\r
22 import org.simantics.layer0.Layer0;\r
23 import org.simantics.sysdyn.SysdynResource;\r
24 import org.simantics.sysdyn.representation.IndependentVariable;\r
25 \r
26 /**\r
27  * Utilities for module parameter override functionalities\r
28  * \r
29  * @author Teemu Lempinen\r
30  *\r
31  */\r
32 public class ModuleParameterOverrideUtils {\r
33 \r
34     /**\r
35      * Get the parameter expression of a variable or null, if it does not contain a parameter expression,\r
36      * or there are many parameter expressions\r
37      * @param graph ReadGraph\r
38      * @param variable IndependentVariable\r
39      * @return parameter expression or null\r
40      * @throws DatabaseException\r
41      */\r
42     public static String getParameterExpression(IndependentVariable variable) throws DatabaseException {\r
43         String result = null;\r
44         try {\r
45             result = variable.getExpressions().getExpressions().get(0).getExpression(variable);\r
46         if(result.contains("/* Actual value read from init file */"))\r
47             result = result.substring(0, result.indexOf("/* Actual value read from init file */"));\r
48         } catch (NullPointerException e) {\r
49         }\r
50         return result;\r
51     }\r
52     \r
53     /**\r
54      * Get the expression, or the overriding expression, of a parameter\r
55      * @param graph ReadGraph\r
56      * @param parent Parent resource\r
57      * @param variable IndependentVariable\r
58      * @return Overriding expression, or the default parameter expression, or null\r
59      * @throws DatabaseException\r
60      */\r
61     public static String getParameterExpressionOrOverride(ReadGraph graph, Resource parent, IndependentVariable variable)\r
62             throws DatabaseException {\r
63         String result = null;\r
64         SysdynResource sr = SysdynResource.getInstance(graph);\r
65         Layer0 L0 = Layer0.getInstance(graph);\r
66 \r
67         // Get possible override\r
68         for(Resource r : graph.syncRequest(new ObjectsWithType(parent, L0.ConsistsOf, sr.Module_ParameterOverride))) {\r
69             Resource overridden = graph.getPossibleObject(r, sr.Module_ParameterOverride_overriddenParameter);\r
70             if(variable.getName().equals(NameUtils.getSafeName(graph, overridden))) {\r
71                 result = graph.getPossibleRelatedValue(r, sr.Module_ParameterOverride_overrideExpression);\r
72             }\r
73         }\r
74         \r
75         if(result == null) {\r
76             // Parameter is not overridden, find the actual expression\r
77             result = getParameterExpression(variable);\r
78         }\r
79         return result;\r
80     }\r
81     \r
82     /**\r
83      * Find out if a variable has a single parameter expression \r
84      * @param graph ReadGraph\r
85      * @param variable Variable\r
86      * @return does the variable have a single parameter expression\r
87      * @throws DatabaseException\r
88      */\r
89     public static boolean hasParameterExpression(ReadGraph graph, Resource variable) throws DatabaseException {\r
90         SysdynResource sr = SysdynResource.getInstance(graph);\r
91         boolean result = false;\r
92         Resource expressionsResource = graph.getPossibleObject(variable, sr.Variable_expressions);\r
93         if(expressionsResource != null) {\r
94             List<Resource> expressions = OrderedSetUtils.toList(graph, expressionsResource);\r
95             if(expressions.size() == 1 && graph.isInstanceOf(expressions.get(0), sr.ParameterExpression)) {\r
96                 result = true;\r
97             }\r
98         }\r
99         return result;\r
100     }\r
101 \r
102 }\r