blob: 5d0af8be7acf51dc74718a78d36c73838ced4c33 [file] [log] [blame]
package org.eclipse.ecf.internal.example.collab;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.ecf.example.collab.share.EclipseCollabSharedObject;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IContributionItem;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.ISelectionProvider;
import org.eclipse.osgi.util.NLS;
import org.eclipse.ui.IEditorInput;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPartSite;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.actions.CompoundContributionItem;
import org.eclipse.ui.part.FileEditorInput;
public class EditorCompoundContributionItem extends CompoundContributionItem {
private static final IContributionItem[] EMPTY = new IContributionItem[] {};
private final ImageDescriptor menuImageDescriptor;
public EditorCompoundContributionItem() {
menuImageDescriptor = ClientPlugin.getDefault().getImageRegistry().getDescriptor(ClientPlugin.COLLABORATION_IMAGE);
}
public EditorCompoundContributionItem(String id) {
super(id);
menuImageDescriptor = ClientPlugin.getDefault().getImageRegistry().getDescriptor(ClientPlugin.COLLABORATION_IMAGE);
}
protected IFile getFileForPart(IEditorPart editorPart) {
final IEditorInput input = editorPart.getEditorInput();
if (input instanceof FileEditorInput) {
final FileEditorInput fei = (FileEditorInput) input;
return fei.getFile();
}
return null;
}
protected ClientEntry isConnected(IResource res) {
if (res == null)
return null;
final CollabClient client = CollabClient.getDefault();
final ClientEntry entry = client.isConnected(res, CollabClient.GENERIC_CONTAINER_CLIENT_NAME);
return entry;
}
protected IEditorPart getEditorPart() {
final IWorkbench workbench = PlatformUI.getWorkbench();
if (workbench == null)
return null;
final IWorkbenchWindow ww = workbench.getActiveWorkbenchWindow();
if (ww == null)
return null;
final IWorkbenchPage wp = ww.getActivePage();
if (wp == null)
return null;
return wp.getActiveEditor();
}
protected ITextSelection getSelection() {
final IEditorPart ep = getEditorPart();
if (ep == null)
return null;
final IWorkbenchPartSite ws = ep.getEditorSite();
if (ws == null)
return null;
final ISelectionProvider sp = ws.getSelectionProvider();
if (sp == null)
return null;
final ISelection sel = sp.getSelection();
if (sel == null || !(sel instanceof ITextSelection))
return null;
return (ITextSelection) sel;
}
protected IContributionItem[] getContributionItems() {
final ITextSelection textSelection = getSelection();
if (textSelection == null)
return EMPTY;
final IEditorPart editorPart = getEditorPart();
if (editorPart == null)
return EMPTY;
final IFile file = getFileForPart(editorPart);
if (file == null)
return EMPTY;
final IProject project = file.getProject();
if (isConnected(project.getWorkspace().getRoot()) == null)
return EMPTY;
final IAction action = new Action() {
public void run() {
final ClientEntry entry = isConnected(project.getWorkspace().getRoot());
if (entry == null) {
MessageDialog.openInformation(PlatformUI.getWorkbench().getDisplay().getActiveShell(), Messages.EditorCompoundContributionItem_EXCEPTION_NOT_CONNECTED_TITLE, Messages.EditorCompoundContributionItem_EXCEPTION_NOT_CONNECTED_MESSAGE);
return;
}
final EclipseCollabSharedObject collabsharedobject = entry.getSharedObject();
if (collabsharedobject != null) {
collabsharedobject.sendOpenAndSelectForFile(null, project.getName() + "/" + file.getProjectRelativePath().toString(), textSelection.getOffset(), textSelection.getLength()); //$NON-NLS-1$
}
}
};
final ClientEntry entry = isConnected(project.getWorkspace().getRoot());
if (entry == null)
return EMPTY;
final EclipseCollabSharedObject collabsharedobject = entry.getSharedObject();
if (collabsharedobject == null)
return EMPTY;
action.setText(NLS.bind(Messages.EditorCompoundContributionItem_SHARE_SELECTION_MENU_ITEM_NAME, collabsharedobject.getWindowTitle()));
if (menuImageDescriptor != null)
action.setImageDescriptor(menuImageDescriptor);
//action.setAccelerator(SWT.CTRL | SWT.SHIFT | '1');
return new IContributionItem[] {new Separator(), new ActionContributionItem(action)};
}
}