[241292]  Should be able to bookmark SQLObjects in DSE
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java
index bc2c425..ea515a8 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.core.ui/src/org/eclipse/datatools/connectivity/sqm/core/internal/ui/util/ElementIDUtil.java
@@ -1,3 +1,13 @@
+/*******************************************************************************
+ * Copyright (c) 2005, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
 package org.eclipse.datatools.connectivity.sqm.core.internal.ui.util;
 
 import java.util.Iterator;
@@ -12,6 +22,7 @@
 import org.eclipse.core.runtime.IExtensionRegistry;
 import org.eclipse.core.runtime.Platform;
 import org.eclipse.datatools.connectivity.sqm.core.internal.ui.services.IElementIDProvider;
+import org.eclipse.datatools.connectivity.sqm.internal.core.resources.IDataResource;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.resource.Resource;
 
@@ -54,31 +65,31 @@
     {
     	
     	//TODO:  Fix this code if we want bookmark support
-//        if (current instanceof EObject)
-//        {
-//            EObject currentEObject = (EObject) current;
-//            Resource resource = currentEObject.eResource();
-//            if (resource instanceof ReferencedXMIResourceImpl)
-//            {
-//                return ((ReferencedXMIResourceImpl)resource).getID(currentEObject);
-//            }
-//            else 
-//            {
-//                for (Iterator iterator = providerList.iterator(); iterator.hasNext ();)
-//                {
-//                    IElementIDProvider provider = (IElementIDProvider) iterator.next();
-//                    String id = provider.getElementID(currentEObject);
-//                    if (id != null)
-//                    {
-//                        return id;
-//                    }
-//                }
-//            }
-//        }
-//        else if (current instanceof IResource)
-//        {
-//            return ((IResource)current).getName();
-//        }
+        if (current instanceof EObject)
+        {
+            EObject currentEObject = (EObject) current;
+            Resource resource = currentEObject.eResource();
+            if (resource instanceof IDataResource)
+            {
+                return ((IDataResource)resource).getID(currentEObject);
+            }
+            else 
+            {
+                for (Iterator iterator = providerList.iterator(); iterator.hasNext ();)
+                {
+                    IElementIDProvider provider = (IElementIDProvider) iterator.next();
+                    String id = provider.getElementID(currentEObject);
+                    if (id != null)
+                    {
+                        return id;
+                    }
+                }
+            }
+        }
+        else if (current instanceof IResource)
+        {
+            return ((IResource)current).getName();
+        }
         return null;
     }
 }
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF
index c18b72a..dd48202 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/META-INF/MANIFEST.MF
@@ -13,6 +13,7 @@
  org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.layout,
  org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.loading,
  org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers,
+ org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark,
  org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.impl,
  org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout,
  org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.content.layout.hierar,
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml
index 6caa120..8b16d2c 100644
--- a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/plugin.xml
@@ -78,4 +78,25 @@
          <adapter type="org.eclipse.ui.views.properties.IPropertySource"/>
       </factory>
    </extension>
+
+<!-- Provide an override of IDs -->
+   <extension
+   		point="org.eclipse.datatools.connectivity.sqm.core.ui.elementID">
+   		<provider class = "org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.TransientEObjectUtil"/>
+   </extension>
+      
+<!-- Add a Navigator Action extension -->
+<!-- Bookmark global Action-->
+   <extension
+         point="org.eclipse.ui.navigator.navigatorContent">
+      <actionProvider
+            class="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.BookmarkAction"
+            id="org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup.BookmarkAction">
+	        <enablement>
+	            <or>
+		        	<adapt type="org.eclipse.datatools.modelbase.sql.schema.SQLObject" /> 
+		        </or>
+			 </enablement>	
+      </actionProvider>
+   </extension>
 </plugin>
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/BookmarkAction.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/BookmarkAction.java
new file mode 100644
index 0000000..702f6e4
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/actions/popup/BookmarkAction.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.actions.popup;
+
+import java.util.Iterator;
+
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark.BookmarkProvider;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark.BookmarkSelectionProvider;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.IMemento;
+import org.eclipse.ui.ide.IDEActionFactory;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.ICommonActionExtensionSite;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkAction extends CommonActionProvider
+{
+    private BookmarkProvider bookmarkProvider = null;
+    private BookmarkSelectionProvider bookmarkSelectionProvider = null;
+    private ICommonViewerWorkbenchSite viewSite;
+
+    public BookmarkAction() {
+		super();
+	}
+    
+    private boolean isSelectionValid(IStructuredSelection selection)
+    {
+        for (Iterator iterator = selection.iterator(); iterator.hasNext();)
+        {
+            Object selected = iterator.next();
+            if (!(selected instanceof EObject))
+            {
+                return false;
+            }
+        }
+        return true;
+    }
+
+    public void selectionChanged(SelectionChangedEvent event)
+    {
+    }
+
+    public void dispose()
+    {
+        this.viewSite.getActionBars().setGlobalActionHandler(IDEActionFactory.BOOKMARK.getId(), null);
+        if (bookmarkProvider != null)
+        {
+            bookmarkProvider.removeListener();
+            bookmarkSelectionProvider.removeListener();
+        }
+    }
+
+    public void init(ICommonActionExtensionSite aConfig)
+    {
+        this.viewSite = (ICommonViewerWorkbenchSite) aConfig.getViewSite();
+        bookmarkProvider = new BookmarkProvider(this.viewSite);
+        bookmarkSelectionProvider = new BookmarkSelectionProvider();
+    }
+
+    public void fillActionBars(IActionBars theActionBars)
+    {
+        if (isSelectionValid((IStructuredSelection) this.getContext().getSelection()))
+        {
+            theActionBars.setGlobalActionHandler(IDEActionFactory.BOOKMARK.getId(), bookmarkProvider);
+        }
+
+        theActionBars.updateActionBars();
+        theActionBars.getMenuManager().update();
+    }
+
+    public void fillContextMenu(IMenuManager aMenu)
+    {
+    }
+
+    public void restoreState(IMemento aMemento)
+    {
+    }
+
+    public void saveState(IMemento aMemento)
+    {
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkProvider.java
new file mode 100644
index 0000000..e336ea8
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkProvider.java
@@ -0,0 +1,247 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark;
+
+import java.sql.Connection;
+import java.sql.SQLException;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.resources.IMarkerDelta;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.IResourceChangeEvent;
+import org.eclipse.core.resources.IResourceChangeListener;
+import org.eclipse.core.resources.IResourceDelta;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.sqm.core.connection.ConnectionInfo;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.EclipseUtilities;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.DataToolsUIConstants;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionSharingListener;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerUIDebugOptions;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.TransientEObjectUtil;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging.Logger;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.resources.ResourceLoader;
+import org.eclipse.datatools.modelbase.sql.schema.Database;
+import org.eclipse.datatools.modelbase.sql.schema.SQLObject;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkProvider extends Action
+{
+    private static final String BLANK_ID = ""; //$NON-NLS-1$
+    
+    private static final String ADD_BOOKMARK_TITLE = ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.BOOKMARK.TITLE"); //$NON-NLS-1$
+    private static final String ADD_BOOKMARK_MESSAGE = ResourceLoader.INSTANCE.queryString("DATATOOLS.SERVER.UI.BOOKMARK.MESSAGE"); //$NON-NLS-1$
+    private static final String BOOKMARK_VIEW = "org.eclipse.ui.views.BookmarkView"; //$NON-NLS-1$ 
+    
+    private ICommonViewerWorkbenchSite viewSite;
+    private IResourceChangeListener bookmarkListener;
+    private List infoListener = new LinkedList ();
+
+    private String getElementId (EObject eObject) throws Exception
+    {
+        return TransientEObjectUtil.getEObjectId(eObject);
+    }
+    
+    private EObject getElementFromId (String elementID)
+    {
+        return TransientEObjectUtil.getEObjectFromId(elementID);
+    }
+    
+    private IMarker addBookmark(Map attributes, Object element)
+    {
+        try
+        {
+            // Bring up the bookmark view
+            EclipseUtilities.getActivePage().showView(BOOKMARK_VIEW);
+            
+            // Add the Bookmark
+            IMarker marker = ResourcesPlugin.getWorkspace().getRoot().createMarker(DataToolsUIConstants.TRANSIENT_BOOKMARK);
+            marker.setAttributes(attributes);
+            
+            // Fire the decorator
+            IDataToolsUIServiceManager.INSTANCE.getBookmarkDecorationService().refreshDecoration(element);
+            
+            return marker;
+        }
+        catch (CoreException e)
+        {
+            e.printStackTrace();
+        }
+        return null;
+    }
+    
+    private void enableConnectionListener (IMarker marker, EObject eObject)
+    {
+        ConnectionInfo info = TransientEObjectUtil.getConnectionInfo(eObject);
+        try
+        {
+            marker.setAttribute(DataToolsUIConstants.CONNECTION_NAME, info.getName());
+        }
+        catch (CoreException e1)
+        {
+        }
+        if (!infoListener.contains(info))
+        {
+            infoListener.add(info);
+            ((org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo)info).addConnectionSharingListener(new ConnectionSharingListener()
+	        {
+				public void onSQLException(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Connection connection, SQLException exception) {}
+				
+				public void sharedConnectionAdded(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Connection connection) {}
+				
+				public void sharedConnectionRemove(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Connection connection) {}
+				
+				public void sharedDatabaseAdded(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Database database) {}
+				
+				public void sharedDatabaseRemove(
+						org.eclipse.datatools.connectivity.sqm.internal.core.connection.ConnectionInfo info,
+						Database database) {
+					infoListener.remove(info);
+	                try
+	                {
+	                    IMarker [] markers = ResourcesPlugin.getWorkspace().getRoot().findMarkers(DataToolsUIConstants.BOOKMARK, 
+	                            																  true, 
+	                            																  IResource.DEPTH_INFINITE);
+	                    for (int i = 0, n = markers.length; i < n; i++)
+	                    {
+	                        IMarker marker = markers[i];
+	                        if (info.getName().equals(marker.getAttribute(DataToolsUIConstants.CONNECTION_NAME)))
+	                        {
+	                            marker.delete();
+	                        }
+	                    }
+	                }
+	                catch (CoreException e)
+	                {
+	                }					
+				}
+	        });
+        }
+    }
+
+    private void addEObjectBookmark(EObject eObject, String description)
+    {
+        try
+        {
+            String elementName = IDataToolsUIServiceManager.INSTANCE.getLabelService(eObject).getName();
+
+            HashMap attribMap = new HashMap();
+            attribMap.put(IMarker.LOCATION, elementName);
+            attribMap.put(IMarker.MESSAGE, description);
+            
+            attribMap.put(DataToolsUIConstants.BOOKMARK_ELEMENT_ID, getElementId (eObject));
+            
+            IMarker marker = addBookmark (attribMap, eObject);
+            enableConnectionListener (marker, eObject);
+        }
+        catch (Exception e)
+        {
+            Logger.log(this, e, ServerUIDebugOptions.SERVER_EXPLORER_LOG);
+        }
+    }
+    
+    private void addBookmark(Object element, String name)
+    {
+        InputDialog descriptionDialog = new InputDialog (	Display.getCurrent().getActiveShell(),
+                											ADD_BOOKMARK_TITLE,
+															ADD_BOOKMARK_MESSAGE,
+															name,
+															null);
+        if (descriptionDialog.open() == Dialog.OK)
+        {
+	        if (element instanceof EObject)
+	        {
+	            addEObjectBookmark((EObject) element, descriptionDialog.getValue());
+	        }
+        }
+    }
+
+    public BookmarkProvider(ICommonViewerWorkbenchSite viewSite)
+    {
+        this.viewSite = viewSite;
+        
+        ResourcesPlugin.getWorkspace().addResourceChangeListener(bookmarkListener = new IResourceChangeListener ()
+        {
+            public void resourceChanged(IResourceChangeEvent event)
+            {
+                IMarkerDelta [] delta = event.findMarkerDeltas(DataToolsUIConstants.TRANSIENT_BOOKMARK, false);
+                if (delta.length != 0)
+                {
+                    for (int i = 0, n = delta.length; i < n; i++)
+                    {
+                        if (delta[i].getKind() == IResourceDelta.REMOVED)
+                        {
+                            String id = delta[i].getAttribute(DataToolsUIConstants.BOOKMARK_ELEMENT_ID, BLANK_ID);
+                            if (!id.equals(BLANK_ID))
+                            {
+                                EObject object = getElementFromId(id);
+                                if (object != null)
+                                {
+                                    IDataToolsUIServiceManager.INSTANCE.getBookmarkDecorationService().refreshDecoration(object);
+                                }
+                            }
+                        }
+                    }
+                }
+            }
+        });
+    }
+
+    /**
+     * Will remove the resource listener to listen to bookmark changes
+     */
+    public void removeListener ()
+    {
+        ResourcesPlugin.getWorkspace().removeResourceChangeListener(bookmarkListener);
+    }
+    
+    public void run ()
+    {
+        ISelection selection = this.viewSite.getSelectionProvider().getSelection();
+        if (selection instanceof IStructuredSelection)
+        {
+            for (Iterator iterator = ((IStructuredSelection) selection).iterator(); iterator.hasNext();)
+            {
+                Object current = iterator.next();
+                String currentName = BLANK_ID;
+                if (current instanceof SQLObject)
+                {
+                    currentName = IDataToolsUIServiceManager.INSTANCE.getLabelService(current).getName();
+                }
+                addBookmark(current, currentName);
+            }
+        }
+    }
+}
diff --git a/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkSelectionProvider.java b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkSelectionProvider.java
new file mode 100644
index 0000000..d213b94
--- /dev/null
+++ b/plugins/org.eclipse.datatools.connectivity.sqm.server.ui/src/org/eclipse/datatools/connectivity/sqm/server/internal/ui/explorer/providers/bookmark/BookmarkSelectionProvider.java
@@ -0,0 +1,97 @@
+/*******************************************************************************
+ * Copyright (c) 2001, 2004, 2008 IBM Corporation and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ * 
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.datatools.connectivity.sqm.server.internal.ui.explorer.providers.bookmark;
+
+import org.eclipse.core.resources.IMarker;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.datatools.connectivity.sqm.core.internal.ui.util.resources.DataToolsUIConstants;
+import org.eclipse.datatools.connectivity.sqm.core.ui.services.IDataToolsUIServiceManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.services.IServicesManager;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.ServerUIDebugOptions;
+import org.eclipse.datatools.connectivity.sqm.server.internal.ui.util.logging.Logger;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.IWorkbenchWindow;
+import org.eclipse.ui.PlatformUI;
+
+/**
+ * @author ljulien
+ */
+public class BookmarkSelectionProvider
+{
+    private static final String BOOKMARKVIEW = "org.eclipse.ui.views.BookmarkView"; //$NON-NLS-1$
+    private static final String BLANK_ID = ""; //$NON-NLS-1$
+    
+    private ISelectionListener listener = null;
+    
+    public BookmarkSelectionProvider()
+    {
+        IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+        if (page != null)
+        {
+            page.addSelectionListener(BOOKMARKVIEW, listener = new ISelectionListener()
+            {
+                public void selectionChanged(IWorkbenchPart part, ISelection selection)
+                {
+                    if (selection instanceof IStructuredSelection)
+                    {
+	                    IStructuredSelection structuredSelection = (IStructuredSelection) selection;
+	                    Object obj = structuredSelection.getFirstElement();
+	                    if (obj == null || !(obj instanceof IMarker))
+	                    {
+	                        return;
+	                    }
+	
+	                    IMarker marker = (IMarker) obj;
+	                    try
+	                    {
+	                        if (marker.getType().equals(DataToolsUIConstants.TRANSIENT_BOOKMARK))
+	                        {
+	                            String attribute = (String) marker.getAttribute(DataToolsUIConstants.BOOKMARK_ELEMENT_ID, BLANK_ID);
+	                            if (!attribute.equals(BLANK_ID))
+	                            {
+	                                IServicesManager.INSTANCE.getServerExplorerContentService().expandNode(attribute);
+	                            }
+	                        }
+	                        else
+	                        {
+	                            IDataToolsUIServiceManager.INSTANCE.getMarkerNavigationService().gotoMarker(null, marker);
+	                        }
+	                    }
+	                    catch (CoreException e)
+	                    {
+	                        Logger.log(this, e, ServerUIDebugOptions.SERVER_EXPLORER_LOG);
+	                    }
+                    }
+                }
+            });
+        }
+    }
+    
+    public void removeListener ()
+    {
+        if (listener != null)
+        {
+            IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow();
+            if (window != null)
+            {
+                IWorkbenchPage page = window.getActivePage();
+                if (page != null)
+                {
+                    page.removeSelectionListener(BOOKMARKVIEW, listener);
+                }
+            }
+        }
+    }
+}