added Co Author
This commit is contained in:
@ -2,47 +2,33 @@ package ovh.herisson.Clyde.Services.ScientificPublications;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import org.springframework.stereotype.Service;
|
||||
import ovh.herisson.Clyde.DTO.ScientificPublications.ResearchDTO;
|
||||
import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearchCoAuthorsRepository;
|
||||
import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearchRepository;
|
||||
import ovh.herisson.Clyde.Repositories.ScientificPublications.ResearcherRepository;
|
||||
import ovh.herisson.Clyde.Tables.Role;
|
||||
import ovh.herisson.Clyde.Tables.ScientificPublications.*;
|
||||
import ovh.herisson.Clyde.Tables.User;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Date;
|
||||
import java.util.Map;
|
||||
import java.util.*;
|
||||
|
||||
@Service
|
||||
@AllArgsConstructor
|
||||
@SuppressWarnings("unchecked")
|
||||
public class ResearchesService {
|
||||
|
||||
private final ResearcherRepository researcherRepo;
|
||||
private final ResearchCoAuthorsRepository researchCoAuthorsRepo;
|
||||
private final ResearchRepository articleRepo;
|
||||
|
||||
// Researchers Part
|
||||
public Researcher getResearcherByUser(User user){
|
||||
return researcherRepo.findByUser(user);
|
||||
}
|
||||
|
||||
public boolean isCoAuthor(Research research, Researcher researcher){
|
||||
Iterable<Researcher> coAuthors = researchCoAuthorsRepo.findResearchCoAuthors(research);
|
||||
for (Researcher coAuthor : coAuthors){
|
||||
if (researcher == coAuthor){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// researches Part
|
||||
public Research getResearchById(long id) {
|
||||
return articleRepo.findById(id);
|
||||
}
|
||||
|
||||
public Research getResearchByUrl(String url) {
|
||||
return articleRepo.findByPdfLocation(url);
|
||||
}
|
||||
|
||||
|
||||
public Iterable<Research> getResearchesByAuthor(long authorId){
|
||||
Researcher researcher = researcherRepo.findById(authorId);
|
||||
if (researcher == null) return null;
|
||||
@ -50,29 +36,6 @@ public class ResearchesService {
|
||||
return researcherRepo.findAllByAuthorId(researcher);
|
||||
}
|
||||
|
||||
public boolean hasNoAccessTo(Research research, User user){
|
||||
|
||||
|
||||
if (research.getAccess() == Access.OpenSource) return false; // if the access is open source even non-users can see it
|
||||
if (user == null) return true; // else you need at least to be a user
|
||||
|
||||
if (user.getRole() == Role.Admin) return false;
|
||||
|
||||
if (research.getAccess() == Access.Restricted &&
|
||||
user.getRole() == Role.Secretary ||
|
||||
user.getRole() == Role.Teacher || user.getRole() == Role.InscriptionService)
|
||||
return false; // if the access is restricted only the staff member (above) can access the research
|
||||
|
||||
Researcher researcher = getResearcherByUser(user);
|
||||
|
||||
if (researcher==null)
|
||||
return true;
|
||||
|
||||
return (research.getAccess() != Access.Private || research.getAuthor() != researcher) &&
|
||||
(research.getAccess() != Access.Private || !isCoAuthor(research, researcher));
|
||||
// if the researcher is the author or one of the co-authors of the research will return false
|
||||
}
|
||||
|
||||
public Research saveResearch(Research research) {
|
||||
return articleRepo.save(research);
|
||||
}
|
||||
@ -98,6 +61,18 @@ public class ResearchesService {
|
||||
case "access":
|
||||
research.setAccess(Access.valueOf((String) entry.getValue()));
|
||||
break;
|
||||
case "coAuthors":
|
||||
Set<Researcher> set = new HashSet<>();
|
||||
|
||||
for (int id : (List<Integer>) entry.getValue()) {
|
||||
|
||||
Researcher r = researcherRepo.findById(id);
|
||||
if (r != null){
|
||||
set.add(r);
|
||||
}
|
||||
}
|
||||
research.setCoAuthors(set);
|
||||
break;
|
||||
}
|
||||
}
|
||||
articleRepo.save(research);
|
||||
@ -107,6 +82,12 @@ public class ResearchesService {
|
||||
articleRepo.delete(research);
|
||||
}
|
||||
|
||||
|
||||
// Researchers Part
|
||||
public Researcher getResearcherByUser(User user){
|
||||
return researcherRepo.findByUser(user);
|
||||
}
|
||||
|
||||
public Iterable<Research> getAllResearches() {
|
||||
return articleRepo.findAll();
|
||||
}
|
||||
@ -129,41 +110,6 @@ public class ResearchesService {
|
||||
researcherRepo.delete(researcher);
|
||||
}
|
||||
|
||||
public boolean saveCoAuthors(Iterable<Long> researchersId, Research research) {
|
||||
|
||||
if (researchersId == null) return false;
|
||||
|
||||
ArrayList<Researcher> toAdd = new ArrayList<>();
|
||||
for (long researcherId : researchersId){
|
||||
Researcher researcher= researcherRepo.findById(researcherId);
|
||||
if (research== null){
|
||||
return false;
|
||||
}
|
||||
if (!toAdd.contains(researcher))
|
||||
{
|
||||
toAdd.add(researcher);
|
||||
}
|
||||
}
|
||||
for (Researcher researcher: toAdd){
|
||||
researchCoAuthorsRepo.save(new ResearchCoAuthors(researcher,research));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
public Iterable<Researcher> getCoAuthors(Research research) {
|
||||
return researchCoAuthorsRepo.findResearchCoAuthors(research);
|
||||
}
|
||||
|
||||
public boolean deleteCoAuthor(Research research,Researcher coAuthor) {
|
||||
ResearchCoAuthors result = researchCoAuthorsRepo.findResearchCoAuthors(research,coAuthor);
|
||||
|
||||
if (result ==null)
|
||||
return false;
|
||||
|
||||
researchCoAuthorsRepo.delete(result);
|
||||
return true;
|
||||
}
|
||||
|
||||
public void modifyResearcherData(Researcher researcher, Map<String, Object> updates) {
|
||||
|
||||
for (Map.Entry<String, Object> entry : updates.entrySet()){
|
||||
@ -185,12 +131,69 @@ public class ResearchesService {
|
||||
researcherRepo.save(researcher);
|
||||
}
|
||||
|
||||
public Research getResearchByUrl(String url) {
|
||||
return articleRepo.findByPdfLocation(url);
|
||||
|
||||
//Co Author part
|
||||
public boolean saveCoAuthors(Iterable<Long> researchersId, Research research) {
|
||||
|
||||
if (researchersId == null) return false;
|
||||
|
||||
ArrayList<Researcher> toAdd = new ArrayList<>();
|
||||
for (long researcherId : researchersId){
|
||||
Researcher researcher= researcherRepo.findById(researcherId);
|
||||
if (researcher== null){
|
||||
return false;
|
||||
}
|
||||
if (!toAdd.contains(researcher))
|
||||
{
|
||||
toAdd.add(researcher);
|
||||
}
|
||||
}
|
||||
research.getCoAuthors().addAll(toAdd);
|
||||
articleRepo.save(research);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean deleteCoAuthor(Research research,Researcher coAuthor) {
|
||||
|
||||
if (!research.getCoAuthors().contains(coAuthor))
|
||||
return false;
|
||||
|
||||
research.getCoAuthors().remove(coAuthor);
|
||||
articleRepo.save(research);
|
||||
return true;
|
||||
}
|
||||
|
||||
// Other stuff
|
||||
|
||||
public Research addView(Research research) {
|
||||
research.setViews(research.getViews()+1);
|
||||
return articleRepo.save(research);
|
||||
}
|
||||
|
||||
public boolean hasNoAccessTo(Research research, User user){
|
||||
if (research.getAccess() == Access.OpenSource) return false; // if the access is open source even non-users can see it
|
||||
if (user == null) return true; // else you need at least to be a user
|
||||
|
||||
if (user.getRole() == Role.Admin) return false;
|
||||
|
||||
|
||||
Researcher researcher = getResearcherByUser(user);
|
||||
if (researcher !=null ){
|
||||
if (research.getAuthor().getId() == researcher.getId())
|
||||
return false;
|
||||
|
||||
for (Researcher coAuthor: research.getCoAuthors()){
|
||||
if (coAuthor.getId() == researcher.getId())
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
if (research.getAccess() == Access.Restricted && (
|
||||
user.getRole() == Role.Secretary ||
|
||||
user.getRole() == Role.Teacher || user.getRole() == Role.InscriptionService))
|
||||
return false; // if the access is restricted only the staff member (above) can access the research
|
||||
|
||||
return true;
|
||||
// if the researcher is the author or one of the co-authors of the research will return false
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user