Fix delete and change visibility methods for all entities.
This commit is contained in:
parent
cb7780b84e
commit
cf505bd214
|
@ -1,77 +1,36 @@
|
||||||
/*
|
|
||||||
package eu.dnetlib.uoamonitorservice.controllers;
|
package eu.dnetlib.uoamonitorservice.controllers;
|
||||||
|
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
|
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
|
import eu.dnetlib.uoamonitorservice.entities.Category;
|
||||||
import eu.dnetlib.uoamonitorservice.dao.CategoryDAO;
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
|
import eu.dnetlib.uoamonitorservice.entities.Topic;
|
||||||
import eu.dnetlib.uoamonitorservice.dao.SubCategoryDAO;
|
|
||||||
import eu.dnetlib.uoamonitorservice.dao.TopicDAO;
|
|
||||||
import eu.dnetlib.uoamonitorservice.entities.*;
|
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
||||||
|
import eu.dnetlib.uoamonitorservice.service.CategoryService;
|
||||||
|
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 CategoryController {
|
public class CategoryController {
|
||||||
private final Logger log = LogManager.getLogger(this.getClass());
|
private final Logger log = LogManager.getLogger(this.getClass());
|
||||||
|
|
||||||
@Autowired
|
private final StakeholderService stakeholderService;
|
||||||
private RolesUtils rolesUtils;
|
private final TopicService topicService;
|
||||||
|
private final CategoryService categoryService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private StakeholderDAO stakeholderDAO;
|
public CategoryController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService) {
|
||||||
|
this.stakeholderService = stakeholderService;
|
||||||
@Autowired
|
this.topicService = topicService;
|
||||||
private TopicDAO topicDAO;
|
this.categoryService = categoryService;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private CategoryDAO categoryDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SubCategoryDAO subCategoryDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SubCategoryController subCategoryController;
|
|
||||||
|
|
||||||
public Category<SubCategory> buildCategory(Category<SubCategory> categoryFull) {
|
|
||||||
Category<String> category = new Category<>(categoryFull);
|
|
||||||
|
|
||||||
List<String> subCategories = new ArrayList<>();
|
|
||||||
List<SubCategory> subCategoriesFull = new ArrayList<>();
|
|
||||||
for (SubCategory<Section<Indicator>> subCategory : categoryFull.getSubCategories()) {
|
|
||||||
SubCategory<Section<Indicator>> subcategoryFull = subCategoryController.buildSubCategory(subCategory);
|
|
||||||
subCategoriesFull.add(subcategoryFull);
|
|
||||||
subCategories.add(subcategoryFull.getId());
|
|
||||||
}
|
|
||||||
categoryFull.setSubCategories(subCategoriesFull);
|
|
||||||
category.setSubCategories(subCategories);
|
|
||||||
|
|
||||||
Date date = new Date();
|
|
||||||
category.setCreationDate(date);
|
|
||||||
category.setUpdateDate(date);
|
|
||||||
|
|
||||||
categoryFull.setCreationDate(date);
|
|
||||||
categoryFull.setUpdateDate(date);
|
|
||||||
|
|
||||||
categoryDAO.save(category);
|
|
||||||
|
|
||||||
categoryFull.setId(category.getId());
|
|
||||||
return categoryFull;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/save", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/save", method = RequestMethod.POST)
|
||||||
public Category<SubCategory> saveCategory(@PathVariable("stakeholderId") String stakeholderId,
|
public Category<SubCategory> saveCategory(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -170,9 +129,9 @@ public class CategoryController {
|
||||||
throw new EntityNotFoundException("Save category: Stakeholder with id: " + stakeholderId + " not found");
|
throw new EntityNotFoundException("Save category: Stakeholder with id: " + stakeholderId + " not found");
|
||||||
}
|
}
|
||||||
return categoryFull;
|
return categoryFull;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public void onSaveDefaultCategory(Category<String> category, String topicId) {
|
/*public void onSaveDefaultCategory(Category<String> category, String topicId) {
|
||||||
log.debug("On save default category");
|
log.debug("On save default category");
|
||||||
|
|
||||||
List<Topic> topics = topicDAO.findByDefaultId(topicId);
|
List<Topic> topics = topicDAO.findByDefaultId(topicId);
|
||||||
|
@ -190,9 +149,9 @@ public class CategoryController {
|
||||||
String subCategoryOverviewId = category.getSubCategories().get(0);
|
String subCategoryOverviewId = category.getSubCategories().get(0);
|
||||||
SubCategory subCategoryOverview = subCategoryDAO.findById(subCategoryOverviewId);
|
SubCategory subCategoryOverview = subCategoryDAO.findById(subCategoryOverviewId);
|
||||||
subCategoryController.onSaveDefaultSubCategory(subCategoryOverview, category.getId());
|
subCategoryController.onSaveDefaultSubCategory(subCategoryOverview, category.getId());
|
||||||
}
|
}*/
|
||||||
|
|
||||||
public void onUpdateDefaultCategory(Category category, Category oldCategory) {
|
/*public void onUpdateDefaultCategory(Category category, Category oldCategory) {
|
||||||
log.debug("On update default category");
|
log.debug("On update default category");
|
||||||
|
|
||||||
List<Category> categories = categoryDAO.findByDefaultId(category.getId());
|
List<Category> categories = categoryDAO.findByDefaultId(category.getId());
|
||||||
|
@ -218,7 +177,7 @@ public class CategoryController {
|
||||||
categoryBasedOnDefault.setUpdateDate(category.getUpdateDate());
|
categoryBasedOnDefault.setUpdateDate(category.getUpdateDate());
|
||||||
categoryDAO.save(categoryBasedOnDefault);
|
categoryDAO.save(categoryBasedOnDefault);
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/delete", method = RequestMethod.DELETE)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/delete", method = RequestMethod.DELETE)
|
||||||
|
@ -228,108 +187,14 @@ public class CategoryController {
|
||||||
@RequestParam(required = false) String children) {
|
@RequestParam(required = false) String children) {
|
||||||
log.debug("delete category");
|
log.debug("delete category");
|
||||||
log.debug("Id: " + categoryId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId);
|
log.debug("Id: " + categoryId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId);
|
||||||
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
if (stakeholder != null) {
|
this.categoryService.delete(stakeholder.getType(), category, true);
|
||||||
if (!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("Delete category: You are not authorized to update stakeholder with id: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topic<String> topic = topicDAO.findById(topicId);
|
|
||||||
if (topic != null) {
|
|
||||||
if (stakeholder.getTopics().contains(topicId)) {
|
|
||||||
|
|
||||||
Category<String> category = categoryDAO.findById(categoryId);
|
|
||||||
if (category != null) {
|
|
||||||
|
|
||||||
if (category.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("Delete category: You are not authorized to delete a default Category in stakeholder with id: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
List<String> categories = topic.getCategories();
|
|
||||||
int index = categories.indexOf(categoryId);
|
|
||||||
if (index != -1) {
|
|
||||||
// this category belongs in default profile
|
|
||||||
if (topic.getDefaultId() == null && children != null) {
|
|
||||||
onDeleteDefaultCategory(categoryId, topicId, children);
|
|
||||||
}
|
|
||||||
subCategoryController.deleteTree(category);
|
|
||||||
category.setSubCategories(null);
|
|
||||||
categories.remove(index);
|
|
||||||
topicDAO.save(topic);
|
|
||||||
categoryDAO.delete(categoryId);
|
|
||||||
log.debug("Category deleted!");
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
|
|
||||||
throw new PathNotValidException("Delete category: Category with id: " + categoryId + " not found in Topic: " + topicId);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Delete category: Category with id: " + categoryId + " not found");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
|
|
||||||
throw new PathNotValidException("Delete category: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Topic not found
|
|
||||||
throw new EntityNotFoundException("Delete category: Topic with id: " + topicId + " not found");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Stakeholder not found
|
|
||||||
throw new EntityNotFoundException("Delete category: Stakeholder with id: " + stakeholderId + " not found");
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
public boolean onDeleteDefaultCategory(String defaultCategoryId, String defaultTopicId, String children) {
|
|
||||||
if (children.equals("delete")) {
|
|
||||||
List<Topic> topics = topicDAO.findByDefaultId(defaultTopicId);
|
|
||||||
List<Category> categories = categoryDAO.findByDefaultId(defaultCategoryId);
|
|
||||||
|
|
||||||
for (Topic topic : topics) {
|
|
||||||
Iterator<Category> categoriesIterator = categories.iterator();
|
|
||||||
while (categoriesIterator.hasNext()) {
|
|
||||||
Category category = categoriesIterator.next();
|
|
||||||
|
|
||||||
String categoryId = category.getId();
|
|
||||||
|
|
||||||
if (topic.getCategories() != null && topic.getCategories().contains(categoryId)) {
|
|
||||||
categoriesIterator.remove();
|
|
||||||
|
|
||||||
topic.getCategories().remove(categoryId);
|
|
||||||
topicDAO.save(topic);
|
|
||||||
|
|
||||||
subCategoryController.deleteTree(category);
|
|
||||||
|
|
||||||
categoryDAO.delete(categoryId);
|
|
||||||
log.debug("Category with id: " + categoryId + " deleted!");
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (children.equals("disconnect")) {
|
|
||||||
List<Category> categories = categoryDAO.findByDefaultId(defaultCategoryId);
|
|
||||||
for (Category category : categories) {
|
|
||||||
subCategoryController.disConnectTree(category);
|
|
||||||
|
|
||||||
category.setDefaultId(null);
|
|
||||||
categoryDAO.save(category);
|
|
||||||
|
|
||||||
log.debug("DefaultId for Category with id: " + category.getId() + " empty!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/reorder", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/reorder", method = RequestMethod.POST)
|
||||||
public List<Category> reorderCategories(@PathVariable("stakeholderId") String stakeholderId,
|
public List<Category> reorderCategories(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -361,131 +226,19 @@ public class CategoryController {
|
||||||
log.debug("Categories reordered!");
|
log.debug("Categories reordered!");
|
||||||
|
|
||||||
return categoriesFull;
|
return categoriesFull;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/change-visibility", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/change-visibility", method = RequestMethod.POST)
|
||||||
public Category changeCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
|
public CategoryFull changeCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
@PathVariable("categoryId") String categoryId,
|
@PathVariable("categoryId") String categoryId,
|
||||||
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
|
@RequestParam("visibility") Visibility visibility, @RequestParam(defaultValue = "false") Boolean propagate) {
|
||||||
log.debug("change category visibility: " + visibility + " - toggle propagate: " + ((propagate != null && propagate) ? "true" : "false"));
|
log.debug("change category visibility: " + visibility + " - toggle propagate: " + propagate);
|
||||||
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
|
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
|
||||||
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
if (stakeholder != null) {
|
return this.categoryService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), category, visibility, propagate);
|
||||||
if (!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("Toggle category: You are not authorized to update stakeholder with id: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topic<String> topic = topicDAO.findById(topicId);
|
|
||||||
if (topic != null) {
|
|
||||||
if (stakeholder.getTopics().contains(topicId)) {
|
|
||||||
if (topic.getCategories().contains(categoryId)) {
|
|
||||||
return changeVisibilityTree(categoryId, visibility, propagate);
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
|
|
||||||
throw new PathNotValidException("Toggle category: Category with id: " + categoryId + " not found in Topic: " + topicId);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
|
|
||||||
throw new PathNotValidException("Toggle category: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Topic not found
|
|
||||||
throw new EntityNotFoundException("Toggle category: Topic with id: " + topicId + " not found");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Stakeholder not found
|
|
||||||
throw new EntityNotFoundException("Toggle category: Stakeholder with id: " + stakeholderId + " not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Category changeVisibilityTree(String categoryId, Visibility visibility, Boolean propagate) {
|
|
||||||
Category<String> category = categoryDAO.findById(categoryId);
|
|
||||||
if (category == null) {
|
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Change category visibility: Category with id: " + categoryId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
Category<SubCategory> categoryFull = new Category(category);
|
|
||||||
List<SubCategory> subCategoriesFull = new ArrayList<>();
|
|
||||||
|
|
||||||
if (propagate != null && propagate) {
|
|
||||||
for (String subCategoryId : category.getSubCategories()) {
|
|
||||||
subCategoriesFull.add(subCategoryController.changeVisibilityTree(subCategoryId, visibility, propagate));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
category.setVisibility(visibility);
|
|
||||||
categoryDAO.save(category);
|
|
||||||
log.debug("Category toggled!");
|
|
||||||
|
|
||||||
categoryFull.setVisibility(visibility);
|
|
||||||
categoryFull.setSubCategories(subCategoriesFull);
|
|
||||||
|
|
||||||
return categoryFull;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
private Topic checkForExceptions(String stakeholderId, String topicId) {
|
|
||||||
|
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
|
||||||
|
|
||||||
if (stakeholder == null) {
|
|
||||||
// EXCEPTION - Stakeholder not found
|
|
||||||
throw new EntityNotFoundException("checkForExceptions category: Stakeholder with id: " + stakeholderId + " not found");
|
|
||||||
}
|
|
||||||
if (!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("checkForExceptions category: You are not authorized to update stakeholder with id: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topic<String> topic = topicDAO.findById(topicId);
|
|
||||||
if (topic == null) {
|
|
||||||
// EXCEPTION - Topic not found
|
|
||||||
throw new EntityNotFoundException("checkForExceptions category: Topic with id: " + topicId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!stakeholder.getTopics().contains(topicId)) {
|
|
||||||
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
|
|
||||||
throw new PathNotValidException("checkForExceptions category: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return topic;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteTree(Topic topic) {
|
|
||||||
List<String> categories = topic.getCategories();
|
|
||||||
for (String categoryId : categories) {
|
|
||||||
Category category = categoryDAO.findById(categoryId);
|
|
||||||
if (category == null) {
|
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Category delete tree: Category with id: " + categoryId + " not found (category exists in topic: " + topic.getId() + ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
subCategoryController.deleteTree(category);
|
|
||||||
|
|
||||||
categoryDAO.delete(categoryId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disConnectTree(Topic topic) {
|
|
||||||
List<String> categories = topic.getCategories();
|
|
||||||
for (String categoryId : categories) {
|
|
||||||
Category category = categoryDAO.findById(categoryId);
|
|
||||||
if (category == null) {
|
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Category disconnect tree: Category with id: " + categoryId + " not found (category exists in topic: " + topic.getId() + ")");
|
|
||||||
}
|
|
||||||
|
|
||||||
subCategoryController.disConnectTree(category);
|
|
||||||
|
|
||||||
category.setDefaultId(null);
|
|
||||||
categoryDAO.save(category);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
|
@ -1,58 +1,39 @@
|
||||||
/*
|
|
||||||
package eu.dnetlib.uoamonitorservice.controllers;
|
package eu.dnetlib.uoamonitorservice.controllers;
|
||||||
|
|
||||||
|
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
|
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
|
|
||||||
import eu.dnetlib.uoamonitorservice.dao.*;
|
|
||||||
import eu.dnetlib.uoamonitorservice.entities.*;
|
import eu.dnetlib.uoamonitorservice.entities.*;
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.IndicatorPath;
|
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.ReorderEvent;
|
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
||||||
|
import eu.dnetlib.uoamonitorservice.service.*;
|
||||||
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.io.UnsupportedEncodingException;
|
|
||||||
import java.util.*;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@CrossOrigin(origins = "*")
|
@CrossOrigin(origins = "*")
|
||||||
public class IndicatorController {
|
public class IndicatorController {
|
||||||
private final Logger log = LogManager.getLogger(this.getClass());
|
private final Logger log = LogManager.getLogger(this.getClass());
|
||||||
|
|
||||||
@Autowired
|
private final StakeholderService stakeholderService;
|
||||||
private RolesUtils rolesUtils;
|
private final TopicService topicService;
|
||||||
|
private final CategoryService categoryService;
|
||||||
|
private final SubCategoryService subCategoryService;
|
||||||
|
private final SectionService sectionService;
|
||||||
|
private final IndicatorService indicatorService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private StakeholderDAO stakeholderDAO;
|
public IndicatorController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService,
|
||||||
|
SubCategoryService subCategoryService, SectionService sectionService, IndicatorService indicatorService) {
|
||||||
|
this.stakeholderService = stakeholderService;
|
||||||
|
this.topicService = topicService;
|
||||||
|
this.categoryService = categoryService;
|
||||||
|
this.subCategoryService = subCategoryService;
|
||||||
|
this.sectionService = sectionService;
|
||||||
|
this.indicatorService = indicatorService;
|
||||||
|
}
|
||||||
|
|
||||||
@Autowired
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
private TopicDAO topicDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private CategoryDAO categoryDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SubCategoryDAO subCategoryDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SectionDAO sectionDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private IndicatorDAO indicatorDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SectionController sectionController;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private StakeholderController stakeholderController;
|
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/save-bulk", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/save-bulk", method = RequestMethod.POST)
|
||||||
public Stakeholder saveBulkIndicators(@PathVariable("stakeholderId") String stakeholderId,
|
public Stakeholder saveBulkIndicators(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -143,8 +124,8 @@ public class IndicatorController {
|
||||||
indicators.add(indicator.getId());
|
indicators.add(indicator.getId());
|
||||||
log.debug("Indicator saved!");
|
log.debug("Indicator saved!");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
@PreAuthorize("isAuthenticated()")
|
/* @PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/save", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/save", method = RequestMethod.POST)
|
||||||
public Indicator saveIndicator(@PathVariable("stakeholderId") String stakeholderId,
|
public Indicator saveIndicator(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -462,7 +443,7 @@ public class IndicatorController {
|
||||||
indicatorDAO.save(indicatorBasedOnDefault);
|
indicatorDAO.save(indicatorBasedOnDefault);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/{indicatorId}/delete", method = RequestMethod.DELETE)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/{indicatorId}/delete", method = RequestMethod.DELETE)
|
||||||
public boolean deleteIndicator(@PathVariable("stakeholderId") String stakeholderId,
|
public boolean deleteIndicator(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
|
@ -474,79 +455,18 @@ public class IndicatorController {
|
||||||
@RequestParam(required = false) String children) {
|
@RequestParam(required = false) String children) {
|
||||||
log.debug("delete indicator");
|
log.debug("delete indicator");
|
||||||
log.debug("Id: " + indicatorId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId + " - Section: " + sectionId);
|
log.debug("Id: " + indicatorId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId + " - Section: " + sectionId);
|
||||||
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
Indicator indicator = indicatorDAO.findById(indicatorId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
if (indicator != null) {
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
Section<String> section = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId, sectionId, indicator.getType());
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
|
Section section = this.sectionService.findByPath(subCategory, sectionId);
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
Indicator indicator = this.indicatorService.findByPath(section, indicatorId);
|
||||||
if (indicator.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
|
this.indicatorService.delete(stakeholder.getType(), indicator, true);
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("Delete indicator: You are not authorized to delete a default Indicator in stakeholder with id: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> indicators = section.getIndicators();
|
|
||||||
|
|
||||||
int index = indicators.indexOf(indicatorId);
|
|
||||||
if (index != -1) {
|
|
||||||
|
|
||||||
// this indicator belongs in default profile
|
|
||||||
if (section.getDefaultId() == null && children != null) {
|
|
||||||
onDeleteDefaultIndicator(indicatorId, sectionId, children);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
indicators.remove(index);
|
|
||||||
sectionDAO.save(section);
|
|
||||||
|
|
||||||
indicatorDAO.delete(indicatorId);
|
|
||||||
log.debug("Indicator deleted!");
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Indicator not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subcategory.getAlias(); -> Section: section.getTitle();
|
|
||||||
throw new PathNotValidException("Delete indicator: Indicator with id: " + indicatorId + " not found in Sectiom: " + sectionId);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Indicator not found
|
|
||||||
throw new EntityNotFoundException("Delete indicator: Indicator with id: " + indicatorId + " not found");
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onDeleteDefaultIndicator(String defaultIndicatorId, String defaultSectionId, String children) {
|
|
||||||
if (children.equals("delete")) {
|
|
||||||
// 2nd way
|
|
||||||
List<Section> sections = sectionDAO.findByDefaultId(defaultSectionId);
|
|
||||||
List<Indicator> indicators = indicatorDAO.findByDefaultId(defaultIndicatorId);
|
|
||||||
|
|
||||||
for (Section section : sections) {
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
Iterator<Indicator> indicatorsIterator = indicators.iterator();
|
|
||||||
while (indicatorsIterator.hasNext()) {
|
|
||||||
String indicatorId = indicatorsIterator.next().getId();
|
|
||||||
if (section.getIndicators().contains(indicatorId)) {
|
|
||||||
indicatorsIterator.remove();
|
|
||||||
|
|
||||||
section.getIndicators().remove(indicatorId);
|
|
||||||
sectionDAO.save(section);
|
|
||||||
|
|
||||||
indicatorDAO.delete(indicatorId);
|
|
||||||
log.debug("Indicator with id: " + indicatorId + " deleted!");
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (children.equals("disconnect")) {
|
|
||||||
List<Indicator> indicators = indicatorDAO.findByDefaultId(defaultIndicatorId);
|
|
||||||
for (Indicator indicator : indicators) {
|
|
||||||
indicator.setDefaultId(null);
|
|
||||||
indicatorDAO.save(indicator);
|
|
||||||
log.debug("DefaultId for Indicator with id: " + indicator.getId() + " empty!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/{type}/reorder", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/{type}/reorder", method = RequestMethod.POST)
|
||||||
public List<Indicator> reorderIndicators(@PathVariable("stakeholderId") String stakeholderId,
|
public List<Indicator> reorderIndicators(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -586,7 +506,7 @@ public class IndicatorController {
|
||||||
log.debug("Indicators reordered!");
|
log.debug("Indicators reordered!");
|
||||||
|
|
||||||
return indicatorsFull;
|
return indicatorsFull;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/{indicatorId}/change-visibility", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/{indicatorId}/change-visibility", method = RequestMethod.POST)
|
||||||
|
@ -599,121 +519,12 @@ public class IndicatorController {
|
||||||
@RequestParam("visibility") Visibility visibility) {
|
@RequestParam("visibility") Visibility visibility) {
|
||||||
log.debug("change indicator visibility: " + visibility);
|
log.debug("change indicator visibility: " + visibility);
|
||||||
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId + " - Section: " + sectionId + " - Indicator: " + indicatorId);
|
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId + " - Section: " + sectionId + " - Indicator: " + indicatorId);
|
||||||
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
Indicator indicator = indicatorDAO.findById(indicatorId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
if (indicator == null) {
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
// EXCEPTION - Indicator not found
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
throw new EntityNotFoundException("Change indicator visibility: Indicator with id: " + indicatorId + " not found");
|
Section section = this.sectionService.findByPath(subCategory, sectionId);
|
||||||
}
|
Indicator indicator = this.indicatorService.findByPath(section, indicatorId);
|
||||||
|
return this.indicatorService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), indicator, visibility);
|
||||||
Section<String> section = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId, sectionId, indicator.getType());
|
|
||||||
List<String> indicators = section.getIndicators();
|
|
||||||
|
|
||||||
if (indicators.contains(indicatorId)) {
|
|
||||||
return changeVisibilityTree(indicatorId, indicator, visibility);
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - Indicator not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subCategory.getAlias(); -> Section: section.getTitle();
|
|
||||||
throw new PathNotValidException("Toggle indicators: Indicator with id: " + indicatorId + " not found in Section: " + sectionId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Indicator changeVisibilityTree(String indicatorId, Indicator indicator, Visibility visibility) {
|
|
||||||
if (indicator == null) {
|
|
||||||
indicator = indicatorDAO.findById(indicatorId);
|
|
||||||
if (indicator == null) {
|
|
||||||
// EXCEPTION - Indicator not found
|
|
||||||
throw new EntityNotFoundException("Change indicator visibility: Indicator with id: " + indicatorId + " not found");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
indicator.setVisibility(visibility);
|
|
||||||
indicatorDAO.save(indicator);
|
|
||||||
log.debug("Indicator toggled!");
|
|
||||||
|
|
||||||
return indicator;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Section checkForExceptions(String stakeholderId, String topicId, String categoryId, String subcategoryId, String sectionId, String indicatorType) {
|
|
||||||
|
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
|
||||||
|
|
||||||
if (stakeholder == null) {
|
|
||||||
// EXCEPTION - Stakeholder not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Stakeholder with id: " + stakeholderId + " not found");
|
|
||||||
}
|
|
||||||
if (!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("CheckForExceptions Indicator: You are not authorized to update stakeholder with id: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topic<String> topic = topicDAO.findById(topicId);
|
|
||||||
if (topic == null) {
|
|
||||||
// EXCEPTION - Topic not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Topic with id: " + topicId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!stakeholder.getTopics().contains(topicId)) {
|
|
||||||
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Category<String> category = categoryDAO.findById(categoryId);
|
|
||||||
if (category == null) {
|
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Category with id: " + categoryId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!topic.getCategories().contains(categoryId)) {
|
|
||||||
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: Category with id: " + categoryId + " not found in Topic: " + topicId);
|
|
||||||
}
|
|
||||||
|
|
||||||
SubCategory<String> subcategory = subCategoryDAO.findById(subcategoryId);
|
|
||||||
if (subcategory == null) {
|
|
||||||
// EXCEPTION - SubCategory not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: SubCategory with id: " + subcategoryId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!category.getSubCategories().contains(subcategoryId)) {
|
|
||||||
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: SubCategory with id: " + subcategoryId + " not found in Category: " + categoryId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Section<String> section = sectionDAO.findById(sectionId);
|
|
||||||
if (section == null) {
|
|
||||||
// EXCEPTION - Section not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Section with id: " + sectionId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (indicatorType.equals("chart")) {
|
|
||||||
if (!subcategory.getCharts().contains(sectionId)) {
|
|
||||||
// EXCEPTION - Section not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subcategory.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: SubCategory with id: " + subcategoryId + " not found in Category: " + categoryId);
|
|
||||||
}
|
|
||||||
} else if (indicatorType.equals("number")) {
|
|
||||||
if (!subcategory.getNumbers().contains(sectionId)) {
|
|
||||||
// EXCEPTION - Section not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subcategory.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: SubCategory with id: " + subcategoryId + " not found in Category: " + categoryId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return section;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteTree(Section section) {
|
|
||||||
List<String> indicators = section.getIndicators();
|
|
||||||
for (String indicatorId : indicators) {
|
|
||||||
indicatorDAO.delete(indicatorId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disConnectTree(Section section) {
|
|
||||||
List<String> indicators = section.getIndicators();
|
|
||||||
for (String indicatorId : indicators) {
|
|
||||||
Indicator indicator = indicatorDAO.findById(indicatorId);
|
|
||||||
indicator.setDefaultId(null);
|
|
||||||
indicatorDAO.save(indicator);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
|
@ -1,47 +1,48 @@
|
||||||
/*
|
|
||||||
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.SectionFull;
|
|
||||||
import eu.dnetlib.uoamonitorservice.entities.*;
|
import eu.dnetlib.uoamonitorservice.entities.*;
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
import eu.dnetlib.uoamonitorservice.service.*;
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
|
||||||
import eu.dnetlib.uoamonitorservice.service.SectionService;
|
|
||||||
import eu.dnetlib.uoamonitorservice.service.SubCategoryService;
|
|
||||||
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.List;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@CrossOrigin(origins = "*")
|
@CrossOrigin(origins = "*")
|
||||||
public class SectionController {
|
public class SectionController {
|
||||||
private final Logger log = LogManager.getLogger(this.getClass());
|
private final Logger log = LogManager.getLogger(this.getClass());
|
||||||
|
|
||||||
private SectionService service;
|
private final StakeholderService stakeholderService;
|
||||||
|
private final TopicService topicService;
|
||||||
|
private final CategoryService categoryService;
|
||||||
|
private final SubCategoryService subCategoryService;
|
||||||
|
private final SectionService sectionService;
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
@Autowired
|
||||||
|
public SectionController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService,
|
||||||
|
SubCategoryService subCategoryService, SectionService sectionService) {
|
||||||
|
this.stakeholderService = stakeholderService;
|
||||||
|
this.topicService = topicService;
|
||||||
|
this.categoryService = categoryService;
|
||||||
|
this.subCategoryService = subCategoryService;
|
||||||
|
this.sectionService = sectionService;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/save/{index}", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/save/{index}", method = RequestMethod.POST)
|
||||||
public SectionFull saveSection(@PathVariable("stakeholderId") String stakeholderId,
|
public Section saveSection(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
@PathVariable("categoryId") String categoryId,
|
@PathVariable("categoryId") String categoryId,
|
||||||
@PathVariable("subcategoryId") String subcategoryId,
|
@PathVariable("subcategoryId") String subcategoryId,
|
||||||
@PathVariable("index") String index,
|
@PathVariable("index") String index,
|
||||||
@RequestBody SectionFull sectionFull) {
|
@RequestBody Section<Indicator> sectionFull) {
|
||||||
log.debug("save section");
|
log.debug("save section");
|
||||||
log.debug("Name: "+sectionFull.getTitle() + " - Id: "+sectionFull.getId() + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
|
log.debug("Name: "+sectionFull.getTitle() + " - Id: "+sectionFull.getId() + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
|
||||||
|
|
||||||
SubCategory subCategory = this.subCategoryService.checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId, "Save Section");
|
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
|
||||||
|
|
||||||
Section section = new Section(sectionFull);
|
Section<String> section = new Section<>(sectionFull);
|
||||||
|
|
||||||
Date date = new Date();
|
Date date = new Date();
|
||||||
section.setUpdateDate(date);
|
section.setUpdateDate(date);
|
||||||
|
@ -78,7 +79,7 @@ public class SectionController {
|
||||||
|
|
||||||
section.setIndicators(indicators);
|
section.setIndicators(indicators);
|
||||||
|
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
|
||||||
// this section belongs in default profile and it is new or it is updated
|
// this section belongs in default profile and it is new or it is updated
|
||||||
if(stakeholder.getDefaultId() == null) {
|
if(stakeholder.getDefaultId() == null) {
|
||||||
if(sectionId == null) {
|
if(sectionId == null) {
|
||||||
|
@ -151,121 +152,94 @@ public class SectionController {
|
||||||
|
|
||||||
public void onUpdateDefaultSection(Section section, Stakeholder stakeholder, Section oldSection) {
|
public void onUpdateDefaultSection(Section section, Stakeholder stakeholder, Section oldSection) {
|
||||||
log.debug("On update default section");
|
log.debug("On update default section");
|
||||||
}
|
|
||||||
|
|
||||||
private SubCategory checkForExceptions(String stakeholderId, String topicId, String categoryId, String subcategoryId) {
|
// section already exists - check if changed and update all sections based on it
|
||||||
|
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId).orElseThrow(() -> new EntityNotFoundException("Save indicator: Stakeholder with id: " + stakeholderId + " not found"));
|
boolean changed = false;
|
||||||
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
List<Section> sections = sectionDAO.findByDefaultId(section.getId());
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("CheckForExceptions Section: You are not authorized to update stakeholder with id: "+stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topic topic = topicDAO.findById(topicId).orElseThrow(() -> new EntityNotFoundException("Save indicator: Topic with id: "+topicId+" not found"));
|
for(Section sectionBasedOnDefault : sections) {
|
||||||
if(!stakeholder.getTopics().contains(topicId)) {
|
if(section.getTitle() != null && !section.getTitle().equals(sectionBasedOnDefault.getTitle())
|
||||||
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
|
&& (oldSection.getTitle() == null || oldSection.getTitle().equals(sectionBasedOnDefault.getTitle()))) {
|
||||||
throw new PathNotValidException("Save indicator: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Category<String> category = categoryDAO.findById(categoryId);
|
sectionBasedOnDefault.setTitle(section.getTitle());
|
||||||
if(category == null) {
|
changed = true;
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Category with id: "+categoryId+" not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!topic.getCategories().contains(categoryId)) {
|
|
||||||
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: Category with id: "+categoryId+" not found in Topic: "+topicId);
|
|
||||||
}
|
|
||||||
|
|
||||||
SubCategory<String> subcategory = subCategoryDAO.findById(subcategoryId);
|
|
||||||
if(subcategory == null) {
|
|
||||||
// EXCEPTION - SubCategory not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: SubCategory with id: "+subcategoryId+" not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!category.getSubCategories().contains(subcategoryId)) {
|
|
||||||
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId);
|
|
||||||
}
|
|
||||||
|
|
||||||
return subcategory;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteTree(SubCategory subCategory) {
|
|
||||||
List<String> sections = subCategory.getCharts();
|
|
||||||
for(String sectionId : sections) {
|
|
||||||
Section section = sectionDAO.findById(sectionId);
|
|
||||||
if (section == null) {
|
|
||||||
// EXCEPTION - Section not found
|
|
||||||
throw new EntityNotFoundException("Section delete tree: Chart Section with id: "+sectionId+" not found (section exists in subCategory: "+subCategory.getId()+")");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
indicatorController.deleteTree(section);
|
if(!changed) {
|
||||||
|
// break;
|
||||||
sectionDAO.delete(sectionId);
|
continue;
|
||||||
}
|
|
||||||
|
|
||||||
sections = subCategory.getNumbers();
|
|
||||||
for(String sectionId : sections) {
|
|
||||||
Section section = sectionDAO.findById(sectionId);
|
|
||||||
if (section == null) {
|
|
||||||
// EXCEPTION - Section not found
|
|
||||||
throw new EntityNotFoundException("Section delete tree: Number Section with id: "+sectionId+" not found (section exists in subCategory: "+subCategory.getId()+")");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
indicatorController.deleteTree(section);
|
// sectionBasedOnDefault.setTitle(section.getTitle());
|
||||||
|
sectionBasedOnDefault.setUpdateDate(section.getUpdateDate());
|
||||||
sectionDAO.delete(sectionId);
|
sectionDAO.save(sectionBasedOnDefault);
|
||||||
}
|
}
|
||||||
|
}*/
|
||||||
|
|
||||||
|
@PreAuthorize("isAuthenticated()")
|
||||||
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/delete", method = RequestMethod.DELETE)
|
||||||
|
public boolean deleteSection(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
|
@PathVariable("topicId") String topicId,
|
||||||
|
@PathVariable("categoryId") String categoryId,
|
||||||
|
@PathVariable("subcategoryId") String subcategoryId,
|
||||||
|
@PathVariable("sectionId") String sectionId,
|
||||||
|
@RequestParam(required = false) String children) {
|
||||||
|
log.debug("delete section");
|
||||||
|
log.debug("Id: " + sectionId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
|
||||||
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
|
Section section = this.sectionService.findByPath(subCategory, sectionId);
|
||||||
|
this.sectionService.delete(stakeholder.getType(), section, true);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void disConnectTree(SubCategory subCategory) {
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
List<String> sections = subCategory.getCharts();
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{type}/reorder", method = RequestMethod.POST)
|
||||||
|
public List<Section> reorderSections(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
|
@PathVariable("topicId") String topicId,
|
||||||
|
@PathVariable("categoryId") String categoryId,
|
||||||
|
@PathVariable("subcategoryId") String subcategoryId,
|
||||||
|
@PathVariable("type") String type,
|
||||||
|
@RequestBody List<String> sections) {
|
||||||
|
log.debug("reorder sections of type: "+type);
|
||||||
|
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
|
||||||
|
|
||||||
|
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
|
||||||
|
|
||||||
|
if (type.equals("chart")) {
|
||||||
|
List<String> oldSections = subCategory.getCharts();
|
||||||
|
for (String sectionId : oldSections) {
|
||||||
|
if (!sections.contains(sectionId)) {
|
||||||
|
sections.add(sectionId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
subCategory.setCharts(sections);
|
||||||
|
} else if (type.equals("number")) {
|
||||||
|
List<String> oldSections = subCategory.getNumbers();
|
||||||
|
for (String sectionId : oldSections) {
|
||||||
|
if (!sections.contains(sectionId)) {
|
||||||
|
sections.add(sectionId);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
subCategory.setNumbers(sections);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Section> sectionsFull = new ArrayList<>();
|
||||||
for(String sectionId : sections) {
|
for(String sectionId : sections) {
|
||||||
Section section = sectionDAO.findById(sectionId);
|
Section section = sectionDAO.findById(sectionId);
|
||||||
if (section == null) {
|
if(section == null) {
|
||||||
// EXCEPTION - Section not found
|
// EXCEPTION - Section not found
|
||||||
throw new EntityNotFoundException("Section disconnect tree: Chart Section with id: "+sectionId+" not found (section exists in subCategory: "+subCategory.getId()+")");
|
throw new EntityNotFoundException("Reorder sections: Section with id: " + sectionId + " not found");
|
||||||
}
|
}
|
||||||
|
sectionsFull.add(section);
|
||||||
indicatorController.disConnectTree(section);
|
|
||||||
|
|
||||||
section.setDefaultId(null);
|
|
||||||
sectionDAO.save(section);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sections = subCategory.getNumbers();
|
subCategoryDAO.save(subCategory);
|
||||||
for(String sectionId : sections) {
|
log.debug("Sections reordered!");
|
||||||
Section section = sectionDAO.findById(sectionId);
|
|
||||||
if (section == null) {
|
|
||||||
// EXCEPTION - Section not found
|
|
||||||
throw new EntityNotFoundException("Section disconnect tree: Number Section with id: "+sectionId+" not found (section exists in subCategory: "+subCategory.getId()+")");
|
|
||||||
}
|
|
||||||
|
|
||||||
indicatorController.disConnectTree(section);
|
return sectionsFull;
|
||||||
|
}*/
|
||||||
section.setDefaultId(null);
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
|
@ -1,93 +1,40 @@
|
||||||
/*
|
|
||||||
package eu.dnetlib.uoamonitorservice.controllers;
|
package eu.dnetlib.uoamonitorservice.controllers;
|
||||||
|
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
|
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
|
||||||
import eu.dnetlib.uoamonitorservice.dao.*;
|
import eu.dnetlib.uoamonitorservice.entities.Category;
|
||||||
import eu.dnetlib.uoamonitorservice.entities.*;
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
import eu.dnetlib.uoamonitorservice.entities.SubCategory;
|
||||||
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
|
import eu.dnetlib.uoamonitorservice.entities.Topic;
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
|
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
||||||
|
import eu.dnetlib.uoamonitorservice.service.CategoryService;
|
||||||
|
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
|
||||||
|
import eu.dnetlib.uoamonitorservice.service.SubCategoryService;
|
||||||
|
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 SubCategoryController {
|
public class SubCategoryController {
|
||||||
private final Logger log = LogManager.getLogger(this.getClass());
|
private final Logger log = LogManager.getLogger(this.getClass());
|
||||||
|
|
||||||
@Autowired
|
private final StakeholderService stakeholderService;
|
||||||
private RolesUtils rolesUtils;
|
private final TopicService topicService;
|
||||||
|
private final CategoryService categoryService;
|
||||||
|
private final SubCategoryService subCategoryService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private StakeholderDAO stakeholderDAO;
|
public SubCategoryController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService, SubCategoryService subCategoryService) {
|
||||||
|
this.stakeholderService = stakeholderService;
|
||||||
@Autowired
|
this.topicService = topicService;
|
||||||
private TopicDAO topicDAO;
|
this.categoryService = categoryService;
|
||||||
|
this.subCategoryService = subCategoryService;
|
||||||
@Autowired
|
|
||||||
private CategoryDAO categoryDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SubCategoryDAO subCategoryDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SectionDAO sectionDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private IndicatorDAO indicatorDAO;
|
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private SectionController sectionController;
|
|
||||||
|
|
||||||
public SubCategory<Section<Indicator>> buildSubCategory(SubCategory<Section<Indicator>> subcategoryFull) {
|
|
||||||
SubCategory<String> subCategory = new SubCategory<>(subcategoryFull);
|
|
||||||
|
|
||||||
List<String> sectionCharts = new ArrayList<>();
|
|
||||||
List<Section<Indicator>> sectionChartsFull = new ArrayList<>();
|
|
||||||
|
|
||||||
for(Section section : subcategoryFull.getCharts()) {
|
|
||||||
Section<Indicator> sectionFull = sectionController.buildSection(section);
|
|
||||||
sectionChartsFull.add(sectionFull);
|
|
||||||
sectionCharts.add(sectionFull.getId());
|
|
||||||
}
|
|
||||||
subcategoryFull.setCharts(sectionChartsFull);
|
|
||||||
subCategory.setCharts(sectionCharts);
|
|
||||||
|
|
||||||
List<String> sectionNumbers = new ArrayList<>();
|
|
||||||
List<Section<Indicator>> sectionNumbersFull = new ArrayList<>();
|
|
||||||
|
|
||||||
for(Section section : subcategoryFull.getNumbers()) {
|
|
||||||
Section<Indicator> sectionFull = sectionController.buildSection(section);
|
|
||||||
sectionNumbersFull.add(sectionFull);
|
|
||||||
sectionNumbers.add(sectionFull.getId());
|
|
||||||
}
|
|
||||||
subcategoryFull.setNumbers(sectionNumbersFull);
|
|
||||||
subCategory.setNumbers(sectionNumbers);
|
|
||||||
|
|
||||||
Date date = new Date();
|
|
||||||
subCategory.setCreationDate(date);
|
|
||||||
subCategory.setUpdateDate(date);
|
|
||||||
|
|
||||||
subcategoryFull.setCreationDate(date);
|
|
||||||
subcategoryFull.setUpdateDate(date);
|
|
||||||
|
|
||||||
|
|
||||||
subCategoryDAO.save(subCategory);
|
|
||||||
|
|
||||||
subcategoryFull.setId(subCategory.getId());
|
|
||||||
return subcategoryFull;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
/* @PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/save", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/save", method = RequestMethod.POST)
|
||||||
public SubCategory<Section<Indicator>> saveSubCategory(@PathVariable("stakeholderId") String stakeholderId,
|
public SubCategory<Section<Indicator>> saveSubCategory(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -215,7 +162,7 @@ public class SubCategoryController {
|
||||||
subCategoryBasedOnDefault.setUpdateDate(subCategory.getUpdateDate());
|
subCategoryBasedOnDefault.setUpdateDate(subCategory.getUpdateDate());
|
||||||
subCategoryDAO.save(subCategoryBasedOnDefault);
|
subCategoryDAO.save(subCategoryBasedOnDefault);
|
||||||
}
|
}
|
||||||
}
|
}*/
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/delete", method = RequestMethod.DELETE)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/delete", method = RequestMethod.DELETE)
|
||||||
|
@ -225,90 +172,16 @@ public class SubCategoryController {
|
||||||
@PathVariable("subcategoryId") String subcategoryId,
|
@PathVariable("subcategoryId") String subcategoryId,
|
||||||
@RequestParam(required = false) String children) {
|
@RequestParam(required = false) String children) {
|
||||||
log.debug("delete subcategory");
|
log.debug("delete subcategory");
|
||||||
log.debug("Id: "+subcategoryId + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
|
log.debug("Id: " + subcategoryId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
|
||||||
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
Category category = checkForExceptions(stakeholderId, topicId, categoryId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
SubCategory<String> subcategory = subCategoryDAO.findById(subcategoryId);
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
if(subcategory != null) {
|
this.subCategoryService.delete(stakeholder.getType(), subCategory, true);
|
||||||
|
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
|
||||||
if(subcategory.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("Delete subcategory: You are not authorized to delete a default SubCategory in stakeholder with id: "+stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
List<String> subcategories = category.getSubCategories();
|
|
||||||
int index = subcategories.indexOf(subcategoryId);
|
|
||||||
if(index != -1) {
|
|
||||||
// this subCategory belongs in default profile
|
|
||||||
if(category.getDefaultId() == null && children != null) {
|
|
||||||
onDeleteDefaultSubCategory(subcategoryId, categoryId, children);
|
|
||||||
}
|
|
||||||
sectionController.deleteTree(subcategory);
|
|
||||||
|
|
||||||
subcategory.setCharts(null);
|
|
||||||
subcategory.setNumbers(null);
|
|
||||||
|
|
||||||
subcategories.remove(index);
|
|
||||||
categoryDAO.save(category);
|
|
||||||
|
|
||||||
subCategoryDAO.delete(subcategoryId);
|
|
||||||
log.debug("Subcategory deleted!");
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
|
|
||||||
throw new PathNotValidException("Delete subcategory: Subcategory with id: "+subcategoryId+" not found in Category: "+categoryId);
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - SubCategory not found
|
|
||||||
throw new EntityNotFoundException("Delete subcategory: SubCategory with id: "+subcategoryId+" not found");
|
|
||||||
}
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean onDeleteDefaultSubCategory(String defaultSubCategoryId, String defaultCategoryId, String children) {
|
/*@PreAuthorize("isAuthenticated()")
|
||||||
if(children.equals("delete")) {
|
|
||||||
List<Category> categories = categoryDAO.findByDefaultId(defaultCategoryId);
|
|
||||||
List<SubCategory> subCategories = subCategoryDAO.findByDefaultId(defaultSubCategoryId);
|
|
||||||
|
|
||||||
for(Category category : categories) {
|
|
||||||
Iterator<SubCategory> subCategoriesIterator = subCategories.iterator();
|
|
||||||
while(subCategoriesIterator.hasNext()) {
|
|
||||||
SubCategory subCategory = subCategoriesIterator.next();
|
|
||||||
|
|
||||||
String subCategoryId = subCategory.getId();
|
|
||||||
|
|
||||||
if(category.getSubCategories() != null && category.getSubCategories().contains(subCategoryId)) {
|
|
||||||
subCategoriesIterator.remove();
|
|
||||||
|
|
||||||
category.getSubCategories().remove(subCategoryId);
|
|
||||||
categoryDAO.save(category);
|
|
||||||
|
|
||||||
sectionController.deleteTree(subCategory);
|
|
||||||
|
|
||||||
subCategoryDAO.delete(subCategoryId);
|
|
||||||
log.debug("SubCategory with id: "+subCategoryId+" deleted!");
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if(children.equals("disconnect")) {
|
|
||||||
List<SubCategory> subCategories = subCategoryDAO.findByDefaultId(defaultSubCategoryId);
|
|
||||||
for(SubCategory subCategory : subCategories) {
|
|
||||||
sectionController.disConnectTree(subCategory);
|
|
||||||
|
|
||||||
subCategory.setDefaultId(null);
|
|
||||||
subCategoryDAO.save(subCategory);
|
|
||||||
|
|
||||||
log.debug("DefaultId for SubCategory with id: "+subCategory.getId()+" empty!");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/reorder", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/reorder", method = RequestMethod.POST)
|
||||||
public List<SubCategory> reorderSubCategories(@PathVariable("stakeholderId") String stakeholderId,
|
public List<SubCategory> reorderSubCategories(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
|
@ -341,129 +214,22 @@ public class SubCategoryController {
|
||||||
log.debug("SubCategories reordered!");
|
log.debug("SubCategories reordered!");
|
||||||
|
|
||||||
return subCategoriesFull;
|
return subCategoriesFull;
|
||||||
}
|
}*/
|
||||||
|
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/change-visibility", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/change-visibility", method = RequestMethod.POST)
|
||||||
public SubCategory changeSubCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
|
public SubCategoryFull changeSubCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
@PathVariable("categoryId") String categoryId,
|
@PathVariable("categoryId") String categoryId,
|
||||||
@PathVariable("subcategoryId") String subcategoryId,
|
@PathVariable("subcategoryId") String subcategoryId,
|
||||||
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
|
@RequestParam("visibility") Visibility visibility,
|
||||||
log.debug("change subCategory visibility: "+visibility + " - toggle propagate: "+((propagate != null && propagate) ? "true" : "false"));
|
@RequestParam(defaultValue = "false") Boolean propagate) {
|
||||||
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
|
log.debug("change subCategory visibility: " + visibility + " - toggle propagate: " + propagate);
|
||||||
|
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
|
||||||
SubCategory subCategory = subCategoryDAO.findById(subcategoryId);
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
if (subCategory == null) {
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
// EXCEPTION - SubCategory not found
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
throw new EntityNotFoundException("Change subCategory visibility: SubCategory with id: "+subcategoryId+" not found");
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
}
|
return this.subCategoryService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), subCategory, visibility, propagate);
|
||||||
Category category = checkForExceptions(stakeholderId, topicId, categoryId);
|
|
||||||
|
|
||||||
if (category.getSubCategories().contains(subcategoryId)) {
|
|
||||||
return changeVisibilityTree(subcategoryId, visibility, propagate);
|
|
||||||
} else {
|
|
||||||
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
|
|
||||||
throw new PathNotValidException("Toggle subCategory: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public SubCategory changeVisibilityTree(String subCategoryId, Visibility visibility, Boolean propagate) {
|
|
||||||
SubCategory<String> subCategory = subCategoryDAO.findById(subCategoryId);
|
|
||||||
if (subCategory == null) {
|
|
||||||
// EXCEPTION - SubCategory not found
|
|
||||||
throw new EntityNotFoundException("Change subCategory visibility: SubCategory with id: " + subCategoryId + " not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
SubCategory<Section> subCategoryFull = new SubCategory(subCategory);
|
|
||||||
List<Section> chartsFull = new ArrayList();
|
|
||||||
List<Section> numbersFull = new ArrayList();
|
|
||||||
|
|
||||||
if (propagate != null && propagate) {
|
|
||||||
for (String sectionId : subCategory.getCharts()) {
|
|
||||||
chartsFull.add(sectionController.changeVisibilityTree(sectionId, visibility));
|
|
||||||
}
|
|
||||||
for (String sectionId : subCategory.getNumbers()) {
|
|
||||||
numbersFull.add(sectionController.changeVisibilityTree(sectionId, visibility));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
subCategory.setVisibility(visibility);
|
|
||||||
subCategoryDAO.save(subCategory);
|
|
||||||
log.debug("SubCategory toggled!");
|
|
||||||
|
|
||||||
subCategoryFull.setVisibility(visibility);
|
|
||||||
subCategoryFull.setCharts(chartsFull);
|
|
||||||
subCategoryFull.setNumbers(numbersFull);
|
|
||||||
|
|
||||||
return subCategoryFull;
|
|
||||||
}
|
|
||||||
|
|
||||||
private Category checkForExceptions(String stakeholderId, String topicId, String categoryId) {
|
|
||||||
|
|
||||||
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
|
|
||||||
|
|
||||||
if(stakeholder == null) {
|
|
||||||
// EXCEPTION - Stakeholder not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Stakeholder with id: " + stakeholderId + " not found");
|
|
||||||
}
|
|
||||||
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
|
||||||
// EXCEPTION - Access denied
|
|
||||||
throw new ForbiddenException("CheckForExceptions SubCategory: You are not authorized to update stakeholder with id: "+stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Topic<String> topic = topicDAO.findById(topicId);
|
|
||||||
if(topic == null) {
|
|
||||||
// EXCEPTION - Topic not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Topic with id: "+topicId+" not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!stakeholder.getTopics().contains(topicId)) {
|
|
||||||
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
|
|
||||||
}
|
|
||||||
|
|
||||||
Category<String> category = categoryDAO.findById(categoryId);
|
|
||||||
if(category == null) {
|
|
||||||
// EXCEPTION - Category not found
|
|
||||||
throw new EntityNotFoundException("Save indicator: Category with id: "+categoryId+" not found");
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!topic.getCategories().contains(categoryId)) {
|
|
||||||
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
|
|
||||||
throw new PathNotValidException("Save indicator: Category with id: "+categoryId+" not found in Topic: "+topicId);
|
|
||||||
}
|
|
||||||
return category;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void deleteTree(Category category) {
|
|
||||||
List<String> subCategories = category.getSubCategories();
|
|
||||||
for(String subCategoryId : subCategories) {
|
|
||||||
SubCategory subCategory = subCategoryDAO.findById(subCategoryId);
|
|
||||||
if (subCategory == null) {
|
|
||||||
// EXCEPTION - SubCategory not found
|
|
||||||
throw new EntityNotFoundException("SubCategory delete tree: SubCategory with id: "+subCategoryId+" not found (subCategory exists in category: "+category.getId()+")");
|
|
||||||
}
|
|
||||||
|
|
||||||
sectionController.deleteTree(subCategory);
|
|
||||||
|
|
||||||
subCategoryDAO.delete(subCategoryId);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void disConnectTree(Category category) {
|
|
||||||
List<String> subCategories = category.getSubCategories();
|
|
||||||
for(String subCategoryId : subCategories) {
|
|
||||||
SubCategory subCategory = subCategoryDAO.findById(subCategoryId);
|
|
||||||
if (subCategory == null) {
|
|
||||||
// EXCEPTION - SubCategory not found
|
|
||||||
throw new EntityNotFoundException("SubCategory disconnect tree: SubCategory with id: "+subCategoryId+" not found (subCategory exists in category: "+category.getId()+")");
|
|
||||||
}
|
|
||||||
|
|
||||||
sectionController.disConnectTree(subCategory);
|
|
||||||
|
|
||||||
subCategory.setDefaultId(null);
|
|
||||||
subCategoryDAO.save(subCategory);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
*/
|
|
||||||
|
|
|
@ -17,8 +17,8 @@ import org.springframework.web.bind.annotation.*;
|
||||||
public class TopicController {
|
public class TopicController {
|
||||||
private final Logger log = LogManager.getLogger(this.getClass());
|
private final Logger log = LogManager.getLogger(this.getClass());
|
||||||
|
|
||||||
private TopicService topicService;
|
private final TopicService topicService;
|
||||||
private StakeholderService stakeholderService;
|
private final StakeholderService stakeholderService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public TopicController(TopicService topicService, StakeholderService stakeholderService) {
|
public TopicController(TopicService topicService, StakeholderService stakeholderService) {
|
||||||
|
@ -215,9 +215,10 @@ public class TopicController {
|
||||||
public TopicFull 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);
|
||||||
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId);
|
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId);
|
||||||
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findById(stakeholderId);
|
||||||
return this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topicId, visibility, propagate);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
|
return this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topic, visibility, propagate);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,17 +31,16 @@ public class CategoryService {
|
||||||
this.commonService = commonService;
|
this.commonService = commonService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Category findByPath(Topic topic, String categoryId, String message) {
|
public Category findByPath(Topic topic, String categoryId) {
|
||||||
if (!topic.getCategories().contains(categoryId)) {
|
if (!topic.getCategories().contains(categoryId)) {
|
||||||
throw new PathNotValidException(message + ": Category with id: " + categoryId + " not found in Topic: " + topic.getId());
|
throw new PathNotValidException("Category with id: " + categoryId + " not found in Topic: " + topic.getId());
|
||||||
}
|
}
|
||||||
return this.dao.findById(categoryId).orElseThrow(() -> new EntityNotFoundException(message + ": Category with id: " + categoryId + " not found"));
|
return this.dao.findById(categoryId).orElseThrow(() -> new EntityNotFoundException("Category with id: " + categoryId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull getFullCategory(String type, String alias, String categoryId) {
|
public CategoryFull getFullCategory(String type, String alias, Category category) {
|
||||||
Category category = this.find(categoryId);
|
if (commonService.hasVisibilityAuthority(type, alias, category)) {
|
||||||
if(commonService.hasVisibilityAuthority(type, alias, category)) {
|
return new CategoryFull(category, category.getSubCategories().stream()
|
||||||
return new CategoryFull(category, category.getSubCategories().stream()
|
|
||||||
.map(subCategoryId -> this.subCategoryService.getFullSubCategory(type, alias, subCategoryId))
|
.map(subCategoryId -> this.subCategoryService.getFullSubCategory(type, alias, subCategoryId))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
} else {
|
} else {
|
||||||
|
@ -49,6 +48,11 @@ public class CategoryService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CategoryFull getFullCategory(String type, String alias, String categoryId) {
|
||||||
|
Category category = this.find(categoryId);
|
||||||
|
return this.getFullCategory(type, alias, category);
|
||||||
|
}
|
||||||
|
|
||||||
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"));
|
||||||
}
|
}
|
||||||
|
@ -65,14 +69,14 @@ public class CategoryService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(String type, Category category, boolean remove) {
|
public void delete(String type, Category category, boolean remove) {
|
||||||
if(this.commonService.hasDeleteAuthority(type)) {
|
if (this.commonService.hasDeleteAuthority(type)) {
|
||||||
this.dao.findByDefaultId(category.getId()).forEach(child -> {
|
this.dao.findByDefaultId(category.getId()).forEach(child -> {
|
||||||
this.delete(type, child.getId(), remove);
|
this.delete(type, child.getId(), remove);
|
||||||
});
|
});
|
||||||
category.getSubCategories().forEach(subcategoryId -> {
|
category.getSubCategories().forEach(subcategoryId -> {
|
||||||
this.subCategoryService.delete(type, subcategoryId, false);
|
this.subCategoryService.delete(type, subcategoryId, false);
|
||||||
});
|
});
|
||||||
if(remove){
|
if (remove) {
|
||||||
this.removeCategory(category.getId());
|
this.removeCategory(category.getId());
|
||||||
}
|
}
|
||||||
this.dao.delete(category);
|
this.dao.delete(category);
|
||||||
|
@ -93,20 +97,28 @@ public class CategoryService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
|
public CategoryFull changeVisibility(String type, String alias, CategoryFull category, Visibility visibility, Boolean propagate) {
|
||||||
if(this.commonService.hasEditAuthority(type, alias)) {
|
if (this.commonService.hasEditAuthority(type, alias)) {
|
||||||
CategoryFull categoryFull = this.getFullCategory(type, alias, id);
|
category.setVisibility(visibility);
|
||||||
categoryFull.setVisibility(visibility);
|
if (propagate) {
|
||||||
if(propagate) {
|
category.setSubCategories(category.getSubCategories().stream()
|
||||||
categoryFull.setSubCategories(categoryFull.getSubCategories().stream()
|
.map(subCategory -> this.subCategoryService.changeVisibility(type, alias, subCategory, visibility, true))
|
||||||
.map(category -> this.subCategoryService.changeVisibility(type, alias, category.getId(), visibility, true))
|
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
Category category = this.save(new Category(categoryFull));
|
category.update(this.save(new Category(category)));
|
||||||
categoryFull.update(category);
|
return category;
|
||||||
return categoryFull;
|
|
||||||
} else {
|
} else {
|
||||||
throw new ForbiddenException("Change category visibility: You are not authorized to update category with id: " + id);
|
throw new ForbiddenException("Change category visibility: You are not authorized to update category with id: " + category.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public CategoryFull changeVisibility(String type, String alias, Category category, Visibility visibility, Boolean propagate) {
|
||||||
|
CategoryFull categoryFull = this.getFullCategory(type, alias, category);
|
||||||
|
return this.changeVisibility(type, alias, categoryFull, visibility, propagate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
|
||||||
|
Category category = this.find(id);
|
||||||
|
return this.changeVisibility(type, alias, category, visibility, propagate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,7 +6,9 @@ import eu.dnetlib.uoamonitorservice.dao.SectionDAO;
|
||||||
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;
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.SubCategory;
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
||||||
|
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
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;
|
||||||
|
@ -32,6 +34,13 @@ public class IndicatorService {
|
||||||
return this.dao.save(indicator);
|
return this.dao.save(indicator);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Indicator findByPath(Section section, String indicatorId) {
|
||||||
|
if (!section.getIndicators().contains(indicatorId)) {
|
||||||
|
throw new PathNotValidException("Indicator with id: " + indicatorId + " not found in Section: " + section.getId());
|
||||||
|
}
|
||||||
|
return this.dao.findById(indicatorId).orElseThrow(() -> new EntityNotFoundException("Indicator with id: " + indicatorId + " not found"));
|
||||||
|
}
|
||||||
|
|
||||||
public Indicator find(String id) {
|
public Indicator find(String id) {
|
||||||
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Indicator with id: " + id + " not found"));
|
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Indicator with id: " + id + " not found"));
|
||||||
}
|
}
|
||||||
|
@ -72,13 +81,17 @@ public class IndicatorService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public Indicator changeVisibility(String type, String alias, String id, Visibility visibility) {
|
public Indicator changeVisibility(String type, String alias, Indicator indicator, Visibility visibility) {
|
||||||
if(this.commonService.hasEditAuthority(type, alias)) {
|
if(this.commonService.hasEditAuthority(type, alias)) {
|
||||||
Indicator indicator = this.getIndicator(type, alias, id);
|
|
||||||
indicator.setVisibility(visibility);
|
indicator.setVisibility(visibility);
|
||||||
return this.save(indicator);
|
return this.save(indicator);
|
||||||
} else {
|
} else {
|
||||||
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + id);
|
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + indicator.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Indicator changeVisibility(String type, String alias, String id, Visibility visibility) {
|
||||||
|
Indicator indicator = this.find(id);
|
||||||
|
return this.changeVisibility(type, alias, indicator, visibility);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,9 +4,12 @@ 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.dao.SubCategoryDAO;
|
||||||
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
|
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.Category;
|
||||||
import eu.dnetlib.uoamonitorservice.entities.Indicator;
|
import eu.dnetlib.uoamonitorservice.entities.Indicator;
|
||||||
import eu.dnetlib.uoamonitorservice.entities.Section;
|
import eu.dnetlib.uoamonitorservice.entities.Section;
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.SubCategory;
|
||||||
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
|
||||||
|
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
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;
|
||||||
|
@ -31,22 +34,11 @@ public class SectionService {
|
||||||
this.commonService = commonService;
|
this.commonService = commonService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SectionFull changeVisibilityTree(String sectionId, Visibility visibility) {
|
public Section findByPath(SubCategory subCategory, String sectionId) {
|
||||||
Section section = this.find(sectionId);
|
if (!subCategory.getNumbers().contains(sectionId) || !subCategory.getCharts().contains(sectionId)) {
|
||||||
SectionFull sectionFull = new SectionFull(section, section.getIndicators().stream().map(this.indicatorService::find).collect(Collectors.toList()));
|
throw new PathNotValidException("Section with id: " + sectionId + " not found in SubCategory: " + subCategory.getId());
|
||||||
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;
|
return this.dao.findById(sectionId).orElseThrow(() -> new EntityNotFoundException("Section with id: " + sectionId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Section find(String id) {
|
public Section find(String id) {
|
||||||
|
@ -113,17 +105,20 @@ public class SectionService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public SectionFull changeVisibility(String type, String alias, String id, Visibility visibility) {
|
public SectionFull changeVisibility(String type, String alias, SectionFull section, Visibility visibility) {
|
||||||
if(this.commonService.hasEditAuthority(type, alias)) {
|
if(this.commonService.hasEditAuthority(type, alias)) {
|
||||||
SectionFull sectionFull = this.getFullSection(type, alias, id);
|
section.setIndicators(section.getIndicators().stream()
|
||||||
sectionFull.setIndicators(sectionFull.getIndicators().stream()
|
.map(indicator -> this.indicatorService.changeVisibility(type, alias, indicator, visibility))
|
||||||
.map(category -> this.indicatorService.changeVisibility(type, alias, category.getId(), visibility))
|
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
Section section = this.save(new Section(sectionFull));
|
section.update(this.save(new Section(section)));
|
||||||
sectionFull.update(section);
|
return section;
|
||||||
return sectionFull;
|
|
||||||
} else {
|
} else {
|
||||||
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + id);
|
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + section.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SectionFull changeVisibility(String type, String alias, String id, Visibility visibility) {
|
||||||
|
SectionFull sectionFull = this.getFullSection(type, alias, id);
|
||||||
|
return this.changeVisibility(type, alias, sectionFull, visibility);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,8 +122,8 @@ public class StakeholderService {
|
||||||
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
StakeholderFull stakeholderFull = this.getFullStakeholder(stakeholder);
|
StakeholderFull stakeholderFull = this.getFullStakeholder(stakeholder);
|
||||||
if(propagate) {
|
if(propagate) {
|
||||||
stakeholderFull.setTopics(stakeholder.getTopics().stream().
|
stakeholderFull.setTopics(stakeholderFull.getTopics().stream().
|
||||||
map(topicId -> this.topicService.changeVisibility(stakeholderFull.getType(), stakeholderFull.getAlias(), topicId, visibility, true))
|
map(topic -> this.topicService.changeVisibility(stakeholderFull.getType(), stakeholderFull.getAlias(), topic.getId(), visibility, true))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
stakeholder = this.save(stakeholder);
|
stakeholder = this.save(stakeholder);
|
||||||
|
|
|
@ -38,15 +38,14 @@ public class SubCategoryService {
|
||||||
this.sectionService = sectionService;
|
this.sectionService = sectionService;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategory findByPath(Category category, String subcategoryId, String message) {
|
public SubCategory findByPath(Category category, String subcategoryId) {
|
||||||
if (!category.getSubCategories().contains(subcategoryId)) {
|
if (!category.getSubCategories().contains(subcategoryId)) {
|
||||||
throw new PathNotValidException(message + ": SubCategory with id: " + subcategoryId + " not found in Category: " + category.getId());
|
throw new PathNotValidException("SubCategory with id: " + subcategoryId + " not found in Category: " + category.getId());
|
||||||
}
|
}
|
||||||
return this.dao.findById(subcategoryId).orElseThrow(() -> new EntityNotFoundException(message + ": SubCategory with id: " + subcategoryId + " not found"));
|
return this.dao.findById(subcategoryId).orElseThrow(() -> new EntityNotFoundException("SubCategory with id: " + subcategoryId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategoryFull getFullSubCategory(String type, String alias, String subCategoryId) {
|
public SubCategoryFull getFullSubCategory(String type, String alias, SubCategory subCategory) {
|
||||||
SubCategory subCategory = this.find(subCategoryId);
|
|
||||||
if(commonService.hasVisibilityAuthority(type, alias, subCategory)) {
|
if(commonService.hasVisibilityAuthority(type, alias, subCategory)) {
|
||||||
return new SubCategoryFull(subCategory, subCategory.getNumbers().stream()
|
return new SubCategoryFull(subCategory, subCategory.getNumbers().stream()
|
||||||
.map(sectionId -> this.sectionService.getFullSection(type, alias, sectionId))
|
.map(sectionId -> this.sectionService.getFullSection(type, alias, sectionId))
|
||||||
|
@ -59,6 +58,11 @@ public class SubCategoryService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SubCategoryFull getFullSubCategory(String type, String alias, String subCategoryId) {
|
||||||
|
SubCategory subCategory = this.find(subCategoryId);
|
||||||
|
return this.getFullSubCategory(type, alias, subCategory);
|
||||||
|
}
|
||||||
|
|
||||||
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"));
|
||||||
}
|
}
|
||||||
|
@ -109,23 +113,32 @@ public class SubCategoryService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategoryFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
|
public SubCategoryFull changeVisibility(String type, String alias, SubCategoryFull subCategory, Visibility visibility, Boolean propagate) {
|
||||||
if(this.commonService.hasEditAuthority(type, alias)) {
|
if(this.commonService.hasEditAuthority(type, alias)) {
|
||||||
SubCategoryFull subCategoryFull = this.getFullSubCategory(type, alias, id);
|
subCategory.setVisibility(visibility);
|
||||||
subCategoryFull.setVisibility(visibility);
|
|
||||||
if(propagate) {
|
if(propagate) {
|
||||||
subCategoryFull.setNumbers(subCategoryFull.getNumbers().stream()
|
subCategory.setNumbers(subCategory.getNumbers().stream()
|
||||||
.map(category -> this.sectionService.changeVisibility(type, alias, category.getId(), visibility))
|
.map(section -> this.sectionService.changeVisibility(type, alias, section, visibility))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
subCategoryFull.setCharts(subCategoryFull.getCharts().stream()
|
subCategory.setCharts(subCategory.getCharts().stream()
|
||||||
.map(category -> this.sectionService.changeVisibility(type, alias, category.getId(), visibility))
|
.map(section -> this.sectionService.changeVisibility(type, alias, section, visibility))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
SubCategory subCategory = this.save(new SubCategory(subCategoryFull));
|
subCategory.update(this.save(new SubCategory(subCategory)));
|
||||||
subCategoryFull.update(subCategory);
|
return subCategory;
|
||||||
return subCategoryFull;
|
|
||||||
} else {
|
} else {
|
||||||
throw new ForbiddenException("Change subCategory visibility: You are not authorized to update subCategory with id: " + id);
|
throw new ForbiddenException("Change subCategory visibility: You are not authorized to update subCategory with id: " + subCategory.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SubCategoryFull changeVisibility(String type, String alias, SubCategory subCategory, Visibility visibility, Boolean propagate) {
|
||||||
|
SubCategoryFull subCategoryFull = this.getFullSubCategory(type, alias, subCategory);
|
||||||
|
return this.changeVisibility(type, alias, subCategoryFull, visibility, propagate);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public SubCategoryFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
|
||||||
|
SubCategory subCategory = this.find(id);
|
||||||
|
return this.changeVisibility(type, alias, subCategory, visibility, propagate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,8 +38,7 @@ public class TopicService {
|
||||||
return this.dao.findById(topicId).orElseThrow(() -> new EntityNotFoundException("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, Topic topic) {
|
||||||
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))
|
||||||
|
@ -49,6 +48,11 @@ public class TopicService {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TopicFull getFullTopic(String type, String alias, String id) {
|
||||||
|
Topic topic = this.find(id);
|
||||||
|
return this.getFullTopic(type, alias, topic);
|
||||||
|
}
|
||||||
|
|
||||||
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"));
|
||||||
}
|
}
|
||||||
|
@ -72,7 +76,7 @@ public class TopicService {
|
||||||
topic.getCategories().forEach(categoryId -> {
|
topic.getCategories().forEach(categoryId -> {
|
||||||
this.categoryService.delete(type, categoryId, false);
|
this.categoryService.delete(type, categoryId, false);
|
||||||
});
|
});
|
||||||
if(remove) {
|
if (remove) {
|
||||||
this.removeTopic(topic.getId());
|
this.removeTopic(topic.getId());
|
||||||
}
|
}
|
||||||
this.dao.delete(topic);
|
this.dao.delete(topic);
|
||||||
|
@ -93,20 +97,28 @@ public class TopicService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public TopicFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
|
public TopicFull changeVisibility(String type, String alias, TopicFull topic, Visibility visibility, Boolean propagate) {
|
||||||
if (this.commonService.hasEditAuthority(type, alias)) {
|
if (this.commonService.hasEditAuthority(type, alias)) {
|
||||||
TopicFull topicFull = this.getFullTopic(type, alias, id);
|
topic.setVisibility(visibility);
|
||||||
topicFull.setVisibility(visibility);
|
|
||||||
if (propagate) {
|
if (propagate) {
|
||||||
topicFull.setCategories(topicFull.getCategories().stream()
|
topic.setCategories(topic.getCategories().stream()
|
||||||
.map(category -> this.categoryService.changeVisibility(type, alias, category.getId(), visibility, true))
|
.map(category -> this.categoryService.changeVisibility(type, alias, category, visibility, true))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
Topic topic = this.save(new Topic(topicFull));
|
topic.update(this.save(new Topic(topic)));
|
||||||
topicFull.update(topic);
|
return topic;
|
||||||
return topicFull;
|
|
||||||
} else {
|
} else {
|
||||||
throw new ForbiddenException("Change topic visibility: You are not authorized to update topic with id: " + id);
|
throw new ForbiddenException("Change topic visibility: You are not authorized to update topic with id: " + topic.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public TopicFull changeVisibility(String type, String alias, Topic topic, Visibility visibility, Boolean propagate) {
|
||||||
|
TopicFull topicFull = this.getFullTopic(type, alias, topic);
|
||||||
|
return this.changeVisibility(type, alias, topicFull, visibility, propagate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopicFull changeVisibility(String type, String alias, String id, Visibility visibility, Boolean propagate) {
|
||||||
|
Topic topic = this.find(id);
|
||||||
|
return this.changeVisibility(type, alias, topic, visibility, propagate);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue