[Trunk | Monitor Service]:

1. Adding parameter in delete methods to delete or disconnect all profiles based on the default one that is being deleted (not for stakeholder).
	2. In delete methods remove iterations (for deleting inner elements) and call "deleteTree()" method.
This commit is contained in:
Konstantina Galouni 2020-06-22 19:58:40 +00:00
parent ff38145b25
commit 0f929b581d
6 changed files with 617 additions and 176 deletions

View File

@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
@RestController @RestController
@ -183,7 +184,8 @@ public class CategoryController {
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/delete", method = RequestMethod.DELETE) @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/delete", method = RequestMethod.DELETE)
public boolean deleteCategory(@PathVariable("stakeholderId") String stakeholderId, public boolean deleteCategory(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId, @PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId) { @PathVariable("categoryId") String categoryId,
@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);
@ -201,43 +203,50 @@ public class CategoryController {
List<String> categories = topic.getCategories(); List<String> categories = topic.getCategories();
int index = categories.indexOf(categoryId); int index = categories.indexOf(categoryId);
if(index != -1) { if(index != -1) {
for(String subCategoryId : category.getSubCategories()) { // this category belongs in default profile
SubCategory<String> subcategory = subCategoryDAO.findById(subCategoryId); if(topic.getDefaultId() == null && children != null) {
if(subcategory == null) { onDeleteDefaultCategory(categoryId, topicId, children);
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Delete category: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+categoryId+")");
}
for(String chartSectionId : subcategory.getCharts()) {
Section<String> chartSection = sectionDAO.findById(chartSectionId);
if (chartSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete topic: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
}
for (String chartId : chartSection.getIndicators()) {
indicatorDAO.delete(chartId);
}
subcategory.setCharts(null);
sectionDAO.delete(chartSectionId);
}
for(String numberSectionId : subcategory.getNumbers()) {
Section<String> numberSection = sectionDAO.findById(numberSectionId);
if (numberSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete topic: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
}
for (String numberId : numberSection.getIndicators()) {
indicatorDAO.delete(numberId);
}
subcategory.setNumbers(null);
sectionDAO.delete(numberSectionId);
}
subCategoryDAO.delete(subCategoryId);
} }
// for(String subCategoryId : category.getSubCategories()) {
// SubCategory<String> subcategory = subCategoryDAO.findById(subCategoryId);
// if(subcategory == null) {
// // EXCEPTION - SubCategory not found
// throw new EntityNotFoundException("Delete category: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+categoryId+")");
// }
//
// for(String chartSectionId : subcategory.getCharts()) {
// Section<String> chartSection = sectionDAO.findById(chartSectionId);
// if (chartSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete topic: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
// }
//
// for (String chartId : chartSection.getIndicators()) {
// indicatorDAO.delete(chartId);
// }
// subcategory.setCharts(null);
// sectionDAO.delete(chartSectionId);
// }
//
// for(String numberSectionId : subcategory.getNumbers()) {
// Section<String> numberSection = sectionDAO.findById(numberSectionId);
// if (numberSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete topic: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
// }
//
// for (String numberId : numberSection.getIndicators()) {
// indicatorDAO.delete(numberId);
// }
// subcategory.setNumbers(null);
// sectionDAO.delete(numberSectionId);
// }
//
// subCategoryDAO.delete(subCategoryId);
// }
subCategoryController.deleteTree(category);
category.setSubCategories(null); category.setSubCategories(null);
categories.remove(index); categories.remove(index);
@ -269,6 +278,48 @@ public class CategoryController {
return true; return true;
} }
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;
}
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/toggle-status", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/toggle-status", method = RequestMethod.POST)
public Boolean toggleCategoryStatus(@PathVariable("stakeholderId") String stakeholderId, public Boolean toggleCategoryStatus(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId, @PathVariable("topicId") String topicId,
@ -335,4 +386,35 @@ public class CategoryController {
throw new EntityNotFoundException("Toggle category: Stakeholder with id: "+stakeholderId+" not found"); throw new EntityNotFoundException("Toggle category: Stakeholder with id: "+stakeholderId+" not found");
} }
} }
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);
}
}
} }

View File

