package org.talend.repository.plsap.extractor.wizard;
import java.io.File;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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;
public class PLSAPTableWizardPage extends WizardPage {
private static final int TEXT_WIDTH = 250;
private Label nameLabel;
private Text nameField;
private Label outputFolderLabel;
private Text outputFolderField;
protected String tableName;
protected String outputFolder;
private Button btnNewButton;
public PLSAPTableWizardPage() {
super("TableWizard");
setPageComplete(false);
}
@Override
public void createControl(Composite parent) {
final Composite pageComposite = new Composite(parent, SWT.NULL);
pageComposite.setFont(parent.getFont());
initializeDialogUnits(parent);
pageComposite.setLayout(new GridLayout());
pageComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
final Composite dataComposite = new Composite(pageComposite, SWT.NONE);
dataComposite.setLayout(new GridLayout(3, false));
dataComposite.setLayoutData(new GridData(SWT.FILL, GridData.CENTER, true, false));
nameLabel = new Label(dataComposite, SWT.NONE);
nameLabel.setFont(parent.getFont());
nameLabel.setText("Table Name:");
nameField = new Text(dataComposite, SWT.BORDER);
GridData gd_nameField = new GridData(TEXT_WIDTH, SWT.DEFAULT);
gd_nameField.horizontalSpan = 2;
gd_nameField.horizontalAlignment = SWT.FILL;
gd_nameField.grabExcessHorizontalSpace = true;
nameField.setLayoutData(gd_nameField);
nameField.setFont(parent.getFont());
nameField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
tableName = nameField.getText();
setPageComplete(validatePage());
}
});
outputFolderLabel = new Label(dataComposite, SWT.NONE);
outputFolderLabel.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false, 1, 1));
outputFolderLabel.setFont(parent.getFont());
outputFolderLabel.setText("Table Output Folder:");
outputFolderField = new Text(dataComposite, SWT.BORDER);
outputFolderField.setText(outputFolder != null ? outputFolder : "");
outputFolderField.setFont(parent.getFont());
outputFolderField.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1));
outputFolderField.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
outputFolder = outputFolderField.getText();
setPageComplete(validatePage());
}
});
btnNewButton = new Button(dataComposite, SWT.NONE);
btnNewButton.setText("...");
btnNewButton.addSelectionListener(new SelectionListener() {
@Override
public void widgetSelected(SelectionEvent e) {
DirectoryDialog dialog = new DirectoryDialog(PLSAPTableWizardPage.this.getShell());
String folder = dialog.open();
if (folder != null) {
outputFolderField.setText(folder);
}
}
@Override
public void widgetDefaultSelected(SelectionEvent e) {
}
});
// Show description on opening
setErrorMessage(null);
setMessage(null);
setControl(pageComposite);
setPageComplete(validatePage());
}
/**
* Check if the informations contained in the page are OK
*
* @return true is OK
*/
boolean validatePage() {
// erase all previous messages
setMessage(null);
setErrorMessage(null);
if (nameField == null || nameField.getText().isEmpty()) {
setErrorMessage("The Table name field should not be empty !");
return false;
} else if (outputFolderField == null || outputFolderField.getText().isEmpty()) {
setErrorMessage("The output folder field should not be empty !");
return false;
} else {
File outputFile = new File(outputFolder + File.separator + tableName + ".xml");
if (outputFile.exists()) {
setErrorMessage(tableName + ".xml" + " already exists in folder " + outputFolder + " !");
return false;
}
}
return true;
}
}