84 lines
3.7 KiB
Java
84 lines
3.7 KiB
Java
package eu.dnetlib.uoamonitorservice.service;
|
|
|
|
import eu.dnetlib.uoaauthorizationlibrary.security.AuthorizationService;
|
|
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
|
|
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
|
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
|
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 StakeholderService {
|
|
|
|
private final StakeholderDAO dao;
|
|
|
|
private final CommonService commonService;
|
|
private final TopicService topicService;
|
|
|
|
@Autowired
|
|
public StakeholderService(StakeholderDAO dao, CommonService commonService, TopicService topicService) {
|
|
this.dao = dao;
|
|
this.commonService = commonService;
|
|
this.topicService = topicService;
|
|
}
|
|
|
|
public Stakeholder findByAlias(String alias) {
|
|
return this.dao.findByAlias(alias).orElseThrow(() -> new EntityNotFoundException("Stakeholder with alias: " + alias + " not found"));
|
|
}
|
|
|
|
public List<String> getAllAliases() {
|
|
return this.dao.findAll().stream().map(Stakeholder::getAlias).collect(Collectors.toList());
|
|
}
|
|
|
|
public List<Stakeholder> getAll(String type) {
|
|
if(type != null) {
|
|
return this.dao.findByType(type);
|
|
}
|
|
return this.dao.findAll();
|
|
}
|
|
|
|
public List<Stakeholder> getAllDefaultByRole(String type) {
|
|
return (type == null?this.dao.findByDefaultId(null):this.dao.findByDefaultIdAndType(null, type)).stream()
|
|
.filter(stakeholder -> this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), true))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
public List<Stakeholder> getStakeholdersByTypeAndRole(String type, String defaultId, boolean manage) {
|
|
List<Stakeholder> stakeholders;
|
|
if(type != null && defaultId != null) {
|
|
stakeholders = dao.findByDefaultIdAndType(defaultId, type);
|
|
} else if(defaultId != null) {
|
|
stakeholders = dao.findByDefaultId(defaultId);
|
|
} else if(type != null) {
|
|
stakeholders = dao.findByDefaultIdNotAndType(null, type);
|
|
} else {
|
|
stakeholders = dao.findByDefaultIdNot(null);
|
|
}
|
|
return stakeholders.stream().filter(stakeholder ->
|
|
(!manage && (stakeholder.getVisibility() == Visibility.PUBLIC || stakeholder.getVisibility() == Visibility.RESTRICTED))
|
|
|| this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), false))
|
|
.collect(Collectors.toList());
|
|
}
|
|
|
|
public Stakeholder findByPath(String stakeholderId) {
|
|
return dao.findById(stakeholderId).orElseThrow(() -> new EntityNotFoundException("Stakeholder with id: " + stakeholderId + " not found"));
|
|
}
|
|
|
|
public StakeholderFull getFullStakeholder(Stakeholder stakeholder) {
|
|
if(this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder.getDefaultId() == null) ||
|
|
(stakeholder.getDefaultId() != null && this.commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder))) {
|
|
return new StakeholderFull(stakeholder,
|
|
stakeholder.getTopics().stream()
|
|
.map(topicId -> topicService.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topicId))
|
|
.collect(Collectors.toList()));
|
|
} else {
|
|
return null;
|
|
}
|
|
}
|
|
}
|