]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/subscription/SubscriptionItemQuery.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / subscription / SubscriptionItemQuery.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 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.modeling.subscription;\r
13 \r
14 import java.util.UUID;\r
15 \r
16 import org.simantics.databoard.Bindings;\r
17 import org.simantics.databoard.Databoard;\r
18 import org.simantics.databoard.binding.Binding;\r
19 import org.simantics.db.ReadGraph;\r
20 import org.simantics.db.Resource;\r
21 import org.simantics.db.common.request.PossibleTypedParent;\r
22 import org.simantics.db.common.request.ResourceRead;\r
23 import org.simantics.db.exception.DatabaseException;\r
24 import org.simantics.db.layer0.request.PossibleActiveExperiment;\r
25 import org.simantics.db.layer0.variable.RVI;\r
26 import org.simantics.db.layer0.variable.Variable;\r
27 import org.simantics.db.layer0.variable.Variables;\r
28 import org.simantics.layer0.Layer0;\r
29 import org.simantics.modeling.ModelingResources;\r
30 \r
31 /**\r
32  * This query returns SubscriptionItem description\r
33  * \r
34  * @author Antti Villberg\r
35  */\r
36 public class SubscriptionItemQuery extends ResourceRead<SubscriptionItem> {\r
37 \r
38         public SubscriptionItemQuery(Resource resource) {\r
39                 super(resource);\r
40         }\r
41 \r
42         @SuppressWarnings("unused")\r
43         @Override\r
44         public SubscriptionItem perform(ReadGraph graph) throws DatabaseException {\r
45                 \r
46         ModelingResources MOD = ModelingResources.getInstance(graph);\r
47         Layer0 L0 = Layer0.getInstance(graph);\r
48 \r
49         SubscriptionItem item = new SubscriptionItem();\r
50         \r
51         item.variableId = "";\r
52         item.groupItemId = "";\r
53         Resource subscriptionItem = resource;\r
54         Resource subscription = null;\r
55         if (subscriptionItem!=null) {\r
56                 item.simpleLabel = graph.getPossibleRelatedValue(subscriptionItem, L0.HasLabel, Bindings.STRING);\r
57             subscription = graph.syncRequest( new PossibleTypedParent(subscriptionItem, MOD.Subscription) );            \r
58         }\r
59         if (item.simpleLabel==null) item.simpleLabel = "";\r
60         if (subscriptionItem != null) \r
61                 SubscriptionItem: { \r
62                 \r
63                         label2: {\r
64                                 item.groupItemId = graph.getPossibleRelatedValue(subscriptionItem, L0.HasName, Bindings.STRING);\r
65                                 if (item.groupItemId == null) break SubscriptionItem;\r
66 \r
67                                 Binding rviBinding = graph.getService(Databoard.class).getBindingUnchecked( RVI.class );\r
68                             RVI rvi = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_VariableId, rviBinding);\r
69                             if (rvi == null) break SubscriptionItem;        \r
70                             //variablePersistentId = rvi.toString();\r
71                             \r
72                                         Variable configuration = Variables.getPossibleConfigurationContext(graph, subscription);\r
73                                         if (configuration == null) break SubscriptionItem;\r
74                                         \r
75                                         Resource activeExperiment = graph.syncRequest(new PossibleActiveExperiment(subscription));\r
76                                         if (activeExperiment != null) {\r
77                                                 Variable experimentVariable = null;\r
78                                                 try {\r
79                                                         experimentVariable = Variables.switchRealization(graph, configuration, activeExperiment);\r
80                                                 } catch (DatabaseException e) {\r
81                                                         experimentVariable = Variables.switchPossibleContext(graph, configuration, activeExperiment);\r
82                                                 }\r
83                                                 if (experimentVariable != null) {\r
84                                                         configuration = experimentVariable;\r
85                                                 }\r
86                                         }\r
87 \r
88                                         item.variableId = item.variableReference = rvi.toPossibleString(graph, configuration);\r
89                             if (item.variableId == null) break SubscriptionItem;\r
90 \r
91                             if (item.simpleLabel.isEmpty()) {\r
92                                 item.simpleLabel = SubscriptionItemLabel.removeVariablePrefixPath( item.variableId );\r
93                             }\r
94                         }\r
95                         \r
96                         subscription: {\r
97                             if (subscription!=null) {\r
98                                 item.groupId = graph.getPossibleRelatedValue(subscription, L0.HasName, Bindings.STRING);\r
99                             } else {\r
100                                 item.groupId = UUID.randomUUID().toString();\r
101                             }\r
102                         }\r
103                         \r
104                         unit: {\r
105                             item.unit = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Unit, Bindings.STRING);\r
106                         }\r
107                         \r
108         } \r
109         \r
110         if (item.groupItemId==null) item.groupItemId = "";\r
111         if (item.variableId==null) item.variableId = "";\r
112         if (item.groupId==null) item.groupId = "";\r
113         if (item.unit==null) item.unit = "";\r
114         \r
115         return item;\r
116         }\r
117 \r
118 }\r