org.celllife.idart.gui.drugGroup.AddDrugGroup.java Source code

Java tutorial

Introduction

Here is the source code for org.celllife.idart.gui.drugGroup.AddDrugGroup.java

Source

/*
 * iDART: The Intelligent Dispensing of Antiretroviral Treatment
 * Copyright (C) 2006 Cell-Life
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published by
 * the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License version
 * 2 for more details.
 *
 * You should have received a copy of the GNU General Public License version 2
 * along with this program; if not, write to the Free Software Foundation,
 * Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
 *
 */
package org.celllife.idart.gui.drugGroup;

import java.math.BigDecimal;
import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import model.manager.DeletionsManager;
import model.manager.DrugManager;

import org.apache.log4j.Logger;
import org.celllife.idart.commonobjects.CommonObjects;
import org.celllife.idart.database.hibernate.Drug;
import org.celllife.idart.database.hibernate.Form;
import org.celllife.idart.database.hibernate.Regimen;
import org.celllife.idart.database.hibernate.RegimenDrugs;
import org.celllife.idart.database.hibernate.util.HibernateUtil;
import org.celllife.idart.gui.platform.GenericFormGui;
import org.celllife.idart.gui.prescription.PrescriptionObject;
import org.celllife.idart.gui.search.Search;
import org.celllife.idart.gui.utils.ResourceUtils;
import org.celllife.idart.gui.utils.iDartColor;
import org.celllife.idart.gui.utils.iDartFont;
import org.celllife.idart.gui.utils.iDartImage;
import org.celllife.idart.messages.Messages;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.KeyAdapter;
import org.eclipse.swt.events.KeyEvent;
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.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.widgets.TableItem;
import org.eclipse.swt.widgets.Text;
import org.hibernate.HibernateException;
import org.hibernate.Transaction;

/**
 *
 */
public class AddDrugGroup extends GenericFormGui {

    private Button btnAddDrug;

    private Button btnSearch;

    private Button btnSaveDrugGroup;

    private TableColumn clmAmt;

    private TableColumn clmDrugName;

    private TableColumn clmSpace;

    private TableColumn clmTake;

    private Composite compRegimenSelect;

    private Composite compButtonsMiddle;

    private Group grpDrugs;

    private Group grpRegimen;

    private int intDrugTableSize = 1;

    private Label lblRegimenGroup;

    private Label lblInstructions;

    private Label lblDrugGroupName;

    private Regimen localRegimen;

    private TableColumn tblDescription;

    private Table tblDrugs;

    private TableColumn tblPerDay;

    private TableColumn tblTPD;

    private Text txtDrugGroupName;

    private Composite compInstructions;

    private Label lblPicAddDrug;

    private boolean isAddnotUpdate;

    private Button btnRemoveDrug;

    private CCombo cmbRegimen;

    /**
     * Constructor
     * 
     * @param parent
     *            Shell
     */
    public AddDrugGroup(Shell parent) {
        super(parent, HibernateUtil.getNewSession());
    }

    /**
     * This method initializes newAddRegimen
     */
    @Override
    protected void createShell() {
        isAddnotUpdate = ((Boolean) getInitialisationOption(OPTION_isAddNotUpdate)).booleanValue();
        // The GenericFormsGui class needs
        // Header text, icon URL, shell bounds
        String shellTxt = isAddnotUpdate ? Messages.getString("adddruggroup.icon.header") //$NON-NLS-1$
                : Messages.getString("adddruggroup.url.header"); //$NON-NLS-1$
        Rectangle bounds = new Rectangle(25, 0, 800, 700);
        // Parent Generic Methods ------
        buildShell(shellTxt, bounds); // generic shell build
    }

    @Override
    protected void createContents() {
        createCompInstructions();
        createCompButtonsMiddle();
        createRegimenGroup();
        createGrpDrugs();

        enableFields(false);
        txtDrugGroupName.setFocus();
    }

    /**
     * This method initializes compHeader
     * 
     */
    @Override
    protected void createCompHeader() {
        String headerTxt = (isAddnotUpdate ? Messages.getString("adddruggroup.icon.header") //$NON-NLS-1$
                : Messages.getString("adddruggroup.url.header")); //$NON-NLS-1$
        iDartImage icoImage = iDartImage.DRUGGROUP;
        buildCompHeader(headerTxt, icoImage);
    }

