blob: f56f67bc48dc2a7f27ab04c3ad59a9d04a964705 [file] [log] [blame]
/*
* Copyright (c) 2015 Eike Stepper (Berlin, Germany) 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:
* Eike Stepper - initial API and implementation
*/
package org.eclipse.emf.cdo.explorer.ui.checkouts.actions;
import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.ui.navigator.CommonActionProvider;
import org.eclipse.ui.navigator.ICommonActionExtensionSite;
import org.eclipse.ui.navigator.ICommonMenuConstants;
import org.eclipse.ui.navigator.ICommonViewerSite;
import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite;
/**
* @author Eike Stepper
*/
public abstract class AbstractActionProvider<T> extends CommonActionProvider
{
private final Class<T> selectionType;
private final String id;
private final String title;
private final String appendToGroup;
private ICommonActionExtensionSite config;
private ICommonViewerWorkbenchSite viewSite;
public AbstractActionProvider(Class<T> selectionType, String id, String title, String appendToGroup)
{
this.selectionType = selectionType;
this.id = id;
this.title = title;
this.appendToGroup = appendToGroup;
}
public final ICommonActionExtensionSite getConfig()
{
return config;
}
public final ICommonViewerWorkbenchSite getViewSite()
{
return viewSite;
}
public final StructuredViewer getViewer()
{
return config.getStructuredViewer();
}
public final IStructuredSelection getSelection()
{
return (IStructuredSelection)getContext().getSelection();
}
protected T getSelectedElement(IStructuredSelection selection)
{
if (selection.size() == 1)
{
Object element = selection.getFirstElement();
if (selectionType.isInstance(element))
{
return selectionType.cast(element);
}
}
return null;
}
@Override
public final void init(ICommonActionExtensionSite config)
{
this.config = config;
ICommonViewerSite viewSite = config.getViewSite();
if (viewSite instanceof ICommonViewerWorkbenchSite)
{
this.viewSite = (ICommonViewerWorkbenchSite)viewSite;
init(this.viewSite);
}
}
protected void init(ICommonViewerWorkbenchSite viewSite)
{
}
@Override
public final void fillContextMenu(IMenuManager menu)
{
if (viewSite == null)
{
return;
}
IStructuredSelection selection = getSelection();
if (selection == null || selection.isEmpty())
{
return;
}
T selectedElement = getSelectedElement(selection);
if (selectedElement == null)
{
return;
}
IMenuManager subMenu = new MenuManager(title, id);
subMenu.add(new GroupMarker(ICommonMenuConstants.GROUP_TOP));
if (fillSubMenu(viewSite, subMenu, selectedElement))
{
subMenu.add(new GroupMarker(ICommonMenuConstants.GROUP_ADDITIONS));
menu.appendToGroup(appendToGroup, subMenu);
}
}
protected abstract boolean fillSubMenu(ICommonViewerWorkbenchSite viewSite, IMenuManager subMenu, T selectedElement);
}