1 /*******************************************************************************
\r
2 * Copyright (c) 2012 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.ui.modelBrowser2.label;
\r
14 import org.eclipse.jface.resource.ColorDescriptor;
\r
15 import org.eclipse.jface.resource.FontDescriptor;
\r
16 import org.eclipse.swt.SWT;
\r
17 import org.eclipse.swt.graphics.RGB;
\r
18 import org.simantics.browsing.ui.content.LabelDecorator;
\r
19 import org.simantics.browsing.ui.model.labeldecorators.LabelDecorationRule;
\r
20 import org.simantics.databoard.Bindings;
\r
21 import org.simantics.databoard.Databoard;
\r
22 import org.simantics.databoard.binding.Binding;
\r
23 import org.simantics.databoard.type.BooleanType;
\r
24 import org.simantics.databoard.type.Datatype;
\r
25 import org.simantics.db.ReadGraph;
\r
26 import org.simantics.db.Resource;
\r
27 import org.simantics.db.exception.DatabaseException;
\r
28 import org.simantics.db.layer0.request.PossibleModel;
\r
29 import org.simantics.db.layer0.request.PossibleVariableValue;
\r
30 import org.simantics.db.layer0.variable.RVI;
\r
31 import org.simantics.db.layer0.variable.Variable;
\r
32 import org.simantics.modeling.ModelingResources;
\r
33 import org.simantics.modeling.subscription.ModelContexts;
\r
34 import org.simantics.modeling.subscription.ModelContextsRequest;
\r
37 * @author Tuukka Lehtonen
\r
39 public class SubscriptionItemLabelDecorationRule implements LabelDecorationRule {
\r
41 public static final SubscriptionItemLabelDecorationRule INSTANCE = new SubscriptionItemLabelDecorationRule();
\r
43 private static final ColorDescriptor RED = ColorDescriptor.createFrom(new RGB(255, 0, 0));
\r
44 private static final ColorDescriptor INVALID = ColorDescriptor.createFrom(new RGB(255, 128, 128));
\r
45 private static final ColorDescriptor GREEN = ColorDescriptor.createFrom(new RGB(0, 160, 0));
\r
47 static LabelDecorator RED_DECO = new LabelDecorator.Stub() {
\r
48 @SuppressWarnings("unchecked")
\r
49 public <C> C decorateForeground(C color, String column, int itemIndex) {
\r
54 static LabelDecorator GREEN_DECO = new LabelDecorator.Stub() {
\r
55 @SuppressWarnings("unchecked")
\r
56 public <C> C decorateForeground(C color, String column, int itemIndex) {
\r
61 static LabelDecorator UNRESOLVABLE = new LabelDecorator.Stub() {
\r
63 public String decorateLabel(String label, String column, int itemIndex) {
\r
64 return label + " (INVALID)";
\r
66 @SuppressWarnings("unchecked")
\r
67 public <C> C decorateForeground(C color, String column, int itemIndex) {
\r
70 @SuppressWarnings("unchecked")
\r
71 public <F> F decorateFont(F font, String column, int itemIndex) {
\r
72 return (F) ((FontDescriptor) font).withStyle(SWT.ITALIC);
\r
77 public boolean isCompatible(Class<?> contentType) {
\r
78 return contentType.equals(Resource.class);
\r
82 public LabelDecorator getLabelDecorator(ReadGraph graph, Object content) throws DatabaseException {
\r
83 Resource item = (Resource) content;
\r
84 ModelingResources MOD = ModelingResources.getInstance(graph);
\r
86 Binding rviBinding = graph.getService(Databoard.class).getBindingUnchecked( RVI.class );
\r
87 RVI rvi = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_VariableId, rviBinding);
\r
91 Resource model = graph.sync( new PossibleModel(item) );
\r
95 ModelContexts contexts = graph.syncRequest(new ModelContextsRequest(model));
\r
96 if (contexts.getExperimentContext() == null)
\r
99 Variable variable = rvi.resolvePossible(graph, contexts.getExperimentContext());
\r
100 if (variable == null)
\r
101 return UNRESOLVABLE;
\r
103 Datatype datatype = graph.getPossibleRelatedValue(item, MOD.Subscription_Item_Datatype, Bindings.getBindingUnchecked(Datatype.class));
\r
104 if (!(datatype instanceof BooleanType))
\r
107 Object value = graph.sync( new PossibleVariableValue<Object>(variable) );
\r
108 if (!(value instanceof Boolean))
\r
111 Boolean v = (Boolean) value;
\r
112 return v ? GREEN_DECO : RED_DECO;
\r