1 package org.simantics.document.linking.ge;
\r
3 import java.util.ArrayList;
\r
4 import java.util.Map;
\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
24 public class SourceLinkExplorerComposite extends GraphExplorerComposite {
\r
26 volatile DndBrowseContext dndBrowseContext;
\r
27 private IWorkbenchSite site;
\r
28 private MultiSelectionProvider provider;
\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
33 this.provider = provider;
\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
41 this.provider = provider;
\r
46 private void attachDND() {
\r
47 SimanticsUI.getSession().asyncRequest(new ReadRequest() {
\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
57 dndBrowseContext = DndBrowseContext.create(graph, browseContexts);
\r
58 } catch (InvalidContribution e) {
\r
59 ErrorLogger.defaultLogError(e);
\r
66 protected void handleDrop(final Object data, final NodeContext target) {
\r
70 SimanticsUI.getSession().asyncRequest(new Read<Runnable>() {
\r
72 public Runnable perform(ReadGraph graph) throws DatabaseException {
\r
73 if (dndBrowseContext == null)
\r
75 return dndBrowseContext.getAction(graph, target, data);
\r
77 }, new Procedure<Runnable>() {
\r
79 public void execute(Runnable result) {
\r
85 public void exception(Throwable t) {
\r
86 ErrorLogger.defaultLogError(t);
\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
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