package pl.edu.icm.saos.api.single.scchamber;
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.scchamber.views.ChamberView;
import pl.edu.icm.saos.persistence.model.SupremeCourtChamber;
import pl.edu.icm.saos.persistence.model.SupremeCourtChamberDivision;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import static pl.edu.icm.saos.api.single.scchamber.views.ChamberView.Data;
import static pl.edu.icm.saos.api.single.scchamber.views.ChamberView.Division;
/**
* Provides functionality for building success object view for single supreme court chamber.
* @author pavtel
*/
@Service
public class ScChamberSuccessRepresentationBuilder {
@Autowired
private LinksBuilder linksBuilder;
//------------------------ LOGIC --------------------------
/**
* Constructs chamber's view {@link pl.edu.icm.saos.api.single.scchamber.views.ChamberView ChamberView}.
* @param chamber to process.
* @return representation.
*/
public ChamberView build(SupremeCourtChamber chamber){
ChamberView representation = new ChamberView();
fillChamberFieldsToRepresentation(representation, chamber);
return representation;
}
//------------------------ PRIVATE --------------------------
private void fillChamberFieldsToRepresentation(ChamberView view, SupremeCourtChamber chamber) {
view.setLinks(toLinks(chamber));
fillData(view.getData(), chamber);
}
private List<Link> toLinks(SupremeCourtChamber chamber) {
Link chambersLink = linksBuilder.linkToScChamber(chamber.getId());
return Arrays.asList(chambersLink);
}
private void fillData(Data view, SupremeCourtChamber chamber) {
view.setId(chamber.getId());
view.setHref(linksBuilder.urlToScChamber(chamber.getId()));
view.setName(chamber.getName());
view.setDivisions(toDivisions(chamber.getDivisions()));
}
private List<Division> toDivisions(List<SupremeCourtChamberDivision> divisions) {
if(divisions == null){
divisions = Collections.emptyList();
}
return divisions.stream()
.map(division -> toView(division))
.collect(Collectors.toList());
}
private Division toView(SupremeCourtChamberDivision division) {
Division view = new Division();
view.setId(division.getId());
view.setHref(linksBuilder.urlToScDivision(division.getId()));
view.setName(division.getName());
return view;
}
//------------------------ SETTERS --------------------------
public void setLinksBuilder(LinksBuilder linksBuilder) {
this.linksBuilder = linksBuilder;
}
}