package org.celllife.idart.database.wizard; import java.util.Map; import org.apache.log4j.Logger; import org.celllife.idart.commonobjects.iDartProperties; import org.celllife.idart.database.DatabaseTools; import org.celllife.idart.database.hibernate.util.HibernateUtil; import org.celllife.idart.database.hibernate.util.JDBCUtil; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; public class ConnectionPage extends WizardPage implements PropertiesPage { private static Logger log = Logger.getLogger(ConnectionPage.class); private Text txtHost; private Composite container; private Text txtUser; private Text txtPasswd; private final Map<String, String> connSettings; private Text txtName; public ConnectionPage() { super("Connection Settings"); setTitle("Database Connection Settings"); setDescription("iDART can not connect to the database. " + "Please check the connection settings below."); setPageComplete(false); connSettings = DatabaseTools._().decomposeConnectionURL(); } @Override public void createControl(Composite parent) { final Display display = Display.getCurrent(); final Runnable runner = new Runnable() { @Override public void run() { setErrorMessage(null); BusyIndicator.showWhile(display, new Runnable() { @Override public void run() { if (updateProperties()) { setPageComplete(true); } } }); } }; container = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); container.setLayout(layout); layout.numColumns = 2; GridData gd = new GridData(GridData.FILL_HORIZONTAL); Label lblHost = new Label(container, SWT.NULL); lblHost.setText("Database server address:"); txtHost = new Text(container, SWT.BORDER | SWT.SINGLE); txtHost.setText(connSettings.get(DatabaseTools.DBHOST)); txtHost.setLayoutData(gd); txtHost.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (!txtPasswd.getText().isEmpty()) { display.timerExec(1000, runner); } } }); Label lblName = new Label(container, SWT.NULL); lblName.setText("Database name:"); txtName = new Text(container, SWT.BORDER | SWT.SINGLE); txtName.setText(connSettings.get(DatabaseTools.DBNAME)); txtName.setLayoutData(gd); txtName.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (!txtPasswd.getText().isEmpty()) { display.timerExec(1000, runner); } } }); Label lblUser = new Label(container, SWT.NULL); lblUser.setText("Database username:"); txtUser = new Text(container, SWT.BORDER | SWT.SINGLE); txtUser.setText(iDartProperties.hibernateUsername); txtUser.setLayoutData(gd); txtUser.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (!txtPasswd.getText().isEmpty()) { display.timerExec(1000, runner); } } }); Label lblPasswd = new Label(container, SWT.NULL); lblPasswd.setText("Database password:"); txtPasswd = new Text(container, SWT.BORDER | SWT.SINGLE); txtPasswd.setText(""); txtPasswd.setLayoutData(gd); txtPasswd.addKeyListener(new KeyAdapter() { @Override public void keyReleased(KeyEvent e) { if (!txtPasswd.getText().isEmpty()) { display.timerExec(1000, runner); } } }); // Required to avoid an error in the system setControl(container); setPageComplete(false); setErrorMessage("Password must not be empty."); } @Override public boolean updateProperties() { log.debug("Updating properties"); iDartProperties.hibernatePassword = txtPasswd.getText(); iDartProperties.hibernateUsername = txtUser.getText(); connSettings.put(DatabaseTools.DBHOST, txtHost.getText()); connSettings.put(DatabaseTools.DBNAME, txtName.getText()); iDartProperties.hibernateConnectionUrl = DatabaseTools._().composeUrl( connSettings); try { DatabaseTools._().refresh(); JDBCUtil.rebuild(); JDBCUtil.currentSession(); JDBCUtil.closeJDBCConnection(); return true; } catch (Throwable e) { setPageComplete(false); setErrorMessage(e.getMessage()); } return false; } @Override public boolean isRequired() { HibernateUtil.rebuildUtil(); return !DatabaseTools._().checkConnection(); } }