]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.swt/src/org/simantics/browsing/ui/swt/DefaultIsCheckedProcessor2.java
Merge remote-tracking branch 'origin/svn' commit 'ccc1271c9d6657fb9dcf4cf3cb115fa0c8c...
[simantics/platform.git] / bundles / org.simantics.browsing.ui.swt / src / org / simantics / browsing / ui / swt / DefaultIsCheckedProcessor2.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
3  * in Industry THTH ry.\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
8  *\r
9  * Contributors:\r
10  *     VTT Technical Research Centre of Finland - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.browsing.ui.swt;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.Collection;\r
16 import java.util.Collections;\r
17 \r
18 import org.simantics.browsing.ui.BuiltinKeys;\r
19 import org.simantics.browsing.ui.CheckedState;\r
20 import org.simantics.browsing.ui.NodeContext;\r
21 import org.simantics.browsing.ui.NodeQueryManager;\r
22 import org.simantics.browsing.ui.NodeQueryProcessor;\r
23 import org.simantics.browsing.ui.Tester;\r
24 import org.simantics.browsing.ui.BuiltinKeys.CheckedStateKey;\r
25 import org.simantics.browsing.ui.NodeContext.QueryKey;\r
26 import org.simantics.browsing.ui.common.EvaluatorData;\r
27 import org.simantics.browsing.ui.common.Preference;\r
28 import org.simantics.browsing.ui.common.EvaluatorData.Evaluator;\r
29 import org.simantics.browsing.ui.common.EvaluatorData.EvaluatorTree;\r
30 import org.simantics.browsing.ui.content.CheckedStateFactory;\r
31 import org.simantics.utils.datastructures.collections.CollectionUtils;\r
32 \r
33 /**\r
34  * @author Antti Villberg\r
35  */\r
36 public class DefaultIsCheckedProcessor2 implements NodeQueryProcessor<CheckedState> {\r
37 \r
38     private final EvaluatorData data;\r
39 \r
40     public DefaultIsCheckedProcessor2(EvaluatorData data) {\r
41         this.data = data;\r
42     }\r
43 \r
44     @Override\r
45     public QueryKey<CheckedState> getIdentifier() {\r
46         return BuiltinKeys.IS_CHECKED;\r
47     }\r
48 \r
49     @Override\r
50     public CheckedState query(final NodeQueryManager manager, final NodeContext context) {\r
51         assert context != null;\r
52 \r
53         Object input = context.getConstant(BuiltinKeys.INPUT);\r
54         assert input != null;\r
55 \r
56         Collection<Evaluator> evals = data.get(input);\r
57         if (evals.isEmpty())\r
58             return null;\r
59 \r
60         ArrayList<Preference<CheckedStateFactory>> factories = new ArrayList<Preference<CheckedStateFactory>>(4);\r
61         for (Evaluator eval : evals) {\r
62             evaluateTree(manager, context, eval.getCheckStateTree(), factories);\r
63         }\r
64 \r
65         if (factories.isEmpty())\r
66             return null;\r
67 \r
68         if (factories.size() >= 1) {\r
69             Collections.sort(factories);\r
70             return manager.query(context, new CheckedStateKey(factories.get(0).object));\r
71         } else {\r
72                 return null;\r
73         }\r
74 \r
75     }\r
76 \r
77     protected void evaluateTree(NodeQueryManager manager, NodeContext context, EvaluatorTree<CheckedStateFactory> tree, Collection<Preference<CheckedStateFactory>> result) {\r
78         Tester test = tree.getTester();\r
79 \r
80         if (test.test(manager, context)) {\r
81             CollectionUtils.checkedAdd(tree.getAcceptedFactories(), result);\r
82 \r
83             Collection<EvaluatorTree<CheckedStateFactory>> children = tree.getChildren();\r
84             if (children == null)\r
85                 return;\r
86             for (EvaluatorTree<CheckedStateFactory> e : children) {\r
87                 evaluateTree(manager, context, e, result);\r
88             }\r
89         }\r
90     }\r
91     \r
92     @Override\r
93     public String toString() {\r
94         return "IsCheckedProcessor";\r
95     }\r
96 \r
97 }