@ -11,10 +11,7 @@ import org.springframework.web.bind.annotation.*;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.net.URLEncoder; import java.net.URLEncoder;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@RestController @RestController
@CrossOrigin(origins = "*") @CrossOrigin(origins = "*")
@ -146,9 +143,6 @@ public class IndicatorController {
// Check if there are changes in indicator path and update existing indicators if needed // Check if there are changes in indicator path and update existing indicators if needed
log.debug("update indicator path: "+i); log.debug("update indicator path: "+i);
log.debug("indicatorPath.getType(): "+indicatorPath.getType());
log.debug("indicatorPathBasedOnDefault.getType(): "+indicatorPathBasedOnDefault.getType());
log.debug("oldIndicatorPath.getType(): "+oldIndicatorPath.getType());
if(indicatorPath.getType() != null if(indicatorPath.getType() != null
&& !indicatorPath.getType().equals(indicatorPathBasedOnDefault.getType()) && !indicatorPath.getType().equals(indicatorPathBasedOnDefault.getType())
@ -311,7 +305,8 @@ public class IndicatorController {
@PathVariable("categoryId") String categoryId, @PathVariable("categoryId") String categoryId,
@PathVariable("subcategoryId") String subcategoryId, @PathVariable("subcategoryId") String subcategoryId,
@PathVariable("sectionId") String sectionId, @PathVariable("sectionId") String sectionId,
@PathVariable("indicatorId") String indicatorId) { @PathVariable("indicatorId") String indicatorId,
@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);
@ -323,6 +318,13 @@ public class IndicatorController {
int index = indicators.indexOf(indicatorId); int index = indicators.indexOf(indicatorId);
if (index != -1) { if (index != -1) {
// this indicator belongs in default profile
if(section.getDefaultId() == null && children != null) {
onDeleteDefaultIndicator(indicatorId, sectionId, children);
}
indicators.remove(index); indicators.remove(index);
sectionDAO.save(section); sectionDAO.save(section);
@ -339,6 +341,76 @@ public class IndicatorController {
return true; return true;
} }
public boolean onDeleteDefaultIndicator(String defaultIndicatorId, String defaultSectionId, String children) {
if(children.equals("delete")) {
// // 1st way
// List<Section> sections = sectionDAO.findByDefaultId(defaultSectionId);
//
// for(Section section : sections) {
// List<String> indicators = section.getIndicators();
//
// Iterator<String> indicatorsIterator = indicators.iterator();
// while(indicatorsIterator.hasNext()) {
// String indicatorId = indicatorsIterator.next();
//
// Indicator indicator = indicatorDAO.findById(indicatorId);
// if (indicator.getDefaultId().equals(defaultIndicatorId)) {
// indicatorsIterator.remove();
// sectionDAO.save(section);
//
// indicatorDAO.delete(indicatorId);
// log.debug("Indicator deleted!");
//
// break;
// }
// }
// }
// 2nd way
List<Section> sections = sectionDAO.findByDefaultId(defaultSectionId);
List<Indicator> indicators = indicatorDAO.findByDefaultId(defaultIndicatorId);
for(Section section : sections) {
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;
}
}
}
// // 3rd way - parentId
// List<Indicator> indicators = indicatorDAO.findByDefaultId(defaultIndicatorId);
// for(Indicator indicator : indicators) {
// Section section = sectionDAO.findById(indicator.getParent());
// List<String> sectionIndicators = section.getIndicators();
//
// sectionIndicators.remove(indicator.getId());
// sectionDAO.save(section);
//
// indicatorDAO.delete(indicator.getId());
// log.debug("Indicator deleted!");
// }
} 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;
}
// @RequestMapping(value = "/{stakeholderId}/charts/delete", method = RequestMethod.DELETE) // @RequestMapping(value = "/{stakeholderId}/charts/delete", method = RequestMethod.DELETE)
// public boolean deleteAllChartIndicators(@PathVariable("stakeholderId") String stakeholderId) { // public boolean deleteAllChartIndicators(@PathVariable("stakeholderId") String stakeholderId) {
// log.debug("delete all chart indicators of stakeholder"); // log.debug("delete all chart indicators of stakeholder");
@ -557,4 +629,20 @@ public class IndicatorController {
return section; 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);
}
}
} }

View File

