/*
* Copyright (c) 2012, salesforce.com, inc.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted provided
* that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of conditions and the
* following disclaimer.
*
* Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
* the following disclaimer in the documentation and/or other materials provided with the distribution.
*
* Neither the name of salesforce.com, inc. nor the names of its contributors may be used to endorse or
* promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED
* TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
* POSSIBILITY OF SUCH DAMAGE.
*/
package com.salesforce.dataloader.ui.extraction;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
import com.salesforce.dataloader.config.Config;
import com.salesforce.dataloader.controller.Controller;
import com.salesforce.dataloader.ui.Labels;
import com.salesforce.dataloader.ui.UIUtils;
import com.sforce.soap.partner.Connector;
public class ExtractionInputDialog extends Dialog {
private String message;
private String input;
private Controller controller;
private Text textBatch;
private Text textEndpoint;
private Text textTimeout;
private Button buttonCompression;
private Text textProxyHost;
private Text textProxyPort;
private Text textProxyUsername;
private Text textProxyPassword;
/**
* InputDialog constructor
*
* @param parent
* the parent
*/
public ExtractionInputDialog(Shell parent, Controller controller) {
// Pass the default styles here
this(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL | SWT.RESIZE);
this.controller = controller;
}
/**
* InputDialog constructor
*
* @param parent
* the parent
* @param style
* the style
*/
public ExtractionInputDialog(Shell parent, int style) {
// Let users override the default styles
super(parent, style);
setText(Labels.getString("ExtractionInputDialog.title")); //$NON-NLS-1$
setMessage(Labels.getString("ExtractionInputDialog.message")); //$NON-NLS-1$
}
/**
* Gets the message
*
* @return String
*/
public String getMessage() {
return message;
}
/**
* Sets the message
*
* @param message
* the new message
*/
public void setMessage(String message) {
this.message = message;
}
/**
* Gets the input
*
* @return String
*/
public String getInput() {
return input;
}
/**
* Sets the input
*
* @param input
* the new input
*/
public void setInput(String input) {
this.input = input;
}
/**
* Opens the dialog and returns the input
*
* @return String
*/
public String open() {
// Create the dialog window
Shell shell = new Shell(getParent(), getStyle());
shell.setText(getText());
shell.setImage(UIUtils.getImageRegistry().get("sfdc_icon")); //$NON-NLS-1$
createContents(shell);
shell.pack();
shell.open();
Display display = getParent().getDisplay();
while (!shell.isDisposed()) {
if (!display.readAndDispatch()) {
display.sleep();
}
}
// Return the entered value, or null
return input;
}
/**
* Creates the dialog's contents
*
* @param shell
* the dialog window
*/
private void createContents(final Shell shell) {
Config config = controller.getConfig();
GridData data;
GridLayout layout = new GridLayout(1, false);
layout.verticalSpacing = 10;
layout.marginHeight = 0;
layout.marginWidth = 0;
shell.setLayout(layout);
data = new GridData(GridData.FILL_HORIZONTAL);
data.heightHint = 50;
data.widthHint = 400;
Composite topComp = new Composite(shell, SWT.NONE);
layout = new GridLayout(1, false);
layout.marginHeight = 0;
layout.marginWidth = 0;
layout.verticalSpacing = 0;
topComp.setLayout(layout);
topComp.setLayoutData(data);
Label blank = new Label(topComp, SWT.NONE);
data = new GridData(GridData.FILL_HORIZONTAL);
data.heightHint = 10;
blank.setLayoutData(data);
blank.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
// Show the message
Label label = new Label(topComp, SWT.NONE);
label.setText(message);
data = new GridData(GridData.FILL_HORIZONTAL);
data.heightHint = 30;
data.widthHint = 370;
Font f = label.getFont();
FontData[] farr = f.getFontData();
FontData fd = farr[0];
fd.setStyle(SWT.BOLD);
label.setFont(new Font(Display.getCurrent(), fd));
label.setLayoutData(data);
label.setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE));
Label labelSeparator = new Label(topComp, SWT.SEPARATOR | SWT.HORIZONTAL);
data = new GridData(GridData.FILL_HORIZONTAL);
labelSeparator.setLayoutData(data);
Composite restComp = new Composite(shell, SWT.NONE);
data = new GridData(GridData.FILL_BOTH);
restComp.setLayoutData(data);
layout = new GridLayout(2, false);
layout.verticalSpacing = 10;
restComp.setLayout(layout);
//extraction batch size
Label labelBatch = new Label(restComp, SWT.RIGHT);
labelBatch.setText(Labels.getString("ExtractionInputDialog.querySize")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelBatch.setLayoutData(data);
textBatch = new Text(restComp, SWT.BORDER);
textBatch.setText(config.getString(Config.EXTRACT_REQUEST_SIZE));
textBatch.setTextLimit(4);
textBatch.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
event.doit = Character.isISOControl(event.character) || Character.isDigit(event.character);
}
});
//endpoint
Label labelEndpoint = new Label(restComp, SWT.RIGHT);
labelEndpoint.setText(Labels.getString("ExtractionInputDialog.serverURL")); //$NON-NLS-1$
textEndpoint = new Text(restComp, SWT.BORDER);
data = new GridData();
data.widthHint = 250;
textEndpoint.setLayoutData(data);
String endpoint = config.getString(Config.ENDPOINT);
if ("".equals(endpoint)) { //$NON-NLS-1$
endpoint = Connector.END_POINT;
}
textEndpoint.setText(endpoint);
Label labelCompression = new Label(restComp, SWT.RIGHT);
labelCompression.setText(Labels.getString("ExtractionInputDialog.compression")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelCompression.setLayoutData(data);
buttonCompression = new Button(restComp, SWT.CHECK);
buttonCompression.setSelection(config.getBoolean(Config.NO_COMPRESSION));
//timeout size
Label labelTimeout = new Label(restComp, SWT.RIGHT);
labelTimeout.setText(Labels.getString("ExtractionInputDialog.timeout")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelTimeout.setLayoutData(data);
textTimeout = new Text(restComp, SWT.BORDER);
textTimeout.setTextLimit(4);
textTimeout.setText(config.getString(Config.TIMEOUT_SECS));
textTimeout.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
event.doit = Character.isISOControl(event.character) || Character.isDigit(event.character);
}
});
//proxy Host
Label labelProxyHost = new Label(restComp, SWT.RIGHT);
labelProxyHost.setText(Labels.getString("ExtractionInputDialog.proxyHost")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelProxyHost.setLayoutData(data);
textProxyHost = new Text(restComp, SWT.BORDER);
textProxyHost.setText(config.getString(Config.PROXY_HOST));
data = new GridData();
data.widthHint = 250;
textProxyHost.setLayoutData(data);
//Proxy Port
Label labelProxyPort = new Label(restComp, SWT.RIGHT);
labelProxyPort.setText(Labels.getString("ExtractionInputDialog.proxyPort")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelProxyPort.setLayoutData(data);
textProxyPort = new Text(restComp, SWT.BORDER);
textProxyPort.setText(config.getString(Config.PROXY_PORT));
textProxyPort.setTextLimit(4);
textProxyPort.addVerifyListener(new VerifyListener() {
@Override
public void verifyText(VerifyEvent event) {
event.doit = Character.isISOControl(event.character) || Character.isDigit(event.character);
}
});
data = new GridData();
data.widthHint = 25;
textProxyPort.setLayoutData(data);
//Proxy Username
Label labelProxyUsername = new Label(restComp, SWT.RIGHT);
labelProxyUsername.setText(Labels.getString("ExtractionInputDialog.proxyUsername")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelProxyUsername.setLayoutData(data);
textProxyUsername = new Text(restComp, SWT.BORDER);
textProxyUsername.setText(config.getString(Config.PROXY_USERNAME));
data = new GridData();
data.widthHint = 120;
textProxyUsername.setLayoutData(data);
//Proxy Password
Label labelProxyPassword = new Label(restComp, SWT.RIGHT);
labelProxyPassword.setText(Labels.getString("ExtractionInputDialog.proxyPassword")); //$NON-NLS-1$
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
labelProxyPassword.setLayoutData(data);
textProxyPassword = new Text(restComp, SWT.BORDER | SWT.PASSWORD);
textProxyPassword.setText(config.getString(Config.PROXY_PASSWORD));
data = new GridData();
data.widthHint = 120;
textProxyPassword.setLayoutData(data);
Label blankAgain = new Label(restComp, SWT.NONE);
data = new GridData();
data.horizontalSpan = 2;
blankAgain.setLayoutData(data);
//the bottow separator
Label labelSeparatorBottom = new Label(restComp, SWT.SEPARATOR | SWT.HORIZONTAL);
data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 2;
labelSeparatorBottom.setLayoutData(data);
//ok cancel buttons
new Label(restComp, SWT.NONE);
Composite buttonComp = new Composite(restComp, SWT.NONE);
data = new GridData(GridData.HORIZONTAL_ALIGN_END);
buttonComp.setLayoutData(data);
buttonComp.setLayout(new GridLayout(2, false));
// Create the OK button and add a handler
// so that pressing it will set input
// to the entered value
Button ok = new Button(buttonComp, SWT.PUSH);
ok.setText(Labels.getString("UI.ok")); //$NON-NLS-1$
ok.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
Config config = controller.getConfig();
//set the configValues
config.setValue(Config.EXTRACT_REQUEST_SIZE, textBatch.getText());
config.setValue(Config.ENDPOINT, textEndpoint.getText());
config.setValue(Config.TIMEOUT_SECS, textTimeout.getText());
config.setValue(Config.NO_COMPRESSION, buttonCompression.getSelection());
config.setValue(Config.PROXY_HOST, textProxyHost.getText());
config.setValue(Config.PROXY_PASSWORD, textProxyPassword.getText());
config.setValue(Config.PROXY_PORT, textProxyPort.getText());
config.setValue(Config.PROXY_USERNAME, textProxyUsername.getText());
controller.saveConfig();
input = "OK"; //$NON-NLS-1$
shell.close();
}
});
data = new GridData();
data.widthHint = 75;
ok.setLayoutData(data);
// Create the cancel button and add a handler
// so that pressing it will set input to null
Button cancel = new Button(buttonComp, SWT.PUSH);
cancel.setText(Labels.getString("UI.cancel")); //$NON-NLS-1$
cancel.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent event) {
input = null;
shell.close();
}
});
data = new GridData();
data.widthHint = 75;
cancel.setLayoutData(data);
// Set the OK button as the default, so
// user can type input and press Enter
// to dismiss
shell.setDefaultButton(ok);
}
}