]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop/src/org/simantics/interop/browsing/INodeEvaluators.java
Remove usage of deprecated SimanticsUI-methods
[simantics/interop.git] / org.simantics.interop / src / org / simantics / interop / browsing / INodeEvaluators.java
1 package org.simantics.interop.browsing;\r
2 \r
3 import java.util.Collection;\r
4 import java.util.Collections;\r
5 import java.util.Map;\r
6 import java.util.function.Consumer;\r
7 import java.util.function.Supplier;\r
8 \r
9 import org.eclipse.jface.resource.ImageDescriptor;\r
10 import org.simantics.browsing.ui.BuiltinKeys;\r
11 import org.simantics.browsing.ui.BuiltinKeys.ImagerKey;\r
12 import org.simantics.browsing.ui.BuiltinKeys.LabelerKey;\r
13 import org.simantics.browsing.ui.BuiltinKeys.ViewpointKey;\r
14 import org.simantics.browsing.ui.DataSource;\r
15 import org.simantics.browsing.ui.NodeContext;\r
16 import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
17 import org.simantics.browsing.ui.common.ColumnKeys;\r
18 import org.simantics.browsing.ui.common.EvaluatorData.Evaluator;\r
19 import org.simantics.browsing.ui.common.EvaluatorImpl;\r
20 import org.simantics.browsing.ui.common.comparators.AlphanumericComparatorFactory;\r
21 import org.simantics.browsing.ui.common.imagers.ContainerImager;\r
22 import org.simantics.browsing.ui.content.Imager;\r
23 import org.simantics.browsing.ui.content.ImagerFactory;\r
24 import org.simantics.browsing.ui.content.Labeler;\r
25 import org.simantics.browsing.ui.content.LabelerFactory;\r
26 import org.simantics.browsing.ui.content.Viewpoint;\r
27 import org.simantics.browsing.ui.content.ViewpointFactory;\r
28 import org.simantics.browsing.ui.graph.impl.LazyGraphLabeler;\r
29 import org.simantics.browsing.ui.graph.impl.LazyViewpoint;\r
30 import org.simantics.browsing.ui.graph.impl.MissingImageDescriptor;\r
31 import org.simantics.db.ReadGraph;\r
32 import org.simantics.db.exception.DatabaseException;\r
33 import org.simantics.modeling.ui.modelBrowser.model.IChildrenCallback;\r
34 import org.simantics.modeling.ui.modelBrowser.model.IDisposable;\r
35 import org.simantics.modeling.ui.modelBrowser.model.IUpdateable;\r
36 import org.slf4j.Logger;\r
37 import org.slf4j.LoggerFactory;\r
38 \r
39 \r
40 public class INodeEvaluators {\r
41         public static Evaluator createEvaluator() {\r
42                 Evaluator nodeEvaluator = new EvaluatorImpl();\r
43 \r
44         nodeEvaluator.addViewpoint(new NodeViewpointFactory(), 1.0);\r
45         nodeEvaluator.addComparator(new AlphanumericComparatorFactory(ColumnKeys.SINGLE), 2.0);\r
46         nodeEvaluator.addLabeler(new NodeLabelerFactory(), 1.0);\r
47         nodeEvaluator.addImager(new NodeImagerFactory(), 1.0);\r
48         \r
49         return nodeEvaluator;\r
50         }\r
51 }\r
52 \r
53 abstract class BaseViewpointFactory implements ViewpointFactory {\r
54     protected abstract class VPB extends LazyViewpoint implements Supplier<Boolean>, IChildrenCallback {\r
55         PrimitiveQueryUpdater updater;\r
56         \r
57         public VPB(PrimitiveQueryUpdater updater, NodeContext context, ViewpointKey key) {\r
58             super(updater, context, key);\r
59             this.updater = updater;\r
60         }\r
61 \r
62         @Override\r
63         public String toString() {\r
64             return BaseViewpointFactory.this.toString();\r
65         }\r
66 \r
67         @Override\r
68         public Object getIdentity() {\r
69             // This is necessary to give graph requests related to this\r
70             // LazyViewpoint a unique-enough identity so that they don't collide\r
71             // unexpectedly with other users of ModelEvaluators.\r
72             // This makes requests created with different concrete classes of\r
73             // BaseViewpointFactory unique.\r
74             return BaseViewpointFactory.this.getClass();\r
75         }\r
76         \r
77         @Override\r
78         public Boolean get() {\r
79             return Boolean.valueOf(updater.isDisposed());\r
80         }\r
81 \r
82         @Override\r
83         public void refreshChildren(Collection<?> newChildren) {\r
84             NodeContext[] ncs = toContextsWithInput(newChildren);\r
85             setHasChildren(ncs.length > 0);\r
86             setChildren(updater,ncs);\r
87             updater.scheduleReplace(context, key, this);\r
88         }\r
89 \r
90         @Override\r
91         public Boolean hasChildren(ReadGraph graph) throws DatabaseException {\r
92             // hasChildren must do the same graph operations as children\r
93             // since they both share the same PrimitiveQueryUpdater.\r
94             return children(graph).length > 0;\r
95         }\r
96     };\r
97 }\r
98 \r
99 class NodeViewpointFactory extends BaseViewpointFactory {\r
100     @Override\r
101     public String toString() {\r
102         return "Standard";\r
103     }\r
104 \r
105     class VP extends VPB {\r
106         public VP(PrimitiveQueryUpdater updater, NodeContext context, ViewpointKey key) {\r
107             super(updater, context, key);\r
108         }\r
109 \r
110         @Override\r
111         public NodeContext[] children(ReadGraph graph) throws DatabaseException {\r
112             INode node = (INode) context.getConstant(BuiltinKeys.INPUT);\r
113             if (node instanceof IUpdateable)\r
114                 ((IUpdateable) node).setChildrenCallback(this);\r
115 \r
116             Collection<?> children = node.getChildren(graph);\r
117             for (Object child : children) {\r
118                 if (child instanceof IDisposable)\r
119                     ((IDisposable) child).setDisposedCallable(this);\r
120             }\r
121             return toContextsWithInput(children);\r
122         }\r
123     };\r
124 \r
125     @Override\r
126     public Viewpoint create(PrimitiveQueryUpdater updater, NodeContext context, ViewpointKey key) {\r
127         return new VP(updater, context, key);\r
128     }\r
129 }\r
130 \r
131 class NodeLabelerFactory implements LabelerFactory {\r
132     @Override\r
133     public Labeler create(PrimitiveQueryUpdater updater, final NodeContext context, LabelerKey key) {\r
134         return new LazyGraphLabeler(updater, context, key) {\r
135             @Override\r
136             public Object getIdentity(LabelerKey key) {\r
137                 return NodeLabelerFactory.this.getClass();\r
138             }\r
139             \r
140             @Override\r
141             public Map<String, String> labels(ReadGraph graph) throws DatabaseException {\r
142                 return Collections.singletonMap(ColumnKeys.SINGLE,\r
143                         ((INode) context.getConstant(BuiltinKeys.INPUT)).getLabel(graph));\r
144             }\r
145 \r
146             @Override\r
147             public int category(ReadGraph graph) throws DatabaseException {\r
148                 return ((INode) context.getConstant(BuiltinKeys.INPUT)).getCategory(graph);\r
149             }\r
150 \r
151             @Override\r
152             public Logger getLogger() {\r
153                 return LoggerFactory.getLogger(NodeLabelerFactory.class);\r
154             }\r
155         };\r
156     }\r
157 }\r
158 \r
159 class NodeImagerFactory implements ImagerFactory {\r
160 \r
161     @Override\r
162     public Imager create(final PrimitiveQueryUpdater updater, final NodeContext context, final ImagerKey key) {\r
163         final ContainerImager<ImageDescriptor> result = new ContainerImager<ImageDescriptor>();\r
164         result.setImage(MissingImageDescriptor.getInstance());\r
165 \r
166         DataSource<ReadGraph> source = updater.getDataSource(ReadGraph.class);\r
167 \r
168         source.schedule(new Consumer<ReadGraph>() {\r
169                 \r
170                 @Override\r
171                 public void accept(ReadGraph g) {\r
172                     try {\r
173                         INode node = (INode)context.getConstant(BuiltinKeys.INPUT);\r
174                     ImageDescriptor descriptor = node.getImage(g);\r
175                         result.setImage(descriptor);\r
176                     updater.scheduleReplace(context, key, result);\r
177                 } catch (DatabaseException e) {\r
178                     e.printStackTrace();\r
179                 }\r
180             }\r
181         });\r
182 \r
183         return result;\r
184     }\r
185 \r
186 }