]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.graph.impl/src/org/simantics/browsing/ui/graph/impl/contributor/labeler/CheckedStateContributorImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.graph.impl / src / org / simantics / browsing / ui / graph / impl / contributor / labeler / CheckedStateContributorImpl.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.graph.impl.contributor.labeler;\r
13 \r
14 import org.simantics.browsing.ui.BuiltinKeys;\r
15 import org.simantics.browsing.ui.CheckedState;\r
16 import org.simantics.browsing.ui.NodeContext;\r
17 import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
18 import org.simantics.browsing.ui.Tester;\r
19 import org.simantics.browsing.ui.BuiltinKeys.CheckedStateKey;\r
20 import org.simantics.browsing.ui.content.CheckedStateFactory;\r
21 import org.simantics.browsing.ui.content.Contributor;\r
22 import org.simantics.browsing.ui.graph.impl.contribution.CheckedStateContributionImpl;\r
23 import org.simantics.db.ReadGraph;\r
24 import org.simantics.db.exception.DatabaseException;\r
25 import org.simantics.utils.ReflectionUtils;\r
26 \r
27 abstract public class CheckedStateContributorImpl<T> implements Contributor<CheckedStateFactory> {\r
28 \r
29     abstract public CheckedState getState(ReadGraph graph, T input) throws DatabaseException;\r
30 \r
31     final private Class<?> clazz;\r
32 \r
33     @Override\r
34     public Tester getNodeContextTester() {\r
35         return null;\r
36     }\r
37 \r
38     public CheckedStateContributorImpl() {\r
39         clazz = ReflectionUtils.getSingleParameterType(getClass());\r
40     }\r
41 \r
42     public CheckedStateContributorImpl(Class<?> clazz) {\r
43         this.clazz = clazz;\r
44     }\r
45 \r
46     @Override\r
47     public CheckedStateFactory getFactory() {\r
48 \r
49         return new CheckedStateFactory() {\r
50 \r
51             @Override\r
52             public CheckedState create(final PrimitiveQueryUpdater updater, NodeContext context, final CheckedStateKey key) {\r
53 \r
54                 CheckedStateContributionImpl contrib = new CheckedStateContributionImpl(updater, context, key) {\r
55 \r
56                     @SuppressWarnings("unchecked")\r
57                                         @Override\r
58                                         public CheckedState getState(ReadGraph graph, NodeContext context) throws DatabaseException {\r
59                         T input = (T)context.getConstant(BuiltinKeys.INPUT);\r
60                                                 return CheckedStateContributorImpl.this.getState(graph, input);\r
61                                         }\r
62 \r
63                 };\r
64                 \r
65                 return contrib.getState();\r
66 \r
67             }\r
68 \r
69         };\r
70 \r
71     }\r
72 \r
73     @Override\r
74     public Class<?> getInputClass() {\r
75         return clazz;\r
76     }\r
77 \r
78 }\r