Package org.eclipse.ecf.internal.example.collab

Source Code of org.eclipse.ecf.internal.example.collab.EditorCompoundContributionItem

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)};
  }
}
TOP

Related Classes of org.eclipse.ecf.internal.example.collab.EditorCompoundContributionItem

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.