package pl.edu.icm.saos.api.single.ccdivision;
import static pl.edu.icm.saos.api.ApiConstants.COURT;
import java.util.Arrays;
import java.util.List;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.Link;
import org.springframework.stereotype.Service;
import pl.edu.icm.saos.api.services.links.LinksBuilder;
import pl.edu.icm.saos.api.single.ccdivision.views.DivisionView;
import pl.edu.icm.saos.persistence.model.CommonCourt;
import pl.edu.icm.saos.persistence.model.CommonCourtDivision;
/**
* Provides functionality for building success object view for single division.
* Success object can be easily serialized as json.
* @author pavtel
*/
@Service
public class DivisionSuccessRepresentationBuilder {
@Autowired
private LinksBuilder linksBuilder;
//------------------------ LOGIC --------------------------
/**
* Constructs division's view {@link pl.edu.icm.saos.api.single.ccdivision.views.DivisionView DivisionView}.
* @param division to process.
* @return representation.
*/
public DivisionView build(CommonCourtDivision division){
DivisionView divisionView = new DivisionView();
fillDivisionFieldsToRepresentation(divisionView, division);
return divisionView;
}
//------------------------ PRIVATE --------------------------
private void fillDivisionFieldsToRepresentation(DivisionView representation, CommonCourtDivision division){
representation.setLinks(toLinks(division));
fillData(representation.getData(), division);
}
private List<Link> toLinks(CommonCourtDivision division) {
Link divisionLink = linksBuilder.linkToCcDivision(division.getId());
Link courtLink = linksBuilder.linkToCommonCourt(division.getCourt().getId(), COURT);
return Arrays.asList(divisionLink, courtLink);
}
private void fillData(DivisionView.Data data, CommonCourtDivision division) {
data.setId(division.getId());
data.setHref(linksBuilder.urlToCcDivision(division.getId()));
data.setName(division.getName());
data.setCode(division.getCode());
data.setType(division.getType().getName());
data.setCourt(toCourt(division.getCourt()));
}
private DivisionView.Court toCourt(CommonCourt court) {
DivisionView.Court courtView = new DivisionView.Court();
courtView.setId(court.getId());
courtView.setHref(linksBuilder.urlToCommonCourt(court.getId()));
courtView.setName(court.getName());
courtView.setCode(court.getCode());
courtView.setType(court.getType());
if(court.getParentCourt() != null){
DivisionView.ParentCourt parentCourt = new DivisionView.ParentCourt();
parentCourt.setId(court.getParentCourt().getId());
parentCourt.setHref(linksBuilder.urlToCommonCourt(court.getParentCourt().getId()));
courtView.setParentCourt(parentCourt);
}
return courtView;
}
//------------------------ SETTERS --------------------------
public void setLinksBuilder(LinksBuilder linksBuilder) {
this.linksBuilder = linksBuilder;
}
}