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