    @Override
    protected void createCompButtons() {
        // Parent Class generic call
        buildCompButtons();
        btnSaveDrugGroup = btnSave;
        btnSaveDrugGroup.setText(Messages.getString("adddruggroup.group.savedrug.title")); //$NON-NLS-1$
    }

    /**
     * This method initializes compInstructions
     * 
     */
    private void createCompInstructions() {
        compInstructions = new Composite(getShell(), SWT.NONE);
        compInstructions.setBounds(new Rectangle(250, 80, 300, 20));

        lblInstructions = new Label(compInstructions, SWT.CENTER);
        lblInstructions.setBounds(new org.eclipse.swt.graphics.Rectangle(0, 1, 300, 18));
        lblInstructions.setText(Messages.getString("adddruggroup.label.instructions.title")); //$NON-NLS-1$
        lblInstructions.setFont(ResourceUtils.getFont(iDartFont.VERASANS_10_ITALIC));
    }

    /**
     * This method initializes grpParticulars
     * 
     */
    private void createRegimenGroup() {

        // grpParticulars
        grpRegimen = new Group(getShell(), SWT.NONE);
        grpRegimen.setBounds(new Rectangle(100, 135, 600, 130));
        grpRegimen.setText(Messages.getString("adddruggroup.label.regimen.title")); //$NON-NLS-1$
        grpRegimen.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

        // Drug Group Name
        lblDrugGroupName = new Label(grpRegimen, SWT.NONE);
        lblDrugGroupName.setBounds(new Rectangle(30, 35, 110, 20));
        lblDrugGroupName.setText(Messages.getString("adddruggroup.label.drugname.title")); //$NON-NLS-1$
        lblDrugGroupName.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        txtDrugGroupName = new Text(grpRegimen, SWT.BORDER);
        txtDrugGroupName.setBounds(new Rectangle(160, 35, 220, 20));
        txtDrugGroupName.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        txtDrugGroupName.addKeyListener(new KeyAdapter() {
            @Override
            public void keyReleased(KeyEvent e) {
                if (e.character == SWT.CR) {
                    cmdSearchWidgetSelected();
                }
            }
        });

        btnSearch = new Button(grpRegimen, SWT.NONE);
        btnSearch.setBounds(new Rectangle(390, 33, 160, 28));
        btnSearch.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        btnSearch.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
            @Override
            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                cmdSearchWidgetSelected();
            }
        });

        // if this is adding a new regimen, set
        if (!isAddnotUpdate) {
            btnSearch.setText(Messages.getString("adddruggroup.button.drugadd.title")); //$NON-NLS-1$
            btnSearch.setToolTipText(Messages.getString("adddruggroup.button.drugadd.tooltip")); //$NON-NLS-1$
        }

        // we're updating a regimen
        else {
            btnSearch.setText(Messages.getString("adddruggroup.button.drugsearch.title")); //$NON-NLS-1$
            btnSearch.setToolTipText(Messages.getString("adddruggroup.button.drugsearch.tooltip")); //$NON-NLS-1$

        }
        // Regimen group
        lblRegimenGroup = new Label(grpRegimen, SWT.NONE);
        lblRegimenGroup.setBounds(new org.eclipse.swt.graphics.Rectangle(30, 70, 110, 20));
        lblRegimenGroup.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        lblRegimenGroup.setText(Messages.getString("adddruggroup.group.regimen.title")); //$NON-NLS-1$

        compRegimenSelect = new Composite(grpRegimen, SWT.NONE);
        compRegimenSelect.setBounds(new Rectangle(160, 70, 400, 40));

        cmbRegimen = new CCombo(compRegimenSelect, SWT.BORDER);
        cmbRegimen.setBounds(new Rectangle(0, 0, 220, 20));
        cmbRegimen.setEditable(false);
        cmbRegimen.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        cmbRegimen.setBackground(ResourceUtils.getColor(iDartColor.WHITE));
        CommonObjects.populateRegimens(getHSession(), cmbRegimen);
        cmbRegimen.setEnabled(false);
    }

    /**
     * This method initializes compButtonsMiddle
     * 
     */
    private void createCompButtonsMiddle() {

        // compButtonsMiddle
        compButtonsMiddle = new Composite(getShell(), SWT.NONE);
        compButtonsMiddle.setBounds(new Rectangle(182, 295, 472, 50));

        // Add Drug button and icon
        lblPicAddDrug = new Label(compButtonsMiddle, SWT.NONE);
        lblPicAddDrug.setBounds(new Rectangle(0, 0, 50, 43));
        lblPicAddDrug.setImage(ResourceUtils.getImage(iDartImage.PRESCRIPTIONADDDRUG));

        btnAddDrug = new Button(compButtonsMiddle, SWT.NONE);
        btnAddDrug.setBounds(new Rectangle(60, 12, 185, 27));
        btnAddDrug.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        btnAddDrug.setText(Messages.getString("adddruggroup.button.adddruggroup.title")); //$NON-NLS-1$
        btnAddDrug.setToolTipText(Messages.getString("adddruggroup.button.adddruggroup.tooltip")); //$NON-NLS-1$
        btnAddDrug.setEnabled(true);
        btnAddDrug.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
            @Override
            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                cmdAddDrugWidgetSelected();
            }
        });
        btnAddDrug.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

        btnRemoveDrug = new Button(compButtonsMiddle, SWT.NONE);
        btnRemoveDrug.setBounds(new Rectangle(268, 12, 185, 28));
        btnRemoveDrug.setText(Messages.getString("adddruggroup.button.drugremove.title")); //$NON-NLS-1$
        lblPicAddDrug.setEnabled(true);
        btnRemoveDrug.setEnabled(true);
        btnAddDrug.setToolTipText(Messages.getString("adddruggroup.button.drugremove.tooltip")); //$NON-NLS-1$
        btnRemoveDrug.addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
            @Override
            public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
                cmdRemoveDrug();
            }
        });
        btnRemoveDrug.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

    }

    /**
     * This method initializes grpDrugs
     * 
     */
    private void createGrpDrugs() {

        grpDrugs = new Group(getShell(), SWT.NONE);
        grpDrugs.setText(Messages.getString("adddruggroup.group.druggrp.title")); //$NON-NLS-1$
        grpDrugs.setBounds(new org.eclipse.swt.graphics.Rectangle(50, 361, 700, 199));
        grpDrugs.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));

        createDrugsTable();
    }

    /**
     * This method initializes tblDrugs
     * 
     */
    private void createDrugsTable() {

        tblDrugs = new Table(grpDrugs, SWT.FULL_SELECTION);
        tblDrugs.setLinesVisible(true);
        tblDrugs.setBounds(new org.eclipse.swt.graphics.Rectangle(22, 25, 655, 160));
        tblDrugs.setFont(ResourceUtils.getFont(iDartFont.VERASANS_8));
        tblDrugs.setHeaderVisible(true);

        // clmSpace
        clmSpace = new TableColumn(tblDrugs, SWT.NONE);
        clmSpace.setWidth(28);
        clmSpace.setText(Messages.getString("adddruggroup.table.clmspace.title")); //$NON-NLS-1$

        // clmDrugName
        clmDrugName = new TableColumn(tblDrugs, SWT.NONE);
        clmDrugName.setText(Messages.getString("adddruggroup.table.clmdrugname.title")); //$NON-NLS-1$
        clmDrugName.setWidth(235);
        clmDrugName.setResizable(false);

        // clmTake
        clmTake = new TableColumn(tblDrugs, SWT.NONE);
        clmTake.setWidth(40);
        // clmTake.setText("Directions");
        clmTake.setResizable(false);

        // clmAmt
        clmAmt = new TableColumn(tblDrugs, SWT.NONE);
        // clmAmt.setText("Amount");
        clmAmt.setWidth(40);
        clmAmt.setResizable(false);

        // tblDescription
        tblDescription = new TableColumn(tblDrugs, SWT.NONE);
        tblDescription.setWidth(70);
        tblDescription.setResizable(false);

        // tblPerDay
        tblPerDay = new TableColumn(tblDrugs, SWT.NONE);
        tblPerDay.setWidth(30);
        tblPerDay.setResizable(false);

        // tblTPD
        tblTPD = new TableColumn(tblDrugs, SWT.NONE);
        tblTPD.setWidth(95);
        tblTPD.setResizable(false);

    }

    /**
     * This method initializes compButtons
     * 
     * @return Regimen
     */

    private Regimen getLocalRegimen() {
        Regimen regToSave = new Regimen();
        // NOT NULL only upon regimen UPDATE.
        // Therefore, id on NEW regimen not needed.
        if (localRegimen != null) {
            regToSave.setId(localRegimen.getId());
        }
        regToSave.setDrugGroup(cmbRegimen.getText().trim());
        regToSave.setModified('T');
        regToSave.setNotes(EMPTY);
        regToSave.setRegimenName(txtDrugGroupName.getText().trim());
        List<RegimenDrugs> regimenDrugsList = new ArrayList<RegimenDrugs>();
        // Save the regimen Drugs
        for (int i = 0; i < tblDrugs.getItemCount(); i++) {
            TableItem tmpItem = tblDrugs.getItem(i);
            RegimenDrugs oldRD = (RegimenDrugs) tmpItem.getData();
            RegimenDrugs newRD = new RegimenDrugs();
            newRD.setAmtPerTime(oldRD.getAmtPerTime());
            newRD.setDrug(oldRD.getDrug());
            newRD.setModified(oldRD.getModified());
            newRD.setRegimen(regToSave);
            newRD.setTimesPerDay(oldRD.getTimesPerDay());
            regimenDrugsList.add(newRD);
        }
        regToSave.setRegimenDrugs(regimenDrugsList);
        return regToSave;
    }

    @Override
    protected void cmdSaveWidgetSelected() {

        Transaction tx = null;
        tx = getHSession().beginTransaction();

        Regimen regToSave = getLocalRegimen();

        if (!isAddnotUpdate && !changesMade(regToSave)) {
            MessageBox mSave = new MessageBox(getShell(), SWT.ICON_INFORMATION | SWT.OK);
            mSave.setText(Messages.getString("adddruggroup.label.msave.title")); //$NON-NLS-1$
            mSave.setMessage(Messages.getString("adddruggroup.msave.message")); //$NON-NLS-1$
            mSave.open();

            return;
        }

        // Check if all the fields are filled in
        if (fieldsOk()) {

            MessageBox mSave = new MessageBox(getShell(), SWT.ICON_QUESTION | SWT.YES | SWT.NO);
            mSave.setText(isAddnotUpdate ? Messages.getString("adddruggroup.msave.title") //$NON-NLS-1$
                    : Messages.getString("adddruggroup.msave.text")); //$NON-NLS-1$
            mSave.setMessage(isAddnotUpdate ? Messages.getString("adddruggroup.msave.ifmessage") //$NON-NLS-1$
                    : Messages.getString("adddruggroup.msave.errormessage")); //$NON-NLS-1$
            switch (mSave.open()) {

            case SWT.YES: {
                try {

                    boolean isDrugIdentical = DrugManager.regimenDrugsIdentical(getHSession(), regToSave);

                    boolean isDrugDuplicated = DrugManager.regimenDrugsDuplicated(regToSave);

                    if (isDrugIdentical) {
                        MessageBox m = new MessageBox(getShell(), SWT.OK | SWT.ICON_ERROR);
                        m.setText(Messages.getString("adddruggroup.m.message.title")); //$NON-NLS-1$
                        m.setMessage(Messages.getString("adddruggroup.m.message.label")); //$NON-NLS-1$
                        m.open();
                        if (tx != null) {
                            tx.rollback();
                        }

                    } else if (isDrugDuplicated) {
                        MessageBox m = new MessageBox(getShell(), SWT.OK | SWT.ICON_ERROR);
                        m.setText(Messages.getString("adddruggroup.m.message.title")); //$NON-NLS-1$
                        m.setMessage(Messages.getString("adddruggroup.m.message.duplicate")); //$NON-NLS-1$
                        m.open();
                        if (tx != null) {
                            tx.rollback();
                        }
                    }

                    else {

                        // Remove old copy of localRegimen, so proper update is
                        // possible.
                        if (tx.isActive())
                            if (localRegimen != null) {
                                DeletionsManager.removeRegimen(getHSession(), localRegimen);
                                localRegimen = null;
                            }

                        DrugManager.saveRegimen(getHSession(), regToSave);
                        getHSession().flush();
                        tx.commit();

                        MessageBox m = new MessageBox(getShell(), SWT.OK | SWT.ICON_INFORMATION);
                        m.setText(Messages.getString("adddruggroup.m.message.update")); //$NON-NLS-1$
                        m.setMessage(MessageFormat.format(Messages.getString("adddruggroup.drug.remove"),
                                regToSave.getRegimenName()));
                        m.open();
                        cmdCancelWidgetSelected();
                    }

                } catch (HibernateException he) {
                    MessageBox m = new MessageBox(getShell(), SWT.OK | SWT.ICON_ERROR);
                    m.setText(Messages.getString("adddruggroup.m.message.title")); //$NON-NLS-1$
                    m.setMessage(Messages.getString("adddruggroup.m.messageregimen.title")); //$NON-NLS-1$
                    m.open();
                    if (tx != null) {
                        tx.rollback();
                    }

                    getLog().error(Messages.getString("adddruggroup.m.message.title"), he); //$NON-NLS-1$
                    clearForm();
                }
                break;
            }
            case SWT.NO:
                // Close the form
                cmdCancelWidgetSelected();
                break;
            }
        }
    }

    /**
     * Method to displose screen when cancel button is pressed
     * 
     */
    @Override
    protected void cmdCancelWidgetSelected() {
        closeShell(true);

    }

    @Override
    protected void cmdClearWidgetSelected() {

        clearForm();

    }

    @Override
    protected void clearForm() {

        txtDrugGroupName.setText(EMPTY); //$NON-NLS-1$
        txtDrugGroupName.setFocus();

        cmbRegimen.setText(EMPTY); //$NON-NLS-1$
        cmbRegimen.setEnabled(false);

        tblDrugs.clearAll();
        tblDrugs.removeAll();
        tblDrugs.setItemCount(0);
        intDrugTableSize = 1;

        localRegimen = null;
        enableFields(false);

    }

    /**
     * checks the form for valid fields entries
     * 
     * @return true if the requiResourceUtils.getColor(iDartColor.RED) fields
     *         are filled in
     */
    @Override
    protected boolean fieldsOk() {

        boolean result = true;

        if (!isAddNotUpdate() && (cmbRegimen.getText() == null || EMPTY.equals(cmbRegimen.getText()))) { //$NON-NLS-1$
            MessageBox missing = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
            missing.setText(Messages.getString("adddruggroup.drug.group.error")); //$NON-NLS-1$
            missing.setMessage(Messages.getString("adddruggroup.drug.group.update")); //$NON-NLS-1$
            missing.open();
            txtDrugGroupName.setFocus();
            result = false;
            result = false;
            return result;
        }
        if (txtDrugGroupName.getText().trim().equals(EMPTY)) { //$NON-NLS-1$
            MessageBox missing = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
            missing.setText(Messages.getString("adddruggroup.drug.group.reenter")); //$NON-NLS-1$
            missing.setMessage(Messages.getString("adddruggroup.drug.group.blank")); //$NON-NLS-1$
            missing.open();
            txtDrugGroupName.setFocus();
            result = false;
        }

        else if ((!isAddnotUpdate
                && !(localRegimen.getRegimenName().equalsIgnoreCase(txtDrugGroupName.getText().trim())))
                && DrugManager.regimenNameExists(getHSession(), txtDrugGroupName.getText().trim())) {
            MessageBox duplicate = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
            duplicate.setText(Messages.getString("adddruggroup.duplicate.blank")); //$NON-NLS-1$
            duplicate.setMessage(Messages.getString("adddruggroup.duplicate.update")); //$NON-NLS-1$
            duplicate.open();
            txtDrugGroupName.setFocus();
            result = false;

        } else if (cmbRegimen.getText().isEmpty()) {
            MessageBox noRegimen = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
            noRegimen.setText(Messages.getString("adddruggroup.regimen.blank")); //$NON-NLS-1$
            noRegimen.setMessage(Messages.getString("adddruggroup.regimen.error")); //$NON-NLS-1$
            noRegimen.open();
            cmbRegimen.setFocus();
            result = false;
        }

        else if (tblDrugs.getItemCount() == 0) {
            MessageBox noDrugsAdded = new MessageBox(getShell(), SWT.ICON_ERROR | SWT.OK);
            noDrugsAdded.setText(Messages.getString("adddruggroup.drug.added")); //$NON-NLS-1$
            noDrugsAdded.setMessage(Messages.getString("adddruggroup.drug.update")); //$NON-NLS-1$
            noDrugsAdded.open();
            btnAddDrug.setFocus();
            result = false;

        }
        return result;
    }

    /**
     * This method is called when the user presses the "Add Drug to this
     * Regimen" button.
     * 
     */

    private void cmdAddDrugWidgetSelected() {

        // Add a new table item
        TableItem ti = new TableItem(tblDrugs, SWT.NONE);
        PrescriptionObject myPrescriptionObject = new PrescriptionObject(getHSession(), ti, true, getShell());
        ti.setText(0, (Integer.toString(tblDrugs.getItemCount())));
        myPrescriptionObject.setTableItem(ti);
        intDrugTableSize = tblDrugs.getItemCount();

    }

    /**
     * This method is called if the user clicks on a row in the drugs table. The
     * user is then asked if they want to delete the drug that they've selected.
     * 
     */
    private void cmdRemoveDrug() {

        TableItem[] ti = tblDrugs.getSelection();

        if (ti != null) {
            String drug = ti[0].getText(1);
            boolean questionResponse = showMessage(MessageDialog.QUESTION,
                    MessageFormat.format(Messages.getString("adddruggroup.drug.remove"), drug), //$NON-NLS-1$
                    MessageFormat.format(Messages.getString("adddruggroup.comfirmation.drug.remove"), drug)); //$NON-NLS-1$
            if (questionResponse) {
                // Delete from Regimen
                int index = tblDrugs.getSelectionIndex();
                tblDrugs.remove(index);
                for (int i = index; i < tblDrugs.getItemCount(); i++) {
                    TableItem oti = tblDrugs.getItem(i);
                    int number = Integer.parseInt(oti.getText(0));
                    number--;
                    oti.setText(0, String.valueOf(number)); //$NON-NLS-1$
                }
                intDrugTableSize--;
            }
        }

    }

    /**
     * indicates if this GUI is being used to add a new regimen or used to
     * update an existing regimen
     * 
     * @return boolean
     */
    public boolean isAddNotUpdate() {
        return isAddnotUpdate;
    }

    private void cmdSearchWidgetSelected() {

        // if user is adding a new drug group, then check the drug group name
        if (isAddnotUpdate) {

            if (txtDrugGroupName.getText().trim().equals(EMPTY)) { //$NON-NLS-1$
                MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR);
                mb.setText(Messages.getString("adddruggroup.drug.entered")); //$NON-NLS-1$

                mb.setMessage(Messages.getString("adddruggroup.drug.enetered.error")); //$NON-NLS-1$
                mb.open();
                txtDrugGroupName.setFocus();
            }

            else if (DrugManager.regimenNameExists(getHSession(), txtDrugGroupName.getText().trim())) {
                MessageBox mb = new MessageBox(getShell(), SWT.ICON_ERROR);
                mb.setText(Messages.getString("adddruggroup.drug.grp.exists")); //$NON-NLS-1$
                mb.setMessage(MessageFormat.format(Messages.getString("adddruggroup.drug.grp.name"), //$NON-NLS-1$
                        txtDrugGroupName.getText().trim()));
                mb.open();
                txtDrugGroupName.setFocus();
            } else {
                enableFields(true);
            }

        }

        // else, we're updating an existing drug group, so open up a search GUI
        else {
            Search regimenSearch = new Search(getHSession(), getShell(), CommonObjects.REGIMEN);

            if (regimenSearch.getValueSelected() != null) {
                clearForm();
                localRegimen = DrugManager.getRegimen(getHSession(), regimenSearch.getValueSelected()[0]);
                loadRegimenDetails();
                loadRegimenDrugs();
                enableFields(true);
            }

            // if we've returned from the search GUI with the user having
            // pressed "cancel", enable the search button
            else {
                enableFields(false);
                txtDrugGroupName.setFocus();
            }

        }

    }

    /**
     * This method loads the details of the regimen into the GUI. It used the
     * localRegimen object to get the values
     * 
     */
    public void loadRegimenDetails() {
        btnSearch.setEnabled(true);
        txtDrugGroupName.setText(localRegimen.getRegimenName());
        cmbRegimen.setEnabled(true);
        cmbRegimen.setText(localRegimen.getDrugGroup());
    }

    /**
     * This method loads the GUI with details from the Prescription object
     * passed to it.
     * 
     */
    private void loadRegimenDrugs() {

        String tempAmtPerTime = EMPTY; //$NON-NLS-1$

        List<RegimenDrugs> drugs = localRegimen.getRegimenDrugs();
        for (Iterator<RegimenDrugs> iter = drugs.iterator(); iter.hasNext();) {

            RegimenDrugs rd = iter.next();
            Drug theDrug = rd.getDrug();
            Form theForm = theDrug.getForm();

            if (theForm.getFormLanguage1().equals(EMPTY)) //$NON-NLS-1$
            // is a cream - no amnt per time
            {
                tempAmtPerTime = EMPTY;
            }

            else {
                if (new BigDecimal(rd.getAmtPerTime()).scale() == 0) {
                    tempAmtPerTime = String.valueOf(new BigDecimal(rd.getAmtPerTime()).unscaledValue().intValue());
                } else {
                    tempAmtPerTime = String.valueOf(rd.getAmtPerTime());
                }
            }

            TableItem ti = new TableItem(tblDrugs, SWT.NONE);
            String[] temp = new String[8];
            temp[0] = String.valueOf(intDrugTableSize);
            // temp[1] = "0";
            temp[1] = theDrug.getName();
            temp[2] = theForm.getActionLanguage1();
            temp[3] = tempAmtPerTime;
            temp[4] = theForm.getFormLanguage1();
            temp[5] = String.valueOf(rd.getTimesPerDay());
            temp[6] = Messages.getString("adddruggroup.drug.times"); //$NON-NLS-1$

            ti.setText(temp);
            ti.setData(rd);
            intDrugTableSize += 1;

        }
    }

    /**
     * Method enableFields.
     * 
     * @param enable
     *            boolean
     */
    @Override
    protected void enableFields(boolean enable) {
        cmbRegimen.setEnabled(enable);
        lblPicAddDrug.setEnabled(enable);
        btnAddDrug.setEnabled(enable);
        btnRemoveDrug.setEnabled(enable);
        btnSearch.setEnabled(!enable);
        btnSaveDrugGroup.setEnabled(enable);

        if (enable) {
            tblDrugs.setBackground(ResourceUtils.getColor(iDartColor.WHITE));
        } else {
            tblDrugs.setBackground(ResourceUtils.getColor(iDartColor.WIDGET_LIGHT_SHADOW_BACKGROUND));
        }
    }

    /**
     * This method closes and reopens a session. It should be used in screens
     * that don't close after a write
     * 
     */
    public void closeAndReopenSession() {

        try {
            if (getHSession() != null) {
                getHSession().close();
            }
            setHSession(HibernateUtil.getNewSession());
        } catch (HibernateException he) {
            getLog().error(he);
            he.printStackTrace();
        }
    }

    /**
     * Method submitForm.
     * 
     * @return boolean
     */
    @Override
    protected boolean submitForm() {
        return false;
    }

    @Override
    protected void setLogger() {
        Logger log = Logger.getLogger(this.getClass());
        setLog(log);
    }

    /**
     * 
     * @param newRegimen
     * @return
     */
    private boolean changesMade(Regimen newRegimen) {
        if (!newRegimen.getRegimenName().equalsIgnoreCase(localRegimen.getRegimenName())) {
            return true;
        } else if (!newRegimen.getDrugGroup().equalsIgnoreCase(localRegimen.getDrugGroup())) {
            return true;
        } else if (!newRegimen.getRegimenDrugs().containsAll(localRegimen.getRegimenDrugs())
                && newRegimen.getRegimenDrugs().size() != localRegimen.getRegimenDrugs().size()) {
            return true;
        }
        return false;

    }

}