/** * */ package org.celllife.idart.gui.patient.tabs; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import java.util.HashMap; import java.util.Map; import model.manager.PatientManager; import org.apache.log4j.Logger; import org.celllife.idart.database.hibernate.Patient; import org.celllife.idart.database.hibernate.Pregnancy; import org.celllife.idart.gui.misc.GenericTab; import org.celllife.idart.gui.patient.ShowPAVAS; import org.celllife.idart.gui.utils.ResourceUtils; import org.celllife.idart.gui.utils.iDartFont; import org.celllife.idart.gui.utils.iDartImage; import org.celllife.idart.gui.widget.DateButton; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.hibernate.Session; /** */ public class ClinicInfoTab extends GenericTab implements IPatientTab { protected DateButton btnMenstrualOccurance; private Session hSession; private final Logger log = Logger.getLogger(this.getClass()); private TabFolder parent; // default to true since sex combo on AddPatient defaults to female private boolean patientIsFemale = true; private Button rdBtnNotPregnant; private Button rdBtnPregnant; private int style; private Label lblPicPatientVisitsandStats; private Patient localPatient; /** * Used to add a new pregnancy (if there is no current pregnancy) or * otherwise update the confirm date of the current pregnancy. * * Only called by setLocalPatient() when rdBtnPregnant is selected. * * @throws ParseException */ private void addOrUpdatePregnancy(Patient patient) { // Check if local patient has a current pregnancy. Pregnancy currentPregnancy = PatientManager.getCurrentPregnancy( hSession, patient.getId()); // we are adding a new pregnancy if (currentPregnancy == null) { Pregnancy preg = new Pregnancy(); preg.setPatient(patient); preg.setConfirmDate(btnMenstrualOccurance.getDate()); preg.setModified('T'); patient.getPregnancies().add(preg); } else { // we are updating an existing pregnancy if (patient.getPregnancies().contains(currentPregnancy)) { for (Pregnancy pregForUpdate : patient.getPregnancies()) { if (pregForUpdate.getId() == currentPregnancy.getId()) { pregForUpdate.setPatient(patient); pregForUpdate.setConfirmDate(btnMenstrualOccurance .getDate()); pregForUpdate.setModified('T'); break; // pregnancy found. No further iteration. } } } } } /* * (non-Javadoc) * * @see * org.celllife.idart.gui.patient.util.IPatientTab#changesMade(org.celllife * .idart.database.hibernate.Patient) */ @Override public boolean changesMade(Patient patient) { boolean isPregnant; boolean changesMade = false; if (rdBtnPregnant.getSelection()) { isPregnant = true; } else { isPregnant = false; } // pregnancy tests Date theNewPregnancyDate = btnMenstrualOccurance.getDate(); Pregnancy currentPregnancy = PatientManager.getCurrentPregnancy( hSession, patient.getId()); if (((currentPregnancy == null) && (isPregnant)) || ((currentPregnancy != null) && (!isPregnant))) { changesMade = true; } else if (currentPregnancy != null) { Date currentConfirmDate = currentPregnancy.getConfirmDate(); if (currentConfirmDate != null && theNewPregnancyDate != null) { if (!(currentConfirmDate.compareTo(theNewPregnancyDate) != 0)) { changesMade = true; } } else if (theNewPregnancyDate != null) { changesMade = true; } } return changesMade; } /* * (non-Javadoc) * * @see org.celllife.idart.gui.patient.util.IPatientTab#clear() */ @Override public void clear() { rdBtnPregnant.setSelection(false); rdBtnNotPregnant.setSelection(true); btnMenstrualOccurance.clearDate(); btnMenstrualOccurance.setText("Not applicable"); } @Override public void create() { this.tabItem = new TabItem(parent, style); tabItem.setText(" Clinical Info "); createGrpClinicalInfo(); } /** * This method initializes grpPregnancy */ private void createGrpClinicalInfo() { Group grpPregnancy = new Group(tabItem.getParent(), SWT.NONE); grpPregnancy.setBounds(new Rectangle(3, 3, 750, 140)); grpPregnancy.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); tabItem.setControl(grpPregnancy); // Pregnant? Label lblPregnant = new Label(grpPregnancy, SWT.NONE); lblPregnant.setBounds(new Rectangle(11, 25, 166, 20)); lblPregnant.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); lblPregnant.setText(" Patient Currently Pregnant?"); // compAccStatus Composite compPregnancy = new Composite(grpPregnancy, SWT.NONE); compPregnancy.setBounds(new Rectangle(181, 21, 150, 20)); rdBtnPregnant = new Button(compPregnancy, SWT.RADIO); rdBtnPregnant.setBounds(new org.eclipse.swt.graphics.Rectangle(0, 0, 60, 20)); rdBtnPregnant.setText("Yes"); rdBtnPregnant.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); rdBtnPregnant.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) { btnMenstrualOccurance.setEnabled(true); if (btnMenstrualOccurance.getDate() == null) { btnMenstrualOccurance.setText("Unknown"); } } }); rdBtnPregnant.setSelection(false); rdBtnNotPregnant = new Button(compPregnancy, SWT.RADIO); rdBtnNotPregnant.setBounds(new Rectangle(61, 0, 70, 20)); rdBtnNotPregnant.setText("No"); rdBtnNotPregnant.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); rdBtnNotPregnant.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e) { btnMenstrualOccurance.setEnabled(false); btnMenstrualOccurance.setText("Not applicable"); } }); rdBtnNotPregnant.setSelection(true); // Date Confirmed Label lblConfirmDate = new Label(grpPregnancy, SWT.NONE); lblConfirmDate.setBounds(new Rectangle(11, 58, 144, 20)); lblConfirmDate.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8)); lblConfirmDate.setText(" Last Menstrual Period:"); btnMenstrualOccurance = new DateButton(grpPregnancy, DateButton.ZERO_TIMESTAMP, null); btnMenstrualOccurance.setBounds(new Rectangle(160, 51, 200, 25)); btnMenstrualOccurance.setFont(ResourceUtils .getFont(iDartFont.VERASANS_8)); btnMenstrualOccurance.setText(" Not applicable "); btnMenstrualOccurance.setEnabled(false); lblPicPatientVisitsandStats = new Label(grpPregnancy, SWT.NONE); lblPicPatientVisitsandStats.setBounds(new Rectangle(15, 90, 50, 43)); lblPicPatientVisitsandStats.setImage(ResourceUtils .getImage(iDartImage.PAVAS)); lblPicPatientVisitsandStats .setToolTipText("Press this Button to enter the Patient Visits and Statistics Module."); lblPicPatientVisitsandStats.addMouseListener(new MouseAdapter() { @Override public void mouseUp(MouseEvent mu) { cmdViewPAVASWidgetSelected(); } }); } /* * (non-Javadoc) * * @see org.celllife.idart.gui.patient.util.IPatientTab#enable(boolean, * org.eclipse.swt.graphics.Color) */ @Override public void enable(boolean enable, Color color) { // only enable if the patient is female enable &= isPatientFemale(); rdBtnPregnant.setEnabled(enable); rdBtnNotPregnant.setEnabled(enable); if (isPatientFemale()) { if (rdBtnPregnant.getSelection()) { btnMenstrualOccurance.setEnabled(true); } } else { btnMenstrualOccurance.setEnabled(false); rdBtnPregnant.setEnabled(false); rdBtnPregnant.setSelection(false); rdBtnNotPregnant.setEnabled(false); rdBtnNotPregnant.setSelection(true); } } /** * @return the patientIsFemale */ public boolean isPatientFemale() { return patientIsFemale; } /* * (non-Javadoc) * * @see * org.celllife.idart.gui.patient.util.IPatientTab#populate(org.hibernate * .Session, org.celllife.idart.database.hibernate.Patient, boolean) */ /** * Method loadPatientDetails. * * @param sess * Session * @param patient * Patient * @param isPatientActive * boolean * @see org.celllife.idart.gui.patient.tabs.IPatientTab#loadPatientDetails(Session, * Patient, boolean) */ @Override public void loadPatientDetails(Patient patient, boolean isPatientActive) { if (PatientManager.getCurrentPregnancy(hSession, patient.getId()) != null) { Calendar theConfirmDate = Calendar.getInstance(); theConfirmDate.setTime(PatientManager.getCurrentPregnancy(hSession, patient.getId()).getConfirmDate()); rdBtnPregnant.setSelection(true); rdBtnNotPregnant.setSelection(false); btnMenstrualOccurance.setDate(theConfirmDate.getTime()); } else { rdBtnNotPregnant.setSelection(true); rdBtnPregnant.setSelection(false); btnMenstrualOccurance.setText("Not applicable"); } Character sex = new Character(patient.getSex()); setPatientIsFemale(Character.toUpperCase(sex) == 'F'); localPatient = patient; } /* * (non-Javadoc) * * @see * org.celllife.idart.gui.patient.util.IPatientTab#setPatientDetails(org * .celllife.idart.database.hibernate.Patient) */ @Override public void setPatientDetails(Patient patient) { // nothing to set } /** * Method setCurrentPregnancyEnded. * * @param patient * Patient */ private void setCurrentPregnancyEnded(Patient patient) { Pregnancy currPregnancy = PatientManager.getCurrentPregnancy(hSession, patient.getId()); if (currPregnancy != null) { for (Pregnancy p : patient.getPregnancies()) { if (p.getId() == currPregnancy.getId()) { p.setEndDate(new Date()); break; // No more iteration when pregnancy found. } } } } /* * (non-Javadoc) * * @see * org.celllife.idart.gui.misc.IGenericTab#setParent(org.eclipse.swt.widgets * .TabFolder) */ @Override public void setParent(TabFolder parent) { this.parent = parent; } /* * (non-Javadoc) * * @see * org.celllife.idart.gui.misc.IGenericTab#setSession(org.hibernate.Session) */ @Override public void setSession(Session session) { this.hSession = session; } /* * (non-Javadoc) * * @see org.celllife.idart.gui.misc.IGenericTab#setStyle(int) */ @Override public void setStyle(int SWTStyle) { this.style = SWTStyle; } /* * (non-Javadoc) * * @see * org.celllife.idart.gui.patient.util.IPatientTab#submit(org.hibernate. * Session, org.celllife.idart.database.hibernate.Patient) */ /** * Method submit. * * @param patient * Patient * @see org.celllife.idart.gui.patient.tabs.IPatientTab#submit(Patient) */ @Override public void submit(Patient patient) { if (rdBtnPregnant.getSelection()) { addOrUpdatePregnancy(patient); } else { setCurrentPregnancyEnded(patient); } } /* * (non-Javadoc) * * @see org.celllife.idart.gui.patient.IPatientTab#validateFields() */ /** * Method validateFields. * * @param patient * Patient * @return Map<String,String> * @see org.celllife.idart.gui.patient.tabs.IPatientTab#validateFields(Patient) */ @Override public Map<String, String> validateFields(Patient patient) { String title = ""; String message = ""; Boolean result = true; // if patient is pregnant, confirm date must be set if ((rdBtnPregnant.getSelection()) && (btnMenstrualOccurance.getDate() == null)) { title = "Last Menstrual Period Not Set"; message = "If this patient is pregnant, please capture the last menstrual period (or an estimate)."; result = false; } Map<String, String> map = new HashMap<String, String>(); map.put("result", result.toString()); map.put("title", title); map.put("message", message); return map; } /** * @param patientIsFemale * the patientIsFemale to set */ public void setPatientIsFemale(boolean patientIsFemale) { this.patientIsFemale = patientIsFemale; } private void cmdViewPAVASWidgetSelected() { if (localPatient == null) { new ShowPAVAS(parent.getShell()); } else { new ShowPAVAS(parent.getShell(), localPatient); } } }