]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.browsing.ui.common/src/org/simantics/browsing/ui/common/contributor/AbstractViewpointContributionContributor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.browsing.ui.common / src / org / simantics / browsing / ui / common / contributor / AbstractViewpointContributionContributor.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.common.contributor;\r
13 \r
14 import java.util.Collection;\r
15 import java.util.Collections;\r
16 \r
17 import org.simantics.browsing.ui.BuiltinKeys.ViewpointContributionKey;\r
18 import org.simantics.browsing.ui.NodeContext;\r
19 import org.simantics.browsing.ui.PrimitiveQueryUpdater;\r
20 import org.simantics.browsing.ui.Tester;\r
21 import org.simantics.browsing.ui.content.Contributor;\r
22 import org.simantics.browsing.ui.content.ViewpointContribution;\r
23 import org.simantics.browsing.ui.content.ViewpointContributionFactory;\r
24 import org.simantics.utils.ReflectionUtils;\r
25 \r
26 /**\r
27  * @author Antti Villberg\r
28  *\r
29  * @param <T> the input type accepted by this contributor\r
30  */\r
31 public abstract class AbstractViewpointContributionContributor<T> implements Contributor<ViewpointContributionFactory> {\r
32 \r
33     private final Class<?> clazz;\r
34 \r
35     public AbstractViewpointContributionContributor() {\r
36         clazz = ReflectionUtils.getSingleParameterType(getClass());\r
37     }\r
38 \r
39     public AbstractViewpointContributionContributor(Class<?> clazz) {\r
40         this.clazz = clazz;\r
41     }\r
42 \r
43     @Override\r
44     public Class<?> getInputClass() {\r
45         return clazz;\r
46     }\r
47 \r
48     @Override\r
49     public ViewpointContributionFactory getFactory() {\r
50 \r
51         return new ViewpointContributionFactory() {\r
52 \r
53             @Override\r
54             public ViewpointContribution create(final PrimitiveQueryUpdater updater,\r
55                     final NodeContext context, final ViewpointContributionKey key) {\r
56 \r
57                 return new ViewpointContribution() {\r
58 \r
59                         Collection<NodeContext> contribution = Collections.emptySet();\r
60                         \r
61                         @Override\r
62                         public Collection<NodeContext> getContribution() {\r
63 \r
64                                 Collection<NodeContext> current = AbstractViewpointContributionContributor.this.getContribution(updater, context, key); \r
65 \r
66                                 for(NodeContext c : current) updater.incRef(c);\r
67                                 for(NodeContext c : contribution) updater.decRef(c);\r
68                                 contribution = current;\r
69 \r
70                                 return current;\r
71                                 \r
72                         }\r
73 \r
74                     @Override\r
75                     public Class<?> getInputClass() {\r
76                         return clazz;\r
77                     }\r
78 \r
79                     @Override\r
80                     public Tester getNodeContextTester() {\r
81                         return AbstractViewpointContributionContributor.this.getNodeContextTester();\r
82                     }\r
83 \r
84                 };\r
85 \r
86             }\r
87 \r
88             @Override\r
89             public String getViewpointId() {\r
90                 return AbstractViewpointContributionContributor.this.getViewpointId();\r
91             }\r
92 \r
93         };\r
94 \r
95     }\r
96 \r
97     abstract public Collection<NodeContext> getContribution(PrimitiveQueryUpdater updater,\r
98             NodeContext context, ViewpointContributionKey key);\r
99 \r
100     abstract public String getViewpointId();\r
101 \r
102 }\r