package net.sourceforge.sqlexplorer.dialogs;
/*
* Copyright (C) 2002-2004 Andrea Mazzolini
* andreamazzolini@users.sourceforge.net
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
import net.sourceforge.sqlexplorer.IConstants;
import net.sourceforge.sqlexplorer.Messages;
import net.sourceforge.sqlexplorer.dbproduct.Alias;
import net.sourceforge.sqlexplorer.dbproduct.User;
import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin;
import net.sourceforge.sqlexplorer.util.ImageUtil;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
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.Control;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
public class PasswordConnDlg extends TitleAreaDialog {
private static final int SIZING_TEXT_FIELD_WIDTH = 250;
// Alias; this MUST match the user's alias (if there is a User object)
private Alias alias;
// User
private User user;
private Text userTxt;
private Text pswdTxt;
private Button fAutoCommitBox;
private Button fCommitOnCloseBox;
private String userName;
private String passwd;
private boolean autoCommit = false;
private boolean commitOnClose = false;
public PasswordConnDlg(Shell parentShell, Alias alias, User user) {
super(parentShell);
this.alias = alias;
this.user = user;
}
protected void setShellStyle(int newShellStyle) {
super.setShellStyle(newShellStyle | SWT.RESIZE);// Make the dialog resizable
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(Messages.getString("Connection_1")); //$NON-NLS-1$
}
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
setTitle(Messages.getString("Connection_4")); //$NON-NLS-1$
setMessage(Messages.getString("Insert_Password_1")); //$NON-NLS-1$
Image image = ImageUtil.getImage("Images.WizardLogo");
if (image != null) {
setTitleImage(image);
}
contents.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent e) {
ImageUtil.disposeImage("Images.WizardLogo");
}
});
return contents;
}
protected Control createDialogArea(Composite parent) {
// top level composite
Composite parentComposite = (Composite) super.createDialogArea(parent);
// create a composite with standard margins and spacing
Composite composite = new Composite(parentComposite, SWT.NONE);
GridLayout layout = new GridLayout();
layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN);
layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN);
layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING);
layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING);
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_BOTH));
composite.setFont(parentComposite.getFont());
Composite nameGroup = new Composite(composite, SWT.NONE);
layout = new GridLayout();
layout.numColumns = 2;
layout.marginWidth = 10;
nameGroup.setLayout(layout);
GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
nameGroup.setLayoutData(data);
Label label = new Label(nameGroup, SWT.WRAP);
label.setText(Messages.getString("Alias_1")); //$NON-NLS-1$
Label aliasTxt = new Label(nameGroup, SWT.WRAP);
aliasTxt.setText(alias.getName());
Label label2 = new Label(nameGroup, SWT.WRAP);
label2.setText(Messages.getString("Driver_2")); //$NON-NLS-1$
Label driverTxt = new Label(nameGroup, SWT.WRAP);
driverTxt.setText(alias.getDriver().getName());
Label label3 = new Label(nameGroup, SWT.WRAP);
label3.setText(Messages.getString("Url_3")); //$NON-NLS-1$
Label urlTxt = new Label(nameGroup, SWT.WRAP);
urlTxt.setText(alias.getUrl());
Label label4 = new Label(nameGroup, SWT.WRAP);
label4.setText(Messages.getString("User_4")); //$NON-NLS-1$
userTxt = new Text(nameGroup, SWT.BORDER);
if (user != null)
userTxt.setText(user.getUserName());
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
data.horizontalSpan = 1;
userTxt.setLayoutData(data);
Label label5 = new Label(nameGroup, SWT.WRAP);
label5.setText(Messages.getString("Password_5")); //$NON-NLS-1$
pswdTxt = new Text(nameGroup, SWT.BORDER);
if (user != null)
pswdTxt.setText(user.getPassword());
pswdTxt.setEchoChar('*');
data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL);
data.widthHint = SIZING_TEXT_FIELD_WIDTH;
data.horizontalSpan = 1;
pswdTxt.setLayoutData(data);
pswdTxt.setFocus();
fAutoCommitBox = new Button(nameGroup, SWT.CHECK);
fAutoCommitBox.setText(Messages.getString("PasswordConnDlg.AutoCommit_1")); //$NON-NLS-1$
GridData gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalAlignment = GridData.BEGINNING;
gd.horizontalSpan = 1;
fAutoCommitBox.setLayoutData(gd);
fCommitOnCloseBox = new Button(nameGroup, SWT.CHECK);
fCommitOnCloseBox.setText(Messages.getString("PasswordConnDlg.Commit_On_Close_2")); //$NON-NLS-1$
gd = new GridData(GridData.FILL_HORIZONTAL);
gd.horizontalAlignment = GridData.BEGINNING;
gd.horizontalSpan = 2;
fCommitOnCloseBox.setLayoutData(gd);
fAutoCommitBox.addSelectionListener(new SelectionListener() {
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
if (fAutoCommitBox.getSelection()) {
fCommitOnCloseBox.setEnabled(false);
} else
fCommitOnCloseBox.setEnabled(true);
}
});
fAutoCommitBox.getDisplay().asyncExec(new Runnable() {
public void run() {
IPreferenceStore store = SQLExplorerPlugin.getDefault().getPreferenceStore();
fCommitOnCloseBox.setSelection(store.getBoolean(IConstants.COMMIT_ON_CLOSE));//$NON-NLS-1$
fAutoCommitBox.setSelection(store.getBoolean(IConstants.AUTO_COMMIT));//$NON-NLS-1$
if (fAutoCommitBox.getSelection()) {
fCommitOnCloseBox.setEnabled(false);
} else
fCommitOnCloseBox.setEnabled(true);
}
});
return parentComposite;
}
public String getPassword() {
return passwd;
}
protected void okPressed() {
passwd = pswdTxt.getText();
userName = userTxt.getText();
autoCommit = fAutoCommitBox.getSelection();
commitOnClose = fCommitOnCloseBox.getSelection();
super.okPressed();
}
public String getUserName() {
return userName;
}
public boolean getAutoCommit() {
return autoCommit;
}
public boolean getCommitOnClose() {
return commitOnClose;
}
/* (non-Javadoc)
* @see org.eclipse.jface.window.Window#open()
*/
@Override
public int open() {
setBlockOnOpen(false);
super.open();
getShell().forceActive();
runEventLoop(getShell());
return getReturnCode();
}
/**
* Runs the event loop for the given shell.
*
* @param loopShell
* the shell
*/
private void runEventLoop(Shell loopShell) {
//Use the display provided by the shell if possible
Display display;
if (getShell() == null) {
display = Display.getCurrent();
} else {
display = loopShell.getDisplay();
}
while (loopShell != null && !loopShell.isDisposed()) {
try {
if (!display.readAndDispatch()) {
display.sleep();
}
} catch (Exception e) {
SQLExplorerPlugin.error(e);
}
}
display.update();
}
}