package gui;
import javax.swing.JPanel;
import javax.swing.JFrame;
import java.awt.GridBagLayout;
import javax.swing.JTable;
import java.awt.GridBagConstraints;
import java.awt.Dimension;
import java.awt.Toolkit;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import javax.swing.JOptionPane;
import javax.swing.JScrollPane;
import javax.swing.JButton;
import javax.swing.JComboBox;
import hsql.hsql_con;
import java.awt.Insets;
import javax.swing.JLabel;
import model.*;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class Gui extends JFrame {
private static final long serialVersionUID = 1L;
private JButton exitButton = null;
private JScrollPane jScrollPane = null;
private JTable jTable = null;
private Connection con = null;
private ResultSet rs = null;
private JComboBox jComboBox_daten = null;
private JLabel jLabel_Datenbank = null;
MedModel mmodel = new MedModel();
PhaModel pmodel = new PhaModel();
private JButton jButton_add = null;
private JButton jButton_delete = null;
private String mode = "Medikamente";
private static Log log = LogFactory.getLog(Gui.class);
private JButton jButton_search = null;
Dimension d = Toolkit.getDefaultToolkit().getScreenSize(); //Bildschirmgroesse
private JPanel jPanel_Inhalt = null;
private JButton jButton_edit = null;
JFrame frame;
/**
* Constructor
*/
public Gui() {
initialize();
}
/**
* Initialisierung der Oberflaeche
*/
public void initialize() {
this.setSize(700, 400);
this.setLocation(d.width/2,d.height/2);
this.setContentPane(getJPanel_Inhalt());
this.setTitle("Apotheke");
this.setResizable(false);
}
/**
* Initialisierung von exitButton. Bei aktivierung wird die Datenbank beendet
* und das Programm geschlossen.
* @return javax.swing.exitButton
*/
private JButton getexitButton() {
if (exitButton == null) {
exitButton = new JButton();
exitButton.setText("Exit");
exitButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
try {
hsql.hsql_con.Shutdown(con); //beendet die verbindung mit der datenbank
System.exit(0);
} catch (SQLException e1) {
e1.printStackTrace();
}
}
});
}
return exitButton;
}
/**
* Initialisierung von jComboBox_daten. Je nach Auswahl wird die entsprechende
* Datenbank geladen.
* @return javax.swing.JComboBox
*/
private JComboBox getJComboBox_daten() {
if (jComboBox_daten == null) {
jComboBox_daten = new JComboBox();
jComboBox_daten.addItem("Medikamente");
jComboBox_daten.addItem("Pharmabetriebe");
jComboBox_daten.addItemListener(new ItemListener() {
public void itemStateChanged(ItemEvent ie) {
if (ie.getStateChange() == ItemEvent.SELECTED) {
jButton_delete.setEnabled(false);
jButton_edit.setEnabled(false);
if (ie.getItem()=="Medikamente") {
jTable.setModel(mmodel);
mode = ie.getItem().toString();
log.info("Changing Database...");
try {
rs = hsql.hsql_con.SelectAllMed(con);
} catch (SQLException e) {
e.printStackTrace();
}
updateM(mmodel, rs, con);
}
else {
jTable.setModel(pmodel);
mode = ie.getItem().toString();
log.info("Changing Database...");
try {
rs = hsql.hsql_con.SelectAllPha(con);
} catch (SQLException e) {
e.printStackTrace();
}
updateP(pmodel, rs, con);
}
}
}
});
}
return jComboBox_daten;
}
/**
* Initialisiert jLabel_Datenbank
* @return javax.swing.JLabel
*/
private JLabel getJLabel_Datenbank() {
if (jLabel_Datenbank == null) {
jLabel_Datenbank = new JLabel();
jLabel_Datenbank.setText("Datenbank:");
}
return jLabel_Datenbank;
}
/**
* Initialisiert jScrollPane1
* @return javax.swing.JScrollPane
*/
private JScrollPane getJScrollPane() {
if (jScrollPane == null) {
jScrollPane = new JScrollPane();
jScrollPane.setViewportView(getJTable());
}
return jScrollPane;
}
/**
* Initialisiert jTable.
* @return javax.swing.JTable
*/
private JTable getJTable() {
if(jTable == null)
{
try {
con = hsql.hsql_con.start();
rs = hsql.hsql_con.SelectAllMed(con);
mmodel = hsql_con.getDataMed(rs);
rs = hsql.hsql_con.SelectAllPha(con);
pmodel = hsql.hsql_con.getDataPha(rs);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (jTable == null) {
jTable = new JTable(mmodel);
jTable.addMouseListener(new java.awt.event.MouseAdapter() {
public void mouseClicked(java.awt.event.MouseEvent e) {
updateButtonStatus();
}
});
jTable.setAutoCreateRowSorter(true); //auto-sortierung
}
return jTable;
}
/**
* Initialisiert jButton_add. Bei aktivierung wird je nach Modus das richtige
* Fenster aktiviert.
* @return javax.swing.JButton
*/
private JButton getJButton_add() {
if (jButton_add == null) {
jButton_add = new JButton();
jButton_add.setText("Hinzufügen");
jButton_add.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (mode == "Medikamente") {
NewMed medi = new NewMed(con, mmodel, pmodel);
medi.setVisible(true);
}
else if (mode == "Pharmabetriebe") {
NewPha phar = new NewPha(con, pmodel);
phar.setVisible(true);
}
else {
log.info("Ungültiger Modus");
}
}
});
}
return jButton_add;
}
/**
* Initialisiert jButton_delete. Durch aktivieren des Buttons wird eine Loesch-
* abfrage gestartet. Je nach Antwort wird geloescht, oder nicht.
* @return javax.swing.JButton
*/
private JButton getJButton_delete() {
if (jButton_delete == null) {
jButton_delete = new JButton();
jButton_delete.setText("Löschen");
jButton_delete.setEnabled(false);
jButton_delete.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
Object[] options = {"Ja", "Nein"};
int n = JOptionPane.showOptionDialog(frame,
"Wirklich löschen?",
"Frage",
JOptionPane.YES_NO_OPTION,
JOptionPane.QUESTION_MESSAGE,
null,
options,
options[0]);
if (n == JOptionPane.YES_OPTION) {
delete();
}
else {
}
}
});
}
return jButton_delete;
}
/**
* Fuehrt ein Update der Pharmabetrieb Datenbank durch
* @param pmodel2 TableModel
* @param rs2 ResultSet
* @param con2 Connection
*/
public static void updateP(PhaModel pmodel2, ResultSet rs2, Connection con2) {
try {
log.info("Updating...");
pmodel2.removeAll();
pmodel2 = hsql.hsql_con.getDataPha(rs2);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* Fuehrt ein Update der Medikmanete Datenbank durch
* @param mmodel2 TableModel
* @param rs2 ResultSet
* @param con2 Connection
*/
public static void updateM(MedModel mmodel2, ResultSet rs2, Connection con2) {
try {
log.info("Updating...");
mmodel2.removeAll();
mmodel2 = hsql.hsql_con.getDataMed(rs2);
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* Fuehrt ein Update des delete_button und edit_button Status durch
*/
private void updateButtonStatus() {
if (jTable.getSelectedRowCount() == 1) {
jButton_delete.setEnabled(true);
jButton_edit.setEnabled(true);
} else {
jButton_delete.setEnabled(false);
jButton_edit.setEnabled(false);
}
}
/**
* startet die Loeschoperation eines Datensatzes aus der Datenbank je nach
* dem laufenden Modus.
*/
private void delete() {
//TODO: Wenn noch Medikamente vom Pharmabetrieb hergestellt werden wird der nicht gelöscht
int row = jTable.getSelectedRow();
String str = jTable.getValueAt(row, 0).toString();
String name = jTable.getValueAt(row, 1).toString();
if (mode == "Medikamente") {
try {
hsql.hsql_con.deleteM(str, con, rs, mmodel);
JOptionPane.showMessageDialog(frame, "Datensatz '"+name+"' wurde gelöscht!");
} catch (SQLException e) {
e.printStackTrace();
}
}
else {
try {
hsql.hsql_con.deleteP(str, con, rs, pmodel);
JOptionPane.showMessageDialog(frame, "Pharmabetrieb '"+name+"' gelöscht");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* Initialisiert jButton_search. Durch druecken des Buttons wird je nach
* Modus das passende Suchfenster geoeffnet.
* @return javax.swing.JButton
*/
private JButton getJButton_search() {
if (jButton_search == null) {
jButton_search = new JButton();
jButton_search.setText("Suchen");
jButton_search.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
if (mode == "Medikamente") {
SearchMed smed = new SearchMed(con, mmodel);
smed.setVisible(true);
}
else {
SearchPha spha = new SearchPha(con, pmodel);
spha.setVisible(true);
}
}
});
}
return jButton_search;
}
/**
* Initialisiert jPanel_Inhalt
* @return javax.swing.JPanel
*/
private JPanel getJPanel_Inhalt() {
if (jPanel_Inhalt == null) {
GridBagConstraints gridBagConstraints_edit = new GridBagConstraints();
gridBagConstraints_edit.gridx = 0;
gridBagConstraints_edit.insets = new Insets(10, 0, 155, 0);
gridBagConstraints_edit.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints_edit.gridy = 4;
GridBagConstraints gridBagConstraints_scroll = new GridBagConstraints();
gridBagConstraints_scroll.gridx = 1;
gridBagConstraints_scroll.insets = new Insets(10, 0, 0, 0);
gridBagConstraints_scroll.fill = GridBagConstraints.BOTH;
gridBagConstraints_scroll.gridheight = 4;
gridBagConstraints_scroll.gridy = 1;
GridBagConstraints gridBagConstraints_delete = new GridBagConstraints();
gridBagConstraints_delete.gridx = 0;
gridBagConstraints_delete.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints_delete.insets = new Insets(10, 0, 0, 0);
gridBagConstraints_delete.gridy = 2;
GridBagConstraints gridBagConstraints_search = new GridBagConstraints();
gridBagConstraints_search.gridx = 0;
gridBagConstraints_search.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints_search.gridheight = 1;
gridBagConstraints_search.insets = new Insets(10, 0, 0, 0);
gridBagConstraints_search.gridy = 3;
GridBagConstraints gridBagConstraints_add = new GridBagConstraints();
gridBagConstraints_add.gridx = 0;
gridBagConstraints_add.fill = GridBagConstraints.HORIZONTAL;
gridBagConstraints_add.insets = new Insets(50, 0, 0, 0);
gridBagConstraints_add.gridy = 1;
GridBagConstraints gridBagConstraints_exit = new GridBagConstraints();
gridBagConstraints_exit.gridx = 2;
gridBagConstraints_exit.insets = new Insets(0, 0, 0, 0);
gridBagConstraints_exit.gridy = 0;
GridBagConstraints gridBagConstraints_daten = new GridBagConstraints();
gridBagConstraints_daten.fill = GridBagConstraints.VERTICAL;
gridBagConstraints_daten.gridy = 0;
gridBagConstraints_daten.weightx = 1.0;
gridBagConstraints_daten.gridwidth = 1;
gridBagConstraints_daten.insets = new Insets(0, 0, 0, 350);
gridBagConstraints_daten.ipadx = 150;
gridBagConstraints_daten.ipady = 0;
gridBagConstraints_daten.gridheight = 1;
gridBagConstraints_daten.gridx = 1;
GridBagConstraints gridBagConstraints_label = new GridBagConstraints();
gridBagConstraints_label.gridx = 0;
gridBagConstraints_label.anchor = GridBagConstraints.NORTH;
gridBagConstraints_label.insets = new Insets(5, 0, 0, 0);
gridBagConstraints_label.gridy = 0;
jPanel_Inhalt = new JPanel();
jPanel_Inhalt.setLayout(new GridBagLayout());
jPanel_Inhalt.add(getJLabel_Datenbank(), gridBagConstraints_label);
jPanel_Inhalt.add(getJComboBox_daten(), gridBagConstraints_daten);
jPanel_Inhalt.add(getexitButton(), gridBagConstraints_exit);
jPanel_Inhalt.add(getJButton_add(), gridBagConstraints_add);
jPanel_Inhalt.add(getJButton_search(), gridBagConstraints_search);
jPanel_Inhalt.add(getJButton_delete(), gridBagConstraints_delete);
jPanel_Inhalt.add(getJScrollPane(), gridBagConstraints_scroll);
jPanel_Inhalt.add(getJButton_edit(), gridBagConstraints_edit);
}
return jPanel_Inhalt;
}
/**
* Initialisiert jButton_edit
* @return javax.swing.JButton
*/
private JButton getJButton_edit() {
if (jButton_edit == null) {
jButton_edit = new JButton();
jButton_edit.setEnabled(false);
jButton_edit.setText("Bearbeiten");
jButton_edit.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent e) {
edit();
}
});
}
return jButton_edit;
}
/**
* liest die Daten aus der Tabelle aus und uebergibt sie an die passende
* Funktion und aktiviert das Bearbeitungsfenster.
*/
protected void edit() {
int row = jTable.getSelectedRow();
if (mode == "Medikamente") {
String str_id = jTable.getValueAt(row, 0).toString();
String str_name = jTable.getValueAt(row, 1).toString();
String str_hid = jTable.getValueAt(row, 2).toString();
String str_preis = jTable.getValueAt(row, 3).toString();
String str_bestand = jTable.getValueAt(row, 4).toString();
String str_best = jTable.getValueAt(row, 5).toString();
String str_datum = jTable.getValueAt(row, 6).toString();
EditMed medi = new EditMed(con, mmodel, str_id, str_name, str_hid, str_preis, str_bestand, str_best, str_datum);
medi.setVisible(true);
}
else if (mode == "Pharmabetriebe"){
String str_id = jTable.getValueAt(row, 0).toString();
String str_name = jTable.getValueAt(row, 1).toString();
String str_tel = jTable.getValueAt(row, 2).toString();
String str_str = jTable.getValueAt(row, 3).toString();
String str_plz = jTable.getValueAt(row, 4).toString();
String str_ort = jTable.getValueAt(row, 5).toString();
EditPha phar = new EditPha(con, pmodel, str_id, str_name, str_tel, str_str, str_plz, str_ort);
phar.setVisible(true);
}
else log.info("Ungültiger Modus");
}
}