@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
@RestController @RestController
@ -34,6 +35,9 @@ public class SectionController {
@Autowired @Autowired
private IndicatorDAO indicatorDAO; private IndicatorDAO indicatorDAO;
@Autowired
private IndicatorController indicatorController;
public Section<Indicator> buildSection(Section<Indicator> sectionFull) { public Section<Indicator> buildSection(Section<Indicator> sectionFull) {
Section<String> section = new Section<>(sectionFull); Section<String> section = new Section<>(sectionFull);
@ -176,10 +180,11 @@ public class SectionController {
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/delete", method = RequestMethod.DELETE) @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/delete", method = RequestMethod.DELETE)
public boolean deleteSection(@PathVariable("stakeholderId") String stakeholderId, public boolean deleteSection(@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("sectionId") String sectionId) { @PathVariable("sectionId") String sectionId,
@RequestParam(required = false) String children) {
log.debug("delete section"); log.debug("delete section");
log.debug("Id: "+sectionId + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId); log.debug("Id: "+sectionId + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
@ -187,15 +192,25 @@ public class SectionController {
if(section != null) { if(section != null) {
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId); SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
String type = "";
List<String> sections = null; List<String> sections = null;
if (section.getType().equals("chart")) { if (section.getType().equals("chart")) {
sections = subCategory.getCharts(); sections = subCategory.getCharts();
type = "chart";
} else if (section.getType().equals("number")) { } else if (section.getType().equals("number")) {
sections = subCategory.getNumbers(); sections = subCategory.getNumbers();
type = "number";
} }
int index = sections.indexOf(sectionId); int index = sections.indexOf(sectionId);
if (index != -1) { if (index != -1) {
// this section belongs in default profile
if(subCategory.getDefaultId() == null && children != null) {
onDeleteDefaultSection(sectionId, subcategoryId, children, type);
}
indicatorController.deleteTree(section);
sections.remove(index); sections.remove(index);
subCategoryDAO.save(subCategory); subCategoryDAO.save(subCategory);
@ -212,6 +227,52 @@ public class SectionController {
return true; return true;
} }
public boolean onDeleteDefaultSection(String defaultSectionId, String defaultSubCategoryId, String children, String type) {
if(children.equals("delete")) {
List<SubCategory> subCategories = subCategoryDAO.findByDefaultId(defaultSubCategoryId);
List<Section> sections = sectionDAO.findByDefaultId(defaultSectionId);
for(SubCategory subCategory : subCategories) {
Iterator<Section> sectionsIterator = sections.iterator();
while(sectionsIterator.hasNext()) {
Section section = sectionsIterator.next();
String sectionId = section.getId();
List<String> subCategorySections = null;
if(type.equals("chart")) {
subCategorySections = subCategory.getCharts();
} else if(type.equals("number")) {
subCategorySections = subCategory.getNumbers();
}
if(subCategorySections != null && subCategorySections.contains(sectionId)) {
sectionsIterator.remove();
subCategorySections.remove(sectionId);
subCategoryDAO.save(subCategory);
indicatorController.deleteTree(section);
sectionDAO.delete(sectionId);
log.debug("Section with id: "+sectionId+" deleted!");
break;
}
}
}
} else if(children.equals("disconnect")) {
List<Section> sections = sectionDAO.findByDefaultId(defaultSectionId);
for(Section section : sections) {
indicatorController.disConnectTree(section);
section.setDefaultId(null);
sectionDAO.save(section);
log.debug("DefaultId for Section with id: "+section.getId()+" empty!");
}
}
return true;
}
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{type}/reorder", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{type}/reorder", method = RequestMethod.POST)
public List<Section> reorderSections(@PathVariable("stakeholderId") String stakeholderId, public List<Section> reorderSections(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId, @PathVariable("topicId") String topicId,
@ -346,4 +407,62 @@ public class SectionController {
return subcategory; 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);
sectionDAO.delete(sectionId);
}
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);
sectionDAO.delete(sectionId);
}
}
public void disConnectTree(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 disconnect tree: Chart Section with id: "+sectionId+" not found (section exists in subCategory: "+subCategory.getId()+")");
}
indicatorController.disConnectTree(section);
section.setDefaultId(null);
sectionDAO.save(section);
}
sections = subCategory.getNumbers();
for(String sectionId : sections) {
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);
section.setDefaultId(null);
sectionDAO.save(section);
}
}
} }

View File

@ -293,63 +293,66 @@ public class StakeholderController {
if(stakeholder != null) { if(stakeholder != null) {
for(String topicId : stakeholder.getTopics()) { // for(String topicId : stakeholder.getTopics()) {
Topic<String> topic = topicDAO.findById(topicId); // Topic<String> topic = topicDAO.findById(topicId);
if (topic == null) { // if (topic == null) {
// EXCEPTION - Topic not found // // EXCEPTION - Topic not found
throw new EntityNotFoundException("Delete stakeholder: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholderId+")"); // throw new EntityNotFoundException("Delete stakeholder: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholderId+")");
} // }
//
// for (String categoryId : topic.getCategories()) {
// Category<String> category = categoryDAO.findById(categoryId);
// if (category == null) {
// // EXCEPTION - Category not found
// throw new EntityNotFoundException("Delete stakeholder: Category with id: "+categoryId+" not found (category exists in topic: "+topicId+")");
// }
//
// for (String subCategoryId : category.getSubCategories()) {
// SubCategory<String> subcategory = subCategoryDAO.findById(subCategoryId);
// if (subcategory == null) {
// // EXCEPTION - SubCategory not found
// throw new EntityNotFoundException("Delete stakeholder: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+categoryId+")");
// }
//
// for(String chartSectionId : subcategory.getCharts()) {
// Section<String> chartSection = sectionDAO.findById(chartSectionId);
// if (chartSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete topic: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
// }
//
// for (String chartId : chartSection.getIndicators()) {
// indicatorDAO.delete(chartId);
// }
// subcategory.setCharts(null);
// sectionDAO.delete(chartSectionId);
// }
//
// for(String numberSectionId : subcategory.getNumbers()) {
// Section<String> numberSection = sectionDAO.findById(numberSectionId);
// if (numberSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete topic: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
// }
//
// for (String numberId : numberSection.getIndicators()) {
// indicatorDAO.delete(numberId);
// }
// subcategory.setNumbers(null);
// sectionDAO.delete(numberSectionId);
// }
//
// subCategoryDAO.delete(subCategoryId);
// }
// category.setSubCategories(null);
// categoryDAO.delete(categoryId);
// }
// topic.setCategories(null);
// topicDAO.delete(topicId);
// }
for (String categoryId : topic.getCategories()) { topicController.deleteTree(stakeholder);
Category<String> category = categoryDAO.findById(categoryId);
if (category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Delete stakeholder: Category with id: "+categoryId+" not found (category exists in topic: "+topicId+")");
}
for (String subCategoryId : category.getSubCategories()) {
SubCategory<String> subcategory = subCategoryDAO.findById(subCategoryId);
if (subcategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Delete stakeholder: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+categoryId+")");
}
for(String chartSectionId : subcategory.getCharts()) {
Section<String> chartSection = sectionDAO.findById(chartSectionId);
if (chartSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete topic: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
}
for (String chartId : chartSection.getIndicators()) {
indicatorDAO.delete(chartId);
}
subcategory.setCharts(null);
sectionDAO.delete(chartSectionId);
}
for(String numberSectionId : subcategory.getNumbers()) {
Section<String> numberSection = sectionDAO.findById(numberSectionId);
if (numberSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete topic: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
}
for (String numberId : numberSection.getIndicators()) {
indicatorDAO.delete(numberId);
}
subcategory.setNumbers(null);
sectionDAO.delete(numberSectionId);
}
subCategoryDAO.delete(subCategoryId);
}
category.setSubCategories(null);
categoryDAO.delete(categoryId);
}
topic.setCategories(null);
topicDAO.delete(topicId);
}
stakeholder.setTopics(null); stakeholder.setTopics(null);
stakeholderDAO.delete(stakeholderId); stakeholderDAO.delete(stakeholderId);
log.debug("Stakeholder deleted!"); log.debug("Stakeholder deleted!");

View File

@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
@RestController @RestController
@ -188,7 +189,8 @@ public class SubCategoryController {
public boolean deleteSubCategory(@PathVariable("stakeholderId") String stakeholderId, public 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) 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);
@ -199,33 +201,43 @@ public class SubCategoryController {
List<String> subcategories = category.getSubCategories(); List<String> subcategories = category.getSubCategories();
int index = subcategories.indexOf(subcategoryId); int index = subcategories.indexOf(subcategoryId);
if(index != -1) { if(index != -1) {
for(String chartSectionId : subcategory.getCharts()) { // this subCategory belongs in default profile
Section<String> chartSection = sectionDAO.findById(chartSectionId); if(category.getDefaultId() == null && children != null) {
if (chartSection == null) { onDeleteDefaultSubCategory(subcategoryId, categoryId, children);
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete SubCategory: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subcategoryId+")");
}
for (String chartId : chartSection.getIndicators()) {
indicatorDAO.delete(chartId);
}
subcategory.setCharts(null);
sectionDAO.delete(chartSectionId);
} }
for(String numberSectionId : subcategory.getNumbers()) { // for(String chartSectionId : subcategory.getCharts()) {
Section<String> numberSection = sectionDAO.findById(numberSectionId); // Section<String> chartSection = sectionDAO.findById(chartSectionId);
if (numberSection == null) { // if (chartSection == null) {
// EXCEPTION - Section not found // // EXCEPTION - Section not found
throw new EntityNotFoundException("Delete SubCategory: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subcategoryId+")"); // throw new EntityNotFoundException("Delete SubCategory: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subcategoryId+")");
} // }
//
// for (String chartId : chartSection.getIndicators()) {
// indicatorDAO.delete(chartId);
// }
// subcategory.setCharts(null);
// sectionDAO.delete(chartSectionId);
// }
//
// for(String numberSectionId : subcategory.getNumbers()) {
// Section<String> numberSection = sectionDAO.findById(numberSectionId);
// if (numberSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete SubCategory: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subcategoryId+")");
// }
//
// for (String numberId : numberSection.getIndicators()) {
// indicatorDAO.delete(numberId);
// }
// subcategory.setNumbers(null);
// sectionDAO.delete(numberSectionId);
// }
for (String numberId : numberSection.getIndicators()) { sectionController.deleteTree(subcategory);
indicatorDAO.delete(numberId);
} subcategory.setCharts(null);
subcategory.setNumbers(null); subcategory.setNumbers(null);
sectionDAO.delete(numberSectionId);
}
subcategories.remove(index); subcategories.remove(index);
categoryDAO.save(category); categoryDAO.save(category);
@ -244,6 +256,47 @@ public class SubCategoryController {
return true; return true;
} }
public boolean onDeleteDefaultSubCategory(String defaultSubCategoryId, String defaultCategoryId, String children) {
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;
}
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/toggle-status", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/toggle-status", method = RequestMethod.POST)
public Boolean toggleSubCategoryStatus(@PathVariable("stakeholderId") String stakeholderId, public Boolean toggleSubCategoryStatus(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId, @PathVariable("topicId") String topicId,
@ -342,4 +395,34 @@ public class SubCategoryController {
return category; 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);
}
}
} }

