us.mn.state.health.lims.audittrail.action.workers.AuditTrailViewWorker.java Source code

Java tutorial

Introduction

Here is the source code for us.mn.state.health.lims.audittrail.action.workers.AuditTrailViewWorker.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.audittrail.action.workers;

import org.apache.commons.validator.GenericValidator;
import us.mn.state.health.lims.analysis.dao.AnalysisDAO;
import us.mn.state.health.lims.analysis.daoimpl.AnalysisDAOImpl;
import us.mn.state.health.lims.analysis.valueholder.Analysis;
import us.mn.state.health.lims.common.services.PatientService;
import us.mn.state.health.lims.common.services.SampleOrderService;
import us.mn.state.health.lims.common.services.historyservices.*;
import us.mn.state.health.lims.common.util.StringUtil;
import us.mn.state.health.lims.patient.action.bean.PatientManagementBridge;
import us.mn.state.health.lims.patient.action.bean.PatientManagementInfo;
import us.mn.state.health.lims.patient.util.PatientUtil;
import us.mn.state.health.lims.patient.valueholder.Patient;
import us.mn.state.health.lims.result.dao.ResultDAO;
import us.mn.state.health.lims.result.daoimpl.ResultDAOImpl;
import us.mn.state.health.lims.result.valueholder.Result;
import us.mn.state.health.lims.sample.bean.SampleOrderItem;
import us.mn.state.health.lims.sample.daoimpl.SampleDAOImpl;
import us.mn.state.health.lims.sample.valueholder.Sample;

import java.util.*;

public class AuditTrailViewWorker {

    private AnalysisDAO analysisDAO = new AnalysisDAOImpl();
    private ResultDAO resultDAO = new ResultDAOImpl();
    private String accessionNumber = null;
    private Sample sample;

    public AuditTrailViewWorker(String accessionNumber) {
        this.accessionNumber = accessionNumber;
        sample = null;
    }

    public List<AuditTrailItem> getAuditTrail() throws IllegalStateException {
        if (GenericValidator.isBlankOrNull(accessionNumber)) {
            throw new IllegalStateException("AuditTrialViewWorker is not initialized");
        }

        getSample();

        List<AuditTrailItem> items = new ArrayList<AuditTrailItem>();

        if (sample != null) {
            items.addAll(addOrders());
            items.addAll(addSamples());
            items.addAll(addTestsAndResults());
            items.addAll(addReports());
            items.addAll(addPatientHistory());
            items.addAll(addNotes());
            items.addAll(addQAEvents());
        }

        sortItemsByTime(items);
        return items;
    }

    public SampleOrderItem getSampleOrderSnapshot() {
        if (GenericValidator.isBlankOrNull(accessionNumber)) {
            throw new IllegalStateException("AuditTrialViewWorker is not initialized");
        }

        SampleOrderService orderService = new SampleOrderService(accessionNumber, true);
        return orderService.getSampleOrderItem();
    }

    public PatientManagementInfo getPatientSnapshot() {
        if (GenericValidator.isBlankOrNull(accessionNumber)) {
            throw new IllegalStateException("AuditTrialViewWorker is not initialized");
        }

        getSample();

        if (sample != null) {
            PatientService patientService = new PatientService(sample);
            return new PatientManagementBridge().getPatientManagementInfoFor(patientService.getPatient(), true);
        } else {
            return new PatientManagementInfo();
        }
    }

    public List<AuditTrailItem> getPatientHistoryAuditTrail() throws IllegalStateException {
        if (GenericValidator.isBlankOrNull(accessionNumber)) {
            throw new IllegalStateException("AuditTrialViewWorker is not initialized");
        }

        getSample();

        List<AuditTrailItem> items = new ArrayList<AuditTrailItem>();

        if (sample != null) {
            items.addAll(addPatientHistory());
        }
        return items;

    }

    private void getSample() {
        if (sample == null) {
            sample = new SampleDAOImpl().getSampleByAccessionNumber(accessionNumber);
        }
    }

    private Collection<AuditTrailItem> addReports() {
        List<AuditTrailItem> items = new ArrayList<AuditTrailItem>();

        if (sample != null) {
            HistoryService historyService = new ReportHistoryService(sample);
            items.addAll(historyService.getAuditTrailItems());

            //sortItemsByTime(items);
        }

        for (AuditTrailItem auditTrailItem : items) {
            auditTrailItem.setClassName("reportAudit");
            setAttributeNewIfInsert(auditTrailItem);
        }
        return items;
    }

