gov.nih.nci.ess.ae.DomainToGridObjectConverter.java Source code

Java tutorial

Introduction

Here is the source code for gov.nih.nci.ess.ae.DomainToGridObjectConverter.java

Source

/*******************************************************************************
 * Copyright SemanticBits, Northwestern University and Akaza Research
 * 
 * Distributed under the OSI-approved BSD 3-Clause License.
 * See http://ncip.github.com/caaers/LICENSE.txt for details.
 ******************************************************************************/
package gov.nih.nci.ess.ae;

import ess.caaers.nci.nih.gov.AdverseEvent;
import ess.caaers.nci.nih.gov.AdverseEventSeriousness;
import ess.caaers.nci.nih.gov.AeTerminology;
import ess.caaers.nci.nih.gov.AuditTrail;
import ess.caaers.nci.nih.gov.AuditTrailValue;
import ess.caaers.nci.nih.gov.SolicitedAdverseEvent;
import gov.nih.nci.cabig.caaers.dao.CtcTermDao;
import gov.nih.nci.cabig.caaers.dao.meddra.LowLevelTermDao;
import gov.nih.nci.cabig.caaers.domain.AdverseEventCtcTerm;
import gov.nih.nci.cabig.caaers.domain.CtcTerm;
import gov.nih.nci.cabig.caaers.domain.Hospitalization;
import gov.nih.nci.cabig.caaers.domain.Outcome;
import gov.nih.nci.cabig.caaers.domain.TimeValue;
import gov.nih.nci.cabig.caaers.domain.meddra.LowLevelTerm;
import gov.nih.nci.cabig.ctms.audit.domain.AuditHistory;
import gov.nih.nci.cabig.ctms.audit.domain.AuditHistoryDetail;

import java.text.ParseException;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import org.apache.commons.lang.time.DateFormatUtils;
import org.apache.commons.lang.time.DateUtils;

import _21090.org.iso.CD;
import _21090.org.iso.NullFlavor;
import _21090.org.iso.TSDateTime;

public class DomainToGridObjectConverter {

    private static final String TS_DATETIME_PATTERN = "yyyyMMddHHmmss";
    private static final ISO21090Helper h = null;

    private CtcTermDao ctcTermDao;
    private LowLevelTermDao lowLevelTermDao;

    private Date convert(TSDateTime tsDateTime) {
        try {
            if (tsDateTime != null && tsDateTime.getNullFlavor() == null) {
                String value = tsDateTime.getValue();
                if (value != null) {
                    return DateUtils.parseDate(value, new String[] { TS_DATETIME_PATTERN });
                }
            }
        } catch (ParseException e) {
            e.printStackTrace();
        }
        return null;
    }

    private TSDateTime convert(Date date) {
        TSDateTime tsDateTime = new TSDateTime();
        if (date != null) {
            tsDateTime.setValue(DateFormatUtils.format(date, TS_DATETIME_PATTERN));
        } else {
            tsDateTime.setNullFlavor(NullFlavor.NI);
        }
        return tsDateTime;

    }

