/** * ----------------------------------------------------------------------------------- * (c) 2010-2014 OpenInfobutton Project, Biomedical Informatics, University of Utah * Contact: {@code <andrew.iskander@utah.edu>} * Biomedical Informatics * 421 Wakara Way, Ste 140 * Salt Lake City, UT 84108-3514 * Day Phone: 1-801-581-4080 * ----------------------------------------------------------------------------------- * * @author Andrew Iskander {@code <andrew.iskander@utah.edu>} * @version Jul 15, 2014 */ package org.openinfobutton.schema; import java.util.ArrayList; import java.util.List; import java.util.Map; import javax.xml.bind.JAXBElement; import javax.xml.namespace.QName; import org.hl7.v3.CategoryType; import org.hl7.v3.REDSMT010001UVHealthCareProvider; import org.hl7.v3.REDSMT010001UVLanguageCommunication; import org.hl7.v3.REDSMT010001UVPatient; import org.hl7.v3.REDSMT010001UVPerformer; import org.hl7.v3.REDSMT010001UVPerson; import org.openinfobutton.schemas.kb.Code; // TODO: Auto-generated Javadoc /* $Rev:: 1097 $: Revision of last commit $Author:: ai28 $: Author of last commit $Date:: 2010-10-01 1#$: Date of last commit */ /** * The Class Performer. */ public class Performer { /** The language. */ private Code language; /** The health care provider. */ private Code healthCareProvider; /** The provider or patient. */ private Code providerOrPatient; /** * Instantiates a new performer. * * @param language the language * @param healthCareProvider the health care provider * @param providerOrPatient the provider or patient */ public Performer( Code language, Code healthCareProvider, Code providerOrPatient ) { this.language = language; this.healthCareProvider = healthCareProvider; this.providerOrPatient = providerOrPatient; } /** * Instantiates a new performer. * * @param requestParameters the request parameters * @param categoryHashMap the category hash map */ public Performer(Map<String, String[]> requestParameters, final Map<String, List<CategoryType>> categoryHashMap) { List<CategoryType> category = new ArrayList<CategoryType>(); final Code performerLanguage = CodeUtility.getCode( CodeConstants.LANGUAGE ); final Code performerHealthCareProvider = CodeUtility.getCode(); Code performerProviderOrPatient = CodeUtility.getCode(); if ( requestParameters.containsKey( CodeConstants.PERFORMER ) ) { final String performerCode = requestParameters.get( CodeConstants.PERFORMER )[0]; if ( performerCode.equals( "PROV" ) ) { performerProviderOrPatient = CodeUtility.getCode( CodeConstants.PROVIDER ); } else if ( performerCode.equals( "PAT" ) ) { performerProviderOrPatient = CodeUtility.getCode( CodeConstants.PATIENT ); } final CategoryType c = new CategoryType(); c.setTerm( performerCode ); c.setScheme( CodeConstants.PERFORMER ); category.add( c ); categoryHashMap.put( CodeConstants.PERFORMER_KNOWLEDGE_USERTYPE_KEY, category ); category = new ArrayList<CategoryType>(); } this.setProviderOrPatient( performerProviderOrPatient ); if ( requestParameters.containsKey( CodeConstants.PERFORMER_CODE ) ) { performerHealthCareProvider.setCode( requestParameters.get( CodeConstants.PERFORMER_CODE )[0] ); final CategoryType c = new CategoryType(); c.setTerm( requestParameters.get( CodeConstants.PERFORMER_CODE )[0] ); c.setScheme( CodeConstants.PERFORMER_CODE ); category.add( c ); } if ( requestParameters.containsKey( CodeConstants.PERFORMER_CODESYSTEM ) ) { performerHealthCareProvider.setCodeSystem( requestParameters.get( CodeConstants.PERFORMER_CODESYSTEM )[0] ); final CategoryType c = new CategoryType(); c.setTerm( requestParameters.get( CodeConstants.PERFORMER_CODESYSTEM )[0] ); c.setScheme( CodeConstants.PERFORMER_CODESYSTEM ); category.add( c ); } if ( requestParameters.containsKey( CodeConstants.PERFORMER_DISPLAYNAME ) ) { performerHealthCareProvider.setDisplayName( requestParameters.get( CodeConstants.PERFORMER_DISPLAYNAME )[0] ); final CategoryType c = new CategoryType(); c.setTerm( requestParameters.get( CodeConstants.PERFORMER_DISPLAYNAME )[0] ); c.setScheme( CodeConstants.PERFORMER_DISPLAYNAME ); category.add( c ); } categoryHashMap.put( CodeConstants.PERFORMER_DISCIPLINE_KEY, category ); category = new ArrayList<CategoryType>(); this.setHealthCareProvider( performerHealthCareProvider ); if ( requestParameters.containsKey( CodeConstants.PERFORMER_LANGUAGECODE ) ) { performerLanguage.setCode( requestParameters.get( CodeConstants.PERFORMER_LANGUAGECODE )[0] ); final CategoryType c = new CategoryType(); c.setTerm( requestParameters.get( CodeConstants.PERFORMER_LANGUAGECODE )[0] ); c.setScheme( CodeConstants.PERFORMER_LANGUAGECODE ); category.add( c ); } if ( requestParameters.containsKey( CodeConstants.PERFORMER_LANGUAGECODESYSTEM ) ) { performerLanguage.setCodeSystem( requestParameters.get( CodeConstants.PERFORMER_LANGUAGECODESYSTEM )[0] ); final CategoryType c = new CategoryType(); c.setTerm( requestParameters.get( CodeConstants.PERFORMER_LANGUAGECODESYSTEM )[0] ); c.setScheme( CodeConstants.PERFORMER_LANGUAGECODESYSTEM ); category.add( c ); } if ( requestParameters.containsKey( CodeConstants.PERFORMER_LANGUAGEDISPLAYNAME ) ) { performerLanguage.setDisplayName( requestParameters.get( CodeConstants.PERFORMER_LANGUAGEDISPLAYNAME )[0] ); final CategoryType c = new CategoryType(); c.setTerm( requestParameters.get( CodeConstants.PERFORMER_LANGUAGEDISPLAYNAME )[0] ); c.setScheme( CodeConstants.PERFORMER_LANGUAGEDISPLAYNAME ); category.add( c ); } this.setLanguage( performerLanguage ); categoryHashMap.put( CodeConstants.PERFORMER_LANGUAGE_KEY, category ); } /** * Instantiates a new performer. */ public Performer() { this( CodeUtility.getCode(), CodeUtility.getCode(), CodeUtility.getCode() ); } /** * Instantiates a new performer. * * @param performer the performer */ public Performer( REDSMT010001UVPerformer performer ) { this( CodeUtility.getCode(), CodeUtility.getCode(), CodeUtility.getCode() ); if ( performer.getHealthCareProvider() != null ) { this.providerOrPatient = CodeUtility.getCode( "PROV", "2.16.840.1.113883.5.110", "Provider", "" ); this.healthCareProvider = CodeUtility.getCode( performer.getHealthCareProvider().getValue().getCode() ); this.language = CodeUtility.getCode( performer.getHealthCareProvider().getValue(). getHealthCarePerson().getValue().getLanguageCommunication().get( 0 ).getLanguageCode() ); } else if ( performer.getPatient() != null ) { this.providerOrPatient = CodeUtility.getCode( "PAT", "2.16.840.1.113883.5.110", "Patient", "" ); this.healthCareProvider = CodeUtility.getCode(); ; this.language = CodeUtility.getCode( performer.getPatient().getValue(). getPatientPerson().getValue().getLanguageCommunication().get( 0 ).getLanguageCode() ); } } /** * Gets the language. * * @return the language */ public Code getLanguage() { return this.language; } /** * Gets the health care provider. * * @return the health care provider */ public Code getHealthCareProvider() { return this.healthCareProvider; } /** * Sets the language. * * @param language the new language */ public void setLanguage( Code language ) { this.language = language; } /** * Sets the health care provider. * * @param healthCareProvider the new health care provider */ public void setHealthCareProvider( Code healthCareProvider ) { this.healthCareProvider = healthCareProvider; } /** * Gets the provider or patient. * * @return the provider or patient */ public Code getProviderOrPatient() { return providerOrPatient; } /** * Sets the provider or patient. * * @param providerOrPatient the new provider or patient */ public void setProviderOrPatient( Code providerOrPatient ) { this.providerOrPatient = providerOrPatient; } /** * Gets the JAXB element. * * @param performer the performer * @return the JAXB element */ public static JAXBElement<REDSMT010001UVPerformer> getJAXBElement( Performer performer ) { final REDSMT010001UVPerformer element = new REDSMT010001UVPerformer(); final REDSMT010001UVHealthCareProvider healthCareProvider = new REDSMT010001UVHealthCareProvider(); final REDSMT010001UVPatient patient = new REDSMT010001UVPatient(); final REDSMT010001UVPerson person = new REDSMT010001UVPerson(); final REDSMT010001UVLanguageCommunication language = new REDSMT010001UVLanguageCommunication(); if ( performer.getProviderOrPatient().getCode().equals( "PROV" ) ) { language.setLanguageCode( CodeUtility.getJAXBElement( performer.getLanguage() ) ); person.getLanguageCommunication().add( language ); healthCareProvider.setCode( CodeUtility.getJAXBElement( performer.getHealthCareProvider() ) ); healthCareProvider.setHealthCarePerson( new JAXBElement<REDSMT010001UVPerson>( new QName( "urn:hl7-org:v3", "healthCarePerson" ), REDSMT010001UVPerson.class, person ) ); element.setHealthCareProvider( new JAXBElement<REDSMT010001UVHealthCareProvider>( new QName( "urn:hl7-org:v3","healthCareProvider" ), REDSMT010001UVHealthCareProvider.class, healthCareProvider ) ); } else if ( performer.getProviderOrPatient().getCode().equals( "PAT" ) ) { language.setLanguageCode( CodeUtility.getJAXBElement( performer.getLanguage() ) ); person.getLanguageCommunication().add( language ); patient.setPatientPerson( new JAXBElement<REDSMT010001UVPerson>( new QName( "urn:hl7-org:v3", "patientPerson" ), REDSMT010001UVPerson.class, person ) ); element.setPatient( new JAXBElement<REDSMT010001UVPatient>( new QName( "urn:hl7-org:v3", "patient" ), REDSMT010001UVPatient.class, patient ) ); } final JAXBElement<REDSMT010001UVPerformer> jaxBElement = new JAXBElement<REDSMT010001UVPerformer>( new QName( "urn:hl7-org:v3", "performer" ), REDSMT010001UVPerformer.class, element ); return jaxBElement; } }