]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.selectionview/src/org/simantics/selectionview/StandardProperties.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.selectionview / src / org / simantics / selectionview / StandardProperties.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.selectionview;\r
13 \r
14 import java.util.Collection;\r
15 import java.util.HashSet;\r
16 import java.util.Set;\r
17 \r
18 import org.eclipse.swt.widgets.Composite;\r
19 import org.eclipse.ui.IWorkbenchPartSite;\r
20 import org.eclipse.ui.part.IPageSite;\r
21 import org.simantics.browsing.ui.common.ErrorLogger;\r
22 import org.simantics.browsing.ui.common.views.IFilterArea;\r
23 import org.simantics.browsing.ui.common.views.IFilterAreaProvider;\r
24 import org.simantics.db.ReadGraph;\r
25 \r
26 /**\r
27  * @author Antti Villberg\r
28  * \r
29  * @see StandardPropertyPage\r
30  */\r
31 public class StandardProperties extends TabbedPropertyTable implements IFilterAreaProvider, IPropertyTab {\r
32 \r
33     /**\r
34      * @param site\r
35      * @param pageSite\r
36      * @param parent\r
37      * @param style\r
38      * @param browseContexts the browse contexts to use for loading this\r
39      *        property table\r
40      * @param selectionProcessors a fixed set of selection processors, may be\r
41      *        <code>null</code>\r
42      */\r
43     public StandardProperties(IWorkbenchPartSite site, IPageSite pageSite, Composite parent, int style,\r
44             final Set<String> browseContexts, final Collection<SelectionProcessor<?, ?>> selectionProcessors) {\r
45         super(site, pageSite, parent, style);\r
46 \r
47         final Set<SelectionProcessor<?, ?>> processors = new HashSet<SelectionProcessor<?, ?>>();\r
48         if (selectionProcessors != null)\r
49             processors.addAll(selectionProcessors);\r
50 \r
51         //System.out.println("StandardProperties with contexts: " + browseContexts);\r
52         for (final SelectionProcessorBinding binding : SelectionProcessorBindingExtensionManager.getInstance().getBoundContributions(browseContexts)) {\r
53             //System.out.println("found " + binding.getProcessor());\r
54             processors.add(binding.getProcessor());\r
55         }\r
56 \r
57         setSelectionProcessor(new SelectionProcessor<Object, ReadGraph>() {\r
58 \r
59             @SuppressWarnings({ "rawtypes", "unchecked" })\r
60             @Override\r
61             public Collection<?> process(final Object selection, ReadGraph graph) {\r
62 \r
63                 HashSet<Object> l     = new HashSet<Object>();\r
64                 for (SelectionProcessor p : processors) {\r
65                     Collection<?> c = p.process(selection, graph);\r
66                     if (c != null) {\r
67                         l.addAll(c);\r
68                     } else {\r
69                         ErrorLogger.defaultLogWarning("SelectionProcessor '" + p + "' invalidly returned null with selection '" + selection + "'", null);\r
70                     }\r
71                 }\r
72 \r
73                 return l;\r
74 \r
75             }\r
76 \r
77         });\r
78     }\r
79 \r
80     @Override\r
81     public IFilterArea getFilterArea() {\r
82         IPropertyTab active = getActiveTab();\r
83         if (!(active instanceof IFilterAreaProvider))\r
84             return null;\r
85         return ((IFilterAreaProvider) active).getFilterArea();\r
86     }\r
87 \r
88 }\r