1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2011 Association for Decentralized Information Management in
\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
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 *******************************************************************************/
\r
12 package org.simantics.modeling.subscription;
\r
14 import java.util.UUID;
\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
32 * This query returns SubscriptionItem description
\r
34 * @author Antti Villberg
\r
36 public class SubscriptionItemQuery extends ResourceRead<SubscriptionItem> {
\r
38 public SubscriptionItemQuery(Resource resource) {
\r
42 @SuppressWarnings("unused")
\r
44 public SubscriptionItem perform(ReadGraph graph) throws DatabaseException {
\r
46 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
47 Layer0 L0 = Layer0.getInstance(graph);
\r
49 SubscriptionItem item = new SubscriptionItem();
\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
59 if (item.simpleLabel==null) item.simpleLabel = "";
\r
60 if (subscriptionItem != null)
\r
61 SubscriptionItem: {
\r
64 item.groupItemId = graph.getPossibleRelatedValue(subscriptionItem, L0.HasName, Bindings.STRING);
\r
65 if (item.groupItemId == null) break SubscriptionItem;
\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
72 Variable configuration = Variables.getPossibleConfigurationContext(graph, subscription);
\r
73 if (configuration == null) break SubscriptionItem;
\r
75 Resource activeExperiment = graph.syncRequest(new PossibleActiveExperiment(subscription));
\r
76 if (activeExperiment != null) {
\r
77 Variable experimentVariable = null;
\r
79 experimentVariable = Variables.switchRealization(graph, configuration, activeExperiment);
\r
80 } catch (DatabaseException e) {
\r
81 experimentVariable = Variables.switchPossibleContext(graph, configuration, activeExperiment);
\r
83 if (experimentVariable != null) {
\r
84 configuration = experimentVariable;
\r
88 item.variableId = item.variableReference = rvi.toPossibleString(graph, configuration);
\r
89 if (item.variableId == null) break SubscriptionItem;
\r
91 if (item.simpleLabel.isEmpty()) {
\r
92 item.simpleLabel = SubscriptionItemLabel.removeVariablePrefixPath( item.variableId );
\r
97 if (subscription!=null) {
\r
98 item.groupId = graph.getPossibleRelatedValue(subscription, L0.HasName, Bindings.STRING);
\r
100 item.groupId = UUID.randomUUID().toString();
\r
105 item.unit = graph.getPossibleRelatedValue(subscriptionItem, MOD.Subscription_Item_Unit, Bindings.STRING);
\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