/**
* -----------------------------------------------------------------------------------
* (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 org.hl7.v3.CategoryType;
import org.hl7.v3.REDSMT010001UVMainSearchCriteria;
import org.openinfobutton.schemas.kb.Code;
// TODO: Auto-generated Javadoc
/**
* The Class MainSearchCriteria.
*/
public class MainSearchCriteria
{
/** The code. */
private Code code;
/** The severity observation. */
private SeverityObservation severityObservation;
/**
* Instantiates a new main search criteria.
*
* @param code the code
* @param codeSystem the code system
* @param displayName the display name
* @param codeSystemName the code system name
* @param severityObservation the severity observation
*/
public MainSearchCriteria( String code, String codeSystem, String displayName, String codeSystemName,
Code severityObservation )
{
this.code = CodeUtility.getCode( code, codeSystem, displayName, codeSystemName );
this.severityObservation = new SeverityObservation( severityObservation );
}
/**
* Instantiates a new main search criteria.
*
* @param code the code
* @param severityObservation the severity observation
*/
public MainSearchCriteria( Code code, SeverityObservation severityObservation )
{
this.code = code;
this.severityObservation = severityObservation;
}
/**
* Instantiates a new main search criteria.
*
* @param mainSearchCriteria the main search criteria
*/
public MainSearchCriteria( REDSMT010001UVMainSearchCriteria mainSearchCriteria )
{
this.code = CodeUtility.getCode( mainSearchCriteria.getValue() );
if ( mainSearchCriteria.getSeverityObservation() != null )
{
this.severityObservation = new SeverityObservation( mainSearchCriteria.getSeverityObservation().getValue() );
}
else
{
this.severityObservation = new SeverityObservation();
}
}
/**
* Instantiates a new main search criteria.
*
* @param requestParameters the request parameters
* @param categoryHashMap the category hash map
*/
public MainSearchCriteria(Map<String, String[]> requestParameters, final Map<String, List<CategoryType>> categoryHashMap) {
List<CategoryType> category = new ArrayList<CategoryType>();
final Code mainsearchCode = CodeUtility.getCode( CodeConstants.LANGUAGE );
if ( requestParameters.containsKey( CodeConstants.MAINSEARCH_CODE ) )
{
mainsearchCode.setCode( requestParameters.get( CodeConstants.MAINSEARCH_CODE )[0] );
final CategoryType c = new CategoryType();
c.setTerm( requestParameters.get( CodeConstants.MAINSEARCH_CODE )[0] );
c.setScheme( CodeConstants.MAINSEARCH_CODE );
category.add( c );
}
if ( requestParameters.containsKey( CodeConstants.MAINSEARCH_CODESYSTEM ) )
{
mainsearchCode.setCodeSystem( requestParameters.get( CodeConstants.MAINSEARCH_CODESYSTEM )[0] );
final CategoryType c = new CategoryType();
c.setTerm( requestParameters.get( CodeConstants.MAINSEARCH_CODESYSTEM )[0] );
c.setScheme( CodeConstants.MAINSEARCH_CODESYSTEM );
category.add( c );
}
if ( requestParameters.containsKey( CodeConstants.MAINSEARCH_DISPLAYNAME ) )
{
mainsearchCode.setDisplayName( requestParameters.get( CodeConstants.MAINSEARCH_DISPLAYNAME )[0] );
final CategoryType c = new CategoryType();
c.setTerm( requestParameters.get( CodeConstants.MAINSEARCH_DISPLAYNAME )[0] );
c.setScheme( CodeConstants.MAINSEARCH_DISPLAYNAME );
category.add( c );
}
this.setCode( mainsearchCode );
// Set severity observation
final Code severityobservation = CodeUtility.getCode();
if ( requestParameters.containsKey( CodeConstants.SEVERITYOBSERVATION_CODE ) )
{
severityobservation.setCode( requestParameters.get( CodeConstants.SEVERITYOBSERVATION_CODE )[0] );
final CategoryType c = new CategoryType();
c.setTerm( requestParameters.get( CodeConstants.SEVERITYOBSERVATION_CODE )[0] );
c.setScheme( CodeConstants.SEVERITYOBSERVATION_CODE );
category.add( c );
}
if ( requestParameters.containsKey( CodeConstants.SEVERITYOBSERVATION_CODESYSTEM ) )
{
severityobservation.setCodeSystemName( requestParameters.get( CodeConstants.SEVERITYOBSERVATION_CODESYSTEM )[0] );
final CategoryType c = new CategoryType();
c.setTerm( requestParameters.get( CodeConstants.SEVERITYOBSERVATION_CODESYSTEM )[0] );
c.setScheme( CodeConstants.SEVERITYOBSERVATION_CODESYSTEM );
category.add( c );
}
if ( requestParameters.containsKey( CodeConstants.SEVERITYOBSERVATION_DISPLAYNAME ) )
{
severityobservation.setDisplayName( requestParameters.get( CodeConstants.SEVERITYOBSERVATION_DISPLAYNAME )[0] );
final CategoryType c = new CategoryType();
c.setTerm( requestParameters.get( CodeConstants.SEVERITYOBSERVATION_DISPLAYNAME )[0] );
c.setScheme( CodeConstants.SEVERITYOBSERVATION_DISPLAYNAME );
category.add( c );
}
this.setSeverityObservation(new SeverityObservation( severityobservation ));
categoryHashMap.put( CodeConstants.CONCEPT_OF_INTEREST_KEY, category );
}
/**
* Instantiates a new main search criteria.
*/
public MainSearchCriteria()
{
this( CodeUtility.getCode(), new SeverityObservation() );
}
/**
* Gets the code.
*
* @return the code
*/
public Code getCode()
{
return this.code;
}
/**
* Sets the code.
*
* @param code the new code
*/
public void setCode( Code code )
{
this.code = code;
}
/**
* Gets the severity observation.
*
* @return the severity observation
*/
public SeverityObservation getSeverityObservation()
{
return this.severityObservation;
}
/**
* Sets the severity observation.
*
* @param severityObservation the new severity observation
*/
public void setSeverityObservation( SeverityObservation severityObservation )
{
this.severityObservation = severityObservation;
}
/**
* Gets the JAXB element.
*
* @param mainSearchCriteria the main search criteria
* @return the JAXB element
*/
public static REDSMT010001UVMainSearchCriteria getJAXBElement( MainSearchCriteria mainSearchCriteria )
{
final REDSMT010001UVMainSearchCriteria jaxBElement = new REDSMT010001UVMainSearchCriteria();
jaxBElement.setValue( CodeUtility.getJAXBElement( mainSearchCriteria.getCode() ) );
jaxBElement.setSeverityObservation( SeverityObservation.getJAXBElement( mainSearchCriteria.getSeverityObservation() ) );
return jaxBElement;
}
}