+package org.simantics.document.linking.ge;\r
+\r
+import java.util.ArrayList;\r
+import java.util.List;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionChangedListener;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.jface.viewers.SelectionChangedEvent;\r
+\r
+/**\r
+ * Selection Provider for providing slections from multiple GraphExplorers attached to the same site\r
+ * .\r
+ * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
+ *\r
+ */\r
+public class MultiSelectionProvider implements ISelectionProvider, ISelectionChangedListener {\r
+ \r
+ private List<ISelectionProvider> selectionProviders = new ArrayList<ISelectionProvider>();\r
+ private List<ISelectionChangedListener> listeners = new ArrayList<ISelectionChangedListener>();\r
+ private ISelection selection;\r
+ \r
+ @Override\r
+ public void addSelectionChangedListener(ISelectionChangedListener listener) {\r
+ listeners.add(listener);\r
+ \r
+ }\r
+ @Override\r
+ public void removeSelectionChangedListener(\r
+ ISelectionChangedListener listener) {\r
+ listeners.remove(listener);\r
+ \r
+ }\r
+ \r
+ @Override\r
+ public ISelection getSelection() {\r
+ return selection;\r
+ }\r
+ \r
+ @Override\r
+ public void setSelection(ISelection selection) {\r
+ this.selection = selection;\r
+ // TODO : should we pass the selection to selectionProviders? \r
+ }\r
+ \r
+ @Override\r
+ public void selectionChanged(SelectionChangedEvent event) {\r
+ this.selection = event.getSelection();\r
+ SelectionChangedEvent fireEvent = new SelectionChangedEvent(this, selection);\r
+ for (ISelectionChangedListener l : listeners) {\r
+ l.selectionChanged(fireEvent);\r
+ }\r
+ \r
+ }\r
+ \r
+ public void addSelectionProvider(ISelectionProvider provider) {\r
+ selectionProviders.add(provider);\r
+ provider.addSelectionChangedListener(this);\r
+ }\r
+ \r
+ public void removeSelectionProvider(ISelectionProvider provider) {\r
+ selectionProviders.remove(provider);\r
+ provider.removeSelectionChangedListener(this);\r
+ }\r
+\r
+}\r