package eu.dnetlib.uoamonitorservice.service; import eu.dnetlib.uoamonitorservice.dao.SectionDAO; import eu.dnetlib.uoamonitorservice.dto.SectionFull; import eu.dnetlib.uoamonitorservice.entities.Indicator; import eu.dnetlib.uoamonitorservice.entities.Section; import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import eu.dnetlib.uoamonitorservice.primitives.Visibility; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; import java.util.stream.Collectors; @Service public class SectionService { private final SectionDAO dao; private final IndicatorService indicatorService; @Autowired public SectionService(SectionDAO dao, IndicatorService indicatorService) { this.dao = dao; this.indicatorService = indicatorService; } public SectionFull buildSection(SectionFull sectionFull) { sectionFull.setIndicators(sectionFull.getIndicators().stream().map(indicator -> this.indicatorService.save(indicator)).collect(Collectors.toList())); Section section = dao.save(new Section(sectionFull)); return new SectionFull(section, sectionFull.getIndicators()); } public SectionFull changeVisibilityTree(String sectionId, Visibility visibility) { Section section = this.find(sectionId); SectionFull sectionFull = new SectionFull(section, section.getIndicators().stream().map(indicatorId -> this.indicatorService.find(indicatorId)).collect(Collectors.toList())); sectionFull.setIndicators(sectionFull.getIndicators().stream().map(indicator -> { indicator.setVisibility(visibility); return indicatorService.save(indicator); }).collect(Collectors.toList())); return sectionFull; } public SectionFull saveSection(SectionFull sectionFull) { Section section = new Section(sectionFull); if(section.getId() != null) { section.setIndicators(this.getIndicatorsId(section.getId())); } return sectionFull; } public Section find(String id) { return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Section with id: " + id + " not found")); } public SectionFull getFullSection(String type, String alias, String id) { Section section = this.find(id); return new SectionFull(section, section.getIndicators().stream() .map(indicatorId -> this.indicatorService.getIndicator(type, alias, indicatorId)) .collect(Collectors.toList())); } public List getIndicators(String id) { Section section = this.find(id); return section.getIndicators().stream().map(this.indicatorService::find).collect(Collectors.toList()); } public List getIndicatorsId(String id) { return this.getIndicators(id).stream().map(Indicator::getId).collect(Collectors.toList()); } }