[new-model]: Refactor all delete and change visibility methods.

This commit is contained in:
Konstantinos Triantafyllou 2024-03-13 00:20:55 +02:00
parent e345f5b689
commit 959d553ca4
28 changed files with 580 additions and 613 deletions

View File

@ -249,5 +249,23 @@ public class SectionController {
sectionDAO.save(section); sectionDAO.save(section);
} }
} }
public Section changeVisibilityTree(String sectionId, Visibility visibility) {
Section<String> section = sectionDAO.findById(sectionId);
if (section == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Change section visibility: Section with id: " + sectionId + " not found");
}
Section<Indicator> sectionFull = new Section(section);
List<Indicator> indicatorsFull = new ArrayList();
for (String indicatorId : section.getIndicators()) {
indicatorsFull.add(indicatorController.changeVisibilityTree(indicatorId, null, visibility));
}
sectionFull.setIndicators(indicatorsFull);
return sectionFull;
}
} }
*/ */

View File

@ -1,10 +1,14 @@
package eu.dnetlib.uoamonitorservice.controllers; package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.entities.Portal;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException; import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoaadmintoolslibrary.services.PortalService; import eu.dnetlib.uoaadmintoolslibrary.services.PortalService;
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull; import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder; import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import eu.dnetlib.uoamonitorservice.service.StakeholderService; import eu.dnetlib.uoamonitorservice.service.StakeholderService;
import eu.dnetlib.uoamonitorservice.service.TopicService;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -20,8 +24,8 @@ import java.util.stream.Collectors;
public class StakeholderController { public class StakeholderController {
private final Logger log = LogManager.getLogger(this.getClass()); private final Logger log = LogManager.getLogger(this.getClass());
private PortalService portalService; private final PortalService portalService;
private StakeholderService stakeholderService; private final StakeholderService stakeholderService;
@Autowired @Autowired
public StakeholderController(PortalService portalService, StakeholderService stakeholderService) { public StakeholderController(PortalService portalService, StakeholderService stakeholderService) {
@ -39,33 +43,24 @@ public class StakeholderController {
return stakeholderAlias; return stakeholderAlias;
} }
/* @PreAuthorize("hasAnyAuthority(" + @PreAuthorize("hasAnyAuthority(" +
"@AuthorizationService.PORTAL_ADMIN, " + "@AuthorizationService.PORTAL_ADMIN, " +
"@AuthorizationService.curator(#stakeholderFull.getType()))") "@AuthorizationService.curator(#stakeholder.getType()))")
@RequestMapping(value = "/build-stakeholder", method = RequestMethod.POST) @RequestMapping(value = "/build-stakeholder", method = RequestMethod.POST)
public StakeholderFull buildFullStakeholder(@RequestBody StakeholderFull stakeholderFull) { public StakeholderFull buildFullStakeholder(@RequestBody StakeholderFull stakeholder) {
log.debug("build stakeholder"); log.debug("build stakeholder");
log.debug("Alias: " + stakeholderFull.getAlias()); log.debug("Alias: " + stakeholder.getAlias());
Stakeholder stakeholder = new Stakeholder(stakeholderFull); stakeholder = this.stakeholderService.buildStakeholder(stakeholder);
stakeholderFull.setTopics(stakeholderFull.getTopics().stream().map(topic -> topicController.buildTopic(topic))); Portal portal = portalService.getPortal(stakeholder.getAlias());
stakeholder.setTopics(stakeholderFull.getTopics().stream().map(TopicFull::getId).collect(Collectors.toList()));
Date date = new Date();
stakeholder.setCreationDate(date);
stakeholder.setUpdateDate(date);
stakeholderFull.setCreationDate(date);
stakeholderFull.setUpdateDate(date);
stakeholder = stakeholderDAO.save(stakeholder);
stakeholderFull.setId(stakeholder.getId());
Portal portal = portalService.getPortal(stakeholderFull.getAlias());
if (portal == null) { if (portal == null) {
portal = new Portal(); portal = new Portal();
portal.setPid(stakeholderFull.getAlias()); portal.setPid(stakeholder.getAlias());
portal.setName(stakeholderFull.getName()); portal.setName(stakeholder.getName());
portal.setType(stakeholderFull.getType()); portal.setType(stakeholder.getType());
portalService.insertPortal(portal); portalService.insertPortal(portal);
} }
return stakeholderFull; return stakeholder;
}*/ }
@PreAuthorize("hasAnyAuthority(" + "@AuthorizationService.PORTAL_ADMIN)") @PreAuthorize("hasAnyAuthority(" + "@AuthorizationService.PORTAL_ADMIN)")
@RequestMapping(value = "/stakeholder/all", method = RequestMethod.GET) @RequestMapping(value = "/stakeholder/all", method = RequestMethod.GET)
@ -77,7 +72,7 @@ public class StakeholderController {
@RequestMapping(value = "/stakeholder/default", method = RequestMethod.GET) @RequestMapping(value = "/stakeholder/default", method = RequestMethod.GET)
public List<StakeholderFull> getAllDefaultStakeholders(@RequestParam(required = false) String type) { public List<StakeholderFull> getAllDefaultStakeholders(@RequestParam(required = false) String type) {
return this.stakeholderService.getAllDefaultByRole(type).stream() return this.stakeholderService.getAllDefaultByRole(type).stream()
.map(stakeholder -> this.stakeholderService.getFullStakeholder(stakeholder)) .map(this.stakeholderService::getFullStakeholder)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
@ -102,106 +97,37 @@ public class StakeholderController {
return stakeholder; return stakeholder;
} }
/*@PreAuthorize("hasAnyAuthority(" @PreAuthorize("hasAnyAuthority("
+ "@AuthorizationService.PORTAL_ADMIN, " + "@AuthorizationService.PORTAL_ADMIN, "
+ "@AuthorizationService.curator(#_stakeholder.getType()), " + "@AuthorizationService.curator(#stakeholder.getType()), "
+ "@AuthorizationService.manager(#_stakeholder.getType(), #_stakeholder.getAlias()) " + "@AuthorizationService.manager(#stakeholder.getType(), #stakeholder.getAlias()) "
+ ")") + ")")
@RequestMapping(value = "/save", method = RequestMethod.POST) @RequestMapping(value = "/save", method = RequestMethod.POST)
public Stakeholder saveStakeholder(@RequestBody Stakeholder stakeholder) { public StakeholderFull saveStakeholder(@RequestBody StakeholderFull stakeholder) {
log.debug("save stakeholder"); log.debug("save stakeholder");
log.debug("Alias: " + stakeholder.getAlias() + " - Id: " + stakeholder.getId()); log.debug("Alias: " + stakeholder.getAlias() + " - Id: " + stakeholder.getId());
Date date = new Date(); stakeholder.update(this.stakeholderService.save(new Stakeholder(stakeholder)));
stakeholder.setUpdateDate(date); return stakeholder;
List<String> topics = new ArrayList<>();
if (stakeholder.getId() == null) {
stakeholder.setCreationDate(date);
} else {
Stakeholder oldStakeholder = stakeholderDAO.findById(stakeholder.getId());
if (oldStakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("save stakeholder: Stakeholder with id: " + stakeholder.getId() + " not found");
}
for (String topicId : oldStakeholder.getTopics()) {
Topic topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Save stakeholder: Topic with id: " + topicId + " not found (topic exists in stakeholder: " + stakeholder.getId() + ")");
}
topics.add(topic.getId());
}
}
stakeholder.setTopics(topics);
return stakeholderDAO.save(stakeholder);
}*/
/* @PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/delete", method = RequestMethod.DELETE)
public boolean deleteStakeholder(@PathVariable("stakeholderId") String stakeholderId) {
log.debug("delete stakeholder");
log.debug("Id: " + stakeholderId);
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
String pid = null;
if (stakeholder != null) {
pid = stakeholder.getAlias();
if (!rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete stakeholder: You are not authorized to delete stakeholder with id: " + stakeholderId);
}
topicController.deleteTree(stakeholder);
stakeholder.setTopics(null);
stakeholderDAO.delete(stakeholderId);
log.debug("Stakeholder deleted!");
Portal portal = portalService.getPortal(pid);
if (portal != null) {
portalService.deletePortal(portal.getId());
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Delete stakeholder: Stakeholder with id: " + stakeholderId + " not found");
}
return true;
}*/
/*@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/change-visibility", method = RequestMethod.POST)
public Stakeholder changeStakeholderVisibility(@PathVariable("stakeholderId") String stakeholderId,
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
log.debug("change stakeholder visibility: " + visibility + " - toggle propagate: " + ((propagate != null && propagate) ? "true" : "false"));
log.debug("Stakeholder: " + stakeholderId);
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
if (stakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Change stakeholder visibility: Stakeholder with id: " + stakeholderId + " not found");
}
if (!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Change stakeholder visibility: You are not authorized to update stakeholder with id: " + stakeholderId);
}
return changeStakeholderVisibilityTree(stakeholder, visibility, propagate);
} }
private Stakeholder changeStakeholderVisibilityTree(Stakeholder stakeholder, Visibility visibility, Boolean propagate) { @PreAuthorize("isAuthenticated()")
Stakeholder<Topic> stakeholderFull = new Stakeholder<>(stakeholder); @RequestMapping(value = "/{stakeholderId}/delete", method = RequestMethod.DELETE)
List<Topic> topicsFull = new ArrayList<>(); public boolean deleteStakeholder(@PathVariable("stakeholderId") String id) {
log.debug("delete stakeholder");
if (propagate != null && propagate) { log.debug("Id: " + id);
for (String topicId : stakeholder.getTopics()) { Portal portal = portalService.getPortal(this.stakeholderService.delete(id));
topicsFull.add(topicController.changeVisibilityTree(topicId, visibility, propagate)); if (portal != null) {
} portalService.deletePortal(portal.getId());
} }
return true;
}
stakeholder.setVisibility(visibility); @PreAuthorize("isAuthenticated()")
stakeholderDAO.save(stakeholder); @RequestMapping(value = "/{stakeholderId}/change-visibility", method = RequestMethod.POST)
log.debug("Stakeholder toggled!"); public StakeholderFull changeStakeholderVisibility(@PathVariable("stakeholderId") String stakeholderId,
@RequestParam("visibility") Visibility visibility, @RequestParam(defaultValue = "false") Boolean propagate) {
stakeholderFull.setVisibility(visibility); log.debug("change stakeholder visibility: " + visibility + " - toggle propagate: " + ((propagate != null && propagate) ? "true" : "false"));
stakeholderFull.setTopics(topicsFull); log.debug("Stakeholder: " + stakeholderId);
return this.stakeholderService.changeVisibility(stakeholderId, visibility, propagate);
return stakeholder; }
}*/
} }

View File

@ -1,71 +1,32 @@
/*
package eu.dnetlib.uoamonitorservice.controllers; package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.dto.TopicFull; import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.*; import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility; import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
import eu.dnetlib.uoamonitorservice.service.TopicService;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@RestController @RestController
@CrossOrigin(origins = "*") @CrossOrigin(origins = "*")
public class TopicController { public class TopicController {
private final Logger log = LogManager.getLogger(this.getClass()); private final Logger log = LogManager.getLogger(this.getClass());
@Autowired private TopicService topicService;
private RolesUtils rolesUtils; private StakeholderService stakeholderService;
@Autowired @Autowired
private StakeholderDAO stakeholderDAO; public TopicController(TopicService topicService, StakeholderService stakeholderService) {
this.topicService = topicService;
@Autowired this.stakeholderService = stakeholderService;
private TopicDAO topicDAO;
@Autowired
private CategoryController categoryController;
@Autowired
private CategoryDAO categoryDAO;
public TopicFull buildTopic(TopicFull topicFull) {
Topic topic = new Topic(topicFull);
List<String> categories = new ArrayList<>();
List<Category> categoriesFull = new ArrayList<>();
for(Category<SubCategory> category : topicFull.getCategories()) {
Category<SubCategory> categoryFull = categoryController.buildCategory(category);
categoriesFull.add(categoryFull);
categories.add(categoryFull.getId());
}
topicFull.setCategories(categoriesFull);
topic.setCategories(categories);
Date date = new Date();
topic.setCreationDate(date);
topic.setUpdateDate(date);
topicFull.setCreationDate(date);
topicFull.setUpdateDate(date);
topicDAO.save(topic);
topicFull.setId(topic.getId());
return topicFull;
} }
@PreAuthorize("isAuthenticated()") /*@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/save", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/save", method = RequestMethod.POST)
public Topic<Category> saveTopic(@PathVariable("stakeholderId") String stakeholderId, public Topic<Category> saveTopic(@PathVariable("stakeholderId") String stakeholderId,
@RequestBody Topic<Category> topicFull) { @RequestBody Topic<Category> topicFull) {
@ -190,7 +151,7 @@ public class TopicController {
topicBasedOnDefault.setUpdateDate(topic.getUpdateDate()); topicBasedOnDefault.setUpdateDate(topic.getUpdateDate());
topicDAO.save(topicBasedOnDefault); topicDAO.save(topicBasedOnDefault);
} }
} }*/
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/delete", method = RequestMethod.DELETE) @RequestMapping(value = "/{stakeholderId}/{topicId}/delete", method = RequestMethod.DELETE)
@ -198,100 +159,15 @@ public class TopicController {
@PathVariable("topicId") String topicId, @PathVariable("topicId") String topicId,
@RequestParam(required = false) String children) { @RequestParam(required = false) String children) {
log.debug("delete topic"); log.debug("delete topic");
log.debug("Id: "+topicId + " - Stakeholder: "+stakeholderId); log.debug("Id: " + topicId + " - Stakeholder: " + stakeholderId);
Stakeholder stakeholder = stakeholderService.findById(stakeholderId);
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); Topic topic = this.topicService.findByPath(stakeholder, topicId);
this.topicService.delete(stakeholder.getType(), topic, true);
if(stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete topic: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic != null) {
if(topic.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete topic: You are not authorized to delete a default Topic in stakeholder with id: "+stakeholderId);
}
List<String> topics = stakeholder.getTopics();
int index = topics.indexOf(topicId);
if(index != -1) {
// this topic belongs in default profile
if(stakeholder.getDefaultId() == null && children != null) {
onDeleteDefaultTopic(topicId, stakeholderId, children);
}
categoryController.deleteTree(topic);
topic.setCategories(null);
topics.remove(index);
stakeholderDAO.save(stakeholder);
topicDAO.delete(topicId);
log.debug("Topic deleted!");
} else {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Delete topic: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId);
}
} else {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Delete topic: Topic with id: "+topicId+" not found");
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Delete topic: Stakeholder with id: "+stakeholderId+" not found");
}
return true; return true;
} }
public boolean onDeleteDefaultTopic(String defaultTopicId, String defaultStakeholderId, String children) { /*@PreAuthorize("isAuthenticated()")
if(children.equals("delete")) {
List<Stakeholder> stakeholders = stakeholderDAO.findByDefaultId(defaultStakeholderId);
List<Topic> topics = topicDAO.findByDefaultId(defaultTopicId);
for(Stakeholder stakeholder : stakeholders) {
Iterator<Topic> topicsIterator = topics.iterator();
while(topicsIterator.hasNext()) {
Topic topic = topicsIterator.next();
String topicId = topic.getId();
if(stakeholder.getTopics() != null && stakeholder.getTopics().contains(topicId)) {
topicsIterator.remove();
stakeholder.getTopics().remove(topicId);
stakeholderDAO.save(stakeholder);
categoryController.deleteTree(topic);
topicDAO.delete(topicId);
log.debug("Topic with id: "+topicId+" deleted!");
break;
}
}
}
} else if(children.equals("disconnect")) {
List<Topic> topics = topicDAO.findByDefaultId(defaultTopicId);
for(Topic topic : topics) {
categoryController.disConnectTree(topic);
topic.setDefaultId(null);
topicDAO.save(topic);
log.debug("DefaultId for Topic with id: "+topic.getId()+" cleared!");
}
}
return true;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/reorder", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/reorder", method = RequestMethod.POST)
public List<Topic> reorderTopics(@PathVariable("stakeholderId") String stakeholderId, public List<Topic> reorderTopics(@PathVariable("stakeholderId") String stakeholderId,
@RequestBody List<String> topics) { @RequestBody List<String> topics) {
@ -332,73 +208,16 @@ public class TopicController {
// EXCEPTION - Stakeholder not found // EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Reorder topics: Stakeholder with id: "+stakeholderId+" not found"); throw new EntityNotFoundException("Reorder topics: Stakeholder with id: "+stakeholderId+" not found");
} }
} }*/
@PreAuthorize("isAuthenticated()") @PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/change-visibility", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/{topicId}/change-visibility", method = RequestMethod.POST)
public Topic changeTopicVisibility(@PathVariable("stakeholderId") String stakeholderId, public TopicFull changeTopicVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId, @PathVariable("topicId") String topicId,
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) { @RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
log.debug("change topic visibility: "+visibility + " - toggle propagate: "+((propagate != null && propagate) ? "true" : "false")); log.debug("change topic visibility: " + visibility + " - toggle propagate: " + ((propagate != null && propagate) ? "true" : "false"));
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId); log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId);
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); return this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topicId, visibility, propagate);
if (stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Toggle topic: You are not authorized to update stakeholder with id: "+stakeholderId);
}
if (stakeholder.getTopics().contains(topicId)) {
return changeVisibilityTree(topicId, visibility, propagate);
} else {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Toggle topic: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId);
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Toggle topic: Stakeholder with id: "+stakeholderId+" not found");
}
}
public Topic changeVisibilityTree(String topicId, Visibility visibility, Boolean propagate) {
Topic<String> topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Change topic visibility: Topic with id: "+topicId+" not found");
}
Topic<Category> topicFull = new Topic(topic);
List<Category> categoriesFull = new ArrayList<>();
if(propagate != null && propagate) {
for (String categoryId : topic.getCategories()) {
categoriesFull.add(categoryController.changeVisibilityTree(categoryId, visibility, propagate));
}
}
topic.setVisibility(visibility);
topicDAO.save(topic);
log.debug("Topic toggled!");
topicFull.setVisibility(visibility);
topicFull.setCategories(categoriesFull);
return topicFull;
}
public void deleteTree(Stakeholder stakeholder) {
List<String> topics = stakeholder.getTopics();
for(String topicId : topics) {
Topic topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Topic delete tree: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholder.getId()+")");
}
categoryController.deleteTree(topic);
topicDAO.delete(topicId);
}
} }
} }
*/

