package pl.edu.icm.saos.api.search.judgments.mapping; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import pl.edu.icm.saos.api.search.judgments.item.representation.SearchJudgmentItem; import pl.edu.icm.saos.api.services.dates.DateMapping; import pl.edu.icm.saos.api.services.links.LinksBuilder; import pl.edu.icm.saos.api.single.judgment.data.representation.JudgmentData; import pl.edu.icm.saos.persistence.model.Judge; import pl.edu.icm.saos.search.search.model.JudgeResult; import pl.edu.icm.saos.search.search.model.JudgmentSearchResult; import java.util.Collections; import java.util.List; import java.util.stream.Collectors; /** * Provides functionality for mapping from {@link pl.edu.icm.saos.search.search.model.JudgmentSearchResult JudgmentSearchResult} * fields into {@link pl.edu.icm.saos.api.search.judgments.item.representation.SearchJudgmentItem SearchJudgmentItem}. * @author pavtel */ @Service public class SearchJudgmentItemMapper { @Autowired private LinksBuilder linksBuilder; @Autowired private DateMapping dateMapping; //------------------------ LOGIC -------------------------- /** * Fills item's fields using {@link JudgmentSearchResult} values. * @param item representation. * @param judgment to process. */ public void fillJudgmentsFieldsToItemRepresentation(SearchJudgmentItem item, JudgmentSearchResult judgment){ item.setId(judgment.getId()); item.setHref(linksBuilder.urlToJudgment(judgment.getId())); item.setCourtType(judgment.getCourtType()); item.setJudgmentType(judgment.getJudgmentType()); item.setTextContent(judgment.getContent()); item.setJudges(toJudges(judgment.getJudges())); item.setCourtCases(toCourtCases(judgment.getCaseNumbers())); item.setJudgmentDate(dateMapping.toISO8601Format(judgment.getJudgmentDate())); item.setKeywords(toKeywords(judgment.getKeywords())); } private List<JudgmentData.Judge> toJudges(List<JudgeResult> judges) { if(judges==null){ judges = Collections.emptyList(); } return judges.stream() .map(judgeResult -> toJudge(judgeResult)) .collect(Collectors.toList()); } private JudgmentData.Judge toJudge(JudgeResult judgeResult) { JudgmentData.Judge view = new JudgmentData.Judge(); view.setName(judgeResult.getName()); view.setSpecialRoles(toSpecialRoles(judgeResult.getSpecialRoles())); return view; } private List<String> toSpecialRoles(List<Judge.JudgeRole> specialRoles) { if(specialRoles==null){ specialRoles = Collections.emptyList(); } return specialRoles.stream() .map(role -> role.name()) .collect(Collectors.toList()); } private List<JudgmentData.CourtCase> toCourtCases(List<String> caseNumbers) { if(caseNumbers==null){ caseNumbers = Collections.emptyList(); } return caseNumbers.stream() .map(caseNumber -> toCourtCase(caseNumber)) .collect(Collectors.toList()); } private JudgmentData.CourtCase toCourtCase(String caseNumber) { JudgmentData.CourtCase view = new JudgmentData.CourtCase(); view.setCaseNumber(caseNumber); return view; } private List<String> toKeywords(List<String> keywords) { if(keywords==null){ return Collections.emptyList(); } else { return keywords; } } //------------------------ SETTERS -------------------------- public void setLinksBuilder(LinksBuilder linksBuilder) { this.linksBuilder = linksBuilder; } public void setDateMapping(DateMapping dateMapping) { this.dateMapping = dateMapping; } }