    private TimeValue convertToTimeValue(TSDateTime tsDateTime) {
        TimeValue t = new TimeValue();
        try {
            if (tsDateTime != null && tsDateTime.getNullFlavor() == null) {
                String value = tsDateTime.getValue();
                String[] values = value.split(":");
                if (values.length == 3) {
                    t.setHourString(values[0]);
                    t.setMinuteString(values[1]);
                    String type = values[2];
                    if ("AM".equals(type)) {
                        t.setType(0);
                    } else {
                        t.setType(1);
                    }
                    return t;
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        System.out.println("test");
    }

    public void setCtcTermDao(CtcTermDao ctcTermDao) {
        this.ctcTermDao = ctcTermDao;
    }

    public void setLowLevelTermDao(LowLevelTermDao lowLevelTermDao) {
        this.lowLevelTermDao = lowLevelTermDao;
    }

    public AdverseEvent convertAdverseEvent(gov.nih.nci.cabig.caaers.domain.AdverseEvent ae) {
        AdverseEvent gridAE = new AdverseEvent();
        gridAE.setIdentifier(h.II(ae.getId().toString()));
        gridAE.setComment(h.ST(ae.getComments()));
        gridAE.setResolutionDate(convert(ae.getEndDate()));
        gridAE.setLocationDescription(h.ST(ae.getEventLocation()));
        gridAE.setExpectedIndicator(h.BL(ae.getExpected()));
        gridAE.setGradeCode(h.CD(ae.getGrade() != null ? ae.getGrade().getCode().toString() : null));
        gridAE.setReportedDate(convert(ae.getGradedDate()));
        if (ae.getHospitalization() != null) {
            gridAE.setHospitalizationRequiredIndicator(h.BL(ae.getHospitalization().equals(Hospitalization.YES)));
        } else {
            gridAE.setHospitalizationRequiredIndicator(h.BL(NullFlavor.NI));
        }
        gridAE.setPostReportUpdateDate(convert(ae.getPostSubmissionUpdatedDate()));
        gridAE.setOnsetDate(convert(ae.getStartDate(), ae.getEventApproximateTime()));
        gridAE.setResult(h.CD(ae.getDetailsForOther()));
        if (ae.getAttributionSummary() != null) {
            gridAE.setProbabilityCode(h.CD(ae.getAttributionSummary().getCode().toString()));
        } else {
            gridAE.setProbabilityCode(h.CD(NullFlavor.NI));
        }
        populateCtcTerm(gridAE, ae);
        populateLowLevelTerm(gridAE, ae);
        populateOutcomes(gridAE, ae);
        return gridAE;
    }

    private void populateOutcomes(AdverseEvent gridAE, gov.nih.nci.cabig.caaers.domain.AdverseEvent ae) {
        List<AdverseEventSeriousness> list = new ArrayList<AdverseEventSeriousness>();
        for (Outcome outcome : ae.getOutcomes()) {
            AdverseEventSeriousness seriousness = new AdverseEventSeriousness();
            final CD cd = h.CD(outcome.getOutcomeType().getCode().toString());
            cd.setOriginalText(h.EDText(outcome.getOther()));
            seriousness.setCode(cd);
            list.add(seriousness);
        }
        gridAE.setAdverseEventSeriousness(list.toArray(new AdverseEventSeriousness[0]));
    }

    private void populateLowLevelTerm(AdverseEvent gridAE, gov.nih.nci.cabig.caaers.domain.AdverseEvent ae) {
        LowLevelTerm llt = ae.getLowLevelTerm();
        if (llt != null) {
            final ess.caaers.nci.nih.gov.LowLevelTerm gridLlt = convert(llt);
            gridAE.setOtherMeddra(gridLlt);
        }

    }

    /**
     * @param llt
     * @return
     */
    public ess.caaers.nci.nih.gov.LowLevelTerm convert(LowLevelTerm llt) {
        final ess.caaers.nci.nih.gov.LowLevelTerm gridLlt = new ess.caaers.nci.nih.gov.LowLevelTerm();
        if (llt != null) {
            gridLlt.setMeddraCode(h.ST(llt.getMeddraCode()));
            gridLlt.setMeddraTerm(h.ST(llt.getMeddraTerm()));
        }
        return gridLlt;
    }

    private void populateCtcTerm(AdverseEvent gridAE, gov.nih.nci.cabig.caaers.domain.AdverseEvent ae) {
        AdverseEventCtcTerm term = ae.getAdverseEventCtcTerm();
        if (term != null) {
            CtcTerm ctcTerm = term.getCtcTerm();
            if (ctcTerm != null) {
                final ess.caaers.nci.nih.gov.CtcTerm gridTerm = convert(ctcTerm);
                gridAE.setAdverseEventCtcTerm(gridTerm);
            }
        }
    }

    /**
     * @param ctcTerm
     * @return
     */
    public ess.caaers.nci.nih.gov.CtcTerm convert(CtcTerm ctcTerm) {
        final ess.caaers.nci.nih.gov.CtcTerm gridTerm = new ess.caaers.nci.nih.gov.CtcTerm();
        if (ctcTerm != null) {
            gridTerm.setCtepTerm(h.CD(ctcTerm.getCtepTerm()));
            gridTerm.setCtepCode(h.CD(ctcTerm.getCtepCode()));
        }
        return gridTerm;
    }

    private TSDateTime convert(TimeValue time) {
        // A day is selected arbitrarily, since it will be ignored anyway. Only
        // hours and minutes matter.
        return convert(new Date(0), time);
    }

    private TSDateTime convert(Date day, TimeValue time) {
        if (time == null || time.isBlank()) {
            return convert(day);
        }
        day = day == null ? new Date(0) : day;
        // My apologies for the less readable expression below.
        return convert(
                DateUtils
                        .setMinutes(
                                DateUtils.setHours(day,
                                        time.isAM() ? (time.getHour() == 12 ? 0 : time.getHour())
                                                : (time.getHour() == 12 ? 12 : time.getHour() + 12)),
                                time.getMinute()));
    }

    public AuditTrail convert(AuditHistory his) {
        AuditTrail trail = new AuditTrail();
        trail.setUrl(h.ST(his.getUrl()));
        trail.setUserName(h.ST(his.getUsername()));
        trail.setIpAddress(h.ST(his.getIp()));
        trail.setRecordedTime(convert(his.getTime()));
        trail.setObjectName(h.ST(his.getClassName()));
        trail.setObjectId(h.ST(his.getEntityId()));
        trail.setOperation(h.ST(his.getOperation() != null ? his.getOperation().name() : null));
        trail.setIdentifier(h.II(his.getAuditEventId()));

        List<AuditTrailValue> list = new ArrayList<AuditTrailValue>();
        for (AuditHistoryDetail detail : his.getAuditHistoryDetails()) {
            list.add(convert(detail));
        }
        trail.setValues(list.toArray(new AuditTrailValue[0]));
        return trail;
    }

    public AuditTrailValue convert(AuditHistoryDetail detail) {
        AuditTrailValue v = new AuditTrailValue();
        v.setAttributeName(h.ST(detail.getAttributeName()));
        v.setPreviousValue(h.ST(detail.getPreviousValue()));
        v.setNewValue(h.ST(detail.getCurrentValue()));
        return v;
    }

    public AeTerminology convert(gov.nih.nci.cabig.caaers.domain.AeTerminology aeTerminology) {
        AeTerminology gridTerm = new AeTerminology();
        if (aeTerminology.getTerm() != null) {
            gridTerm.setTermCode(h.II(aeTerminology.getTerm().name()));
        }
        if (aeTerminology.getCtcVersion() != null) {
            gridTerm.setTermVersion(h.II(aeTerminology.getCtcVersion().getName()));
        }
        if (aeTerminology.getMeddraVersion() != null) {
            gridTerm.setMeddra(h.II(aeTerminology.getMeddraVersion().getName()));
        }
        return gridTerm;
    }

    public SolicitedAdverseEvent convert(gov.nih.nci.cabig.caaers.domain.SolicitedAdverseEvent ae) {
        SolicitedAdverseEvent gridAe = new SolicitedAdverseEvent();
        if (ae.getCtcterm() != null) {
            gridAe.setCtcTerm(convert(ae.getCtcterm()));
        }
        if (ae.getLowLevelTerm() != null) {
            gridAe.setLowLevelTerm(convert(ae.getLowLevelTerm()));
        }
        return gridAe;
    }

}