Package org.eclipse.ecf.presence.ui

Source Code of org.eclipse.ecf.presence.ui.UserSearchView

/*******************************************************************************
* Copyright (c) 2008 Marcelo Mayworm. 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:   Marcelo Mayworm - initial API and implementation
*
******************************************************************************/
package org.eclipse.ecf.presence.ui;

import java.util.ArrayList;
import java.util.List;
import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.core.IContainerListener;
import org.eclipse.ecf.core.events.IContainerDisconnectedEvent;
import org.eclipse.ecf.core.events.IContainerEvent;
import org.eclipse.ecf.core.util.ECFException;
import org.eclipse.ecf.internal.presence.ui.Activator;
import org.eclipse.ecf.internal.presence.ui.Messages;
import org.eclipse.ecf.presence.IPresenceContainerAdapter;
import org.eclipse.ecf.presence.roster.IRosterSubscriptionSender;
import org.eclipse.ecf.presence.search.IResult;
import org.eclipse.ecf.presence.search.IResultList;
import org.eclipse.ecf.ui.SharedImages;
import org.eclipse.jface.action.*;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.*;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.part.PageBook;
import org.eclipse.ui.part.ViewPart;

/**
* View class for displaying multiple users that match a search in a tree viewer. This view part
* provides the ability to display multiple users in a single tree viewer. This class may be subclassed as
* desired to add or customize behavior.
* @since 2.0
*/
public class UserSearchView extends ViewPart {

  public static final String VIEW_ID = "org.eclipse.ecf.presence.ui.UserSearchView"; //$NON-NLS-1$

  protected static final int DEFAULT_EXPAND_LEVEL = 3;

  protected TreeViewer treeViewer;

  protected List users = new ArrayList();

  private IAction addContactAction;

  private MultiRosterAccount account;

  private PageBook pageBook;

  private Label helpMessageLabel;

  private IContainerListener listener;

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
   */
  public void createPartControl(Composite parent) {
    pageBook = new PageBook(parent, SWT.NONE);

    createHelpMessage(pageBook);
    setupTreeViewer(pageBook);

    if (users.size() == 0)
      pageBook.showPage(helpMessageLabel);
  }

  private void createHelpMessage(Composite parent) {
    if (!parent.isDisposed()) {
      helpMessageLabel = new Label(parent, SWT.TOP + SWT.LEFT + SWT.WRAP);
    }
  }

  protected void setupTreeViewer(Composite parent) {
    treeViewer = new TreeViewer(parent, SWT.BORDER | SWT.SINGLE | SWT.V_SCROLL);
    getSite().setSelectionProvider(treeViewer);
    treeViewer.setContentProvider(new UserSearchContentProvider());
    treeViewer.setLabelProvider(new UserSearchLabelProvider());
    makeActions();
    hookContextMenu();

  }

  private void makeActions() {

    addContactAction = new Action(Messages.MultiRosterView_AddContact, SharedImages.getImageDescriptor(SharedImages.IMG_ADD_BUDDY)) {
      public void run() {
        ITreeSelection selection = (ITreeSelection) treeViewer.getSelection();
        IResult contact = (IResult) selection.getFirstElement();
        if (MessageDialog.openConfirm(null, Messages.AddContactDialog_DialogTitle, NLS.bind(Messages.SearchContactDialog_AddContactMessage, contact.getUser().getName()))) {
          IPresenceContainerAdapter ipca = account.getPresenceContainerAdapter();
          IRosterSubscriptionSender sender = ipca.getRosterManager().getRosterSubscriptionSender();
          try {
            sender.sendRosterAdd(contact.getUser().getID().getName(), contact.getUser().getName(), null);
          } catch (ECFException e) {
            Activator.getDefault().getLog().log(e.getStatus());
          }
        }

      }
    };

  }

  private void hookContextMenu() {
    MenuManager menuMgr = new MenuManager();
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
      public void menuAboutToShow(IMenuManager manager) {
        fillContextMenu(manager);
      }
    });
    Menu menu = menuMgr.createContextMenu(treeViewer.getControl());
    treeViewer.getControl().setMenu(menu);
    getSite().registerContextMenu(menuMgr, treeViewer);
  }

  private void fillContextMenu(IMenuManager manager) {
    IStructuredSelection iss = (IStructuredSelection) treeViewer.getSelection();
    Object element = iss.getFirstElement();
    if (element instanceof IResult) {
      manager.add(addContactAction);
    }
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.part.WorkbenchPart#dispose()
   */
  public void dispose() {
    treeViewer = null;
    users.clear();
    if (account != null)
      account.container.removeListener(listener);
    super.dispose();
  }

  /*
   * (non-Javadoc)
   *
   * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
   */
  public void setFocus() {
    if (treeViewer != null)
      treeViewer.getControl().setFocus();
  }

  /**
   * Add the list of {@link IResult} that will be display on a tree
   * @param list
   * @return boolean
   */
  public boolean addResult(IResultList list) {
    users.clear();
    users.add(list);
    treeViewer.setInput(users);
    pageBook.showPage(treeViewer.getControl());
    treeViewer.expandToLevel(DEFAULT_EXPAND_LEVEL);
    helpMessageLabel.setText(""); //$NON-NLS-1$
    return true;
  }

  /**
   * Add the MultiRosterAccount for add user contact
   * @param multiRosterAccount
   * @return boolean
   */
  public boolean addMultiRosterAccount(MultiRosterAccount multiRosterAccount) {
    Assert.isNotNull(multiRosterAccount);
    this.account = multiRosterAccount;

    listener = new IContainerListener() {
      public void handleEvent(IContainerEvent event) {
        if (event instanceof IContainerDisconnectedEvent) {
          users.clear();
          showMessage(Messages.MultiRosterView_HELP_MESSAGE);
        }
      }
    };
    account.container.addListener(listener);

    return true;
  }

  /**
   * Show a message into the view before show the result in a tree view
   * @param message
   */
  public void showMessage(String message) {
    helpMessageLabel.setText(message);
    pageBook.showPage(helpMessageLabel);
  }

}
TOP

Related Classes of org.eclipse.ecf.presence.ui.UserSearchView

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.