package pl.edu.icm.saos.webapp.judgment.search; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Sort; import org.springframework.data.web.SortDefault; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RequestParam; import com.google.common.collect.Lists; import pl.edu.icm.saos.persistence.model.CourtType; import pl.edu.icm.saos.persistence.model.Judgment; import pl.edu.icm.saos.persistence.repository.JudgmentRepository; import pl.edu.icm.saos.persistence.repository.LawJournalEntryRepository; import pl.edu.icm.saos.persistence.service.LawJournalEntryCodeExtractor; import pl.edu.icm.saos.search.search.model.JudgmentSearchResult; import pl.edu.icm.saos.search.search.model.SearchResults; import pl.edu.icm.saos.webapp.common.search.CourtDataModelCreator; import pl.edu.icm.saos.webapp.court.ScListService; import pl.edu.icm.saos.webapp.judgment.JudgmentCriteriaForm; import pl.edu.icm.saos.webapp.judgment.PageLinkGenerator; /** * Controller for judgment search view. * * @author Łukasz Pawełczak * */ @Controller public class JudgmentSearchController { private JudgmentWebSearchService judgmentsWebSearchService; private CourtDataModelCreator courtDataModelCreator; private ScListService scListService; private LawJournalEntryRepository lawJournalEntryRepository; private LawJournalEntryCodeExtractor lawJournalEntryCodeExtractor; private JudgmentRepository judgmentRepository; //------------------------ LOGIC -------------------------- @RequestMapping(value="/search", method=RequestMethod.GET) public String judgmentSearchResults(@ModelAttribute("judgmentCriteriaForm") JudgmentCriteriaForm judgmentCriteriaForm, @SortDefault(sort="JUDGMENT_DATE", direction=Sort.Direction.DESC) Pageable pageable, @RequestParam(value="trackFocusOn", required=false) String trackFocusOn, ModelMap model, HttpServletRequest request) { SearchResults<JudgmentSearchResult> searchResults = judgmentsWebSearchService.search(judgmentCriteriaForm, pageable); model.addAttribute("pageable", pageable); model.addAttribute("searchResults", searchResults); model.addAttribute("pageLink", PageLinkGenerator.generateSearchPageBaseLink(request, Lists.newArrayList("trackFocusOn"))); model.addAttribute("trackFocusOn", trackFocusOn); courtDataModelCreator.addCourtDataToModel(judgmentCriteriaForm.getCourtCriteria(), model); addSupremeCourtJudgmentForm(judgmentCriteriaForm, model); addLawJournalEntryToModel(judgmentCriteriaForm, model); addReferencedJudgmentToModel(judgmentCriteriaForm, model); return "judgmentSearch"; } //------------------------ PRIVATE -------------------------- private void addSupremeCourtJudgmentForm(JudgmentCriteriaForm judgmentCriteriaForm, ModelMap model) { if(CourtType.SUPREME.equals(judgmentCriteriaForm.getCourtCriteria().getCourtType())) { model.addAttribute("scJudgmentForms", scListService.findScJudgmentForms()); } } private void addLawJournalEntryToModel(JudgmentCriteriaForm judgmentCriteriaForm, ModelMap model) { if (StringUtils.isNotBlank(judgmentCriteriaForm.getLawJournalEntryCode())) { int year = lawJournalEntryCodeExtractor.extractYear(judgmentCriteriaForm.getLawJournalEntryCode()); int entry = lawJournalEntryCodeExtractor.extractEntry(judgmentCriteriaForm.getLawJournalEntryCode()); model.addAttribute("lawJournalEntry", lawJournalEntryRepository.findOneByYearAndEntry(year, entry)); } } private void addReferencedJudgmentToModel(JudgmentCriteriaForm judgmentCriteriaForm, ModelMap model) { if (judgmentCriteriaForm.getReferencedCourtCaseId() != null) { Judgment judgment = judgmentRepository.findOneAndInitialize(judgmentCriteriaForm.getReferencedCourtCaseId()); model.addAttribute("referencedJudgment", judgment); } } //------------------------ SETTERS -------------------------- @Autowired public void setJudgmentsWebSearchService(JudgmentWebSearchService judgmentsWebSearchService) { this.judgmentsWebSearchService = judgmentsWebSearchService; } @Autowired public void setCourtDataModelCreator(CourtDataModelCreator courtDataModelCreator) { this.courtDataModelCreator = courtDataModelCreator; } @Autowired public void setScListService(ScListService scListService) { this.scListService = scListService; } @Autowired public void setLawJournalEntryRepository(LawJournalEntryRepository lawJournalEntryRepository) { this.lawJournalEntryRepository = lawJournalEntryRepository; } @Autowired public void setLawJournalEntryCodeExtractor(LawJournalEntryCodeExtractor lawJournalEntryCodeExtractor) { this.lawJournalEntryCodeExtractor = lawJournalEntryCodeExtractor; } @Autowired public void setJudgmentRepository(JudgmentRepository judgmentRepository) { this.judgmentRepository = judgmentRepository; } }