Advertisement
k-joseph

Untitled

Jun 27th, 2014
280
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.78 KB | None | 0 0
  1. package org.openmrs.module.chartsearch.page.controller;
  2.  
  3. /**
  4. * Created by Eli on 10/03/14.
  5. */
  6.  
  7. import java.util.ArrayList;
  8. import java.util.Arrays;
  9. import java.util.LinkedList;
  10. import java.util.List;
  11.  
  12. import javax.servlet.http.HttpServletRequest;
  13.  
  14. import org.apache.solr.client.solrj.response.FacetField;
  15. import org.apache.solr.client.solrj.response.FacetField.Count;
  16. import org.openmrs.Patient;
  17. import org.openmrs.api.context.Context;
  18. import org.openmrs.module.appui.UiSessionContext;
  19. import org.openmrs.module.chartsearch.ChartListItem;
  20. import org.openmrs.module.chartsearch.EncounterItem;
  21. import org.openmrs.module.chartsearch.FormItem;
  22. import org.openmrs.module.chartsearch.ObsItem;
  23. import org.openmrs.module.chartsearch.SearchAPI;
  24. import org.openmrs.module.chartsearch.SearchPhrase;
  25. import org.openmrs.module.chartsearch.solr.ChartSearchIndexer;
  26. import org.openmrs.module.chartsearch.solr.ChartSearchSearcher;
  27. import org.openmrs.module.chartsearch.web.dwr.DWRChartSearchService;
  28. import org.openmrs.module.emrapi.patient.PatientDomainWrapper;
  29. import org.openmrs.ui.framework.annotation.BindParams;
  30. import org.openmrs.ui.framework.annotation.InjectBeans;
  31. import org.openmrs.ui.framework.page.PageModel;
  32. import org.slf4j.Logger;
  33. import org.slf4j.LoggerFactory;
  34. import org.springframework.web.bind.annotation.RequestParam;
  35.  
  36. public class ChartsearchPageController {
  37.  
  38. private static final Logger log = LoggerFactory.getLogger(ChartsearchPageController.class);
  39.  
  40. private ChartSearchIndexer chartSearchIndexer = getComponent(ChartSearchIndexer.class);
  41.  
  42. private ChartSearchSearcher searcher = getComponent(ChartSearchSearcher.class);
  43.  
  44. private List<Count> facets;
  45.  
  46. public List<Count> getFacets() {
  47. return facets;
  48. }
  49.  
  50. public void controller(PageModel model, @BindParams SearchPhrase search_phrase, UiSessionContext sessionContext, @RequestParam("patientId") Patient patient,
  51. @InjectBeans PatientDomainWrapper patientDomainWrapper, HttpServletRequest request) {
  52.  
  53. String[] categories = request.getParameterValues("categories");
  54. if (categories == null) {
  55. categories = new String[0];
  56. }
  57. List<String> selectedCategories = Arrays.asList(categories);
  58.  
  59.  
  60. patientDomainWrapper.setPatient(patient);
  61. model.addAttribute("patient", patientDomainWrapper);
  62.  
  63. SearchAPI searchAPIInstance = SearchAPI.getInstance();
  64.  
  65. log.info("getting patient ID :" + patient);
  66. log.info("trying to index a patient");
  67.  
  68. if (chartSearchIndexer != null && patient != null) {
  69. //chartSearchIndexer.clearIndex(IndexClearStrategies.IDS.toString(), patient.getPatientId()+"", 0, 0);
  70. chartSearchIndexer.indexPatientData(patient.getPatientId());
  71. }
  72. log.info("indexed patient");
  73. //Searching an empty phrase to get all results to show at start
  74. SearchPhrase emptyPhrase = new SearchPhrase("");
  75. List<ChartListItem> items = searchAPIInstance.search(patient.getPatientId(), search_phrase, selectedCategories);
  76. List<ChartListItem> updatedItems = new ArrayList<ChartListItem>();
  77. //loop to get full details about observations.
  78. for (ChartListItem chartListItem : items) {
  79. if (chartListItem instanceof ObsItem) {
  80. int itemObsId = ((ObsItem) chartListItem).getObsId();
  81. ChartListItem updatedObservation = DWRChartSearchService.getObservationDetails(itemObsId);
  82. updatedItems.add(updatedObservation);
  83. }
  84. if (chartListItem instanceof FormItem) {
  85. updatedItems.add(chartListItem);
  86. }
  87.  
  88. if (chartListItem instanceof EncounterItem) {
  89. updatedItems.add(chartListItem);
  90. }
  91.  
  92. }
  93.  
  94. //setting results to show.
  95. searchAPIInstance.setResults(updatedItems);
  96.  
  97. LinkedList<Count> facetFields = new LinkedList<Count> ();
  98. facetFields.addAll(searcher.getFacetFieldValueNamesAndCounts());
  99.  
  100. for (int i = facetFields.indexOf(facetFields.getFirst()); i <= facetFields.indexOf(facetFields.getLast()); i++) {
  101. System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  102. Count facet = facetFields.get(i);
  103. this.facets.add(facet);
  104. System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  105. }
  106. model.addAttribute("facets", getFacets());
  107. System.out.println("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa");
  108.  
  109. }
  110.  
  111. private <T> T getComponent(Class<T> clazz) {
  112. List<T> list = Context.getRegisteredComponents(clazz);
  113. if (list == null || list.size() == 0)
  114. throw new RuntimeException("Cannot find component of " + clazz);
  115. return list.get(0);
  116. }
  117.  
  118. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement