us.mn.state.health.lims.common.externalLinks.ExternalPatientSearchResultsXMLConverter.java Source code

Java tutorial

Introduction

Here is the source code for us.mn.state.health.lims.common.externalLinks.ExternalPatientSearchResultsXMLConverter.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) The Minnesota Department of Health.  All Rights Reserved.
*
* Contributor(s): CIRG, University of Washington, Seattle WA.
*/
package us.mn.state.health.lims.common.externalLinks;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.GregorianCalendar;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;

import us.mn.state.health.lims.common.provider.query.PatientDemographicsSearchResults;
import us.mn.state.health.lims.common.util.DateUtil;

public class ExternalPatientSearchResultsXMLConverter {

    private static final String ELEMENT_MOTHERS_FIRST_NAME = "mothersFirstName";
    private static final String ATTRIBUTE_YEAR = "year";
    private static final String ATTRIBUTE_MONTH = "month";
    private static final String ATTRIBUTE_DAY = "day";
    private static final String ELEMENT_GUID = "GUID";
    private static final String ELEMENT_DOB = "DOB";
    private static final String ELEMENT_STNUMBER = "STNumber";
    private static final String ELEMENT_NATIONAL_ID = "nationalId";
    private static final String ELEMENT_GENDER = "gender";
    private static final String ELEMENT_LAST_NAME = "lastName";
    private static final String ELEMENT_FIRST_NAME = "firstName";
    private static final String ELEMENT_PATIENT = "Patient";
    private static final String ELEMENT_PATIENTS = "Patients";

    @SuppressWarnings("unchecked")
    public List<PatientDemographicsSearchResults> convertXMLToSearchResults(String resultXML)
            throws DocumentException {
        List<PatientDemographicsSearchResults> searchResults = new ArrayList<PatientDemographicsSearchResults>();

        Document replyDoc = DocumentHelper.parseText(resultXML);
        Element root = replyDoc.getRootElement();

        Element patients = root.element(ELEMENT_PATIENTS);
        List<Element> patientList = patients.elements(ELEMENT_PATIENT);

        for (Element patientElement : patientList) {
            PatientDemographicsSearchResults result = createSearchResult(patientElement);
            searchResults.add(result);
        }

        return searchResults;
    }

    private PatientDemographicsSearchResults createSearchResult(Element patientElement) {

        PatientDemographicsSearchResults result = new PatientDemographicsSearchResults();

        result.setFirstName(getValueFor(patientElement, ELEMENT_FIRST_NAME));
        result.setLastName(getValueFor(patientElement, ELEMENT_LAST_NAME));
        result.setGender(getValueFor(patientElement, ELEMENT_GENDER));
        result.setBirthdate(getDOBFromXML(patientElement));
        result.setNationalId(getValueFor(patientElement, ELEMENT_NATIONAL_ID));
        result.setStNumber(getValueFor(patientElement, ELEMENT_STNUMBER));
        result.setGUID(getValueFor(patientElement, ELEMENT_GUID));
        result.setMothersName(getValueFor(patientElement, ELEMENT_MOTHERS_FIRST_NAME));

        return result;
    }

    private String getDOBFromXML(Element patientElement) {
        Element DOBElement = patientElement.element(ELEMENT_DOB);

        if (DOBElement != null) {
            String day = DOBElement.attributeValue(ATTRIBUTE_DAY);
            String month = DOBElement.attributeValue(ATTRIBUTE_MONTH);
            String year = DOBElement.attributeValue(ATTRIBUTE_YEAR);

            if (year != null) {
                Calendar date = new GregorianCalendar();

                date.set(Calendar.DATE, day == null ? 1 : Integer.parseInt(day));
                date.set(Calendar.MONTH, month == null ? 0 : Integer.parseInt(month) - 1);
                date.set(Calendar.YEAR, Integer.parseInt(year));

                return DateUtil.formatDateAsText(date.getTime());
            }
        }

        return null;
    }

    private String getValueFor(Element patientElement, String elementName) {
        Element namedElement = patientElement.element(elementName);
        return namedElement == null ? null : namedElement.getTextTrim();
    }

}