package pl.edu.icm.saos.api.dump.court.mapping;
import org.springframework.stereotype.Service;
import pl.edu.icm.saos.api.dump.court.views.DumpCourtsView;
import pl.edu.icm.saos.persistence.model.CommonCourt;
import pl.edu.icm.saos.persistence.model.CommonCourtDivision;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static pl.edu.icm.saos.api.dump.court.views.DumpCourtsView.DumpCourtItem;
/**
* Provides functionality for mapping {@link pl.edu.icm.saos.persistence.model.CommonCourt CommonCourt}
* into {@link pl.edu.icm.saos.api.dump.court.views.DumpCourtsView.DumpCourtItem Item}.
* @author pavtel
*/
@Service
public class DumpCourtItemMapper {
//------------------------ LOGIC --------------------------
/**
* Fills item's fields using {@link pl.edu.icm.saos.persistence.model.CommonCourt CommonCourt} fields values.
* @param item representation.
* @param court to process.
*/
public void fillCommonCourtFieldsToItemRepresentation(DumpCourtItem item, CommonCourt court){
item.setId(court.getId());
item.setName(court.getName());
item.setType(court.getType());
item.setCode(court.getCode());
item.setParentCourt(toParentCourt(court.getParentCourt()));
item.setDivisions(toDivisions(court.getDivisions()));
}
//------------------------ PRIVATE --------------------------
private DumpCourtsView.ParentCourt toParentCourt(CommonCourt parentCourt) {
if(parentCourt == null){
return null;
} else {
DumpCourtsView.ParentCourt view = new DumpCourtsView.ParentCourt();
view.setId(parentCourt.getId());
return view;
}
}
private List<DumpCourtsView.Division> toDivisions(List<CommonCourtDivision> divisions) {
if(divisions == null){
divisions = Collections.emptyList();
}
List<DumpCourtsView.Division> divisionsRepresentation = divisions.stream()
.map(division -> toDivisionView(division))
.collect(Collectors.toList());
return divisionsRepresentation;
}
private DumpCourtsView.Division toDivisionView(CommonCourtDivision division){
DumpCourtsView.Division view = new DumpCourtsView.Division();
view.setId(division.getId());
view.setCode(division.getCode());
view.setName(division.getName());
view.setType(division.getType().getName());
return view;
}
}