/**
* Copyright (C) Intersect 2012.
*
* This module contains Proprietary Information of Intersect,
* and should be treated as Confidential.
*/
package au.org.intersect.exsite9.wizard.createsubmissionpackage;
import java.util.Collection;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.KeyEvent;
import org.eclipse.swt.events.KeyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import com.richclientgui.toolbox.validation.IFieldErrorMessageHandler;
import com.richclientgui.toolbox.validation.ValidatingField;
import com.richclientgui.toolbox.validation.string.StringValidationToolkit;
import com.richclientgui.toolbox.validation.validator.IFieldValidator;
import au.org.intersect.exsite9.domain.SubmissionPackage;
import au.org.intersect.exsite9.util.DirectoryUtils;
import au.org.intersect.exsite9.wizard.WizardPageErrorHandler;
/**
* First page of the 'Create Submission Package' Wizard.
* Allows configuration of a name and description.
*/
public final class CreateSubmissionPackageWizardPage1 extends WizardPage implements KeyListener
{
private final IFieldErrorMessageHandler errorMessageHandler = new WizardPageErrorHandler(this);
private StringValidationToolkit stringValidatorToolkit;
private Composite container;
private ValidatingField<String> nameField;
private Text descriptionField;
private SubmissionPackage currentSubmissionPackage;
private final Collection<SubmissionPackage> existingSubmissionPackages;
public CreateSubmissionPackageWizardPage1(final SubmissionPackage submissionPackage, final Collection<SubmissionPackage> existingSubmissionPackages, final String pageTitle)
{
super(pageTitle);
setTitle(pageTitle);
setDescription("Configure properties of the submission package");
this.currentSubmissionPackage = submissionPackage;
this.existingSubmissionPackages = existingSubmissionPackages;
}
@Override
public void createControl(final Composite parent)
{
this.container = new Composite(parent, SWT.NULL);
final GridLayout layout = new GridLayout();
this.container.setLayout(layout);
layout.numColumns = 2;
this.stringValidatorToolkit = new StringValidationToolkit(SWT.TOP | SWT.LEFT, 1, true);
this.stringValidatorToolkit.setDefaultErrorMessageHandler(this.errorMessageHandler);
final Label submissionPackageNameLabel = new Label(this.container, SWT.NULL);
submissionPackageNameLabel.setText("Name");
this.nameField = this.stringValidatorToolkit.createTextField(this.container, new IFieldValidator<String>()
{
private String errorMessage = "";
@Override
public boolean warningExist(final String conents)
{
return false;
}
@Override
public boolean isValid(final String contents)
{
if (contents.trim().isEmpty())
{
this.errorMessage = "Submission package name must not be empty";
return false;
}
if (contents.trim().length() >= 255)
{
this.errorMessage = "Submission package name must be less than 255 characters in length";
return false;
}
if (!DirectoryUtils.isValidDirectoryName(contents.trim()))
{
this.errorMessage = "Submission package name must contain alpha-numeric characters only";
return false;
}
for (final SubmissionPackage existingSubmissionPackage : existingSubmissionPackages)
{
if (currentSubmissionPackage != null && currentSubmissionPackage.equals(existingSubmissionPackage))
{
continue;
}
if (existingSubmissionPackage.getName().equalsIgnoreCase(contents.trim()))
{
this.errorMessage = "A Submission Package with the provided name already exists.";
return false;
}
}
return true;
}
@Override
public String getWarningMessage()
{
return "";
}
@Override
public String getErrorMessage()
{
return this.errorMessage;
}
}, true, this.currentSubmissionPackage == null ? "" : this.currentSubmissionPackage.getName());
this.nameField.getControl().addKeyListener(this);
final Label descriptionLabel = new Label(this.container, SWT.NULL);
descriptionLabel.setText("Description");
this.descriptionField = new Text(this.container, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.V_SCROLL);
this.descriptionField.setText(this.currentSubmissionPackage == null ? "" : this.currentSubmissionPackage.getDescription());
this.descriptionField.addKeyListener(this);
final GridData singleLineGridData = new GridData(GridData.FILL_HORIZONTAL);
final GridData multiLineGridData = new GridData(GridData.FILL_BOTH);
this.nameField.getControl().setLayoutData(singleLineGridData);
this.descriptionField.setLayoutData(multiLineGridData);
setControl(this.container);
setPageComplete(this.currentSubmissionPackage != null);
}
/**
* @{inheritDoc
*/
@Override
public void keyPressed(final KeyEvent e)
{
}
/**
* @{inheritDoc
*/
@Override
public void keyReleased(final KeyEvent e)
{
setPageComplete(this.nameField.isValid());
}
public String getSubmissionPackageName()
{
return this.nameField.getContents().trim();
}
public String getSubmissionPackageDescription()
{
return this.descriptionField.getText().trim();
}
}