From 26f7388680e2002e10746ea3fddb5a4fc1971c99 Mon Sep 17 00:00:00 2001 From: "konstantina.galouni" Date: Fri, 22 Nov 2019 15:50:59 +0000 Subject: [PATCH] 1. Schema changes: Move each entity on its own collection - each entity keeps ids for its sub-entities. 2. New controllers for each entity: TopicController.java, CategoryController.java, SubCategoryController.java, IndicatorController.java. 3. New DAOs for each entity: TopicDAO.java, MongoDBTopicDAO.java, CategoryDAO.java, MongoDBCategoryDAO.java, SubCategoryDAO.java, MongoDBSubCategoryDAO.java. 4. New custom Exceptions: EntityNotFoundException.java, PathNotValidException.java. 5. ExceptionsHandler.java: Handle new EntityNotFoundException (id not in db) and PathNotValidException (id exists in db but not in path given). --- .../controllers/CategoryController.java | 191 +++++ .../controllers/IndicatorController.java | 337 ++++++++ .../controllers/StakeholderController.java | 797 ++++-------------- .../controllers/SubCategoryController.java | 206 +++++ .../controllers/TestController.java | 3 +- .../controllers/TopicController.java | 163 ++++ .../uoamonitorservice/dao/CategoryDAO.java | 14 + .../dao/MongoDBCategoryDAO.java | 15 + .../dao/MongoDBSubCategoryDAO.java | 15 + .../dao/MongoDBTopicDAO.java | 15 + .../uoamonitorservice/dao/SubCategoryDAO.java | 14 + .../uoamonitorservice/dao/TopicDAO.java | 14 + .../uoamonitorservice/entities/Category.java | 17 +- .../uoamonitorservice/entities/Indicator.java | 14 +- .../entities/IndicatorPath.java | 7 +- .../entities/Stakeholder.java | 9 +- .../entities/SubCategory.java | 9 + .../uoamonitorservice/entities/Topic.java | 17 +- .../handlers/AuthorizationHandler.java | 55 +- .../handlers/EntityNotFoundException.java | 11 + .../handlers/ExceptionsHandler.java | 24 +- .../handlers/PathNotValidException.java | 11 + 22 files changed, 1286 insertions(+), 672 deletions(-) create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/controllers/CategoryController.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/controllers/IndicatorController.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/controllers/SubCategoryController.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/controllers/TopicController.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/dao/CategoryDAO.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBCategoryDAO.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBSubCategoryDAO.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBTopicDAO.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/dao/SubCategoryDAO.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/dao/TopicDAO.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/handlers/EntityNotFoundException.java create mode 100644 src/main/java/eu/dnetlib/uoamonitorservice/handlers/PathNotValidException.java diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/CategoryController.java b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/CategoryController.java new file mode 100644 index 0000000..1ee6432 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/CategoryController.java @@ -0,0 +1,191 @@ +package eu.dnetlib.uoamonitorservice.controllers; + +import eu.dnetlib.uoamonitorservice.dao.*; +import eu.dnetlib.uoamonitorservice.entities.*; +import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; +import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@CrossOrigin(origins = "*") +public class CategoryController { + private final Logger log = Logger.getLogger(this.getClass()); + + @Autowired + private StakeholderDAO stakeholderDAO; + + @Autowired + private TopicDAO topicDAO; + + @Autowired + private CategoryDAO categoryDAO; + + @Autowired + private SubCategoryDAO subCategoryDAO; + + @Autowired + private IndicatorDAO indicatorDAO; + + @Autowired + private SubCategoryController subCategoryController; + + public Category buildCategory(Category categoryFull) { + Category category = new Category<>(categoryFull); + + List subCategories = new ArrayList<>(); + List subCategoriesFull = new ArrayList<>(); + for(SubCategory subCategory : categoryFull.getSubCategories()) { + SubCategory subcategoryFull = subCategoryController.buildSubCategory(subCategory); + subCategoriesFull.add(subcategoryFull); + subCategories.add(subcategoryFull.getId()); + } + categoryFull.setSubCategories(subCategoriesFull); + category.setSubCategories(subCategories); + + Category categorySaved = categoryDAO.save(category); + + categoryFull.setId(categorySaved.getId()); + return categoryFull; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/save", method = RequestMethod.POST) + public Category saveCategory(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @RequestBody Category categoryFull) { + log.debug("save category"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + if(stakeholder.getTopics().contains(topicId)) { + // if category not exists (no id), create a new default subcategory, identical to category + if(categoryFull.getId() == null) { + SubCategory subCategory = new SubCategory<>(); + subCategory.setName(categoryFull.getName()); + subCategory.setAlias(categoryFull.getAlias()); + subCategory.setIsActive(categoryFull.getIsActive()); + subCategory.setIsPublic(categoryFull.getIsPublic()); + subCategory.setIsDefault(categoryFull.getIsDefault()); + subCategory.setCharts(new ArrayList()); + subCategory.setNumbers(new ArrayList()); + + SubCategory subCategorySaved = subCategoryDAO.save(subCategory); + List subCategories = categoryFull.getSubCategories(); + subCategories.add(subCategorySaved); + } + + + Category category = new Category<>(categoryFull); + + List subCategories = new ArrayList<>(); + for(SubCategory subCategory : categoryFull.getSubCategories()) { + subCategories.add(subCategory.getId()); + } + category.setSubCategories(subCategories); + + Category categorySaved = categoryDAO.save(category); + + List categories = topic.getCategories(); + int index = categories.indexOf(categorySaved.getId()); + if(index == -1) { + categories.add(categorySaved.getId()); + topicDAO.save(topic); + log.debug("Category saved!"); + + categoryFull.setId(categorySaved.getId()); + } + + subCategories = null; + category = null; + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Save category: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Save category: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Save category: Stakeholder with id: "+stakeholderId+" not found"); + } + return categoryFull; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/delete", method = RequestMethod.DELETE) + public boolean deleteCategory(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @PathVariable("categoryId") String categoryId) { + log.debug("delete category"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + if(stakeholder.getTopics().contains(topicId)) { + + Category category = categoryDAO.findById(categoryId); + if(category != null) { + + List categories = topic.getCategories(); + int index = categories.indexOf(categoryId); + if(index != -1) { + for(String subCategoryId : category.getSubCategories()) { + SubCategory 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 chartId : subcategory.getCharts()) { + indicatorDAO.delete(chartId); + } + subcategory.setCharts(null); + + for(String numberId : subcategory.getNumbers()) { + indicatorDAO.delete(numberId); + } + subcategory.setNumbers(null); + + subCategoryDAO.delete(subCategoryId); + } + category.setSubCategories(null); + + categories.remove(index); + topicDAO.save(topic); + + categoryDAO.delete(categoryId); + log.debug("Category deleted!"); + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Delete category: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + + } else { + // EXCEPTION - Category not found + throw new EntityNotFoundException("Delete category: Category with id: "+categoryId+" not found"); + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Delete category: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Delete category: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Delete category: Stakeholder with id: "+stakeholderId+" not found"); + } + return true; + } +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/IndicatorController.java b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/IndicatorController.java new file mode 100644 index 0000000..a85050c --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/IndicatorController.java @@ -0,0 +1,337 @@ +package eu.dnetlib.uoamonitorservice.controllers; + + +import eu.dnetlib.uoamonitorservice.dao.*; +import eu.dnetlib.uoamonitorservice.entities.*; +import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; +import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +@RestController +@CrossOrigin(origins = "*") +public class IndicatorController { + private final Logger log = Logger.getLogger(this.getClass()); + + @Autowired + private StakeholderDAO stakeholderDAO; + + @Autowired + private TopicDAO topicDAO; + + @Autowired + private CategoryDAO categoryDAO; + + @Autowired + private SubCategoryDAO subCategoryDAO; + + @Autowired + private IndicatorDAO indicatorDAO; + + + @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/save", method = RequestMethod.POST) + public Indicator saveIndicator(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @PathVariable("categoryId") String categoryId, + @PathVariable("subcategoryId") String subcategoryId, + @RequestBody Indicator indicator) { + log.debug("save indicator"); + +// if(stakeholderId == null) { +// // EXCEPTION - Parameter for Stakeholder is not accepted +// } +// if(topicId == null) { +// // EXCEPTION - Parameter for Topic is not accepted +// } +// if(categoryId == null) { +// // EXCEPTION - Parameter for Category is not accepted +// } +// if(subcategoryId == null) { +// // EXCEPTION - Parameter for SubCategory is not accepted +// } +// if(indicator == null) { +// // EXCEPTION - Parameter for Indicator is not accepted +// } + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + if(stakeholder.getTopics().contains(topicId)) { + + Category category = categoryDAO.findById(categoryId); + if(category != null) { + if(topic.getCategories().contains(categoryId)) { + + SubCategory subcategory = subCategoryDAO.findById(subcategoryId); + if(subcategory != null) { + if (category.getSubCategories().contains(subcategoryId)) { + Indicator indicatorSaved = indicatorDAO.save(indicator); + + List indicators = null; + //if(indicator.hasType("chart")) { + if(indicator.getType().equals("chart")) { + indicators = subcategory.getCharts(); + //} else if(indicator.hasType("number")) { + } else if(indicator.getType().equals("number")) { + indicators = subcategory.getNumbers(); + } + + int index = indicators.indexOf(indicatorSaved.getId()); + if (index == -1) { + indicators.add(indicatorSaved.getId()); + subCategoryDAO.save(subcategory); + log.debug("Indicator saved!"); + + indicator.setId(indicatorSaved.getId()); + } + } else { + // EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); + throw new PathNotValidException("Save indicator: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId); + } + } else { + // EXCEPTION - SubCategory not found + throw new EntityNotFoundException("Save indicator: SubCategory with id: "+subcategoryId+" not found"); + } + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Save indicator: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + } else { + // EXCEPTION - Category not found + throw new EntityNotFoundException("Save indicator: Category with id: "+categoryId+" not found"); + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Save indicator: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Save indicator: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Save indicator: Stakeholder with id: "+stakeholderId+" not found"); + } + return indicator; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{indicatorId}/delete", method = RequestMethod.DELETE) + public boolean deleteIndicator(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @PathVariable("categoryId") String categoryId, + @PathVariable("subcategoryId") String subcategoryId, + @PathVariable("indicatorId") String indicatorId) { + log.debug("delete indicator"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + if(stakeholder.getTopics().contains(topicId)) { + + Category category = categoryDAO.findById(categoryId); + if(category != null) { + if(topic.getCategories().contains(categoryId)) { + + SubCategory subcategory = subCategoryDAO.findById(subcategoryId); + if(subcategory != null) { + if(category.getSubCategories().contains(subcategoryId)) { + + Indicator indicator = indicatorDAO.findById(indicatorId); + if(indicator != null) { + List indicators = null; + if (indicator.getType().equals("chart")) { + indicators = subcategory.getCharts(); + } else if (indicator.getType().equals("number")) { + indicators = subcategory.getNumbers(); + } + + int index = indicators.indexOf(indicatorId); + if (index != -1) { + indicators.remove(index); + subCategoryDAO.save(subcategory); + + indicatorDAO.delete(indicatorId); + log.debug("Indicator deleted!"); + } else { + // EXCEPTION - Indicator not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subcategory.getAlias(); + throw new PathNotValidException("Delete indicator: Indicator with id: "+indicatorId+" not found in SubCategory: "+subcategoryId); + } + } else { + // EXCEPTION - Indicator not found + throw new EntityNotFoundException("Delete indicator: Indicator with id: "+indicatorId+" not found"); + } + } else { + // EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); + throw new PathNotValidException("Delete indicator: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId); + } + } else { + // EXCEPTION - SubCategory not found + throw new EntityNotFoundException("Delete indicator: SubCategory with id: "+subcategoryId+" not found"); + } + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Delete indicator: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + } else { + // EXCEPTION - Category not found + throw new EntityNotFoundException("Delete indicator: Category with id: "+categoryId+" not found"); + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Delete indicator: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Delete indicator: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Delete indicator: Stakeholder with id: "+stakeholderId+" not found"); + } + return true; + } + + @RequestMapping(value = "/{stakeholderId}/charts/delete", method = RequestMethod.DELETE) + public boolean deleteAllChartIndicators(@PathVariable("stakeholderId") String stakeholderId) { + log.debug("delete indicator"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + if(stakeholder != null) { + + for(String topicId : stakeholder.getTopics()) { + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + for(String categoryId : topic.getCategories()) { + Category category = categoryDAO.findById(categoryId); + if(category != null) { + for(String subcategoryId : category.getSubCategories()) { + SubCategory subcategory = subCategoryDAO.findById(subcategoryId); + if(subcategory != null) { + + List indicators = subcategory.getCharts(); + Iterator indicatorsIterator = subcategory.getCharts().iterator(); + + while (indicatorsIterator.hasNext()) { + String indicatorId = indicatorsIterator.next(); + Indicator indicator = indicatorDAO.findById(indicatorId); + if (indicator != null) { + int index = indicators.indexOf(indicatorId); + if (index != -1) { + indicatorsIterator.remove(); + //indicators.remove(index); + + indicatorDAO.delete(indicatorId); + log.debug("Indicator deleted!"); + } else { + // EXCEPTION - Indicator not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subcategory.getAlias(); + throw new PathNotValidException("Delete indicator: Indicator with id: " + indicatorId + " not found in SubCategory: " + subcategoryId); + } + } else { + // EXCEPTION - Indicator not found + throw new EntityNotFoundException("Delete indicator: Indicator with id: " + indicatorId + " not found"); + } + } + subCategoryDAO.save(subcategory); + } else { + // EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); + throw new PathNotValidException("Delete indicator: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId); + } + } + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Delete indicator: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Delete indicator: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Delete indicator: Stakeholder with id: "+stakeholderId+" not found"); + } + return true; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{type}/reorder", method = RequestMethod.POST) + public boolean reorderIndicators(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @PathVariable("categoryId") String categoryId, + @PathVariable("subcategoryId") String subcategoryId, + @PathVariable("type") String type, + @RequestBody List indicatorsFull) { + log.debug("reorder indicators"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if (stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if (topic != null) { + if (stakeholder.getTopics().contains(topicId)) { + + Category category = categoryDAO.findById(categoryId); + if (category != null) { + if (topic.getCategories().contains(categoryId)) { + + SubCategory subcategory = subCategoryDAO.findById(subcategoryId); + if (subcategory != null) { + if (category.getSubCategories().contains(subcategoryId)) { + + List indicators = new ArrayList<>(); + for(Indicator indicator : indicatorsFull) { + indicators.add(indicator.getId()); + } + + if(type.equals("chart")) { + subcategory.setCharts(indicators); + } else if(type.equals("number")) { + subcategory.setNumbers(indicators); + } + + subCategoryDAO.save(subcategory); + indicators = null; + log.debug("Indicators reordered!"); + } else { + // EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); + throw new PathNotValidException("Reorder indicators: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId); + } + } else { + // EXCEPTION - SubCategory not found + throw new EntityNotFoundException("Reorder indicators: SubCategory with id: "+subcategoryId+" not found"); + } + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Reorder indicators: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + } else { + // EXCEPTION - Category not found + throw new EntityNotFoundException("Reorder indicators: Category with id: "+categoryId+" not found"); + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Reorder indicators: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Reorder indicators: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Reorder indicators: Stakeholder with id: "+stakeholderId+" not found"); + } + return true; + } +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/StakeholderController.java b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/StakeholderController.java index 1592498..ca4e23e 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/StakeholderController.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/StakeholderController.java @@ -1,18 +1,16 @@ package eu.dnetlib.uoamonitorservice.controllers; -import com.fasterxml.jackson.core.type.TypeReference; -import com.fasterxml.jackson.databind.ObjectMapper; -import eu.dnetlib.uoamonitorservice.dao.IndicatorDAO; -import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO; +//import com.fasterxml.jackson.core.type.TypeReference; +//import com.fasterxml.jackson.databind.ObjectMapper; +import eu.dnetlib.uoamonitorservice.dao.*; import eu.dnetlib.uoamonitorservice.entities.*; +import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; import org.apache.log4j.Logger; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; -import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; -import java.util.Iterator; import java.util.List; @RestController @@ -23,15 +21,62 @@ public class StakeholderController { @Autowired private StakeholderDAO stakeholderDAO; + @Autowired + private TopicDAO topicDAO; + + @Autowired + private CategoryDAO categoryDAO; + + @Autowired + private SubCategoryDAO subCategoryDAO; + @Autowired private IndicatorDAO indicatorDAO; - public Stakeholder setIndicatorsForStakeholder(Stakeholder stakeholder) { - for (Topic topic: stakeholder.getTopics()) { - for(Category category : topic.getCategories()) { + @Autowired + private TopicController topicController; + + @RequestMapping(value = "/build-stakeholder", method = RequestMethod.POST) + public Stakeholder>>> buildFullStakeholder(@RequestBody Stakeholder>>> stakeholderFull) { + log.debug("build stakeholder"); + + Stakeholder stakeholder = new Stakeholder<>(stakeholderFull); + + List topics = new ArrayList<>(); + List>>> topicsFull = new ArrayList<>(); + for(Topic topic : stakeholderFull.getTopics()) { + Topic>> topicFull = topicController.buildTopic(topic); + topicsFull.add(topicFull); + topics.add(topicFull.getId()); + } + stakeholderFull.setTopics(topicsFull); + stakeholder.setTopics(topics); + + Stakeholder stakeholderSaved = stakeholderDAO.save(stakeholder); + stakeholderFull.setId(stakeholderSaved.getId()); + return stakeholderFull; + //return null; + } + + public Stakeholder setFullEntities(Stakeholder stakeholder) { + Stakeholder stakeholderFull = new Stakeholder<>(stakeholder); + + List topics = new ArrayList<>(); + + for (String topicId: (List)stakeholder.getTopics()) { + Topic topic = topicDAO.findById(topicId); + Topic topicFull = new Topic(topic); + + List categories = new ArrayList<>(); + + for(String categoryId : topic.getCategories()) { + Category category = categoryDAO.findById(categoryId); + Category categoryFull = new Category(category); + List subCategories = new ArrayList<>(); - for(SubCategory subCategory : category.getSubCategories()) { + for(String subCategoryId : category.getSubCategories()) { + SubCategory subCategory = subCategoryDAO.findById(subCategoryId); SubCategory subCategoryFull = new SubCategory(subCategory); List charts = new ArrayList<>(); @@ -49,11 +94,16 @@ public class StakeholderController { subCategories.add(subCategoryFull); } - category.setSubCategories(subCategories); + categoryFull.setSubCategories(subCategories); + categories.add(categoryFull); } + topicFull.setCategories(categories); + topics.add(topicFull); } - return stakeholder; + + stakeholderFull.setTopics(topics); + return stakeholderFull; } @RequestMapping(value = "/stakeholder/all", method = RequestMethod.GET) @@ -65,11 +115,12 @@ public class StakeholderController { stakeholders = stakeholderDAO.findByType(type); } + List stakeholdersFull = new ArrayList<>(); for(Stakeholder stakeholder : stakeholders) { - this.setIndicatorsForStakeholder(stakeholder); + stakeholdersFull.add(this.setFullEntities(stakeholder)); } - return stakeholders; + return stakeholdersFull; } @RequestMapping(value = "/stakeholder/default", method = RequestMethod.GET) @@ -81,10 +132,11 @@ public class StakeholderController { stakeholders = stakeholderDAO.findByIsDefaultProfileAndType(true, type); } + List stakeholdersFull = new ArrayList<>(); for(Stakeholder stakeholder : stakeholders) { - this.setIndicatorsForStakeholder(stakeholder); + stakeholdersFull.add(this.setFullEntities(stakeholder)); } - return stakeholders; + return stakeholdersFull; } @RequestMapping(value = "/stakeholder", method = RequestMethod.GET) @@ -96,648 +148,149 @@ public class StakeholderController { stakeholders = stakeholderDAO.findByIsDefaultProfileAndType(false, type); } + List stakeholdersFull = new ArrayList<>(); for(Stakeholder stakeholder : stakeholders) { - this.setIndicatorsForStakeholder(stakeholder); + stakeholdersFull.add(this.setFullEntities(stakeholder)); } log.debug(new Date()); - return stakeholders; + return stakeholdersFull; } @RequestMapping(value = "/stakeholder/{alias}", method = RequestMethod.GET) public Stakeholder getStakeholder(@PathVariable("alias") String alias) { - Stakeholder stakeholder = stakeholderDAO.findByAlias(alias); - this.setIndicatorsForStakeholder(stakeholder); - - return stakeholder; + Stakeholder stakeholder = stakeholderDAO.findByAlias(alias); + if(stakeholder == null) { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Get stakeholder: Stakeholder with alias: "+alias+" not found"); + } + return this.setFullEntities(stakeholder); } - - @RequestMapping(value = "/stakeholder/save", method = RequestMethod.POST) - public Stakeholder saveStakeholder(@RequestBody Stakeholder stakeholder) { + @RequestMapping(value = "/save", method = RequestMethod.POST) + public Stakeholder saveStakeholder(@RequestBody Stakeholder stakeholderFull) { log.debug("save stakeholder"); - Stakeholder stakeholderFull = new Stakeholder(stakeholder); +// if(stakeholderFull == null) { +// log.debug("stakeholder null"); +// // EXCEPTION - Parameter for Stakeholder is not accepted +// } - List topicsFull = new ArrayList<>(); + Stakeholder stakeholder = new Stakeholder<>(stakeholderFull); - for (Topic topic: stakeholder.getTopics()) { - Topic topicFull = new Topic(topic); - - List categoriesFull = new ArrayList<>(); - - for(Category category : topic.getCategories()) { - Category categoryFull = new Category(category); - - List subCategories = new ArrayList<>(); - List subCategoriesFull = new ArrayList<>(); - - for(SubCategory subCategoryFull : category.getSubCategories()) { - SubCategory subCategory = new SubCategory(subCategoryFull); - - List charts = new ArrayList<>(); - - ObjectMapper mapper = new ObjectMapper(); - //Jackson's use of generics - List chartsFull = mapper.convertValue(subCategoryFull.getCharts(), new TypeReference>(){}); - - //List chartsFull = (List)subCategoryFull.getCharts(); - //log.debug(chartsFull); - - for(Indicator indicator : chartsFull) { - charts.add(indicator.getId()); - } - - subCategory.setCharts(charts); - subCategoryFull.setCharts(chartsFull); - - List numbers = new ArrayList<>(); - List numbersFull = mapper.convertValue(subCategoryFull.getNumbers(), new TypeReference>(){}); - - for(Indicator indicator : numbersFull) { - numbers.add(indicator.getId()); - } - subCategory.setNumbers(numbers); - subCategoryFull.setNumbers(numbersFull); - - subCategories.add(subCategory); - subCategoriesFull.add(subCategoryFull); - } - - category.setSubCategories(subCategories); - categoryFull.setSubCategories(subCategoriesFull); - - categoriesFull.add(categoryFull); - } - topicFull.setCategories(categoriesFull); - topicsFull.add(topicFull); + List topics = new ArrayList<>(); + for(Topic topic : stakeholderFull.getTopics()) { + topics.add(topic.getId()); } - stakeholderFull.setTopics(topicsFull); - - log.debug("after minimize stakeholder"); - Stakeholder stakeholderSaved = stakeholderDAO.save(stakeholder); - log.debug("stakeholder saved!"); + stakeholder.setTopics(topics); + Stakeholder stakeholderSaved = stakeholderDAO.save(stakeholder); stakeholderFull.setId(stakeholderSaved.getId()); + + topics = null; + stakeholder = null; + stakeholderSaved = null; + return stakeholderFull; } - @RequestMapping(value = "/{stakeholder}", method = RequestMethod.DELETE) - public boolean deleteStakeholder(@PathVariable("stakeholder") String stakeholder) { - Stakeholder _stakeholder = stakeholderDAO.findById(stakeholder); - if(_stakeholder != null) { - for (Topic topic : _stakeholder.getTopics()) { - for (Category category : topic.getCategories()) { - for (SubCategory subcategory : category.getSubCategories()) { - for(String chartId : subcategory.getCharts()) { + + @RequestMapping(value = "/{stakeholderId}/delete", method = RequestMethod.DELETE) + public boolean deleteStakeholder(@PathVariable("stakeholderId") String stakeholderId) { + log.debug("delete stakeholder"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + for(String topicId : stakeholder.getTopics()) { + Topic topic = topicDAO.findById(topicId); + if (topic == null) { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Delete stakeholder: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholderId+")"); + } + + for (String categoryId : topic.getCategories()) { + Category 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 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 chartId : subcategory.getCharts()) { indicatorDAO.delete(chartId); } - for(String numberId : subcategory.getNumbers()) { + subcategory.setCharts(null); + + for (String numberId : subcategory.getNumbers()) { indicatorDAO.delete(numberId); } - - subcategory.setCharts(null); subcategory.setNumbers(null); + + subCategoryDAO.delete(subCategoryId); } category.setSubCategories(null); + categoryDAO.delete(categoryId); } topic.setCategories(null); + topicDAO.delete(topicId); } - - } else { - return false; - // EXCEPTION - Stakeholder not found - } - - stakeholderDAO.delete(_stakeholder.getId()); - _stakeholder = null; - return true; - } - - @RequestMapping(value = "/{stakeholder}/{topic}", method = RequestMethod.DELETE) - public Stakeholder deleteTopic(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic) { - - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if(_stakeholder != null) { - boolean topicFound = false; - - Iterator topicIterator = _stakeholder.getTopics().iterator(); - while (topicIterator.hasNext()) { - Topic _topic = topicIterator.next(); - if(_topic.getAlias().equals(topic)) { - for (Category category : _topic.getCategories()) { - for (SubCategory subcategory : category.getSubCategories()) { - for(String chartId : subcategory.getCharts()) { - indicatorDAO.delete(chartId); - } - for(String numberId : subcategory.getNumbers()) { - indicatorDAO.delete(numberId); - } - - subcategory.setCharts(null); - subcategory.setNumbers(null); - } - category.setSubCategories(null); - } - _topic.setCategories(null); - topicIterator.remove(); - stakeholderDAO.save(_stakeholder); - - topicFound = true; - break; - } - } - if(!topicFound) { - // EXCEPTION - Topic not found - } - } else { - // EXCEPTION - Stakeholder not found - } - this.setIndicatorsForStakeholder(_stakeholder); - - return _stakeholder; - } - - @RequestMapping(value = "/{stakeholder}/{topic}/{category}", method = RequestMethod.DELETE) - public Stakeholder deleteCategory(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic, - @PathVariable("category") String category) { - - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if(_stakeholder != null) { - Topic _topic = _stakeholder.getTopics().stream() - .filter(current_topic -> current_topic.getAlias().equals(topic)) - .findFirst() - .orElse(null); - if(_topic != null) { - boolean categoryFound = false; - - Iterator categoryIterator = _topic.getCategories().iterator(); - while (categoryIterator.hasNext()) { - Category _category = categoryIterator.next(); - if (_category.getAlias().equals(category)) { - for (SubCategory subcategory : _category.getSubCategories()) { - for(String chartId : subcategory.getCharts()) { - indicatorDAO.delete(chartId); - } - for(String numberId : subcategory.getNumbers()) { - indicatorDAO.delete(numberId); - } - - subcategory.setCharts(null); - subcategory.setNumbers(null); - } - _category.setSubCategories(null); - categoryIterator.remove(); - stakeholderDAO.save(_stakeholder); - - categoryFound = true; - break; - } - } - if(!categoryFound) { - // EXCEPTION - Category not found - } - } else { - // EXCEPTION - Topic not found - } - } else { - // EXCEPTION - Stakeholder not found - } - this.setIndicatorsForStakeholder(_stakeholder); - - return _stakeholder; - } - - @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}", method = RequestMethod.DELETE) - public Stakeholder deleteSubCategory(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic, - @PathVariable("category") String category, - @PathVariable("subcategory") String subcategory) { - - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if(_stakeholder != null) { - Topic _topic = _stakeholder.getTopics().stream() - .filter(current_topic -> current_topic.getAlias().equals(topic)) - .findFirst() - .orElse(null); - if(_topic != null) { - Category _category = _topic.getCategories().stream() - .filter(current_category -> current_category.getAlias().equals(category)) - .findFirst() - .orElse(null); - if(_category != null) { - boolean subCategoryFound = false; - - Iterator subCategoryIterator = _category.getSubCategories().iterator(); - while (subCategoryIterator.hasNext()) { - SubCategory _subCategory = subCategoryIterator.next(); - if (_subCategory.getAlias().equals(subcategory)) { - - for(String chartId : _subCategory.getCharts()) { - indicatorDAO.delete(chartId); - } - for(String numberId : _subCategory.getNumbers()) { - indicatorDAO.delete(numberId); - } - - _subCategory.setCharts(null); - _subCategory.setNumbers(null); - - subCategoryIterator.remove(); - stakeholderDAO.save(_stakeholder); - - subCategoryFound = true; - break; - - } - } - if (!subCategoryFound) { - // EXCEPTION - SubCategory not found - } - } else { - // EXCEPTION - Category not found - } - } else { - // EXCEPTION - Topic not found - } - } else { - // EXCEPTION - Stakeholder not found - } - this.setIndicatorsForStakeholder(_stakeholder); - - return _stakeholder; - } - - @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/{id}", method = RequestMethod.DELETE) - public boolean deleteIndicator(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic, - @PathVariable("category") String category, - @PathVariable("subcategory") String subcategory, - @PathVariable("id") String id) { - - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if(_stakeholder != null) { - Topic _topic = _stakeholder.getTopics().stream() - .filter(current_topic -> current_topic.getAlias().equals(topic)) - .findFirst() - .orElse(null); - if(_topic != null) { - Category _category = _topic.getCategories().stream() - .filter(current_category -> current_category.getAlias().equals(category)) - .findFirst() - .orElse(null); - if(_category != null) { - SubCategory _subCategory = _category.getSubCategories().stream() - .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory)) - .findFirst() - .orElse(null); - if(_subCategory != null) { - List indicators = null; - - Indicator indicator = indicatorDAO.findById(id); - if(indicator.hasType("chart")) { - indicators =_subCategory.getCharts(); - } else if(indicator.hasType("number")) { - indicators =_subCategory.getNumbers(); - } - - if(indicators == null) { - // EXCEPTION - No indicators found - } - - //List finalIndicators = indicators; - //log.debug("Indicators size: "+finalIndicators.size()); -// int index = IntStream.range(0, indicators.size()) -// .filter(i -> indicatorId.equals(finalIndicators.get(i))) -// .findFirst() -// .orElse(-1); // return -1 if target is not found - - boolean indicatorFound = false; - Iterator indicatorIterator = indicators.iterator(); - while (indicatorIterator.hasNext()) { - String indicatorId = indicatorIterator.next(); - log.debug(id + " vs "+indicatorId); - if(id.equals(indicatorId)) { - indicatorIterator.remove(); - indicatorFound = true; - break; - } - } - - log.debug(indicatorFound); - if(!indicatorFound) { - return false; - // EXCEPTION - Indicator not found - } - //indicators.remove(index); - - stakeholderDAO.save(_stakeholder); - indicatorDAO.delete(id); - } else { - // EXCEPTION - Subcategory not found - } - } else { - // EXCEPTION - Category not found - } - } else { - // EXCEPTION - Topic not found - } + stakeholder.setTopics(null); + stakeholderDAO.delete(stakeholderId); + log.debug("Stakeholder deleted!"); } else { // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Delete stakeholder: Stakeholder with id: "+stakeholderId+" not found"); } return true; } -// @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/indicator/delete", method = RequestMethod.POST) -// public boolean deleteChartPost(@PathVariable("stakeholder") String stakeholder, -// @PathVariable("topic") String topic, -// @PathVariable("category") String category, -// @PathVariable("subcategory") String subcategory, -// @RequestBody String indicatorId) { -// //String id = chart.getId(); -// return deleteIndicator(stakeholder, topic, category, subcategory, indicatorId); -// } - - - // path variables are alias-es. Each alias must be unique. - @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/indicator/save", method = RequestMethod.POST) - public Indicator saveIndicator(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic, - @PathVariable("category") String category, - @PathVariable("subcategory") String subcategory, - @RequestBody Indicator indicator) { - - Indicator indicatorSaved = null; - if(indicator.getId() != null) { - log.debug("indicator is already saved"); - indicatorSaved = indicatorDAO.save(indicator); - } else { - log.debug("to save indicator"); - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if (_stakeholder != null) { - Topic _topic = _stakeholder.getTopics().stream() - .filter(current_topic -> current_topic.getAlias().equals(topic)) - .findFirst() - .orElse(null); - if (_topic != null) { - Category _category = _topic.getCategories().stream() - .filter(current_category -> current_category.getAlias().equals(category)) - .findFirst() - .orElse(null); - if (_category != null) { - SubCategory _subCategory = _category.getSubCategories().stream() - .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory)) - .findFirst() - .orElse(null); - if (_subCategory != null) { - indicatorSaved = indicatorDAO.save(indicator); - - List indicators = null; - - if (indicator.hasType("chart")) { - indicators = _subCategory.getCharts(); - } else if (indicator.hasType("number")) { - indicators = _subCategory.getNumbers(); - } - - String indicatorId; - if (indicator.getId() != null) { - indicatorId = indicators.stream() - .filter(current_indicator -> current_indicator.equals(indicator.getId())) - .findFirst() - .orElse(null); - - if (indicatorId == null) { // indicator is not already at this position - indicators.add(indicator.getId()); - } - } - stakeholderDAO.save(_stakeholder); - } else { - // EXCEPTION - Subcategory not found - } - } else { - // EXCEPTION - Category not found - } - } else { - // EXCEPTION - Topic not found - } - } else { - // EXCEPTION - Stakeholder not found - } - } - - return indicatorSaved; - } - - @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/indicators/reorder", method = RequestMethod.POST) - public List reorderIndicators(String stakeholder, String topic, - String category, String subcategory, - List indicators, String type) { - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if(_stakeholder != null) { - Topic _topic = _stakeholder.getTopics().stream() - .filter(current_topic -> current_topic.getAlias().equals(topic)) - .findFirst() - .orElse(null); - if(_topic != null) { - Category _category = _topic.getCategories().stream() - .filter(current_category -> current_category.getAlias().equals(category)) - .findFirst() - .orElse(null); - if(_category != null) { - SubCategory _subCategory = _category.getSubCategories().stream() - .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory)) - .findFirst() - .orElse(null); - if(_subCategory != null) { - List _indicators = null; - if(type.equals("chart")) { - _indicators = _subCategory.getCharts(); - } else if(type.equals("number")) { - _indicators = _subCategory.getNumbers(); - } - - _indicators.clear(); - for(Indicator indicator : indicators) { - _indicators.add(indicator.getId()); - } - stakeholderDAO.save(_stakeholder); - } else { - // EXCEPTION - Subcategory not found - } - } else { - // EXCEPTION - Vategory not found - } - } else { - // EXCEPTION - Topic not found - } - } else { - // EXCEPTION - Stakeholder not found - } - - return indicators; - } - - // The following are not supposed to be used - - // should i delete indicators that were in the list but they are not in the new list? - @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/charts/save", method = RequestMethod.POST) - public List saveCharts(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic, - @PathVariable("category") String category, - @PathVariable("subcategory") String subcategory, - @RequestBody List charts) { - log.debug(charts); - log.debug(charts.size()); - log.debug(charts.getClass().getName()); - log.debug(charts.get(0).getClass().getName()); - return saveIndicators(stakeholder, topic, category, subcategory, charts, "chart"); - } - - // should i delete indicators that were in the list but they are not in the new list? - @RequestMapping(value = "/{stakeholder}/{topic}/{category}/{subcategory}/numbers/save", method = RequestMethod.POST) - public List saveNumbers(@PathVariable("stakeholder") String stakeholder, - @PathVariable("topic") String topic, - @PathVariable("category") String category, - @PathVariable("subcategory") String subcategory, - @RequestBody List numbers) { - return saveIndicators(stakeholder, topic, category, subcategory, numbers, "number"); - } - - public List saveIndicators(String stakeholder, String topic, - String category, String subcategory, - List indicators, String type) { - log.debug("to save indicators: "+indicators.size()); - List indicatorsSaved = new ArrayList<>(); - for(Indicator indicator : indicators) { - indicatorsSaved.add(indicatorDAO.save(indicator)); - } - log.debug("saved indicators: "+indicators.size()); - - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if(_stakeholder != null) { - Topic _topic = _stakeholder.getTopics().stream() - .filter(current_topic -> current_topic.getAlias().equals(topic)) - .findFirst() - .orElse(null); - if(_topic != null) { - Category _category = _topic.getCategories().stream() - .filter(current_category -> current_category.getAlias().equals(category)) - .findFirst() - .orElse(null); - if(_category != null) { - SubCategory _subCategory = _category.getSubCategories().stream() - .filter(current_subCategory -> current_subCategory.getAlias().equals(subcategory)) - .findFirst() - .orElse(null); - if(_subCategory != null) { - List _indicators = null; - if(type.equals("chart")) { - _indicators = _subCategory.getCharts(); - } else if(type.equals("number")) { - _indicators = _subCategory.getNumbers(); - } - - _indicators.clear(); - for(Indicator indicator : indicators) { - _indicators.add(indicator.getId()); - } - stakeholderDAO.save(_stakeholder); - } else { - // EXCEPTION - Subcategory not found - } - } else { - // EXCEPTION - Vategory not found - } - } else { - // EXCEPTION - Topic not found - } - } else { - // EXCEPTION - Stakeholder not found - } - - return indicatorsSaved; - } - - - - // Remember to check if alias is not already used before saving - @RequestMapping(value = "/{stakeholder}/topic/save", method = RequestMethod.POST) - public Stakeholder saveTopic(@PathVariable("stakeholder") String stakeholder, - @RequestBody Topic topic) { - Stakeholder stakeholderSaved = null; - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if (stakeholder != null) { - List topics = _stakeholder.getTopics(); - Topic _topic = topics.stream() - .filter(current_topic -> current_topic.getAlias().equals(topic.getAlias())) - .findFirst() - .orElse(null); - if(_topic != null) { - _topic = topic; - } else { - topics.add(topic); - _stakeholder.setTopics(topics); - } - stakeholderSaved = stakeholderDAO.save(_stakeholder); - } - return stakeholderSaved; - } - - @RequestMapping(value = "/{stakeholder}/topics/save", method = RequestMethod.POST) - public Stakeholder saveTopics(@PathVariable("stakeholder") String stakeholder, - @RequestBody List topics) { - Stakeholder stakeholderSaved = null; - Stakeholder _stakeholder = stakeholderDAO.findByAlias(stakeholder); - if (stakeholder != null) { - _stakeholder.setTopics(topics); - stakeholderSaved = stakeholderDAO.save(_stakeholder); - } - return stakeholderSaved; - } - - - @RequestMapping(value = "/stakeholder/dates", method = RequestMethod.GET) - public List getAllStakeholderDates() { - List profiles = stakeholderDAO.findAll(); - List profileDates = new ArrayList<>(); - - int i=0; - for(Stakeholder profile : profiles) { - log.debug(profile.getCreationDate()); - profileDates.add(profile.getCreationDate()); - log.debug(profileDates.get(i)); - i++; - } - return profileDates; - } - - @RequestMapping(value = "/stakeholder/dates1", method = RequestMethod.GET) - public List getAllStakeholderDates1() { - List profiles = stakeholderDAO.findAll(); - List profileDates = new ArrayList<>(); - - for(Stakeholder profile : profiles) { - log.debug(profile.getCreationDate().toString()); - profileDates.add(profile.getCreationDate().toString()); - } - return profileDates; - } - - @RequestMapping(value = "/stakeholder/dates2", method = RequestMethod.GET) - public List getAllStakeholderDates2() { - List profiles = stakeholderDAO.findAll(); - List profileDates = new ArrayList<>(); - SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - - for(Stakeholder profile : profiles) { - log.debug(format.format(profile.getCreationDate())); - profileDates.add(format.format(profile.getCreationDate())); - } - return profileDates; - } +// @RequestMapping(value = "/stakeholder/dates", method = RequestMethod.GET) +// public List getAllStakeholderDates() { +// List profiles = stakeholderDAO.findAll(); +// List profileDates = new ArrayList<>(); +// +// int i=0; +// for(Stakeholder profile : profiles) { +// log.debug(profile.getCreationDate()); +// profileDates.add(profile.getCreationDate()); +// log.debug(profileDates.get(i)); +// i++; +// } +// return profileDates; +// } +// +// @RequestMapping(value = "/stakeholder/dates1", method = RequestMethod.GET) +// public List getAllStakeholderDates1() { +// List profiles = stakeholderDAO.findAll(); +// List profileDates = new ArrayList<>(); +// +// for(Stakeholder profile : profiles) { +// log.debug(profile.getCreationDate().toString()); +// profileDates.add(profile.getCreationDate().toString()); +// } +// return profileDates; +// } +// +// @RequestMapping(value = "/stakeholder/dates2", method = RequestMethod.GET) +// public List getAllStakeholderDates2() { +// List profiles = stakeholderDAO.findAll(); +// List profileDates = new ArrayList<>(); +// SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); +// +// for(Stakeholder profile : profiles) { +// log.debug(format.format(profile.getCreationDate())); +// profileDates.add(format.format(profile.getCreationDate())); +// } +// return profileDates; +// } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/SubCategoryController.java b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/SubCategoryController.java new file mode 100644 index 0000000..4c99507 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/SubCategoryController.java @@ -0,0 +1,206 @@ +package eu.dnetlib.uoamonitorservice.controllers; + +import eu.dnetlib.uoamonitorservice.dao.*; +import eu.dnetlib.uoamonitorservice.entities.*; +import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; +import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@CrossOrigin(origins = "*") +public class SubCategoryController { + private final Logger log = Logger.getLogger(this.getClass()); + + @Autowired + private StakeholderDAO stakeholderDAO; + + @Autowired + private TopicDAO topicDAO; + + @Autowired + private CategoryDAO categoryDAO; + + @Autowired + private SubCategoryDAO subCategoryDAO; + + @Autowired + private IndicatorDAO indicatorDAO; + + public SubCategory buildSubCategory(SubCategory subcategoryFull) { + SubCategory subCategory = new SubCategory<>(subcategoryFull); + + List charts = new ArrayList<>(); + List chartsFull = new ArrayList<>(); + for(Indicator chart : subcategoryFull.getCharts()) { + Indicator chartSaved = indicatorDAO.save(chart); + chart.setId(chartSaved.getId()); + chartsFull.add(chart); + charts.add(chartSaved.getId()); + } + subcategoryFull.setCharts(chartsFull); + subCategory.setCharts(charts); + + List numbers = new ArrayList<>(); + List numbersFull = new ArrayList<>(); + for(Indicator numbr : subcategoryFull.getNumbers()) { + Indicator numberSaved = indicatorDAO.save(numbr); + numbr.setId(numberSaved.getId()); + numbersFull.add(numbr); + numbers.add(numberSaved.getId()); + } + subcategoryFull.setNumbers(numbersFull); + subCategory.setNumbers(numbers); + + SubCategory subCategorySaved = subCategoryDAO.save(subCategory); + + subcategoryFull.setId(subCategorySaved.getId()); + return subcategoryFull; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/save", method = RequestMethod.POST) + public SubCategory saveSubCategory(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @PathVariable("categoryId") String categoryId, + @RequestBody SubCategory subcategoryFull) { + log.debug("save subcategory"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + if(stakeholder.getTopics().contains(topicId)) { + + Category category = categoryDAO.findById(categoryId); + if(category != null) { + if(topic.getCategories().contains(categoryId)) { + SubCategory subCategory = new SubCategory<>(subcategoryFull); + + List charts = new ArrayList<>(); + for(Indicator chart : subcategoryFull.getCharts()) { + charts.add(chart.getId()); + } + subCategory.setCharts(charts); + + List numbers = new ArrayList<>(); + for(Indicator numbr : subcategoryFull.getNumbers()) { + numbers.add(numbr.getId()); + } + subCategory.setNumbers(numbers); + + SubCategory subCategorySaved = subCategoryDAO.save(subCategory); + + List subcategories = category.getSubCategories(); + int index = subcategories.indexOf(subCategorySaved.getId()); + if(index == -1) { + subcategories.add(subCategorySaved.getId()); + categoryDAO.save(category); + log.debug("Subcategory saved!"); + + subcategoryFull.setId(subCategorySaved.getId()); + } + + charts = null; + numbers = null; + subCategory = null; + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Save subcategory: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + } else { + // EXCEPTION - Category not found + throw new EntityNotFoundException("Save subcategory: Category with id: "+categoryId+" not found"); + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Save subcategory: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Save subcategory: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Save subcategory: Stakeholder with id: "+stakeholderId+" not found"); + } + return subcategoryFull; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/delete", method = RequestMethod.DELETE) + public boolean deleteSubCategory(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId, + @PathVariable("categoryId") String categoryId, + @PathVariable("subcategoryId") String subcategoryId) { + log.debug("delete subcategory"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + if(stakeholder.getTopics().contains(topicId)) { + + Category category = categoryDAO.findById(categoryId); + if(category != null) { + if(topic.getCategories().contains(categoryId)) { + + SubCategory subcategory = subCategoryDAO.findById(subcategoryId); + if(subcategory != null) { + List subcategories = category.getSubCategories(); + int index = subcategories.indexOf(subcategoryId); + if(index != -1) { + for(String chartId : subcategory.getCharts()) { + indicatorDAO.delete(chartId); + } + subcategory.setCharts(null); + + for(String numberId : subcategory.getNumbers()) { + indicatorDAO.delete(numberId); + } + subcategory.setNumbers(null); + + subcategories.remove(index); + categoryDAO.save(category); + + subCategoryDAO.delete(subcategoryId); + log.debug("Subcategory deleted!"); + } else { + // EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); + throw new PathNotValidException("Delete subcategory: Subcategory with id: "+subcategoryId+" not found in Category: "+categoryId); + } + + } else { + // EXCEPTION - SubCategory not found + throw new EntityNotFoundException("Delete subcategory: SubCategory with id: "+subcategoryId+" not found"); + } + } else { + // EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); + throw new PathNotValidException("Delete subcategory: Category with id: "+categoryId+" not found in Topic: "+topicId); + } + } else { + // EXCEPTION - Category not found + throw new EntityNotFoundException("Delete subcategory: Category with id: "+categoryId+" not found"); + } + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Delete subcategory: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Delete subcategory: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Delete subcategory: Stakeholder with id: "+stakeholderId+" not found"); + } + return true; + } + +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TestController.java b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TestController.java index 5ec4a3d..065a308 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TestController.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TestController.java @@ -32,7 +32,7 @@ public class TestController { } @RequestMapping(value = "/test-error2", method = RequestMethod.GET) - public String getParam(@RequestParam() String param) { + public String getParam(@RequestParam String param) { return param; } @@ -41,5 +41,4 @@ public class TestController { String str = null; return str.substring(2); } - } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TopicController.java b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TopicController.java new file mode 100644 index 0000000..927ea83 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/controllers/TopicController.java @@ -0,0 +1,163 @@ +package eu.dnetlib.uoamonitorservice.controllers; + +import eu.dnetlib.uoamonitorservice.dao.*; +import eu.dnetlib.uoamonitorservice.entities.Category; +import eu.dnetlib.uoamonitorservice.entities.Stakeholder; +import eu.dnetlib.uoamonitorservice.entities.SubCategory; +import eu.dnetlib.uoamonitorservice.entities.Topic; +import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException; +import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException; +import org.apache.log4j.Logger; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@CrossOrigin(origins = "*") +public class TopicController { + private final Logger log = Logger.getLogger(this.getClass()); + + @Autowired + private StakeholderDAO stakeholderDAO; + + @Autowired + private TopicDAO topicDAO; + + @Autowired + private CategoryDAO categoryDAO; + + @Autowired + private SubCategoryDAO subCategoryDAO; + + @Autowired + private IndicatorDAO indicatorDAO; + + @Autowired + private CategoryController categoryController; + + public Topic buildTopic(Topic topicFull) { + Topic topic = new Topic<>(topicFull); + + List categories = new ArrayList<>(); + List categoriesFull = new ArrayList<>(); + for(Category category : topicFull.getCategories()) { + Category categoryFull = categoryController.buildCategory(category); + categoriesFull.add(categoryFull); + categories.add(categoryFull.getId()); + } + topicFull.setCategories(categoriesFull); + topic.setCategories(categories); + + Topic topicSaved = topicDAO.save(topic); + + topicFull.setId(topicSaved.getId()); + return topicFull; + } + + @RequestMapping(value = "/{stakeholderId}/save", method = RequestMethod.POST) + public Topic saveTopic(@PathVariable("stakeholderId") String stakeholderId, + @RequestBody Topic topicFull) { + log.debug("save topic"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = new Topic<>(topicFull); + + List categories = new ArrayList<>(); + for(Category category : topicFull.getCategories()) { + categories.add(category.getId()); + } + topic.setCategories(categories); + + Topic topicSaved = topicDAO.save(topic); + + List topics = stakeholder.getTopics(); + int index = topics.indexOf(topicSaved.getId()); + if(index == -1) { + topics.add(topicSaved.getId()); + stakeholderDAO.save(stakeholder); + log.debug("Topic saved!"); + + topicFull.setId(topicSaved.getId()); + } + + categories = null; + topic = null; + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Save topic: Stakeholder with id: "+stakeholderId+" not found"); + } + return topicFull; + } + + @RequestMapping(value = "/{stakeholderId}/{topicId}/delete", method = RequestMethod.DELETE) + public boolean deleteTopic(@PathVariable("stakeholderId") String stakeholderId, + @PathVariable("topicId") String topicId) { + log.debug("delete topic"); + + Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId); + + if(stakeholder != null) { + + Topic topic = topicDAO.findById(topicId); + if(topic != null) { + + List topics = stakeholder.getTopics(); + int index = topics.indexOf(topicId); + if(index != -1) { + for(String categoryId : topic.getCategories()) { + Category 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 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 chartId : subcategory.getCharts()) { + indicatorDAO.delete(chartId); + } + subcategory.setCharts(null); + + for (String numberId : subcategory.getNumbers()) { + indicatorDAO.delete(numberId); + } + subcategory.setNumbers(null); + + subCategoryDAO.delete(subCategoryId); + } + category.setSubCategories(null); + categoryDAO.delete(categoryId); + } + topic.setCategories(null); + + topics.remove(index); + stakeholderDAO.save(stakeholder); + + topicDAO.delete(topicId); + log.debug("Category deleted!"); + } else { + // EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias(); + throw new PathNotValidException("Delete topic: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId); + } + + } else { + // EXCEPTION - Topic not found + throw new EntityNotFoundException("Delete topic: Topic with id: "+topicId+" not found"); + } + } else { + // EXCEPTION - Stakeholder not found + throw new EntityNotFoundException("Delete topic: Stakeholder with id: "+stakeholderId+" not found"); + } + return true; + } +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/dao/CategoryDAO.java b/src/main/java/eu/dnetlib/uoamonitorservice/dao/CategoryDAO.java new file mode 100644 index 0000000..7e370ea --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/dao/CategoryDAO.java @@ -0,0 +1,14 @@ +package eu.dnetlib.uoamonitorservice.dao; + +import eu.dnetlib.uoamonitorservice.entities.Category; + +import java.util.List; + +public interface CategoryDAO { + List findAll(); + Category findById(String Id); + + void delete(String Id); + + Category save(Category category); +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBCategoryDAO.java b/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBCategoryDAO.java new file mode 100644 index 0000000..1a34048 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBCategoryDAO.java @@ -0,0 +1,15 @@ +package eu.dnetlib.uoamonitorservice.dao; + +import eu.dnetlib.uoamonitorservice.entities.Category; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.util.List; + +public interface MongoDBCategoryDAO extends CategoryDAO, MongoRepository { + List findAll(); + Category findById(String Id); + + void delete(String Id); + + Category save(Category category); +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBSubCategoryDAO.java b/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBSubCategoryDAO.java new file mode 100644 index 0000000..25e165b --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBSubCategoryDAO.java @@ -0,0 +1,15 @@ +package eu.dnetlib.uoamonitorservice.dao; + +import eu.dnetlib.uoamonitorservice.entities.SubCategory; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.util.List; + +public interface MongoDBSubCategoryDAO extends SubCategoryDAO, MongoRepository { + List findAll(); + SubCategory findById(String Id); + + void delete(String Id); + + SubCategory save(SubCategory subCategory); +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBTopicDAO.java b/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBTopicDAO.java new file mode 100644 index 0000000..3e5b26e --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/dao/MongoDBTopicDAO.java @@ -0,0 +1,15 @@ +package eu.dnetlib.uoamonitorservice.dao; + +import eu.dnetlib.uoamonitorservice.entities.Topic; +import org.springframework.data.mongodb.repository.MongoRepository; + +import java.util.List; + +public interface MongoDBTopicDAO extends TopicDAO, MongoRepository { + List findAll(); + Topic findById(String Id); + + void delete(String Id); + + Topic save(Topic topic); +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/dao/SubCategoryDAO.java b/src/main/java/eu/dnetlib/uoamonitorservice/dao/SubCategoryDAO.java new file mode 100644 index 0000000..50fdf0a --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/dao/SubCategoryDAO.java @@ -0,0 +1,14 @@ +package eu.dnetlib.uoamonitorservice.dao; + +import eu.dnetlib.uoamonitorservice.entities.SubCategory; + +import java.util.List; + +public interface SubCategoryDAO { + List findAll(); + SubCategory findById(String Id); + + void delete(String Id); + + SubCategory save(SubCategory subCategory); +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/dao/TopicDAO.java b/src/main/java/eu/dnetlib/uoamonitorservice/dao/TopicDAO.java new file mode 100644 index 0000000..d1f2810 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/dao/TopicDAO.java @@ -0,0 +1,14 @@ +package eu.dnetlib.uoamonitorservice.dao; + +import eu.dnetlib.uoamonitorservice.entities.Topic; + +import java.util.List; + +public interface TopicDAO { + List findAll(); + Topic findById(String Id); + + void delete(String Id); + + Topic save(Topic topic); +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Category.java b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Category.java index a506107..2a74f9a 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Category.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Category.java @@ -5,7 +5,7 @@ import org.springframework.data.annotation.Id; import java.util.List; -public class Category { +public class Category { @Id @JsonProperty("_id") private String id; @@ -16,10 +16,11 @@ public class Category { private boolean isPublic; private boolean isOverview; private boolean isDefault; - private List subCategories; + private List subCategories; public Category() {} public Category(Category category) { + id = category.getId(); name = category.getName(); alias = category.getAlias(); isActive = category.getIsActive(); @@ -28,6 +29,14 @@ public class Category { isDefault = category.getIsDefault(); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getName() { return name; } @@ -76,11 +85,11 @@ public class Category { this.isDefault = isDefault; } - public List getSubCategories() { + public List getSubCategories() { return subCategories; } - public void setSubCategories(List subCategories) { + public void setSubCategories(List subCategories) { this.subCategories = subCategories; } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Indicator.java b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Indicator.java index 2b92bcf..6d38184 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Indicator.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Indicator.java @@ -1,6 +1,7 @@ package eu.dnetlib.uoamonitorservice.entities; import com.fasterxml.jackson.annotation.JsonProperty; +import org.apache.log4j.Logger; import org.springframework.data.annotation.Id; import java.util.List; @@ -54,8 +55,11 @@ public class Indicator { this.description = description; } - public IndicatorType getType() { - return type; +// public IndicatorType getType() { +// return type; +// } + public String getType() { + return type.name(); } public void setType(IndicatorType type) { @@ -110,7 +114,7 @@ public class Indicator { this.indicatorPaths = indicatorPaths; } - public boolean hasType(String str) { - return this.type.equals(str); - } +// public String hasType() { +// return this.type.name(); +// } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/entities/IndicatorPath.java b/src/main/java/eu/dnetlib/uoamonitorservice/entities/IndicatorPath.java index 3ab38a6..9227ba0 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/entities/IndicatorPath.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/entities/IndicatorPath.java @@ -15,7 +15,8 @@ public class IndicatorPath { private List jsonPath; private String chartObject; private Map parameters; - private Map> filters; + private Map filters; + //private Map> filters; public IndicatorPathType getType() { return type; @@ -65,11 +66,11 @@ public class IndicatorPath { this.parameters = parameters; } - public Map> getFilters() { + public Map getFilters() { return filters; } - public void setFilters(Map> filters) { + public void setFilters(Map filters) { this.filters = filters; } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Stakeholder.java b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Stakeholder.java index c9a3477..826f547 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Stakeholder.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Stakeholder.java @@ -14,7 +14,7 @@ enum StakeholderType } -public class Stakeholder { +public class Stakeholder { @Id @JsonProperty("_id") private String id; @@ -31,10 +31,11 @@ public class Stakeholder { private Date updateDate; private List managers; - private List topics; + private List topics; public Stakeholder() {} public Stakeholder(Stakeholder stakeholder) { + id = stakeholder.getId(); type = stakeholder.getType(); index_id = stakeholder.getIndex_id(); index_name = stakeholder.getIndex_name(); @@ -144,11 +145,11 @@ public class Stakeholder { this.managers = managers; } - public List getTopics() { + public List getTopics() { return topics; } - public void setTopics(List topics) { + public void setTopics(List topics) { this.topics = topics; } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/entities/SubCategory.java b/src/main/java/eu/dnetlib/uoamonitorservice/entities/SubCategory.java index 1b8f52d..2e2ede0 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/entities/SubCategory.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/entities/SubCategory.java @@ -20,6 +20,7 @@ public class SubCategory { public SubCategory() {} public SubCategory(SubCategory subCategory) { + id = subCategory.getId(); name = subCategory.getName(); alias = subCategory.getAlias(); isActive = subCategory.getIsActive(); @@ -27,6 +28,14 @@ public class SubCategory { isDefault = subCategory.getIsDefault(); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getName() { return name; } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Topic.java b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Topic.java index 078e0b5..ebd102e 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/entities/Topic.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/entities/Topic.java @@ -5,7 +5,7 @@ import org.springframework.data.annotation.Id; import java.util.List; -public class Topic { +public class Topic { @Id @JsonProperty("_id") private String id; @@ -16,10 +16,11 @@ public class Topic { private boolean isActive; private boolean isPublic; private boolean isDefault; - private List categories; + private List categories; public Topic() {} public Topic(Topic topic) { + id = topic.getId(); name = topic.getName(); alias = topic.getAlias(); description = topic.getDescription(); @@ -28,6 +29,14 @@ public class Topic { isDefault = topic.getIsDefault(); } + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getName() { return name; } @@ -76,11 +85,11 @@ public class Topic { this.isDefault = isDefault; } - public List getCategories() { + public List getCategories() { return categories; } - public void setCategories(List categories) { + public void setCategories(List categories) { this.categories = categories; } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/handlers/AuthorizationHandler.java b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/AuthorizationHandler.java index 9a2c01f..ad0603c 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/handlers/AuthorizationHandler.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/AuthorizationHandler.java @@ -19,33 +19,34 @@ public class AuthorizationHandler extends HandlerInterceptorAdapter { helper.setUserInfoUrl(userInfoUrl); this.allowedPostRequests = allowedPostRequests; } - @Override - public boolean preHandle( - HttpServletRequest request, - HttpServletResponse response, - Object handler) throws Exception { -// log.debug("request method " + request.getRemoteHost()); - log.debug("properties: " + helper.getOriginServer() + " "+ helper.getUserInfoUrl()); - log.debug(allowedPostRequests); - log.debug(allowedPostRequests.contains(request.getServletPath())); - log.debug(request.getServletPath()); - if((request.getMethod().equals("POST") || request.getMethod().equals("DELETE")) && - !allowedPostRequests.contains(request.getServletPath())) { - //TODO check domain & check user info - if(!this.helper.checkCookies(request) || !helper.isAuthorized(helper.getToken(request))){ - - response.setHeader("Access-Control-Allow-Credentials","true"); - response.setHeader("Access-Control-Allow-Origin","*"); - response.setHeader("Vary","Origin"); - - response.setStatus(403); - response.sendError(403, "Forbidden: You don't have permission to access. Maybe you are not registered."); - return false; - } - - } - return true; - } +// Comment this method ONLY FOR TEST +// @Override +// public boolean preHandle( +// HttpServletRequest request, +// HttpServletResponse response, +// Object handler) throws Exception { +//// log.debug("request method " + request.getRemoteHost()); +// log.debug("properties: " + helper.getOriginServer() + " "+ helper.getUserInfoUrl()); +// log.debug(allowedPostRequests); +// log.debug(allowedPostRequests.contains(request.getServletPath())); +// log.debug(request.getServletPath()); +// if((request.getMethod().equals("POST") || request.getMethod().equals("DELETE")) && +// !allowedPostRequests.contains(request.getServletPath())) { +// //TODO check domain & check user info +// if(!this.helper.checkCookies(request) || !helper.isAuthorized(helper.getToken(request))){ +// +// response.setHeader("Access-Control-Allow-Credentials","true"); +// response.setHeader("Access-Control-Allow-Origin","*"); +// response.setHeader("Vary","Origin"); +// +// response.setStatus(403); +// response.sendError(403, "Forbidden: You don't have permission to access. Maybe you are not registered."); +// return false; +// } +// +// } +// return true; +// } // @Override diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/handlers/EntityNotFoundException.java b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/EntityNotFoundException.java new file mode 100644 index 0000000..fc4d645 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/EntityNotFoundException.java @@ -0,0 +1,11 @@ +package eu.dnetlib.uoamonitorservice.handlers; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_FOUND) +public class EntityNotFoundException extends RuntimeException { + public EntityNotFoundException(String message){ + super(message); + } +} diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/handlers/ExceptionsHandler.java b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/ExceptionsHandler.java index b1dd5ca..2be3212 100644 --- a/src/main/java/eu/dnetlib/uoamonitorservice/handlers/ExceptionsHandler.java +++ b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/ExceptionsHandler.java @@ -19,7 +19,7 @@ public class ExceptionsHandler { public ResponseEntity invalidInput(Exception ex) { ExceptionResponse response = new ExceptionResponse(); response.setErrorCode("Validation Error"); - response.setErrorMessage("Invalid inputs."); + response.setErrorMessage("Invalid inputs"); response.setErrors(ex.getMessage()); response.setStatus(HttpStatus.BAD_REQUEST); log.debug("invalidInput exception"); @@ -47,4 +47,26 @@ public class ExceptionsHandler { log.debug("notFoundException exception"); return new ResponseEntity(response, HttpStatus.NOT_FOUND); } + + @ExceptionHandler(EntityNotFoundException.class) + public ResponseEntity entityNotFoundException(Exception ex) { + ExceptionResponse response = new ExceptionResponse(); + response.setErrorCode("Not found Exception"); + response.setErrorMessage("Entity not found Exception"); + response.setErrors(ex.getMessage()); + response.setStatus(HttpStatus.NOT_FOUND); + log.debug("entityNotFoundException exception"); + return new ResponseEntity(response, HttpStatus.NOT_FOUND); + } + + @ExceptionHandler(PathNotValidException.class) + public ResponseEntity pathNotValidException(Exception ex) { + ExceptionResponse response = new ExceptionResponse(); + response.setErrorCode("Not found Exception"); + response.setErrorMessage("Path not valid Exception"); + response.setErrors(ex.getMessage()); + response.setStatus(HttpStatus.NOT_FOUND); + log.debug("pathNotValidException exception"); + return new ResponseEntity(response, HttpStatus.NOT_FOUND); + } } diff --git a/src/main/java/eu/dnetlib/uoamonitorservice/handlers/PathNotValidException.java b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/PathNotValidException.java new file mode 100644 index 0000000..4c1afa6 --- /dev/null +++ b/src/main/java/eu/dnetlib/uoamonitorservice/handlers/PathNotValidException.java @@ -0,0 +1,11 @@ +package eu.dnetlib.uoamonitorservice.handlers; + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_FOUND) +public class PathNotValidException extends RuntimeException { + public PathNotValidException(String message){ + super(message); + } +}