/*
* Created by JFormDesigner on Wed Jul 25 16:15:09 CEST 2012
*/
package op.care.nursingprocess;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
import entity.info.ResInfoCategory;
import entity.info.ResInfoCategoryTools;
import entity.nursingprocess.Intervention;
import entity.nursingprocess.InterventionTools;
import op.OPDE;
import op.system.InternalClassACL;
import op.threads.DisplayManager;
import op.threads.DisplayMessage;
import gui.GUITools;
import op.tools.SYSTools;
import org.apache.commons.collections.Closure;
import org.jdesktop.swingx.HorizontalLayout;
import org.jdesktop.swingx.JXSearchField;
import javax.persistence.EntityManager;
import javax.persistence.LockModeType;
import javax.persistence.OptimisticLockException;
import javax.swing.*;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import java.awt.*;
import java.awt.event.*;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.ParseException;
import java.util.Arrays;
/**
* @author Torsten Löhr
*/
public class PnlSelectIntervention extends JPanel {
private Intervention intervention2Edit = null;
public static final String internalClassID = "nursingrecords.nursingprocess.pnlselectinterventions";
private Closure actionBlock;
private JToggleButton tbAktiv;
Number dauer = BigDecimal.TEN;
Component focusOwner = null;
public PnlSelectIntervention(Closure actionBlock) {
this.actionBlock = actionBlock;
initComponents();
initPanel();
btnEdit.setEnabled(false);
btnAdd.setEnabled(OPDE.getAppInfo().isAllowedTo(InternalClassACL.UPDATE, "nursingrecords.nursingprocess"));
}
private void initPanel() {
lblText.setText(SYSTools.xx("nursingrecords.nursingprocess.pnlselectinterventions.lbltext"));
lblLength.setText(SYSTools.xx("nursingrecords.nursingprocess.pnlselectinterventions.lbllength"));
lblCat.setText(SYSTools.xx("nursingrecords.nursingprocess.pnlselectinterventions.lblcat"));
lblType.setText(SYSTools.xx("nursingrecords.nursingprocess.pnlselectinterventions.lbltype"));
lstInterventions.setModel(new DefaultListModel());
tbAktiv = GUITools.getNiceToggleButton("nursingrecords.nursingprocess.pnlselectinterventions.activeIntervention");
pnlRight.add(tbAktiv, CC.xy(1, 9));
SwingUtilities.invokeLater(() -> SYSTools.showSide(split1, SYSTools.LEFT_UPPER_SIDE));
cmbType.setModel(new DefaultComboBoxModel(new String[]{SYSTools.xx("misc.msg.interventions.CARE"), SYSTools.xx("misc.msg.interventions.PRESCRIPTION"), SYSTools.xx("misc.msg.interventions.SOCIAL")}));
cmbCat.setModel(new DefaultComboBoxModel(ResInfoCategoryTools.getAll4NP().toArray()));
cmbCategory.setModel(new DefaultComboBoxModel(ResInfoCategoryTools.getAll4NP().toArray()));
cmbCategory.setSelectedItem(null);
setFocusCycleRoot(true);
setFocusTraversalPolicy(new FocusTraversalPolicy() {
@Override
public Component getComponentAfter(Container aContainer, Component aComponent) {
if (focusOwner == null) {
focusOwner = txtText;
} else if (focusOwner.equals(txtText)) {
focusOwner = txtLength;
} else {
focusOwner = txtText;
}
return focusOwner;
}
@Override
public Component getComponentBefore(Container aContainer, Component aComponent) {
if (focusOwner == null) {
focusOwner = txtLength;
} else if (focusOwner.equals(txtLength)) {
focusOwner = txtText;
} else {
focusOwner = txtLength;
}
return focusOwner;
}
@Override
public Component getFirstComponent(Container aContainer) {
return txtText;
}
@Override
public Component getLastComponent(Container aContainer) {
return txtLength;
}
@Override
public Component getDefaultComponent(Container aContainer) {
return txtText;
}
});
}
private void txtSearchActionPerformed(ActionEvent e) {
if (txtSearch.getText().isEmpty()) return;
lstInterventions.setModel(SYSTools.list2dlm(InterventionTools.findBy(InterventionTools.TYPE_CARE, txtSearch.getText())));
cmbCategory.setSelectedItem(null);
}
private void btnAddActionPerformed(ActionEvent e) {
tbAktiv.setEnabled(false);
intervention2Edit = null;
SYSTools.showSide(split1, SYSTools.RIGHT_LOWER_SIDE, SYSTools.SPEED_NORMAL);
}
private void btnOkActionPerformed(ActionEvent e) {
actionBlock.execute(lstInterventions.getSelectedValuesList());
}
private boolean saveok() {
if (txtText.getText().trim().isEmpty()) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx("nursingrecords.nursingprocess.pnlselectinterventions.textempty"), DisplayMessage.WARNING));
return false;
}
return true;
}
private void txtDauerFocusLost(FocusEvent e) {
try {
dauer = NumberFormat.getNumberInstance().parse(txtLength.getText());
} catch (ParseException e1) {
dauer = BigDecimal.TEN;
txtLength.setText("10");
}
}
private void lstInterventionsMouseClicked(MouseEvent e) {
if (e.getClickCount() == 2) {
btnOk.doClick();
}
}
private void cmbCategoryItemStateChanged(ItemEvent e) {
if (e.getStateChange() == ItemEvent.SELECTED && e.getItem() != null) {
txtSearch.setText(null);
lstInterventions.setModel(SYSTools.list2dlm(InterventionTools.findBy((ResInfoCategory) e.getItem())));
}
}
// private void btnCancelActionPerformed(ActionEvent e) {
// SYSTools.showSide(split1, SYSTools.LEFT_UPPER_SIDE, SYSTools.SPEED_NORMAL);
// }
private void btnEditActionPerformed(ActionEvent e) {
intervention2Edit = (Intervention) lstInterventions.getSelectedValue();
txtText.setText(intervention2Edit.getBezeichnung());
txtLength.setText(intervention2Edit.getDauer().toBigInteger().toString());
tbAktiv.setSelected(intervention2Edit.isActive());
cmbCategory.setSelectedItem(intervention2Edit.getCategory());
tbAktiv.setEnabled(true);
cmbType.setSelectedIndex(intervention2Edit.getInterventionType() - 1);
SYSTools.showSide(split1, SYSTools.RIGHT_LOWER_SIDE, SYSTools.SPEED_NORMAL);
}
private void lstInterventionsValueChanged(ListSelectionEvent e) {
// btnEdit.setEnabled(lstInterventions.getSelectedValues().length == 1 && ((Intervention) lstInterventions.getSelectedValue()).getMassID() != null && OPDE.getAppInfo().isAllowedTo(InternalClassACL.MANAGER, PnlNursingProcess.internalClassID));
btnEdit.setEnabled(false);
}
private void btnSaveActionPerformed(ActionEvent evt) {
if (saveok()) {
if (intervention2Edit == null) {
Intervention intervention = new Intervention(txtText.getText().trim(), new BigDecimal(dauer.doubleValue()), cmbType.getSelectedIndex() + 1, (ResInfoCategory) cmbCat.getSelectedItem());
lstInterventions.setModel(SYSTools.list2dlm(Arrays.asList(intervention)));
btnEdit.setEnabled(false);
} else {
EntityManager em = OPDE.createEM();
try {
em.getTransaction().begin();
Intervention myIntervention = em.merge(intervention2Edit);
em.lock(myIntervention, LockModeType.OPTIMISTIC);
myIntervention.setBezeichnung(txtText.getText().trim());
myIntervention.setDauer(new BigDecimal(dauer.doubleValue()));
myIntervention.setCategory(em.merge((ResInfoCategory) cmbCat.getSelectedItem()));
myIntervention.setInterventionType(cmbType.getSelectedIndex() + 1);
myIntervention.setActive(tbAktiv.isSelected());
em.getTransaction().commit();
OPDE.getDisplayManager().addSubMessage(new DisplayMessage("nursingrecords.nursingprocess.pnlselectinterventions.interventionedited"));
actionBlock.execute(null);
} catch (OptimisticLockException ole) { OPDE.warn(ole);
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
if (ole.getMessage().indexOf("Class> entity.info.Resident") > -1) {
OPDE.getMainframe().emptyFrame();
OPDE.getMainframe().afterLogin();
}
OPDE.getDisplayManager().addSubMessage(DisplayManager.getLockMessage());
} catch (Exception e) {
if (em.getTransaction().isActive()) {
em.getTransaction().rollback();
}
OPDE.fatal(e);
} finally {
em.close();
}
}
}
SYSTools.showSide(split1, SYSTools.LEFT_UPPER_SIDE, SYSTools.SPEED_NORMAL);
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
panel1 = new JPanel();
split1 = new JSplitPane();
panel2 = new JPanel();
txtSearch = new JXSearchField();
cmbCategory = new JComboBox();
scrollPane1 = new JScrollPane();
lstInterventions = new JList();
panel3 = new JPanel();
panel5 = new JPanel();
btnOk = new JButton();
btnAdd = new JButton();
btnEdit = new JButton();
pnlRight = new JPanel();
lblText = new JLabel();
lblLength = new JLabel();
txtText = new JTextField();
txtLength = new JTextField();
lblCat = new JLabel();
cmbCat = new JComboBox<>();
lblType = new JLabel();
cmbType = new JComboBox<>();
panel4 = new JPanel();
btnSave = new JButton();
//======== this ========
setLayout(new BorderLayout());
//======== panel1 ========
{
panel1.setBorder(new EmptyBorder(15, 15, 15, 15));
panel1.setLayout(new BoxLayout(panel1, BoxLayout.X_AXIS));
//======== split1 ========
{
split1.setDividerLocation(150);
split1.setDividerSize(1);
split1.setEnabled(false);
//======== panel2 ========
{
panel2.setLayout(new FormLayout(
"default:grow",
"2*(default, $lgap), default:grow, $lgap, default"));
//---- txtSearch ----
txtSearch.setFont(new Font("Arial", Font.PLAIN, 14));
txtSearch.addActionListener(e -> txtSearchActionPerformed(e));
panel2.add(txtSearch, CC.xy(1, 1));
//---- cmbCategory ----
cmbCategory.addItemListener(e -> cmbCategoryItemStateChanged(e));
panel2.add(cmbCategory, CC.xy(1, 3));
//======== scrollPane1 ========
{
//---- lstInterventions ----
lstInterventions.setFont(new Font("Arial", Font.PLAIN, 14));
lstInterventions.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
lstInterventionsMouseClicked(e);
}
});
lstInterventions.addListSelectionListener(e -> lstInterventionsValueChanged(e));
scrollPane1.setViewportView(lstInterventions);
}
panel2.add(scrollPane1, CC.xy(1, 5, CC.FILL, CC.FILL));
//======== panel3 ========
{
panel3.setLayout(new BoxLayout(panel3, BoxLayout.X_AXIS));
//======== panel5 ========
{
panel5.setLayout(new HorizontalLayout());
//---- btnOk ----
btnOk.setText(null);
btnOk.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/apply.png")));
btnOk.setBorderPainted(false);
btnOk.setBorder(null);
btnOk.setContentAreaFilled(false);
btnOk.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnOk.setSelectedIcon(null);
btnOk.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/pressed.png")));
btnOk.addActionListener(e -> btnOkActionPerformed(e));
panel5.add(btnOk);
}
panel3.add(panel5);
//---- btnAdd ----
btnAdd.setText(null);
btnAdd.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/add.png")));
btnAdd.setBorder(null);
btnAdd.setBorderPainted(false);
btnAdd.setContentAreaFilled(false);
btnAdd.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnAdd.setSelectedIcon(null);
btnAdd.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/pressed.png")));
btnAdd.addActionListener(e -> btnAddActionPerformed(e));
panel3.add(btnAdd);
//---- btnEdit ----
btnEdit.setText(null);
btnEdit.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/edit3.png")));
btnEdit.setBorder(null);
btnEdit.setBorderPainted(false);
btnEdit.setContentAreaFilled(false);
btnEdit.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnEdit.setSelectedIcon(null);
btnEdit.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/pressed.png")));
btnEdit.setEnabled(false);
btnEdit.addActionListener(e -> btnEditActionPerformed(e));
panel3.add(btnEdit);
}
panel2.add(panel3, CC.xy(1, 7, CC.FILL, CC.DEFAULT));
}
split1.setLeftComponent(panel2);
//======== pnlRight ========
{
pnlRight.setBorder(null);
pnlRight.setLayout(new FormLayout(
"default, $lcgap, default:grow",
"3*(fill:default, $lgap), 2*(default, $lgap), default:grow"));
//---- lblText ----
lblText.setText("Bezeichnung");
lblText.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(lblText, CC.xy(1, 1));
//---- lblLength ----
lblLength.setText("Dauer");
lblLength.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(lblLength, CC.xy(1, 3));
//---- txtText ----
txtText.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(txtText, CC.xy(3, 1));
//---- txtLength ----
txtLength.setHorizontalAlignment(SwingConstants.RIGHT);
txtLength.setText("10");
txtLength.setToolTipText(null);
txtLength.setFont(new Font("Arial", Font.PLAIN, 14));
txtLength.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtDauerFocusLost(e);
}
});
pnlRight.add(txtLength, CC.xy(3, 3));
//---- lblCat ----
lblCat.setText("Kategorie");
lblCat.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(lblCat, CC.xy(1, 5));
//---- cmbCat ----
cmbCat.setModel(new DefaultComboBoxModel<>(new String[] {
"Item 1",
"Item 2",
"Item 3",
"Item 4"
}));
cmbCat.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(cmbCat, CC.xy(3, 5));
//---- lblType ----
lblType.setText("Art");
lblType.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(lblType, CC.xy(1, 7));
//---- cmbType ----
cmbType.setModel(new DefaultComboBoxModel<>(new String[] {
"Item 1",
"Item 2",
"Item 3",
"Item 4"
}));
cmbType.setFont(new Font("Arial", Font.PLAIN, 14));
pnlRight.add(cmbType, CC.xy(3, 7));
//======== panel4 ========
{
panel4.setLayout(new BoxLayout(panel4, BoxLayout.X_AXIS));
//---- btnSave ----
btnSave.setText(null);
btnSave.setIcon(new ImageIcon(getClass().getResource("/artwork/22x22/apply.png")));
btnSave.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
btnSave.setBorderPainted(false);
btnSave.setBorder(null);
btnSave.setContentAreaFilled(false);
btnSave.setSelectedIcon(null);
btnSave.setPressedIcon(new ImageIcon(getClass().getResource("/artwork/22x22/bw/pressed.png")));
btnSave.addActionListener(e -> btnSaveActionPerformed(e));
panel4.add(btnSave);
}
pnlRight.add(panel4, CC.xywh(1, 11, 3, 1, CC.RIGHT, CC.BOTTOM));
}
split1.setRightComponent(pnlRight);
}
panel1.add(split1);
}
add(panel1, BorderLayout.CENTER);
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JPanel panel1;
private JSplitPane split1;
private JPanel panel2;
private JXSearchField txtSearch;
private JComboBox cmbCategory;
private JScrollPane scrollPane1;
private JList lstInterventions;
private JPanel panel3;
private JPanel panel5;
private JButton btnOk;
private JButton btnAdd;
private JButton btnEdit;
private JPanel pnlRight;
private JLabel lblText;
private JLabel lblLength;
private JTextField txtText;
private JTextField txtLength;
private JLabel lblCat;
private JComboBox<String> cmbCat;
private JLabel lblType;
private JComboBox<String> cmbType;
private JPanel panel4;
private JButton btnSave;
// JFormDesigner - End of variables declaration //GEN-END:variables
}