Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Valenta2006-01-17 18:03:01 +0000
committerMichael Valenta2006-01-17 18:03:01 +0000
commit6acbfd1b27f805aac4fd14f33fa1ce0bedee4af5 (patch)
tree8b76c1991d3a341e2374fef3047106c7dc63b40b
parent55b16ccea2e73466320175b4a5f4d20486c62687 (diff)
downloadeclipse.platform.team-6acbfd1b27f805aac4fd14f33fa1ce0bedee4af5.tar.gz
eclipse.platform.team-6acbfd1b27f805aac4fd14f33fa1ce0bedee4af5.tar.xz
eclipse.platform.team-6acbfd1b27f805aac4fd14f33fa1ce0bedee4af5.zip
*** empty log message ***
-rw-r--r--bundles/org.eclipse.team.ui/plugin.xml31
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java99
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java66
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java6
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionGroup.java114
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/operations/ModelSynchronizeParticipant.java4
-rw-r--r--bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java9
7 files changed, 297 insertions, 32 deletions
diff --git a/bundles/org.eclipse.team.ui/plugin.xml b/bundles/org.eclipse.team.ui/plugin.xml
index 6462c3868..2f64c0d4f 100644
--- a/bundles/org.eclipse.team.ui/plugin.xml
+++ b/bundles/org.eclipse.team.ui/plugin.xml
@@ -364,14 +364,35 @@
<viewerContentBinding
viewerId="org.eclipse.team.ui.navigatorViewer">
<includes>
- <!-- <contentExtension
- pattern="org.eclipse.team.ui.navigatorContent"
- isRoot="true"/> -->
<contentExtension
pattern="org.eclipse.team.ui.resourceContent"
isRoot="true"/>
- </includes>
- </viewerContentBinding>
+ </includes>
+ </viewerContentBinding>
+ <viewer
+ viewerId="org.eclipse.team.ui.navigatorViewer">
+ <popupMenu
+ allowsPlatformContributions="true"
+ id="org.eclipse.team.ui.navigatorViewer#PopupMenu">
+ <insertionPoint name="group.synchronize"/>
+ <insertionPoint
+ name="group.navigate"
+ separator="true"/>
+ <insertionPoint name="group.openWith"/>
+ <insertionPoint
+ name="group.merge"
+ separator="true"/>
+ <insertionPoint
+ name="group.other"
+ separator="true"/>
+ <insertionPoint
+ name="additions"
+ separator="true"/>
+ <insertionPoint
+ name="group.properties"
+ separator="true"/>
+ </popupMenu>
+ </viewer>
</extension>
<!-- *************** Synchronize View Participant **************** -->
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
index 20107b556..a8d9aaf72 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/mapping/CommonViewerAdvisor.java
@@ -12,19 +12,25 @@ package org.eclipse.team.internal.ui.mapping;
import java.util.*;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.TreeItem;
+import org.eclipse.team.internal.ui.TeamUIPlugin;
import org.eclipse.team.internal.ui.registry.TeamContentProviderManager;
import org.eclipse.team.internal.ui.synchronize.AbstractTreeViewerAdvisor;
import org.eclipse.team.ui.TeamUI;
import org.eclipse.team.ui.mapping.SynchronizationStateTester;
import org.eclipse.team.ui.operations.ModelSynchronizeParticipant;
import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
+import org.eclipse.ui.*;
+import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.navigator.*;
import org.eclipse.ui.navigator.internal.CommonSorter;
+import org.eclipse.ui.part.IPageSite;
/**
* Provides a Common Navigator based viewer for use by a {@link ModelSynchronizePage}.
@@ -55,12 +61,12 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
}
}
- private static final String TEAM_NAVIGATOR_CONTENT = "org.eclipse.team.ui.navigatorViewer"; //$NON-NLS-1$
+ public static final String TEAM_NAVIGATOR_CONTENT = "org.eclipse.team.ui.navigatorViewer"; //$NON-NLS-1$
- Set extensions = new HashSet();
- Map properties = new HashMap();
-
- private ISynchronizePageConfiguration configuration;
+ private Set extensions = new HashSet();
+ private Map properties = new HashMap();
+
+ private NavigatorActionService actionService;
/**
* Create a common viewer
@@ -69,7 +75,7 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
* @return a newly created common viewer
*/
private static CommonViewer createViewer(Composite parent, ISynchronizePageConfiguration configuration) {
- CommonViewer v = new NavigableCommonViewer(TEAM_NAVIGATOR_CONTENT, parent, SWT.NONE);
+ CommonViewer v = new NavigableCommonViewer(configuration.getViewerId(), parent, SWT.NONE);
v.getNavigatorContentService().activateExtensions(TeamContentProviderManager.getInstance().getContentProviderIds(), true);
configuration.getSite().setSelectionProvider(v);
return v;
@@ -81,7 +87,6 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
*/
public CommonViewerAdvisor(Composite parent, ISynchronizePageConfiguration configuration) {
super(configuration);
- this.configuration = configuration;
CommonViewer viewer = CommonViewerAdvisor.createViewer(parent, configuration);
GridData data = new GridData(GridData.FILL_BOTH);
viewer.getControl().setLayoutData(data);
@@ -101,8 +106,43 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
viewer.setInput(getInitialInput());
}
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#initializeViewer(org.eclipse.jface.viewers.StructuredViewer)
+ */
+ public void initializeViewer(StructuredViewer viewer) {
+ createActionService((CommonViewer)viewer, getConfiguration());
+ super.initializeViewer(viewer);
+ }
+
+ private void createActionService(CommonViewer viewer, ISynchronizePageConfiguration configuration) {
+ ICommonViewerSite commonSite = createCommonViewerSite(viewer, configuration);
+ actionService = new NavigatorActionService(commonSite, viewer, viewer.getNavigatorContentService());
+ }
+
+ private ICommonViewerSite createCommonViewerSite(CommonViewer viewer, ISynchronizePageConfiguration configuration) {
+ IWorkbenchSite site = configuration.getSite().getWorkbenchSite();
+ if (site instanceof IEditorSite) {
+ IEditorSite es = (IEditorSite) site;
+ return CommonViewerSiteFactory.createCommonViewerSite(es);
+ }
+ if (site instanceof IViewSite) {
+ IViewSite vs = (IViewSite) site;
+ return CommonViewerSiteFactory.createCommonViewerSite(vs);
+ }
+ if (site instanceof IPageSite) {
+ IPageSite ps = (IPageSite) site;
+ return CommonViewerSiteFactory.createCommonViewerSite(configuration.getViewerId(), ps);
+ }
+ return CommonViewerSiteFactory.createCommonViewerSite(configuration.getViewerId(), TeamUIPlugin.getActivePage(), new IMenuRegistration() {
+ public void registerContextMenu(String menuId, MenuManager menuManager,
+ ISelectionProvider selectionProvider) {
+ // Do nothing since dialogs can't have object contributions
+ }
+ }, viewer, configuration.getSite().getActionBars());
+ }
+
private Object getInitialInput() {
- return ((ModelSynchronizeParticipant)configuration.getParticipant()).getContext();
+ return ((ModelSynchronizeParticipant)getConfiguration().getParticipant()).getContext();
}
/* (non-Javadoc)
@@ -141,5 +181,48 @@ public class CommonViewerAdvisor extends AbstractTreeViewerAdvisor implements IN
extension.getStateModel().setIntProperty(property, value);
}
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#getContextMenuId(org.eclipse.jface.viewers.StructuredViewer)
+ */
+ protected String getContextMenuId(StructuredViewer viewer) {
+ return ((CommonViewer)viewer).getNavigatorContentService().getViewerDescriptor().getPopupMenuId();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#registerContextMenu(org.eclipse.jface.viewers.StructuredViewer, org.eclipse.jface.action.MenuManager)
+ */
+ protected void registerContextMenu(StructuredViewer viewer, MenuManager menuMgr) {
+ actionService.prepareMenuForPlatformContributions(menuMgr,
+ viewer, false);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#fillContextMenu(org.eclipse.jface.viewers.StructuredViewer, org.eclipse.jface.action.IMenuManager)
+ */
+ protected void fillContextMenu(StructuredViewer viewer, IMenuManager manager) {
+ ISelection selection = getViewer().getSelection();
+ actionService.setContext(new ActionContext(selection));
+ actionService.fillContextMenu(manager);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#dispose()
+ */
+ public void dispose() {
+ actionService.dispose();
+ super.dispose();
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.team.internal.ui.synchronize.StructuredViewerAdvisor#updateActionBars(org.eclipse.jface.viewers.IStructuredSelection)
+ */
+ protected void updateActionBars(IStructuredSelection selection) {
+ super.updateActionBars(selection);
+ if (!getConfiguration().getSite().isModal()) {
+ actionService.setContext(new ActionContext(selection));
+ actionService.fillActionBars(getConfiguration().getSite().getActionBars());
+ }
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java
index 41862b9f0..3322c9c88 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/StructuredViewerAdvisor.java
@@ -212,12 +212,7 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
}
}
- getActionGroup().fillActionBars(actionBars);
- updateActionBars((IStructuredSelection) getViewer().getSelection());
- Object input = getViewer().getInput();
- if (input instanceof ISynchronizeModelElement) {
- getActionGroup().modelChanged((ISynchronizeModelElement) input);
- }
+ fillActionBars(actionBars);
}
}
@@ -238,18 +233,11 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
* @see fillContextMenu(StructuredViewer, IMenuManager)
*/
private void hookContextMenu(final StructuredViewer viewer) {
- String targetID;
- Object o = getConfiguration().getProperty(ISynchronizePageConfiguration.P_OBJECT_CONTRIBUTION_ID);
- if (o instanceof String) {
- targetID = (String)o;
- } else {
- targetID = null;
- }
+ String targetID = getContextMenuId(viewer);
final MenuManager menuMgr = new MenuManager(targetID);
menuMgr.setRemoveAllWhenShown(true);
menuMgr.addMenuListener(new IMenuListener() {
-
public void menuAboutToShow(IMenuManager manager) {
fillContextMenu(viewer, manager);
}
@@ -279,6 +267,16 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
}
});
viewer.getControl().setMenu(menu);
+ registerContextMenu(viewer, menuMgr);
+ }
+
+ /**
+ * Register the context menu with the platform if apropriate.
+ * @param viewer the viewer
+ * @param menuMgr the context menu manager
+ */
+ protected void registerContextMenu(final StructuredViewer viewer, MenuManager menuMgr) {
+ String targetID = getContextMenuId(viewer);
if (targetID != null) {
IWorkbenchSite workbenchSite = getConfiguration().getSite().getWorkbenchSite();
IWorkbenchPartSite ws = null;
@@ -289,8 +287,24 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
}
}
}
+
+ /**
+ * Return the context menu id.
+ * @param viewer the viewer
+ * @return the context menu id
+ */
+ protected String getContextMenuId(StructuredViewer viewer) {
+ String targetID;
+ Object o = getConfiguration().getProperty(ISynchronizePageConfiguration.P_OBJECT_CONTRIBUTION_ID);
+ if (o instanceof String) {
+ targetID = (String)o;
+ } else {
+ targetID = null;
+ }
+ return targetID;
+ }
- /*
+ /**
* Callback that is invoked when a context menu is about to be shown in the
* viewer. Subsclasses must implement to contribute menus. Also, menus can
* contributed by creating a viewer contribution with a <code>targetID</code>
@@ -299,7 +313,7 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
* @param viewer the viewer in which the context menu is being shown.
* @param manager the menu manager to which actions can be added.
*/
- private void fillContextMenu(StructuredViewer viewer, final IMenuManager manager) {
+ protected void fillContextMenu(StructuredViewer viewer, final IMenuManager manager) {
// Populate the menu with the configured groups
Object o = getConfiguration().getProperty(ISynchronizePageConfiguration.P_CONTEXT_MENU);
if (!(o instanceof String[])) {
@@ -315,7 +329,25 @@ public abstract class StructuredViewerAdvisor extends AbstractViewerAdvisor {
getActionGroup().fillContextMenu(manager);
}
- private void updateActionBars(IStructuredSelection selection) {
+ /**
+ * Invoked once when the action bars are set.
+ * @param actionBars the action bars
+ */
+ protected void fillActionBars(IActionBars actionBars) {
+ getActionGroup().fillActionBars(actionBars);
+ updateActionBars((IStructuredSelection) getViewer().getSelection());
+ Object input = getViewer().getInput();
+ if (input instanceof ISynchronizeModelElement) {
+ getActionGroup().modelChanged((ISynchronizeModelElement) input);
+ }
+ }
+
+ /**
+ * Invoked each time the selection in the view changes in order
+ * to update the ction bars.
+ * @param selection the selection from the viewer
+ */
+ protected void updateActionBars(IStructuredSelection selection) {
ActionGroup group = getActionGroup();
if (group != null) {
group.setContext(new ActionContext(selection));
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java
index cfb5f5543..343286b96 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/internal/ui/synchronize/SynchronizePageConfiguration.java
@@ -21,6 +21,7 @@ import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.team.core.synchronize.SyncInfoSet;
import org.eclipse.team.internal.ui.TeamUIPlugin;
+import org.eclipse.team.internal.ui.mapping.CommonViewerAdvisor;
import org.eclipse.team.internal.ui.synchronize.actions.DefaultSynchronizePageActions;
import org.eclipse.team.ui.synchronize.*;
import org.eclipse.ui.IActionBars;
@@ -588,4 +589,9 @@ public class SynchronizePageConfiguration extends SynchronizePageActionGroup imp
public IRunnableContext getRunnableContext() {
return context;
}
+
+ public String getViewerId() {
+ // TODO Should be a property
+ return CommonViewerAdvisor.TEAM_NAVIGATOR_CONTENT;
+ }
}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionGroup.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionGroup.java
new file mode 100644
index 000000000..a39a5ac75
--- /dev/null
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/mapping/SynchronizationActionGroup.java
@@ -0,0 +1,114 @@
+/*******************************************************************************
+ * Copyright (c) 2006 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.team.ui.mapping;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.core.commands.IHandler;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.team.ui.TeamUI;
+import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration;
+import org.eclipse.ui.IActionBars;
+import org.eclipse.ui.navigator.CommonActionProvider;
+import org.eclipse.ui.navigator.CommonActionProviderConfig;
+
+/**
+ * An action group that can be used by models to contribute actions
+ * to a team synchronization viewer.
+ * <p>
+ * This class is not intended to be subclasses by clients
+ * <p>
+ * <strong>EXPERIMENTAL</strong>. This class or interface has been added as
+ * part of a work in progress. There is a guarantee neither that this API will
+ * work nor that it will remain the same. Please do not use this API without
+ * consulting with the Platform/Team team.
+ * </p>
+ *
+ * @since 3.2
+ */
+public class SynchronizationActionGroup extends CommonActionProvider {
+
+ /**
+ * Action id constant for the merge action.
+ * @see #registerHandler(String, IHandler)
+ */
+ public static final String MERGE_ACTION_ID = "org.eclipse.team.ui.mergeAction"; //$NON-NLS-1$
+
+ /**
+ * Action id constant for the merge action.
+ * @see #registerHandler(String, IHandler)
+ */
+ public static final String OVERWRITE_ACTION_ID = "org.eclipse.team.ui.overwriteAction"; //$NON-NLS-1$
+
+ /**
+ * Action id constant for the mark-as-merge action.
+ * @see #registerHandler(String, IHandler)
+ */
+ public static final String MARK_AS_MERGE_ACTION_ID = "org.eclipse.team.ui.markAsMergeAction"; //$NON-NLS-1$
+
+ private CommonActionProviderConfig config;
+ private Map handlers = new HashMap();
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.navigator.CommonActionProvider#init(org.eclipse.ui.navigator.CommonActionProviderConfig)
+ */
+ public void init(CommonActionProviderConfig aConfig) {
+ config = aConfig;
+ }
+
+ /**
+ * Return the configuration for the common viewer.
+ * @return the configuration from the common viewer
+ */
+ public final CommonActionProviderConfig getCommonConfiguration() {
+ return config;
+ }
+
+ /**
+ * Return the configuration from the synchronize page that contains
+ * the common viewer.
+ * @return the configuration from the synchronize page that contains
+ * the common viewer
+ */
+ public final ISynchronizePageConfiguration getSynchronizePageConfiguration() {
+ return (ISynchronizePageConfiguration)config.getExtensionStateModel().getProperty(TeamUI.SYNCHRONIZATION_PAGE_CONFIGURATION);
+ }
+
+ /**
+ * Register the handler as the handler for the given action id when
+ * a merge action is performed on elements that match this groups
+ * enablement.
+ * @param actionId the id of the merge action
+ * @param handler the handler for elements of the model that provided this group
+ */
+ protected void registerHandler(String actionId, IHandler handler) {
+ handlers.put(actionId, handler);
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.actions.ActionGroup#fillContextMenu(org.eclipse.jface.action.IMenuManager)
+ */
+ public void fillContextMenu(IMenuManager menu) {
+ super.fillContextMenu(menu);
+ // TODO: Register the handlers
+ }
+
+ /* (non-Javadoc)
+ * @see org.eclipse.ui.actions.ActionGroup#fillActionBars(org.eclipse.ui.IActionBars)
+ */
+ public void fillActionBars(IActionBars actionBars) {
+ super.fillActionBars(actionBars);
+ // TODO: Register the handlers
+ }
+
+
+}
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/operations/ModelSynchronizeParticipant.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/operations/ModelSynchronizeParticipant.java
index 03371f188..3d67b5589 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/operations/ModelSynchronizeParticipant.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/operations/ModelSynchronizeParticipant.java
@@ -46,13 +46,13 @@ public class ModelSynchronizeParticipant extends
* The id of the merge action group that determines where the merge
* actions (e.g. merge and overwrite) appear in the context menu or toolbar.
*/
- public static final String MERGE_ACTION_GROUP = "merge_action_group"; //$NON-NLS-1$
+ public static final String MERGE_ACTION_GROUP = "merge"; //$NON-NLS-1$
/**
* The id of the action group that determines where the other
* actions (e.g. mark-as-mered) appear in the context menu.
*/
- public static final String OTHER_ACTION_GROUP = "other_action_group"; //$NON-NLS-1$
+ public static final String OTHER_ACTION_GROUP = "other"; //$NON-NLS-1$
private ISynchronizationContext context;
diff --git a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java
index f855fd7c4..0971a89fa 100644
--- a/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java
+++ b/bundles/org.eclipse.team.ui/src/org/eclipse/team/ui/synchronize/ISynchronizePageConfiguration.java
@@ -389,4 +389,13 @@ public interface ISynchronizePageConfiguration {
* @return a runnable context (or <code>null</code>)
*/
IRunnableContext getRunnableContext();
+
+ /**
+ * Return the id of the viewer to which this configuration is
+ * associated.
+ * @return the id of the viewer to which this configuration is
+ * associated
+ * @since 3.2
+ */
+ String getViewerId();
}

Back to the top