/*
* Created by JFormDesigner on Mon Jul 09 10:39:27 CEST 2012
*/
package op.residents.bwassistant;
import com.jgoodies.forms.factories.CC;
import com.jgoodies.forms.layout.FormLayout;
import entity.info.Resident;
import op.OPDE;
import op.threads.DisplayMessage;
import op.tools.SYSCalendar;
import op.tools.SYSTools;
import org.apache.commons.collections.Closure;
import org.joda.time.DateMidnight;
import org.joda.time.DateTime;
import org.joda.time.Years;
import javax.persistence.EntityManager;
import javax.persistence.Query;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.PropertyChangeEvent;
import java.text.DateFormat;
import java.util.Date;
/**
* @author Torsten Löhr
*/
public class PnlBWBasisInfo extends JPanel {
public static final String internalClassID = "opde.admin.bw.wizard.page2";
Closure validate;
String nachname = "", vorname = "";
Date gebdatum;
public PnlBWBasisInfo(Closure validate) {
this.validate = validate;
initComponents();
initPanel();
txtNachname.requestFocus();
}
private void initPanel() {
lblName.setText(SYSTools.xx("misc.msg.surname"));
lblVorname.setText(SYSTools.xx("misc.msg.firstname"));
lblAge.setText(null);
lblGebdatum.setText(SYSTools.xx("misc.msg.dob"));
lblGeschlecht.setText(SYSTools.xx("misc.msg.gender"));
cmbGender.setModel(new DefaultComboBoxModel(new String[]{SYSTools.xx("misc.msg.male"), SYSTools.xx("misc.msg.female")}));
txtDOB.setText(DateFormat.getDateInstance().format(new Date()));
gebdatum = null;
}
private void check() {
boolean complete = !vorname.isEmpty() && !nachname.isEmpty() && gebdatum != null;
int geschlecht = cmbGender.getSelectedIndex() + 1;
Resident resident = null;
// Check if this resident has already been entered before.
if (complete) {
EntityManager em = OPDE.createEM();
Query query = em.createQuery("SELECT b FROM Resident b WHERE b.name = :nachname AND b.firstname = :vorname AND b.dob = :gebdatum AND b.gender = :geschlecht ");
query.setParameter("nachname", nachname);
query.setParameter("vorname", vorname);
query.setParameter("gebdatum", gebdatum);
query.setParameter("geschlecht", geschlecht);
if (query.getResultList().size() > 0) {
OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx(internalClassID + ".alreadyexists"), DisplayMessage.WARNING));
} else {
resident = new Resident(nachname, vorname, geschlecht, gebdatum);
OPDE.getDisplayManager().clearSubMessages();
}
em.close();
}
validate.execute(resident);
}
private void txtVornameFocusLost(FocusEvent e) {
vorname = txtVorname.getText().trim();
check();
}
private void txtNachnameFocusLost(FocusEvent e) {
nachname = txtNachname.getText().trim();
check();
}
private void cmbGenderItemStateChanged(ItemEvent e) {
check();
}
private void txtDOBFocusLost(FocusEvent evt) {
//TODO: those min and max values must not be hardcoded in future
int maxage = 120;
int minage = 15;
SYSCalendar.handleDateFocusLost(evt, new DateMidnight().minusYears(maxage), new DateMidnight().minusYears(minage));
gebdatum = SYSCalendar.parseDate(txtDOB.getText());
// gebdatum = null;
// try {
// gebdatum = SYSCalendar.parseDate(txtDOB.getText());
// if (!SYSCalendar.isBirthdaySane(gebdatum)) {
// gebdatum = null;
// OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx(internalClassID + ".dobXX"), DisplayMessage.WARNING));
// } else {
// txtDOB.setText(DateFormat.getDateInstance().format(gebdatum));
// }
// } catch (NumberFormatException e1) {
// gebdatum = null;
// txtDOB.setText(DateFormat.getDateInstance().format(new Date()));
// OPDE.getDisplayManager().addSubMessage(new DisplayMessage(SYSTools.xx(internalClassID + ".dobXX"), DisplayMessage.WARNING));
// }
//
if (SYSCalendar.isBirthdaySane(gebdatum)) {
DateMidnight birthdate = new DateTime(gebdatum).toDateMidnight();
DateTime now = new DateTime();
Years age = Years.yearsBetween(birthdate, now);
lblAge.setText(age.getYears() + " " + SYSTools.xx("misc.msg.Years"));
// gebdatum = birthdate.toDate();
} else {
gebdatum = null;
}
check();
}
private void txtNachnameActionPerformed(ActionEvent e) {
txtVorname.requestFocus();
}
private void txtVornameActionPerformed(ActionEvent e) {
txtDOB.requestFocus();
}
private void txtDOBActionPerformed(ActionEvent e) {
txtNachname.requestFocus();
}
private void initComponents() {
// JFormDesigner - Component initialization - DO NOT MODIFY //GEN-BEGIN:initComponents
lblName = new JLabel();
txtNachname = new JTextField();
lblVorname = new JLabel();
txtVorname = new JTextField();
lblGebdatum = new JLabel();
txtDOB = new JTextField();
lblAge = new JLabel();
lblGeschlecht = new JLabel();
cmbGender = new JComboBox();
//======== this ========
setLayout(new FormLayout(
"default, $lcgap, pref, 2*($lcgap, default:grow), $lcgap, default",
"5*(default, $lgap), default"));
//---- lblName ----
lblName.setText("text");
lblName.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblName, CC.xy(3, 3));
//---- txtNachname ----
txtNachname.setFont(new Font("Arial", Font.PLAIN, 14));
txtNachname.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtNachnameFocusLost(e);
}
});
txtNachname.addActionListener(e -> txtNachnameActionPerformed(e));
add(txtNachname, CC.xywh(5, 3, 3, 1));
//---- lblVorname ----
lblVorname.setText("text");
lblVorname.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblVorname, CC.xy(3, 5));
//---- txtVorname ----
txtVorname.setFont(new Font("Arial", Font.PLAIN, 14));
txtVorname.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtVornameFocusLost(e);
}
});
txtVorname.addActionListener(e -> txtVornameActionPerformed(e));
add(txtVorname, CC.xywh(5, 5, 3, 1));
//---- lblGebdatum ----
lblGebdatum.setText("text");
lblGebdatum.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblGebdatum, CC.xy(3, 7));
//---- txtDOB ----
txtDOB.setFont(new Font("Arial", Font.PLAIN, 14));
txtDOB.addFocusListener(new FocusAdapter() {
@Override
public void focusLost(FocusEvent e) {
txtDOBFocusLost(e);
}
});
txtDOB.addActionListener(e -> txtDOBActionPerformed(e));
add(txtDOB, CC.xy(5, 7));
//---- lblAge ----
lblAge.setText("text");
lblAge.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblAge, CC.xy(7, 7));
//---- lblGeschlecht ----
lblGeschlecht.setText("text");
lblGeschlecht.setFont(new Font("Arial", Font.PLAIN, 14));
add(lblGeschlecht, CC.xy(3, 9));
//---- cmbGender ----
cmbGender.setFont(new Font("Arial", Font.PLAIN, 14));
cmbGender.addItemListener(e -> cmbGenderItemStateChanged(e));
add(cmbGender, CC.xywh(5, 9, 3, 1));
// JFormDesigner - End of component initialization //GEN-END:initComponents
}
// JFormDesigner - Variables declaration - DO NOT MODIFY //GEN-BEGIN:variables
private JLabel lblName;
private JTextField txtNachname;
private JLabel lblVorname;
private JTextField txtVorname;
private JLabel lblGebdatum;
private JTextField txtDOB;
private JLabel lblAge;
private JLabel lblGeschlecht;
private JComboBox cmbGender;
// JFormDesigner - End of variables declaration //GEN-END:variables
}