Java tutorial
/** * This program and the accompanying materials * are made available under the terms of the License * which accompanies this distribution in the file LICENSE.txt */ package org.archicontribs.database; import java.awt.Toolkit; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import org.archicontribs.database.DBPlugin.Level; import org.eclipse.jface.preference.PreferenceStore; 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.events.VerifyEvent; import org.eclipse.swt.events.VerifyListener; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * Database Model Exporter * * @author Herve Jouin */ public class DBSelectDatabase extends Dialog { private Connection db; private Shell dialog; private Combo driver; private Text server; private Text port; private Text database; private Text username; private Text password; private Button remember; private Button doNotAskAgain; private Button btnOk; private Button btnCancel; /** * Create the dialog. * @param parent * @param style */ public DBSelectDatabase(/*Shell parent, int style*/) { super(Display.getCurrent().getActiveShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); } /** * Open the dialog. * @return the connection to the database */ public Connection open() { createContents(); loadValues(); if (remember.getSelection() && doNotAskAgain.getSelection() && !driver.getText().isEmpty()) { connectToDatabase(); } //if we cannot connect to the database, then we force the window opening if (db == null) { dialog.open(); dialog.layout(); Display display = getParent().getDisplay(); while (!dialog.isDisposed()) { if (!display.readAndDispatch()) { display.sleep(); } } } return db; } /** * Create contents of the dialog. */ private void createContents() { dialog = new Shell(getParent(), getStyle()); dialog.setSize(400, 310); dialog.setText(DBPlugin.pluginTitle); dialog.setLocation((Toolkit.getDefaultToolkit().getScreenSize().width - dialog.getSize().x) / 2, (Toolkit.getDefaultToolkit().getScreenSize().height - dialog.getSize().y) / 2); Label lblDatabase = new Label(dialog, SWT.NONE); lblDatabase.setBounds(10, 25, 65, 15); lblDatabase.setText("Driver :"); driver = new Combo(dialog, SWT.NONE); driver.setToolTipText("Choose database brand"); driver.setItems(new String[] { "MySQL", "Oracle", "PostGreSQL", "SQLite" }); driver.setBounds(80, 17, 169, 400); driver.addVerifyListener(new VerifyListener() { public void verifyText(VerifyEvent e) { if (e.character != 0) e.doit = false; } }); Label lblServer = new Label(dialog, SWT.NONE); lblServer.setBounds(10, 60, 65, 15); lblServer.setText("Server :"); server = new Text(dialog, SWT.BORDER); server.setBounds(80, 57, 300, 21); Label lblPort = new Label(dialog, SWT.NONE); lblPort.setBounds(10, 95, 65, 15); lblPort.setText("Port :"); port = new Text(dialog, SWT.BORDER); port.addVerifyListener(new VerifyListener() { public void verifyText(VerifyEvent e) { try { String value = port.getText().substring(0, e.start) + e.text + port.getText().substring(e.end); if (!value.isEmpty()) { Integer.valueOf(value); } } catch (Exception ee) { e.doit = false; } } }); port.setBounds(80, 92, 75, 21); Label lblDatabase_1 = new Label(dialog, SWT.NONE); lblDatabase_1.setBounds(10, 130, 65, 15); lblDatabase_1.setText("Database :"); database = new Text(dialog, SWT.BORDER); database.setBounds(80, 127, 169, 21); Label lblUsername = new Label(dialog, SWT.NONE); lblUsername.setBounds(10, 165, 65, 15); lblUsername.setText("Username :"); username = new Text(dialog, SWT.BORDER); username.setBounds(80, 162, 169, 21); Label lblPassword = new Label(dialog, SWT.NONE); lblPassword.setBounds(10, 200, 65, 15); lblPassword.setText("Password :"); password = new Text(dialog, SWT.BORDER | SWT.PASSWORD); password.setBounds(80, 197, 169, 21); remember = new Button(dialog, SWT.CHECK); remember.setText("Remember"); remember.setSelection(false); remember.setBounds(10, 250, 79, 16); doNotAskAgain = new Button(dialog, SWT.CHECK); doNotAskAgain.setText("Do not ask me again"); doNotAskAgain.setSelection(false); doNotAskAgain.setBounds(90, 250, 125, 16); btnOk = new Button(dialog, SWT.NONE); btnOk.setBounds(226, 246, 75, 25); btnOk.setText("Ok"); btnCancel = new Button(dialog, SWT.NONE); btnCancel.setBounds(307, 246, 75, 25); btnCancel.setText("Cancel"); driver.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { switch (driver.getText().toLowerCase()) { case "mysql": port.setText("3306"); break; case "oracle": port.setText("1521"); break; case "postgresql": port.setText("5432"); break; default: port.setText(""); } } }); btnOk.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { this.widgetDefaultSelected(e); } public void widgetDefaultSelected(SelectionEvent e) { connectToDatabase(); if (db != null) { saveValues(); ((Button) e.getSource()).getShell().close(); } } }); btnCancel.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { this.widgetDefaultSelected(e); } public void widgetDefaultSelected(SelectionEvent e) { db = null; ((Button) e.getSource()).getShell().close(); } }); } private void connectToDatabase() { try { switch (driver.getText().toLowerCase()) { case "postgresql": Class.forName("org.postgresql.Driver"); break; case "mysql": Class.forName("com.mysql.jdbc.Driver"); break; case "oracle": Class.forName("oracle.jdbc.driver.OracleDriver"); break; case "sqlite": Class.forName("org.sqlite.JDBC"); break; } } catch (ClassNotFoundException ee) { DBPlugin.popup(Level.Error, "Cannot load " + driver.getText() + " driver.", ee); return; } try { switch (driver.getText().toLowerCase()) { case "postgresql": db = DriverManager.getConnection( "jdbc:postgresql://" + server.getText() + ":" + port.getText() + "/" + database.getText(), username.getText(), password.getText()); break; case "mysql": db = DriverManager.getConnection("jdbc:mysql://" + server.getText() + ":" + port.getText() + "/" + database.getText() + "?useSSL=false", username.getText(), password.getText()); break; case "oracle": db = DriverManager.getConnection( "jdbc:oracle:thin:@" + server.getText() + ":" + port.getText() + ":" + database.getText(), username.getText(), password.getText()); break; case "sqlite": db = DriverManager.getConnection("jdbc:sqlite:" + server.getText()); } db.setAutoCommit(false); } catch (SQLException ee) { DBPlugin.popup(Level.Error, "Cannot connect to the database.", ee); return; } } private void loadValues() { PreferenceStore store = new PreferenceStore("org.archicontribs.database"); //if preferences are not set, that's not an error try { store.load(); } catch (IOException e) { return; } driver.setText(store.getString("driver")); server.setText(store.getString("server")); port.setText(store.getString("port")); database.setText(store.getString("database")); remember.setSelection(store.getBoolean("remember")); doNotAskAgain.setSelection(store.getBoolean("doNotAskAgain")); username.setText(store.getString("username")); password.setText(store.getString("password")); } private void saveValues() { PreferenceStore store = new PreferenceStore("org.archicontribs.database"); if (remember.getSelection()) { store.setValue("driver", driver.getText()); store.setValue("server", server.getText()); store.setValue("port", port.getText()); store.setValue("database", database.getText()); store.setValue("username", username.getText()); store.setValue("password", password.getText()); store.setValue("remember", remember.getSelection()); store.setValue("doNotAskAgain", doNotAskAgain.getSelection()); } else { store.setValue("driver", ""); store.setValue("server", ""); store.setValue("port", ""); store.setValue("database", ""); store.setValue("username", ""); store.setValue("password", ""); store.setValue("remember", false); store.setValue("doNotAskAgain", false); } try { store.save(); } catch (IOException e) { DBPlugin.popup(Level.Error, "Cannot save preferences.", e); return; } } }