]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/subscription/SubscriptionItemQuery.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / subscription / SubscriptionItemQuery.java
1 /*******************************************************************************
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
3  * Industry THTH ry.
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v1.0
6  * which accompanies this distribution, and is available at
7  * http://www.eclipse.org/legal/epl-v10.html
8  *
9  * Contributors:
10  *     VTT Technical Research Centre of Finland - initial API and implementation
11  *******************************************************************************/
12 package org.simantics.modeling.subscription;
13
14 import java.util.UUID;
15
16 import org.simantics.databoard.Bindings;
17 import org.simantics.databoard.Databoard;
18 import org.simantics.databoard.binding.Binding;
19 import org.simantics.db.ReadGraph;
20 import org.simantics.db.Resource;
21 import org.simantics.db.common.request.PossibleTypedParent;
22 import org.simantics.db.common.request.ResourceRead;
23 import org.simantics.db.exception.DatabaseException;
24 import org.simantics.db.layer0.request.PossibleActiveExperiment;
25 import org.simantics.db.layer0.variable.RVI;
26 import org.simantics.db.layer0.variable.Variable;
27 import org.simantics.db.layer0.variable.Variables;
28 import org.simantics.layer0.Layer0;
29 import org.simantics.modeling.ModelingResources;
30
31 /**
32  * This query returns SubscriptionItem description
33  * 
34  * @author Antti Villberg
35  */
36 public class SubscriptionItemQuery extends ResourceRead<SubscriptionItem> {
37
38         public SubscriptionItemQuery(Resource resource) {
39                 super(resource);
40         }
41
42         @SuppressWarnings("unused")
43         @Override
44         public SubscriptionItem perform(ReadGraph graph) throws DatabaseException {
45                 
46         ModelingResources MOD = ModelingResources.getInstance(graph);
47         Layer0 L0 = Layer0.getInstance(graph);
48
49         SubscriptionItem item = new SubscriptionItem();
50         
51         item.variableId = "";
52         item.groupItemId = "";
53         Resource subscriptionItem = resource;
54         Resource subscription = null;
55         if (subscriptionItem!=null) {
56                 item.simpleLabel = graph.getPossibleRelatedValue(subscriptionItem, L0.HasLabel, Bindings.STRING);
57             subscription = graph.syncRequest( new PossibleTypedParent(subscriptionItem, MOD.Subscription) );            
58         }
59         if (item.simpleLabel==null) item.simpleLabel = "";
60         if (subscriptionItem != null) 
61                 SubscriptionItem: { 
62                 
63                         label2: {
64                                 item.groupItemId = graph.getPossibleRelatedValue(subscriptionItem, L0.HasName, Bindings.STRING);
65                                 if (item.groupItemId == null) break SubscriptionItem;
66
67                                 Binding rviBinding = graph.getService(Databoard.class).getBindingUnchecked( RVI.class );
68                             RVI rvi = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_VariableId, rviBinding);
69                             if (rvi == null) break SubscriptionItem;        
70                             //variablePersistentId = rvi.toString();
71                             
72                                         Variable configuration = Variables.getPossibleConfigurationContext(graph, subscription);
73                                         if (configuration == null) break SubscriptionItem;
74                                         
75                                         Resource activeExperiment = graph.syncRequest(new PossibleActiveExperiment(subscription));
76                                         if (activeExperiment != null) {
77                                                 Variable experimentVariable = null;
78                                                 try {
79                                                         experimentVariable = Variables.switchRealization(graph, configuration, activeExperiment);
80                                                 } catch (DatabaseException e) {
81                                                         experimentVariable = Variables.switchPossibleContext(graph, configuration, activeExperiment);
82                                                 }
83                                                 if (experimentVariable != null) {
84                                                         configuration = experimentVariable;
85                                                 }
86                                         }
87
88                                         item.variableId = item.variableReference = rvi.toPossibleString(graph, configuration);
89                             if (item.variableId == null) break SubscriptionItem;
90
91                             if (item.simpleLabel.isEmpty()) {
92                                 item.simpleLabel = SubscriptionItemLabel.removeVariablePrefixPath( item.variableId );
93                             }
94                         }
95                         
96                         subscription: {
97                             if (subscription!=null) {
98                                 item.groupId = graph.getPossibleRelatedValue(subscription, L0.HasName, Bindings.STRING);
99                             } else {
100                                 item.groupId = UUID.randomUUID().toString();
101                             }
102                         }
103                         
104                         unit: {
105                             item.unit = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Unit, Bindings.STRING);
106                         }
107                         
108         } 
109         
110         if (item.groupItemId==null) item.groupItemId = "";
111         if (item.variableId==null) item.variableId = "";
112         if (item.groupId==null) item.groupId = "";
113         if (item.unit==null) item.unit = "";
114         
115         return item;
116         }
117
118 }