]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/scl/Simantics/Subscription.scl
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / scl / Simantics / Subscription.scl
1 import "Simantics/DB"\r
2 import "Simantics/Variables"\r
3 import "Simantics/Entity"\r
4 import "Simantics/Model"\r
5 import "http://www.simantics.org/Modeling-1.2" as MOD\r
6 \r
7 type Subscription = Resource\r
8 type SubscriptionFolder = Resource\r
9 \r
10 importJava "org.simantics.modeling.subscription.SCLSubscription" where \r
11     @JavaName addSubscriptionItems\r
12     """\r
13 Creates new Subscription with the given Variable under the given SubscriptionFolder.\r
14 \r
15 **Input 1:** Subscription folder in which subscription is wanbted to be created as **Resource**\r
16 \r
17 **Input 2:** Wanted module attribute from which subscription is to be created as **Variable**\r
18 \r
19 **Output:** The newly created subscription as **Resource**\r
20 \r
21 Example: Model contains two subscription folders called **Default** and **Pressure subscriptions of the model**. Let's fetch them and add one new subscription\r
22 of module PO01 attribute PO11_PRESSURE to the latter folder.\r
23 \r
24     import "Apros/Model"\r
25     import "Apros/Module"\r
26     import "Simantics/Diagram"\r
27     import "Apros/Variables"\r
28     import "Simantics/Subscription"\r
29     my_model = model "Model"\r
30     my_diagram = diagram my_model ["NewGenericDiagram"]\r
31     my_component = getComponent my_model "PO01"\r
32     my_variable_uri = stateVariableUri my_model my_diagram my_component "PO11_PRESSURE"\r
33     my_variable = getStateVariable my_variable_uri\r
34     my_subscription_folder_list = subscriptionFoldersOf my_model\r
35     my_subscription_folder_list\r
36     \r
37     > [#430091, #386608]\r
38     \r
39     print(labelOf(my_subscription_folder_list!0))\r
40 \r
41     > Pressure subscriptions of the model\r
42 \r
43     print(labelOf(my_subscription_folder_list!1))\r
44 \r
45     > Default\r
46     \r
47     addSubscriptionInFolder (my_subscription_folder_list!0) my_variable\r
48 \r
49     > #430094    \r
50     \r
51     """\r
52     addSubscriptionInFolder :: SubscriptionFolder -> Variable -> <WriteGraph> Subscription\r
53 \r
54     @JavaName newSubscriptionItem\r
55     """\r
56 Creates new Subscription with advanced options for user to define non-default parameters.\r
57 \r
58 **Input 1:** Wanted subscription folder as **Resource**\r
59 \r
60 **Input 2:** Wanted variable from which the subscription is done as **Variable**\r
61 \r
62 **Input 3:** Sampling interval as **Double**\r
63 \r
64 **Input 4:** Deadband as **Double**\r
65 \r
66 **Input 5:** Gain as **Double**\r
67 \r
68 **Input 6:** Bias as **Double**\r
69 \r
70 **Input 7:** Unit as **String**\r
71 \r
72 **Input 8:** Label as **String**\r
73 \r
74 **Output:** The newly created subscription as **Resource**\r
75     \r
76 Example: Let's add a subscription of module **PO01** attribute **PO11_PRESSURE** to the default subscription folder. This point is \r
77 located on diagram **NewGenericDiagram** in a model called **Model**. We want to have unit to be shown as bars, so lets define gain as **10**.\r
78 Also lets define sampling interval to be **5 seconds** and label as **Pressure at point PO01**\r
79     \r
80     import "Apros/Model"\r
81     import "Apros/Module"\r
82     import "Simantics/Diagram"\r
83     import "Apros/Variables"\r
84     import "Simantics/Subscription"\r
85     my_model = model "Model"\r
86     my_diagram = diagram my_model ["NewGenericDiagram"]\r
87     my_component = getComponent my_model "PO01"\r
88     my_variable_uri = stateVariableUri my_model my_diagram my_component "PO11_PRESSURE"\r
89     my_variable = getStateVariable my_variable_uri\r
90     my_subscription_folder = defaultSubscriptionFolder my_model\r
91     newSubscription my_subscription_folder my_variable 5 0 10 0 "Bar" "Pressure at point PO01"\r
92 \r
93     #430173\r
94     \r
95     """\r
96     newSubscription :: SubscriptionFolder -> Variable -> Double -> Double -> Double -> Double -> String -> String -> <WriteGraph> Subscription\r
97     \r
98     @JavaName addSubscriptionFolder\r
99     """\r
100 Creates new SubscriptionFolder under the given Model. Parameter String defines the name of the folder.\r
101 \r
102 **Input 1:** Model in which new subscription folder is wanted to be created as **Model**\r
103 \r
104 **Input 2:** Wanted name for the new subscription folder as **String**\r
105 \r
106 **Output:** The newly created subscription folder as **Resource**\r
107 \r
108 Example:\r
109 \r
110     import "Apros/Model"\r
111     import "Simantics/Subscription"\r
112     my_model = model "Model"\r
113     addSubscriptionFolder my_model "Pressure subscriptions of the model"\r
114 \r
115     #430186\r
116     """\r
117     addSubscriptionFolder :: Model -> String -> <WriteGraph> SubscriptionFolder\r
118     \r
119     @JavaName defaultSubscriptionFolder\r
120     """\r
121 Browses the given Model for its default SubscriptionFolder with name "Default" and then returns it. If folder is not found, returns a random SubscriptionFolder\r
122 \r
123 **Input 1:** Model which default subscription folder is wanted to be obtained as **Model**\r
124 \r
125 **Output:** The default subscription folder as **Resource**\r
126 \r
127 Example:\r
128 \r
129     import "Apros/Model"\r
130     import "Simantics/Subscription"\r
131     my_model = model "Model"\r
132     defaultSubscriptionFolder my_model\r
133 \r
134     #386608\r
135 \r
136     """\r
137     defaultSubscriptionFolder :: Model -> <ReadGraph> SubscriptionFolder\r
138     \r
139     @JavaName getLabel\r
140     getSubscriptionLabel :: Subscription -> <ReadGraph> String\r
141 \r
142 """\r
143 Creates new Subscription with the given Variable to the Variables models default SubscriptionFolder.\r
144 \r
145 **Input 1:** Wanted module attribute from which subscription is to be created as **Variable**\r
146 \r
147 **Output:** The newly created subscription as **Resource**\r
148 \r
149 Example: create a subscription of module PO01 attribute PO11_PRESSURE to the default subscription folder with default options.\r
150 \r
151     import "Apros/Model"\r
152     import "Apros/Module"\r
153     import "Simantics/Diagram"\r
154     import "Apros/Variables"\r
155     import "Simantics/Subscription"\r
156     my_model = model "Model"\r
157     my_diagram = diagram my_model ["NewGenericDiagram"]\r
158     my_component = getComponent my_model "PO01"\r
159     my_variable_uri = stateVariableUri my_model my_diagram my_component "PO11_PRESSURE"\r
160     my_variable = getStateVariable my_variable_uri\r
161     addSubscription my_variable\r
162     \r
163     #430121\r
164 \r
165 """\r
166 addSubscription :: Variable -> <WriteGraph,ReadGraph> Subscription\r
167 addSubscription variable = do\r
168     model = modelOfVariable variable\r
169     default = defaultSubscriptionFolder model\r
170     addSubscriptionInFolder default variable\r
171 \r
172 """\r
173 Browses the given Model for its SubscriptionFolders and then returns them in a list.\r
174 \r
175 **Input 1:** Model which subscription folders are wanted as **Model**\r
176 \r
177 **Output:** List which elements are subscription folder **Resources**\r
178 \r
179 Example: Model contains two subscription folders called **Default** and **Pressure subscriptions of the model**. Let's fetch them and print out their names.\r
180 \r
181     import "Apros/Model"\r
182     import "Simantics/Subscription"\r
183     my_model = model "Model"\r
184     my_subscription_folder_list = subscriptionFoldersOf my_model\r
185     my_subscription_folder_list\r
186 \r
187     [#386608, #430189]\r
188 \r
189     print(labelOf(my_subscription_folder_list!0))\r
190 \r
191     Default\r
192 \r
193     print(labelOf(my_subscription_folder_list!1))\r
194 \r
195     Pressure subscriptions of the model\r
196 \r
197 """\r
198 subscriptionFoldersOf :: Model -> <ReadGraph> [SubscriptionFolder]\r
199 subscriptionFoldersOf model = recurse (toResource model)\r
200   where\r
201     recurse r = do\r
202         cs = resourceChildrenOf r\r
203         folders = map fromResource $ filter isSubscriptionFolder cs\r
204         folders\r
205     isSubscriptionFolder r = isInstanceOf r MOD.Subscription\r