/** * ----------------------------------------------------------------------------------- * (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.service.web; import java.util.ArrayList; import java.util.Collections; import java.util.List; import javax.xml.datatype.DatatypeConfigurationException; import org.hl7.v3.AggregateKnowledgeResponse; import org.openinfobutton.schema.KnowledgeRequest; import org.openinfobutton.service.matching.AccessCheckHandler; import org.openinfobutton.service.matching.ContextProfileHandler; import org.openinfobutton.service.matching.RequestResult; import org.openinfobutton.service.matching.TaskCheckHandler; import org.openinfobutton.service.response.ResponseGenerator; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; // TODO: Auto-generated Javadoc /** * The Class KnowledgeRequestEngine. */ @Component public class KnowledgeRequestEngine { /** The rg. */ @Autowired ResponseGenerator rg; /** * Gets the response. * * @param knowledgeRequest built from the input request parameters * @return Document which contains the aggregateKnowledgeResponse after processing the infobutton request */ public AggregateKnowledgeResponse getResponse( KnowledgeRequest knowledgeRequest ) { final List<RequestResult> result = returnResult( knowledgeRequest ); Collections.sort( result ); AggregateKnowledgeResponse responseType = new AggregateKnowledgeResponse(); try { if ( !result.isEmpty() ) { responseType = rg.returnResponse( knowledgeRequest, result ); } } catch ( final DatatypeConfigurationException e ) { // TODO Auto-generated catch block e.printStackTrace(); } return responseType; } /** * Based on the knowledge Request, access and task checks are done. Then based on the qualified resource profiles, * matching is done to produce the results. * * @param request the request * @return List of Results */ private List<RequestResult> returnResult( KnowledgeRequest request ) { List<RequestResult> result = new ArrayList<RequestResult>(); if ( AccessCheckHandler.handleRequest( request ) ) { return result; } else if ( TaskCheckHandler.handleRequest( request ) ) { return result; } else { final ContextProfileHandler contextProfileHandlerObject = new ContextProfileHandler(); result = contextProfileHandlerObject.handleRequest( request ); return result; } } }