/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.rcp.wizards.pages;
import java.io.File;
import java.io.IOException;
import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.UpdateValueStrategy;
import org.eclipse.core.databinding.beans.PojoObservables;
import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.databinding.validation.ValidationStatus;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.jface.databinding.wizard.WizardPageSupport;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.jubula.client.ui.rcp.i18n.Messages;
import org.eclipse.jubula.client.ui.rcp.utils.Utils;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.jubula.tools.internal.utils.FileUtils;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Wizard page for selecting where to export Test Result details.
*
* @author BREDEX GmbH
* @created Jun 22, 2010
*/
public class ExportTestResultDetailsDestinationWizardPage
extends WizardPage {
/** the logger */
private static final Logger LOG = LoggerFactory.getLogger(
ExportTestResultDetailsDestinationWizardPage.class);
/** name of the "destination" property */
private static final String PROP_NAME_DESTINATION = "destination"; //$NON-NLS-1$
/** chosen destination filename */
private String m_destination;
/**
* Constructor
*/
public ExportTestResultDetailsDestinationWizardPage() {
super("testResultDetailsExportDestinationPage"); //$NON-NLS-1$
setTitle(Messages.ExportTestResultDetailsWizardDestinationPageTitle);
setDescription(
Messages.ExportTestResultDetailsWizardPageDescription);
}
/**
* {@inheritDoc}
*/
public void createControl(Composite parent) {
initializeDialogUnits(parent);
DataBindingContext dbc = new DataBindingContext();
// destination specification group
Composite destinationSelectionGroup = new Composite(parent, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 3;
destinationSelectionGroup.setLayout(layout);
destinationSelectionGroup.setLayoutData(new GridData(
GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_FILL));
Label destinationLabel = new Label(destinationSelectionGroup, SWT.NONE);
destinationLabel.setText(Messages
.ExportTestResultDetailsWizardDestinationPageDestinationLabelText);
// destination name entry field
final Text destinationNameField =
new Text(destinationSelectionGroup, SWT.SINGLE | SWT.BORDER);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL
| GridData.GRAB_HORIZONTAL);
destinationNameField.setLayoutData(data);
UpdateValueStrategy targetToModelUpdateStrategy =
new UpdateValueStrategy(UpdateValueStrategy.POLICY_UPDATE);
targetToModelUpdateStrategy.setAfterGetValidator(new IValidator() {
public IStatus validate(Object value) {
String stringValue = String.valueOf(value);
if (!FileUtils.isValidPath(stringValue)) {
return ValidationStatus.error(Messages
.ExportTestResultDetailsWizardDestinationPageInvDest);
}
return ValidationStatus.ok();
}
});
dbc.bindValue(
SWTObservables.observeText(destinationNameField, SWT.Modify),
PojoObservables.observeValue(this, PROP_NAME_DESTINATION),
targetToModelUpdateStrategy,
new UpdateValueStrategy(UpdateValueStrategy.POLICY_NEVER));
try {
destinationNameField.setText(
new File(Utils.getLastDirPath()).getCanonicalPath());
} catch (IOException ioe) {
LOG.error(
Messages.AnErrorOccurredWhileInitializingTheDestinationPath
+ StringConstants.DOT, ioe);
}
// destination browse button
Button destinationBrowseButton =
new Button(destinationSelectionGroup, SWT.PUSH);
destinationBrowseButton.setText(
Messages.ExportTestResultDetailsWizardDestinationPageBrowseBtnText);
destinationBrowseButton.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent event) {
final DirectoryDialog fileDialog = new DirectoryDialog(
getWizard().getContainer().getShell(),
SWT.SAVE | SWT.APPLICATION_MODAL);
fileDialog.setText(Messages
.ExportTestResultDetailsWizardDestinationPageDialogTitle);
fileDialog.setFilterPath(Utils.getLastDirPath());
String newFileName = fileDialog.open();
if (newFileName != null) {
Utils.storeLastDirPath(newFileName);
destinationNameField.setText(newFileName);
}
}
public void widgetDefaultSelected(SelectionEvent event) {
widgetSelected(event);
}
});
setButtonLayoutData(destinationBrowseButton);
setControl(parent);
WizardPageSupport.create(this, dbc);
}
/**
*
* @return the destination chosen on this page, or <code>null</code> if no
* destination was chosen. Note that this method may also return
* the empty string.
*/
public String getDestination() {
return m_destination;
}
/**
*
* @param destination The destination to set.
*/
public void setDestination(String destination) {
m_destination = destination;
}
}