View File

@ -12,7 +12,7 @@ public interface CategoryDAO extends MongoRepository<Category, String> {
List<Category> findAll(); List<Category> findAll();
List<Category> findByDefaultId(String DefaultId); List<Category> findByDefaultId(String DefaultId);
Optional<Category> findBySubCategoriesContaining(String subCategory); List<Category> findBySubCategoriesContaining(String subCategory);
Optional<Category> findById(String Id); Optional<Category> findById(String Id);

View File

@ -11,6 +11,7 @@ import java.util.Optional;
public interface SectionDAO extends MongoRepository<Section, String> { public interface SectionDAO extends MongoRepository<Section, String> {
List<Section> findAll(); List<Section> findAll();
List<Section> findByDefaultId(String DefaultId); List<Section> findByDefaultId(String DefaultId);
List<Section> findByIndicatorsContaining(String id);
Optional<Section> findById(String Id); Optional<Section> findById(String Id);

View File

@ -18,7 +18,7 @@ public interface StakeholderDAO extends MongoRepository<Stakeholder, String> {
List<Stakeholder> findByDefaultIdNot(String DefaultId); List<Stakeholder> findByDefaultIdNot(String DefaultId);
List<Stakeholder> findByDefaultIdNotAndType(String DefaultId, String Type); List<Stakeholder> findByDefaultIdNotAndType(String DefaultId, String Type);
Optional<Stakeholder> findByTopicsContaining(String topic); List<Stakeholder> findByTopicsContaining(String topic);
Optional<Stakeholder> findById(String Id); Optional<Stakeholder> findById(String Id);
Optional<Stakeholder> findByAlias(String Alias); Optional<Stakeholder> findByAlias(String Alias);

View File

@ -12,6 +12,9 @@ public interface SubCategoryDAO extends MongoRepository<SubCategory, String> {
List<SubCategory> findAll(); List<SubCategory> findAll();
List<SubCategory> findByDefaultId(String DefaultId); List<SubCategory> findByDefaultId(String DefaultId);
List<SubCategory> findByNumbersContaining(String id);
List<SubCategory> findByChartsContaining(String id);
Optional<SubCategory> findById(String Id); Optional<SubCategory> findById(String Id);
void delete(String Id); void delete(String Id);

View File

@ -12,7 +12,7 @@ public interface TopicDAO extends MongoRepository<Topic, String> {
List<Topic> findAll(); List<Topic> findAll();
List<Topic> findByDefaultId(String DefaultId); List<Topic> findByDefaultId(String DefaultId);
Optional<Topic> findByCategoriesContaining(String category); List<Topic> findByCategoriesContaining(String category);
Optional<Topic> findById(String Id); Optional<Topic> findById(String Id);

View File

@ -7,6 +7,10 @@ import java.util.Objects;
public class StakeholderFull extends StakeholderGeneric<TopicFull> { public class StakeholderFull extends StakeholderGeneric<TopicFull> {
public StakeholderFull() {
super();
}
public StakeholderFull(StakeholderGeneric stakeholder, List<TopicFull> topics) { public StakeholderFull(StakeholderGeneric stakeholder, List<TopicFull> topics) {
super(stakeholder); super(stakeholder);
topics.removeIf(Objects::isNull); topics.removeIf(Objects::isNull);

View File

@ -2,10 +2,13 @@ package eu.dnetlib.uoamonitorservice.entities;
import eu.dnetlib.uoamonitorservice.dto.CategoryFull; import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
import eu.dnetlib.uoamonitorservice.generics.CategoryGeneric; import eu.dnetlib.uoamonitorservice.generics.CategoryGeneric;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.TopicGeneric; import eu.dnetlib.uoamonitorservice.generics.TopicGeneric;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Objects;
import java.util.stream.Collectors;
@Document @Document
public class Category extends CategoryGeneric<String> { public class Category extends CategoryGeneric<String> {
@ -15,6 +18,8 @@ public class Category extends CategoryGeneric<String> {
public Category(CategoryFull category) { public Category(CategoryFull category) {
super(category); super(category);
this.subCategories = category.getSubCategories().stream().map(Common::getId).collect(Collectors.toList());
this.subCategories.removeIf(Objects::isNull);
} }
public void copyFromDefault(CategoryGeneric defaultCategory) { public void copyFromDefault(CategoryGeneric defaultCategory) {

View File

@ -14,19 +14,11 @@ import java.util.Date;
import java.util.List; import java.util.List;
public class Indicator extends Common { public class Indicator extends Common {
@Id
@JsonProperty("_id")
private String id;
private String additionalDescription; private String additionalDescription;
private IndicatorType type; //number,chart private IndicatorType type; //number,chart
private IndicatorSize width; //small,medium,large private IndicatorSize width; //small,medium,large
private IndicatorSize height = IndicatorSize.MEDIUM; //small,medium,large private IndicatorSize height = IndicatorSize.MEDIUM; //small,medium,large
private List<String> tags; // this field is not used anywhere now private List<String> tags; // this field is not used anywhere now
@CreatedDate
private Date creationDate;
@LastModifiedDate
private Date updateDate;
private String defaultId;
private List<IndicatorPath> indicatorPaths; private List<IndicatorPath> indicatorPaths;
public void copyFromDefault(Indicator defaultIndicator, Visibility visibility) { public void copyFromDefault(Indicator defaultIndicator, Visibility visibility) {
@ -44,14 +36,6 @@ public class Indicator extends Common {
setIndicatorPaths(defaultIndicator.getIndicatorPaths()); setIndicatorPaths(defaultIndicator.getIndicatorPaths());
} }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getAdditionalDescription() { public String getAdditionalDescription() {
return additionalDescription; return additionalDescription;
} }
@ -100,30 +84,6 @@ public class Indicator extends Common {
this.tags = tags; this.tags = tags;
} }
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<IndicatorPath> getIndicatorPaths() { public List<IndicatorPath> getIndicatorPaths() {
return indicatorPaths; return indicatorPaths;
} }
@ -131,8 +91,4 @@ public class Indicator extends Common {
public void setIndicatorPaths(List<IndicatorPath> indicatorPaths) { public void setIndicatorPaths(List<IndicatorPath> indicatorPaths) {
this.indicatorPaths = indicatorPaths; this.indicatorPaths = indicatorPaths;
} }
// public String hasType() {
// return this.type.name();
// }
} }

View File

@ -14,8 +14,7 @@ public class Section extends SectionGeneric<String> {
public Section(SectionFull section) { public Section(SectionFull section) {
super(section); super(section);
List<String> indicators = section.getIndicators().stream().map(Indicator::getId).collect(Collectors.toList()); this.indicators = section.getIndicators().stream().map(Indicator::getId).collect(Collectors.toList());
indicators.removeIf(Objects::isNull); this.indicators.removeIf(Objects::isNull);
this.setIndicators(indicators);
} }
} }

View File

@ -1,8 +1,13 @@
package eu.dnetlib.uoamonitorservice.entities; package eu.dnetlib.uoamonitorservice.entities;
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.StakeholderGeneric; import eu.dnetlib.uoamonitorservice.generics.StakeholderGeneric;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
import java.util.stream.Collectors;
@Document @Document
public class Stakeholder extends StakeholderGeneric<String> { public class Stakeholder extends StakeholderGeneric<String> {
@ -10,7 +15,9 @@ public class Stakeholder extends StakeholderGeneric<String> {
super(); super();
} }
public Stakeholder(StakeholderGeneric stakeholder) { public Stakeholder(StakeholderFull stakeholder) {
super(stakeholder); super(stakeholder);
this.topics = stakeholder.getTopics().stream().map(Common::getId).collect(Collectors.toList());
this.topics.removeIf(Objects::isNull);
} }
} }

View File

@ -1,13 +1,22 @@
package eu.dnetlib.uoamonitorservice.entities; package eu.dnetlib.uoamonitorservice.entities;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.SubCategoryGeneric; import eu.dnetlib.uoamonitorservice.generics.SubCategoryGeneric;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
import java.util.stream.Collectors;
@Document @Document
public class SubCategory extends SubCategoryGeneric<String> { public class SubCategory extends SubCategoryGeneric<String> {
public SubCategory() {} public SubCategory() {}
public SubCategory(SubCategoryGeneric subCategory) { public SubCategory(SubCategoryFull subCategory) {
super(subCategory); super(subCategory);
this.numbers = subCategory.getNumbers().stream().map(Common::getId).collect(Collectors.toList());
this.charts = subCategory.getCharts().stream().map(Common::getId).collect(Collectors.toList());
this.numbers.removeIf(Objects::isNull);
this.charts.removeIf(Objects::isNull);
} }
} }

View File

@ -1,15 +1,23 @@
package eu.dnetlib.uoamonitorservice.entities; package eu.dnetlib.uoamonitorservice.entities;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.TopicGeneric; import eu.dnetlib.uoamonitorservice.generics.TopicGeneric;
import org.springframework.data.mongodb.core.mapping.Document; import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Objects;
import java.util.stream.Collectors;
@Document @Document
public class Topic extends TopicGeneric<String> { public class Topic extends TopicGeneric<String> {
public Topic() { public Topic() {
super(); super();
} }
public Topic(TopicGeneric topic) {
public Topic(TopicFull topic) {
super(topic); super(topic);
this.categories = topic.getCategories().stream().map(Common::getId).collect(Collectors.toList());
this.categories.removeIf(Objects::isNull);
} }
} }

View File

@ -14,15 +14,7 @@ import java.util.List;
@Document @Document
public class CategoryGeneric<StringOrSubcategory> extends Common { public class CategoryGeneric<StringOrSubcategory> extends Common {
@Id
@JsonProperty("_id")
protected String id;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected boolean isOverview; protected boolean isOverview;
protected String defaultId;
protected List<StringOrSubcategory> subCategories; protected List<StringOrSubcategory> subCategories;
public CategoryGeneric() {} public CategoryGeneric() {}
@ -38,30 +30,6 @@ public class CategoryGeneric<StringOrSubcategory> extends Common {
defaultId = category.getDefaultId(); defaultId = category.getDefaultId();
} }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public boolean getIsOverview() { public boolean getIsOverview() {
return isOverview; return isOverview;
} }
@ -70,14 +38,6 @@ public class CategoryGeneric<StringOrSubcategory> extends Common {
this.isOverview = isOverview; this.isOverview = isOverview;
} }
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<StringOrSubcategory> getSubCategories() { public List<StringOrSubcategory> getSubCategories() {
return subCategories; return subCategories;
} }

View File

@ -1,13 +1,66 @@
package eu.dnetlib.uoamonitorservice.generics; package eu.dnetlib.uoamonitorservice.generics;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.primitives.Visibility; import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.Date;
public class Common { public class Common {
@Id
@JsonProperty("_id")
protected String id;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected String defaultId;
protected String name; protected String name;
protected String description; protected String description;
protected String alias; protected String alias;
protected Visibility visibility = Visibility.PRIVATE; protected Visibility visibility = Visibility.PRIVATE;
public void update(Common common) {
this.id = common.getId();
this.creationDate = common.getCreationDate();
this.updateDate = common.getUpdateDate();
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public String getName() { public String getName() {
return name; return name;
} }

View File

@ -1,27 +1,14 @@
package eu.dnetlib.uoamonitorservice.generics; package eu.dnetlib.uoamonitorservice.generics;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorType; import eu.dnetlib.uoamonitorservice.primitives.IndicatorType;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List; import java.util.List;
public class SectionGeneric<StringOrIndicator> { public class SectionGeneric<StringOrIndicator> extends Common {
@Id
@JsonProperty("_id")
protected String id;
protected String title; protected String title;
protected String defaultId;
protected String stakeholderAlias; protected String stakeholderAlias;
protected IndicatorType type; protected IndicatorType type;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected List<StringOrIndicator> indicators; protected List<StringOrIndicator> indicators;
public SectionGeneric() { public SectionGeneric() {
@ -46,14 +33,6 @@ public class SectionGeneric<StringOrIndicator> {
setIndicators(new ArrayList<>()); setIndicators(new ArrayList<>());
} }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() { public String getTitle() {
return title; return title;
} }
@ -62,14 +41,6 @@ public class SectionGeneric<StringOrIndicator> {
this.title = title; this.title = title;
} }
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public String getStakeholderAlias() { public String getStakeholderAlias() {
return stakeholderAlias; return stakeholderAlias;
} }
@ -93,22 +64,6 @@ public class SectionGeneric<StringOrIndicator> {
} }
} }
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public List<StringOrIndicator> getIndicators() { public List<StringOrIndicator> getIndicators() {
return indicators; return indicators;
} }

View File

@ -13,9 +13,6 @@ import java.util.List;
public class StakeholderGeneric<StringOrTopic> extends Common { public class StakeholderGeneric<StringOrTopic> extends Common {
@Id
@JsonProperty("_id")
protected String id;
protected StakeholderType type; protected StakeholderType type;
protected Date projectUpdateDate = null; protected Date projectUpdateDate = null;
protected String index_id; protected String index_id;
@ -24,13 +21,8 @@ public class StakeholderGeneric<StringOrTopic> extends Common {
protected String statsProfile = "monitor"; protected String statsProfile = "monitor";
protected String logoUrl; protected String logoUrl;
protected boolean isUpload = false; protected boolean isUpload = false;
protected String defaultId = null;
protected Locale locale = Locale.EU; protected Locale locale = Locale.EU;
protected String funderType; protected String funderType;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected List<StringOrTopic> topics; protected List<StringOrTopic> topics;
public StakeholderGeneric() { public StakeholderGeneric() {
@ -57,14 +49,6 @@ public class StakeholderGeneric<StringOrTopic> extends Common {
updateDate = stakeholder.getUpdateDate(); updateDate = stakeholder.getUpdateDate();
} }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getType() { public String getType() {
if (type == null) { if (type == null) {
return null; return null;
@ -137,14 +121,6 @@ public class StakeholderGeneric<StringOrTopic> extends Common {
this.isUpload = isUpload; this.isUpload = isUpload;
} }
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public String getLocale() { public String getLocale() {
return locale.label; return locale.label;
} }
@ -167,22 +143,6 @@ public class StakeholderGeneric<StringOrTopic> extends Common {
this.funderType = funderType; this.funderType = funderType;
} }
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public List<StringOrTopic> getTopics() { public List<StringOrTopic> getTopics() {
return topics; return topics;
} }

View File

@ -12,14 +12,6 @@ import java.util.Date;
import java.util.List; import java.util.List;
public class SubCategoryGeneric<StringOrSection> extends Common { public class SubCategoryGeneric<StringOrSection> extends Common {
@Id
@JsonProperty("_id")
protected String id;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected String defaultId;
protected List<StringOrSection> charts; protected List<StringOrSection> charts;
protected List<StringOrSection> numbers; protected List<StringOrSection> numbers;
@ -53,40 +45,8 @@ public class SubCategoryGeneric<StringOrSection> extends Common {
setCreationDate(defaultSubCategory.getCreationDate()); setCreationDate(defaultSubCategory.getCreationDate());
setUpdateDate(defaultSubCategory.getUpdateDate()); setUpdateDate(defaultSubCategory.getUpdateDate());
setDefaultId(defaultSubCategory.getId()); setDefaultId(defaultSubCategory.getId());
setCharts(new ArrayList()); setCharts(new ArrayList<>());
setNumbers(new ArrayList()); setNumbers(new ArrayList<>());
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
} }
public List<StringOrSection> getCharts() { public List<StringOrSection> getCharts() {

View File

@ -11,15 +11,7 @@ import java.util.Date;
import java.util.List; import java.util.List;
public class TopicGeneric<StringOrCategory> extends Common { public class TopicGeneric<StringOrCategory> extends Common {
@Id
@JsonProperty("_id")
protected String id;
protected String icon; protected String icon;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected String defaultId;
protected List<StringOrCategory> categories; protected List<StringOrCategory> categories;
public TopicGeneric() { public TopicGeneric() {
@ -49,14 +41,6 @@ public class TopicGeneric<StringOrCategory> extends Common {
setCategories(new ArrayList<>()); setCategories(new ArrayList<>());
} }
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getIcon() { public String getIcon() {
return icon; return icon;
@ -66,30 +50,6 @@ public class TopicGeneric<StringOrCategory> extends Common {
this.icon = icon; this.icon = icon;
} }
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<StringOrCategory> getCategories() { public List<StringOrCategory> getCategories() {
return categories; return categories;
} }

View File

@ -1,14 +1,15 @@
package eu.dnetlib.uoamonitorservice.service; package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.CategoryDAO; import eu.dnetlib.uoamonitorservice.dao.CategoryDAO;
import eu.dnetlib.uoamonitorservice.dao.TopicDAO;
import eu.dnetlib.uoamonitorservice.dto.CategoryFull; import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Category; import eu.dnetlib.uoamonitorservice.entities.Category;
import eu.dnetlib.uoamonitorservice.entities.Topic; import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.method.P;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -16,16 +17,18 @@ import java.util.stream.Collectors;
@Service @Service
public class CategoryService { public class CategoryService {
private final TopicDAO topicDAO;
private final CategoryDAO dao; private final CategoryDAO dao;
private final SubCategoryService subCategoryService; private final SubCategoryService subCategoryService;
private final CommonService commonService; private final CommonService commonService;
@Autowired @Autowired
public CategoryService(SubCategoryService subCategoryService, CommonService commonService, CategoryDAO dao) { public CategoryService(TopicDAO topicDAO, CategoryDAO dao, SubCategoryService subCategoryService, CommonService commonService) {
this.topicDAO = topicDAO;
this.dao = dao;
this.subCategoryService = subCategoryService; this.subCategoryService = subCategoryService;
this.commonService = commonService; this.commonService = commonService;
this.dao = dao;
} }
public Category findByPath(Topic topic, String categoryId, String message) { public Category findByPath(Topic topic, String categoryId, String message) {
@ -49,4 +52,61 @@ public class CategoryService {
public Category find(String id) { public Category find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Category with id: " + id + " not found")); return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Category with id: " + id + " not found"));
} }
public CategoryFull buildCategory(CategoryFull categoryFull) {
categoryFull.setSubCategories(categoryFull.getSubCategories().stream().map(this.subCategoryService::buildSubcategory).collect(Collectors.toList()));
categoryFull.update(this.save(new Category(categoryFull)));
return categoryFull;
}
public Category save(Category category) {
category.getSubCategories().forEach(this.subCategoryService::find);
return this.dao.save(category);
}
public void delete(String type, Category category, boolean remove) {
if(this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(category.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
category.getSubCategories().forEach(subcategoryId -> {
this.subCategoryService.delete(type, subcategoryId, false);
});
if(remove){
this.removeCategory(category.getId());
}
this.dao.delete(category);
} else {
throw new ForbiddenException("Delete category: You are not authorized to delete category with id: " + category.getId());
}
}
public void delete(String type, String id, boolean remove) {
Category category = this.find(id);
this.delete(type, category, remove);
}
public void removeCategory(String id) {
this.topicDAO.findByCategoriesContaining(id).forEach(topic -> {
topic.getCategories().remove(id);
this.topicDAO.save(topic);
});
}
public CategoryFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
if(this.commonService.hasEditAuthority(type, alias)) {
CategoryFull categoryFull = this.getFullCategory(type, alias, id);
categoryFull.setVisibility(visibility);
if(propagate) {
categoryFull.setSubCategories(categoryFull.getSubCategories().stream()
.map(category -> this.subCategoryService.changeVisibility(type, alias, category.getId(), visibility, true))
.collect(Collectors.toList()));
}
Category category = this.save(new Category(categoryFull));
categoryFull.update(category);
return categoryFull;
} else {
throw new ForbiddenException("Change category visibility: You are not authorized to update category with id: " + id);
}
}
} }

View File

@ -25,6 +25,18 @@ public class CommonService {
return false; return false;
} }
public boolean hasDeleteAuthority(String type) {
return this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type);
}
public boolean hasCreateAuthority(String type) {
return this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type);
}
public boolean hasEditAuthority(String type, String alias) {
return this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type) || this.authorizationService.isManager(type, alias);
}
public boolean hasVisibilityAuthority(String type, String alias, Common common) { public boolean hasVisibilityAuthority(String type, String alias, Common common) {
if(authorizationService.isPortalAdmin() || authorizationService.isCurator(type) || authorizationService.isManager(type, alias)) { if(authorizationService.isPortalAdmin() || authorizationService.isCurator(type) || authorizationService.isManager(type, alias)) {
return true; return true;

View File

@ -1,20 +1,29 @@
package eu.dnetlib.uoamonitorservice.service; package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.IndicatorDAO; import eu.dnetlib.uoamonitorservice.dao.IndicatorDAO;
import eu.dnetlib.uoamonitorservice.dao.SectionDAO;
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
import eu.dnetlib.uoamonitorservice.entities.Indicator; import eu.dnetlib.uoamonitorservice.entities.Indicator;
import eu.dnetlib.uoamonitorservice.entities.Section;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.stream.Collectors;
@Service @Service
public class IndicatorService { public class IndicatorService {
private final SectionDAO sectionDAO;
private final IndicatorDAO dao; private final IndicatorDAO dao;
private final CommonService commonService; private final CommonService commonService;
@Autowired @Autowired
public IndicatorService(IndicatorDAO dao, CommonService commonService) { public IndicatorService(SectionDAO sectionDAO, IndicatorDAO dao, CommonService commonService) {
this.sectionDAO = sectionDAO;
this.dao = dao; this.dao = dao;
this.commonService = commonService; this.commonService = commonService;
} }
@ -35,4 +44,41 @@ public class IndicatorService {
return null; return null;
} }
} }
public void delete(String type, Indicator indicator, boolean remove) {
if(this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(indicator.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
if(remove) {
this.removeIndicator(indicator.getId());
}
this.dao.delete(indicator);
} else {
throw new ForbiddenException("Delete indicator: You are not authorized to delete indicator with id: " + indicator.getId());
}
}
public void delete(String type, String id, boolean remove) {
Indicator indicator = this.find(id);
this.delete(type, indicator, remove);
}
public void removeIndicator(String id) {
this.sectionDAO.findByIndicatorsContaining(id).forEach(section -> {
section.getIndicators().remove(id);
this.sectionDAO.save(section);
});
}
public Indicator changeVisibility(String type, String alias, String id, Visibility visibility) {
if(this.commonService.hasEditAuthority(type, alias)) {
Indicator indicator = this.getIndicator(type, alias, id);
indicator.setVisibility(visibility);
return this.save(indicator);
} else {
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + id);
}
}
} }

View File

@ -1,6 +1,8 @@
package eu.dnetlib.uoamonitorservice.service; package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.SectionDAO; import eu.dnetlib.uoamonitorservice.dao.SectionDAO;
import eu.dnetlib.uoamonitorservice.dao.SubCategoryDAO;
import eu.dnetlib.uoamonitorservice.dto.SectionFull; import eu.dnetlib.uoamonitorservice.dto.SectionFull;
import eu.dnetlib.uoamonitorservice.entities.Indicator; import eu.dnetlib.uoamonitorservice.entities.Indicator;
import eu.dnetlib.uoamonitorservice.entities.Section; import eu.dnetlib.uoamonitorservice.entities.Section;
@ -15,25 +17,23 @@ import java.util.stream.Collectors;
@Service @Service
public class SectionService { public class SectionService {
private final SubCategoryDAO subCategoryDAO;
private final SectionDAO dao; private final SectionDAO dao;
private final IndicatorService indicatorService; private final IndicatorService indicatorService;
private final CommonService commonService;
@Autowired @Autowired
public SectionService(SectionDAO dao, IndicatorService indicatorService) { public SectionService(SubCategoryDAO subCategoryDAO, SectionDAO dao, IndicatorService indicatorService, CommonService commonService) {
this.subCategoryDAO = subCategoryDAO;
this.dao = dao; this.dao = dao;
this.indicatorService = indicatorService; this.indicatorService = indicatorService;
} this.commonService = commonService;
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) { public SectionFull changeVisibilityTree(String sectionId, Visibility visibility) {
Section section = this.find(sectionId); Section section = this.find(sectionId);
SectionFull sectionFull = new SectionFull(section, section.getIndicators().stream().map(indicatorId -> this.indicatorService.find(indicatorId)).collect(Collectors.toList())); SectionFull sectionFull = new SectionFull(section, section.getIndicators().stream().map(this.indicatorService::find).collect(Collectors.toList()));
sectionFull.setIndicators(sectionFull.getIndicators().stream().map(indicator -> { sectionFull.setIndicators(sectionFull.getIndicators().stream().map(indicator -> {
indicator.setVisibility(visibility); indicator.setVisibility(visibility);
return indicatorService.save(indicator); return indicatorService.save(indicator);
@ -68,4 +68,62 @@ public class SectionService {
public List<String> getIndicatorsId(String id) { public List<String> getIndicatorsId(String id) {
return this.getIndicators(id).stream().map(Indicator::getId).collect(Collectors.toList()); return this.getIndicators(id).stream().map(Indicator::getId).collect(Collectors.toList());
} }
public SectionFull buildSection(SectionFull sectionFull) {
sectionFull.setIndicators(sectionFull.getIndicators().stream().map(this.indicatorService::save).collect(Collectors.toList()));
Section section = this.save(new Section(sectionFull));
return new SectionFull(section, sectionFull.getIndicators());
}
public Section save(Section section) {
section.getIndicators().forEach(this.indicatorService::find);
return this.dao.save(section);
}
public void delete(String type, Section section, boolean remove) {
if(this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(section.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
section.getIndicators().forEach(indicatorId -> {
this.indicatorService.delete(type, indicatorId, false);
});
if (remove) {
this.removeSection(section.getId());
}
this.dao.delete(section);
} else {
throw new ForbiddenException("Delete section: You are not authorized to delete section with id: " + section.getId());
}
}
public void delete(String type, String id, boolean remove) {
Section section = this.find(id);
this.delete(type, section, remove);
}
public void removeSection(String id) {
this.subCategoryDAO.findByNumbersContaining(id).forEach(subCategory -> {
subCategory.getNumbers().remove(id);
this.subCategoryDAO.save(subCategory);
});
this.subCategoryDAO.findByChartsContaining(id).forEach(subCategory -> {
subCategory.getCharts().remove(id);
this.subCategoryDAO.save(subCategory);
});
}
public SectionFull changeVisibility(String type, String alias, String id, Visibility visibility) {
if(this.commonService.hasEditAuthority(type, alias)) {
SectionFull sectionFull = this.getFullSection(type, alias, id);
sectionFull.setIndicators(sectionFull.getIndicators().stream()
.map(category -> this.indicatorService.changeVisibility(type, alias, category.getId(), visibility))
.collect(Collectors.toList()));
Section section = this.save(new Section(sectionFull));
sectionFull.update(section);
return sectionFull;
} else {
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + id);
}
}
} }

View File

@ -1,6 +1,6 @@
package eu.dnetlib.uoamonitorservice.service; package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaauthorizationlibrary.security.AuthorizationService; import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO; import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull; import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder; import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
@ -27,10 +27,22 @@ public class StakeholderService {
this.topicService = topicService; this.topicService = topicService;
} }
public Stakeholder findById(String id) {
return this.dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Stakeholder with id: " + id + " not found"));
}
public Stakeholder findByAlias(String alias) { public Stakeholder findByAlias(String alias) {
return this.dao.findByAlias(alias).orElseThrow(() -> new EntityNotFoundException("Stakeholder with alias: " + alias + " not found")); return this.dao.findByAlias(alias).orElseThrow(() -> new EntityNotFoundException("Stakeholder with alias: " + alias + " not found"));
} }
public List<Stakeholder> findByDefaultId(String id ){
return this.dao.findByDefaultId(id);
}
public Stakeholder findByPath(String stakeholderId) {
return dao.findById(stakeholderId).orElseThrow(() -> new EntityNotFoundException("Stakeholder with id: " + stakeholderId + " not found"));
}
public List<String> getAllAliases() { public List<String> getAllAliases() {
return this.dao.findAll().stream().map(Stakeholder::getAlias).collect(Collectors.toList()); return this.dao.findAll().stream().map(Stakeholder::getAlias).collect(Collectors.toList());
} }
@ -65,10 +77,6 @@ public class StakeholderService {
.collect(Collectors.toList()); .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) { public StakeholderFull getFullStakeholder(Stakeholder stakeholder) {
if(this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder.getDefaultId() == null) || if(this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder.getDefaultId() == null) ||
(stakeholder.getDefaultId() != null && this.commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder))) { (stakeholder.getDefaultId() != null && this.commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder))) {
@ -80,4 +88,49 @@ public class StakeholderService {
return null; return null;
} }
} }
public StakeholderFull buildStakeholder(StakeholderFull stakeholderFull) {
stakeholderFull.setTopics(stakeholderFull.getTopics().stream().map(this.topicService::buildTopic).collect(Collectors.toList()));
stakeholderFull.update(this.save(new Stakeholder(stakeholderFull)));
return stakeholderFull;
}
public Stakeholder save(Stakeholder stakeholder) {
stakeholder.getTopics().forEach(this.topicService::find);
return this.dao.save(stakeholder);
}
public String delete(String id) {
Stakeholder stakeholder = this.findById(id);
if(this.commonService.hasDeleteAuthority(stakeholder.getType())) {
this.dao.findByDefaultId(stakeholder.getId()).forEach(child -> {
this.delete(child.getId());
});
stakeholder.getTopics().forEach(topicId -> {
this.topicService.delete(stakeholder.getType(), topicId, false);
});
this.dao.delete(id);
return stakeholder.getAlias();
} else {
throw new ForbiddenException("Delete stakeholder: You are not authorized to delete stakeholder with id: " + id);
}
}
public StakeholderFull changeVisibility(String id, Visibility visibility, Boolean propagate) {
Stakeholder stakeholder = this.findById(id);
stakeholder.setVisibility(visibility);
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
StakeholderFull stakeholderFull = this.getFullStakeholder(stakeholder);
if(propagate) {
stakeholderFull.setTopics(stakeholder.getTopics().stream().
map(topicId -> this.topicService.changeVisibility(stakeholderFull.getType(), stakeholderFull.getAlias(), topicId, visibility, true))
.collect(Collectors.toList()));
}
stakeholder = this.save(stakeholder);
stakeholderFull.update(stakeholder);
return stakeholderFull;
} else {
throw new ForbiddenException("Change stakeholder visibility: You are not authorized to update stakeholder with id: " + id);
}
}
} }

View File

@ -1,13 +1,21 @@
package eu.dnetlib.uoamonitorservice.service; package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.CategoryDAO;
import eu.dnetlib.uoamonitorservice.dao.SubCategoryDAO; import eu.dnetlib.uoamonitorservice.dao.SubCategoryDAO;
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull; import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
import eu.dnetlib.uoamonitorservice.dto.TopicFull; import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Category; import eu.dnetlib.uoamonitorservice.entities.Category;
import eu.dnetlib.uoamonitorservice.entities.SubCategory; import eu.dnetlib.uoamonitorservice.entities.SubCategory;
import eu.dnetlib.uoamonitorservice.entities.Topic; import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.SectionGeneric;
import eu.dnetlib.uoamonitorservice.generics.SubCategoryGeneric;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorType;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -16,15 +24,17 @@ import java.util.stream.Collectors;
@Service @Service
public class SubCategoryService { public class SubCategoryService {
private final CategoryDAO categoryDAO;
private final SubCategoryDAO dao; private final SubCategoryDAO dao;
private final CommonService commonService; private final CommonService commonService;
private final SectionService sectionService; private final SectionService sectionService;
@Autowired @Autowired
public SubCategoryService( CommonService commonService, SubCategoryDAO dao, SectionService sectionService) { public SubCategoryService(CategoryDAO categoryDAO, SubCategoryDAO dao,CommonService commonService, SectionService sectionService) {
this.commonService = commonService; this.categoryDAO = categoryDAO;
this.dao = dao; this.dao = dao;
this.commonService = commonService;
this.sectionService = sectionService; this.sectionService = sectionService;
} }
@ -52,4 +62,70 @@ public class SubCategoryService {
public SubCategory find(String id) { public SubCategory find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("SubCategory with id: " + id + " not found")); return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("SubCategory with id: " + id + " not found"));
} }
public SubCategoryFull buildSubcategory(SubCategoryFull subCategoryFull) {
subCategoryFull.setNumbers(subCategoryFull.getNumbers().stream().map(this.sectionService::buildSection).collect(Collectors.toList()));
subCategoryFull.setCharts(subCategoryFull.getCharts().stream().map(this.sectionService::buildSection).collect(Collectors.toList()));
subCategoryFull.update(this.save(new SubCategory(subCategoryFull)));
return subCategoryFull;
}
public SubCategory save(SubCategory subCategory) {
subCategory.getNumbers().forEach(this.sectionService::find);
subCategory.getCharts().forEach(this.sectionService::find);
return this.dao.save(subCategory);
}
public void delete(String type, SubCategory subCategory, boolean remove ) {
if(this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(subCategory.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
subCategory.getNumbers().forEach(sectionId -> {
this.sectionService.delete(type, sectionId, false);
});
subCategory.getCharts().forEach(sectionId -> {
this.sectionService.delete(type, sectionId, false);
});
if (remove) {
this.removeSubCategory(subCategory.getId());
}
this.dao.delete(subCategory);
} else {
throw new ForbiddenException("Delete subCategory: You are not authorized to delete subCategory with id: " + subCategory.getId());
}
}
public void delete(String type, String id, boolean remove) {
SubCategory subCategory = this.find(id);
this.delete(type, subCategory, remove);
}
public void removeSubCategory(String id) {
this.categoryDAO.findBySubCategoriesContaining(id).forEach(category -> {
category.getSubCategories().remove(id);
this.categoryDAO.save(category);
});
}
public SubCategoryFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
if(this.commonService.hasEditAuthority(type, alias)) {
SubCategoryFull subCategoryFull = this.getFullSubCategory(type, alias, id);
subCategoryFull.setVisibility(visibility);
if(propagate) {
subCategoryFull.setNumbers(subCategoryFull.getNumbers().stream()
.map(category -> this.sectionService.changeVisibility(type, alias, category.getId(), visibility))
.collect(Collectors.toList()));
subCategoryFull.setCharts(subCategoryFull.getCharts().stream()
.map(category -> this.sectionService.changeVisibility(type, alias, category.getId(), visibility))
.collect(Collectors.toList()));
}
SubCategory subCategory = this.save(new SubCategory(subCategoryFull));
subCategoryFull.update(subCategory);
return subCategoryFull;
} else {
throw new ForbiddenException("Change subCategory visibility: You are not authorized to update subCategory with id: " + id);
}
}
} }

View File

@ -1,15 +1,15 @@
package eu.dnetlib.uoamonitorservice.service; package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.dao.TopicDAO; import eu.dnetlib.uoamonitorservice.dao.TopicDAO;
import eu.dnetlib.uoamonitorservice.dto.TopicFull; import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Indicator;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder; import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.Topic; import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.method.P;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -17,31 +17,33 @@ import java.util.stream.Collectors;
@Service @Service
public class TopicService { public class TopicService {
private final StakeholderDAO stakeholderDAO;
private final TopicDAO dao; private final TopicDAO dao;
private final CategoryService categoryService; private final CategoryService categoryService;
private final CommonService commonService; private final CommonService commonService;
@Autowired @Autowired
public TopicService(TopicDAO dao, CategoryService categoryService, CommonService commonService) { public TopicService(StakeholderDAO stakeholderDAO, TopicDAO dao, CategoryService categoryService, CommonService commonService) {
this.stakeholderDAO = stakeholderDAO;
this.dao = dao; this.dao = dao;
this.categoryService = categoryService; this.categoryService = categoryService;
this.commonService = commonService; this.commonService = commonService;
} }
public Topic findByPath(Stakeholder stakeholder, String topicId, String message) { public Topic findByPath(Stakeholder stakeholder, String topicId) {
if (!stakeholder.getTopics().contains(topicId)) { if (!stakeholder.getTopics().contains(topicId)) {
throw new PathNotValidException(message + ": Topic with id: " + topicId + " not found in Stakeholder: " + stakeholder.getId()); throw new PathNotValidException("Topic with id: " + topicId + " not found in Stakeholder: " + stakeholder.getId());
} }
return this.dao.findById(topicId).orElseThrow(() -> new EntityNotFoundException(message + ": Topic with id: " + topicId + " not found")); return this.dao.findById(topicId).orElseThrow(() -> new EntityNotFoundException("Topic with id: " + topicId + " not found"));
} }
public TopicFull getFullTopic(String type, String alias, String id) { public TopicFull getFullTopic(String type, String alias, String id) {
Topic topic = this.find(id); Topic topic = this.find(id);
if(commonService.hasVisibilityAuthority(type, alias, topic)) { if (commonService.hasVisibilityAuthority(type, alias, topic)) {
return new TopicFull(topic, topic.getCategories().stream() return new TopicFull(topic, topic.getCategories().stream()
.map(categoryId -> this.categoryService.getFullCategory(type, alias, categoryId)) .map(categoryId -> this.categoryService.getFullCategory(type, alias, categoryId))
.collect(Collectors.toList())); .collect(Collectors.toList()));
} else { } else {
return null; return null;
} }
@ -50,4 +52,61 @@ public class TopicService {
public Topic find(String id) { public Topic find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Topic with id: " + id + " not found")); return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Topic with id: " + id + " not found"));
} }
public TopicFull buildTopic(TopicFull topicFull) {
topicFull.setCategories(topicFull.getCategories().stream().map(this.categoryService::buildCategory).collect(Collectors.toList()));
topicFull.update(this.save(new Topic(topicFull)));
return topicFull;
}
public Topic save(Topic topic) {
topic.getCategories().forEach(this.categoryService::find);
return this.dao.save(topic);
}
public void delete(String type, Topic topic, boolean remove) {
if (this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(topic.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
topic.getCategories().forEach(categoryId -> {
this.categoryService.delete(type, categoryId, false);
});
if(remove) {
this.removeTopic(topic.getId());
}
this.dao.delete(topic);
} else {
throw new ForbiddenException("Delete topic: You are not authorized to delete topic with id: " + topic.getId());
}
}
public void delete(String type, String id, boolean remove) {
Topic topic = this.find(id);
this.delete(type, topic, remove);
}
public void removeTopic(String id) {
this.stakeholderDAO.findByTopicsContaining(id).forEach(stakeholder -> {
stakeholder.getTopics().remove(id);
this.stakeholderDAO.save(stakeholder);
});
}
public TopicFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
if (this.commonService.hasEditAuthority(type, alias)) {
TopicFull topicFull = this.getFullTopic(type, alias, id);
topicFull.setVisibility(visibility);
if (propagate) {
topicFull.setCategories(topicFull.getCategories().stream()
.map(category -> this.categoryService.changeVisibility(type, alias, category.getId(), visibility, true))
.collect(Collectors.toList()));
}
Topic topic = this.save(new Topic(topicFull));
topicFull.update(topic);
return topicFull;
} else {
throw new ForbiddenException("Change topic visibility: You are not authorized to update topic with id: " + id);
}
}
} }