Add a field overrides in stakeholder in order to override inside entitities fields in case of references. Currently used only for visibilities.
This commit is contained in:
parent
d599b7bb2d
commit
6e68a5ece8
|
@ -84,8 +84,14 @@ public class CategoryController {
|
||||||
log.debug("change category visibility: " + visibility + " - toggle propagate: " + propagate);
|
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.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
if(stakeholder.isCopy() || stakeholder.getDefaultId() == null) {
|
||||||
Category category = this.categoryService.findByPath(topic, categoryId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
return ResponseEntity.ok(this.categoryService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), category, visibility, propagate));
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
|
return ResponseEntity.ok(this.categoryService.changeVisibility(stakeholder, category, visibility, propagate));
|
||||||
|
} else {
|
||||||
|
Topic topic = this.topicService.findByPath(this.stakeholderService.findByPath(stakeholder.getDefaultId()), topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
|
return ResponseEntity.ok(this.categoryService.changeVisibility(stakeholder, category, visibility, propagate, stakeholderService));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -127,11 +127,20 @@ public class IndicatorController {
|
||||||
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.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
if(stakeholder.isCopy() || stakeholder.getDefaultId() == null) {
|
||||||
Category category = this.categoryService.findByPath(topic, categoryId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
Section section = this.sectionService.findByPath(subCategory, sectionId);
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
Indicator indicator = this.indicatorService.findByPath(section, indicatorId);
|
Section section = this.sectionService.findByPath(subCategory, sectionId);
|
||||||
return ResponseEntity.ok(this.indicatorService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), indicator, visibility));
|
Indicator indicator = this.indicatorService.findByPath(section, indicatorId);
|
||||||
|
return ResponseEntity.ok(this.indicatorService.changeVisibility(stakeholder, indicator, visibility));
|
||||||
|
} else {
|
||||||
|
Topic topic = this.topicService.findByPath(this.stakeholderService.findByPath(stakeholder.getDefaultId()), topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
|
Section section = this.sectionService.findByPath(subCategory, sectionId);
|
||||||
|
Indicator indicator = this.indicatorService.findByPath(section, indicatorId);
|
||||||
|
return ResponseEntity.ok(this.indicatorService.changeVisibility(stakeholder, indicator, visibility, stakeholderService));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -47,7 +47,7 @@ public class SubCategoryController {
|
||||||
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
Category category = this.categoryService.findByPath(topic, categoryId);
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
if(subcategoryFull.getId() != null) {
|
if (subcategoryFull.getId() != null) {
|
||||||
this.subCategoryService.findByPath(category, subcategoryFull.getId());
|
this.subCategoryService.findByPath(category, subcategoryFull.getId());
|
||||||
}
|
}
|
||||||
return ResponseEntity.ok(this.subCategoryService.save(stakeholder, category, new SubCategory(subcategoryFull)));
|
return ResponseEntity.ok(this.subCategoryService.save(stakeholder, category, new SubCategory(subcategoryFull)));
|
||||||
|
@ -56,10 +56,10 @@ public class SubCategoryController {
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/delete", method = RequestMethod.DELETE)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/delete", method = RequestMethod.DELETE)
|
||||||
public ResponseEntity<Boolean> deleteSubCategory(@PathVariable("stakeholderId") String stakeholderId,
|
public ResponseEntity<Boolean> deleteSubCategory(@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(required = false, name = "children") String children) {
|
@RequestParam(required = false, name = "children") 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.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
|
@ -73,9 +73,9 @@ public class SubCategoryController {
|
||||||
@PreAuthorize("isAuthenticated()")
|
@PreAuthorize("isAuthenticated()")
|
||||||
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/reorder", method = RequestMethod.POST)
|
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/reorder", method = RequestMethod.POST)
|
||||||
public ResponseEntity<List<SubCategoryFull>> reorderSubCategories(@PathVariable("stakeholderId") String stakeholderId,
|
public ResponseEntity<List<SubCategoryFull>> reorderSubCategories(@PathVariable("stakeholderId") String stakeholderId,
|
||||||
@PathVariable("topicId") String topicId,
|
@PathVariable("topicId") String topicId,
|
||||||
@PathVariable("categoryId") String categoryId,
|
@PathVariable("categoryId") String categoryId,
|
||||||
@RequestBody List<String> subCategories) {
|
@RequestBody List<String> subCategories) {
|
||||||
log.debug("reorder subCategories");
|
log.debug("reorder subCategories");
|
||||||
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
|
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
|
||||||
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
|
@ -87,17 +87,24 @@ public class SubCategoryController {
|
||||||
@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 ResponseEntity<SubCategoryFull> changeSubCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
|
public ResponseEntity<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("visibility") Visibility visibility,
|
||||||
@RequestParam(defaultValue = "false", name = "propagate") Boolean propagate) {
|
@RequestParam(defaultValue = "false", name = "propagate") Boolean propagate) {
|
||||||
log.debug("change subCategory visibility: " + visibility + " - toggle propagate: " + propagate);
|
log.debug("change subCategory visibility: " + visibility + " - toggle propagate: " + propagate);
|
||||||
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
|
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
|
||||||
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
if (stakeholder.isCopy() || stakeholder.getDefaultId() == null) {
|
||||||
Category category = this.categoryService.findByPath(topic, categoryId);
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
return ResponseEntity.ok(this.subCategoryService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), subCategory, visibility, propagate));
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
|
return ResponseEntity.ok(this.subCategoryService.changeVisibility(stakeholder, subCategory, visibility, propagate));
|
||||||
|
} else {
|
||||||
|
Topic topic = this.topicService.findByPath(this.stakeholderService.findByPath(stakeholder.getDefaultId()), topicId);
|
||||||
|
Category category = this.categoryService.findByPath(topic, categoryId);
|
||||||
|
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
|
||||||
|
return ResponseEntity.ok(this.subCategoryService.changeVisibility(stakeholder, subCategory, visibility, propagate, stakeholderService));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,7 +72,12 @@ public class TopicController {
|
||||||
log.debug("change topic visibility: " + visibility + " - toggle propagate: " + propagate);
|
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.findByPath(stakeholderId);
|
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
|
||||||
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
if(stakeholder.isCopy() || stakeholder.getDefaultId() == null) {
|
||||||
return ResponseEntity.ok(this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topic, visibility, propagate));
|
Topic topic = this.topicService.findByPath(stakeholder, topicId);
|
||||||
|
return ResponseEntity.ok(this.topicService.changeVisibility(stakeholder, topic, visibility, propagate));
|
||||||
|
} else {
|
||||||
|
Topic topic = this.topicService.findByPath(this.stakeholderService.findByPath(stakeholder.getDefaultId()), topicId);
|
||||||
|
return ResponseEntity.ok(this.topicService.changeVisibility(stakeholder, topic, visibility, propagate, stakeholderService));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,7 +3,6 @@ package eu.dnetlib.uoamonitorservice.entities;
|
||||||
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
|
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
|
||||||
import eu.dnetlib.uoamonitorservice.generics.CategoryGeneric;
|
import eu.dnetlib.uoamonitorservice.generics.CategoryGeneric;
|
||||||
import eu.dnetlib.uoamonitorservice.generics.Common;
|
import eu.dnetlib.uoamonitorservice.generics.Common;
|
||||||
import eu.dnetlib.uoamonitorservice.generics.TopicGeneric;
|
|
||||||
import org.springframework.data.mongodb.core.mapping.Document;
|
import org.springframework.data.mongodb.core.mapping.Document;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
|
|
@ -1,15 +1,10 @@
|
||||||
package eu.dnetlib.uoamonitorservice.entities;
|
package eu.dnetlib.uoamonitorservice.entities;
|
||||||
|
|
||||||
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
|
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
|
||||||
import eu.dnetlib.uoamonitorservice.generics.Common;
|
|
||||||
import eu.dnetlib.uoamonitorservice.generics.StakeholderGeneric;
|
import eu.dnetlib.uoamonitorservice.generics.StakeholderGeneric;
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Umbrella;
|
|
||||||
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
|
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
|
||||||
import org.springframework.data.mongodb.core.mapping.Document;
|
import org.springframework.data.mongodb.core.mapping.Document;
|
||||||
|
|
||||||
import java.util.Objects;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@Document
|
@Document
|
||||||
public class Stakeholder extends StakeholderGeneric<String, String> {
|
public class Stakeholder extends StakeholderGeneric<String, String> {
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,15 @@
|
||||||
package eu.dnetlib.uoamonitorservice.generics;
|
package eu.dnetlib.uoamonitorservice.generics;
|
||||||
|
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
||||||
|
import eu.dnetlib.uoamonitorservice.utils.GenericAccessor;
|
||||||
import org.springframework.data.annotation.CreatedDate;
|
import org.springframework.data.annotation.CreatedDate;
|
||||||
import org.springframework.data.annotation.Id;
|
import org.springframework.data.annotation.Id;
|
||||||
import org.springframework.data.annotation.LastModifiedDate;
|
import org.springframework.data.annotation.LastModifiedDate;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
public class Common {
|
public class Common {
|
||||||
@Id
|
@Id
|
||||||
|
@ -20,7 +23,7 @@ public class Common {
|
||||||
protected String name;
|
protected String name;
|
||||||
protected String description;
|
protected String description;
|
||||||
protected String alias;
|
protected String alias;
|
||||||
protected Visibility visibility = Visibility.PRIVATE;
|
protected Visibility visibility;
|
||||||
|
|
||||||
public void update(Common common) {
|
public void update(Common common) {
|
||||||
this.id = common.getId();
|
this.id = common.getId();
|
||||||
|
@ -104,4 +107,8 @@ public class Common {
|
||||||
public void setVisibility(Visibility visibility) {
|
public void setVisibility(Visibility visibility) {
|
||||||
this.visibility = visibility;
|
this.visibility = visibility;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void override(Stakeholder stakeholder) {
|
||||||
|
stakeholder.getOverride(this.id).forEach((field, value) -> GenericAccessor.setField(this, field, value));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -5,10 +5,7 @@ import eu.dnetlib.uoamonitorservice.primitives.Locale;
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.StakeholderType;
|
import eu.dnetlib.uoamonitorservice.primitives.StakeholderType;
|
||||||
import eu.dnetlib.uoamonitorservice.primitives.Umbrella;
|
import eu.dnetlib.uoamonitorservice.primitives.Umbrella;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.Date;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Optional;
|
|
||||||
|
|
||||||
public class StakeholderGeneric<T, S> extends Common {
|
public class StakeholderGeneric<T, S> extends Common {
|
||||||
protected StakeholderType type;
|
protected StakeholderType type;
|
||||||
|
@ -25,6 +22,7 @@ public class StakeholderGeneric<T, S> extends Common {
|
||||||
protected Boolean copy;
|
protected Boolean copy;
|
||||||
protected List<T> topics = new ArrayList<>();
|
protected List<T> topics = new ArrayList<>();
|
||||||
protected Umbrella<S> umbrella;
|
protected Umbrella<S> umbrella;
|
||||||
|
protected Map<String, Map<String, Object>> overrides;
|
||||||
|
|
||||||
public StakeholderGeneric() {
|
public StakeholderGeneric() {
|
||||||
}
|
}
|
||||||
|
@ -45,10 +43,13 @@ public class StakeholderGeneric<T, S> extends Common {
|
||||||
defaultId = stakeholder.getDefaultId();
|
defaultId = stakeholder.getDefaultId();
|
||||||
setLocale(stakeholder.getLocale());
|
setLocale(stakeholder.getLocale());
|
||||||
setVisibility(stakeholder.getVisibility());
|
setVisibility(stakeholder.getVisibility());
|
||||||
this.funderType = stakeholder.getFunderType();
|
funderType = stakeholder.getFunderType();
|
||||||
this.copy = stakeholder.isCopy();
|
copy = stakeholder.isCopy();
|
||||||
this.standalone = stakeholder.isStandalone();
|
if(!copy) {
|
||||||
|
this.overrides = new HashMap<>();
|
||||||
|
}
|
||||||
creationDate = stakeholder.getCreationDate();
|
creationDate = stakeholder.getCreationDate();
|
||||||
|
standalone = stakeholder.isStandalone();
|
||||||
updateDate = stakeholder.getUpdateDate();
|
updateDate = stakeholder.getUpdateDate();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,6 +172,15 @@ public class StakeholderGeneric<T, S> extends Common {
|
||||||
this.topics = topics;
|
this.topics = topics;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@JsonIgnore
|
||||||
|
public Map<String, Map<String, Object>> getOverrides() {
|
||||||
|
return overrides;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setOverrides(Map<String, Map<String, Object>> overrides) {
|
||||||
|
this.overrides = overrides;
|
||||||
|
}
|
||||||
|
|
||||||
public Umbrella<S> getUmbrella() {
|
public Umbrella<S> getUmbrella() {
|
||||||
return umbrella;
|
return umbrella;
|
||||||
}
|
}
|
||||||
|
@ -183,4 +193,17 @@ public class StakeholderGeneric<T, S> extends Common {
|
||||||
public void setUmbrella(Umbrella<S> umbrella) {
|
public void setUmbrella(Umbrella<S> umbrella) {
|
||||||
this.umbrella =umbrella;
|
this.umbrella =umbrella;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Map<String, Object> getOverride(String id) {
|
||||||
|
if(this.overrides == null) {
|
||||||
|
this.overrides = new HashMap<>();
|
||||||
|
}
|
||||||
|
return this.overrides.computeIfAbsent(id, k -> new HashMap<>());
|
||||||
|
}
|
||||||
|
|
||||||
|
public <V> void setOverride(String id, String field, V value) {
|
||||||
|
if(!this.copy && this.defaultId != null) {
|
||||||
|
this.getOverride(id).put(field, value);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ import eu.dnetlib.uoamonitorservice.primitives.Visibility;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.stereotype.Service;
|
import org.springframework.stereotype.Service;
|
||||||
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -49,19 +48,20 @@ public class CategoryService {
|
||||||
return this.dao.findById(categoryId).orElseThrow(() -> new NotFoundException("Category with id: " + categoryId + " not found"));
|
return this.dao.findById(categoryId).orElseThrow(() -> new NotFoundException("Category with id: " + categoryId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull getFullCategory(String type, String alias, Category category) {
|
public CategoryFull getFullCategory(Stakeholder stakeholder, Category category) {
|
||||||
if (commonService.hasVisibilityAuthority(type, alias, category)) {
|
category.override(stakeholder);
|
||||||
|
if (commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), 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(stakeholder, subCategoryId))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull getFullCategory(String type, String alias, String categoryId) {
|
public CategoryFull getFullCategory(Stakeholder stakeholder, String categoryId) {
|
||||||
Category category = this.find(categoryId);
|
Category category = this.find(categoryId);
|
||||||
return this.getFullCategory(type, alias, category);
|
return this.getFullCategory(stakeholder, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String build(String id) {
|
public String build(String id) {
|
||||||
|
@ -81,7 +81,7 @@ public class CategoryService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Category save(Category category) {
|
public Category save(Category category) {
|
||||||
if(category.getId() != null) {
|
if (category.getId() != null) {
|
||||||
category.setSubCategories(this.find(category.getId()).getSubCategories());
|
category.setSubCategories(this.find(category.getId()).getSubCategories());
|
||||||
} else {
|
} else {
|
||||||
category.setCreationDate(new Date());
|
category.setCreationDate(new Date());
|
||||||
|
@ -108,7 +108,7 @@ public class CategoryService {
|
||||||
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
|
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
|
||||||
category = this.save(category);
|
category = this.save(category);
|
||||||
this.createChildren(topic, category);
|
this.createChildren(topic, category);
|
||||||
if(createOverview) {
|
if (createOverview) {
|
||||||
this.subCategoryService.save(stakeholder, category, category.createOverview());
|
this.subCategoryService.save(stakeholder, category, category.createOverview());
|
||||||
}
|
}
|
||||||
this.addCategory(topic, category.getId());
|
this.addCategory(topic, category.getId());
|
||||||
|
@ -116,7 +116,7 @@ public class CategoryService {
|
||||||
this.commonService.unauthorized("You are not authorized to create a category in stakeholder with id: " + stakeholder.getId());
|
this.commonService.unauthorized("You are not authorized to create a category in stakeholder with id: " + stakeholder.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.getFullCategory(stakeholder.getType(), stakeholder.getAlias(), category);
|
return this.getFullCategory(stakeholder, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createChildren(Topic defaultTopic, Category category) {
|
public void createChildren(Topic defaultTopic, Category category) {
|
||||||
|
@ -134,13 +134,13 @@ public class CategoryService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull reorderSubCategories(Stakeholder stakeholder, Category category, List<String> subcategories) {
|
public CategoryFull reorderSubCategories(Stakeholder stakeholder, Category category, List<String> subcategories) {
|
||||||
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
subcategories.forEach(this.subCategoryService::find);
|
subcategories.forEach(this.subCategoryService::find);
|
||||||
if (category.getSubCategories().size() == subcategories.size() && new HashSet<>(category.getSubCategories()).containsAll(subcategories)) {
|
if (category.getSubCategories().size() == subcategories.size() && new HashSet<>(category.getSubCategories()).containsAll(subcategories)) {
|
||||||
category.setSubCategories(subcategories);
|
category.setSubCategories(subcategories);
|
||||||
category.setUpdateDate(new Date());
|
category.setUpdateDate(new Date());
|
||||||
this.reorderChildren(stakeholder, category, subcategories);
|
this.reorderChildren(stakeholder, category, subcategories);
|
||||||
return this.getFullCategory(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(category));
|
return this.getFullCategory(stakeholder, this.dao.save(category));
|
||||||
} else {
|
} else {
|
||||||
throw new NotFoundException("Some subCategories dont exist in the category with id " + category.getId());
|
throw new NotFoundException("Some subCategories dont exist in the category with id " + category.getId());
|
||||||
}
|
}
|
||||||
|
@ -152,7 +152,7 @@ public class CategoryService {
|
||||||
|
|
||||||
public void reorderChildren(Stakeholder defaultStakeholder, Category defaultCategory, List<String> defaultSubCategories) {
|
public void reorderChildren(Stakeholder defaultStakeholder, Category defaultCategory, List<String> defaultSubCategories) {
|
||||||
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
||||||
this.dao.findByDefaultId(defaultCategory.getId()).stream().map(category -> this.getFullCategory(stakeholder.getType(), stakeholder.getAlias(), category)).forEach(category -> {
|
this.dao.findByDefaultId(defaultCategory.getId()).stream().map(category -> this.getFullCategory(stakeholder, category)).forEach(category -> {
|
||||||
this.reorderSubCategories(stakeholder, new Category(category),
|
this.reorderSubCategories(stakeholder, new Category(category),
|
||||||
this.commonService.reorder(defaultSubCategories, category.getSubCategories().stream().map(subCategory -> (Common) subCategory).collect(Collectors.toList())));
|
this.commonService.reorder(defaultSubCategories, category.getSubCategories().stream().map(subCategory -> (Common) subCategory).collect(Collectors.toList())));
|
||||||
});
|
});
|
||||||
|
@ -195,12 +195,12 @@ public class CategoryService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull changeVisibility(String type, String alias, CategoryFull category, Visibility visibility, Boolean propagate) {
|
public CategoryFull changeVisibility(Stakeholder stakeholder, CategoryFull category, Visibility visibility, Boolean propagate) {
|
||||||
if (this.commonService.hasEditAuthority(type, alias)) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
category.setVisibility(visibility);
|
category.setVisibility(visibility);
|
||||||
if (propagate) {
|
if (propagate) {
|
||||||
category.setSubCategories(category.getSubCategories().stream()
|
category.setSubCategories(category.getSubCategories().stream()
|
||||||
.map(subCategory -> this.subCategoryService.changeVisibility(type, alias, subCategory, visibility, true))
|
.map(subCategory -> this.subCategoryService.changeVisibility(stakeholder, subCategory, visibility, true))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
category.update(this.save(new Category(category)));
|
category.update(this.save(new Category(category)));
|
||||||
|
@ -211,8 +211,30 @@ public class CategoryService {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public CategoryFull changeVisibility(String type, String alias, Category category, Visibility visibility, Boolean propagate) {
|
public CategoryFull changeVisibility(Stakeholder stakeholder, Category category, Visibility visibility, Boolean propagate) {
|
||||||
CategoryFull categoryFull = this.getFullCategory(type, alias, category);
|
CategoryFull categoryFull = this.getFullCategory(stakeholder, category);
|
||||||
return this.changeVisibility(type, alias, categoryFull, visibility, propagate);
|
return this.changeVisibility(stakeholder, categoryFull, visibility, propagate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryFull changeVisibility(Stakeholder stakeholder, CategoryFull category, Visibility visibility, Boolean propagate, StakeholderService stakeholderService) {
|
||||||
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
|
category.setVisibility(visibility);
|
||||||
|
stakeholder.setOverride(category.getId(), "visibility", visibility);
|
||||||
|
Stakeholder saved = stakeholderService.save(stakeholder);
|
||||||
|
if (propagate) {
|
||||||
|
category.setSubCategories(category.getSubCategories().stream()
|
||||||
|
.map(subCategory -> this.subCategoryService.changeVisibility(saved, subCategory, visibility, true, stakeholderService))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
return category;
|
||||||
|
} else {
|
||||||
|
this.commonService.unauthorized("Change category visibility: You are not authorized to update category with id: " + category.getId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public CategoryFull changeVisibility(Stakeholder stakeholder, Category category, Visibility visibility, Boolean propagate, StakeholderService stakeholderService) {
|
||||||
|
CategoryFull categoryFull = this.getFullCategory(stakeholder, category);
|
||||||
|
return this.changeVisibility(stakeholder, categoryFull, visibility, propagate, stakeholderService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@ public class IndicatorService {
|
||||||
private final CommonService commonService;
|
private final CommonService commonService;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public IndicatorService(StakeholderDAO stakeholderDAO, TopicDAO topicDAO, CategoryDAO categoryDAO,SubCategoryDAO subCategoryDAO,
|
public IndicatorService(StakeholderDAO stakeholderDAO, TopicDAO topicDAO, CategoryDAO categoryDAO, SubCategoryDAO subCategoryDAO,
|
||||||
SectionDAO sectionDAO, IndicatorDAO dao, CommonService commonService) {
|
SectionDAO sectionDAO, IndicatorDAO dao, CommonService commonService) {
|
||||||
this.stakeholderDAO = stakeholderDAO;
|
this.stakeholderDAO = stakeholderDAO;
|
||||||
this.topicDAO = topicDAO;
|
this.topicDAO = topicDAO;
|
||||||
|
@ -48,9 +48,10 @@ public class IndicatorService {
|
||||||
return this.dao.findById(indicatorId).orElseThrow(() -> new NotFoundException("Indicator with id: " + indicatorId + " not found"));
|
return this.dao.findById(indicatorId).orElseThrow(() -> new NotFoundException("Indicator with id: " + indicatorId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public Indicator getIndicator(String type, String alias, String id) {
|
public Indicator getIndicator(Stakeholder stakeholder, String id) {
|
||||||
Indicator indicator = this.find(id);
|
Indicator indicator = this.find(id);
|
||||||
if(this.commonService.hasVisibilityAuthority(type, alias, indicator)) {
|
indicator.override(stakeholder);
|
||||||
|
if (this.commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), indicator)) {
|
||||||
return indicator;
|
return indicator;
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
|
@ -68,7 +69,7 @@ public class IndicatorService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Indicator save(Indicator indicator) {
|
public Indicator save(Indicator indicator) {
|
||||||
if(indicator.getId() == null) {
|
if (indicator.getId() == null) {
|
||||||
indicator.setCreationDate(new Date());
|
indicator.setCreationDate(new Date());
|
||||||
}
|
}
|
||||||
indicator.setUpdateDate(new Date());
|
indicator.setUpdateDate(new Date());
|
||||||
|
@ -76,7 +77,7 @@ public class IndicatorService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public Indicator save(Stakeholder stakeholder, Section section, Indicator indicator) {
|
public Indicator save(Stakeholder stakeholder, Section section, Indicator indicator) {
|
||||||
if(indicator.getId() != null) {
|
if (indicator.getId() != null) {
|
||||||
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
this.updateChildren(indicator);
|
this.updateChildren(indicator);
|
||||||
indicator = this.save(indicator);
|
indicator = this.save(indicator);
|
||||||
|
@ -118,11 +119,11 @@ public class IndicatorService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void delete(String type, Indicator indicator, boolean remove) {
|
public void delete(String type, Indicator indicator, boolean remove) {
|
||||||
if(this.commonService.hasDeleteAuthority(type)) {
|
if (this.commonService.hasDeleteAuthority(type)) {
|
||||||
this.dao.findByDefaultId(indicator.getId()).forEach(child -> {
|
this.dao.findByDefaultId(indicator.getId()).forEach(child -> {
|
||||||
this.delete(type, child.getId(), remove);
|
this.delete(type, child.getId(), remove);
|
||||||
});
|
});
|
||||||
if(remove) {
|
if (remove) {
|
||||||
this.removeIndicator(indicator.getId());
|
this.removeIndicator(indicator.getId());
|
||||||
}
|
}
|
||||||
this.dao.delete(indicator);
|
this.dao.delete(indicator);
|
||||||
|
@ -144,15 +145,15 @@ public class IndicatorService {
|
||||||
}
|
}
|
||||||
|
|
||||||
public void removeIndicator(String id) {
|
public void removeIndicator(String id) {
|
||||||
this.sectionDAO.findByIndicator(id).forEach(section -> {
|
this.sectionDAO.findByIndicator(id).forEach(section -> {
|
||||||
section.removeIndicator(id);
|
section.removeIndicator(id);
|
||||||
section.setUpdateDate(new Date());
|
section.setUpdateDate(new Date());
|
||||||
this.sectionDAO.save(section);
|
this.sectionDAO.save(section);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public Indicator changeVisibility(String type, String alias, Indicator indicator, Visibility visibility) {
|
public Indicator changeVisibility(Stakeholder stakeholder, Indicator indicator, Visibility visibility) {
|
||||||
if(this.commonService.hasEditAuthority(type, alias)) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
indicator.setVisibility(visibility);
|
indicator.setVisibility(visibility);
|
||||||
return this.save(indicator);
|
return this.save(indicator);
|
||||||
} else {
|
} else {
|
||||||
|
@ -160,4 +161,16 @@ public class IndicatorService {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Indicator changeVisibility(Stakeholder stakeholder, Indicator indicator, Visibility visibility, StakeholderService stakeholderService) {
|
||||||
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
|
indicator.setVisibility(visibility);
|
||||||
|
stakeholder.setOverride(indicator.getId(), "visibility", visibility);
|
||||||
|
stakeholderService.save(stakeholder);
|
||||||
|
return indicator;
|
||||||
|
} else {
|
||||||
|
this.commonService.unauthorized("Change section visibility: You are not authorized to update section with id: " + indicator.getId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,15 +51,16 @@ public class SectionService {
|
||||||
return this.dao.findById(sectionId).orElseThrow(() -> new NotFoundException("Section with id: " + sectionId + " not found"));
|
return this.dao.findById(sectionId).orElseThrow(() -> new NotFoundException("Section with id: " + sectionId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SectionFull getFullSection(String type, String alias, Section section) {
|
public SectionFull getFullSection(Stakeholder stakeholder, Section section) {
|
||||||
|
section.override(stakeholder);
|
||||||
return new SectionFull(section, section.getIndicators().stream()
|
return new SectionFull(section, section.getIndicators().stream()
|
||||||
.map(indicatorId -> this.indicatorService.getIndicator(type, alias, indicatorId))
|
.map(indicatorId -> this.indicatorService.getIndicator(stakeholder, indicatorId))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SectionFull getFullSection(String type, String alias, String id) {
|
public SectionFull getFullSection(Stakeholder stakeholder, String id) {
|
||||||
Section section = this.find(id);
|
Section section = this.find(id);
|
||||||
return this.getFullSection(type, alias, section);
|
return this.getFullSection(stakeholder, section);
|
||||||
}
|
}
|
||||||
|
|
||||||
public SectionFull saveFull(SectionFull sectionFull) {
|
public SectionFull saveFull(SectionFull sectionFull) {
|
||||||
|
@ -125,7 +126,7 @@ public class SectionService {
|
||||||
this.commonService.unauthorized("You are not authorized to create a section in stakeholder with id: " + stakeholder.getId());
|
this.commonService.unauthorized("You are not authorized to create a section in stakeholder with id: " + stakeholder.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.getFullSection(stakeholder.getType(), stakeholder.getAlias(), section);
|
return this.getFullSection(stakeholder, section);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createChildren(SubCategory defaultSubCategory, Section section, int index) {
|
public void createChildren(SubCategory defaultSubCategory, Section section, int index) {
|
||||||
|
@ -162,7 +163,7 @@ public class SectionService {
|
||||||
if (reorderChildren) {
|
if (reorderChildren) {
|
||||||
this.reorderChildren(stakeholder, section, indicators);
|
this.reorderChildren(stakeholder, section, indicators);
|
||||||
}
|
}
|
||||||
return this.getFullSection(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(section));
|
return this.getFullSection(stakeholder, this.dao.save(section));
|
||||||
} else {
|
} else {
|
||||||
throw new NotFoundException("Some indicators dont exist in the section with id " + section.getId());
|
throw new NotFoundException("Some indicators dont exist in the section with id " + section.getId());
|
||||||
}
|
}
|
||||||
|
@ -174,7 +175,7 @@ public class SectionService {
|
||||||
|
|
||||||
public void reorderChildren(Stakeholder defaultStakeholder, Section defaultSection, List<String> defaultIndicators) {
|
public void reorderChildren(Stakeholder defaultStakeholder, Section defaultSection, List<String> defaultIndicators) {
|
||||||
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder ->
|
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder ->
|
||||||
this.dao.findByDefaultId(defaultSection.getId()).stream().map(section -> this.getFullSection(stakeholder.getType(), stakeholder.getAlias(), section)).forEach(section ->
|
this.dao.findByDefaultId(defaultSection.getId()).stream().map(section -> this.getFullSection(stakeholder, section)).forEach(section ->
|
||||||
this.reorderIndicators(stakeholder, new Section(section), this.commonService.reorder(defaultIndicators, section.getIndicators().stream().map(indicator -> (Common) indicator).collect(Collectors.toList())))
|
this.reorderIndicators(stakeholder, new Section(section), this.commonService.reorder(defaultIndicators, section.getIndicators().stream().map(indicator -> (Common) indicator).collect(Collectors.toList())))
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -229,10 +230,10 @@ public class SectionService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public SectionFull changeVisibility(String type, String alias, SectionFull section, Visibility visibility) {
|
public SectionFull changeVisibility(Stakeholder stakeholder, SectionFull section, Visibility visibility) {
|
||||||
if (this.commonService.hasEditAuthority(type, alias)) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
section.setIndicators(section.getIndicators().stream()
|
section.setIndicators(section.getIndicators().stream()
|
||||||
.map(indicator -> this.indicatorService.changeVisibility(type, alias, indicator, visibility))
|
.map(indicator -> this.indicatorService.changeVisibility(stakeholder, indicator, visibility))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
section.update(this.save(new Section(section)));
|
section.update(this.save(new Section(section)));
|
||||||
return section;
|
return section;
|
||||||
|
@ -241,4 +242,16 @@ public class SectionService {
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public SectionFull changeVisibility(Stakeholder stakeholder, SectionFull section, Visibility visibility, StakeholderService stakeholderService) {
|
||||||
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
|
section.setIndicators(section.getIndicators().stream()
|
||||||
|
.map(indicator -> this.indicatorService.changeVisibility(stakeholder, indicator, visibility, stakeholderService))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
return section;
|
||||||
|
} else {
|
||||||
|
this.commonService.unauthorized("Change section visibility: You are not authorized to update section with id: " + section.getId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -88,13 +88,13 @@ public class StakeholderService {
|
||||||
|
|
||||||
public StakeholderFull getFullStakeholder(Stakeholder stakeholder) {
|
public StakeholderFull getFullStakeholder(Stakeholder stakeholder) {
|
||||||
List<TopicFull> topics = stakeholder.getTopics().stream()
|
List<TopicFull> topics = stakeholder.getTopics().stream()
|
||||||
.map(topicId -> topicService.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topicId))
|
.map(topicId -> topicService.getFullTopic(stakeholder, topicId))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
if (!stakeholder.isCopy() && stakeholder.getDefaultId() != null) {
|
if (!stakeholder.isCopy() && stakeholder.getDefaultId() != null) {
|
||||||
Stakeholder defaultStakeholder = this.findByPath(stakeholder.getDefaultId());
|
Stakeholder defaultStakeholder = this.findByPath(stakeholder.getDefaultId());
|
||||||
if (defaultStakeholder != null) {
|
if (defaultStakeholder != null) {
|
||||||
topics = defaultStakeholder.getTopics().stream()
|
topics = defaultStakeholder.getTopics().stream()
|
||||||
.map(topicId -> topicService.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topicId))
|
.map(topicId -> topicService.getFullTopic(stakeholder, topicId))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -148,6 +148,9 @@ public class StakeholderService {
|
||||||
public Stakeholder save(Stakeholder stakeholder) {
|
public Stakeholder save(Stakeholder stakeholder) {
|
||||||
if (stakeholder.getId() != null) {
|
if (stakeholder.getId() != null) {
|
||||||
Stakeholder old = this.findByPath(stakeholder.getId());
|
Stakeholder old = this.findByPath(stakeholder.getId());
|
||||||
|
if(stakeholder.getOverrides() == null) {
|
||||||
|
stakeholder.setOverrides(old.getOverrides());
|
||||||
|
}
|
||||||
stakeholder.setUmbrella(old.getUmbrella());
|
stakeholder.setUmbrella(old.getUmbrella());
|
||||||
stakeholder.setStandalone(old.isStandalone());
|
stakeholder.setStandalone(old.isStandalone());
|
||||||
stakeholder.setDefaultId(old.getDefaultId());
|
stakeholder.setDefaultId(old.getDefaultId());
|
||||||
|
@ -162,6 +165,7 @@ public class StakeholderService {
|
||||||
if (defaultStakeholder != null) {
|
if (defaultStakeholder != null) {
|
||||||
stakeholder.setTopics(defaultStakeholder.getTopics().stream().map(this.topicService::build).collect(Collectors.toList()));
|
stakeholder.setTopics(defaultStakeholder.getTopics().stream().map(this.topicService::build).collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
stakeholder.setOverrides(new HashMap<>());
|
||||||
}
|
}
|
||||||
stakeholder.getTopics().forEach(this.topicService::find);
|
stakeholder.getTopics().forEach(this.topicService::find);
|
||||||
}
|
}
|
||||||
|
@ -224,7 +228,7 @@ public class StakeholderService {
|
||||||
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
if (propagate) {
|
if (propagate) {
|
||||||
stakeholder.setTopics(stakeholder.getTopics().stream().
|
stakeholder.setTopics(stakeholder.getTopics().stream().
|
||||||
map(topic -> this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topic, visibility, true))
|
map(topic -> this.topicService.changeVisibility(new Stakeholder(stakeholder, this), topic, visibility, true))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
stakeholder.setVisibility(visibility);
|
stakeholder.setVisibility(visibility);
|
||||||
|
|
|
@ -53,22 +53,23 @@ public class SubCategoryService {
|
||||||
return this.dao.findById(subcategoryId).orElseThrow(() -> new NotFoundException("SubCategory with id: " + subcategoryId + " not found"));
|
return this.dao.findById(subcategoryId).orElseThrow(() -> new NotFoundException("SubCategory with id: " + subcategoryId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategoryFull getFullSubCategory(String type, String alias, SubCategory subCategory) {
|
public SubCategoryFull getFullSubCategory(Stakeholder stakeholder, SubCategory subCategory) {
|
||||||
if(commonService.hasVisibilityAuthority(type, alias, subCategory)) {
|
subCategory.override(stakeholder);
|
||||||
|
if(commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), 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(stakeholder, sectionId))
|
||||||
.collect(Collectors.toList()),
|
.collect(Collectors.toList()),
|
||||||
subCategory.getCharts().stream()
|
subCategory.getCharts().stream()
|
||||||
.map(sectionId -> this.sectionService.getFullSection(type, alias, sectionId))
|
.map(sectionId -> this.sectionService.getFullSection(stakeholder, sectionId))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategoryFull getFullSubCategory(String type, String alias, String subCategoryId) {
|
public SubCategoryFull getFullSubCategory(Stakeholder stakeholder, String subCategoryId) {
|
||||||
SubCategory subCategory = this.find(subCategoryId);
|
SubCategory subCategory = this.find(subCategoryId);
|
||||||
return this.getFullSubCategory(type, alias, subCategory);
|
return this.getFullSubCategory(stakeholder, subCategory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String build(String id) {
|
public String build(String id) {
|
||||||
|
@ -122,7 +123,7 @@ public class SubCategoryService {
|
||||||
this.commonService.unauthorized("You are not authorized to create a subCategory in stakeholder with id: " + stakeholder.getId());
|
this.commonService.unauthorized("You are not authorized to create a subCategory in stakeholder with id: " + stakeholder.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory);
|
return this.getFullSubCategory(stakeholder, subCategory);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createChildren(Category defaultCategory, SubCategory subCategory) {
|
public void createChildren(Category defaultCategory, SubCategory subCategory) {
|
||||||
|
@ -150,7 +151,7 @@ public class SubCategoryService {
|
||||||
this.sectionService.reorderIndicators(stakeholder, from, moveIndicator.getFrom().getIndicators(), false);
|
this.sectionService.reorderIndicators(stakeholder, from, moveIndicator.getFrom().getIndicators(), false);
|
||||||
this.sectionService.reorderIndicators(stakeholder, to, moveIndicator.getTo().getIndicators(), false);
|
this.sectionService.reorderIndicators(stakeholder, to, moveIndicator.getTo().getIndicators(), false);
|
||||||
this.moveIndicatorChildren(stakeholder, subCategory, moveIndicator);
|
this.moveIndicatorChildren(stakeholder, subCategory, moveIndicator);
|
||||||
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory);
|
return this.getFullSubCategory(stakeholder, subCategory);
|
||||||
} else {
|
} else {
|
||||||
this.commonService.unauthorized("You are not authorized to move indicators in subCategory with id: " + subCategory.getId());
|
this.commonService.unauthorized("You are not authorized to move indicators in subCategory with id: " + subCategory.getId());
|
||||||
}
|
}
|
||||||
|
@ -160,8 +161,8 @@ public class SubCategoryService {
|
||||||
public void moveIndicatorChildren(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, MoveIndicator moveIndicator) {
|
public void moveIndicatorChildren(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, MoveIndicator moveIndicator) {
|
||||||
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
||||||
this.dao.findByDefaultId(defaultSubCategory.getId()).stream()
|
this.dao.findByDefaultId(defaultSubCategory.getId()).stream()
|
||||||
.map(subCategory -> this.getFullSubCategory(stakeholder.getType(), stakeholder. getAlias(), subCategory))
|
.map(subCategory -> this.getFullSubCategory(stakeholder, subCategory))
|
||||||
.collect(Collectors.toList()).forEach(subCategory -> {
|
.toList().forEach(subCategory -> {
|
||||||
SectionFull from = subCategory.getSectionByDefaultId(moveIndicator.getFrom().getId()).orElse(null);
|
SectionFull from = subCategory.getSectionByDefaultId(moveIndicator.getFrom().getId()).orElse(null);
|
||||||
SectionFull to = subCategory.getSectionByDefaultId(moveIndicator.getTo().getId()).orElse(null);
|
SectionFull to = subCategory.getSectionByDefaultId(moveIndicator.getTo().getId()).orElse(null);
|
||||||
if(from != null && to != null) {
|
if(from != null && to != null) {
|
||||||
|
@ -186,7 +187,7 @@ public class SubCategoryService {
|
||||||
subCategory.setNumbers(numbers);
|
subCategory.setNumbers(numbers);
|
||||||
subCategory.setUpdateDate(new Date());
|
subCategory.setUpdateDate(new Date());
|
||||||
this.reorderChildrenNumbers(stakeholder, subCategory, numbers);
|
this.reorderChildrenNumbers(stakeholder, subCategory, numbers);
|
||||||
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(subCategory));
|
return this.getFullSubCategory(stakeholder, this.dao.save(subCategory));
|
||||||
} else {
|
} else {
|
||||||
throw new NotFoundException("Some sections dont exist in the subCategory with id " + subCategory.getId());
|
throw new NotFoundException("Some sections dont exist in the subCategory with id " + subCategory.getId());
|
||||||
}
|
}
|
||||||
|
@ -202,7 +203,7 @@ public class SubCategoryService {
|
||||||
if (subCategory.getCharts().size() == charts.size() && new HashSet<>(subCategory.getCharts()).containsAll(charts)) {
|
if (subCategory.getCharts().size() == charts.size() && new HashSet<>(subCategory.getCharts()).containsAll(charts)) {
|
||||||
subCategory.setCharts(charts);
|
subCategory.setCharts(charts);
|
||||||
this.reorderChildrenCharts(stakeholder, subCategory, charts);
|
this.reorderChildrenCharts(stakeholder, subCategory, charts);
|
||||||
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(subCategory));
|
return this.getFullSubCategory(stakeholder, this.dao.save(subCategory));
|
||||||
} else {
|
} else {
|
||||||
throw new NotFoundException("Some sections dont exist in the subCategory with id " + subCategory.getId());
|
throw new NotFoundException("Some sections dont exist in the subCategory with id " + subCategory.getId());
|
||||||
}
|
}
|
||||||
|
@ -214,7 +215,7 @@ public class SubCategoryService {
|
||||||
|
|
||||||
public void reorderChildrenNumbers(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, List<String> defaultSections) {
|
public void reorderChildrenNumbers(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, List<String> defaultSections) {
|
||||||
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
||||||
this.dao.findByDefaultId(defaultSubCategory.getId()).stream().map(subCategory -> this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory)).forEach(subCategory -> {
|
this.dao.findByDefaultId(defaultSubCategory.getId()).stream().map(subCategory -> this.getFullSubCategory(stakeholder, subCategory)).forEach(subCategory -> {
|
||||||
this.reorderNumbers(stakeholder, new SubCategory(subCategory),
|
this.reorderNumbers(stakeholder, new SubCategory(subCategory),
|
||||||
this.commonService.reorder(defaultSections, subCategory.getNumbers().stream().map(section -> (Common) section).collect(Collectors.toList())));
|
this.commonService.reorder(defaultSections, subCategory.getNumbers().stream().map(section -> (Common) section).collect(Collectors.toList())));
|
||||||
});
|
});
|
||||||
|
@ -223,7 +224,7 @@ public class SubCategoryService {
|
||||||
|
|
||||||
public void reorderChildrenCharts(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, List<String> defaultSections) {
|
public void reorderChildrenCharts(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, List<String> defaultSections) {
|
||||||
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
||||||
this.dao.findByDefaultId(defaultSubCategory.getId()).stream().map(subCategory -> this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory)).forEach(subCategory -> {
|
this.dao.findByDefaultId(defaultSubCategory.getId()).stream().map(subCategory -> this.getFullSubCategory(stakeholder, subCategory)).forEach(subCategory -> {
|
||||||
this.reorderCharts(stakeholder, new SubCategory(subCategory),
|
this.reorderCharts(stakeholder, new SubCategory(subCategory),
|
||||||
this.commonService.reorder(defaultSections, subCategory.getCharts().stream().map(section -> (Common) section).collect(Collectors.toList())));
|
this.commonService.reorder(defaultSections, subCategory.getCharts().stream().map(section -> (Common) section).collect(Collectors.toList())));
|
||||||
});
|
});
|
||||||
|
@ -270,15 +271,15 @@ public class SubCategoryService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategoryFull changeVisibility(String type, String alias, SubCategoryFull subCategory, Visibility visibility, Boolean propagate) {
|
public SubCategoryFull changeVisibility(Stakeholder stakeholder, SubCategoryFull subCategory, Visibility visibility, Boolean propagate) {
|
||||||
if(this.commonService.hasEditAuthority(type, alias)) {
|
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
subCategory.setVisibility(visibility);
|
subCategory.setVisibility(visibility);
|
||||||
if(propagate) {
|
if(propagate) {
|
||||||
subCategory.setNumbers(subCategory.getNumbers().stream()
|
subCategory.setNumbers(subCategory.getNumbers().stream()
|
||||||
.map(section -> this.sectionService.changeVisibility(type, alias, section, visibility))
|
.map(section -> this.sectionService.changeVisibility(stakeholder, section, visibility))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
subCategory.setCharts(subCategory.getCharts().stream()
|
subCategory.setCharts(subCategory.getCharts().stream()
|
||||||
.map(section -> this.sectionService.changeVisibility(type, alias, section, visibility))
|
.map(section -> this.sectionService.changeVisibility(stakeholder, section, visibility))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
subCategory.update(this.save(new SubCategory(subCategory)));
|
subCategory.update(this.save(new SubCategory(subCategory)));
|
||||||
|
@ -289,8 +290,33 @@ public class SubCategoryService {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SubCategoryFull changeVisibility(String type, String alias, SubCategory subCategory, Visibility visibility, Boolean propagate) {
|
public SubCategoryFull changeVisibility(Stakeholder stakeholder, SubCategory subCategory, Visibility visibility, Boolean propagate) {
|
||||||
SubCategoryFull subCategoryFull = this.getFullSubCategory(type, alias, subCategory);
|
SubCategoryFull subCategoryFull = this.getFullSubCategory(stakeholder, subCategory);
|
||||||
return this.changeVisibility(type, alias, subCategoryFull, visibility, propagate);
|
return this.changeVisibility(stakeholder, subCategoryFull, visibility, propagate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public SubCategoryFull changeVisibility(Stakeholder stakeholder, SubCategoryFull subCategory, Visibility visibility, Boolean propagate, StakeholderService stakeholderService) {
|
||||||
|
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
|
subCategory.setVisibility(visibility);
|
||||||
|
stakeholder.setOverride(subCategory.getId(), "visibility", visibility);
|
||||||
|
Stakeholder saved = stakeholderService.save(stakeholder);
|
||||||
|
if(propagate) {
|
||||||
|
subCategory.setNumbers(subCategory.getNumbers().stream()
|
||||||
|
.map(section -> this.sectionService.changeVisibility(saved, section, visibility, stakeholderService))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
subCategory.setCharts(subCategory.getCharts().stream()
|
||||||
|
.map(section -> this.sectionService.changeVisibility(saved, section, visibility, stakeholderService))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
return subCategory;
|
||||||
|
} else {
|
||||||
|
this.commonService.unauthorized("Change subCategory visibility: You are not authorized to update subCategory with id: " + subCategory.getId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public SubCategoryFull changeVisibility(Stakeholder stakeholder, SubCategory subCategory, Visibility visibility, Boolean propagate, StakeholderService stakeholderService) {
|
||||||
|
SubCategoryFull subCategoryFull = this.getFullSubCategory(stakeholder, subCategory);
|
||||||
|
return this.changeVisibility(stakeholder, subCategoryFull, visibility, propagate, stakeholderService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -45,19 +45,20 @@ public class TopicService {
|
||||||
return this.dao.findById(topicId).orElseThrow(() -> new NotFoundException("Topic with id: " + topicId + " not found"));
|
return this.dao.findById(topicId).orElseThrow(() -> new NotFoundException("Topic with id: " + topicId + " not found"));
|
||||||
}
|
}
|
||||||
|
|
||||||
public TopicFull getFullTopic(String type, String alias, Topic topic) {
|
public TopicFull getFullTopic(Stakeholder stakeholder, Topic topic) {
|
||||||
if (commonService.hasVisibilityAuthority(type, alias, topic)) {
|
topic.override(stakeholder);
|
||||||
|
if (commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), 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(stakeholder, categoryId))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
} else {
|
} else {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public TopicFull getFullTopic(String type, String alias, String id) {
|
public TopicFull getFullTopic(Stakeholder stakeholder, String id) {
|
||||||
Topic topic = this.find(id);
|
Topic topic = this.find(id);
|
||||||
return this.getFullTopic(type, alias, topic);
|
return this.getFullTopic(stakeholder, topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
public String build(String id) {
|
public String build(String id) {
|
||||||
|
@ -104,7 +105,7 @@ public class TopicService {
|
||||||
this.commonService.unauthorized("You are not authorized to create a topic in stakeholder with id: " + stakeholder.getId());
|
this.commonService.unauthorized("You are not authorized to create a topic in stakeholder with id: " + stakeholder.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return this.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topic);
|
return this.getFullTopic(stakeholder, topic);
|
||||||
}
|
}
|
||||||
|
|
||||||
public void createChildren(Stakeholder defaultStakeholder, Topic topic) {
|
public void createChildren(Stakeholder defaultStakeholder, Topic topic) {
|
||||||
|
@ -126,7 +127,7 @@ public class TopicService {
|
||||||
topic.setCategories(categories);
|
topic.setCategories(categories);
|
||||||
this.reorderChildren(stakeholder, topic, categories);
|
this.reorderChildren(stakeholder, topic, categories);
|
||||||
topic.setUpdateDate(new Date());
|
topic.setUpdateDate(new Date());
|
||||||
return this.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(topic));
|
return this.getFullTopic(stakeholder, this.dao.save(topic));
|
||||||
} else {
|
} else {
|
||||||
throw new NotFoundException("Some categories dont exist in the topic with id " + topic.getId());
|
throw new NotFoundException("Some categories dont exist in the topic with id " + topic.getId());
|
||||||
}
|
}
|
||||||
|
@ -138,7 +139,7 @@ public class TopicService {
|
||||||
|
|
||||||
public void reorderChildren(Stakeholder defaultStakeholder, Topic defaultTopic, List<String> defaultCategories) {
|
public void reorderChildren(Stakeholder defaultStakeholder, Topic defaultTopic, List<String> defaultCategories) {
|
||||||
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
this.stakeholderDAO.findByDefaultIdAndCopyIsTrue(defaultStakeholder.getId()).forEach(stakeholder -> {
|
||||||
this.dao.findByDefaultId(defaultTopic.getId()).stream().map(topic -> this.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topic)).forEach(topic -> {
|
this.dao.findByDefaultId(defaultTopic.getId()).stream().map(topic -> this.getFullTopic(stakeholder, topic)).forEach(topic -> {
|
||||||
this.reorderCategories(stakeholder, new Topic(topic),
|
this.reorderCategories(stakeholder, new Topic(topic),
|
||||||
this.commonService.reorder(defaultCategories, topic.getCategories().stream().map(category -> (Common) category).collect(Collectors.toList())));
|
this.commonService.reorder(defaultCategories, topic.getCategories().stream().map(category -> (Common) category).collect(Collectors.toList())));
|
||||||
});
|
});
|
||||||
|
@ -181,12 +182,12 @@ public class TopicService {
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public TopicFull changeVisibility(String type, String alias, TopicFull topic, Visibility visibility, Boolean propagate) {
|
public TopicFull changeVisibility(Stakeholder stakeholder, TopicFull topic, Visibility visibility, Boolean propagate) {
|
||||||
if (this.commonService.hasEditAuthority(type, alias)) {
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
topic.setVisibility(visibility);
|
topic.setVisibility(visibility);
|
||||||
if (propagate) {
|
if (propagate) {
|
||||||
topic.setCategories(topic.getCategories().stream()
|
topic.setCategories(topic.getCategories().stream()
|
||||||
.map(category -> this.categoryService.changeVisibility(type, alias, category, visibility, true))
|
.map(category -> this.categoryService.changeVisibility(stakeholder, category, visibility, true))
|
||||||
.collect(Collectors.toList()));
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
topic.update(this.save(new Topic(topic)));
|
topic.update(this.save(new Topic(topic)));
|
||||||
|
@ -197,8 +198,30 @@ public class TopicService {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
public TopicFull changeVisibility(String type, String alias, Topic topic, Visibility visibility, Boolean propagate) {
|
public TopicFull changeVisibility(Stakeholder stakeholder, Topic topic, Visibility visibility, Boolean propagate) {
|
||||||
TopicFull topicFull = this.getFullTopic(type, alias, topic);
|
TopicFull topicFull = this.getFullTopic(stakeholder, topic);
|
||||||
return this.changeVisibility(type, alias, topicFull, visibility, propagate);
|
return this.changeVisibility(stakeholder, topicFull, visibility, propagate);
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopicFull changeVisibility(Stakeholder stakeholder, TopicFull topic, Visibility visibility, Boolean propagate, StakeholderService stakeholderService) {
|
||||||
|
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
|
||||||
|
topic.setVisibility(visibility);
|
||||||
|
stakeholder.setOverride(topic.getId(), "visibility", visibility);
|
||||||
|
Stakeholder saved = stakeholderService.save(stakeholder);
|
||||||
|
if (propagate) {
|
||||||
|
topic.setCategories(topic.getCategories().stream()
|
||||||
|
.map(category -> this.categoryService.changeVisibility(saved, category, visibility, true, stakeholderService))
|
||||||
|
.collect(Collectors.toList()));
|
||||||
|
}
|
||||||
|
return topic;
|
||||||
|
} else {
|
||||||
|
this.commonService.unauthorized("Change topic visibility: You are not authorized to update topic with id: " + topic.getId());
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopicFull changeVisibility(Stakeholder stakeholder, Topic topic, Visibility visibility, Boolean propagate, StakeholderService stakeholderService) {
|
||||||
|
TopicFull topicFull = this.getFullTopic(stakeholder, topic);
|
||||||
|
return this.changeVisibility(stakeholder, topicFull, visibility, propagate, stakeholderService);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,59 @@
|
||||||
|
package eu.dnetlib.uoamonitorservice.utils;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
|
||||||
|
public class GenericAccessor {
|
||||||
|
|
||||||
|
public static <T> void setField(Object obj, String fieldName, T value) {
|
||||||
|
try {
|
||||||
|
Field field = findField(obj.getClass(), fieldName);
|
||||||
|
field.setAccessible(true); // Allows access to private fields
|
||||||
|
if (field.getType().isEnum()) {
|
||||||
|
if (value instanceof String stringValue) {
|
||||||
|
Enum<?> enumValue = getEnumValue(field.getType(), stringValue);
|
||||||
|
field.set(obj, enumValue);
|
||||||
|
} else if (field.getType().isAssignableFrom(value.getClass())) {
|
||||||
|
// Directly assign if types match
|
||||||
|
field.set(obj, value);
|
||||||
|
} else {
|
||||||
|
throw new IllegalArgumentException("Incompatible types: cannot assign " + value.getClass().getName() +
|
||||||
|
" to " + field.getType().getName());
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Handle other field types normally
|
||||||
|
field.set(obj, value);
|
||||||
|
}
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
System.err.println("Error setting field: " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Object getField(Object obj, String fieldName) {
|
||||||
|
try {
|
||||||
|
Field field = findField(obj.getClass(), fieldName); // Updated to search in superclasses
|
||||||
|
field.setAccessible(true); // Allows access to private fields
|
||||||
|
return field.get(obj);
|
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) {
|
||||||
|
System.err.println("Error getting field: " + e.getMessage());
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Field findField(Class<?> clazz, String fieldName) throws NoSuchFieldException {
|
||||||
|
Class<?> currentClass = clazz;
|
||||||
|
while (currentClass != null) {
|
||||||
|
try {
|
||||||
|
return currentClass.getDeclaredField(fieldName);
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
currentClass = currentClass.getSuperclass();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new NoSuchFieldException("Field '" + fieldName + "' not found in class hierarchy of " + clazz.getName());
|
||||||
|
}
|
||||||
|
|
||||||
|
// Safely get the Enum value using generics
|
||||||
|
@SuppressWarnings("unchecked")
|
||||||
|
private static <E extends Enum<E>> E getEnumValue(Class<?> enumClass, String value) {
|
||||||
|
return Enum.valueOf((Class<E>) enumClass, value);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue