72 lines
2.9 KiB
Java
72 lines
2.9 KiB
Java
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<Indicator> getIndicators(String id) {
|
|
Section section = this.find(id);
|
|
return section.getIndicators().stream().map(this.indicatorService::find).collect(Collectors.toList());
|
|
}
|
|
|
|
public List<String> getIndicatorsId(String id) {
|
|
return this.getIndicators(id).stream().map(Indicator::getId).collect(Collectors.toList());
|
|
}
|
|
}
|