]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.linking.ui/src/org/simantics/document/linking/ge/SourceLinkExplorerComposite.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.document.linking.ui / src / org / simantics / document / linking / ge / SourceLinkExplorerComposite.java
1 package org.simantics.document.linking.ge;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Map;\r
5 \r
6 import org.eclipse.jface.viewers.ISelectionProvider;\r
7 import org.eclipse.swt.widgets.Composite;\r
8 import org.eclipse.ui.IWorkbenchSite;\r
9 import org.simantics.browsing.ui.NodeContext;\r
10 import org.simantics.browsing.ui.common.ErrorLogger;\r
11 import org.simantics.browsing.ui.model.InvalidContribution;\r
12 import org.simantics.browsing.ui.model.dnd.DndBrowseContext;\r
13 import org.simantics.browsing.ui.swt.DefaultExplorerSelectionListener;\r
14 import org.simantics.browsing.ui.swt.widgets.GraphExplorerComposite;\r
15 import org.simantics.browsing.ui.swt.widgets.impl.WidgetSupport;\r
16 import org.simantics.db.ReadGraph;\r
17 import org.simantics.db.Resource;\r
18 import org.simantics.db.common.request.ReadRequest;\r
19 import org.simantics.db.exception.DatabaseException;\r
20 import org.simantics.db.procedure.Procedure;\r
21 import org.simantics.db.request.Read;\r
22 import org.simantics.ui.SimanticsUI;\r
23 \r
24 public class SourceLinkExplorerComposite extends GraphExplorerComposite {\r
25         \r
26         volatile DndBrowseContext dndBrowseContext;\r
27         private IWorkbenchSite site;\r
28         private MultiSelectionProvider provider;\r
29         \r
30     public SourceLinkExplorerComposite(Map<String, Object> args, MultiSelectionProvider provider, IWorkbenchSite site, Composite parent,  WidgetSupport support, int style) {\r
31         super(args, site, parent, support, style);\r
32         this.site = site;\r
33         this.provider = provider;\r
34         attachDND();\r
35         \r
36     }\r
37     \r
38     public SourceLinkExplorerComposite(Map<String, Object> args, MultiSelectionProvider provider, IWorkbenchSite site, Composite parent,  WidgetSupport support, boolean useDND, int style) {\r
39         super(args, site, parent, support, style);\r
40         this.site = site;\r
41         this.provider = provider;\r
42         if (useDND)\r
43                 attachDND();\r
44     }\r
45     \r
46     private void attachDND() {\r
47         SimanticsUI.getSession().asyncRequest(new ReadRequest() {\r
48             @Override\r
49             public void run(ReadGraph graph) throws DatabaseException { \r
50                 ArrayList<Resource> browseContexts = new ArrayList<Resource>();\r
51                 for (String uri : getBrowseContexts()) {\r
52                     Resource browseContext = graph.getPossibleResource(uri);\r
53                     if (browseContext != null)\r
54                         browseContexts.add(browseContext);\r
55                 }\r
56                 try {\r
57                     dndBrowseContext = DndBrowseContext.create(graph, browseContexts);\r
58                 } catch (InvalidContribution e) {\r
59                     ErrorLogger.defaultLogError(e);\r
60                 }\r
61             }\r
62         });\r
63     }\r
64     \r
65     @Override\r
66     protected void handleDrop(final Object data, final NodeContext target) {\r
67         if (target == null)\r
68             return;\r
69 \r
70         SimanticsUI.getSession().asyncRequest(new Read<Runnable>() {\r
71             @Override\r
72             public Runnable perform(ReadGraph graph) throws DatabaseException {\r
73                 if (dndBrowseContext == null)\r
74                     return null;\r
75                 return dndBrowseContext.getAction(graph, target, data);\r
76             }\r
77         }, new Procedure<Runnable>() {\r
78             @Override\r
79             public void execute(Runnable result) {\r
80                 if (result != null)\r
81                     result.run();\r
82             }\r
83 \r
84             @Override\r
85             public void exception(Throwable t) {\r
86                 ErrorLogger.defaultLogError(t);\r
87             }\r
88         });\r
89     }\r
90     \r
91     public void setWorkbenchListeners() {\r
92         if (workbenchSelectionListener == null && site != null) {\r
93             ISelectionProvider selectionProvider = (ISelectionProvider) explorer.getAdapter(ISelectionProvider.class);\r
94             //site.setSelectionProvider(selectionProvider);\r
95             provider.addSelectionProvider(selectionProvider);\r
96 \r
97             // Listen to the workbench selection also to propagate it to\r
98             // the explorer also.\r
99             workbenchSelectionListener = new DefaultExplorerSelectionListener(site.getPage().getActivePart(), explorer);\r
100             //System.out.println("ADD WORKBENCH SELECTION LISTENER: " + workbenchSelectionListener);\r
101             site.getWorkbenchWindow().getSelectionService().addPostSelectionListener(workbenchSelectionListener);\r
102         }\r
103     }\r
104         \r
105 \r
106 }\r