blob: 39d8abe98ab014b04c3d1de5cfcc9963770330c1 [file] [log] [blame]
// $codepro.audit.disable com.instantiations.assist.eclipse.analysis.audit.rule.effectivejava.alwaysOverridetoString.alwaysOverrideToString, com.instantiations.assist.eclipse.analysis.audit.rule.effectivejava.constructorsOnlyInvokeFinalMethods, useForLoop, com.instantiations.assist.eclipse.analysis.deserializeabilitySecurity, com.instantiations.assist.eclipse.analysis.disallowReturnMutable, com.instantiations.assist.eclipse.analysis.enforceCloneableUsageSecurity, explicitThisUsage
/*******************************************************************************
* Copyright (c) 2011 Ericsson Research Canada
*
* 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 meeting request information
*
* Contributors:
* Sebastien Dubois - Created for Mylyn Review R4E project
*
******************************************************************************/
package org.eclipse.mylyn.reviews.r4e.mail.smtp.mailVersion.internal.dialogs;
import java.text.SimpleDateFormat;
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.IInputValidator;
import org.eclipse.jface.window.Window;
import org.eclipse.mylyn.reviews.r4e.mail.smtp.SmtpPlugin;
import org.eclipse.mylyn.reviews.r4e.mail.smtp.mailVersion.internal.MailInputValidator;
import org.eclipse.mylyn.reviews.r4e.mail.smtp.mailVersion.internal.SMTPHostString;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.forms.FormDialog;
import org.eclipse.ui.forms.IManagedForm;
import org.eclipse.ui.forms.events.ExpansionAdapter;
import org.eclipse.ui.forms.events.ExpansionEvent;
import org.eclipse.ui.forms.widgets.ExpandableComposite;
import org.eclipse.ui.forms.widgets.FormToolkit;
import org.eclipse.ui.forms.widgets.ScrolledForm;
import org.eclipse.ui.forms.widgets.Section;
/**
* @author lmcdubo
* @version $Revision: 1.0 $
*/
public class ScheduleMeetingInputDialog extends FormDialog {
// ------------------------------------------------------------------------
// Constants
// ------------------------------------------------------------------------
/**
* Field MEETING_DIALOG_TITLE.
* (value is ""Meeting Information"")
*/
private static final String MEETING_DIALOG_TITLE = "Meeting Information";
/**
* Field BASIC_PARAMS_HEADER_MSG.
* (value is ""Enter Meeting Information"")
*/
private static final String BASIC_PARAMS_HEADER_MSG = "Enter Meeting Information";
/**
* Field SIMPLE_DATE_FORMAT.
* (value is ""yyyy/MM/dd"")
*/
public static final String SIMPLE_DATE_FORMAT = "yyyy-MMM-dd HH:mm";
// ------------------------------------------------------------------------
// Member variables
// ------------------------------------------------------------------------
/**
* Field fStartTime.
*/
protected Long fStartTime = null;
/**
* Field fCalendarButton.
*/
protected Button fCalendarButton = null;
/**
* Field fDuration.
*/
private Integer fDuration = null;
/**
* Field fLocation.
*/
private String fLocation = null;
/**
* Field fStartTimeInputTextField.
*/
protected Text fStartTimeInputTextField = null;
/**
* Field fDurationInputTextField.
*/
private Text fDurationInputTextField = null;
/**
* Field fLocationInputTextField.
*/
private Text fLocationInputTextField = null;
/**
* The input validator, or <code>null</code> if none.
*/
private final IInputValidator fValidator;
// ------------------------------------------------------------------------
// Constructors
// ------------------------------------------------------------------------
/**
* Constructor for ScheduleMeetingInputDialog.
* @param aParentShell Shell
*/
public ScheduleMeetingInputDialog(Shell aParentShell) {
super(aParentShell);
setBlockOnOpen(true);
fValidator = new MailInputValidator();
}
// ------------------------------------------------------------------------
// 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) {
//NOTE fStartTime is set below
//Validate StartTime
String validateResult = validateEmptyInput(fDurationInputTextField);
if (null != validateResult) {
//Validation of input failed
final ErrorDialog dialog = new ErrorDialog(null,
SMTPHostString.getString("dialog_title_error"),
SMTPHostString.getString("duration_Error"),
new Status(IStatus.ERROR,
SmtpPlugin.FPLUGIN_ID, 0, validateResult, null), IStatus.ERROR);
dialog.open();
this.getShell().setCursor(this.getShell().getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
return;
}
fDuration = Integer.valueOf(fDurationInputTextField.getText());
//Validate Location
validateResult = validateEmptyInput(fLocationInputTextField);
if (null != validateResult) {
//Validation of input failed
final ErrorDialog dialog = new ErrorDialog(null,
SMTPHostString.getString("dialog_title_error"),
SMTPHostString.getString("location_Error"),
new Status(IStatus.ERROR,
SmtpPlugin.FPLUGIN_ID, 0, validateResult, null), IStatus.ERROR);
dialog.open();
this.getShell().setCursor(this.getShell().getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
return;
}
fLocation = fLocationInputTextField.getText();
} else {
fStartTime = null;
fDuration = null;
fLocation = null;
}
this.getShell().setCursor(this.getShell().getDisplay().getSystemCursor(SWT.CURSOR_ARROW));
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(MEETING_DIALOG_TITLE);
}
/**
* Configures the dialog form and creates form content. Clients should
* override this method.
*
* @param mform
* 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 GridLayout layout = new GridLayout(1, false);
composite.setLayout(layout);
//Basic parameters section
final Section basicSection = toolkit.createSection(composite, Section.DESCRIPTION | ExpandableComposite.TITLE_BAR |
ExpandableComposite.TWISTIE | ExpandableComposite.EXPANDED);
final GridData basicSectionGridData = new GridData(GridData.FILL, GridData.FILL, true, false);
basicSectionGridData.horizontalSpan = 4;
basicSection.setLayoutData(basicSectionGridData);
basicSection.setText(SMTPHostString.getString("basic_parameter"));
basicSection.setDescription(BASIC_PARAMS_HEADER_MSG);
basicSection.addExpansionListener(new ExpansionAdapter()
{
@Override
public void expansionStateChanged(ExpansionEvent e){
getShell().setSize(getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
});
final Composite basicSectionClient = toolkit.createComposite(basicSection);
basicSectionClient.setLayout(layout);
basicSection.setClient(basicSectionClient);
//Meeting composite
final Composite meetingComposite = toolkit.createComposite(basicSectionClient);
GridData textGridData = new GridData(GridData.FILL, GridData.FILL, true, true);
textGridData.horizontalSpan = 3;
meetingComposite.setLayoutData(textGridData);
meetingComposite.setLayout(new GridLayout(4, false));
//Meeting Start Time
final Label meetingStartTimeLabel = toolkit.createLabel(meetingComposite,
SMTPHostString.getString("start_time_label"));
meetingStartTimeLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
fStartTimeInputTextField = toolkit.createText(meetingComposite, "", SWT.BORDER);
textGridData = new GridData(GridData.FILL, GridData.FILL, false, false);
textGridData.horizontalSpan = 2;
fStartTimeInputTextField.setLayoutData(textGridData);
//Calendar Button
fCalendarButton = toolkit.createButton(meetingComposite, "...", SWT.NONE);
fCalendarButton.setLayoutData(new GridData(GridData.FILL, GridData.FILL, false, false));
fCalendarButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
// final CalendarDialog dialog = new CalendarDialog(R4EUIModelController.getNavigatorView().
// getSite().getWorkbenchWindow().getShell(), true);
final CalendarDialog dialog = new CalendarDialog(getShell(), true);
final int result = dialog.open();
if (result == Window.OK) {
final SimpleDateFormat dateFormat = new SimpleDateFormat(SIMPLE_DATE_FORMAT);
fStartTimeInputTextField.setText(dateFormat.format(dialog.getDate()));
fStartTime = Long.valueOf(dialog.getDate().getTime());
getShell().setSize(getShell().computeSize(SWT.DEFAULT, SWT.DEFAULT));
}
}
public void widgetDefaultSelected(SelectionEvent e) { // $codepro.audit.disable emptyMethod
// No implementation needed
}
});
//Meeting Duration
final Label meetingEndTimeLabel = toolkit.createLabel(meetingComposite, SMTPHostString.getString("duration_label") );
meetingEndTimeLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
fDurationInputTextField = toolkit.createText(meetingComposite, "", SWT.BORDER);
textGridData = new GridData(GridData.FILL, GridData.FILL, false, false);
textGridData.horizontalSpan = 2;
fDurationInputTextField.setLayoutData(textGridData);
toolkit.createLabel(meetingComposite, ""); //dummy label for alignment purposes
//Meeting Location
final Label meetingLocationLabel = toolkit.createLabel(meetingComposite,
SMTPHostString.getString("location_label"));
meetingLocationLabel.setLayoutData(new GridData(GridData.BEGINNING, GridData.BEGINNING, false, false));
fLocationInputTextField = toolkit.createText(meetingComposite, "", SWT.BORDER);
textGridData = new GridData(GridData.FILL, GridData.FILL, true, false);
textGridData.horizontalSpan = 2;
fLocationInputTextField.setLayoutData(textGridData);
toolkit.createLabel(meetingComposite, ""); //dummy label for alignment purposes
}
/**
* Method isResizable.
* @return boolean
*/
@Override
protected boolean isResizable() {
return true;
}
/**
* Method getStartTime
* @return Long
*/
public Long getStartTime() {
return fStartTime;
}
/**
* Method getDuration
* @return Integer
*/
public Integer getDuration() {
return fDuration;
}
/**
* Method getLocation
* @return String
*/
public String getLocation() {
return fLocation;
}
/**
* Method validateEmptyInput.
* @param aText Text
* @return String
*/
private String validateEmptyInput(Text aText) {
if (null != fValidator) {
return fValidator.isValid(aText.getText());
}
return null;
}
/**
* Method setStartTime
* @param aSt Long
*/
public void setStartTime(Long aSt) {
final SimpleDateFormat dateFormat = new SimpleDateFormat(SIMPLE_DATE_FORMAT);
fStartTimeInputTextField.setText(dateFormat.format(aSt));
fStartTime = aSt;
}
/**
* Method setDuration
* @param aDuration Long
*/
public void setDuration(Integer aDuration) {
fDurationInputTextField.setText(aDuration.toString());
}
/**
* Method setLocation
* @param aLoc String
*/
public void setLocation(String aLoc) {
fLocationInputTextField.setText(aLoc);
}
}