    private Collection<AuditTrailItem> addSamples() {
        List<AuditTrailItem> sampleItems = new ArrayList<AuditTrailItem>();
        if (sample != null) {
            HistoryService historyService = new SampleHistoryService(sample);
            sampleItems.addAll(historyService.getAuditTrailItems());

            //sortItems(sampleItems);

            for (AuditTrailItem auditTrailItem : sampleItems) {
                auditTrailItem.setClassName("sampleAudit");
                setAttributeNewIfInsert(auditTrailItem);
            }
        }

        return sampleItems;
    }

    private Collection<AuditTrailItem> addOrders() {
        List<AuditTrailItem> orderItems = new ArrayList<AuditTrailItem>();
        if (sample != null) {
            HistoryService historyService = new OrderHistoryService(sample);
            orderItems.addAll(historyService.getAuditTrailItems());

            //sortItems(orderItems);

            for (AuditTrailItem auditTrailItem : orderItems) {
                auditTrailItem.setClassName("orderAudit");
                setAttributeNewIfInsert(auditTrailItem);
            }
        }

        return orderItems;
    }

    private void setAttributeNewIfInsert(AuditTrailItem auditTrailItem) {
        if (auditTrailItem.getAction().equals("I")) {
            auditTrailItem.setAttribute(StringUtil.getMessageForKey("auditTrail.action.new"));
        }
    }

    private List<AuditTrailItem> addTestsAndResults() {
        List<AuditTrailItem> items = new ArrayList<AuditTrailItem>();

        List<Analysis> analysisList = analysisDAO.getAnalysesBySampleId(sample.getId());

        for (Analysis analysis : analysisList) {
            List<Result> resultList = resultDAO.getResultsByAnalysis(analysis);
            HistoryService historyService = new AnalysisHistoryService(analysis);
            List<AuditTrailItem> resultItems = historyService.getAuditTrailItems();
            items.addAll(resultItems);

            for (Result result : resultList) {
                historyService = new ResultHistoryService(result, analysis);
                resultItems = historyService.getAuditTrailItems();

                items.addAll(resultItems);
            }
        }

        //sortItems(items);
        for (AuditTrailItem auditTrailItem : items) {
            auditTrailItem.setClassName("testResultAudit");
            setAttributeNewIfInsert(auditTrailItem);
        }
        return items;
    }

    private Collection<AuditTrailItem> addPatientHistory() {
        List<AuditTrailItem> items = new ArrayList<AuditTrailItem>();
        Patient patient = PatientUtil.getPatientForSample(sample);

        HistoryService historyService = new PatientHistoryService(patient);
        items.addAll(historyService.getAuditTrailItems());

        //      historyService = new HistoryService(sample, HistoryType.PERSON);
        //      items.addAll(historyService.getAuditTrailItems());

        historyService = new PatientHistoryHistoryService(sample);
        items.addAll(historyService.getAuditTrailItems());

        //sortItems(items);

        for (AuditTrailItem auditTrailItem : items) {
            auditTrailItem.setClassName("patientHistoryAudit");
            setAttributeNewIfInsert(auditTrailItem);
        }

        return items;
    }

    private Collection<AuditTrailItem> addNotes() {
        List<AuditTrailItem> notes = new ArrayList<AuditTrailItem>();
        if (sample != null) {
            HistoryService historyService = new NoteHistoryService(sample);
            notes.addAll(historyService.getAuditTrailItems());

            //sortItems(notes);

            for (AuditTrailItem auditTrailItem : notes) {
                auditTrailItem.setClassName("noteAudit");
                setAttributeNewIfInsert(auditTrailItem);
            }
        }

        return notes;
    }

    private Collection<AuditTrailItem> addQAEvents() {
        List<AuditTrailItem> qaEvents = new ArrayList<AuditTrailItem>();
        if (sample != null) {
            QaHistoryService qaService = new QaHistoryService(sample);
            qaEvents = qaService.getAuditTrailItems();

            for (AuditTrailItem auditTrailItem : qaEvents) {
                auditTrailItem.setClassName("qaEvent");
                setAttributeNewIfInsert(auditTrailItem);
            }
        }

        return qaEvents;
    }

    private void sortItems(List<AuditTrailItem> items) {
        Collections.sort(items, new Comparator<AuditTrailItem>() {
            @Override
            public int compare(AuditTrailItem o1, AuditTrailItem o2) {
                int sort = o1.getIdentifier().compareTo(o2.getIdentifier());
                if (sort != 0) {
                    return sort;
                }

                sort = o1.getTimeStamp().compareTo(o2.getTimeStamp());
                if (sort != 0) {
                    return sort;
                }

                return o1.getAction().compareTo(o2.getAction());
            }
        });
    }

    private void sortItemsByTime(List<AuditTrailItem> items) {
        Collections.sort(items, new Comparator<AuditTrailItem>() {
            @Override
            public int compare(AuditTrailItem o1, AuditTrailItem o2) {
                return o1.getTimeStamp().compareTo(o2.getTimeStamp());
            }
        });
    }

}