View File

@ -9,6 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
@RestController @RestController
@ -162,7 +163,8 @@ public class TopicController {
@RequestMapping(value = "/{stakeholderId}/{topicId}/delete", method = RequestMethod.DELETE) @RequestMapping(value = "/{stakeholderId}/{topicId}/delete", method = RequestMethod.DELETE)
public boolean deleteTopic(@PathVariable("stakeholderId") String stakeholderId, public boolean deleteTopic(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId) { @PathVariable("topicId") String topicId,
@RequestParam(required = false) String children) {
log.debug("delete topic"); log.debug("delete topic");
log.debug("Id: "+topicId + " - Stakeholder: "+stakeholderId); log.debug("Id: "+topicId + " - Stakeholder: "+stakeholderId);
@ -176,53 +178,60 @@ public class TopicController {
List<String> topics = stakeholder.getTopics(); List<String> topics = stakeholder.getTopics();
int index = topics.indexOf(topicId); int index = topics.indexOf(topicId);
if(index != -1) { if(index != -1) {
for(String categoryId : topic.getCategories()) { // this topic belongs in default profile
Category<String> category = categoryDAO.findById(categoryId); if(stakeholder.getDefaultId() == null && children != null) {
if(category == null) { onDeleteDefaultTopic(topicId, stakeholderId, children);
// EXCEPTION - Category not found
throw new EntityNotFoundException("Delete topic: Category with id: "+categoryId+" not found (category exists in topic: "+topicId+")");
}
for(String subCategoryId : category.getSubCategories()) {
SubCategory<String> subcategory = subCategoryDAO.findById(subCategoryId);
if (subcategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Delete topic: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+categoryId+")");
}
for(String chartSectionId : subcategory.getCharts()) {
Section<String> chartSection = sectionDAO.findById(chartSectionId);
if (chartSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete topic: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
}
for (String chartId : chartSection.getIndicators()) {
indicatorDAO.delete(chartId);
}
subcategory.setCharts(null);
sectionDAO.delete(chartSectionId);
}
for(String numberSectionId : subcategory.getNumbers()) {
Section<String> numberSection = sectionDAO.findById(numberSectionId);
if (numberSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete topic: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
}
for (String numberId : numberSection.getIndicators()) {
indicatorDAO.delete(numberId);
}
subcategory.setNumbers(null);
sectionDAO.delete(numberSectionId);
}
subCategoryDAO.delete(subCategoryId);
}
category.setSubCategories(null);
categoryDAO.delete(categoryId);
} }
// for(String categoryId : topic.getCategories()) {
// Category<String> category = categoryDAO.findById(categoryId);
// if(category == null) {
// // EXCEPTION - Category not found
// throw new EntityNotFoundException("Delete topic: Category with id: "+categoryId+" not found (category exists in topic: "+topicId+")");
// }
//
// for(String subCategoryId : category.getSubCategories()) {
// SubCategory<String> subcategory = subCategoryDAO.findById(subCategoryId);
// if (subcategory == null) {
// // EXCEPTION - SubCategory not found
// throw new EntityNotFoundException("Delete topic: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+categoryId+")");
// }
//
// for(String chartSectionId : subcategory.getCharts()) {
// Section<String> chartSection = sectionDAO.findById(chartSectionId);
// if (chartSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete topic: Section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
// }
//
// for (String chartId : chartSection.getIndicators()) {
// indicatorDAO.delete(chartId);
// }
// subcategory.setCharts(null);
// sectionDAO.delete(chartSectionId);
// }
//
// for(String numberSectionId : subcategory.getNumbers()) {
// Section<String> numberSection = sectionDAO.findById(numberSectionId);
// if (numberSection == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Delete topic: Section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategoryId+")");
// }
//
// for (String numberId : numberSection.getIndicators()) {
// indicatorDAO.delete(numberId);
// }
// subcategory.setNumbers(null);
// sectionDAO.delete(numberSectionId);
// }
//
// subCategoryDAO.delete(subCategoryId);
// }
// category.setSubCategories(null);
// categoryDAO.delete(categoryId);
// }
categoryController.deleteTree(topic);
topic.setCategories(null); topic.setCategories(null);
topics.remove(index); topics.remove(index);
@ -246,6 +255,48 @@ public class TopicController {
return true; return true;
} }
public boolean onDeleteDefaultTopic(String defaultTopicId, String defaultStakeholderId, String children) {
if(children.equals("delete")) {
List<Stakeholder> stakeholders = stakeholderDAO.findByDefaultId(defaultStakeholderId);
List<Topic> topics = topicDAO.findByDefaultId(defaultTopicId);
for(Stakeholder stakeholder : stakeholders) {
Iterator<Topic> topicsIterator = topics.iterator();
while(topicsIterator.hasNext()) {
Topic topic = topicsIterator.next();
String topicId = topic.getId();
if(stakeholder.getTopics() != null && stakeholder.getTopics().contains(topicId)) {
topicsIterator.remove();
stakeholder.getTopics().remove(topicId);
stakeholderDAO.save(stakeholder);
categoryController.deleteTree(topic);
topicDAO.delete(topicId);
log.debug("Topic with id: "+topicId+" deleted!");
break;
}
}
}
} else if(children.equals("disconnect")) {
List<Topic> topics = topicDAO.findByDefaultId(defaultTopicId);
for(Topic topic : topics) {
categoryController.disConnectTree(topic);
topic.setDefaultId(null);
topicDAO.save(topic);
log.debug("DefaultId for Topic with id: "+topic.getId()+" empty!");
}
}
return true;
}
@RequestMapping(value = "/{stakeholderId}/{topicId}/toggle-status", method = RequestMethod.POST) @RequestMapping(value = "/{stakeholderId}/{topicId}/toggle-status", method = RequestMethod.POST)
public Boolean toggleTopicStatus(@PathVariable("stakeholderId") String stakeholderId, public Boolean toggleTopicStatus(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId) { @PathVariable("topicId") String topicId) {
@ -298,4 +349,19 @@ public class TopicController {
throw new EntityNotFoundException("Toggle topic: Stakeholder with id: "+stakeholderId+" not found"); throw new EntityNotFoundException("Toggle topic: Stakeholder with id: "+stakeholderId+" not found");
} }
} }
public void deleteTree(Stakeholder stakeholder) {
List<String> topics = stakeholder.getTopics();
for(String topicId : topics) {
Topic topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Topic delete tree: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholder.getId()+")");
}
categoryController.deleteTree(topic);
topicDAO.delete(topicId);
}
}
} }