Package org.eclipse.ecf.internal.presence.ui.dialogs

Source Code of org.eclipse.ecf.internal.presence.ui.dialogs.SearchContactDialog

/*******************************************************************************
* 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.internal.presence.ui.dialogs;

import java.util.Iterator;
import org.eclipse.core.runtime.*;
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.*;
import org.eclipse.ecf.presence.ui.MultiRosterAccount;
import org.eclipse.ecf.presence.ui.UserSearchView;
import org.eclipse.jface.dialogs.*;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.progress.UIJob;

/**
*
* @since 3.0
*
*/
public class SearchContactDialog extends Dialog {

  Button closeButton;

  Button searchButton;

  MultiRosterAccount account;

  Button addContactButton;

  Button runInBackgroundButton;

  Table tableResult;

  Table tableFields;

  public SearchContactDialog(Shell parentShell, MultiRosterAccount account) {
    super(parentShell);
    this.account = account;

  }

  protected void addListeners() {

    searchButton.addMouseListener(new MouseAdapter() {
      public void mouseUp(MouseEvent e) {
        IUserSearchManager userManager = account.getPresenceContainerAdapter().getUserSearchManager();
        try {
          //selection to build the criteria
          IRestriction selection = userManager.createRestriction();
          //create a specific criteria
          final ICriteria criteria = userManager.createCriteria();
          //fields to consider on XMPP server side search
          TableItem items[] = tableFields.getItems();
          for (int i = 0; i < items.length; i++) {
            TableItem item = items[i];
            if (item.getChecked()) {
              //build criterion field=value
              ICriterion criterion = selection.eq(item.getText(0), item.getText(1));
              criteria.add(criterion);
            }
          }
          //Run in a block or non-block way using the criteria built previously
          if (runInBackgroundButton.getSelection()) {
            callAsynchronous(userManager, criteria);
            //close the UI
            close();
          } else {
            //call the block search
            ISearch search = userManager.search(criteria);
            //the collection of IResult
            IResultList resultList = search.getResultList();
            //clean the table for a new result list
            tableResult.removeAll();
            for (Iterator iterator = resultList.getResults().iterator(); iterator.hasNext();) {
              IResult result = (IResult) iterator.next();
              TableItem item = new TableItem(tableResult, SWT.NONE);
              item.setText(0, result.getUser().getName());
              item.setText(1, result.getUser().getID().getName());
            }
          }

        } catch (UserSearchException e1) {
          Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, e1.getLocalizedMessage(), e1));
        }
      }
    });

    addContactButton.addMouseListener(new MouseAdapter() {
      public void mouseUp(MouseEvent e) {
        TableItem contact = tableResult.getSelection()[0];
        if (MessageDialog.openConfirm(null, Messages.AddContactDialog_DialogTitle, NLS.bind(Messages.SearchContactDialog_AddContactMessage, contact.getText(0)))) {

          IPresenceContainerAdapter ipca = account.getPresenceContainerAdapter();
          IRosterSubscriptionSender sender = ipca.getRosterManager().getRosterSubscriptionSender();
          try {
            sender.sendRosterAdd(contact.getText(1), contact.getText(0), null);
          } catch (ECFException e1) {
            Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, e1.getLocalizedMessage(), e1));
          }
          close();
        }
      }
    });

  }

  protected void configureShell(Shell newShell) {
    super.configureShell(newShell);
    newShell.setText(Messages.SearchContactDialog_DialogTitle);
  }

  /*
   * Create just a close button for the Dialog
   * (non-Javadoc)
   * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite)
   */
  protected void createButtonsForButtonBar(Composite parent) {
    createButton(parent, IDialogConstants.OK_ID, IDialogConstants.CLOSE_LABEL, true);
    closeButton = getButton(IDialogConstants.OK_ID);
    closeButton.setEnabled(true);
  }

  protected Control createDialogArea(Composite parent) {
    final int editableColumn = 1;
    try {
      parent = (Composite) super.createDialogArea(parent);
      parent.setLayout(new GridLayout(2, false));
      String fields[] = null;
      IUserSearchManager userManager = account.getPresenceContainerAdapter().getUserSearchManager();
      fields = userManager.getUserPropertiesFields();

      GridData searchButtonData = new GridData(SWT.RIGHT, GridData.FILL_HORIZONTAL, false, false, 1, 1);
      GridData addContactData = new GridData(SWT.RIGHT, GridData.FILL_HORIZONTAL, true, false, 1, 1);

      Group group = new Group(parent, SWT.SHADOW_ETCHED_IN);
      group.setLayout(new GridLayout(2, false));
      group.setText(Messages.SearchContactDialog_InfoSearchFields);

      Group groupContact = new Group(parent, SWT.SHADOW_ETCHED_IN);
      groupContact.setLayout(new GridLayout(2, false));
      groupContact.setText(Messages.SearchContactDialog_InfoContactFields);

      tableResult = new Table(groupContact, SWT.MULTI | SWT.BORDER | SWT.FULL_SELECTION);
      tableResult.setLinesVisible(true);
      tableResult.setHeaderVisible(true);
      GridData dataTable = new GridData(GridData.FILL_HORIZONTAL, GridData.FILL_VERTICAL, true, true, 2, 1);
      dataTable.heightHint = 200;
      tableResult.setLayoutData(dataTable);

      new TableColumn(tableResult, SWT.NONE).setText(Messages.SearchContactDialog_TableResultColumnName);
      new TableColumn(tableResult, SWT.NONE).setText(Messages.SearchContactDialog_TableResultColumnUsername);
      new TableItem(tableResult, SWT.NONE);

      for (int i = 0; i < 2; i++) {
        tableResult.getColumn(i).setWidth(130);
      }

      addContactButton = new Button(groupContact, SWT.PUSH | SWT.RIGHT);
      addContactButton.setText(Messages.SearchContactDialog_ButtonAddContact);
      addContactButton.setLayoutData(addContactData);

      tableFields = new Table(group, SWT.BORDER | SWT.MULTI | SWT.CHECK);
      tableFields.setLinesVisible(true);
      tableFields.setHeaderVisible(true);
      dataTable = new GridData(GridData.FILL_HORIZONTAL, GridData.FILL_VERTICAL, true, true, 2, 1);
      dataTable.heightHint = 200;
      tableFields.setLayoutData(dataTable);

      TableColumn colField = new TableColumn(tableFields, SWT.NONE);
      colField.setText(Messages.SearchContactDialog_TableSearchColumnField);
      TableColumn colValue = new TableColumn(tableFields, SWT.NONE);
      colValue.setText(Messages.SearchContactDialog_TableSearchColumnValue);
      colValue.setWidth(130);

      for (int i = 0; i < fields.length; i++) {
        TableItem item = new TableItem(tableFields, SWT.NONE);
        item.setText(new String[] {fields[i], ""}); //$NON-NLS-1$
        item.setChecked(true);
      }

      TableItem[] items = tableFields.getItems();
      for (int i = 0; i < items.length; i++) {
        final TableEditor editor = new TableEditor(tableFields);
        Text text = new Text(tableFields, SWT.NONE);
        text.setText(items[i].getText(editableColumn));
        text.addModifyListener(new ModifyListener() {
          public void modifyText(ModifyEvent e) {
            editor.getItem().setText(editableColumn, ((Text) editor.getEditor()).getText());
          }
        });
        text.selectAll();
        text.setFocus();
        editor.grabHorizontal = true;
        editor.setEditor(text, items[i], editableColumn);

      }
      colField.pack();

      runInBackgroundButton = new Button(group, SWT.CHECK);
      runInBackgroundButton.setText(Messages.SearchContactDialog_RunInBackground);
      runInBackgroundButton.setToolTipText(Messages.SearchContactDialog_RunInBackGroundToolTip);

      searchButton = new Button(group, SWT.PUSH | SWT.RIGHT);
      searchButton.setText(Messages.SearchContactDialog_ButtonSearch);
      searchButton.setLayoutData(searchButtonData);

    } catch (ECFException e) {
      Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, e.getLocalizedMessage(), e));
      new Label(parent, SWT.LEFT).setText(e.getLocalizedMessage());
    }
    addListeners();
    applyDialogFont(parent);
    return parent;
  }

  /**
   * Call the user search and open the view
   * asynchronous
   * @param userManager
   * @param criteria
   */
  protected void callAsynchronous(final IUserSearchManager userManager, final ICriteria criteria) {

    IUserSearchListener listener = new IUserSearchListener() {
      public void handleUserSearchEvent(IUserSearchEvent event) {
        if (event instanceof IUserSearchCompleteEvent) {
          fireEventComplete((IUserSearchCompleteEvent) event);
        }

      }

    };
    userManager.search(criteria, listener);

  }

  /**
   *
   * @param event
   */
  protected void fireEventComplete(final IUserSearchCompleteEvent event) {
    new UIJob(Messages.SearchContactDialog_UserSearchJobName) {
      public IStatus runInUIThread(IProgressMonitor monitor) {
        try {
          final UserSearchView view = (UserSearchView) PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().showView(UserSearchView.VIEW_ID);
          view.showMessage(Messages.SearchContactDialog_SearchingMessage);
          view.addMultiRosterAccount(account);
          view.addResult(event.getSearch().getResultList());
        } catch (PartInitException e) {
          Activator.getDefault().getLog().log(new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, e.getLocalizedMessage(), e));
          return new Status(IStatus.ERROR, Activator.PLUGIN_ID, IStatus.ERROR, "Exception showing search results view", e); //$NON-NLS-1$
        }
        return Status.OK_STATUS;
      }
    }.schedule();

  }

}
TOP

Related Classes of org.eclipse.ecf.internal.presence.ui.dialogs.SearchContactDialog

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.