us.mn.state.health.lims.reports.action.implementation.RetroCIPatientAssociatedReport.java Source code

Java tutorial

Introduction

Here is the source code for us.mn.state.health.lims.reports.action.implementation.RetroCIPatientAssociatedReport.java

Source

/**
 * The contents of this file are subject to the Mozilla Public License
 * Version 1.1 (the "License"); you may not use this file except in
 * compliance with the License. You may obtain a copy of the License at
 * http://www.mozilla.org/MPL/ 
 * 
 * Software distributed under the License is distributed on an "AS IS"
 * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
 * License for the specific language governing rights and limitations under
 * the License.
 * 
 * The Original Code is OpenELIS code.
 * 
 * Copyright (C) ITECH, University of Washington, Seattle WA.  All Rights Reserved.
 *
 */
package us.mn.state.health.lims.reports.action.implementation;

import java.lang.reflect.InvocationTargetException;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.beanutils.PropertyUtils;

import us.mn.state.health.lims.common.action.BaseActionForm;
import us.mn.state.health.lims.common.services.QAService;
import us.mn.state.health.lims.common.util.StringUtil;
import us.mn.state.health.lims.observationhistory.dao.ObservationHistoryDAO;
import us.mn.state.health.lims.observationhistory.daoimpl.ObservationHistoryDAOImpl;
import us.mn.state.health.lims.observationhistory.valueholder.ObservationHistory;
import us.mn.state.health.lims.observationhistorytype.ObservationHistoryTypeMap;
import us.mn.state.health.lims.patient.valueholder.Patient;
import us.mn.state.health.lims.sample.util.CI.BaseProjectFormMapper;
import us.mn.state.health.lims.sample.valueholder.Sample;
import us.mn.state.health.lims.samplehuman.daoimpl.SampleHumanDAOImpl;

public class RetroCIPatientAssociatedReport extends CollectionReport implements IReportParameterSetter {

    private ObservationHistoryDAO ohDAO = new ObservationHistoryDAOImpl();

    @Override
    public void setRequestParameters(BaseActionForm dynaForm) {
        try {
            PropertyUtils.setProperty(dynaForm, "reportName",
                    StringUtil.getMessageForKey("patient.report.associated.name"));
            PropertyUtils.setProperty(dynaForm, "usePatientNumberDirect", Boolean.TRUE);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected List<byte[]> generateReports() {
        List<byte[]> byteList = new ArrayList<byte[]>();

        Patient patient = getPatient();

        if (patient != null) {
            String formNameId = ObservationHistoryTypeMap.getInstance().getIDForType("projectFormName");
            List<Sample> samples = new SampleHumanDAOImpl().getSamplesForPatient(patient.getId());

            for (Sample sample : samples) {
                List<ObservationHistory> projects = ohDAO.getAll(patient, sample, formNameId);
                System.out.println("\n" + sample.getAccessionNumber());
                if (!projects.isEmpty()) {
                    setProperty("accessionDirect", sample.getAccessionNumber());

                    if ("InitialARV_Id".equals(projects.get(0).getValue())) {
                        byteList.add(createReport("patientARVInitial1"));
                        byteList.add(createReport("patientARVInitial2"));
                    } else if ("FollowUpARV_Id".equals(projects.get(0).getValue())) {
                        byteList.add(createReport("patientARVFollowup1"));
                        byteList.add(createReport("patientARVFollowup2"));
                    } else if ("RTN_Id".equals(projects.get(0).getValue())) {
                        // no-op
                    } else if ("EID_Id".equals(projects.get(0).getValue())) {
                        byteList.add(createReport("patientEID1"));
                        byteList.add(createReport("patientEID2"));
                    } else if ("Indeterminate_Id".equals(projects.get(0).getValue())) {
                        byteList.add(createReport("patientIndeterminate1"));
                        byteList.add(createReport("patientIndeterminate2"));
                    } else if ("Special_Request_Id".equals(projects.get(0).getValue())) {
                        byteList.add(createReport("patientSpecialReport"));
                    }
                }

                if (QAService.isOrderNonConforming(sample)) {
                    setProperty("lowerDateRange", sample.getReceivedDateForDisplay());
                    byteList.add(createReport("retroCINonConformityByDate"));
                }

                if (isUnderInvestigation(sample)) {
                    setProperty("lowerDateRange", sample.getReceivedDateForDisplay());
                    byteList.add(createReport("retroCIFollowupRequiredByLocation"));
                }
            }
        }
        return byteList;
    }

    private void setProperty(String key, String value) {
        try {
            PropertyUtils.setProperty(dynaForm, key, value);
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (NoSuchMethodException e) {
            e.printStackTrace();
        }
    }

    private boolean isUnderInvestigation(Sample sample) {
        String entryUnderInvestigationQuestion = getOptionalObservationHistory(sample,
                ObservationHistoryTypeMap.getInstance().getIDForType("underInvestigation"));
        return BaseProjectFormMapper.YES_ANSWERS.contains(entryUnderInvestigationQuestion);
    }

    private String getOptionalObservationHistory(Sample sample, String ohTypeId) {
        List<ObservationHistory> oh = ohDAO.getAll(null, sample, ohTypeId);
        if (oh == null || oh.size() == 0)
            return null;
        return oh.get(0).getValue();
    }
}