Package weka.gui.sql

Source Code of weka.gui.sql.ConnectionPanel

/*
*    This program is free software; you can redistribute it and/or modify
*    it under the terms of the GNU General Public License as published by
*    the Free Software Foundation; either version 2 of the License, or
*    (at your option) any later version.
*
*    This program 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 General Public License for more details.
*
*    You should have received a copy of the GNU General Public License
*    along with this program; if not, write to the Free Software
*    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/

/*
* ConnectionPanel.java
* Copyright (C) 2005 University of Waikato, Hamilton, New Zealand
*
*/


package weka.gui.sql;

import weka.gui.DatabaseConnectionDialog;
import weka.gui.ListSelectorDialog;
import weka.gui.sql.event.ConnectionEvent;
import weka.gui.sql.event.ConnectionListener;
import weka.gui.sql.event.HistoryChangedEvent;
import weka.gui.sql.event.HistoryChangedListener;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.HashSet;
import java.util.Iterator;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.event.CaretListener;
import javax.swing.event.CaretEvent;

/**
* Enables the user to insert a database URL, plus user/password to connect
* to this database.
*
* @author      FracPete (fracpete at waikato dot ac dot nz)
* @version     $Revision: 1.3 $
*/
public class ConnectionPanel
  extends JPanel
  implements CaretListener {

  /** for serialization. */
  static final long serialVersionUID = 3499317023969723490L;
 
  /** the name of the history. */
  public final static String HISTORY_NAME = "connection";
 
  /** the parent frame. */
  protected JFrame m_Parent = null;
 
  /** the databae connection dialog. */
  protected DatabaseConnectionDialog m_DbDialog;

  /** the URL to use. */
  protected String m_URL = "";

  /** the user to use for connecting to the DB. */
  protected String m_User = "";

  /** the password to use for connecting to the DB. */
  protected String m_Password = "";

  /** the label for the URL. */
  protected JLabel m_LabelURL = new JLabel("URL ");

  /** the textfield for the URL. */
  protected JTextField m_TextURL = new JTextField(40);

  /** the button for the DB-Dialog. */
  protected JButton m_ButtonDatabase = new JButton("User...");

  /** the button for connecting to the database. */
  protected JButton m_ButtonConnect = new JButton("Connect");

  /** the button for the history. */
  protected JButton m_ButtonHistory = new JButton("History...");

  /** the connection listeners. */
  protected HashSet m_ConnectionListeners;

  /** the history listeners. */
  protected HashSet m_HistoryChangedListeners;

  /** for connecting to the database. */
  protected DbUtils m_DbUtils;

  /** the history of connections. */
  protected DefaultListModel m_History = new DefaultListModel();

  /**
   * initializes the panel.
   *
   * @param parent      the parent of this panel
   */
  public ConnectionPanel(JFrame parent) {
    super();
   
    m_Parent                  = parent;
    m_ConnectionListeners     = new HashSet();
    m_HistoryChangedListeners = new HashSet();
   
    try {
      m_DbUtils   = new DbUtils();
      m_URL       = m_DbUtils.getDatabaseURL();
      m_User      = m_DbUtils.getUsername();
      m_Password  = m_DbUtils.getPassword();
    }
    catch (Exception e) {
      e.printStackTrace();
      m_URL      = "";
      m_User     = "";
      m_Password = "";
    }
   
    createPanel();
  }

  /**
   * builds the panel with all its components.
   */
  protected void createPanel() {
    JPanel        panel;
    JPanel        panel2;
   
    setLayout(new BorderLayout());
    panel2 = new JPanel(new FlowLayout());
    add(panel2, BorderLayout.WEST);

    // label
    m_LabelURL.setLabelFor(m_ButtonDatabase);
    m_LabelURL.setDisplayedMnemonic('U');
    panel2.add(m_LabelURL);

    // editfield
    m_TextURL.setText(m_URL);
    m_TextURL.addCaretListener(this);
    panel2.add(m_TextURL);
   
    // buttons
    panel = new JPanel(new FlowLayout());
    panel2.add(panel);
   
    m_ButtonDatabase.setMnemonic('s');
    m_ButtonDatabase.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    showDialog();
  }
      });
    panel.add(m_ButtonDatabase);
   
    m_ButtonConnect.setMnemonic('n');
    m_ButtonConnect.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    connect();
  }
      });
    panel.add(m_ButtonConnect);

    m_ButtonHistory.addActionListener(new ActionListener() {
  public void actionPerformed(ActionEvent e) {
    showHistory();
  }
      });
    panel.add(m_ButtonHistory);

    setButtons();
  }

  /**
   * sets the buttons according to the connected-state.
   */
  protected void setButtons() {
    boolean isEmpty;
   
    isEmpty = m_TextURL.getText().equals("");
   
    m_ButtonConnect.setEnabled(!isEmpty);
    m_ButtonDatabase.setEnabled(!isEmpty);
    m_ButtonHistory.setEnabled(m_History.size() > 0);
  }

  /**
   * sets the parameters back to standard.
   */
  public void clear() {
    setURL(m_DbUtils.getDatabaseURL());
    setUser(m_DbUtils.getUsername());
    setPassword(m_DbUtils.getPassword());
  }
 
  /**
   * sets the focus in a designated control.
   */
  public void setFocus() {
    m_TextURL.requestFocus();
  }

  /**
   * sets the URL.
   *
   * @param url       the new value of the URL
   */
  public void setURL(String url) {
    m_URL = url;
    m_TextURL.setText(url);
  }

  /**
   * returns the current URL.
   *
   * @return the current URL
   */
  public String getURL() {
    m_URL = m_TextURL.getText();
    return m_URL;
  }

  /**
   * sets the User.
   *
   * @param user       the new value of the User
   */
  public void setUser(String user) {
    m_User = user;
  }

  /**
   * returns the current User.
   *
   * @return the current user
   */
  public String getUser() {
    return m_User;
  }

  /**
   * sets the Password.
   *
   * @param pw       the new value of the Password
   */
  public void setPassword(String pw) {
    m_Password = pw;
  }

  /**
   * returns the current Password.
   *
   * @return the current password
   */
  public String getPassword() {
    return m_Password;
  }

  /**
   * adds the given string to the history (removes duplicates).
   *
   * @param s           the string to add
   */
  protected void addHistory(String s) {
    if (s.equals(""))
      return;
   
    // no duplicates!
    if (m_History.contains(s))
      m_History.removeElement(s);

    m_History.add(0, s);
   
    // send notification
    notifyHistoryChangedListeners();
  }

  /**
   * sets the local history to the given one.
   *
   * @param history     the history to use
   */
  public void setHistory(DefaultListModel history) {
    int           i;
   
    m_History.clear();
    for (i = 0; i < history.size(); i++)
      m_History.addElement(history.get(i));

    setButtons();
  }

  /**
   * returns the history.
   *
   * @return        the current history
   */
  public DefaultListModel getHistory() {
    return m_History;
  }

  /**
   * displays the database dialog.
   */
  protected void showDialog() {
    m_DbDialog = new DatabaseConnectionDialog(m_Parent, getURL(), getUser(), false);
    m_DbDialog.setVisible(true);
    if (m_DbDialog.getReturnValue() == JOptionPane.OK_OPTION) {
      setURL(m_DbDialog.getURL());
      setUser(m_DbDialog.getUsername());
      setPassword(m_DbDialog.getPassword());
    }

    setButtons();
  }

  /**
   * connects to the database, notifies the listeners.
   */
  protected void connect() {
    // disconnect if still connected
    if (m_DbUtils.isConnected()) {
      try {
        m_DbUtils.disconnectFromDatabase();
        notifyConnectionListeners(ConnectionEvent.DISCONNECT);
      }
      catch (Exception e) {
        e.printStackTrace();
        notifyConnectionListeners(ConnectionEvent.DISCONNECT, e);
      }
    }

    // connect
    try {
      m_DbUtils.setDatabaseURL(getURL());
      m_DbUtils.setUsername(getUser());
      m_DbUtils.setPassword(getPassword());
      m_DbUtils.connectToDatabase();
      notifyConnectionListeners(ConnectionEvent.CONNECT);
      // add to history
      addHistory(getUser() + "@" + getURL());
    }
    catch (Exception e) {
      e.printStackTrace();
      notifyConnectionListeners(ConnectionEvent.CONNECT, e);
    }

    setButtons();
  }

  /**
   * displays the query history.
   */
  public void showHistory() {
    JList                 list;
    ListSelectorDialog    dialog;
    String                tmpStr;

    list   = new JList(m_History);
    dialog = new ListSelectorDialog(m_Parent, list);
   
    if (dialog.showDialog() == ListSelectorDialog.APPROVE_OPTION) {
      if (list.getSelectedValue() != null) {
        tmpStr = list.getSelectedValue().toString();
        if (tmpStr.indexOf("@") > -1) {
          setUser(tmpStr.substring(0, tmpStr.indexOf("@")));
          setURL(tmpStr.substring(tmpStr.indexOf("@") + 1));
          showDialog();
        }
        else {
          setUser("");
          setURL(tmpStr);
        }
      }
    }

    setButtons();
  }

  /**
   * adds the given listener to the list of listeners.
   *
   * @param l       the listener to add to the list
   */
  public void addConnectionListener(ConnectionListener l) {
    m_ConnectionListeners.add(l);
  }

  /**
   * removes the given listener from the list of listeners.
   *
   * @param l       the listener to remove
   */
  public void removeConnectionListener(ConnectionListener l) {
    m_ConnectionListeners.remove(l);
  }

  /**
   * notifies the connection listeners of the event.
   *
   * @param type      the type of the action, CONNECT or DISCONNECT
   */
  protected void notifyConnectionListeners(int type) {
    notifyConnectionListeners(type, null);
  }

  /**
   * notifies the connection listeners of the event.
   *
   * @param type      the type of the action, CONNECT or DISCONNECT
   * @param ex        an optional exception that happened (indicates failure!)
   */
  protected void notifyConnectionListeners(int type, Exception ex) {
    Iterator              iter;
    ConnectionListener    l;

    iter = m_ConnectionListeners.iterator();
    while (iter.hasNext()) {
      l = (ConnectionListener) iter.next();
      l.connectionChange(
          new ConnectionEvent(this, type, m_DbUtils, ex));
    }
  }

  /**
   * adds the given listener to the list of listeners.
   *
   * @param l       the listener to add to the list
   */
  public void addHistoryChangedListener(HistoryChangedListener l) {
    m_HistoryChangedListeners.add(l);
  }

  /**
   * removes the given listener from the list of listeners.
   *
   * @param l       the listener to remove
   */
  public void removeHistoryChangedListener(HistoryChangedListener l) {
    m_HistoryChangedListeners.remove(l);
  }

  /**
   * notifies the history listeners of the event.
   */
  protected void notifyHistoryChangedListeners() {
    Iterator                iter;
    HistoryChangedListener  l;

    iter = m_HistoryChangedListeners.iterator();
    while (iter.hasNext()) {
      l = (HistoryChangedListener) iter.next();
      l.historyChanged(
          new HistoryChangedEvent(this, HISTORY_NAME, getHistory()));
    }
  }

  /**
   * Called when the caret position is updated.
   *
   * @param event the event to process
   */
  public void caretUpdate(CaretEvent event) {
    setButtons();
  }
}
TOP

Related Classes of weka.gui.sql.ConnectionPanel

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.