blob: 7ae7a224824e432e4862313805429e21057e4335 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 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 select the Participant to unassign.
* 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.util.ArrayList;
import java.util.List;
import org.eclipse.emf.common.util.EList;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.mylyn.reviews.r4e.core.model.R4EParticipant;
import org.eclipse.mylyn.reviews.r4e.core.model.serial.impl.ResourceHandlingException;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.IR4EUIModelElement;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIContent;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIFileContext;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIModelController;
import org.eclipse.mylyn.reviews.r4e.ui.internal.model.R4EUIReviewItem;
import org.eclipse.mylyn.reviews.r4e.ui.internal.utils.R4EUIConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableItem;
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 ParticipantUnassignDialog extends FormDialog implements IParticipantUnassignDialog {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* Field UNASSIGN_PARTICIPANT_DIALOG_TITLE. (value is ""Select Participants to Unassign"")
*/
private static final String UNASSIGN_PARTICIPANT_DIALOG_TITLE = "Select Participants to Unassign";
// ------------------------------------------------------------------------
// Member variables
// ------------------------------------------------------------------------
/**
* Field fParticipantsUnassignValues.
*/
private final List<R4EParticipant> fParticipantsUnassignValues = new ArrayList<R4EParticipant>();
/**
* Field fElement.
*/
private IR4EUIModelElement fElement = null;
/**
* Field fParticipantsTable.
*/
private Table fParticipantsTable = null;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor for ParticipantInputDialog.
*
* @param aParentShell
* Shell
* @param aElement
* IR4EUIModelElement
*/
public ParticipantUnassignDialog(Shell aParentShell, IR4EUIModelElement aElement) {
super(aParentShell);
fElement = aElement;
setBlockOnOpen(true);
}
// ------------------------------------------------------------------------
// Methods
// ------------------------------------------------------------------------
/**
* Method buttonPressed.
*
* @param aButtonId
* int
* @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
*/
@Override
protected void buttonPressed(int aButtonId) {
if (aButtonId == IDialogConstants.OK_ID) {
for (TableItem item : fParticipantsTable.getItems()) {
if (item.getChecked()) {
R4EParticipant participant;
try {
participant = R4EUIModelController.getActiveReview().getParticipant(item.getText(), false);
if (null != participant) {
fParticipantsUnassignValues.add(participant);
}
} catch (ResourceHandlingException e) {
// just continue
}
}
}
}
super.buttonPressed(aButtonId);
}
/**
* Method configureShell.
*
* @param aShell
* Shell
* @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
*/
@Override
protected void configureShell(Shell aShell) {
super.configureShell(aShell);
aShell.setText(UNASSIGN_PARTICIPANT_DIALOG_TITLE);
aShell.setMinimumSize(R4EUIConstants.DIALOG_DEFAULT_WIDTH / 2, R4EUIConstants.DIALOG_DEFAULT_HEIGHT);
}
/**
* Method create.
*
* @see org.eclipse.ui.forms.FormDialog#create()
*/
@Override
public void create() {
fParticipantsUnassignValues.clear();
super.create();
}
/**
* Method open.
*
* @return int
* @see org.eclipse.ui.forms.FormDialog#open()
*/
@Override
public int open() {
return super.open();
}
/**
* Method close.
*
* @return int
* @see org.eclipse.ui.forms.FormDialog#close()
*/
@Override
public boolean close() {
return super.close();
}
/**
* Configures the dialog form and creates form content. Clients should override this method.
*
* @param aForm
* the dialog form
*/
@Override
protected void createFormContent(final IManagedForm aForm) {
final FormToolkit toolkit = aForm.getToolkit();
final ScrolledForm sform = aForm.getForm();
sform.setExpandVertical(true);
final Composite composite = sform.getBody();
final GridLayout layout = new GridLayout(1, false);
composite.setLayout(layout);
//Create table
fParticipantsTable = toolkit.createTable(composite, SWT.CHECK | SWT.V_SCROLL);
final GridData tableData = new GridData(GridData.FILL, GridData.FILL, true, true);
fParticipantsTable.setLayoutData(tableData);
fParticipantsTable.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
final TableItem[] items = fParticipantsTable.getItems();
getButton(IDialogConstants.OK_ID).setEnabled(false);
for (TableItem item : items) {
if (item.getChecked()) {
getButton(IDialogConstants.OK_ID).setEnabled(true);
}
}
}
});
//Populate table
EList<String> assignedParticipants = null;
if (fElement instanceof R4EUIReviewItem) {
assignedParticipants = ((R4EUIReviewItem) fElement).getItem().getAssignedTo();
} else if (fElement instanceof R4EUIFileContext) {
assignedParticipants = ((R4EUIFileContext) fElement).getFileContext().getAssignedTo();
} else if (fElement instanceof R4EUIContent) {
assignedParticipants = ((R4EUIContent) fElement).getContent().getAssignedTo();
} else {
return; //should never happen
}
for (String participant : assignedParticipants) {
final TableItem item = new TableItem(fParticipantsTable, SWT.NONE);
item.setText(participant);
}
}
/**
* 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;
}
/**
* Method isResizable.
*
* @return boolean
* @see org.eclipse.jface.dialogs.Dialog#isResizable()
*/
@Override
protected boolean isResizable() {
return true;
}
/**
* Method getParticpants.
*
* @return List<R4EParticipant>
*/
public List<R4EParticipant> getParticipants() {
return fParticipantsUnassignValues;
}
}