blob: 8fe723f53ed700d0821245487b0e7126f1f3e5f6 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2010, 2012 Ericsson AB 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
*
* Description:
*
* This class implements the dialog used to fill-in the Participant element details.
* This is a modal dialog
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
*
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.ui.internal.dialogs;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.naming.NamingException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.mylyn.reviews.r4e.ui.R4EUIPlugin;
import org.eclipse.mylyn.reviews.r4e.ui.internal.sorters.FindUsersTableViewerSorter;
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.R4EUIConstants;
import org.eclipse.mylyn.reviews.userSearch.query.IQueryUser;
import org.eclipse.mylyn.reviews.userSearch.query.QueryUserFactory;
import org.eclipse.mylyn.reviews.userSearch.userInfo.IUserInfo;
import org.eclipse.mylyn.reviews.userSearch.userInfo.UserInformationFactory;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.FormDialog;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
/**
* @author Sebastien Dubois
* @version $Revision: 1.0 $
*/
public class FindUserDialog extends FormDialog implements IFindUserDialog {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* Field TEXT_FIELD_WIDTH. (value is "300")
*/
private static final int TEXT_FIELD_WIDTH = 300;
/**
* Field DIALOG_MIN_WIDTH. (value is "860")
*/
private static final int DIALOG_MIN_WIDTH = 860;
/**
* Field DIALOG_MIN_HEIGTH. (value is "550")
*/
private static final int DIALOG_MIN_HEIGHT = 550;
/**
* Field FIND_USER_DIALOG_TITLE. (value is ""Find User"")
*/
private static final String FIND_USER_DIALOG_TITLE = "Find User";
/**
* Field USER_INFORMATION_LABEL. (value is ""User Information"")
*/
private static final String USER_INFORMATION_LABEL = "Search Filters";
/**
* Field QUERY_RESULTS_LABEL. (value is ""Query Results"")
*/
private static final String QUERY_RESULTS_LABEL = "Query Results";
/**
* Field OFFICE_LABEL. (value is ""Office: "")
*/
private static final String OFFICE_LABEL = "Office: ";
/**
* Field COMPANY_LABEL. (value is ""Company: "")
*/
private static final String COMPANY_LABEL = "Company: ";
/**
* Field DEPARTMENT_LABEL. (value is ""Department: "")
*/
private static final String DEPARTMENT_LABEL = "Department: ";
/**
* Field CITY_LABEL. (value is ""City: "")
*/
private static final String CITY_LABEL = "City: ";
/**
* Field COUNTRY_LABEL. (value is ""Country: "")
*/
private static final String COUNTRY_LABEL = "Country: ";
/**
* Field SEARCH_BUTTON_TEXT. (value is ""Search"")
*/
private static final String SEARCH_BUTTON_TEXT = "Search";
/**
* Field CLEAR_BUTTON_TEXT. (value is ""Clear"")
*/
private static final String CLEAR_BUTTON_TEXT = "Clear";
/**
* Field NUM_ENTRIES_LABEL. (value is ""Number of Entries: "")
*/
private static final String NUM_ENTRIES_LABEL = "Number of Entries: ";
/**
* Field USERS_ADDED_LABEL. (value is ""Added Users: "")
*/
private static final String USERS_ADDED_LABEL = "Users: ";
/**
* Field ADD_USER_BUTTON_LABEL. (value is ""Add Users"")
*/
private static final String ADD_USER_BUTTON_LABEL = "Add Users";
/**
* Field NONE.
*/
protected static final IUserInfo[] NONE = new IUserInfo[] {};
// ------------------------------------------------------------------------
// Member variables
// ------------------------------------------------------------------------
/**
* Field fUserDetailsForm.
*/
private Group fUserDetailsForm = null;
/**
* Field fUserQueyResultsForm.
*/
private Group fUserQueyResultsForm = null;
/**
* Field fUserAddedForm.
*/
private Group fUserAddedForm = null;
/**
* Field fUserIdInputTextField.
*/
protected Text fUserIdInputTextField = null;
/**
* Field fUserNameInputTextField.
*/
protected Text fUserNameInputTextField = null;
/**
* Field fUserOfficeInputTextField.
*/
protected Text fUserOfficeInputTextField = null;
/**
* Field fUserCompanyInputTextField.
*/
protected Text fUserCompanyInputTextField = null;
/**
* Field fUserDepartmentInputTextField.
*/
protected Text fUserDepartmentInputTextField = null;
/**
* Field fUserCityInputTextField.
*/
protected Text fUserCityInputTextField = null;
/**
* Field fUserCountryInputTextField.
*/
protected Text fUserCountryInputTextField = null;
/**
* Field fSearchButton.
*/
private Button fSearchButton = null;
/**
* Field fClearButton.
*/
private Button fClearButton = null;
/**
* Field fUsersList.
*/
protected List<IUserInfo> fUsersList = null;
/**
* Field fNumEntriesValue.
*/
protected Label fNumEntriesValue = null;
/**
* Field fUsersTableViewer.
*/
protected TableViewer fUsersTableViewer;
/**
* Field fUserAddedValue.
*/
protected Text fUserAddedValue = null;
/**
* Field fAddUserButton.
*/
private Button fAddUserButton;
/**
* Field fUserInfos.
*/
private List<IUserInfo> fUserInfos = new ArrayList<IUserInfo>();
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor for FindUserDialog.
*
* @param aParentShell
* Shell
*/
public FindUserDialog(Shell aParentShell) {
super(aParentShell);
setBlockOnOpen(true);
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
/**
* Method buttonPressed.
*
* @param buttonId
* int
* @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
*/
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == IDialogConstants.OK_ID) {
boolean userFound;
final String[] ids = fUserAddedValue.getText().trim().split(R4EUIConstants.LIST_SEPARATOR);
for (String id : ids) {
userFound = false;
for (IUserInfo userInfo : fUserInfos) {
if (id.trim().equalsIgnoreCase(userInfo.getUserId())) {
userFound = true;
break;
}
}
if (!userFound) {
final ErrorDialog dialog = new ErrorDialog(null, R4EUIConstants.DIALOG_TITLE_ERROR,
"Cannot add User", new Status(IStatus.ERROR, R4EUIPlugin.PLUGIN_ID, 0, "User " + id.trim()
+ " not found in database", null), IStatus.ERROR);
dialog.open();
continue;
}
}
}
super.buttonPressed(buttonId);
}
/**
* Method configureShell.
*
* @param shell
* Shell
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
@Override
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(FIND_USER_DIALOG_TITLE);
}
/**
* Configures the dialog form and creates form content. Clients should override this method.
*
* @param mform
* IManagedForm - the dialog form
*/
@Override
protected void createFormContent(final IManagedForm mform) {
final FormToolkit toolkit = mform.getToolkit();
final ScrolledForm sform = mform.getForm();
sform.setExpandVertical(true);
final Composite composite = sform.getBody();
final FormLayout layout = new FormLayout();
layout.marginWidth = 7;
layout.marginHeight = 3;
composite.setLayout(layout);
createSearchFiltersForm(composite, toolkit);
createAddUsersForm(composite, toolkit);
createUsersTableForm(composite, toolkit);
}
/**
* Configures the button bar.
*
* @param parent
* the parent composite
* @return Control
*/
@Override
protected Control createButtonBar(Composite parent) {
final Control bar = super.createButtonBar(parent);
getButton(IDialogConstants.OK_ID).setEnabled(false);
return bar;
}
/**
* Creates new search filters area
*
* @param aParent
* Composite
* @param aToolkit
* FormToolkit
*/
private void createSearchFiltersForm(Composite aParent, FormToolkit aToolkit) {
fUserDetailsForm = new Group(aParent, SWT.NONE);
fUserDetailsForm.setText(USER_INFORMATION_LABEL);
fUserDetailsForm.setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_WHITE));
final FormLayout layout = new FormLayout();
layout.marginWidth = 7;
layout.marginHeight = 3;
fUserDetailsForm.setLayout(layout);
final FormData userDetailsFormData = new FormData();
userDetailsFormData.top = new FormAttachment(0, 0);
userDetailsFormData.left = new FormAttachment(0, 0);
userDetailsFormData.right = new FormAttachment(100, 0);
fUserDetailsForm.setLayoutData(userDetailsFormData);
// Id
final Label userIdLabel = aToolkit.createLabel(fUserDetailsForm, R4EUIConstants.ID_LABEL);
final FormData userIdLabelData = new FormData();
userIdLabelData.top = new FormAttachment(5, 0);
userIdLabel.setToolTipText(R4EUIConstants.USER_ID_TOOLTIP);
userIdLabel.setLayoutData(userIdLabelData);
fUserIdInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData userIdTextData = new FormData();
userIdTextData.top = new FormAttachment(userIdLabel, 0, SWT.TOP);
userIdTextData.left = new FormAttachment(userIdLabel, 60, SWT.RIGHT);
userIdTextData.width = TEXT_FIELD_WIDTH;
fUserIdInputTextField.setToolTipText(R4EUIConstants.USER_ID_TOOLTIP);
fUserIdInputTextField.setLayoutData(userIdTextData);
// Name
final Label userNameLabel = aToolkit.createLabel(fUserDetailsForm, R4EUIConstants.NAME_LABEL);
final FormData userNameLabelData = new FormData();
userNameLabelData.top = new FormAttachment(userIdLabel, 0, SWT.TOP);
userNameLabelData.left = new FormAttachment(fUserIdInputTextField, 40, SWT.RIGHT);
userNameLabel.setToolTipText(R4EUIConstants.USER_NAME_TOOLTIP);
userNameLabel.setLayoutData(userNameLabelData);
fUserNameInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData userNameTextData = new FormData();
userNameTextData.top = new FormAttachment(userNameLabel, 0, SWT.TOP);
userNameTextData.left = new FormAttachment(userNameLabel, 25, SWT.RIGHT);
userNameTextData.width = TEXT_FIELD_WIDTH;
fUserNameInputTextField.setToolTipText(R4EUIConstants.USER_NAME_TOOLTIP);
fUserNameInputTextField.setLayoutData(userNameTextData);
// Office
final Label officeLabel = aToolkit.createLabel(fUserDetailsForm, OFFICE_LABEL);
final FormData officeLabelData = new FormData();
officeLabelData.top = new FormAttachment(fUserIdInputTextField, 5, SWT.BOTTOM);
officeLabelData.left = new FormAttachment(userIdLabel, 0, SWT.LEFT);
officeLabel.setToolTipText(R4EUIConstants.USER_OFFICE_TOOLTIP);
officeLabel.setLayoutData(officeLabelData);
fUserOfficeInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData officeTextData = new FormData();
officeTextData.top = new FormAttachment(officeLabel, 0, SWT.TOP);
officeTextData.left = new FormAttachment(fUserIdInputTextField, 0, SWT.LEFT);
officeTextData.right = new FormAttachment(fUserIdInputTextField, 0, SWT.RIGHT);
fUserOfficeInputTextField.setToolTipText(R4EUIConstants.USER_OFFICE_TOOLTIP);
fUserOfficeInputTextField.setLayoutData(officeTextData);
// Company
final Label companyLabel = aToolkit.createLabel(fUserDetailsForm, COMPANY_LABEL);
final FormData companyLabelData = new FormData();
companyLabelData.top = new FormAttachment(officeLabel, 0, SWT.TOP);
companyLabelData.left = new FormAttachment(userNameLabel, 0, SWT.LEFT);
companyLabel.setToolTipText(R4EUIConstants.USER_COMPANY_TOOLTIP);
companyLabel.setLayoutData(companyLabelData);
fUserCompanyInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData companyTextData = new FormData();
companyTextData.top = new FormAttachment(officeLabel, 0, SWT.TOP);
companyTextData.left = new FormAttachment(fUserNameInputTextField, 0, SWT.LEFT);
companyTextData.right = new FormAttachment(fUserNameInputTextField, 0, SWT.RIGHT);
fUserCompanyInputTextField.setToolTipText(R4EUIConstants.USER_COMPANY_TOOLTIP);
fUserCompanyInputTextField.setLayoutData(companyTextData);
// Department
final Label deptLabel = aToolkit.createLabel(fUserDetailsForm, DEPARTMENT_LABEL);
final FormData deptLabelData = new FormData();
deptLabelData.top = new FormAttachment(fUserOfficeInputTextField, 5, SWT.BOTTOM);
deptLabelData.left = new FormAttachment(userIdLabel, 0, SWT.LEFT);
deptLabel.setToolTipText(R4EUIConstants.USER_DEPARTMENT_TOOLTIP);
deptLabel.setLayoutData(deptLabelData);
fUserDepartmentInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData deptTextData = new FormData();
deptTextData.top = new FormAttachment(deptLabel, 0, SWT.TOP);
deptTextData.left = new FormAttachment(fUserIdInputTextField, 0, SWT.LEFT);
deptTextData.right = new FormAttachment(fUserIdInputTextField, 0, SWT.RIGHT);
fUserDepartmentInputTextField.setToolTipText(R4EUIConstants.USER_DEPARTMENT_TOOLTIP);
fUserDepartmentInputTextField.setLayoutData(deptTextData);
// City
final Label cityLabel = aToolkit.createLabel(fUserDetailsForm, CITY_LABEL);
final FormData cityLabelData = new FormData();
cityLabelData.top = new FormAttachment(deptLabel, 0, SWT.TOP);
cityLabelData.left = new FormAttachment(userNameLabel, 0, SWT.LEFT);
cityLabel.setToolTipText(R4EUIConstants.USER_CITY_TOOLTIP);
cityLabel.setLayoutData(cityLabelData);
fUserCityInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData cityTextData = new FormData();
cityTextData.top = new FormAttachment(cityLabel, 0, SWT.TOP);
cityTextData.left = new FormAttachment(fUserNameInputTextField, 0, SWT.LEFT);
cityTextData.right = new FormAttachment(fUserNameInputTextField, 0, SWT.RIGHT);
fUserCityInputTextField.setToolTipText(R4EUIConstants.USER_CITY_TOOLTIP);
fUserCityInputTextField.setLayoutData(cityTextData);
// Country
final Label countryLabel = aToolkit.createLabel(fUserDetailsForm, COUNTRY_LABEL);
final FormData countryLabelData = new FormData();
countryLabelData.top = new FormAttachment(fUserDepartmentInputTextField, 5, SWT.BOTTOM);
countryLabelData.left = new FormAttachment(userIdLabel, 0, SWT.LEFT);
countryLabel.setToolTipText(R4EUIConstants.USER_COUNTRY_TOOLTIP);
countryLabel.setLayoutData(countryLabelData);
fUserCountryInputTextField = aToolkit.createText(fUserDetailsForm, "", SWT.SINGLE | SWT.BORDER);
final FormData countryTextData = new FormData();
countryTextData.top = new FormAttachment(countryLabel, 0, SWT.TOP);
countryTextData.left = new FormAttachment(fUserIdInputTextField, 0, SWT.LEFT);
countryTextData.right = new FormAttachment(fUserIdInputTextField, 0, SWT.RIGHT);
fUserCountryInputTextField.setToolTipText(R4EUIConstants.USER_COUNTRY_TOOLTIP);
fUserCountryInputTextField.setLayoutData(countryTextData);
// Search button
fSearchButton = aToolkit.createButton(fUserDetailsForm, SEARCH_BUTTON_TEXT, SWT.PUSH);
final FormData searchButtonData = new FormData();
searchButtonData.top = new FormAttachment(countryLabel, 0, SWT.TOP);
searchButtonData.left = new FormAttachment(fUserNameInputTextField, 0, SWT.LEFT);
fSearchButton.setToolTipText(R4EUIConstants.USER_SEARCH_TOOLTIP);
fSearchButton.setLayoutData(searchButtonData);
fSearchButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
getShell().setCursor(getShell().getDisplay().getSystemCursor(SWT.CURSOR_WAIT));
searchUser();
updateTableSelections();
getShell().setCursor(getShell().getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
}
});
// Clear search button
fClearButton = aToolkit.createButton(fUserDetailsForm, CLEAR_BUTTON_TEXT, SWT.PUSH);
final FormData clearSearchButtonData = new FormData();
clearSearchButtonData.top = new FormAttachment(countryLabel, 0, SWT.TOP);
clearSearchButtonData.left = new FormAttachment(fSearchButton, 10, SWT.RIGHT);
fClearButton.setToolTipText(R4EUIConstants.USER_CLEAR_TOOLTIP);
fClearButton.setLayoutData(clearSearchButtonData);
fClearButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
clearSearchField();
}
});
}
/**
* Create a form and its table to display the result of the search
*
* @param aParent
* Composite
* @param aToolkit
* FormToolkit
*/
private void createUsersTableForm(Composite aParent, FormToolkit aToolkit) {
fUserQueyResultsForm = new Group(aParent, SWT.NONE);
fUserQueyResultsForm.setText(QUERY_RESULTS_LABEL);
fUserQueyResultsForm.setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_WHITE));
final FormData userFormData = new FormData();
userFormData.top = new FormAttachment(fUserDetailsForm, 10, SWT.BOTTOM);
userFormData.left = new FormAttachment(0);
userFormData.right = new FormAttachment(100);
userFormData.bottom = new FormAttachment(fUserAddedForm);
fUserQueyResultsForm.setLayoutData(userFormData);
final FormLayout layout = new FormLayout();
layout.marginWidth = 7;
layout.marginHeight = 3;
fUserQueyResultsForm.setLayout(layout);
// Label for the number of items in the table
final Label numEntriesLabel = aToolkit.createLabel(fUserQueyResultsForm, NUM_ENTRIES_LABEL);
final FormData numEntriesLabelData = new FormData();
numEntriesLabelData.left = new FormAttachment(fUserQueyResultsForm, 0, SWT.LEFT);
numEntriesLabelData.bottom = new FormAttachment(100);
numEntriesLabel.setToolTipText(R4EUIConstants.USER_NUM_ENTRIES_TOOLTIP);
numEntriesLabel.setLayoutData(numEntriesLabelData);
//Count Label
fNumEntriesValue = aToolkit.createLabel(fUserQueyResultsForm, "0");
final FormData numEntriesValueData = new FormData();
numEntriesValueData.left = new FormAttachment(numEntriesLabel, 10, SWT.RIGHT);
numEntriesValueData.bottom = new FormAttachment(100);
numEntriesValueData.width = 30;
fNumEntriesValue.setToolTipText(R4EUIConstants.USER_NUM_ENTRIES_TOOLTIP);
fNumEntriesValue.setLayoutData(numEntriesValueData);
fUsersTableViewer = new TableViewer(fUserQueyResultsForm, SWT.MULTI | SWT.FULL_SELECTION);
fUsersTableViewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
addUser();
}
});
// Define the layout and columns in the table
final String[] columnId = UserInformationFactory.getInstance().getAttributeTypes();
TableColumn nameColumn = null;
for (String element : columnId) {
// Create a new column
nameColumn = new TableColumn(fUsersTableViewer.getTable(), SWT.LEFT);
nameColumn.setText(element);
nameColumn.setMoveable(true);
nameColumn.pack();
}
fUsersTableViewer.getTable().setHeaderVisible(true);
fUsersTableViewer.getTable().setLinesVisible(true);
final FormData usersTableData = new FormData();
usersTableData.top = new FormAttachment(0);
usersTableData.bottom = new FormAttachment(numEntriesLabel, -5, SWT.TOP);
usersTableData.left = new FormAttachment(0);
usersTableData.right = new FormAttachment(100);
fUsersTableViewer.getControl().setLayoutData(usersTableData);
// Attach the sorter to the viewer table and to each column with the bind call
FindUsersTableViewerSorter.bind(fUsersTableViewer);
attachContentProvider(fUsersTableViewer);
attachLabelProvider(fUsersTableViewer);
}
/**
* Creates new add users area
*
* @param aParent
* Composite
* @param aToolkit
* FormToolkit
*/
private void createAddUsersForm(Composite aParent, FormToolkit aToolkit) {
fUserAddedForm = new Group(aParent, SWT.NONE);
fUserAddedForm.setText(USERS_ADDED_LABEL);
fUserAddedForm.setBackground(getShell().getDisplay().getSystemColor(SWT.COLOR_WHITE));
final FormData userFormData = new FormData();
userFormData.left = new FormAttachment(0);
userFormData.right = new FormAttachment(100);
userFormData.bottom = new FormAttachment(100);
fUserAddedForm.setLayoutData(userFormData);
final FormLayout layout = new FormLayout();
layout.marginWidth = 7;
layout.marginHeight = 3;
fUserAddedForm.setLayout(layout);
//Add Users Button
fAddUserButton = aToolkit.createButton(fUserAddedForm, ADD_USER_BUTTON_LABEL, SWT.NONE);
final FormData userAddedButtonData = new FormData();
userAddedButtonData.top = new FormAttachment(5, 0);
userAddedButtonData.left = new FormAttachment(fUserAddedForm, 10, SWT.RIGHT);
fAddUserButton.setToolTipText(R4EUIConstants.USER_ADD_TOOLTIP);
fAddUserButton.setLayoutData(userAddedButtonData);
fAddUserButton.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
addUser();
}
});
//Added Users
fUserAddedValue = aToolkit.createText(fUserAddedForm, "", SWT.BORDER);
final FormData userAddedValueData = new FormData();
userAddedValueData.top = new FormAttachment(fAddUserButton, 0, SWT.TOP);
userAddedValueData.bottom = new FormAttachment(fAddUserButton, 0, SWT.BOTTOM);
userAddedValueData.left = new FormAttachment(fAddUserButton, 10, SWT.RIGHT);
userAddedValueData.right = new FormAttachment(100);
fUserAddedValue.setToolTipText(R4EUIConstants.USER_ADDED_TOOLTIP);
fUserAddedValue.setLayoutData(userAddedValueData);
fUserAddedValue.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
if (fUserAddedValue.getText().length() > 0) {
getButton(IDialogConstants.OK_ID).setEnabled(true);
} else {
getButton(IDialogConstants.OK_ID).setEnabled(false);
}
}
});
fUserAddedValue.addListener(SWT.FocusOut, new Listener() {
public void handleEvent(Event event) {
//Update the list of Participants to add
boolean userFound;
final List<IUserInfo> updatedInfos = new ArrayList<IUserInfo>();
final String[] ids = fUserAddedValue.getText().split(R4EUIConstants.LIST_SEPARATOR);
for (String id : ids) {
userFound = false;
for (IUserInfo userInfo : fUserInfos) {
if (id.trim().equalsIgnoreCase(userInfo.getUserId())) {
updatedInfos.add(userInfo);
userFound = true;
break;
}
}
if (!userFound) {
IUserInfo newUserInfo = getUser(id.trim());
if (null != newUserInfo) {
updatedInfos.add(newUserInfo);
}
}
}
fUserInfos = updatedInfos;
updateTableSelections();
}
});
}
/**
* Method attachLabelProvider
*
* @param aViewer
* TableViewer
*/
private void attachLabelProvider(final TableViewer aViewer) {
aViewer.setLabelProvider(new ITableLabelProvider() {
public Image getColumnImage(Object aElement, int aColumnIndex) {
return null;
}
public String getColumnText(Object aElement, int aColumnIndex) {
final String[] usrElem = ((IUserInfo) aElement).getAttributeValues();
return usrElem[aColumnIndex];
}
public void addListener(ILabelProviderListener listener) {
}
public void removeListener(ILabelProviderListener lpl) {
}
public void dispose() {
}
public boolean isLabelProperty(Object element, String property) {
return false;
}
});
}
/**
* Method attachContentProvider
*
* @param aTableViewer
* TableViewer
*/
private void attachContentProvider(final TableViewer aTableViewer) {
aTableViewer.setContentProvider(new IStructuredContentProvider() {
public Object[] getElements(Object inputElement) {
if (null == fUsersList) {
return NONE;
}
return fUsersList.toArray(new IUserInfo[] {});
}
public void dispose() {
}
public void inputChanged(Viewer aViewer, Object aOldInput, Object aNewInput) {
if (aNewInput instanceof IUserInfo[]) {
final IUserInfo[] usersData = (IUserInfo[]) aNewInput;
fNumEntriesValue.setText(Integer.toString(usersData.length));
}
}
});
}
/**
* Method getUser Queries the external database to get info about a specific user
*
* @param aUserId
* @return IUserInfo
*/
protected IUserInfo getUser(String aUserId) {
if (null != aUserId && !"".equals(aUserId)) {
final IQueryUser query = new QueryUserFactory().getInstance();
try {
final List<IUserInfo> users = query.searchByUserId(aUserId);
if (null != users && users.size() > 0) {
return users.get(0); //return first user
}
} catch (NamingException e) {
R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" + e.getMessage() + ")");
R4EUIPlugin.getDefault().logError("Exception: " + e.toString(), e);
} catch (IOException e) {
R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" + e.getMessage() + ")");
R4EUIPlugin.getDefault().logError("Exception: " + e.toString(), e);
}
}
return null;
}
/**
* Method searchUser Queries the external database for a list of users that are matching given criterias
*/
protected void searchUser() {
try {
if (fUserIdInputTextField.getText().equals("") && fUserNameInputTextField.getText().equals("")
&& fUserCompanyInputTextField.getText().equals("")
&& fUserOfficeInputTextField.getText().equals("")
&& fUserDepartmentInputTextField.getText().equals("")
&& fUserCountryInputTextField.getText().equals("") && fUserCityInputTextField.getText().equals("")) {
return; //No filters selected for query, ignore request
}
final IQueryUser query = new QueryUserFactory().getInstance();
fUsersList = query.search(fUserIdInputTextField.getText().trim(), fUserNameInputTextField.getText().trim(),
fUserCompanyInputTextField.getText().trim(), fUserOfficeInputTextField.getText().trim(),
fUserDepartmentInputTextField.getText().trim(), fUserCountryInputTextField.getText().trim(),
fUserCityInputTextField.getText().trim());
if (fUsersList.size() > 0) {
fUsersTableViewer.setInput(fUsersList.toArray(new IUserInfo[fUsersList.size()]));
final TableColumn[] columns = fUsersTableViewer.getTable().getColumns();
for (TableColumn column : columns) {
column.pack();
}
fUsersTableViewer.refresh();
fUsersTableViewer.getTable().layout();
} else {
MessageDialog.openInformation(getShell(), "Find User Result", "No Users found");
}
} catch (NamingException e) {
R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" + e.getMessage() + ")");
R4EUIPlugin.getDefault().logError("Exception: " + e.toString(), e);
final ErrorDialog dialog = new ErrorDialog(null, R4EUIConstants.DIALOG_TITLE_ERROR,
"Naming Error Detected", new Status(IStatus.ERROR, R4EUIPlugin.PLUGIN_ID, 0, e.getMessage(), e),
IStatus.ERROR);
dialog.open();
} catch (IOException e) {
R4EUIPlugin.Ftracer.traceError("Exception: " + e.toString() + " (" + e.getMessage() + ")");
R4EUIPlugin.getDefault().logError("Exception: " + e.toString(), e);
final ErrorDialog dialog = new ErrorDialog(null, R4EUIConstants.DIALOG_TITLE_ERROR, "I/O Error Detected",
new Status(IStatus.ERROR, R4EUIPlugin.PLUGIN_ID, 0, e.getMessage(), e), IStatus.ERROR);
dialog.open();
}
}
/**
* Method clearSearchField Clears all fields in the search area
*/
protected void clearSearchField() {
fUserIdInputTextField.setText("");
fUserNameInputTextField.setText("");
fUserOfficeInputTextField.setText("");
fUserCompanyInputTextField.setText("");
fUserDepartmentInputTextField.setText("");
fUserCityInputTextField.setText("");
fUserCountryInputTextField.setText("");
}
/**
* Method isResizable.
*
* @return boolean
* @see org.eclipse.jface.dialogs.Dialog#isResizable()
*/
@Override
protected boolean isResizable() {
return true;
}
/**
* Method getUserInfos.
*
* @return the users infos
*/
public List<IUserInfo> getUserInfos() {
return fUserInfos;
}
/**
* Method setFocus.
*/
public void setDialogsDefaults() {
// Set the search button as the default button
getShell().setDefaultButton(fSearchButton);
getShell().setMinimumSize(DIALOG_MIN_WIDTH, DIALOG_MIN_HEIGHT);
fUserInfos.clear();
}
/**
* Method updateTableSelections.
*/
private void updateTableSelections() {
final List<IUserInfo> selectedElements = new ArrayList<IUserInfo>();
for (IUserInfo userInfo : fUserInfos) {
for (int i = 0; i < fUsersTableViewer.getTable().getItemCount(); i++) {
IUserInfo tableUserInfo = (IUserInfo) fUsersTableViewer.getElementAt(i);
if (userInfo.getUserId().equalsIgnoreCase(tableUserInfo.getUserId())) {
selectedElements.add(tableUserInfo);
}
}
}
final StructuredSelection selection = new StructuredSelection(selectedElements);
fUsersTableViewer.setSelection(selection, true);
}
/**
* Method addUser.
*/
public void addUser() {
//Add selected Users to the list of Participants to add
final IStructuredSelection selection = (IStructuredSelection) fUsersTableViewer.getSelection();
IUserInfo element = null;
boolean userFound = false;
for (final Iterator<IUserInfo> iterator = selection.iterator(); iterator.hasNext();) {
element = iterator.next();
for (IUserInfo userInfo : fUserInfos) {
if (element.getUserId().equalsIgnoreCase(userInfo.getUserId())) {
userFound = true;
break;
}
}
if (!userFound) {
fUserInfos.add(element);
}
}
final StringBuffer buffer = new StringBuffer();
for (IUserInfo userInfo : fUserInfos) {
buffer.append(userInfo.getUserId().toLowerCase() + R4EUIConstants.LIST_SEPARATOR + " ");
}
fUserAddedValue.setText(buffer.toString());
}
}