package op.care.info;
import com.jidesoft.popup.JidePopup;
import entity.prescription.Hospital;
import entity.prescription.HospitalTools;
import op.OPDE;
import op.residents.PnlEditHospital;
import gui.GUITools;
import org.apache.commons.collections.Closure;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.ArrayList;
/**
* Created by tloehr on 06.03.15.
*/
public class PnlHospital extends JPanel {
private final Closure changeEvent;
private Hospital selected = null;
ArrayList<Hospital> listHospitals = new ArrayList<Hospital>();
private JComboBox<Hospital> cmbHospital;
private JButton btnAdd, btnEdit;
public PnlHospital(Closure changeEvent) {
this.changeEvent = changeEvent;
initComponents();
initPanel();
}
private void initComponents() {
setLayout(new BorderLayout(5, 0));
cmbHospital = new JComboBox();
JPanel panel3 = new JPanel();
panel3.setLayout(new BoxLayout(panel3, BoxLayout.LINE_AXIS));
cmbHospital.setFont(new Font("Arial", Font.PLAIN, 14));
cmbHospital.addItemListener(e -> cmbHospitalItemStateChanged(e));
btnAdd = new JButton();
btnAdd.setText(null);
btnAdd.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnAdd.setBorderPainted(false);
btnAdd.setContentAreaFilled(false);
btnAdd.setBorder(null);
btnAdd.addActionListener(e -> btnAddActionPerformed(e));
panel3.add(btnAdd);
//---- btnEdit ----
btnEdit = new JButton();
btnEdit.setText(null);
btnEdit.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/edit3.png")));
btnEdit.setBorderPainted(false);
btnEdit.setContentAreaFilled(false);
btnEdit.setBorder(null);
btnEdit.addActionListener(e -> btnEditActionPerformed(e));
panel3.add(btnEdit);
add(cmbHospital, BorderLayout.CENTER);
add(panel3, BorderLayout.EAST);
}
public void setSelected(Hospital selected) {
if (listHospitals.contains(selected)) {
cmbHospital.setSelectedItem(selected);
} else {
cmbHospital.setModel(new DefaultComboBoxModel(new Hospital[]{selected}));
}
}
private void initPanel() {
EntityManager em = OPDE.createEM();
Query queryGP = em.createQuery("SELECT a FROM Hospital a WHERE a.state >= 0 ORDER BY a.name");
listHospitals.addAll(queryGP.getResultList());
em.close();
listHospitals.add(0, null);
cmbHospital.setModel(new DefaultComboBoxModel(listHospitals.toArray()));
cmbHospital.setRenderer(HospitalTools.getKHRenderer());
}
private void btnAddActionPerformed(ActionEvent e) {
final PnlEditHospital pnlEditHospital = new PnlEditHospital(new Hospital());
final JidePopup popup = GUITools.createPanelPopup(pnlEditHospital, o -> {
if (o != null) {
EntityManager em = OPDE.createEM();
try {
em.getTransaction().begin();
Hospital myHospital = em.merge((Hospital) o);
em.getTransaction().commit();
cmbHospital.setModel(new DefaultComboBoxModel(new Hospital[]{myHospital}));
selected = myHospital;
changeEvent.execute(selected);
} catch (Exception ex) {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
OPDE.fatal(ex);
} finally {
em.close();
}
}
}, btnAdd);
GUITools.showPopup(popup, SwingConstants.EAST);
}
private void btnEditActionPerformed(ActionEvent e) {
if (cmbHospital.getSelectedItem() == null) return;
final PnlEditHospital pnlEditHospital = new PnlEditHospital((Hospital) cmbHospital.getSelectedItem());
final JidePopup popup = GUITools.createPanelPopup(pnlEditHospital, o -> {
if (o != null) {
EntityManager em = OPDE.createEM();
try {
em.getTransaction().begin();
Hospital myHospital = em.merge((Hospital) o);
em.getTransaction().commit();
cmbHospital.setModel(new DefaultComboBoxModel(new Hospital[]{myHospital}));
selected = myHospital;
changeEvent.execute(selected);
} catch (Exception ex) {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
OPDE.fatal(ex);
} finally {
em.close();
}
}
}, btnEdit);
GUITools.showPopup(popup, SwingConstants.EAST);
}
private void cmbHospitalItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED) {
selected = (Hospital) e.getItem();
changeEvent.execute(selected);
}
}
}