Merge pull request 'Merge refactor code and change the implementation of reordering in order to transmit changes also in the children of a profile.' (#2) from new-model into master

Reviewed-on: #2
This commit is contained in:
Konstantinos Triantafyllou 2024-04-10 14:42:38 +02:00
commit 8eb99c8ae1
70 changed files with 3141 additions and 5269 deletions

10
pom.xml
View File

@ -61,10 +61,6 @@
<configuration>
<mainClass>eu.dnetlib.uoamonitorservice.application.UoaMonitorServiceApplication</mainClass>
<executable>true</executable>
<excludes>
<!-- <packagingExcludes>**/eu/dnetlib/uoamonitorservice/controllers/MonitorLibraryCheckDeployController.class</packagingExcludes>-->
<!-- <exclude>**/eu/dnetlib/uoamonitorservice/controllers/MonitorLibraryCheckDeployController.class</exclude>-->
</excludes>
</configuration>
<executions>
<execution>
@ -73,12 +69,6 @@
<goals>
<goal>repackage</goal>
</goals>
<configuration>
<excludes>
<!-- <packagingExcludes>**/eu/dnetlib/uoamonitorservice/controllers/MonitorLibraryCheckDeployController.class</packagingExcludes>-->
<!-- <exclude>**/eu/dnetlib/uoamonitorservice/controllers/MonitorLibraryCheckDeployController.class</exclude>-->
</excludes>
</configuration>
</execution>
</executions>
</plugin>

245
scripts/2020-10-22.js Normal file
View File

@ -0,0 +1,245 @@
function upperCaseEnumValues() {
stakeholders = db.stakeholder.find().map(function (stakeholders) {
return stakeholders;
});
for(var i=0; i<stakeholders.length; i++) {
stakeholder = stakeholders[i];
stakeholderType = stakeholder.type;
stakeholder.type = stakeholderType.toUpperCase();
db.stakeholder.save(stakeholder);
}
print("Uppercase enum values for Stakeholder types");
sections = db.section.find().map(function (sections) {
return sections;
});
for(var i=0; i<sections.length; i++) {
section = sections[i];
sectionType = section.type;
section.type = sectionType.toUpperCase();
db.section.save(section);
}
print("Uppercase enum values for Section types");
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for(var i=0; i<indicators.length; i++) {
indicator = indicators[i];
indicatorType = indicator.type;
indicator.type = indicatorType.toUpperCase();
indicatorWidth = indicator.width;
indicator.width = indicatorWidth.toUpperCase();
indicatorPaths = indicator.indicatorPaths;
for(var j=0; j<indicatorPaths.lenght; j++) {
indicatorPath = indicatorPaths[j];
indicatorPathType = indicatorPath.type;
indicatorPath.type = indicatorPathType.toUpperCase();
indicatorPathSource = indicatorPath.source;
indicatorPath.source = indicatorPathSource.toUpperCase();
}
db.indicator.save(indicator);
}
print("Uppercase enum values for Indicator types and width");
print("Uppercase enum values for Indicator path types and source");
}
function addHeightInIndicators() {
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for(var i=0; i<indicators.length; i++) {
indicator = indicators[i];
if(indicator.type == "chart" || indicator.type == "CHART") {
indicator['height'] = "MEDIUM";
} else {
indicator['height'] = "SMALL";
}
db.indicator.save(indicator);
}
print("Height field added in Indicators");
}
function addVisibility() {
stakeholders = db.stakeholder.find().map(function (stakeholders) {
return stakeholders;
});
for (var i = 0; i < stakeholders.length; i++) {
stakeholder = stakeholders[i];
if (stakeholder.isActive) {
if (stakeholder.isPublic) {
stakeholder['visibility'] = "PUBLIC";
} else {
stakeholder['visibility'] = "RESTRICTED";
}
} else {
stakeholder['visibility'] = "PRIVATE";
}
db.stakeholder.save(stakeholder);
}
print("Add visibility field for Stakeholders");
topics = db.topic.find().map(function (topics) {
return topics;
});
for (var i = 0; i < topics.length; i++) {
topic = topics[i];
topicVisibility = "PRIVATE";
if (topic.isActive) {
if (topic.isPublic) {
topicVisibility = "PUBLIC";
} else {
topicVisibility = "RESTRICTED";
}
}
topic['visibility'] = topicVisibility;
db.topic.save(topic);
}
print("Add visibility field for Topics");
categories = db.category.find().map(function (categories) {
return categories;
});
for (var i = 0; i < categories.length; i++) {
category = categories[i];
if (category.isActive) {
if (category.isPublic) {
category['visibility'] = "PUBLIC";
} else {
category['visibility'] = "RESTRICTED";
}
} else {
category['visibility'] = "PRIVATE";
}
db.category.save(category);
}
print("Add visibility field for Categories");
subCategories = db.subCategory.find().map(function (subCategories) {
return subCategories;
});
for (var i = 0; i < subCategories.length; i++) {
subCategory = subCategories[i];
if (subCategory.isActive) {
if (subCategory.isPublic) {
subCategory['visibility'] = "PUBLIC";
} else {
subCategory['visibility'] = "RESTRICTED";
}
} else {
subCategory['visibility'] = "PRIVATE";
}
db.subCategory.save(subCategory);
}
print("Add visibility field for SubCategories");
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for (var i = 0; i < indicators.length; i++) {
indicator = indicators[i];
if (indicator.isActive) {
if (indicator.isPublic) {
indicator['visibility'] = "PUBLIC";
} else {
indicator['visibility'] = "RESTRICTED";
}
} else {
indicator['visibility'] = "PRIVATE";
}
db.indicator.save(indicator);
}
print("Add visibility field for Indicators");
}
function removeIsActiveAndIsPublic() {
stakeholders = db.stakeholder.find().map(function (stakeholders) {
return stakeholders;
});
for(var i=0; i<stakeholders.length; i++) {
stakeholder = stakeholders[i];
db.stakeholder.update({"_id": stakeholder._id}, {$unset: {isPublic: "", isActive: ""}});
}
topics = db.topic.find().map(function (topics) {
return topics;
});
for(var i=0; i<topics.length; i++) {
topic = topics[i];
db.topic.update({"_id": topic._id}, {$unset: {isPublic: "", isActive: ""}});
}
categories = db.category.find().map(function (categories) {
return categories;
});
for(var i=0; i<categories.length; i++) {
category = categories[i];
db.category.update({"_id": category._id}, {$unset: {isPublic: "", isActive: ""}});
}
subCategories = db.subCategory.find().map(function (subCategories) {
return subCategories;
});
for(var i=0; i<subCategories.length; i++) {
subCategory = subCategories[i];
db.subCategory.update({"_id": subCategory._id}, {$unset: {isPublic: "", isActive: ""}});
}
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for(var i=0; i<indicators.length; i++) {
indicator = indicators[i];
db.indicator.update({"_id": indicator._id}, {$unset: {isPublic: "", isActive: ""}});
}
}
function addAdminToolsCollections () {
db.createCollection("portal");
db.createCollection("entity");
db.createCollection("page");
db.createCollection("pageHelpContent");
db.createCollection("divId");
db.createCollection("divHelpContent");
}
function addPortals() {
db.portal.save({"pid": "monitor", "name": "Monitor", "type": "monitor", "piwik": null, "pages": {}, "entities": {}});
}
function uniqueIndexes() {
db.portal.createIndex( { "pid": 1 }, { unique: true } );
db.stakeholder.createIndex( { "alias": 1 }, { unique: true } );
}
use monitordb;
upperCaseEnumValues();
addHeightInIndicators();
addVisibility();
removeIsActiveAndIsPublic();
addAdminToolsCollections();
addPortals();
uniqueIndexes();

65
scripts/2021-06-24.js Normal file
View File

@ -0,0 +1,65 @@
function addHomePageInPortalType(portalType) {
homePageID = db.page.insertOne({ "route" : "/", "name" : "Home", "type" : "other", "entities" : [ ], "portalType" : portalType, "top" : false, "bottom" : false, "left" : false, "right" : false }).insertedId.str;
print("Creating Home page with id " + homePageID);
portals = db.portal.find({"type": portalType}).map( function(portal) { return portal; } );
for (var i = 0; i < portals.length; i++) {
portal_pages = portals[i].pages;
portal_pages[homePageID] = true;
portal_pid = portals[i].pid;
db.portal.update({ "pid" : portal_pid },{$set: { "pages": portal_pages}});
print("Add home page with id " + homePageID + " on " + portalType + " " + portal_pid);
}
}
function addFooterDivIdForPortalType(portalType) {
homePageID = db.page.find({"portalType": portalType, "route": "/"}).map( function(portal) { return portal._id.str; } ).toString();
db.divId.save({ "name" : "footer", "pages" : [ homePageID ], "portalType" : portalType });
print("divId 'footer' added for "+portalType+" (home page id: "+homePageID + ")");
}
function addFooterHelpTextForPortalType(portalType) {
footerDivIdID = db.divId.find({"portalType": portalType, "name": "footer"}).map( function(divId) { return divId._id.str; } ).toString();
portals = db.portal.find({"type": portalType}).map( function(portal) { return portal; } );
for (var j = 0; j < portals.length; j++) {
portal = portals[j];
var content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452";
if(portal.pid == "egi") {
content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452";
} else if(portal.pid == "risis") {
content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452 and 824091";
} else if(portal.pid == "sobigdata") {
content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452 and 871042";
}
db.divHelpContent.save(
{ "divId" : footerDivIdID,
"portal" : portal._id.str,
"content" : "<p class=\"uk-margin-remove-bottom\"><span style=\"font-size:8pt\">"+content+"</span></p>",
"isActive" : true
}
);
print("div help text for divId 'footer' added for "+portalType +" (id: "+ portal._id + " - pid: " + portal.pid + " - footer divId id: "+footerDivIdID + ")");
}
}
use monitordb;
addHomePageInPortalType("funder");
addFooterDivIdForPortalType("funder");
addFooterHelpTextForPortalType("funder");
addHomePageInPortalType("ri");
addFooterDivIdForPortalType("ri");
addFooterHelpTextForPortalType("ri");
addHomePageInPortalType("organization");
addFooterDivIdForPortalType("organization");
addFooterHelpTextForPortalType("organization");

182
scripts/2023-05-30.js Normal file
View File

@ -0,0 +1,182 @@
function statsProfileOfIndicatorsAsVariable() {
print("statsProfileOfIndicatorsAsVariable");
numOfNumbers = 0;
numOfCharts = 0;
numOfNonMonitorProfiles = 0;
numOfMonitorProfiles = 0;
numOfNoProfiles = 0;
differentProfiles = new Set();
// indicators = db.indicator.find({"type": "chart"}).map(function (indicator) {
// indicators = db.indicator.find({"type": "number"}).map(function (indicator) {
indicators = db.indicator.find().map(function (indicator) {
return indicator;
});
print(indicators.length);
for (var i = 0; i < indicators.length; i++) {
indicator = indicators[i];
indicatorPaths = indicator.indicatorPaths;
if(indicatorPaths) {
for (var j = 0; j < indicatorPaths.length; j++) {
indicatorPath = indicatorPaths[j];
chartObjectStr = "";
// if(indicator.type == "chart") {
chartObjectStr = indicatorPath.chartObject;
// chartObject = JSON.parse(chartObjectStr);
if(indicator.type == "chart") {
numOfCharts++;
} else {
numOfNumbers++;
}
// if(i==0) {
// if(chartObject.chartDescription != null && chartObject.chartDescription.queries != null) {
// print(chartObject.chartDescription.queries.length);
// for(var z = 0; z < chartObject.chartDescription.queries.length; z++) {
// query = chartObject.chartDescription.queries[z].query;
// print(query.profile);
// query.profile = "((__statsProfile__))";
// }
// }
// indicatorPath.chartObject = JSON.stringify(chartObject);
if(chartObjectStr != null) {
var included = chartObjectStr.includes('"profile":"monitor"');
if (!included) {
numOfNonMonitorProfiles++;
print("Indicator with id: " + indicator._id + " has not monitor profile.");
} else {
numOfMonitorProfiles++;
}
splitted = chartObjectStr.split('"profile":"');
if (splitted.length == 1) {
numOfNoProfiles++;
}
for (var z = 1; z < splitted.length; z = z + 2) {
prof = splitted[z].split('"')[0];
differentProfiles.add(prof);
}
chartObjectStr = chartObjectStr.split('"profile":"monitor"').join('"profile":"((__profile__))"');
chartObjectStr = chartObjectStr.split('"profile":"OpenAIRE All-inclusive"').join('"profile":"((__profile__))"');
chartObjectStr = chartObjectStr.split('"profile":"OpenAIRE Monitor"').join('"profile":"((__profile__))"');
indicatorPath.chartObject = chartObjectStr;
} else {
print("Indicator with id: " + indicator._id + " has no chartObject");
}
}
}
// save indicator
db.indicator.save(indicator);
}
print("\n");
print("numOfNumbers: "+numOfNumbers);
print("numOfCharts: "+numOfCharts);
print("numOfMonitorProfiles: "+numOfMonitorProfiles);
print("numOfNonMonitorProfiles: "+numOfNonMonitorProfiles);
print("numOfNoProfiles: "+numOfNoProfiles);
print("Different profiles are: ");
for (var item of differentProfiles) {
print(item);
}
}
function addFundingLevelInFilters(filter) {
if(filter.groupFilters && filter.groupFilters.length > 0) {
var index = filter.groupFilters.findIndex(filter => filter.field.includes('project'));
if(index !== -1) {
print('before: ' + JSON.stringify(filter));
var prefix = filter.groupFilters[index].field.substring(0, filter.groupFilters[index].field.indexOf('project'));
if(!filter.groupFilters.find(filter => filter.field === prefix + "project.funding level 1")) {
filter.groupFilters.push({
"field": prefix + "project.funding level 1",
"type": "contains",
"values": [
'((__index_shortName__))'
]
});
print('after: ' + JSON.stringify(filter));
} else {
print('Already added');
}
}
return filter;
}
}
function addFundingStreamInDefaultMSCA() {
print("addFundingStreamInDefaultMSCA")
var stakeholder = db.stakeholder.findOne({"alias": "default-fl1"});
if(stakeholder) {
stakeholder.topics.forEach((topic) => {
var topicObj = db.topic.findOne({"_id": ObjectId(topic)});
topicObj.categories.forEach((category) => {
var categoryObj = db.category.findOne({"_id": ObjectId(category)});
categoryObj.subCategories.forEach((subCategory) => {
var subCategoryObj = db.subCategory.findOne({"_id": ObjectId(subCategory)});
subCategoryObj.numbers.forEach((number) => {
var section = db.section.findOne({"_id": ObjectId(number)});
section.indicators.forEach((indicator) => {
var indicatorObject = db.indicator.findOne({"_id": ObjectId(indicator)});
if(indicatorObject.indicatorPaths[0].parameters) {
indicatorObject.indicatorPaths[0].parameters['index_shortName'] = stakeholder.index_shortName.toLowerCase();
if(indicatorObject.indicatorPaths[0] && indicatorObject.indicatorPaths[0].chartObject) {
var json = JSON.parse(indicatorObject.indicatorPaths[0].chartObject);
if(json.series && json.series.length > 0) {
json.series.forEach(query => {
if(query.query && query.query.filters && query.query.filters.length > 0) {
query.query.filters.forEach(filter => {
filter = addFundingLevelInFilters(filter);
});
}
});
indicatorObject.indicatorPaths[0].chartObject = JSON.stringify(json);
db.indicator.save(indicatorObject);
}
}
}
});
});
subCategoryObj.charts.forEach((chart) => {
var section = db.section.findOne({"_id": ObjectId(chart)});
section.indicators.forEach((indicator) => {
var indicatorObject = db.indicator.findOne({"_id": ObjectId(indicator)});
if(indicatorObject.indicatorPaths[0].parameters) {
indicatorObject.indicatorPaths[0].parameters['index_shortName'] = stakeholder.index_shortName.toLowerCase();
if (indicatorObject.indicatorPaths[0] && indicatorObject.indicatorPaths[0].chartObject) {
var json = JSON.parse(indicatorObject.indicatorPaths[0].chartObject);
if (json.chartDescription && json.chartDescription.queries && json.chartDescription.queries.length > 0) {
json.chartDescription.queries.forEach(query => {
if (query.query && query.query.filters && query.query.filters.length > 0) {
query.query.filters.forEach(filter => {
filter = addFundingLevelInFilters(filter);
});
}
});
indicatorObject.indicatorPaths[0].chartObject = JSON.stringify(json);
db.indicator.save(indicatorObject);
}
}
}
});
});
});
});
});
} else {
print("Profile doesn't exist")
}
}
use monitordb;
statsProfileOfIndicatorsAsVariable();
addFundingStreamInDefaultMSCA();

16
scripts/2024-02-27.js Normal file
View File

@ -0,0 +1,16 @@
function deleteIndexParameters() {
var indicators = db.indicator.find();
indicators.forEach(indicator => {
indicator.indicatorPaths.forEach(path => {
if(path.parameters) {
delete path.parameters['index_id'];
delete path.parameters['index_name'];
delete path.parameters['index_shortName'];
}
db.indicator.save(indicator);
});
})
}
use irish-prod;
deleteIndexParameters();

View File

@ -41,7 +41,6 @@ public class SwaggerConfig extends WebMvcConfigurerAdapter {
@Bean
public Docket createRestApi() {
return new Docket(DocumentationType.SWAGGER_2)
// .globalOperationParameters(globalParameterList())
.apiInfo(apiInfo())
.select()
.apis(RequestHandlerSelectors.basePackage("eu.dnetlib.uoamonitorservice.controllers"))

View File

@ -12,9 +12,8 @@ import org.springframework.data.mongodb.MongoDbFactory;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.SimpleMongoDbFactory;
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
import java.util.Collections;
//"uoahelptexts"
@Configuration
@EnableMongoRepositories(basePackages = {"eu.dnetlib.uoamonitorservice.dao", "eu.dnetlib.uoaadmintoolslibrary.dao"})
public class MongoConnection {

View File

@ -1,20 +1,19 @@
package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.entities.*;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
import eu.dnetlib.uoamonitorservice.entities.Category;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import eu.dnetlib.uoamonitorservice.service.CategoryService;
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
import eu.dnetlib.uoamonitorservice.service.TopicService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@RestController
@ -22,205 +21,29 @@ import java.util.List;
public class CategoryController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private RolesUtils rolesUtils;
private final StakeholderService stakeholderService;
private final TopicService topicService;
private final CategoryService categoryService;
@Autowired
private StakeholderDAO stakeholderDAO;
@Autowired
private TopicDAO topicDAO;
@Autowired
private CategoryDAO categoryDAO;
@Autowired
private SubCategoryDAO subCategoryDAO;
@Autowired
private SubCategoryController subCategoryController;
public Category<SubCategory> buildCategory(Category<SubCategory> categoryFull) {
Category<String> category = new Category<>(categoryFull);
List<String> subCategories = new ArrayList<>();
List<SubCategory> subCategoriesFull = new ArrayList<>();
for(SubCategory<Section<Indicator>> subCategory : categoryFull.getSubCategories()) {
SubCategory<Section<Indicator>> subcategoryFull = subCategoryController.buildSubCategory(subCategory);
subCategoriesFull.add(subcategoryFull);
subCategories.add(subcategoryFull.getId());
}
categoryFull.setSubCategories(subCategoriesFull);
category.setSubCategories(subCategories);
Date date = new Date();
category.setCreationDate(date);
category.setUpdateDate(date);
categoryFull.setCreationDate(date);
categoryFull.setUpdateDate(date);
categoryDAO.save(category);
categoryFull.setId(category.getId());
return categoryFull;
public CategoryController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService) {
this.stakeholderService = stakeholderService;
this.topicService = topicService;
this.categoryService = categoryService;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/save", method = RequestMethod.POST)
public Category<SubCategory> saveCategory(@PathVariable("stakeholderId") String stakeholderId,
public CategoryFull saveCategory(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@RequestBody Category<SubCategory> categoryFull) {
@RequestBody CategoryFull categoryFull) {
log.debug("save category");
log.debug("Alias: "+categoryFull.getAlias() + " - Id: "+categoryFull.getId() + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Save Category: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Category<String> oldCategory = null;
if(categoryFull.getId() != null) {
oldCategory = categoryDAO.findById(categoryFull.getId());
if(oldCategory == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("save category: Category with id: " + categoryFull.getId() + " not found");
}
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic != null) {
if(stakeholder.getTopics().contains(topicId)) {
Category<String> category = new Category<>(categoryFull);
Date date = new Date();
category.setUpdateDate(date);
categoryFull.setUpdateDate(date);
List<String> subCategories = new ArrayList<>();
// if category not exists (no id), create a new default subcategory, identical to category
if(categoryFull.getId() == null) {
category.setCreationDate(date);
categoryFull.setCreationDate(date);
SubCategory<String> subCategory = new SubCategory<>();
subCategory.createOverviewSubCategory(categoryFull);
subCategoryDAO.save(subCategory);
List<SubCategory> subCategoriesFull = categoryFull.getSubCategories();
subCategoriesFull.add(subCategory);
for(SubCategory oldSubCategory : subCategoriesFull) {
subCategories.add(oldSubCategory.getId());
}
} else {
for(String subCategoryId : oldCategory.getSubCategories()) {
SubCategory subCategory = subCategoryDAO.findById(subCategoryId);
if (subCategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Save category: SubCategory with id: "+subCategoryId+" not found (subcategory exists in category: "+category.getId()+")");
}
subCategories.add(subCategory.getId());
}
}
category.setSubCategories(subCategories);
if(stakeholder.getDefaultId() == null) {
if(categoryFull.getId() == null) {
categoryDAO.save(category);
onSaveDefaultCategory(category, topicId);
} else {
onUpdateDefaultCategory(category, oldCategory);
categoryDAO.save(category);
}
} else {
categoryDAO.save(category);
}
List<String> categories = topic.getCategories();
int index = categories.indexOf(category.getId());
if(index == -1) {
categories.add(category.getId());
topicDAO.save(topic);
log.debug("Category saved!");
categoryFull.setId(category.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;
log.debug("Alias: " + categoryFull.getAlias() + " - Id: " + categoryFull.getId() + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId);
Stakeholder stakeholder = stakeholderService.findByPath(stakeholderId);
Topic topic = topicService.findByPath(stakeholder, topicId);
return this.categoryService.save(stakeholder, topic, new Category(categoryFull));
}
public void onSaveDefaultCategory(Category<String> category, String topicId) {
log.debug("On save default category");
List<Topic> topics = topicDAO.findByDefaultId(topicId);
for(Topic topic : topics) {
Category categoryNew = new Category();
categoryNew.copyFromDefault(category);
categoryDAO.save(categoryNew);
List<String> categories = topic.getCategories();
categories.add(categoryNew.getId());
topicDAO.save(topic);
}
String subCategoryOverviewId = category.getSubCategories().get(0);
SubCategory subCategoryOverview = subCategoryDAO.findById(subCategoryOverviewId);
subCategoryController.onSaveDefaultSubCategory(subCategoryOverview, category.getId());
}
public void onUpdateDefaultCategory(Category category, Category oldCategory) {
log.debug("On update default category");
List<Category> categories = categoryDAO.findByDefaultId(category.getId());
boolean changed = false;
for(Category categoryBasedOnDefault : categories) {
if(category.getName() != null && !category.getName().equals(categoryBasedOnDefault.getName())
&& (oldCategory.getName() == null || oldCategory.getName().equals(categoryBasedOnDefault.getName()))) {
categoryBasedOnDefault.setName(category.getName());
categoryBasedOnDefault.setAlias(category.getAlias());
changed = true;
}
if(category.getDescription() != null && !category.getDescription().equals(categoryBasedOnDefault.getDescription())
&& (oldCategory.getDescription() == null || oldCategory.getDescription().equals(categoryBasedOnDefault.getDescription()))) {
categoryBasedOnDefault.setDescription(category.getDescription());
changed = true;
}
if(!changed) {
// break;
continue;
}
// categoryBasedOnDefault.setName(category.getName());
// categoryBasedOnDefault.setDescription(category.getDescription());
categoryBasedOnDefault.setUpdateDate(category.getUpdateDate());
categoryDAO.save(categoryBasedOnDefault);
}
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/delete", method = RequestMethod.DELETE)
@ -229,343 +52,37 @@ public class CategoryController {
@PathVariable("categoryId") String categoryId,
@RequestParam(required = false) String children) {
log.debug("delete category");
log.debug("Id: "+categoryId + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete category: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic != null) {
if(stakeholder.getTopics().contains(topicId)) {
Category<String> category = categoryDAO.findById(categoryId);
if(category != null) {
if(category.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete category: You are not authorized to delete a default Category in stakeholder with id: "+stakeholderId);
}
List<String> categories = topic.getCategories();
int index = categories.indexOf(categoryId);
if(index != -1) {
// this category belongs in default profile
if(topic.getDefaultId() == null && children != null) {
onDeleteDefaultCategory(categoryId, topicId, children);
}
// 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);
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;
}
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!");
}
}
log.debug("Id: " + categoryId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
this.categoryService.delete(stakeholder.getType(), category, true);
return true;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/reorder", method = RequestMethod.POST)
public List<Category> reorderCategories(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@RequestBody List<String> categories) {
public List<CategoryFull> reorderCategories(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@RequestBody List<String> categories) {
log.debug("reorder categories");
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId);
Topic<String> topic = checkForExceptions(stakeholderId, topicId);
List<String> oldCategories = topic.getCategories();
for (String categoryId : oldCategories) {
if (!categories.contains(categoryId)) {
categories.add(categoryId);
}
}
topic.setCategories(categories);
List<Category> categoriesFull = new ArrayList<>();
for(String categoryId : categories) {
Category category = categoryDAO.findById(categoryId);
if(category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Reorder Categories: Category with id: " + categoryId + " not found");
}
categoriesFull.add(category);
}
topicDAO.save(topic);
log.debug("Categories reordered!");
return categoriesFull;
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId);
Stakeholder stakeholder = stakeholderService.findByPath(stakeholderId);
Topic topic = topicService.findByPath(stakeholder, topicId);
return this.topicService.reorderCategories(stakeholder, topic, categories).getCategories();
}
// @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/toggle-status", method = RequestMethod.POST)
// public Boolean toggleCategoryStatus(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId,
// @PathVariable("categoryId") String categoryId) {
// log.debug("toggle category status (isActive)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
//
// Category category = categoryDAO.findById(categoryId);
// if (category == null) {
// // EXCEPTION - Category not found
// throw new EntityNotFoundException("Toggle category status: Category with id: "+categoryId+" not found");
// }
// category.setIsActive(!category.getIsActive());
//
// this.toggleCategory(stakeholderId, topicId, category);
//
// return category.getIsActive();
// }
//
// @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/toggle-access", method = RequestMethod.POST)
// public Boolean toggleCategoryAccess(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId,
// @PathVariable("categoryId") String categoryId) {
// log.debug("toggle category access (isPublic)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
//
// Category category = categoryDAO.findById(categoryId);
// if (category == null) {
// // EXCEPTION - Category not found
// throw new EntityNotFoundException("Toggle category access: Category with id: "+categoryId+" not found");
// }
// category.setIsPublic(!category.getIsPublic());
//
// this.toggleCategory(stakeholderId, topicId, category);
//
// return category.getIsPublic();
// }
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/change-visibility", method = RequestMethod.POST)
public Category changeCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
log.debug("change category visibility: "+visibility + " - toggle propagate: "+((propagate != null && propagate) ? "true" : "false"));
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if (stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Toggle category: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if (topic != null) {
if (stakeholder.getTopics().contains(topicId)) {
if (topic.getCategories().contains(categoryId)) {
return changeVisibilityTree(categoryId, visibility, propagate);
} else {
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
throw new PathNotValidException("Toggle category: Category with id: "+categoryId+" not found in Topic: "+topicId);
}
} else {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Toggle category: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId);
}
} else {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Toggle category: Topic with id: "+topicId+" not found");
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Toggle category: Stakeholder with id: "+stakeholderId+" not found");
}
}
public Category changeVisibilityTree(String categoryId, Visibility visibility, Boolean propagate) {
Category<String> category = categoryDAO.findById(categoryId);
if (category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Change category visibility: Category with id: "+categoryId+" not found");
}
Category<SubCategory> categoryFull = new Category(category);
List<SubCategory> subCategoriesFull = new ArrayList<>();
if(propagate != null && propagate) {
for (String subCategoryId : category.getSubCategories()) {
subCategoriesFull.add(subCategoryController.changeVisibilityTree(subCategoryId, visibility, propagate));
}
}
category.setVisibility(visibility);
categoryDAO.save(category);
log.debug("Category toggled!");
categoryFull.setVisibility(visibility);
categoryFull.setSubCategories(subCategoriesFull);
return categoryFull;
}
private Topic checkForExceptions(String stakeholderId, String topicId) {
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("checkForExceptions category: Stakeholder with id: " + stakeholderId + " not found");
}
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("checkForExceptions category: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("checkForExceptions category: Topic with id: "+topicId+" not found");
}
if(!stakeholder.getTopics().contains(topicId)) {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("checkForExceptions category: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId);
}
return topic;
}
public void deleteTree(Topic topic) {
List<String> categories = topic.getCategories();
for(String categoryId : categories) {
Category category = categoryDAO.findById(categoryId);
if (category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Category delete tree: Category with id: "+categoryId+" not found (category exists in topic: "+topic.getId()+")");
}
subCategoryController.deleteTree(category);
categoryDAO.delete(categoryId);
}
}
public void disConnectTree(Topic topic) {
List<String> categories = topic.getCategories();
for(String categoryId : categories) {
Category category = categoryDAO.findById(categoryId);
if (category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Category disconnect tree: Category with id: "+categoryId+" not found (category exists in topic: "+topic.getId()+")");
}
subCategoryController.disConnectTree(category);
category.setDefaultId(null);
categoryDAO.save(category);
}
public CategoryFull changeCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@RequestParam("visibility") Visibility visibility, @RequestParam(defaultValue = "false") Boolean propagate) {
log.debug("change category visibility: " + visibility + " - toggle propagate: " + propagate);
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
return this.categoryService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), category, visibility, propagate);
}
}

View File

@ -10,28 +10,30 @@ import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@RestController
@CrossOrigin(origins = "*")
public class EmailController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private EmailSender emailSender;
private final EmailSender emailSender;
private final VerifyRecaptcha verifyRecaptcha;
@Autowired
private VerifyRecaptcha verifyRecaptcha;
public EmailController(EmailSender emailSender, VerifyRecaptcha verifyRecaptcha) {
this.emailSender = emailSender;
this.verifyRecaptcha = verifyRecaptcha;
}
@RequestMapping(value = "/contact", method = RequestMethod.POST)
public Boolean contact(@RequestBody EmailRecaptcha form) throws InvalidReCaptchaException {
public Boolean contact(@RequestBody EmailRecaptcha form) throws InvalidReCaptchaException {
verifyRecaptcha.processResponse(form.getRecaptcha());
Email email = form.getEmail();
ArrayList<String> sendTo = new ArrayList<>();
for(String userMail: email.getRecipients()){
sendTo.add(userMail);
}
return emailSender.send(sendTo, email.getSubject(), email.getBody(), false);
return emailSender.send(email.getRecipients(), email.getSubject(), email.getBody(), false);
}
@RequestMapping(value = "/sendMail", method = RequestMethod.POST)
@ -40,18 +42,18 @@ public class EmailController {
String successString = "success";
String failureString = "failure";
Map<String, ArrayList<String>> mailResults = new HashMap<>();
boolean bcc = (optional.isPresent())?optional.get():true;
for(String userMail:email.getRecipients()){
boolean bcc = optional.orElse(true);
for (String userMail : email.getRecipients()) {
ArrayList<String> sendTo = new ArrayList<>();
sendTo.add(userMail);
boolean success =emailSender.send(sendTo,email.getSubject(),email.getBody(), bcc);
if(success){
if(!mailResults.containsKey(successString)) {
boolean success = emailSender.send(sendTo, email.getSubject(), email.getBody(), bcc);
if (success) {
if (!mailResults.containsKey(successString)) {
mailResults.put(successString, new ArrayList<>());
}
mailResults.get(successString).add(userMail);
} else {
if(!mailResults.containsKey(failureString)) {
if (!mailResults.containsKey(failureString)) {
mailResults.put(failureString, new ArrayList<>());
}
mailResults.get(failureString).add(userMail);

View File

@ -16,9 +16,6 @@ import java.util.*;
@CrossOrigin(origins = "*")
public class MonitorController {
private final Logger log = LogManager.getLogger(this.getClass());
//
// @Autowired
// private LayoutService layoutService;
@Autowired
private PortalService portalService;
@ -36,11 +33,6 @@ public class MonitorController {
if (!old_pid.equals(new_pid)) {
pageService.updatePid(old_pid, new_pid, portal.getType());
}
// String old_pid = portalResponse.getPid();
// String new_pid = portal.getPid();
// if(!old_pid.equals(new_pid)) {
// layoutService.updatePid(old_pid, new_pid);
// }
return portalResponse;
}
@ -53,23 +45,8 @@ public class MonitorController {
@RequestMapping(value = "/delete", method = RequestMethod.POST)
public Boolean deletePortals(@RequestBody List<String> portals) {
for (String id: portals) {
String pid = portalService.deletePortal(id);
// layoutService.deleteByPid(pid);
}
portals.forEach(id -> portalService.deletePortal(id));
return true;
}
// @RequestMapping(value = "/{pid}/layout", method = RequestMethod.GET)
// public Layout getLayoutForCommunity(@PathVariable(value = "pid") String pid) {
// return layoutService.findByPid(pid);
// }
//
// @RequestMapping(value = "/{pid}/layout", method = RequestMethod.POST)
// public Layout updateLayoutForCommunity(@PathVariable(value = "pid") String pid, @RequestBody Layout layout) {
// return layoutService.save(layout);
// }
}

View File

@ -1,42 +1,27 @@
package eu.dnetlib.uoamonitorservice.controllers;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DBObject;
import eu.dnetlib.uoamonitorservice.application.UoaMonitorServiceApplication;
import eu.dnetlib.uoamonitorservice.configuration.GlobalVars;
import eu.dnetlib.uoamonitorservice.configuration.mongo.MongoConnection;
import eu.dnetlib.uoamonitorservice.configuration.properties.MongoConfig;
import eu.dnetlib.uoamonitorservice.service.MonitorDeployService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnBean;
import org.springframework.context.annotation.Conditional;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.CrossOrigin;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
import java.util.HashMap;
import java.util.Map;
@RestController
@CrossOrigin(origins = "*")
@RequestMapping("/monitor-library")
//@ConditionalOnBean(UoaMonitorServiceApplication.class)
public class MonitorLibraryCheckDeployController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private MongoConnection mongoConnection;
private final MonitorDeployService service;
@Autowired
private MongoConfig mongoConfig;
@Autowired
private GlobalVars globalVars;
public MonitorLibraryCheckDeployController(MonitorDeployService service) {
this.service = service;
}
@RequestMapping(value = {"", "/health_check"}, method = RequestMethod.GET)
public String hello() {
@ -47,34 +32,6 @@ public class MonitorLibraryCheckDeployController {
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN)")
@RequestMapping(value = "/health_check/advanced", method = RequestMethod.GET)
public Map<String, String> checkEverything() {
Map<String, String> response = new HashMap<>();
MongoTemplate mt = mongoConnection.getMongoTemplate();
DBObject ping = new BasicDBObject("ping", "1");
try {
CommandResult answer = mt.getDb().command(ping);
response.put("Mongo try: error", answer.getErrorMessage());
} catch (Exception e) {
response.put("Mongo catch: error", e.getMessage());
}
response.put("monitorservice.mongodb.database", mongoConfig.getDatabase());
response.put("monitorservice.mongodb.host", mongoConfig.getHost());
response.put("monitorservice.mongodb.port", mongoConfig.getPort()+"");
response.put("monitorservice.mongodb.username", mongoConfig.getUsername() == null ? null : "[unexposed value]");
response.put("monitorservice.mongodb.password", mongoConfig.getPassword() == null ? null : "[unexposed value]");
// response.put("Define also", "monitorservice.mongodb.username, monitorservice.mongodb.password");
if(globalVars.date != null) {
response.put("Date of deploy", globalVars.date.toString());
}
if(globalVars.getBuildDate() != null) {
response.put("Date of build", globalVars.getBuildDate());
}
if(globalVars.getVersion() != null) {
response.put("Version", globalVars.getVersion());
}
return response;
return this.service.checkEverything();
}
}

View File

@ -6,6 +6,7 @@ import com.mongodb.DBObject;
import eu.dnetlib.uoamonitorservice.configuration.GlobalVars;
import eu.dnetlib.uoamonitorservice.configuration.mongo.MongoConnection;
import eu.dnetlib.uoamonitorservice.configuration.properties.MongoConfig;
import eu.dnetlib.uoamonitorservice.service.MonitorDeployService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
@ -24,14 +25,11 @@ import java.util.Map;
public class MonitorServiceCheckDeployController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private MongoConnection mongoConnection;
private final MonitorDeployService service;
@Autowired
private MongoConfig mongoConfig;
@Autowired
private GlobalVars globalVars;
public MonitorServiceCheckDeployController(MonitorDeployService service) {
this.service = service;
}
@RequestMapping(value = {"", "/health_check"}, method = RequestMethod.GET)
public String hello() {
@ -42,34 +40,6 @@ public class MonitorServiceCheckDeployController {
@PreAuthorize("hasAnyAuthority(@AuthorizationService.PORTAL_ADMIN)")
@RequestMapping(value = "/health_check/advanced", method = RequestMethod.GET)
public Map<String, String> checkEverything() {
Map<String, String> response = new HashMap<>();
MongoTemplate mt = mongoConnection.getMongoTemplate();
DBObject ping = new BasicDBObject("ping", "1");
try {
CommandResult answer = mt.getDb().command(ping);
response.put("Mongo try: error", answer.getErrorMessage());
} catch (Exception e) {
response.put("Mongo catch: error", e.getMessage());
}
response.put("monitorservice.mongodb.database", mongoConfig.getDatabase());
response.put("monitorservice.mongodb.host", mongoConfig.getHost());
response.put("monitorservice.mongodb.port", mongoConfig.getPort()+"");
response.put("monitorservice.mongodb.username", mongoConfig.getUsername() == null ? null : "[unexposed value]");
response.put("monitorservice.mongodb.password", mongoConfig.getPassword() == null ? null : "[unexposed value]");
// response.put("Define also", "monitorservice.mongodb.username, monitorservice.mongodb.password");
if(globalVars.date != null) {
response.put("Date of deploy", globalVars.date.toString());
}
if(globalVars.getBuildDate() != null) {
response.put("Date of build", globalVars.getBuildDate());
}
if(globalVars.getVersion() != null) {
response.put("Version", globalVars.getVersion());
}
return response;
return this.service.checkEverything();
}
}

View File

@ -1,20 +1,17 @@
package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.dto.MoveIndicator;
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
import eu.dnetlib.uoamonitorservice.entities.*;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.service.*;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@RestController
@ -22,203 +19,37 @@ import java.util.List;
public class SectionController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private RolesUtils rolesUtils;
private final StakeholderService stakeholderService;
private final TopicService topicService;
private final CategoryService categoryService;
private final SubCategoryService subCategoryService;
private final SectionService sectionService;
@Autowired
private StakeholderDAO stakeholderDAO;
@Autowired
private TopicDAO topicDAO;
@Autowired
private CategoryDAO categoryDAO;
@Autowired
private SubCategoryDAO subCategoryDAO;
@Autowired
private SectionDAO sectionDAO;
@Autowired
private IndicatorDAO indicatorDAO;
@Autowired
private IndicatorController indicatorController;
public Section<Indicator> buildSection(Section<Indicator> sectionFull) {
Section<String> section = new Section<>(sectionFull);
List<String> indicators = new ArrayList<>();
List<Indicator> indicatorsFull = new ArrayList<>();
for(Indicator chart : sectionFull.getIndicators()) {
Indicator chartSaved = indicatorDAO.save(chart);
chart.setId(chartSaved.getId());
indicatorsFull.add(chart);
indicators.add(chartSaved.getId());
}
sectionFull.setIndicators(indicatorsFull);
section.setIndicators(indicators);
Date date = new Date();
section.setCreationDate(date);
section.setUpdateDate(date);
sectionFull.setCreationDate(date);
sectionFull.setUpdateDate(date);
sectionDAO.save(section);
sectionFull.setId(section.getId());
return sectionFull;
public SectionController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService,
SubCategoryService subCategoryService, SectionService sectionService) {
this.stakeholderService = stakeholderService;
this.topicService = topicService;
this.categoryService = categoryService;
this.subCategoryService = subCategoryService;
this.sectionService = sectionService;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/save/{index}", method = RequestMethod.POST)
public Section saveSection(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@PathVariable("subcategoryId") String subcategoryId,
@PathVariable("index") String index,
@RequestBody Section<Indicator> sectionFull) {
public SectionFull saveSection(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@PathVariable("subcategoryId") String subcategoryId,
@PathVariable("index") String index,
@RequestBody SectionFull sectionFull) {
log.debug("save section");
log.debug("Name: "+sectionFull.getTitle() + " - Id: "+sectionFull.getId() + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
Section<String> section = new Section<>(sectionFull);
Date date = new Date();
section.setUpdateDate(date);
sectionFull.setUpdateDate(date);
List<String> indicators = new ArrayList<>();
Section<String> oldSection = null;
if(sectionFull.getId() != null) {
oldSection = sectionDAO.findById(sectionFull.getId());
if(oldSection == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("save section: Section with id: " + sectionFull.getId() + " not found");
}
for(String indicatorId : oldSection.getIndicators()) {
Indicator indicator = indicatorDAO.findById(indicatorId);
if (indicator == null) {
// EXCEPTION - Indicator not found
throw new EntityNotFoundException("Save section: Indicator with id: "+indicatorId+" not found (indicator exists in section: "+section.getId()+")");
}
indicators.add(indicator.getId());
}
} else { // section does not exist in DB
section.setCreationDate(date);
sectionFull.setCreationDate(date);
for(Indicator indicator : sectionFull.getIndicators()) {
indicators.add(indicator.getId());
}
}
String sectionId = sectionFull.getId();
section.setIndicators(indicators);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
// this section belongs in default profile and it is new or it is updated
if(stakeholder.getDefaultId() == null) {
if(sectionId == null) {
sectionDAO.save(section);
onSaveDefaultSection(section, topicId, categoryId, subcategoryId, stakeholder);
}
else {
onUpdateDefaultSection(section, stakeholder, oldSection);
sectionDAO.save(section);
}
} else {
sectionDAO.save(section);
}
List<String> sections = null;
if(sectionFull.getType().equals("chart")) {
sections = subCategory.getCharts();
} else if(sectionFull.getType().equals("number")) {
sections = subCategory.getNumbers();
}
int existing_index = sections.indexOf(section.getId());
if (existing_index == -1) {
if(Integer.parseInt(index) != -1) {
sections.add(Integer.parseInt(index), section.getId());
} else {
sections.add(section.getId());
}
subCategoryDAO.save(subCategory);
log.debug("Section saved!");
sectionFull.setId(section.getId());
}
return sectionFull;
}
public void onSaveDefaultSection(Section section,
String defaultTopicId, String defaultCategoryId,
String defaultSubcategoryId, Stakeholder defaultStakeholder) {
log.debug("On save default section");
// new section in default profile - add it on profiles of the same type
List<SubCategory> subCategories = subCategoryDAO.findByDefaultId(defaultSubcategoryId);
for (SubCategory subCategory : subCategories) {
Category parentCategory = categoryDAO.findBySubCategoriesContaining(subCategory.getId());
Topic parentTopic = topicDAO.findByCategoriesContaining(parentCategory.getId());
Stakeholder parentStakeholder = stakeholderDAO.findByTopicsContaining(parentTopic.getId());
Section sectionNew = new Section();
sectionNew.copyFromDefault(section);
sectionNew.setStakeholderAlias(parentStakeholder.getAlias());
sectionDAO.save(sectionNew);
List<String> sections = null;
if (section.getType().equals("chart")) {
sections = subCategory.getCharts();
} else if (section.getType().equals("number")) {
sections = subCategory.getNumbers();
}
sections.add(sectionNew.getId());
subCategoryDAO.save(subCategory);
}
}
public void onUpdateDefaultSection(Section section, Stakeholder stakeholder, Section oldSection) {
log.debug("On update default section");
// section already exists - check if changed and update all sections based on it
boolean changed = false;
List<Section> sections = sectionDAO.findByDefaultId(section.getId());
for(Section sectionBasedOnDefault : sections) {
if(section.getTitle() != null && !section.getTitle().equals(sectionBasedOnDefault.getTitle())
&& (oldSection.getTitle() == null || oldSection.getTitle().equals(sectionBasedOnDefault.getTitle()))) {
sectionBasedOnDefault.setTitle(section.getTitle());
changed = true;
}
if(!changed) {
// break;
continue;
}
// sectionBasedOnDefault.setTitle(section.getTitle());
sectionBasedOnDefault.setUpdateDate(section.getUpdateDate());
sectionDAO.save(sectionBasedOnDefault);
}
log.debug("Name: " + sectionFull.getTitle() + " - Id: " + sectionFull.getId() + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
return this.sectionService.save(stakeholder, subCategory, new Section(sectionFull), Integer.parseInt(index));
}
@PreAuthorize("isAuthenticated()")
@ -230,331 +61,29 @@ public class SectionController {
@PathVariable("sectionId") String sectionId,
@RequestParam(required = false) String children) {
log.debug("delete section");
log.debug("Id: "+sectionId + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
Section section = sectionDAO.findById(sectionId);
if(section != null) {
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(section.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete section: You are not authorized to delete a default Section in stakeholder with id: "+stakeholderId);
}
String type = "";
List<String> sections = null;
if (section.getType().equals("chart")) {
sections = subCategory.getCharts();
type = "chart";
} else if (section.getType().equals("number")) {
sections = subCategory.getNumbers();
type = "number";
}
int index = sections.indexOf(sectionId);
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);
subCategoryDAO.save(subCategory);
sectionDAO.delete(sectionId);
log.debug("Section deleted!");
} else {
// EXCEPTION - Section not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subcategory.getAlias();
throw new PathNotValidException("Delete section: Section with id: "+sectionId+" not found in SubCategory: "+subcategoryId);
}
} else {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Delete section: Section with id: "+sectionId+" not found");
}
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!");
}
}
log.debug("Id: " + sectionId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
Section section = this.sectionService.findByPath(subCategory, sectionId);
this.sectionService.delete(stakeholder.getType(), section, true);
return true;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{type}/reorder", method = RequestMethod.POST)
public List<Section> reorderSections(@PathVariable("stakeholderId") String stakeholderId,
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/moveIndicator", method = RequestMethod.POST)
public SubCategoryFull moveIndicator(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@PathVariable("subcategoryId") String subcategoryId,
@PathVariable("type") String type,
@RequestBody List<String> sections) {
log.debug("reorder sections of type: "+type);
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
if (type.equals("chart")) {
List<String> oldSections = subCategory.getCharts();
for (String sectionId : oldSections) {
if (!sections.contains(sectionId)) {
sections.add(sectionId);
}
}
subCategory.setCharts(sections);
} else if (type.equals("number")) {
List<String> oldSections = subCategory.getNumbers();
for (String sectionId : oldSections) {
if (!sections.contains(sectionId)) {
sections.add(sectionId);
}
}
subCategory.setNumbers(sections);
}
List<Section> sectionsFull = new ArrayList<>();
for(String sectionId : sections) {
Section section = sectionDAO.findById(sectionId);
if(section == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Reorder sections: Section with id: " + sectionId + " not found");
}
sectionsFull.add(section);
}
subCategoryDAO.save(subCategory);
log.debug("Sections reordered!");
return sectionsFull;
}
// @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/toggle-status", method = RequestMethod.POST)
// public Boolean toggleSectionStatus(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId,
// @PathVariable("categoryId") String categoryId,
// @PathVariable("subcategoryId") String subcategoryId,
// @PathVariable("sectionId") String sectionId) {
// log.debug("toggle section status (isActive)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId+ " - Section: "+sectionId);
//
// Section section = sectionDAO.findById(sectionId);
// if (section == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Toggle section status: Section with id: "+sectionId+" not found");
// }
// section.setIsActive(!section.getIsActive());
//
// this.toggleSection(stakeholderId, topicId, categoryId, subcategoryId, section);
//
// return section.getIsActive();
// }
// @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/{sectionId}/toggle-access", method = RequestMethod.POST)
// public Boolean toggleSectionAccess(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId,
// @PathVariable("categoryId") String categoryId,
// @PathVariable("subcategoryId") String subcategoryId,
// @PathVariable("sectionId") String sectionId) {
// log.debug("toggle section access (isPublic)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
//
// Section section = sectionDAO.findById(sectionId);
// if (section == null) {
// // EXCEPTION - Section not found
// throw new EntityNotFoundException("Toggle section access: Section with id: "+sectionId+" not found");
// }
// section.setIsPublic(!section.getIsPublic());
//
// this.toggleSection(stakeholderId, topicId, categoryId, subcategoryId);
//
// return section.getIsPublic();
// }
public void toggleSection(String stakeholderId, String topicId, String categoryId, String subcategoryId, Section section) {
SubCategory<String> subCategory = checkForExceptions(stakeholderId, topicId, categoryId, subcategoryId);
List<String> sections = null;
if (section.getType().equals("chart")) {
sections = subCategory.getCharts();
} else if (section.getType().equals("number")) {
sections = subCategory.getNumbers();
}
if(sections.contains(section.getId())) {
sectionDAO.save(section);
log.debug("Section toggled!");
} else {
// EXCEPTION - Section not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias(); -> SubCategory: subCategory.getAlias();
throw new PathNotValidException("Toggle section: Section with id: "+section.getId()+" not found in SubCategory: "+subcategoryId);
}
}
private SubCategory checkForExceptions(String stakeholderId, String topicId, String categoryId, String subcategoryId) {
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Save indicator: Stakeholder with id: " + stakeholderId + " not found");
}
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("CheckForExceptions Section: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Save indicator: Topic with id: "+topicId+" not found");
}
if(!stakeholder.getTopics().contains(topicId)) {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Save indicator: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
}
Category<String> category = categoryDAO.findById(categoryId);
if(category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Save indicator: Category with id: "+categoryId+" not found");
}
if(!topic.getCategories().contains(categoryId)) {
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
throw new PathNotValidException("Save indicator: Category with id: "+categoryId+" not found in Topic: "+topicId);
}
SubCategory<String> subcategory = subCategoryDAO.findById(subcategoryId);
if(subcategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Save indicator: SubCategory with id: "+subcategoryId+" not found");
}
if (!category.getSubCategories().contains(subcategoryId)) {
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
throw new PathNotValidException("Save indicator: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId);
}
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);
}
}
public Section changeVisibilityTree(String sectionId, Visibility visibility) {
Section<String> section = sectionDAO.findById(sectionId);
if (section == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Change section visibility: Section with id: " + sectionId + " not found");
}
Section<Indicator> sectionFull = new Section(section);
List<Indicator> indicatorsFull = new ArrayList();
for (String indicatorId : section.getIndicators()) {
indicatorsFull.add(indicatorController.changeVisibilityTree(indicatorId, null, visibility));
}
sectionFull.setIndicators(indicatorsFull);
return sectionFull;
@RequestBody MoveIndicator moveIndicator) {
log.debug("move indicator");
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
return this.subCategoryService.moveIndicator(stakeholder, subCategory, moveIndicator);
}
}

View File

@ -1,680 +1,132 @@
package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.entities.Portal;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoaadmintoolslibrary.services.PortalService;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.entities.*;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoaadmintoolslibrary.services.PortalService;
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
import eu.dnetlib.uoamonitorservice.service.TopicService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.AccessDeniedException;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.*;
import java.util.List;
import java.util.stream.Collectors;
@RestController
@CrossOrigin(origins = "*")
public class StakeholderController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private RolesUtils rolesUtils;
private final PortalService portalService;
private final StakeholderService stakeholderService;
@Autowired
private StakeholderService stakeholderService;
@Autowired
private StakeholderDAO stakeholderDAO;
@Autowired
private TopicDAO topicDAO;
@Autowired
private CategoryDAO categoryDAO;
@Autowired
private SubCategoryDAO subCategoryDAO;
@Autowired
private SectionDAO sectionDAO;
@Autowired
private IndicatorDAO indicatorDAO;
@Autowired
private TopicController topicController;
@Autowired
private PortalService portalService;
public StakeholderController(PortalService portalService, StakeholderService stakeholderService) {
this.portalService = portalService;
this.stakeholderService = stakeholderService;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/stakeholder/alias", method = RequestMethod.GET)
public List<String> getAllReservedStakeholderAlias() {
// log.debug("get all stakeholder reserved alias-es");
List<String> stakeholderAlias = new ArrayList<>();
List<Stakeholder> stakeholders = stakeholderDAO.findAll();
if(stakeholders != null) {
stakeholders.forEach(stakeholder -> {
stakeholderAlias.add(stakeholder.getAlias());
});
}
stakeholderAlias.add( "all");
List<String> stakeholderAlias = this.stakeholderService.getAllAliases();
stakeholderAlias.add("all");
stakeholderAlias.add("default");
stakeholderAlias.add("alias");
return stakeholderAlias;
}
// @PreAuthorize("isAuthenticated()")
@PreAuthorize("hasAnyAuthority(" +
"@AuthorizationService.PORTAL_ADMIN, " +
"@AuthorizationService.curator(#stakeholderFull.getType()))")
"@AuthorizationService.PORTAL_ADMIN, " +
"@AuthorizationService.curator(#stakeholder.getType()))")
@RequestMapping(value = "/build-stakeholder", method = RequestMethod.POST)
public Stakeholder<Topic<Category<SubCategory<Section<Indicator>>>>> buildFullStakeholder(@RequestBody Stakeholder<Topic<Category<SubCategory<Section<Indicator>>>>> stakeholderFull) {
public StakeholderFull buildStakeholder(@RequestBody StakeholderFull stakeholder) {
log.debug("build stakeholder");
log.debug("Alias: "+stakeholderFull.getAlias());
Stakeholder<String> stakeholder = new Stakeholder<>(stakeholderFull);
List<String> topics = new ArrayList<>();
List<Topic<Category<SubCategory<Section<Indicator>>>>> topicsFull = new ArrayList<>();
for(Topic topic : stakeholderFull.getTopics()) {
Topic<Category<SubCategory<Section<Indicator>>>> topicFull = topicController.buildTopic(topic);
topicsFull.add(topicFull);
topics.add(topicFull.getId());
}
stakeholderFull.setTopics(topicsFull);
stakeholder.setTopics(topics);
Date date = new Date();
stakeholder.setCreationDate(date);
stakeholder.setUpdateDate(date);
stakeholderFull.setCreationDate(date);
stakeholderFull.setUpdateDate(date);
Stakeholder<String> stakeholderSaved = stakeholderDAO.save(stakeholder);
stakeholderFull.setId(stakeholderSaved.getId());
Portal portal = portalService.getPortal(stakeholderFull.getAlias());
if(portal == null) {
log.debug("Alias: " + stakeholder.getAlias());
Portal portal = portalService.getPortal(stakeholder.getAlias());
if (portal == null) {
portal = new Portal();
portal.setPid(stakeholderFull.getAlias());
portal.setName(stakeholderFull.getName());
portal.setType(stakeholderFull.getType());
portal.setPid(stakeholder.getAlias());
portal.setName(stakeholder.getName());
portal.setType(stakeholder.getType());
portalService.insertPortal(portal);
}
return stakeholderFull;
//return null;
return this.stakeholderService.buildStakeholder(stakeholder);
}
public Stakeholder setFullEntities(Stakeholder<String> stakeholder) {
boolean addAll = false;
boolean addPublicAndRestricted = false;
// if(roles == null
// || roles.contains(authorizationService.PORTAL_ADMIN)
// || roles.contains(authorizationService.curator(stakeholder.getType()))
// || roles.contains(authorizationService.manager(stakeholder.getType(), stakeholder.getAlias()))) {
if(rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
//if(visibility == null || visibility == (Visibility.PRIVATE)) {
addAll = true;
//}
//if(visibility == null || visibility == (Visibility.PRIVATE) || visibility == (Visibility.RESTRICTED)) {
addPublicAndRestricted = true;
//}
// } else if(roles != null && roles.contains(authorizationService.member(stakeholder.getType(), stakeholder.getAlias()))) {
} else if(rolesUtils.isMember(stakeholder.getType(), stakeholder.getAlias())) {
//if(visibility == null || visibility == (Visibility.PRIVATE) || visibility == (Visibility.RESTRICTED)) {
addPublicAndRestricted = true;
//}
}
Stakeholder<Topic> stakeholderFull = new Stakeholder<>(stakeholder);
List<Topic> topics = new ArrayList<>();
for (String topicId: (List<String>)stakeholder.getTopics()) {
Topic<String> topic = topicDAO.findById(topicId);
if(topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Get stakeholder: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholder.getId()+")");
}
if((!addAll && topic.getVisibility() == Visibility.PRIVATE)
|| (!addPublicAndRestricted && topic.getVisibility() == Visibility.RESTRICTED)) {
continue;
}
Topic<Category> topicFull = new Topic<Category>(topic);
List<Category> categories = new ArrayList<>();
for(String categoryId : topic.getCategories()) {
Category<String> category = categoryDAO.findById(categoryId);
if(category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Get stakeholder: Category with id: "+categoryId+" not found (category exists in topic: "+topicId+")");
}
if((!addAll && category.getVisibility() == Visibility.PRIVATE)
|| (!addPublicAndRestricted && category.getVisibility() == Visibility.RESTRICTED)) {
continue;
}
Category<SubCategory> categoryFull = new Category<SubCategory>(category);
List<SubCategory> subCategories = new ArrayList<>();
for(String subCategoryId : category.getSubCategories()) {
SubCategory<String> subCategory = subCategoryDAO.findById(subCategoryId);
if(subCategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Get stakeholder: SubCategory with id: "+subCategoryId+" not found (subCategory exists in category: "+categoryId+")");
}
if((!addAll && subCategory.getVisibility() == Visibility.PRIVATE)
|| (!addPublicAndRestricted && subCategory.getVisibility() == Visibility.RESTRICTED)) {
continue;
}
SubCategory subCategoryFull = new SubCategory<Section<Indicator>>(subCategory);
List<Section> sectionsCharts = new ArrayList<>();
for(String sectionId : subCategory.getCharts()) {
sectionsCharts.add(getSectionFull(sectionId, subCategoryId, addAll, addPublicAndRestricted));
}
subCategoryFull.setCharts(sectionsCharts);
List<Section> sectionsNumbers = new ArrayList<>();
for(String sectionId : subCategory.getNumbers()) {
sectionsNumbers.add(getSectionFull(sectionId, subCategoryId, addAll, addPublicAndRestricted));
}
subCategoryFull.setNumbers(sectionsNumbers);
// List<Indicator> charts = new ArrayList<>();
// for(String indicatorId : subCategory.getCharts()) {
// Indicator indicator = indicatorDAO.findById(indicatorId);
// if(indicator == null) {
// // EXCEPTION - Indicator not found
// throw new EntityNotFoundException("Get stakeholder: Indicator with id: "+indicatorId+" not found (indicator exists in subCategory: "+subCategoryId+")");
// }
// charts.add(indicator);
// }
// subCategoryFull.setCharts(charts);
//
// List<Indicator> numbers = new ArrayList<>();
// for (String indicatorId : subCategory.getNumbers()) {
// Indicator indicator = indicatorDAO.findById(indicatorId);
// if (indicator == null) {
// // EXCEPTION - Indicator not found
// throw new EntityNotFoundException("Get stakeholder: Indicator with id: " + indicatorId + " not found (indicator exists in subCategory: " + subCategoryId + ")");
// }
// numbers.add(indicator);
// }
// subCategoryFull.setNumbers(numbers);
subCategories.add(subCategoryFull);
}
categoryFull.setSubCategories(subCategories);
categories.add(categoryFull);
}
topicFull.setCategories(categories);
topics.add(topicFull);
}
stakeholderFull.setTopics(topics);
return stakeholderFull;
}
// private SubCategory setFullSubcategory(SubCategory subCategory) {
// SubCategory subCategoryFull = new SubCategory<Section<Indicator>>(subCategory);
//
// List<Section> sectionsCharts = new ArrayList<>();
//
// for(String sectionId : subCategory.getCharts()) {
// sectionsCharts.add(getSectionFull(sectionId, subCategoryId, addAll, addPublicAndRestricted));
// }
// subCategoryFull.setCharts(sectionsCharts);
//
// List<Section> sectionsNumbers = new ArrayList<>();
//
// for(String sectionId : subCategory.getNumbers()) {
// sectionsNumbers.add(getSectionFull(sectionId, subCategoryId, addAll, addPublicAndRestricted));
// }
// subCategoryFull.setNumbers(sectionsNumbers);
// }
private Section getSectionFull(String sectionId, String subCategoryId, boolean addAll, boolean addPublicAndRestricted) {
Section<String> section = sectionDAO.findById(sectionId);
if (section == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Get stakeholder: Section with id: " + sectionId + " not found (section exists in subCategory: " + subCategoryId + ")");
}
Section sectionFull = new Section<Indicator>(section);
List<Indicator> indicators = new ArrayList<>();
for (String indicatorId : section.getIndicators()) {
Indicator indicator = indicatorDAO.findById(indicatorId);
if (indicator == null) {
// EXCEPTION - Indicator not found
throw new EntityNotFoundException("Get stakeholder: Indicator with id: " + indicatorId + " not found (indicator exists in section: " + sectionId + ")");
}
if((!addAll && indicator.getVisibility() == Visibility.PRIVATE)
|| (!addPublicAndRestricted && indicator.getVisibility() == Visibility.RESTRICTED)) {
continue;
}
indicators.add(indicator);
}
sectionFull.setIndicators(indicators);
return sectionFull;
}
@PreAuthorize("hasAnyAuthority(" +
"@AuthorizationService.PORTAL_ADMIN)")
@PreAuthorize("hasAnyAuthority(" + "@AuthorizationService.PORTAL_ADMIN)")
@RequestMapping(value = "/stakeholder/all", method = RequestMethod.GET)
public List<Stakeholder> getAllStakeholders(@RequestParam(required = false) String type) {
// log.debug("get all stakeholders" + (type != null ? " with type: "+type : ""));
List<Stakeholder> stakeholders;
if(type == null) {
stakeholders = stakeholderDAO.findAll();
} else {
stakeholders = stakeholderDAO.findByType(type);
}
List<Stakeholder> stakeholdersFull = new ArrayList<>();
for(Stakeholder stakeholder : stakeholders) {
stakeholdersFull.add(this.setFullEntities(stakeholder));
}
return stakeholdersFull;
return this.stakeholderService.getAll(type);
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/stakeholder/default", method = RequestMethod.GET)
public List<Stakeholder> getAllDefaultStakeholders(@RequestParam(required = false) String type) {
// log.debug("get all default stakeholders" + (type != null ? " with type: "+type : ""));
List<Stakeholder> stakeholders;
if(type == null) {
stakeholders = stakeholderDAO.findByDefaultId(null);
} else {
stakeholders = stakeholderDAO.findByDefaultIdAndType(null, type);
}
List<Stakeholder> stakeholdersFull = new ArrayList<>();
// Remove stakeholders for which i do not have authority
if(stakeholders != null && stakeholders.size() > 0) {
// log.debug("ROLES: ");
// roles.forEach(role -> log.debug(role));
//
// if (roles.contains(authorizationService.PORTAL_ADMIN)) {
if (rolesUtils.isPortalAdmin()) {
for(Stakeholder stakeholder : stakeholders) {
stakeholdersFull.add(this.setFullEntities(stakeholder));
}
return stakeholdersFull;
}
Iterator<Stakeholder> stakeholderIterator = stakeholders.iterator();
while(stakeholderIterator.hasNext()) {
Stakeholder stakeholder = stakeholderIterator.next();
// if(roles.contains(authorizationService.curator(stakeholder.getType()))) {
if(rolesUtils.isCurator(stakeholder.getType())) {
stakeholdersFull.add(this.setFullEntities(stakeholder));
continue;
}
stakeholderIterator.remove();
}
}
return stakeholdersFull;
public List<StakeholderFull> getAllDefaultStakeholders(@RequestParam(required = false) String type) {
return this.stakeholderService.getAllDefaultByRole(type).stream()
.map(this.stakeholderService::getFullStakeholder)
.collect(Collectors.toList());
}
@RequestMapping(value = "/stakeholder", method = RequestMethod.GET)
public List<Stakeholder> getAllRealStakeholders(@RequestParam(required = false) String type,
public List<Stakeholder> getVisibleStakeholders(@RequestParam(required = false) String type,
@RequestParam(required = false) String defaultId) {
return stakeholderService.getStakeholdersByTypeAndRole(type, defaultId, false);
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/my-stakeholder", method = RequestMethod.GET)
public List<Stakeholder> getMyRealStakeholders(@RequestParam(required = false) String type) {
// log.debug("get my NOT default stakeholders" + (type != null ? " with type: "+type : ""));
public List<Stakeholder> getManagedStakeholders(@RequestParam(required = false) String type) {
return stakeholderService.getStakeholdersByTypeAndRole(type, null, true);
}
@RequestMapping(value = "/stakeholder/{alias:.+}", method = RequestMethod.GET)
public Stakeholder getStakeholder(@PathVariable("alias") String alias) {
// log.debug("get stakeholder: "+alias);
Stakeholder<String> stakeholder = stakeholderDAO.findByAlias(alias);
if(stakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Get stakeholder: Stakeholder with alias: "+alias+" not found");
public StakeholderFull getStakeholder(@PathVariable("alias") String alias) {
StakeholderFull stakeholder = this.stakeholderService.getFullStakeholder(this.stakeholderService.findByAlias(alias));
if (stakeholder == null) {
throw new ForbiddenException("Get stakeholder: You are not authorized to access stakeholder with alias: " + alias);
}
// List<String> roles = authorizationService.getRoles();
if(stakeholder.getDefaultId() == null && !rolesUtils.isLoggedIn()) {
// EXCEPTION - Unauthorized
throw new AccessDeniedException("Get stakeholder: You are not authorized (not logged in) to access stakeholder with alias: "+alias);
}
if(stakeholder.getDefaultId() == null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Get stakeholder: You are not authorized to access stakeholder with alias: "+alias);
}
if((stakeholder.getVisibility() == Visibility.PRIVATE && !rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())
|| (stakeholder.getVisibility() == Visibility.RESTRICTED && !rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias()) && !rolesUtils.isMember(stakeholder.getType(), stakeholder.getAlias())))) {
// // EXCEPTION - Access denied
// throw new ForbiddenException("Get stakeholder: You are not authorized to get stakeholder with alias: "+alias);
List<String> topicsEmpty = stakeholder.getTopics();
topicsEmpty.clear();
stakeholder.setTopics(topicsEmpty);
stakeholder.setVisibility(Visibility.PRIVATE);
return stakeholder;
}
return this.setFullEntities(stakeholder);
return stakeholder;
}
// @PreAuthorize("isAuthenticated()")
@PreAuthorize("hasAnyAuthority("
+ "@AuthorizationService.PORTAL_ADMIN, "
+ "@AuthorizationService.curator(#_stakeholder.getType()), "
+ "@AuthorizationService.manager(#_stakeholder.getType(), #_stakeholder.getAlias()) "
+ ")")
+ "@AuthorizationService.PORTAL_ADMIN, "
+ "@AuthorizationService.curator(#stakeholder.getType()), "
+ "@AuthorizationService.manager(#stakeholder.getType(), #stakeholder.getAlias()) "
+ ")")
@RequestMapping(value = "/save", method = RequestMethod.POST)
public Stakeholder saveStakeholder(@RequestBody Stakeholder _stakeholder) {
public StakeholderFull saveStakeholder(@RequestBody StakeholderFull stakeholder) {
log.debug("save stakeholder");
log.debug("Alias: "+_stakeholder.getAlias() + " - Id: "+_stakeholder.getId());
// if(_stakeholder == null) {
// log.debug("stakeholder null");
// // EXCEPTION - Parameter for Stakeholder is not accepted
// }
Stakeholder<String> stakeholder = new Stakeholder<>(_stakeholder);
Date date = new Date();
stakeholder.setUpdateDate(date);
List<String> topics = new ArrayList<>();
// stakeholder does not exist in DB
if(_stakeholder.getId() == null) {
stakeholder.setCreationDate(date);
// for(Topic topic : _stakeholder.getTopics()) {
// topics.add(topic.getId());
// }
} else {
Stakeholder<String> oldStakeholder = stakeholderDAO.findById(_stakeholder.getId());
if(oldStakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("save stakeholder: Stakeholder with id: "+_stakeholder.getId()+" not found");
}
for(String topicId : oldStakeholder.getTopics()) {
Topic topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Save stakeholder: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholder.getId()+")");
}
topics.add(topic.getId());
}
// stakeholder.setTopics(topics);
// _stakeholder = this.setFullEntities(stakeholder, rolesUtils.getRoles());
}
stakeholder.setTopics(topics);
Stakeholder<String> stakeholderSaved = stakeholderDAO.save(stakeholder);
_stakeholder.setId(stakeholderSaved.getId());
_stakeholder.setCreationDate(stakeholderSaved.getCreationDate());
_stakeholder.setUpdateDate(stakeholderSaved.getUpdateDate());
topics = null;
stakeholder = null;
stakeholderSaved = null;
return _stakeholder;
log.debug("Alias: " + stakeholder.getAlias() + " - Id: " + stakeholder.getId());
return this.stakeholderService.getFullStakeholder(this.stakeholderService.save(new Stakeholder(stakeholder)));
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/delete", method = RequestMethod.DELETE)
public boolean deleteStakeholder(@PathVariable("stakeholderId") String stakeholderId) {
public boolean deleteStakeholder(@PathVariable("stakeholderId") String id) {
log.debug("delete stakeholder");
log.debug("Id: "+stakeholderId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
String pid = null;
if(stakeholder != null) {
pid = stakeholder.getAlias();
// if(!roles.contains(authorizationService.PORTAL_ADMIN)
// && !roles.contains(authorizationService.curator(stakeholder.getType()))) {
if(!rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete stakeholder: You are not authorized to delete stakeholder with id: "+stakeholderId);
}
// for(String topicId : stakeholder.getTopics()) {
// Topic<String> 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<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);
// }
topicController.deleteTree(stakeholder);
stakeholder.setTopics(null);
stakeholderDAO.delete(stakeholderId);
log.debug("Stakeholder deleted!");
Portal portal = portalService.getPortal(pid);
if(portal != null) {
portalService.deletePortal(portal.getId());
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Delete stakeholder: Stakeholder with id: "+stakeholderId+" not found");
log.debug("Id: " + id);
Portal portal = portalService.getPortal(this.stakeholderService.delete(id));
if (portal != null) {
portalService.deletePortal(portal.getId());
}
return true;
}
// @RequestMapping(value = "/{stakeholderId}/toggle-status", method = RequestMethod.POST)
// public Boolean toggleStakeholderStatus(@PathVariable("stakeholderId") String stakeholderId) {
// log.debug("toggle stakeholder status (isActive)");
// log.debug("Stakeholder: "+stakeholderId);
//
// Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
// if (stakeholder == null) {
// // EXCEPTION - Stakeholder not found
// throw new EntityNotFoundException("Toggle stakeholder status: Stakeholder with id: "+stakeholderId+" not found");
// }
// stakeholder.setIsActive(!stakeholder.getIsActive());
//
// stakeholderDAO.save(stakeholder);
// log.debug("Stakeholder toggled!");
//
// return stakeholder.getIsActive();
// }
//
// @RequestMapping(value = "/{stakeholderId}/toggle-access", method = RequestMethod.POST)
// public Boolean toggleStakeholderAccess(@PathVariable("stakeholderId") String stakeholderId) {
// log.debug("toggle stakeholder access (isPublic)");
// log.debug("Stakeholder: "+stakeholderId);
//
// Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
// if (stakeholder == null) {
// // EXCEPTION - Stakeholder not found
// throw new EntityNotFoundException("Toggle stakeholder access: Stakeholder with id: "+stakeholderId+" not found");
// }
// stakeholder.setIsPublic(!stakeholder.getIsPublic());
//
// stakeholderDAO.save(stakeholder);
// log.debug("Stakeholder toggled!");
//
// return stakeholder.getIsPublic();
// }
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/change-visibility", method = RequestMethod.POST)
public Stakeholder changeStakeholderVisibility(@PathVariable("stakeholderId") String stakeholderId,
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
log.debug("change stakeholder visibility: "+visibility + " - toggle propagate: "+((propagate != null && propagate) ? "true" : "false"));
log.debug("Stakeholder: "+stakeholderId);
Stakeholder stakeholder = stakeholderDAO.findById(stakeholderId);
if (stakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Change stakeholder visibility: Stakeholder with id: "+stakeholderId+" not found");
}
// List<String> roles = authorizationService.getRoles();
// if(!roles.contains(authorizationService.PORTAL_ADMIN)
// && !roles.contains(authorizationService.curator(stakeholder.getType()))
// && !roles.contains(authorizationService.manager(stakeholder.getType(), stakeholder.getAlias()))) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Change stakeholder visibility: You are not authorized to update stakeholder with id: "+stakeholderId);
}
return changeStakeholderVisibilityTree(stakeholder, visibility, propagate);
public StakeholderFull changeStakeholderVisibility(@PathVariable("stakeholderId") String stakeholderId,
@RequestParam("visibility") Visibility visibility, @RequestParam(defaultValue = "false") Boolean propagate) {
log.debug("change stakeholder visibility: " + visibility + " - toggle propagate: " + propagate);
log.debug("Stakeholder: " + stakeholderId);
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
return this.stakeholderService.changeVisibility(stakeholder, visibility, propagate);
}
private Stakeholder changeStakeholderVisibilityTree(Stakeholder<String> stakeholder, Visibility visibility, Boolean propagate) {
Stakeholder<Topic> stakeholderFull = new Stakeholder<>(stakeholder);
List<Topic> topicsFull = new ArrayList<>();
if(propagate != null && propagate) {
for (String topicId : stakeholder.getTopics()) {
topicsFull.add(topicController.changeVisibilityTree(topicId, visibility, propagate));
}
}
stakeholder.setVisibility(visibility);
stakeholderDAO.save(stakeholder);
log.debug("Stakeholder toggled!");
stakeholderFull.setVisibility(visibility);
stakeholderFull.setTopics(topicsFull);
return stakeholder;
}
// The following are not supposed to be used
// @RequestMapping(value = "/stakeholder/dates", method = RequestMethod.GET)
// public List<Date> getAllStakeholderDates() {
// List<Stakeholder> profiles = stakeholderDAO.findAll();
// List<Date> 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<String> getAllStakeholderDates1() {
// List<Stakeholder> profiles = stakeholderDAO.findAll();
// List<String> 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<String> getAllStakeholderDates2() {
// List<Stakeholder> profiles = stakeholderDAO.findAll();
// List<String> 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;
// }
}

View File

@ -1,20 +1,21 @@
package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.entities.*;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
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.primitives.Visibility;
import eu.dnetlib.uoamonitorservice.service.CategoryService;
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
import eu.dnetlib.uoamonitorservice.service.SubCategoryService;
import eu.dnetlib.uoamonitorservice.service.TopicService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@RestController
@ -22,220 +23,31 @@ import java.util.List;
public class SubCategoryController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private RolesUtils rolesUtils;
private final StakeholderService stakeholderService;
private final TopicService topicService;
private final CategoryService categoryService;
private final SubCategoryService subCategoryService;
@Autowired
private StakeholderDAO stakeholderDAO;
@Autowired
private TopicDAO topicDAO;
@Autowired
private CategoryDAO categoryDAO;
@Autowired
private SubCategoryDAO subCategoryDAO;
@Autowired
private SectionDAO sectionDAO;
@Autowired
private IndicatorDAO indicatorDAO;
@Autowired
private SectionController sectionController;
public SubCategory<Section<Indicator>> buildSubCategory(SubCategory<Section<Indicator>> subcategoryFull) {
SubCategory<String> subCategory = new SubCategory<>(subcategoryFull);
List<String> sectionCharts = new ArrayList<>();
List<Section<Indicator>> sectionChartsFull = new ArrayList<>();
for(Section section : subcategoryFull.getCharts()) {
Section<Indicator> sectionFull = sectionController.buildSection(section);
sectionChartsFull.add(sectionFull);
sectionCharts.add(sectionFull.getId());
}
subcategoryFull.setCharts(sectionChartsFull);
subCategory.setCharts(sectionCharts);
List<String> sectionNumbers = new ArrayList<>();
List<Section<Indicator>> sectionNumbersFull = new ArrayList<>();
for(Section section : subcategoryFull.getNumbers()) {
Section<Indicator> sectionFull = sectionController.buildSection(section);
sectionNumbersFull.add(sectionFull);
sectionNumbers.add(sectionFull.getId());
}
subcategoryFull.setNumbers(sectionNumbersFull);
subCategory.setNumbers(sectionNumbers);
Date date = new Date();
subCategory.setCreationDate(date);
subCategory.setUpdateDate(date);
subcategoryFull.setCreationDate(date);
subcategoryFull.setUpdateDate(date);
subCategoryDAO.save(subCategory);
subcategoryFull.setId(subCategory.getId());
return subcategoryFull;
public SubCategoryController(StakeholderService stakeholderService, TopicService topicService, CategoryService categoryService, SubCategoryService subCategoryService) {
this.stakeholderService = stakeholderService;
this.topicService = topicService;
this.categoryService = categoryService;
this.subCategoryService = subCategoryService;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/save", method = RequestMethod.POST)
public SubCategory<Section<Indicator>> saveSubCategory(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@RequestBody SubCategory<Section<Indicator>> subcategoryFull) {
public SubCategoryFull saveSubCategory(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@RequestBody SubCategoryFull subcategoryFull) {
log.debug("save subcategory");
log.debug("Alias: "+subcategoryFull.getAlias() + " - Id: "+subcategoryFull.getId() + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
Category category = checkForExceptions(stakeholderId, topicId, categoryId);
SubCategory<String> subCategory = new SubCategory<>(subcategoryFull);
Date date = new Date();
subCategory.setUpdateDate(date);
subcategoryFull.setUpdateDate(date);
List<String> chartSections = new ArrayList<>();
List<String> numberSections = new ArrayList<>();
SubCategory<String> oldSubcategory = null;
if(subcategoryFull.getId() != null) {
oldSubcategory = subCategoryDAO.findById(subcategoryFull.getId());
if(oldSubcategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("save subcategory: SubCategory with id: " + subcategoryFull.getId() + " not found");
}
for(String chartSectionId : oldSubcategory.getCharts()) {
Section section = sectionDAO.findById(chartSectionId);
if (section == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Save subcategory: Chart section with id: "+chartSectionId+" not found (section exists in subcategory: "+subCategory.getId()+")");
}
chartSections.add(section.getId());
}
for(String numberSectionId : oldSubcategory.getNumbers()) {
Section section = sectionDAO.findById(numberSectionId);
if (section == null) {
// EXCEPTION - Section not found
throw new EntityNotFoundException("Save subcategory: Number section with id: "+numberSectionId+" not found (section exists in subcategory: "+subCategory.getId()+")");
}
numberSections.add(section.getId());
}
} else { // subcategory does not exist in DB
subCategory.setCreationDate(date);
subcategoryFull.setCreationDate(date);
for(Section chartSection : subcategoryFull.getCharts()) {
chartSections.add(chartSection.getId());
}
for(Section numberSection : subcategoryFull.getNumbers()) {
numberSections.add(numberSection.getId());
}
}
// List<String> charts = new ArrayList<>();
// for(Indicator chart : subcategoryFull.getCharts()) {
// charts.add(chart.getId());
// }
// subCategory.setCharts(charts);
//
// List<String> numbers = new ArrayList<>();
// for(Indicator numbr : subcategoryFull.getNumbers()) {
// numbers.add(numbr.getId());
// }
// subCategory.setNumbers(numbers);
subCategory.setCharts(chartSections);
subCategory.setNumbers(numberSections);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder.getDefaultId() == null) {
if(subcategoryFull.getId() == null) {
subCategoryDAO.save(subCategory);
onSaveDefaultSubCategory(subCategory, categoryId);
} else {
onUpdateDefaultSubCategory(subCategory, oldSubcategory);
subCategoryDAO.save(subCategory);
}
} else {
subCategoryDAO.save(subCategory);
}
List<String> subcategories = category.getSubCategories();
int index = subcategories.indexOf(subCategory.getId());
if(index == -1) {
subcategories.add(subCategory.getId());
categoryDAO.save(category);
log.debug("Subcategory saved!");
subcategoryFull.setId(subCategory.getId());
}
chartSections = null;
numberSections = null;
subCategory = null;
return subcategoryFull;
}
public void onSaveDefaultSubCategory(SubCategory subCategory, String categoryId) {
log.debug("On save default subCategory");
List<Category> categories = categoryDAO.findByDefaultId(categoryId);
for(Category category : categories) {
SubCategory subCategoryNew = new SubCategory();
subCategoryNew.copyFromDefault(subCategory);
subCategoryDAO.save(subCategoryNew);
List<String> subCategories = category.getSubCategories();
subCategories.add(subCategoryNew.getId());
categoryDAO.save(category);
}
}
public void onUpdateDefaultSubCategory(SubCategory subCategory, SubCategory oldSubcategory) {
log.debug("On update default subCategory");
List<SubCategory> subCategories = subCategoryDAO.findByDefaultId(subCategory.getId());
boolean changed = false;
for(SubCategory subCategoryBasedOnDefault : subCategories) {
if(subCategory.getName() != null && !subCategory.getName().equals(subCategoryBasedOnDefault.getName())
&& (oldSubcategory.getName() == null || oldSubcategory.getName().equals(subCategoryBasedOnDefault.getName()))) {
subCategoryBasedOnDefault.setName(subCategory.getName());
subCategoryBasedOnDefault.setAlias(subCategory.getAlias());
changed = true;
}
if(subCategory.getDescription() != null && !subCategory.getDescription().equals(subCategoryBasedOnDefault.getDescription())
&& (oldSubcategory.getDescription() == null || oldSubcategory.getDescription().equals(subCategoryBasedOnDefault.getDescription()))) {
subCategoryBasedOnDefault.setDescription(subCategory.getDescription());
changed = true;
}
if(!changed) {
// break;
continue;
}
// subCategoryBasedOnDefault.setName(subCategory.getName());
// subCategoryBasedOnDefault.setDescription(subCategory.getDescription());
subCategoryBasedOnDefault.setUpdateDate(subCategory.getUpdateDate());
subCategoryDAO.save(subCategoryBasedOnDefault);
}
log.debug("Alias: " + subcategoryFull.getAlias() + " - Id: " + subcategoryFull.getId() + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
return this.subCategoryService.save(stakeholder, category, new SubCategory(subcategoryFull));
}
@PreAuthorize("isAuthenticated()")
@ -246,325 +58,43 @@ public class SubCategoryController {
@PathVariable("subcategoryId") String subcategoryId,
@RequestParam(required = false) String children) {
log.debug("delete subcategory");
log.debug("Id: "+subcategoryId + " - Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
Category category = checkForExceptions(stakeholderId, topicId, categoryId);
SubCategory<String> subcategory = subCategoryDAO.findById(subcategoryId);
if(subcategory != null) {
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(subcategory.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete subcategory: You are not authorized to delete a default SubCategory in stakeholder with id: "+stakeholderId);
}
List<String> subcategories = category.getSubCategories();
int index = subcategories.indexOf(subcategoryId);
if(index != -1) {
// this subCategory belongs in default profile
if(category.getDefaultId() == null && children != null) {
onDeleteDefaultSubCategory(subcategoryId, categoryId, children);
}
// for(String chartSectionId : subcategory.getCharts()) {
// Section<String> chartSection = sectionDAO.findById(chartSectionId);
// if (chartSection == null) {
// // 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()) {
// 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);
// }
sectionController.deleteTree(subcategory);
subcategory.setCharts(null);
subcategory.setNumbers(null);
subcategories.remove(index);
categoryDAO.save(category);
subCategoryDAO.delete(subcategoryId);
log.debug("Subcategory deleted!");
} else {
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
throw new PathNotValidException("Delete subcategory: Subcategory with id: "+subcategoryId+" not found in Category: "+categoryId);
}
} else {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Delete subcategory: SubCategory with id: "+subcategoryId+" not found");
}
return true;
}
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!");
}
}
log.debug("Id: " + subcategoryId + " - Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
this.subCategoryService.delete(stakeholder.getType(), subCategory, true);
return true;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/reorder", method = RequestMethod.POST)
public List<SubCategory> reorderSubCategories(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@RequestBody List<String> subCategories) {
public List<SubCategoryFull> reorderSubCategories(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@RequestBody List<String> subCategories) {
log.debug("reorder subCategories");
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId);
Category<String> category = checkForExceptions(stakeholderId, topicId, categoryId);
List<String> oldSubcategories = category.getSubCategories();
for (String subcategoryId : oldSubcategories) {
if (!subCategories.contains(subcategoryId)) {
subCategories.add(subcategoryId);
}
}
category.setSubCategories(subCategories);
List<SubCategory> subCategoriesFull = new ArrayList<>();
for(String subCategoryId : subCategories) {
SubCategory subCategory = subCategoryDAO.findById(subCategoryId);
if(subCategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Reorder subCategories: subCategory with id: " + subCategoryId + " not found");
}
subCategoriesFull.add(subCategory);
}
categoryDAO.save(category);
log.debug("SubCategories reordered!");
return subCategoriesFull;
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId);
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
return this.categoryService.reorderSubCategories(stakeholder, category, subCategories).getSubCategories();
}
// @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/toggle-status", method = RequestMethod.POST)
// public Boolean toggleSubCategoryStatus(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId,
// @PathVariable("categoryId") String categoryId,
// @PathVariable("subcategoryId") String subcategoryId) {
// log.debug("toggle subCategory status (isActive)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
//
// SubCategory subCategory = subCategoryDAO.findById(subcategoryId);
// if (subCategory == null) {
// // EXCEPTION - SubCategory not found
// throw new EntityNotFoundException("Toggle subCategory status: SubCategory with id: "+subcategoryId+" not found");
// }
// subCategory.setIsActive(!subCategory.getIsActive());
//
// this.toggleSubCategory(stakeholderId, topicId, categoryId, subCategory);
//
// return subCategory.getIsActive();
// }
//
// @RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/toggle-access", method = RequestMethod.POST)
// public Boolean toggleSubCategoryAccess(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId,
// @PathVariable("categoryId") String categoryId,
// @PathVariable("subcategoryId") String subcategoryId) {
// log.debug("toggle subCategory access (isPublic)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
//
// SubCategory subCategory = subCategoryDAO.findById(subcategoryId);
// if (subCategory == null) {
// // EXCEPTION - SubCategory not found
// throw new EntityNotFoundException("Toggle subCategory access: SubCategory with id: "+subcategoryId+" not found");
// }
// subCategory.setIsPublic(!subCategory.getIsPublic());
//
// this.toggleSubCategory(stakeholderId, topicId, categoryId, subCategory);
//
// return subCategory.getIsPublic();
// }
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/{categoryId}/{subcategoryId}/change-visibility", method = RequestMethod.POST)
public SubCategory changeSubCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@PathVariable("subcategoryId") String subcategoryId,
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
log.debug("change subCategory visibility: "+visibility + " - toggle propagate: "+((propagate != null && propagate) ? "true" : "false"));
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId + " - Category: "+categoryId+ " - SubCategory: "+subcategoryId);
SubCategory subCategory = subCategoryDAO.findById(subcategoryId);
if (subCategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Change subCategory visibility: SubCategory with id: "+subcategoryId+" not found");
}
Category category = checkForExceptions(stakeholderId, topicId, categoryId);
if (category.getSubCategories().contains(subcategoryId)) {
return changeVisibilityTree(subcategoryId, visibility, propagate);
} else {
// EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
throw new PathNotValidException("Toggle subCategory: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId);
}
}
public SubCategory changeVisibilityTree(String subCategoryId, Visibility visibility, Boolean propagate) {
SubCategory<String> subCategory = subCategoryDAO.findById(subCategoryId);
if (subCategory == null) {
// EXCEPTION - SubCategory not found
throw new EntityNotFoundException("Change subCategory visibility: SubCategory with id: " + subCategoryId + " not found");
}
SubCategory<Section> subCategoryFull = new SubCategory(subCategory);
List<Section> chartsFull = new ArrayList();
List<Section> numbersFull = new ArrayList();
if (propagate != null && propagate) {
for (String sectionId : subCategory.getCharts()) {
chartsFull.add(sectionController.changeVisibilityTree(sectionId, visibility));
}
for (String sectionId : subCategory.getNumbers()) {
numbersFull.add(sectionController.changeVisibilityTree(sectionId, visibility));
}
}
subCategory.setVisibility(visibility);
subCategoryDAO.save(subCategory);
log.debug("SubCategory toggled!");
subCategoryFull.setVisibility(visibility);
subCategoryFull.setCharts(chartsFull);
subCategoryFull.setNumbers(numbersFull);
return subCategoryFull;
}
private Category checkForExceptions(String stakeholderId, String topicId, String categoryId) {
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder == null) {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Save indicator: Stakeholder with id: " + stakeholderId + " not found");
}
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("CheckForExceptions SubCategory: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Save indicator: Topic with id: "+topicId+" not found");
}
if(!stakeholder.getTopics().contains(topicId)) {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Save indicator: Topic with id: " + topicId + " not found in Stakeholder: " + stakeholderId);
}
Category<String> category = categoryDAO.findById(categoryId);
if(category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Save indicator: Category with id: "+categoryId+" not found");
}
if(!topic.getCategories().contains(categoryId)) {
// EXCEPTION - Category not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias();
throw new PathNotValidException("Save indicator: Category with id: "+categoryId+" not found in Topic: "+topicId);
}
// SubCategory<String> subcategory = subCategoryDAO.findById(subcategoryId);
// if(subcategory == null) {
// // EXCEPTION - SubCategory not found
// throw new EntityNotFoundException("Save indicator: SubCategory with id: "+subcategoryId+" not found");
// }
//
// if (!category.getSubCategories().contains(subcategoryId)) {
// // EXCEPTION - SubCategory not found in Stakeholder: stakeholder.getAlias(); -> Topic: topic.getAlias(); -> Category: category.getAlias();
// throw new PathNotValidException("Save indicator: SubCategory with id: "+subcategoryId+" not found in Category: "+categoryId);
// }
return 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);
}
public SubCategoryFull changeSubCategoryVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@PathVariable("categoryId") String categoryId,
@PathVariable("subcategoryId") String subcategoryId,
@RequestParam("visibility") Visibility visibility,
@RequestParam(defaultValue = "false") Boolean propagate) {
log.debug("change subCategory visibility: " + visibility + " - toggle propagate: " + propagate);
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId + " - Category: " + categoryId + " - SubCategory: " + subcategoryId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
Category category = this.categoryService.findByPath(topic, categoryId);
SubCategory subCategory = this.subCategoryService.findByPath(category, subcategoryId);
return this.subCategoryService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), subCategory, visibility, propagate);
}
}

View File

@ -1,44 +0,0 @@
package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@CrossOrigin(origins = "*")
public class TestController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private StakeholderDAO stakeholderDAO;
// @RequestMapping("/")
// public String index() {
// return "Greetings from Spring Boot!";
// }
// Check ExceptionHandler
@RequestMapping(value = "/test-error1", method = RequestMethod.GET)
public Stakeholder getFirstStakeholder() {
List<Stakeholder> stakeholders;
stakeholders = stakeholderDAO.findAll();
return stakeholders.get(0);
}
@RequestMapping(value = "/test-error2", method = RequestMethod.GET)
public String getParam(@RequestParam String param) {
return param;
}
@RequestMapping(value = "/test-error3", method = RequestMethod.GET)
public String getSubstringOfNull() {
String str = null;
return str.substring(2);
}
}

View File

@ -1,20 +1,17 @@
package eu.dnetlib.uoamonitorservice.controllers;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.entities.*;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import eu.dnetlib.uoamonitorservice.service.StakeholderService;
import eu.dnetlib.uoamonitorservice.service.TopicService;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
@RestController
@ -22,179 +19,22 @@ import java.util.List;
public class TopicController {
private final Logger log = LogManager.getLogger(this.getClass());
@Autowired
private RolesUtils rolesUtils;
private final TopicService topicService;
private final StakeholderService stakeholderService;
@Autowired
private StakeholderDAO stakeholderDAO;
@Autowired
private TopicDAO topicDAO;
@Autowired
private CategoryController categoryController;
@Autowired
private CategoryDAO categoryDAO;
public Topic<Category> buildTopic(Topic<Category> topicFull) {
Topic<String> topic = new Topic<>(topicFull);
List<String> categories = new ArrayList<>();
List<Category> categoriesFull = new ArrayList<>();
for(Category<SubCategory> category : topicFull.getCategories()) {
Category<SubCategory> categoryFull = categoryController.buildCategory(category);
categoriesFull.add(categoryFull);
categories.add(categoryFull.getId());
}
topicFull.setCategories(categoriesFull);
topic.setCategories(categories);
Date date = new Date();
topic.setCreationDate(date);
topic.setUpdateDate(date);
topicFull.setCreationDate(date);
topicFull.setUpdateDate(date);
topicDAO.save(topic);
topicFull.setId(topic.getId());
return topicFull;
public TopicController(TopicService topicService, StakeholderService stakeholderService) {
this.topicService = topicService;
this.stakeholderService = stakeholderService;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/save", method = RequestMethod.POST)
public Topic<Category> saveTopic(@PathVariable("stakeholderId") String stakeholderId,
@RequestBody Topic<Category> topicFull) {
public TopicFull saveTopic(@PathVariable("stakeholderId") String stakeholderId, @RequestBody TopicFull topicFull) {
log.debug("save topic");
log.debug("Alias: "+topicFull.getAlias() + " - Id: "+topicFull.getId()+ " - Stakeholder: "+stakeholderId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Save Topic: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = new Topic<>(topicFull);
Date date = new Date();
topic.setUpdateDate(date);
topicFull.setUpdateDate(date);
List<String> categories = new ArrayList<>();
Topic<String> oldTopic = null;
if(topicFull.getId() != null) {
oldTopic = topicDAO.findById(topicFull.getId());
if(oldTopic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("save topic: Topic with id: "+topicFull.getId()+" not found");
}
for(String categoryId : oldTopic.getCategories()) {
Category category = categoryDAO.findById(categoryId);
if (category == null) {
// EXCEPTION - Category not found
throw new EntityNotFoundException("Save topic: Category with id: "+categoryId+" not found (category exists in topic: "+topic.getId()+")");
}
categories.add(category.getId());
}
} else { // topic does not exist in DB
topic.setCreationDate(date);
topicFull.setCreationDate(date);
for(Category category : topicFull.getCategories()) {
categories.add(category.getId());
}
}
topic.setCategories(categories);
if(stakeholder.getDefaultId() == null) {
if(topicFull.getId() == null) {
topicDAO.save(topic);
onSaveDefaultTopic(topic, stakeholderId);
} else {
onUpdateDefaultTopic(topic, oldTopic);
topicDAO.save(topic);
}
} else {
topicDAO.save(topic);
}
List<String> topics = stakeholder.getTopics();
int index = topics.indexOf(topic.getId());
if(index == -1) {
topics.add(topic.getId());
stakeholderDAO.save(stakeholder);
log.debug("Topic saved!");
topicFull.setId(topic.getId());
}
categories = null;
topic = null;
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Save topic: Stakeholder with id: "+stakeholderId+" not found");
}
return topicFull;
}
public void onSaveDefaultTopic(Topic topic, String stakeholderId) {
log.debug("On save default topic");
List<Stakeholder> stakeholders = stakeholderDAO.findByDefaultId(stakeholderId);
for(Stakeholder _stakeholder : stakeholders) {
Topic topicNew = new Topic();
topicNew.copyFromDefault(topic);
topicDAO.save(topicNew);
List<String> topics = _stakeholder.getTopics();
topics.add(topicNew.getId());
stakeholderDAO.save(_stakeholder);
}
}
public void onUpdateDefaultTopic(Topic topic, Topic oldTopic) {
log.debug("On update default topic");
List<Topic> topics = topicDAO.findByDefaultId(topic.getId());
boolean changed = false;
for(Topic topicBasedOnDefault : topics) {
if(topic.getName() != null && !topic.getName().equals(topicBasedOnDefault.getName())
&& (oldTopic.getName() == null || oldTopic.getName().equals(topicBasedOnDefault.getName()))) {
topicBasedOnDefault.setName(topic.getName());
topicBasedOnDefault.setAlias(topic.getAlias());
changed = true;
}
if(topic.getDescription() != null && !topic.getDescription().equals(topicBasedOnDefault.getDescription())
&& (oldTopic.getDescription() == null || oldTopic.getDescription().equals(topicBasedOnDefault.getDescription()))) {
topicBasedOnDefault.setDescription(topic.getDescription());
changed = true;
}
if(topic.getIcon() != null && !topic.getIcon().equals(topicBasedOnDefault.getIcon())
&& (oldTopic.getIcon() == null || oldTopic.getIcon().equals(topicBasedOnDefault.getIcon()))) {
topicBasedOnDefault.setIcon(topic.getIcon());
changed = true;
}
if(!changed) {
// break;
continue;
}
// topicBasedOnDefault.setName(topic.getName());
// topicBasedOnDefault.setDescription(topic.getDescription());
topicBasedOnDefault.setUpdateDate(topic.getUpdateDate());
topicDAO.save(topicBasedOnDefault);
}
log.debug("Alias: " + topicFull.getAlias() + " - Id: " + topicFull.getId() + " - Stakeholder: " + stakeholderId);
Stakeholder stakeholder = this.stakeholderService.findByPath(stakeholderId);
return this.topicService.save(stakeholder, new Topic(topicFull));
}
@PreAuthorize("isAuthenticated()")
@ -203,296 +43,33 @@ public class TopicController {
@PathVariable("topicId") String topicId,
@RequestParam(required = false) String children) {
log.debug("delete topic");
log.debug("Id: "+topicId + " - Stakeholder: "+stakeholderId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete topic: You are not authorized to update stakeholder with id: "+stakeholderId);
}
Topic<String> topic = topicDAO.findById(topicId);
if(topic != null) {
if(topic.getDefaultId() != null && !rolesUtils.hasCreateAndDeleteAuthority(stakeholder.getType())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Delete topic: You are not authorized to delete a default Topic in stakeholder with id: "+stakeholderId);
}
List<String> topics = stakeholder.getTopics();
int index = topics.indexOf(topicId);
if(index != -1) {
// this topic belongs in default profile
if(stakeholder.getDefaultId() == null && children != null) {
onDeleteDefaultTopic(topicId, stakeholderId, children);
}
// 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);
topics.remove(index);
stakeholderDAO.save(stakeholder);
topicDAO.delete(topicId);
log.debug("Topic deleted!");
} else {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Delete topic: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId);
}
} else {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Delete topic: Topic with id: "+topicId+" not found");
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Delete topic: Stakeholder with id: "+stakeholderId+" not found");
}
log.debug("Id: " + topicId + " - Stakeholder: " + stakeholderId);
Stakeholder stakeholder = stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
this.topicService.delete(stakeholder.getType(), topic, 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()+" cleared!");
}
}
return true;
}
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/reorder", method = RequestMethod.POST)
public List<Topic> reorderTopics(@PathVariable("stakeholderId") String stakeholderId,
@RequestBody List<String> topics) {
public List<TopicFull> reorderTopics(@PathVariable("stakeholderId") String stakeholderId,
@RequestBody List<String> topics) {
log.debug("reorder topics");
log.debug("Stakeholder: "+stakeholderId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if(stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Reorder topics: You are not authorized to update stakeholder with id: "+stakeholderId);
}
List<String> oldTopics = stakeholder.getTopics();
for (String topicId : oldTopics) {
if (!topics.contains(topicId)) {
topics.add(topicId);
}
}
stakeholder.setTopics(topics);
List<Topic> topicsFull = new ArrayList<>();
for (String topicId : topics) {
Topic topic = topicDAO.findById(topicId);
if(topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Reorder Topics: Topic with id: " + topicId + " not found");
}
topicsFull.add(topic);
}
stakeholderDAO.save(stakeholder);
log.debug("Topics reordered!");
return topicsFull;
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Reorder topics: Stakeholder with id: "+stakeholderId+" not found");
}
log.debug("Stakeholder: " + stakeholderId);
Stakeholder stakeholder = stakeholderService.findByPath(stakeholderId);
return this.stakeholderService.reorderTopics(stakeholder, topics).getTopics();
}
// @RequestMapping(value = "/{stakeholderId}/{topicId}/toggle-status", method = RequestMethod.POST)
// public Boolean toggleTopicStatus(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId) {
// log.debug("toggle topic status (isActive)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId);
//
// Topic topic = topicDAO.findById(topicId);
// if (topic == null) {
// // EXCEPTION - Topic not found
// throw new EntityNotFoundException("Toggle topic status: Topic with id: "+topicId+" not found");
// }
// topic.setIsActive(!topic.getIsActive());
//
// this.toggleTopic(stakeholderId, topic);
//
// return topic.getIsActive();
// }
//
// @RequestMapping(value = "/{stakeholderId}/{topicId}/toggle-access", method = RequestMethod.POST)
// public Boolean toggleTopicAccess(@PathVariable("stakeholderId") String stakeholderId,
// @PathVariable("topicId") String topicId) {
// log.debug("toggle topic access (isPublic)");
// log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId);
//
// Topic topic = topicDAO.findById(topicId);
// if (topic == null) {
// // EXCEPTION - Topic not found
// throw new EntityNotFoundException("Toggle topic access: Topic with id: "+topicId+" not found");
// }
// topic.setIsPublic(!topic.getIsPublic());
//
// this.toggleTopic(stakeholderId, topic);
//
// return topic.getIsPublic();
// }
@PreAuthorize("isAuthenticated()")
@RequestMapping(value = "/{stakeholderId}/{topicId}/change-visibility", method = RequestMethod.POST)
public Topic changeTopicVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@RequestParam("visibility") Visibility visibility, @RequestParam(required = false) Boolean propagate) {
log.debug("change topic visibility: "+visibility + " - toggle propagate: "+((propagate != null && propagate) ? "true" : "false"));
log.debug("Stakeholder: "+stakeholderId + " - Topic: "+topicId);
Stakeholder<String> stakeholder = stakeholderDAO.findById(stakeholderId);
if (stakeholder != null) {
if(!rolesUtils.hasUpdateAuthority(stakeholder.getType(), stakeholder.getAlias())) {
// EXCEPTION - Access denied
throw new ForbiddenException("Toggle topic: You are not authorized to update stakeholder with id: "+stakeholderId);
}
if (stakeholder.getTopics().contains(topicId)) {
return changeVisibilityTree(topicId, visibility, propagate);
} else {
// EXCEPTION - Topic not found in Stakeholder: stakeholder.getAlias();
throw new PathNotValidException("Toggle topic: Topic with id: "+topicId+" not found in Stakeholder: "+stakeholderId);
}
} else {
// EXCEPTION - Stakeholder not found
throw new EntityNotFoundException("Toggle topic: Stakeholder with id: "+stakeholderId+" not found");
}
// this.toggleTopic(stakeholderId, topic);
}
public Topic changeVisibilityTree(String topicId, Visibility visibility, Boolean propagate) {
Topic<String> topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Change topic visibility: Topic with id: "+topicId+" not found");
}
Topic<Category> topicFull = new Topic(topic);
List<Category> categoriesFull = new ArrayList<>();
if(propagate != null && propagate) {
for (String categoryId : topic.getCategories()) {
categoriesFull.add(categoryController.changeVisibilityTree(categoryId, visibility, propagate));
}
}
topic.setVisibility(visibility);
topicDAO.save(topic);
log.debug("Topic toggled!");
topicFull.setVisibility(visibility);
topicFull.setCategories(categoriesFull);
return topicFull;
}
public void deleteTree(Stakeholder stakeholder) {
List<String> topics = stakeholder.getTopics();
for(String topicId : topics) {
Topic topic = topicDAO.findById(topicId);
if (topic == null) {
// EXCEPTION - Topic not found
throw new EntityNotFoundException("Topic delete tree: Topic with id: "+topicId+" not found (topic exists in stakeholder: "+stakeholder.getId()+")");
}
categoryController.deleteTree(topic);
topicDAO.delete(topicId);
}
public TopicFull changeTopicVisibility(@PathVariable("stakeholderId") String stakeholderId,
@PathVariable("topicId") String topicId,
@RequestParam("visibility") Visibility visibility, @RequestParam(defaultValue = "false") Boolean propagate) {
log.debug("change topic visibility: " + visibility + " - toggle propagate: " + propagate);
log.debug("Stakeholder: " + stakeholderId + " - Topic: " + topicId);
Stakeholder stakeholder = this.stakeholderService.find(stakeholderId);
Topic topic = this.topicService.findByPath(stakeholder, topicId);
return this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topic, visibility, propagate);
}
}

View File

@ -1,16 +1,20 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Category;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
public interface CategoryDAO {
@Repository
public interface CategoryDAO extends MongoRepository<Category, String> {
List<Category> findAll();
List<Category> findByDefaultId(String DefaultId);
Category findBySubCategoriesContaining(String subCategory);
List<Category> findBySubCategoriesContaining(String subCategory);
Category findById(String Id);
Optional<Category> findById(String Id);
void delete(String Id);

View File

@ -1,14 +1,18 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Indicator;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
public interface IndicatorDAO {
@Repository
public interface IndicatorDAO extends MongoRepository<Indicator, String> {
List<Indicator> findAll();
List<Indicator> findByDefaultId(String DefaultId);
Indicator findById(String Id);
Optional<Indicator> findById(String Id);
void delete(String Id);

View File

@ -1,19 +0,0 @@
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<Category, String> {
List<Category> findAll();
List<Category> findByDefaultId(String DefaultId);
Category findBySubCategoriesContaining(String subCategory);
Category findById(String Id);
void delete(String Id);
Category save(Category category);
}

View File

@ -1,18 +0,0 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Indicator;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface MongoDBIndicatorDAO extends IndicatorDAO, MongoRepository<Indicator, String> {
List<Indicator> findAll();
List<Indicator> findByDefaultId(String DefaultId);
Indicator findById(String Id);
void delete(String Id);
Indicator save(Indicator indicator);
//List<Indicator> saveAll(List<Indicator> indicators);
}

View File

@ -1,17 +0,0 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Section;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface MongoDBSectionDAO extends SectionDAO, MongoRepository<Section, String> {
List<Section> findAll();
List<Section> findByDefaultId(String DefaultId);
Section findById(String Id);
void delete(String Id);
Section save(Section indicator);
}

View File

@ -1,26 +0,0 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import org.springframework.data.mongodb.repository.MongoRepository;
import java.util.List;
public interface MongoDBStakeholderDAO extends StakeholderDAO, MongoRepository<Stakeholder, String> {
List<Stakeholder> findAll();
List<Stakeholder> findByType(String Type);
List<Stakeholder> findByDefaultId(String DefaultId);
List<Stakeholder> findByDefaultIdAndType(String DefaultId, String Type);
List<Stakeholder> findByDefaultIdNot(String DefaultId);
List<Stakeholder> findByDefaultIdNotAndType(String DefaultId, String Type);
Stakeholder findByTopicsContaining(String topic);
Stakeholder findById(String Id);
Stakeholder findByAlias(String Alias);
void delete(String Id);
Stakeholder save(Stakeholder stakeholder);
}

View File

@ -1,17 +0,0 @@
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<SubCategory, String> {
List<SubCategory> findAll();
List<SubCategory> findByDefaultId(String DefaultId);
SubCategory findById(String Id);
void delete(String Id);
SubCategory save(SubCategory subCategory);
}

View File

@ -1,19 +0,0 @@
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<Topic, String> {
List<Topic> findAll();
List<Topic> findByDefaultId(String DefaultId);
Topic findByCategoriesContaining(String category);
Topic findById(String Id);
void delete(String Id);
Topic save(Topic topic);
}

View File

@ -1,14 +1,19 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Section;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
public interface SectionDAO {
@Repository
public interface SectionDAO extends MongoRepository<Section, String> {
List<Section> findAll();
List<Section> findByDefaultId(String DefaultId);
List<Section> findByIndicatorsContaining(String id);
Section findById(String Id);
Optional<Section> findById(String Id);
void delete(String Id);

View File

@ -1,10 +1,14 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
public interface StakeholderDAO {
@Repository
public interface StakeholderDAO extends MongoRepository<Stakeholder, String> {
List<Stakeholder> findAll();
List<Stakeholder> findByType(String Type);
@ -14,10 +18,10 @@ public interface StakeholderDAO {
List<Stakeholder> findByDefaultIdNot(String DefaultId);
List<Stakeholder> findByDefaultIdNotAndType(String DefaultId, String Type);
Stakeholder findByTopicsContaining(String topic);
List<Stakeholder> findByTopicsContaining(String topic);
Stakeholder findById(String Id);
Stakeholder findByAlias(String Alias);
Optional<Stakeholder> findById(String Id);
Optional<Stakeholder> findByAlias(String Alias);
void delete(String Id);

View File

@ -1,14 +1,20 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.SubCategory;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
public interface SubCategoryDAO {
@Repository
public interface SubCategoryDAO extends MongoRepository<SubCategory, String> {
List<SubCategory> findAll();
List<SubCategory> findByDefaultId(String DefaultId);
List<SubCategory> findByDefaultId(String defaultId);
List<SubCategory> findByNumbersContaining(String id);
List<SubCategory> findByChartsContaining(String id);
SubCategory findById(String Id);
Optional<SubCategory> findById(String Id);
void delete(String Id);

View File

@ -1,16 +1,20 @@
package eu.dnetlib.uoamonitorservice.dao;
import eu.dnetlib.uoamonitorservice.entities.Topic;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Optional;
public interface TopicDAO {
@Repository
public interface TopicDAO extends MongoRepository<Topic, String> {
List<Topic> findAll();
List<Topic> findByDefaultId(String DefaultId);
Topic findByCategoriesContaining(String category);
List<Topic> findByCategoriesContaining(String category);
Topic findById(String Id);
Optional<Topic> findById(String Id);
void delete(String Id);

View File

@ -0,0 +1,18 @@
package eu.dnetlib.uoamonitorservice.dto;
import eu.dnetlib.uoamonitorservice.generics.CategoryGeneric;
import java.util.List;
import java.util.Objects;
public class CategoryFull extends CategoryGeneric<SubCategoryFull> {
public CategoryFull() {
super();
}
public CategoryFull(CategoryGeneric category, List<SubCategoryFull> subCategories) {
super(category);
subCategories.removeIf(Objects::isNull);
this.subCategories = subCategories;
}
}

View File

@ -0,0 +1,40 @@
package eu.dnetlib.uoamonitorservice.dto;
public class MoveIndicator {
private String target;
private SectionInfo from;
private SectionInfo to;
public MoveIndicator() {
}
public MoveIndicator(String target, SectionInfo from, SectionInfo to) {
this.target = target;
this.from = from;
this.to = to;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public SectionInfo getFrom() {
return from;
}
public void setFrom(SectionInfo from) {
this.from = from;
}
public SectionInfo getTo() {
return to;
}
public void setTo(SectionInfo to) {
this.to = to;
}
}

View File

@ -0,0 +1,32 @@
package eu.dnetlib.uoamonitorservice.dto;
import eu.dnetlib.uoamonitorservice.entities.Indicator;
import eu.dnetlib.uoamonitorservice.entities.Section;
import eu.dnetlib.uoamonitorservice.generics.SectionGeneric;
import io.swagger.models.auth.In;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
public class SectionFull extends SectionGeneric<Indicator> {
public SectionFull() {}
public SectionFull(Section section, List<Indicator> indicators) {
super(section);
indicators.removeIf(Objects::isNull);
this.indicators = indicators;
}
public Optional<Indicator> getIndicatorByDefaultId(String id) {
return this.indicators.stream().filter(indicator -> indicator.getDefaultId().equals(id)).findFirst();
}
public void removeIndicator(String id) {
this.indicators.removeIf(indicator -> indicator.getId().equals(id));
}
public void addIndicator(Indicator indicator) {
this.indicators.add(indicator);
}
}

View File

@ -0,0 +1,32 @@
package eu.dnetlib.uoamonitorservice.dto;
import java.util.List;
public class SectionInfo {
private String id;
private List<String> indicators;
public SectionInfo() {
}
public SectionInfo(String id, List<String> indicators) {
this.id = id;
this.indicators = indicators;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public List<String> getIndicators() {
return indicators;
}
public void setIndicators(List<String> indicators) {
this.indicators = indicators;
}
}

View File

@ -0,0 +1,19 @@
package eu.dnetlib.uoamonitorservice.dto;
import eu.dnetlib.uoamonitorservice.generics.StakeholderGeneric;
import java.util.List;
import java.util.Objects;
public class StakeholderFull extends StakeholderGeneric<TopicFull> {
public StakeholderFull() {
super();
}
public StakeholderFull(StakeholderGeneric stakeholder, List<TopicFull> topics) {
super(stakeholder);
topics.removeIf(Objects::isNull);
this.topics = topics;
}
}

View File

@ -0,0 +1,26 @@
package eu.dnetlib.uoamonitorservice.dto;
import eu.dnetlib.uoamonitorservice.generics.SubCategoryGeneric;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
public class SubCategoryFull extends SubCategoryGeneric<SectionFull> {
public SubCategoryFull() {}
public SubCategoryFull(SubCategoryGeneric subCategory, List<SectionFull> numbers, List<SectionFull> charts) {
super(subCategory);
numbers.removeIf(Objects::isNull);
charts.removeIf(Objects::isNull);
this.numbers = numbers;
this.charts = charts;
}
public Optional<SectionFull> getSectionByDefaultId(String id) {
List<SectionFull> sections = new ArrayList<>(this.numbers);
sections.addAll(this.charts);
return sections.stream().filter(section -> section.getDefaultId().equals(id)).findFirst();
}
}

View File

@ -0,0 +1,18 @@
package eu.dnetlib.uoamonitorservice.dto;
import eu.dnetlib.uoamonitorservice.generics.TopicGeneric;
import java.util.List;
import java.util.Objects;
public class TopicFull extends TopicGeneric<CategoryFull> {
public TopicFull() {
super();
}
public TopicFull(TopicGeneric topic, List<CategoryFull> categories) {
super(topic);
categories.removeIf(Objects::isNull);
this.categories = categories;
}
}

View File

@ -1,129 +1,57 @@
package eu.dnetlib.uoamonitorservice.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.data.annotation.Id;
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
import eu.dnetlib.uoamonitorservice.generics.CategoryGeneric;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.TopicGeneric;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class Category<StringOrSubcategory> {
@Id
@JsonProperty("_id")
private String id;
@Document
public class Category extends CategoryGeneric<String> {
public Category() {
super();
}
private String name;
private String alias;
private String description;
private Visibility visibility = Visibility.PRIVATE;
private Date creationDate;
private Date updateDate;
private boolean isOverview;
private String defaultId;
private List<StringOrSubcategory> subCategories;
public Category() {}
public Category(Category category) {
id = category.getId();
name = category.getName();
alias = category.getAlias();
description = category.getDescription();
setVisibility(category.getVisibility());
creationDate = category.getCreationDate();
updateDate = category.getUpdateDate();
isOverview = category.getIsOverview();
defaultId = category.getDefaultId();
super(category);
}
public void copyFromDefault(Category defaultCategory) {
setName(defaultCategory.getName());
setAlias(defaultCategory.getAlias());
setDescription(defaultCategory.getDescription());
setVisibility(defaultCategory.getVisibility());
setCreationDate(defaultCategory.getCreationDate());
setUpdateDate(defaultCategory.getUpdateDate());
setIsOverview(defaultCategory.getIsOverview());
setDefaultId(defaultCategory.getId());
setSubCategories(new ArrayList());
public Category(CategoryFull category) {
super(category);
this.subCategories = category.getSubCategories().stream().map(Common::getId).collect(Collectors.toList());
this.subCategories.removeIf(Objects::isNull);
}
public String getId() {
return id;
public Category copy() {
Category category = new Category(this);
category.setDefaultId(this.getId());
category.setId(null);
return category;
}
public void setId(String id) {
this.id = id;
public Category override(Category category, Category old) {
return (Category) super.override(category, old);
}
public String getName() {
return name;
public SubCategory createOverview() {
SubCategory subCategory = new SubCategory();
subCategory.setName("Overview");
subCategory.setAlias("overview");
subCategory.setVisibility(this.getVisibility());
subCategory.setCharts(new ArrayList<>());
subCategory.setNumbers(new ArrayList<>());
return subCategory;
}
public void setName(String name) {
this.name = name;
public void addSubCategory(String id) {
this.subCategories.add(id);
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public boolean getIsOverview() {
return isOverview;
}
public void setIsOverview(boolean isOverview) {
this.isOverview = isOverview;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<StringOrSubcategory> getSubCategories() {
return subCategories;
}
public void setSubCategories(List<StringOrSubcategory> subCategories) {
this.subCategories = subCategories;
public void removeSubCategory(String id) {
this.subCategories.remove(id);
}
}

View File

@ -1,78 +1,67 @@
package eu.dnetlib.uoamonitorservice.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorPath;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorSize;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorType;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.Date;
import java.util.List;
enum IndicatorType {
// Do not rename or remove existring values. This may cause problems with already stored values in DB
number, chart,
NUMBER, CHART;
}
enum IndicatorSize {
// Do not rename or remove existring values. This may cause problems with already stored values in DB
small, medium, large,
SMALL, MEDIUM, LARGE;
}
public class Indicator {
@Id
@JsonProperty("_id")
private String id;
private String name;
private String description;
public class Indicator extends Common {
private String additionalDescription;
private IndicatorType type; //number,chart
private IndicatorSize width; //small,medium,large
private IndicatorSize height = IndicatorSize.MEDIUM; //small,medium,large
private List<String> tags; // this field is not used anywhere now
private Visibility visibility = Visibility.PRIVATE;
private Date creationDate;
private Date updateDate;
private String defaultId;
private List<IndicatorPath> indicatorPaths;
public void copyFromDefault(Indicator defaultIndicator, Visibility visibility) {
setName(defaultIndicator.getName());
setDescription(defaultIndicator.getDescription());
setAdditionalDescription(defaultIndicator.getAdditionalDescription());
setType(defaultIndicator.getType());
setWidth(defaultIndicator.getWidth());
setHeight(defaultIndicator.getHeight());
setTags(defaultIndicator.getTags());
setVisibility(visibility);
setCreationDate(defaultIndicator.getCreationDate());
setUpdateDate(defaultIndicator.getUpdateDate());
setDefaultId(defaultIndicator.getId());
setIndicatorPaths(defaultIndicator.getIndicatorPaths());
public Indicator() {}
public Indicator(Indicator indicator) {
id = indicator.getId();
defaultId = indicator.getDefaultId();
name = indicator.getName();
description = indicator.getDescription();
additionalDescription = indicator.getAdditionalDescription();
creationDate = indicator.getCreationDate();
updateDate = indicator.getUpdateDate();
visibility = indicator.getVisibility();
indicatorPaths = indicator.getIndicatorPaths();
tags = indicator.getTags();
setType(indicator.getType());
width = indicator.getWidth();
height = indicator.getHeight();
}
public String getId() {
return id;
public Indicator copy() {
Indicator indicator = new Indicator(this);
indicator.setDefaultId(this.getId());
indicator.setId(null);
return indicator;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
public Indicator override(Indicator indicator, Indicator old) {
indicator = (Indicator) super.override(indicator, old);
if(this.getAdditionalDescription() != null && !this.getAdditionalDescription().equals(indicator.getAdditionalDescription()) &&
(old.getAdditionalDescription() == null || old.getAdditionalDescription().equals(indicator.getAdditionalDescription()))) {
indicator.setAdditionalDescription(this.getAdditionalDescription());
}
if(this.getWidth() != null && !this.getWidth().equals(indicator.getWidth()) &&
(old.getWidth() == null || old.getWidth().equals(indicator.getWidth()))) {
indicator.setWidth(this.getWidth());
}
if(this.getHeight() != null && !this.getHeight().equals(indicator.getHeight()) &&
(old.getHeight() == null || old.getHeight().equals(indicator.getHeight()))) {
indicator.setHeight(this.getHeight());
}
indicator.setIndicatorPaths(this.getIndicatorPaths());
return indicator;
}
public String getAdditionalDescription() {
@ -90,13 +79,6 @@ public class Indicator {
return type.name();
}
// public String getStringType() {
// return type.name();
// }
// public void setType(IndicatorType type) {
// this.type = type;
// }
public void setType(String type) {
if(type == null) {
this.type = null;
@ -130,38 +112,6 @@ public class Indicator {
this.tags = tags;
}
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<IndicatorPath> getIndicatorPaths() {
return indicatorPaths;
}
@ -169,8 +119,4 @@ public class Indicator {
public void setIndicatorPaths(List<IndicatorPath> indicatorPaths) {
this.indicatorPaths = indicatorPaths;
}
// public String hasType() {
// return this.type.name();
// }
}

View File

@ -1,42 +0,0 @@
package eu.dnetlib.uoamonitorservice.entities;
import java.util.List;
public class ReorderEvent {
private String action; // "moved", "added", "removed"
private String target;
private List<String> ids;
public String getAction() {
return action;
}
public void setAction(String action) {
this.action = action;
}
public String getTarget() {
return target;
}
public void setTarget(String target) {
this.target = target;
}
public List<String> getIds() {
return ids;
}
public void setIds(List<String> ids) {
this.ids = ids;
}
@Override
public String toString() {
return "ReorderEvent{" +
"action='" + action + '\'' +
", target='" + target + '\'' +
", ids=" + ids +
'}';
}
}

View File

@ -1,121 +1,50 @@
package eu.dnetlib.uoamonitorservice.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.data.annotation.Id;
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.SectionGeneric;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
enum SectionType {
// Do not rename or remove existring values. This may cause problems with already stored values in DB
number, chart,
NUMBER, CHART;
}
public class Section<StringOrIndicator> {
@Id
@JsonProperty("_id")
private String id;
private String title;
private String defaultId;
private String stakeholderAlias;
private SectionType type;
private Date creationDate;
private Date updateDate;
private List<StringOrIndicator> indicators;
@Document
public class Section extends SectionGeneric<String> {
public Section() {}
public Section(Section section) {
id = section.getId();
title = section.getTitle();
defaultId = section.getDefaultId();
stakeholderAlias = section.getStakeholderAlias();
setType(section.getType());
creationDate = section.getCreationDate();
updateDate = section.getUpdateDate();
super(section);
}
public void copyFromDefault(Section defaultSection) {
setTitle(defaultSection.getTitle());
setType(defaultSection.getType());
setDefaultId(defaultSection.id);
setCreationDate(defaultSection.getCreationDate());
setUpdateDate(defaultSection.getUpdateDate());
setIndicators(new ArrayList<>());
public Section(SectionFull section) {
super(section);
this.indicators = section.getIndicators().stream().map(Indicator::getId).collect(Collectors.toList());
this.indicators.removeIf(Objects::isNull);
}
public String getId() {
return id;
public Section copy() {
Section section = new Section(this);
section.setDefaultId(this.getId());
section.setId(null);
return section;
}
public void setId(String id) {
this.id = id;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public String getStakeholderAlias() {
return stakeholderAlias;
}
public void setStakeholderAlias(String stakeholderAlias) {
this.stakeholderAlias = stakeholderAlias;
}
public String getType() {
if(type == null) {
return null;
public Section override(Section section, Section old) {
section = (Section) super.override(section, old);
if(this.getTitle() != null && !this.getTitle().equals(section.getTitle()) &&
(old.getTitle() == null || old.getTitle().equals(section.getTitle()))) {
section.setTitle(this.getTitle());
}
return type.name();
return section;
}
public void setType(String type) {
if(type == null) {
this.type = null;
} else {
SectionType sectionType = SectionType.valueOf(type);
this.type = sectionType;
}
public void addIndicator(String id) {
this.indicators.add(id);
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public List<StringOrIndicator> getIndicators() {
return indicators;
}
public void setIndicators(List<StringOrIndicator> indicators) {
this.indicators = indicators;
public void removeIndicator(String id) {
this.indicators.remove(id);
}
}

View File

@ -1,250 +1,33 @@
package eu.dnetlib.uoamonitorservice.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.data.annotation.Id;
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.StakeholderGeneric;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
enum StakeholderType
{
// Do not rename or remove existing values. This may cause problems with already stored values in DB
funder, ri, project, organization,
country, researcher, datasource,
FUNDER, RI, PROJECT, ORGANIZATION,
COUNTRY, RESEARCHER, DATASOURCE;
}
enum Locale {
EN("en"), EU("eu");
public final String label;
Locale(String label) {
this.label = label;
}
}
public class Stakeholder<StringOrTopic> {
@Id
@JsonProperty("_id")
private String id;
private StakeholderType type; // private StakeholderType type;
private Date projectUpdateDate = null;
private String index_id;
private String index_name;
private String index_shortName;
private String statsProfile = "monitor";
private String logoUrl;
private boolean isUpload = false;
private String name;
private String alias;
private String description;
private String defaultId = null;
private Locale locale = Locale.EU;
private Visibility visibility = Visibility.PRIVATE;
private String funderType;
private Date creationDate;
private Date updateDate;
private List<StringOrTopic> topics;
@Document
public class Stakeholder extends StakeholderGeneric<String> {
public Stakeholder() {
}
public Stakeholder(Stakeholder stakeholder) {
id = stakeholder.getId();
setType(stakeholder.getType());
projectUpdateDate = stakeholder.getProjectUpdateDate();
index_id = stakeholder.getIndex_id();
index_name = stakeholder.getIndex_name();
index_shortName = stakeholder.getIndex_shortName();
statsProfile = stakeholder.getStatsProfile();
logoUrl = stakeholder.getLogoUrl();
isUpload = stakeholder.getIsUpload();
name = stakeholder.getName();
alias = stakeholder.getAlias();
description = stakeholder.getDescription();
defaultId = stakeholder.getDefaultId();
setLocale(stakeholder.getLocale());
setVisibility(stakeholder.getVisibility());
this.funderType = stakeholder.getFunderType();
creationDate = stakeholder.getCreationDate();
updateDate = stakeholder.getUpdateDate();
super();
}
public String getId() {
return id;
public Stakeholder(StakeholderFull stakeholder) {
super(stakeholder);
this.topics = stakeholder.getTopics().stream().map(Common::getId).collect(Collectors.toList());
this.topics.removeIf(Objects::isNull);
}
public void setId(String id) {
this.id = id;
public void addTopic(String id) {
this.topics.add(id);
}
// public StakeholderType getType() {
// return type;
// }
//
// public void setType(StakeholderType type) {
// this.type = type;
// }
public String getType() {
if(type == null) {
return null;
}
return type.name();
}
public void setType(String type) {
if(type == null) {
this.type = null;
} else {
StakeholderType stakeholderType = StakeholderType.valueOf(type);
this.type = stakeholderType;
}
}
public Date getProjectUpdateDate() {
return projectUpdateDate;
}
public void setProjectUpdateDate(Date projectUpdateDate) {
this.projectUpdateDate = projectUpdateDate;
}
public String getIndex_id() {
return index_id;
}
public void setIndex_id(String index_id) {
this.index_id = index_id;
}
public String getIndex_name() {
return index_name;
}
public void setIndex_name(String index_name) {
this.index_name = index_name;
}
public String getIndex_shortName() {
return index_shortName;
}
public void setIndex_shortName(String index_shortName) {
this.index_shortName = index_shortName;
}
public String getStatsProfile() {
return statsProfile;
}
public void setStatsProfile(String statsProfile) {
this.statsProfile = statsProfile;
}
public String getLogoUrl() {
return logoUrl;
}
public void setLogoUrl(String logoUrl) {
this.logoUrl = logoUrl;
}
public boolean getIsUpload() {
return isUpload;
}
public void setIsUpload(boolean isUpload) {
this.isUpload = isUpload;
}
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public String getLocale() {
return locale.label;
}
public void setLocale(String label) {
Locale locale = null;
for (Locale l : Locale.values()) {
if (l.label.equals(label)) {
locale = l;
}
}
this.locale = locale;
}
public Visibility getVisibility() {
//return visibility.getLabel();
return visibility;
}
public void setVisibility(Visibility visibility) {
//this.visibility = Visibility.get(visibility);
this.visibility = visibility;
}
public String getFunderType() {
return funderType;
}
public void setFunderType(String funderType) {
this.funderType = funderType;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public List<StringOrTopic> getTopics() {
return topics;
}
public void setTopics(List<StringOrTopic> topics) {
this.topics = topics;
public void removeTopic(String id) {
this.topics.remove(id);
}
}

View File

@ -1,138 +1,64 @@
package eu.dnetlib.uoamonitorservice.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.data.annotation.Id;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.SubCategoryGeneric;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class SubCategory<StringOrSection> {
@Id
@JsonProperty("_id")
private String id;
@Document
public class SubCategory extends SubCategoryGeneric<String> {
public SubCategory() {
super();
}
private String name;
private String alias;
private String description;
private Visibility visibility = Visibility.PRIVATE;
private Date creationDate;
private Date updateDate;
private String defaultId;
private List<StringOrSection> charts;
private List<StringOrSection> numbers;
public SubCategory() {}
public SubCategory(SubCategory subCategory) {
id = subCategory.getId();
name = subCategory.getName();
alias = subCategory.getAlias();
description = subCategory.getDescription();
setVisibility(subCategory.getVisibility());
creationDate = subCategory.getCreationDate();
updateDate = subCategory.getUpdateDate();
defaultId = subCategory.getDefaultId();
super(subCategory);
}
public void createOverviewSubCategory(Category category) {
setName("Overview");
setAlias("overview");
setVisibility(category.getVisibility());
setCreationDate(category.getCreationDate());
setUpdateDate(category.getUpdateDate());
setCharts(new ArrayList<>());
setNumbers(new ArrayList<>());
public SubCategory(SubCategoryFull subCategory) {
super(subCategory);
this.numbers = subCategory.getNumbers().stream().map(Common::getId).collect(Collectors.toList());
this.charts = subCategory.getCharts().stream().map(Common::getId).collect(Collectors.toList());
this.numbers.removeIf(Objects::isNull);
this.charts.removeIf(Objects::isNull);
}
public void copyFromDefault(SubCategory defaultSubCategory) {
setName(defaultSubCategory.getName());
setAlias(defaultSubCategory.getAlias());
setDescription(defaultSubCategory.getDescription());
setVisibility(defaultSubCategory.getVisibility());
setCreationDate(defaultSubCategory.getCreationDate());
setUpdateDate(defaultSubCategory.getUpdateDate());
setDefaultId(defaultSubCategory.getId());
setCharts(new ArrayList());
setNumbers(new ArrayList());
public SubCategory copy() {
SubCategory subCategory = new SubCategory(this);
subCategory.setDefaultId(this.getId());
subCategory.setId(null);
return subCategory;
}
public String getId() {
return id;
public SubCategory override(SubCategory subCategory, SubCategory old) {
return (SubCategory) super.override(subCategory, old);
}
public void setId(String id) {
this.id = id;
public void addNumber(String id, int index) {
if(index == -1) {
this.numbers.add(id);
} else {
this.numbers.add(index, id);
}
}
public String getName() {
return name;
public void removeNumber(String id) {
this.numbers.remove(id);
}
public void setName(String name) {
this.name = name;
public void addChart(String id, int index) {
if(index == -1) {
this.charts.add(id);
} else {
this.charts.add(index, id);
}
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<StringOrSection> getCharts() {
return charts;
}
public void setCharts(List<StringOrSection> charts) {
this.charts = charts;
}
public List<StringOrSection> getNumbers() {
return numbers;
}
public void setNumbers(List<StringOrSection> numbers) {
this.numbers = numbers;
public void removeChart(String id) {
this.charts.remove(id);
}
}

View File

@ -1,129 +1,58 @@
package eu.dnetlib.uoamonitorservice.entities;
import com.fasterxml.jackson.annotation.JsonProperty;
import org.springframework.data.annotation.Id;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.generics.TopicGeneric;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
public class Topic<StringOrCategory> {
@Id
@JsonProperty("_id")
private String id;
@Document
public class Topic extends TopicGeneric<String> {
private String name;
private String alias;
private String description;
private String icon;
private Visibility visibility = Visibility.PRIVATE;
private Date creationDate;
private Date updateDate;
private String defaultId;
private List<StringOrCategory> categories;
public Topic() {
super();
}
public Topic() {}
public Topic(Topic topic) {
id = topic.getId();
name = topic.getName();
alias = topic.getAlias();
description = topic.getDescription();
icon = topic.getIcon();
setVisibility(topic.getVisibility());
creationDate = topic.getCreationDate();
updateDate = topic.getUpdateDate();
defaultId = topic.getDefaultId();
super(topic);
}
public void copyFromDefault(Topic defaultTopic) {
setName(defaultTopic.getName());
setAlias(defaultTopic.getAlias());
setDescription(defaultTopic.getDescription());
setIcon(defaultTopic.getIcon());
setVisibility(defaultTopic.getVisibility());
setCreationDate(defaultTopic.getCreationDate());
setUpdateDate(defaultTopic.getUpdateDate());
setDefaultId(defaultTopic.getId());
setCategories(new ArrayList());
public Topic(TopicFull topic) {
super(topic);
this.categories = topic.getCategories().stream().map(Common::getId).collect(Collectors.toList());
this.categories.removeIf(Objects::isNull);
}
public String getId() {
return id;
public Topic(TopicFull topic, List<String> categories) {
super(topic);
this.categories = new ArrayList<>(categories);
}
public void setId(String id) {
this.id = id;
public Topic copy() {
Topic topic = new Topic(this);
topic.setDefaultId(this.getId());
topic.setId(null);
return topic;
}
public String getName() {
return name;
public Topic override(Topic topic, Topic old) {
topic = (Topic) super.override(topic, old);
if(this.getIcon() != null && !this.getIcon().equals(topic.getIcon()) &&
(old.getIcon() == null || old.getIcon().equals(topic.getIcon()))) {
topic.setIcon(this.getIcon());
}
return topic;
}
public void setName(String name) {
this.name = name;
public void addCategory(String id) {
this.categories.add(id);
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public List<StringOrCategory> getCategories() {
return categories;
}
public void setCategories(List<StringOrCategory> categories) {
this.categories = categories;
public void removeCategory(String id) {
this.categories.remove(id);
}
}

View File

@ -1,38 +0,0 @@
package eu.dnetlib.uoamonitorservice.entities;
import java.util.HashMap;
import java.util.Map;
public enum Visibility {
// Do not rename or remove existring values. This may cause problems with already stored values in DB
// PUBLIC("public"), RESTRICTED("restricted"), PRIVATE("private");
PUBLIC, RESTRICTED, PRIVATE
// private String label;
//
// private Visibility(String label) {
// this.label = label;
// }
//
// public String getLabel() {
// return this.label;
// }
//
// //Lookup table
// private static final Map<String, Visibility> lookup = new HashMap<>();
//
// //Populate the lookup table on loading time
// static
// {
// for(Visibility visibility : Visibility.values())
// {
// lookup.put(visibility.getLabel(), visibility);
// }
// }
//
// //This method can be used for reverse lookup purpose
// public static Visibility get(String visibility)
// {
// return lookup.get(visibility);
// }
}

View File

@ -0,0 +1,50 @@
package eu.dnetlib.uoamonitorservice.generics;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.entities.Category;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@Document
public class CategoryGeneric<StringOrSubcategory> extends Common {
protected boolean isOverview;
protected List<StringOrSubcategory> subCategories;
public CategoryGeneric() {}
public CategoryGeneric(CategoryGeneric category) {
id = category.getId();
name = category.getName();
alias = category.getAlias();
description = category.getDescription();
setVisibility(category.getVisibility());
creationDate = category.getCreationDate();
updateDate = category.getUpdateDate();
defaultId = category.getDefaultId();
isOverview = category.getIsOverview();
subCategories = new ArrayList<>();
}
public boolean getIsOverview() {
return isOverview;
}
public void setIsOverview(boolean isOverview) {
this.isOverview = isOverview;
}
public List<StringOrSubcategory> getSubCategories() {
return subCategories;
}
public void setSubCategories(List<StringOrSubcategory> subCategories) {
this.subCategories = subCategories;
}
}

View File

@ -0,0 +1,107 @@
package eu.dnetlib.uoamonitorservice.generics;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.Date;
public class Common {
@Id
@JsonProperty("_id")
protected String id;
@CreatedDate
protected Date creationDate;
@LastModifiedDate
protected Date updateDate;
protected String defaultId;
protected String name;
protected String description;
protected String alias;
protected Visibility visibility = Visibility.PRIVATE;
public void update(Common common) {
this.id = common.getId();
this.creationDate = common.getCreationDate();
this.updateDate = common.getUpdateDate();
}
public Common override(Common common, Common old) {
if(this.getName() != null && !this.getName().equals(common.getName()) &&
(old.getName() == null || old.getName().equals(common.getName()))) {
common.setName(this.getName());
common.setAlias(this.getAlias());
}
if(this.getDescription() != null && !this.getDescription().equals(common.getDescription()) &&
(old.getDescription() == null || old.getDescription().equals(common.getDescription()))) {
common.setDescription(this.getDescription());
}
return common;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Date getCreationDate() {
return creationDate;
}
public void setCreationDate(Date creationDate) {
this.creationDate = creationDate;
}
public Date getUpdateDate() {
return updateDate;
}
public void setUpdateDate(Date updateDate) {
this.updateDate = updateDate;
}
public String getDefaultId() {
return defaultId;
}
public void setDefaultId(String defaultId) {
this.defaultId = defaultId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public String getAlias() {
return alias;
}
public void setAlias(String alias) {
this.alias = alias;
}
public Visibility getVisibility() {
return visibility;
}
public void setVisibility(Visibility visibility) {
this.visibility = visibility;
}
}

View File

@ -0,0 +1,70 @@
package eu.dnetlib.uoamonitorservice.generics;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorType;
import java.util.ArrayList;
import java.util.List;
public class SectionGeneric<StringOrIndicator> extends Common {
protected String title;
protected String stakeholderAlias;
protected IndicatorType type;
protected List<StringOrIndicator> indicators;
public SectionGeneric() {
}
public SectionGeneric(SectionGeneric section) {
id = section.getId();
title = section.getTitle();
defaultId = section.getDefaultId();
stakeholderAlias = section.getStakeholderAlias();
setType(section.getType());
creationDate = section.getCreationDate();
updateDate = section.getUpdateDate();
indicators = new ArrayList<>();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getStakeholderAlias() {
return stakeholderAlias;
}
public void setStakeholderAlias(String stakeholderAlias) {
this.stakeholderAlias = stakeholderAlias;
}
public String getType() {
if (type == null) {
return null;
}
return type.name();
}
public void setType(String type) {
if (type == null) {
this.type = null;
} else {
this.type = IndicatorType.valueOf(type);
}
}
public boolean isNumber() {
return this.type == IndicatorType.NUMBER || this.type == IndicatorType.number;
}
public List<StringOrIndicator> getIndicators() {
return indicators;
}
public void setIndicators(List<StringOrIndicator> indicators) {
this.indicators = indicators;
}
}

View File

@ -0,0 +1,153 @@
package eu.dnetlib.uoamonitorservice.generics;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.primitives.Locale;
import eu.dnetlib.uoamonitorservice.primitives.StakeholderType;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.Date;
import java.util.List;
public class StakeholderGeneric<StringOrTopic> extends Common {
protected StakeholderType type;
protected Date projectUpdateDate = null;
protected String index_id;
protected String index_name;
protected String index_shortName;
protected String statsProfile = "monitor";
protected String logoUrl;
protected boolean isUpload = false;
protected Locale locale = Locale.EU;
protected String funderType;
protected List<StringOrTopic> topics;
public StakeholderGeneric() {
}
public StakeholderGeneric(StakeholderGeneric stakeholder) {
id = stakeholder.getId();
setType(stakeholder.getType());
projectUpdateDate = stakeholder.getProjectUpdateDate();
index_id = stakeholder.getIndex_id();
index_name = stakeholder.getIndex_name();
index_shortName = stakeholder.getIndex_shortName();
statsProfile = stakeholder.getStatsProfile();
logoUrl = stakeholder.getLogoUrl();
isUpload = stakeholder.getIsUpload();
name = stakeholder.getName();
alias = stakeholder.getAlias();
description = stakeholder.getDescription();
defaultId = stakeholder.getDefaultId();
setLocale(stakeholder.getLocale());
setVisibility(stakeholder.getVisibility());
this.funderType = stakeholder.getFunderType();
creationDate = stakeholder.getCreationDate();
updateDate = stakeholder.getUpdateDate();
}
public String getType() {
if (type == null) {
return null;
}
return type.name();
}
public void setType(String type) {
if (type == null) {
this.type = null;
} else {
StakeholderType stakeholderType = StakeholderType.valueOf(type);
this.type = stakeholderType;
}
}
public Date getProjectUpdateDate() {
return projectUpdateDate;
}
public void setProjectUpdateDate(Date projectUpdateDate) {
this.projectUpdateDate = projectUpdateDate;
}
public String getIndex_id() {
return index_id;
}
public void setIndex_id(String index_id) {
this.index_id = index_id;
}
public String getIndex_name() {
return index_name;
}
public void setIndex_name(String index_name) {
this.index_name = index_name;
}
public String getIndex_shortName() {
return index_shortName;
}
public void setIndex_shortName(String index_shortName) {
this.index_shortName = index_shortName;
}
public String getStatsProfile() {
return statsProfile;
}
public void setStatsProfile(String statsProfile) {
this.statsProfile = statsProfile;
}
public String getLogoUrl() {
return logoUrl;
}
public void setLogoUrl(String logoUrl) {
this.logoUrl = logoUrl;
}
public boolean getIsUpload() {
return isUpload;
}
public void setIsUpload(boolean isUpload) {
this.isUpload = isUpload;
}
public String getLocale() {
return locale.label;
}
public void setLocale(String label) {
Locale locale = null;
for (Locale l : Locale.values()) {
if (l.label.equals(label)) {
locale = l;
}
}
this.locale = locale;
}
public String getFunderType() {
return funderType;
}
public void setFunderType(String funderType) {
this.funderType = funderType;
}
public List<StringOrTopic> getTopics() {
return topics;
}
public void setTopics(List<StringOrTopic> topics) {
this.topics = topics;
}
}

View File

@ -0,0 +1,39 @@
package eu.dnetlib.uoamonitorservice.generics;
import java.util.ArrayList;
import java.util.List;
public class SubCategoryGeneric<StringOrSection> extends Common {
protected List<StringOrSection> charts;
protected List<StringOrSection> numbers;
public SubCategoryGeneric() {}
public SubCategoryGeneric(SubCategoryGeneric subCategory) {
id = subCategory.getId();
name = subCategory.getName();
alias = subCategory.getAlias();
description = subCategory.getDescription();
setVisibility(subCategory.getVisibility());
creationDate = subCategory.getCreationDate();
updateDate = subCategory.getUpdateDate();
defaultId = subCategory.getDefaultId();
numbers = new ArrayList<>();
charts = new ArrayList<>();
}
public List<StringOrSection> getCharts() {
return charts;
}
public void setCharts(List<StringOrSection> charts) {
this.charts = charts;
}
public List<StringOrSection> getNumbers() {
return numbers;
}
public void setNumbers(List<StringOrSection> numbers) {
this.numbers = numbers;
}
}

View File

@ -0,0 +1,49 @@
package eu.dnetlib.uoamonitorservice.generics;
import com.fasterxml.jackson.annotation.JsonProperty;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.data.annotation.CreatedDate;
import org.springframework.data.annotation.Id;
import org.springframework.data.annotation.LastModifiedDate;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
public class TopicGeneric<StringOrCategory> extends Common {
protected String icon;
protected List<StringOrCategory> categories;
public TopicGeneric() {
}
public TopicGeneric(TopicGeneric topic) {
id = topic.getId();
name = topic.getName();
alias = topic.getAlias();
description = topic.getDescription();
icon = topic.getIcon();
setVisibility(topic.getVisibility());
creationDate = topic.getCreationDate();
updateDate = topic.getUpdateDate();
defaultId = topic.getDefaultId();
categories = new ArrayList<>();
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public List<StringOrCategory> getCategories() {
return categories;
}
public void setCategories(List<StringOrCategory> categories) {
this.categories = categories;
}
}

View File

@ -1,43 +0,0 @@
package eu.dnetlib.uoamonitorservice.handlers.utils;
import java.util.ArrayList;
import java.util.List;
public class UserInfo {
String name;
String email;
List<String> edu_person_entitlements = new ArrayList<String>();
@Override
public String toString() {
return "UserInfo{" +
"name='" + name + '\'' +
", email='" + email + '\'' +
", edu_person_entitlements=" + edu_person_entitlements +
'}';
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public List<String> getEdu_person_entitlements() {
return edu_person_entitlements;
}
public void setEdu_person_entitlements(List<String> edu_person_entitlements) {
this.edu_person_entitlements = edu_person_entitlements;
}
}

View File

@ -0,0 +1,5 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum Format {
NUMBER, PERCENTAGE
}

View File

@ -1,22 +1,8 @@
package eu.dnetlib.uoamonitorservice.entities;
package eu.dnetlib.uoamonitorservice.primitives;
import java.util.List;
import java.util.Map;
enum IndicatorPathType {
// Do not rename or remove existring values. This may cause problems with already stored values in DB
table, bar, column, pie, line, other,
TABLE, BAR, COLUMN, PIE, LINE, OTHER;
}
//enum SourceType {
// STATISTICS, SEARCH, METRICS, STATS_TOOL,OLD,IMAGE;
//}
enum Format {
NUMBER, PERCENTAGE
}
public class IndicatorPath {
private IndicatorPathType type; // for charts is type of chart {table, bar, column, etc}
private Format format = Format.NUMBER; // for numbers is if number is percentage or not

View File

@ -0,0 +1,7 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum IndicatorPathType {
// Do not rename or remove existing values. This may cause problems with already stored values in DB
table, bar, column, pie, line, other,
TABLE, BAR, COLUMN, PIE, LINE, OTHER;
}

View File

@ -0,0 +1,7 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum IndicatorSize {
// Do not rename or remove existring values. This may cause problems with already stored values in DB
small, medium, large,
SMALL, MEDIUM, LARGE;
}

View File

@ -0,0 +1,7 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum IndicatorType {
// Do not rename or remove existing values. This may cause problems with already stored values in DB
number, chart,
NUMBER, CHART;
}

View File

@ -0,0 +1,11 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum Locale {
EN("en"), EU("eu");
public final String label;
Locale(String label) {
this.label = label;
}
}

View File

@ -0,0 +1,9 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum StakeholderType {
// Do not rename or remove existing values. This may cause problems with already stored values in DB
funder, ri, project, organization,
country, researcher, datasource,
FUNDER, RI, PROJECT, ORGANIZATION,
COUNTRY, RESEARCHER, DATASOURCE;
}

View File

@ -0,0 +1,5 @@
package eu.dnetlib.uoamonitorservice.primitives;
public enum Visibility {
PUBLIC, RESTRICTED, PRIVATE
}

View File

@ -0,0 +1,207 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.CategoryDAO;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.dao.TopicDAO;
import eu.dnetlib.uoamonitorservice.dto.CategoryFull;
import eu.dnetlib.uoamonitorservice.entities.Category;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class CategoryService {
private final StakeholderDAO stakeholderDAO;
private final TopicDAO topicDAO;
private final CategoryDAO dao;
private final SubCategoryService subCategoryService;
private final CommonService commonService;
@Autowired
public CategoryService(StakeholderDAO stakeholderDAO, TopicDAO topicDAO, CategoryDAO dao, SubCategoryService subCategoryService, CommonService commonService) {
this.stakeholderDAO = stakeholderDAO;
this.topicDAO = topicDAO;
this.dao = dao;
this.subCategoryService = subCategoryService;
this.commonService = commonService;
}
public Category find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Category with id: " + id + " not found"));
}
public Category findByPath(Topic topic, String categoryId) {
if (!topic.getCategories().contains(categoryId)) {
throw new PathNotValidException("Category with id: " + categoryId + " not found in Topic: " + topic.getId());
}
return this.dao.findById(categoryId).orElseThrow(() -> new EntityNotFoundException("Category with id: " + categoryId + " not found"));
}
public CategoryFull getFullCategory(String type, String alias, Category category) {
if (commonService.hasVisibilityAuthority(type, alias, category)) {
return new CategoryFull(category, category.getSubCategories().stream()
.map(subCategoryId -> this.subCategoryService.getFullSubCategory(type, alias, subCategoryId))
.collect(Collectors.toList()));
} else {
return null;
}
}
public CategoryFull getFullCategory(String type, String alias, String categoryId) {
Category category = this.find(categoryId);
return this.getFullCategory(type, alias, category);
}
public CategoryFull buildCategory(CategoryFull categoryFull) {
categoryFull.setSubCategories(categoryFull.getSubCategories().stream().map(this.subCategoryService::buildSubcategory).collect(Collectors.toList()));
categoryFull.update(this.save(new Category(categoryFull)));
return categoryFull;
}
public Category save(Category category) {
if(category.getId() != null) {
category.setSubCategories(this.find(category.getId()).getSubCategories());
} else {
category.setCreationDate(new Date());
}
category.setUpdateDate(new Date());
category.getSubCategories().forEach(this.subCategoryService::find);
return this.dao.save(category);
}
public CategoryFull save(Stakeholder stakeholder, Topic topic, Category category) {
return this.save(stakeholder, topic, category, true);
}
public CategoryFull save(Stakeholder stakeholder, Topic topic, Category category, boolean createOverview) {
if (category.getId() != null) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
category.setSubCategories(this.find(category.getId()).getSubCategories());
this.updateChildren(category);
category = this.save(category);
} else {
throw new ForbiddenException("You are not authorized to update stakeholder with id: " + stakeholder.getId());
}
} else {
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
category = this.save(category);
this.createChildren(topic, category);
if(createOverview) {
this.subCategoryService.save(stakeholder, category, category.createOverview());
}
this.addCategory(topic, category.getId());
} else {
throw new ForbiddenException("You are not authorized to create a category in stakeholder with id: " + stakeholder.getId());
}
}
return this.getFullCategory(stakeholder.getType(), stakeholder.getAlias(), category);
}
public void createChildren(Topic defaultTopic, Category category) {
this.topicDAO.findByDefaultId(defaultTopic.getId()).forEach(topic -> {
this.stakeholderDAO.findByTopicsContaining(topic.getId()).forEach(stakeholder -> {
this.save(stakeholder, topic, category.copy(), false);
});
});
}
public void updateChildren(Category category) {
this.dao.findByDefaultId(category.getId()).forEach(child -> {
this.save(category.override(child, this.find(category.getId())));
});
}
public CategoryFull reorderSubCategories(Stakeholder stakeholder, Category category, List<String> subcategories) {
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
subcategories.forEach(this.subCategoryService::find);
if (category.getSubCategories().size() == subcategories.size() && new HashSet<>(category.getSubCategories()).containsAll(subcategories)) {
category.setSubCategories(subcategories);
category.setUpdateDate(new Date());
this.reorderChildren(stakeholder, category, subcategories);
return this.getFullCategory(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(category));
} else {
throw new EntityNotFoundException("Some subCategories dont exist in the category with id " + category.getId());
}
} else {
throw new ForbiddenException("You are not authorized to reorder subCategories in category with id: " + category.getId());
}
}
public void reorderChildren(Stakeholder defaultStakeholder, Category defaultCategory, List<String> defaultSubCategories) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.dao.findByDefaultId(defaultCategory.getId()).stream().map(category -> this.getFullCategory(stakeholder.getType(), stakeholder.getAlias(), category)).forEach(category -> {
this.reorderSubCategories(stakeholder, new Category(category),
this.commonService.reorder(defaultSubCategories, category.getSubCategories().stream().map(subCategory -> (Common) subCategory).collect(Collectors.toList())));
});
});
}
public void delete(String type, Category category, boolean remove) {
if (this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(category.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
category.getSubCategories().forEach(subcategoryId -> {
this.subCategoryService.delete(type, subcategoryId, false);
});
if (remove) {
this.removeCategory(category.getId());
}
this.dao.delete(category);
} else {
throw new ForbiddenException("Delete category: You are not authorized to delete category with id: " + category.getId());
}
}
public void delete(String type, String id, boolean remove) {
Category category = this.find(id);
this.delete(type, category, remove);
}
public void addCategory(Topic topic, String id) {
topic.addCategory(id);
topic.setUpdateDate(new Date());
this.topicDAO.save(topic);
}
public void removeCategory(String id) {
this.topicDAO.findByCategoriesContaining(id).forEach(topic -> {
topic.removeCategory(id);
topic.setUpdateDate(new Date());
this.topicDAO.save(topic);
});
}
public CategoryFull changeVisibility(String type, String alias, CategoryFull category, Visibility visibility, Boolean propagate) {
if (this.commonService.hasEditAuthority(type, alias)) {
category.setVisibility(visibility);
if (propagate) {
category.setSubCategories(category.getSubCategories().stream()
.map(subCategory -> this.subCategoryService.changeVisibility(type, alias, subCategory, visibility, true))
.collect(Collectors.toList()));
}
category.update(this.save(new Category(category)));
return category;
} else {
throw new ForbiddenException("Change category visibility: You are not authorized to update category with id: " + category.getId());
}
}
public CategoryFull changeVisibility(String type, String alias, Category category, Visibility visibility, Boolean propagate) {
CategoryFull categoryFull = this.getFullCategory(type, alias, category);
return this.changeVisibility(type, alias, categoryFull, visibility, propagate);
}
}

View File

@ -0,0 +1,72 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaauthorizationlibrary.security.AuthorizationService;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Service
public class CommonService {
AuthorizationService authorizationService;
@Autowired
public CommonService(AuthorizationService authorizationService) {
this.authorizationService = authorizationService;
}
public boolean hasAccessAuthority(String type, String alias, boolean isDefault) {
if(this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type)) {
return true;
} else if(!isDefault) {
return this.authorizationService.isManager(type, alias);
}
return false;
}
public boolean hasDeleteAuthority(String type) {
return this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type);
}
public boolean hasCreateAuthority(String type) {
return this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type);
}
public boolean hasEditAuthority(String type, String alias) {
return this.authorizationService.isPortalAdmin() || this.authorizationService.isCurator(type) || this.authorizationService.isManager(type, alias);
}
public boolean hasVisibilityAuthority(String type, String alias, Common common) {
if(authorizationService.isPortalAdmin() || authorizationService.isCurator(type) || authorizationService.isManager(type, alias)) {
return true;
} else if(authorizationService.isMember(type, alias) && common.getVisibility() != Visibility.PRIVATE) {
return true;
} else {
return common.getVisibility() == Visibility.PUBLIC;
}
}
public List<String> reorder(List<String> defaultIds, List<Common> commons) {
Map<String, Integer> map = new HashMap<>();
for(int i = 0; i < commons.size(); i++) {
if (!defaultIds.contains(commons.get(i).getDefaultId())) {
map.put(commons.get(i).getId(), i);
}
}
commons = commons.stream().filter(common -> defaultIds.contains(common.getDefaultId())).collect(Collectors.toList());;
commons.sort(Comparator.comparingInt(common -> defaultIds.indexOf(common.getDefaultId())));
List<String> ids = commons.stream().map(Common::getId).collect(Collectors.toList());
map.keySet().forEach(key -> {
ids.add(map.get(key), key);
});
return ids;
}
}

View File

@ -0,0 +1,153 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.entities.Indicator;
import eu.dnetlib.uoamonitorservice.entities.Section;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.SubCategory;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.List;
@Service
public class IndicatorService {
private final StakeholderDAO stakeholderDAO;
private final TopicDAO topicDAO;
private final CategoryDAO categoryDAO;
private final SubCategoryDAO subCategoryDAO;
private final SectionDAO sectionDAO;
private final IndicatorDAO dao;
private final CommonService commonService;
@Autowired
public IndicatorService(StakeholderDAO stakeholderDAO, TopicDAO topicDAO, CategoryDAO categoryDAO,SubCategoryDAO subCategoryDAO,
SectionDAO sectionDAO, IndicatorDAO dao, CommonService commonService) {
this.stakeholderDAO = stakeholderDAO;
this.topicDAO = topicDAO;
this.categoryDAO = categoryDAO;
this.subCategoryDAO = subCategoryDAO;
this.sectionDAO = sectionDAO;
this.dao = dao;
this.commonService = commonService;
}
public Indicator find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Indicator with id: " + id + " not found"));
}
public Indicator findByPath(Section section, String indicatorId) {
if (!section.getIndicators().contains(indicatorId)) {
throw new PathNotValidException("Indicator with id: " + indicatorId + " not found in Section: " + section.getId());
}
return this.dao.findById(indicatorId).orElseThrow(() -> new EntityNotFoundException("Indicator with id: " + indicatorId + " not found"));
}
public Indicator getIndicator(String type, String alias, String id) {
Indicator indicator = this.find(id);
if(this.commonService.hasVisibilityAuthority(type, alias, indicator)) {
return indicator;
} else {
return null;
}
}
public Indicator save(Indicator indicator) {
if(indicator.getId() == null) {
indicator.setCreationDate(new Date());
}
indicator.setUpdateDate(new Date());
return this.dao.save(indicator);
}
public Indicator save(Stakeholder stakeholder, Section section, Indicator indicator) {
if(indicator.getId() != null) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
this.updateChildren(indicator);
indicator = this.save(indicator);
} else {
throw new ForbiddenException("You are not authorized to update stakeholder with id: " + stakeholder.getId());
}
} else {
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
indicator = this.save(indicator);
this.createChildren(section, indicator);
this.addIndicator(section, indicator.getId());
} else {
throw new ForbiddenException("You are not authorized to create an indicator in stakeholder with id: " + stakeholder.getId());
}
}
return indicator;
}
public void createChildren(Section defaultSection, Indicator indicator) {
this.sectionDAO.findByDefaultId(defaultSection.getId()).forEach(section -> {
List<SubCategory> subCategories = this.subCategoryDAO.findByNumbersContaining(section.getId());
subCategories.addAll(this.subCategoryDAO.findByChartsContaining(section.getId()));
subCategories.forEach(subCategory -> {
this.categoryDAO.findBySubCategoriesContaining(subCategory.getId()).forEach(category -> {
this.topicDAO.findByCategoriesContaining(category.getId()).forEach(topic -> {
this.stakeholderDAO.findByTopicsContaining(topic.getId()).forEach(stakeholder -> {
this.save(stakeholder, section, indicator.copy());
});
});
});
});
});
}
public void updateChildren(Indicator indicator) {
this.dao.findByDefaultId(indicator.getId()).forEach(child -> {
this.save(indicator.override(child, this.find(indicator.getId())));
});
}
public void delete(String type, Indicator indicator, boolean remove) {
if(this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(indicator.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
if(remove) {
this.removeIndicator(indicator.getId());
}
this.dao.delete(indicator);
} else {
throw new ForbiddenException("Delete indicator: You are not authorized to delete indicator with id: " + indicator.getId());
}
}
public void delete(String type, String id, boolean remove) {
Indicator indicator = this.find(id);
this.delete(type, indicator, remove);
}
public void addIndicator(Section section, String id) {
section.addIndicator(id);
section.setUpdateDate(new Date());
this.sectionDAO.save(section);
}
public void removeIndicator(String id) {
this.sectionDAO.findByIndicatorsContaining(id).forEach(section -> {
section.removeIndicator(id);
section.setUpdateDate(new Date());
this.sectionDAO.save(section);
});
}
public Indicator changeVisibility(String type, String alias, Indicator indicator, Visibility visibility) {
if(this.commonService.hasEditAuthority(type, alias)) {
indicator.setVisibility(visibility);
return this.save(indicator);
} else {
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + indicator.getId());
}
}
}

View File

@ -0,0 +1,59 @@
package eu.dnetlib.uoamonitorservice.service;
import com.mongodb.BasicDBObject;
import com.mongodb.CommandResult;
import com.mongodb.DBObject;
import eu.dnetlib.uoamonitorservice.configuration.GlobalVars;
import eu.dnetlib.uoamonitorservice.configuration.mongo.MongoConnection;
import eu.dnetlib.uoamonitorservice.configuration.properties.MongoConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import java.util.HashMap;
import java.util.Map;
@Service
public class MonitorDeployService {
private final MongoConnection mongoConnection;
private final MongoConfig mongoConfig;
private final GlobalVars globalVars;
@Autowired
public MonitorDeployService(MongoConnection mongoConnection, MongoConfig mongoConfig, GlobalVars globalVars) {
this.mongoConnection = mongoConnection;
this.mongoConfig = mongoConfig;
this.globalVars = globalVars;
}
public Map<String, String> checkEverything() {
Map<String, String> response = new HashMap<>();
MongoTemplate mt = mongoConnection.getMongoTemplate();
DBObject ping = new BasicDBObject("ping", "1");
try {
CommandResult answer = mt.getDb().command(ping);
response.put("Mongo try: error", answer.getErrorMessage());
} catch (Exception e) {
response.put("Mongo catch: error", e.getMessage());
}
response.put("monitorservice.mongodb.database", mongoConfig.getDatabase());
response.put("monitorservice.mongodb.host", mongoConfig.getHost());
response.put("monitorservice.mongodb.port", mongoConfig.getPort() + "");
response.put("monitorservice.mongodb.username", mongoConfig.getUsername() == null ? null : "[unexposed value]");
response.put("monitorservice.mongodb.password", mongoConfig.getPassword() == null ? null : "[unexposed value]");
if (globalVars.date != null) {
response.put("Date of deploy", globalVars.date.toString());
}
if (globalVars.getBuildDate() != null) {
response.put("Date of build", globalVars.getBuildDate());
}
if (globalVars.getVersion() != null) {
response.put("Version", globalVars.getVersion());
}
return response;
}
}

View File

@ -0,0 +1,232 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.*;
import eu.dnetlib.uoamonitorservice.dto.MoveIndicator;
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
import eu.dnetlib.uoamonitorservice.entities.Indicator;
import eu.dnetlib.uoamonitorservice.entities.Section;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.SubCategory;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class SectionService {
private final StakeholderDAO stakeholderDAO;
private final TopicDAO topicDAO;
private final CategoryDAO categoryDAO;
private final SubCategoryDAO subCategoryDAO;
private final SectionDAO dao;
private final IndicatorService indicatorService;
private final CommonService commonService;
@Autowired
public SectionService(StakeholderDAO stakeholderDAO, TopicDAO topicDAO, CategoryDAO categoryDAO, SubCategoryDAO subCategoryDAO, SectionDAO dao, IndicatorService indicatorService, CommonService commonService) {
this.stakeholderDAO = stakeholderDAO;
this.topicDAO = topicDAO;
this.categoryDAO = categoryDAO;
this.subCategoryDAO = subCategoryDAO;
this.dao = dao;
this.indicatorService = indicatorService;
this.commonService = commonService;
}
public Section find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Section with id: " + id + " not found"));
}
public Section findByPath(SubCategory subCategory, String sectionId) {
if (!subCategory.getNumbers().contains(sectionId) && !subCategory.getCharts().contains(sectionId)) {
throw new PathNotValidException("Section with id: " + sectionId + " not found in SubCategory: " + subCategory.getId());
}
return this.dao.findById(sectionId).orElseThrow(() -> new EntityNotFoundException("Section with id: " + sectionId + " not found"));
}
public SectionFull getFullSection(String type, String alias, Section section) {
return new SectionFull(section, section.getIndicators().stream()
.map(indicatorId -> this.indicatorService.getIndicator(type, alias, indicatorId))
.collect(Collectors.toList()));
}
public SectionFull getFullSection(String type, String alias, String id) {
Section section = this.find(id);
return this.getFullSection(type, alias, section);
}
public SectionFull buildSection(SectionFull sectionFull) {
sectionFull.setIndicators(sectionFull.getIndicators().stream().map(this.indicatorService::save).collect(Collectors.toList()));
Section section = this.save(new Section(sectionFull));
return new SectionFull(section, sectionFull.getIndicators());
}
public Section save(Section section) {
if (section.getId() != null) {
section.setIndicators(this.find(section.getId()).getIndicators());
} else {
section.setCreationDate(new Date());
}
section.setUpdateDate(new Date());
section.getIndicators().forEach(this.indicatorService::find);
return this.dao.save(section);
}
public void saveBulk(Stakeholder stakeholder, SubCategory subCategory, List<SectionFull> sections) {
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
sections = sections.stream().map(this::buildSection).collect(Collectors.toList());
sections.forEach(section -> {
this.addSection(subCategory, section.getId());
this.createChildren(subCategory, new Section(section), -1);
});
} else {
throw new ForbiddenException("You are not authorized to create sections in stakeholder with id: " + stakeholder.getId());
}
}
public SectionFull save(Stakeholder stakeholder, SubCategory subCategory, Section section, int index) {
section.setStakeholderAlias(stakeholder.getAlias());
if (section.getId() != null) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
section.setIndicators(this.find(section.getId()).getIndicators());
this.updateChildren(section);
section = this.save(section);
} else {
throw new ForbiddenException("You are not authorized to update stakeholder with id: " + stakeholder.getId());
}
} else {
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
section = this.save(section);
this.createChildren(subCategory, section, index);
this.addSection(subCategory, section.getId(), index);
} else {
throw new ForbiddenException("You are not authorized to create a section in stakeholder with id: " + stakeholder.getId());
}
}
return this.getFullSection(stakeholder.getType(), stakeholder.getAlias(), section);
}
public void createChildren(SubCategory defaultSubCategory, Section section, int index) {
this.subCategoryDAO.findByDefaultId(defaultSubCategory.getId()).forEach(subCategory -> {
this.categoryDAO.findBySubCategoriesContaining(subCategory.getId()).forEach(category -> {
this.topicDAO.findByCategoriesContaining(category.getId()).forEach(topic -> {
this.stakeholderDAO.findByTopicsContaining(topic.getId()).forEach(stakeholder -> {
this.save(stakeholder, subCategory, section.copy(), index);
section.getIndicators().forEach(indicator -> {
this.indicatorService.createChildren(section, this.indicatorService.find(indicator));
});
});
});
});
});
}
public void updateChildren(Section section) {
this.dao.findByDefaultId(section.getId()).forEach(child -> {
this.save(section.override(child, this.find(section.getId())));
});
}
public SectionFull reorderIndicators(Stakeholder stakeholder, Section section, List<String> indicators) {
return this.reorderIndicators(stakeholder, section, indicators, true);
}
public SectionFull reorderIndicators(Stakeholder stakeholder, Section section, List<String> indicators, boolean reorderChildren) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
indicators.forEach(this.indicatorService::find);
if (section.getIndicators().size() == indicators.size() && new HashSet<>(section.getIndicators()).containsAll(indicators)) {
section.setIndicators(indicators);
section.setUpdateDate(new Date());
if(reorderChildren) {
this.reorderChildren(stakeholder, section, indicators);
}
return this.getFullSection(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(section));
} else {
throw new EntityNotFoundException("Some indicators dont exist in the section with id " + section.getId());
}
} else {
throw new ForbiddenException("You are not authorized to reorder indicators in section with id: " + section.getId());
}
}
public void reorderChildren(Stakeholder defaultStakeholder, Section defaultSection, List<String> defaultIndicators) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.dao.findByDefaultId(defaultSection.getId()).stream().map(section -> this.getFullSection(stakeholder.getType(), stakeholder.getAlias(), section)).forEach(section -> {
this.reorderIndicators(stakeholder, new Section(section),
this.commonService.reorder(defaultIndicators, section.getIndicators().stream().map(indicator -> (Common) indicator).collect(Collectors.toList())));
});
});
}
public void delete(String type, Section section, boolean remove) {
if (this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(section.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
section.getIndicators().forEach(indicatorId -> {
this.indicatorService.delete(type, indicatorId, false);
});
if (remove) {
this.removeSection(section.getId());
}
this.dao.delete(section);
} else {
throw new ForbiddenException("Delete section: You are not authorized to delete section with id: " + section.getId());
}
}
public void delete(String type, String id, boolean remove) {
Section section = this.find(id);
this.delete(type, section, remove);
}
public void addSection(SubCategory subCategory, String id) {
this.addSection(subCategory, id, -1);
}
public void addSection(SubCategory subCategory, String id, int index) {
if (this.find(id).isNumber()) {
subCategory.addNumber(id, index);
} else {
subCategory.addChart(id, index);
}
subCategory.setUpdateDate(new Date());
this.subCategoryDAO.save(subCategory);
}
public void removeSection(String id) {
this.subCategoryDAO.findByNumbersContaining(id).forEach(subCategory -> {
subCategory.removeNumber(id);
subCategory.setUpdateDate(new Date());
this.subCategoryDAO.save(subCategory);
});
this.subCategoryDAO.findByChartsContaining(id).forEach(subCategory -> {
subCategory.removeChart(id);
subCategory.setUpdateDate(new Date());
this.subCategoryDAO.save(subCategory);
});
}
public SectionFull changeVisibility(String type, String alias, SectionFull section, Visibility visibility) {
if (this.commonService.hasEditAuthority(type, alias)) {
section.setIndicators(section.getIndicators().stream()
.map(indicator -> this.indicatorService.changeVisibility(type, alias, indicator, visibility))
.collect(Collectors.toList()));
section.update(this.save(new Section(section)));
return section;
} else {
throw new ForbiddenException("Change section visibility: You are not authorized to update section with id: " + section.getId());
}
}
}

View File

@ -1,42 +1,169 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.utils.RolesUtils;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.dto.StakeholderFull;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.Visibility;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class StakeholderService {
@Autowired
StakeholderDAO dao;
private final StakeholderDAO dao;
private final CommonService commonService;
private final TopicService topicService;
@Autowired
RolesUtils rolesUtils;
public StakeholderService(StakeholderDAO dao, CommonService commonService, TopicService topicService) {
this.dao = dao;
this.commonService = commonService;
this.topicService = topicService;
}
public Stakeholder find(String id) {
return this.dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Stakeholder with id: " + id + " not found"));
}
public Stakeholder findByAlias(String alias) {
return this.dao.findByAlias(alias).orElseThrow(() -> new EntityNotFoundException("Stakeholder with alias: " + alias + " not found"));
}
public List<Stakeholder> findByDefaultId(String id) {
return this.dao.findByDefaultId(id);
}
public Stakeholder findByPath(String stakeholderId) {
return dao.findById(stakeholderId).orElseThrow(() -> new EntityNotFoundException("Stakeholder with id: " + stakeholderId + " not found"));
}
public List<String> getAllAliases() {
return this.dao.findAll().stream().map(Stakeholder::getAlias).collect(Collectors.toList());
}
public List<Stakeholder> getAll(String type) {
if (type != null) {
return this.dao.findByType(type);
}
return this.dao.findAll();
}
public List<Stakeholder> getAllDefaultByRole(String type) {
return (type == null ? this.dao.findByDefaultId(null) : this.dao.findByDefaultIdAndType(null, type)).stream()
.filter(stakeholder -> this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), true))
.collect(Collectors.toList());
}
public List<Stakeholder> getStakeholdersByTypeAndRole(String type, String defaultId, boolean manage) {
List<Stakeholder> stakeholders;
if(type != null && defaultId != null) {
if (type != null && defaultId != null) {
stakeholders = dao.findByDefaultIdAndType(defaultId, type);
} else if(defaultId != null) {
} else if (defaultId != null) {
stakeholders = dao.findByDefaultId(defaultId);
} else if(type != null) {
} else if (type != null) {
stakeholders = dao.findByDefaultIdNotAndType(null, type);
} else {
stakeholders = dao.findByDefaultIdNot(null);
}
return stakeholders.stream().filter(stakeholder ->
(!manage &&
(stakeholder.getVisibility() == Visibility.PUBLIC
|| stakeholder.getVisibility() == Visibility.RESTRICTED))
|| rolesUtils.isPortalAdmin()
|| rolesUtils.isCurator(stakeholder.getType())
|| rolesUtils.isManager(stakeholder.getType(), stakeholder.getAlias()))
(!manage && (stakeholder.getVisibility() == Visibility.PUBLIC || stakeholder.getVisibility() == Visibility.RESTRICTED))
|| this.commonService.hasAccessAuthority(stakeholder.getType(), stakeholder.getAlias(), false))
.collect(Collectors.toList());
}
public StakeholderFull getFullStakeholder(Stakeholder stakeholder) {
if (this.commonService.hasVisibilityAuthority(stakeholder.getType(), stakeholder.getAlias(), stakeholder)) {
return new StakeholderFull(stakeholder,
stakeholder.getTopics().stream()
.map(topicId -> topicService.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topicId))
.collect(Collectors.toList()));
} else {
return null;
}
}
public StakeholderFull buildStakeholder(StakeholderFull stakeholderFull) {
stakeholderFull.setTopics(stakeholderFull.getTopics().stream().map(this.topicService::buildTopic).collect(Collectors.toList()));
stakeholderFull.update(this.save(new Stakeholder(stakeholderFull)));
return stakeholderFull;
}
public Stakeholder save(Stakeholder stakeholder) {
if (stakeholder.getId() != null) {
stakeholder.setTopics(this.find(stakeholder.getId()).getTopics());
} else {
stakeholder.setCreationDate(new Date());
}
stakeholder.setUpdateDate(new Date());
stakeholder.getTopics().forEach(this.topicService::find);
return this.dao.save(stakeholder);
}
public StakeholderFull reorderTopics(Stakeholder stakeholder, List<String> topics) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
topics.forEach(this.topicService::find);
if (stakeholder.getTopics().size() == topics.size() && new HashSet<>(stakeholder.getTopics()).containsAll(topics)) {
stakeholder.setTopics(topics);
stakeholder.setUpdateDate(new Date());
this.reorderChildren(stakeholder, topics);
return this.getFullStakeholder(this.dao.save(stakeholder));
} else {
throw new EntityNotFoundException("Some topics dont exist in the stakeholder with id " + stakeholder.getId());
}
} else {
throw new ForbiddenException("You are not authorized to reorder topics in stakeholder with id: " + stakeholder.getId());
}
}
public void reorderChildren(Stakeholder defaultStakeholder, List<String> defaultTopics) {
this.dao.findByDefaultId(defaultStakeholder.getId()).stream().map(this::getFullStakeholder).forEach(stakeholder -> {
this.reorderTopics(new Stakeholder(stakeholder),
this.commonService.reorder(defaultTopics, stakeholder.getTopics().stream().map(topic -> (Common) topic).collect(Collectors.toList())));
});
}
public String delete(String id) {
Stakeholder stakeholder = this.find(id);
if (this.commonService.hasDeleteAuthority(stakeholder.getType())) {
this.dao.findByDefaultId(stakeholder.getId()).forEach(child -> {
this.delete(child.getId());
});
stakeholder.getTopics().forEach(topicId -> {
this.topicService.delete(stakeholder.getType(), topicId, false);
});
this.dao.delete(id);
return stakeholder.getAlias();
} else {
throw new ForbiddenException("Delete stakeholder: You are not authorized to delete stakeholder with id: " + id);
}
}
public StakeholderFull changeVisibility(StakeholderFull stakeholder, Visibility visibility, Boolean propagate) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
if (propagate) {
stakeholder.setTopics(stakeholder.getTopics().stream().
map(topic -> this.topicService.changeVisibility(stakeholder.getType(), stakeholder.getAlias(), topic, visibility, true))
.collect(Collectors.toList()));
}
stakeholder.setVisibility(visibility);
stakeholder.update(this.save(new Stakeholder(stakeholder)));
return stakeholder;
} else {
throw new ForbiddenException("Change stakeholder visibility: You are not authorized to update stakeholder with id: " + stakeholder.getId());
}
}
public StakeholderFull changeVisibility(Stakeholder stakeholder, Visibility visibility, Boolean propagate) {
StakeholderFull stakeholderFull = this.getFullStakeholder(stakeholder);
return this.changeVisibility(stakeholderFull, visibility, propagate);
}
}

View File

@ -0,0 +1,285 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.CategoryDAO;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.dao.SubCategoryDAO;
import eu.dnetlib.uoamonitorservice.dao.TopicDAO;
import eu.dnetlib.uoamonitorservice.dto.MoveIndicator;
import eu.dnetlib.uoamonitorservice.dto.SectionFull;
import eu.dnetlib.uoamonitorservice.dto.SectionInfo;
import eu.dnetlib.uoamonitorservice.dto.SubCategoryFull;
import eu.dnetlib.uoamonitorservice.entities.*;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.IndicatorType;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import io.swagger.models.auth.In;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class SubCategoryService {
private final StakeholderDAO stakeholderDAO;
private final TopicDAO topicDAO;
private final CategoryDAO categoryDAO;
private final SubCategoryDAO dao;
private final CommonService commonService;
private final SectionService sectionService;
@Autowired
public SubCategoryService(StakeholderDAO stakeholderDAO, TopicDAO topicDAO, CategoryDAO categoryDAO, SubCategoryDAO dao,CommonService commonService, SectionService sectionService) {
this.stakeholderDAO = stakeholderDAO;
this.topicDAO = topicDAO;
this.categoryDAO = categoryDAO;
this.dao = dao;
this.commonService = commonService;
this.sectionService = sectionService;
}
public SubCategory find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("SubCategory with id: " + id + " not found"));
}
public SubCategory findByPath(Category category, String subcategoryId) {
if (!category.getSubCategories().contains(subcategoryId)) {
throw new PathNotValidException("SubCategory with id: " + subcategoryId + " not found in Category: " + category.getId());
}
return this.dao.findById(subcategoryId).orElseThrow(() -> new EntityNotFoundException("SubCategory with id: " + subcategoryId + " not found"));
}
public SubCategoryFull getFullSubCategory(String type, String alias, SubCategory subCategory) {
if(commonService.hasVisibilityAuthority(type, alias, subCategory)) {
return new SubCategoryFull(subCategory, subCategory.getNumbers().stream()
.map(sectionId -> this.sectionService.getFullSection(type, alias, sectionId))
.collect(Collectors.toList()),
subCategory.getCharts().stream()
.map(sectionId -> this.sectionService.getFullSection(type, alias, sectionId))
.collect(Collectors.toList()));
} else {
return null;
}
}
public SubCategoryFull getFullSubCategory(String type, String alias, String subCategoryId) {
SubCategory subCategory = this.find(subCategoryId);
return this.getFullSubCategory(type, alias, subCategory);
}
public SubCategoryFull buildSubcategory(SubCategoryFull subCategoryFull) {
subCategoryFull.setNumbers(subCategoryFull.getNumbers().stream().map(this.sectionService::buildSection).collect(Collectors.toList()));
subCategoryFull.setCharts(subCategoryFull.getCharts().stream().map(this.sectionService::buildSection).collect(Collectors.toList()));
subCategoryFull.update(this.save(new SubCategory(subCategoryFull)));
return subCategoryFull;
}
public SubCategory save(SubCategory subCategory) {
if(subCategory.getId() != null) {
SubCategory old = this.find(subCategory.getId());
subCategory.setNumbers(old.getNumbers());
subCategory.setCharts(old.getCharts());
} else {
subCategory.setCreationDate(new Date());
}
subCategory.setUpdateDate(new Date());
subCategory.getNumbers().forEach(this.sectionService::find);
subCategory.getCharts().forEach(this.sectionService::find);
return this.dao.save(subCategory);
}
public SubCategoryFull save(Stakeholder stakeholder, Category category, SubCategory subCategory) {
if (subCategory.getId() != null) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
SubCategory old = this.find(subCategory.getId());
subCategory.setNumbers(old.getNumbers());
subCategory.setCharts(old.getCharts());
this.updateChildren(subCategory);
subCategory = this.save(subCategory);
} else {
throw new ForbiddenException("You are not authorized to update stakeholder with id: " + stakeholder.getId());
}
} else {
if (this.commonService.hasCreateAuthority(stakeholder.getType())) {
subCategory = this.save(subCategory);
this.createChildren(category, subCategory);
this.addSubCategory(category, subCategory.getId());
} else {
throw new ForbiddenException("You are not authorized to create a subCategory in stakeholder with id: " + stakeholder.getId());
}
}
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory);
}
public void createChildren(Category defaultCategory, SubCategory subCategory) {
this.categoryDAO.findByDefaultId(defaultCategory.getId()).forEach(category -> {
this.topicDAO.findByCategoriesContaining(category.getId()).forEach(topic -> {
this.stakeholderDAO.findByTopicsContaining(topic.getId()).forEach(stakeholder -> {
this.save(stakeholder, category, subCategory.copy());
});
});
});
}
public void updateChildren(SubCategory subCategory) {
this.dao.findByDefaultId(subCategory.getId()).forEach(child -> {
this.save(subCategory.override(child, this.find(subCategory.getId())));
});
}
public SubCategoryFull moveIndicator(Stakeholder stakeholder, SubCategory subCategory, MoveIndicator moveIndicator) {
if (this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
Section from = this.sectionService.findByPath(subCategory, moveIndicator.getFrom().getId());
Section to = this.sectionService.findByPath(subCategory, moveIndicator.getTo().getId());
from.removeIndicator(moveIndicator.getTarget());
to.addIndicator(moveIndicator.getTarget());
this.sectionService.reorderIndicators(stakeholder, from, moveIndicator.getFrom().getIndicators(), false);
this.sectionService.reorderIndicators(stakeholder, to, moveIndicator.getTo().getIndicators(), false);
this.moveIndicatorChildren(stakeholder, subCategory, moveIndicator);
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory);
} else {
throw new ForbiddenException("You are not authorized to move indicators in subCategory with id: " + subCategory.getId());
}
}
public void moveIndicatorChildren(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, MoveIndicator moveIndicator) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.dao.findByDefaultId(defaultSubCategory.getId()).stream()
.map(subCategory -> this.getFullSubCategory(stakeholder.getType(), stakeholder. getAlias(), subCategory))
.collect(Collectors.toList()).forEach(subCategory -> {
SectionFull from = subCategory.getSectionByDefaultId(moveIndicator.getFrom().getId()).orElse(null);
SectionFull to = subCategory.getSectionByDefaultId(moveIndicator.getTo().getId()).orElse(null);
if(from != null && to != null) {
Indicator target = from.getIndicatorByDefaultId(moveIndicator.getTarget()).orElse(null);
if(target != null) {
from.removeIndicator(target.getId());
to.addIndicator(target);
MoveIndicator moveIndicatorChild = new MoveIndicator(target.getId(),
new SectionInfo(from.getId(), this.commonService.reorder(moveIndicator.getFrom().getIndicators(), from.getIndicators().stream().map(section -> (Common) section).collect(Collectors.toList()))),
new SectionInfo(to.getId(), this.commonService.reorder(moveIndicator.getTo().getIndicators(), to.getIndicators().stream().map(section -> (Common) section).collect(Collectors.toList()))));
this.moveIndicator(stakeholder, new SubCategory(subCategory), moveIndicatorChild);
}
}
});
});
}
public SubCategoryFull reorderNumbers(Stakeholder stakeholder, SubCategory subCategory, List<String> numbers) {
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
numbers.forEach(this.sectionService::find);
if (subCategory.getNumbers().size() == numbers.size() && new HashSet<>(subCategory.getNumbers()).containsAll(numbers)) {
subCategory.setNumbers(numbers);
subCategory.setUpdateDate(new Date());
this.reorderChildrenNumbers(stakeholder, subCategory, numbers);
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(subCategory));
} else {
throw new EntityNotFoundException("Some sections dont exist in the subCategory with id " + subCategory.getId());
}
} else {
throw new ForbiddenException("You are not authorized to reorder sections in subCategory with id: " + subCategory.getId());
}
}
public SubCategoryFull reorderCharts(Stakeholder stakeholder, SubCategory subCategory, List<String> charts) {
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
charts.forEach(this.sectionService::find);
if (subCategory.getCharts().size() == charts.size() && new HashSet<>(subCategory.getCharts()).containsAll(charts)) {
subCategory.setCharts(charts);
this.reorderChildrenCharts(stakeholder, subCategory, charts);
return this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(subCategory));
} else {
throw new EntityNotFoundException("Some sections dont exist in the subCategory with id " + subCategory.getId());
}
} else {
throw new ForbiddenException("You are not authorized to reorder sections in subCategory with id: " + subCategory.getId());
}
}
public void reorderChildrenNumbers(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, List<String> defaultSections) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.dao.findByDefaultId(defaultSubCategory.getId()).stream().map(subCategory -> this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory)).forEach(subCategory -> {
this.reorderNumbers(stakeholder, new SubCategory(subCategory),
this.commonService.reorder(defaultSections, subCategory.getNumbers().stream().map(section -> (Common) section).collect(Collectors.toList())));
});
});
}
public void reorderChildrenCharts(Stakeholder defaultStakeholder, SubCategory defaultSubCategory, List<String> defaultSections) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.dao.findByDefaultId(defaultSubCategory.getId()).stream().map(subCategory -> this.getFullSubCategory(stakeholder.getType(), stakeholder.getAlias(), subCategory)).forEach(subCategory -> {
this.reorderCharts(stakeholder, new SubCategory(subCategory),
this.commonService.reorder(defaultSections, subCategory.getCharts().stream().map(section -> (Common) section).collect(Collectors.toList())));
});
});
}
public void delete(String type, SubCategory subCategory, boolean remove) {
if(this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(subCategory.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
subCategory.getNumbers().forEach(sectionId -> {
this.sectionService.delete(type, sectionId, false);
});
subCategory.getCharts().forEach(sectionId -> {
this.sectionService.delete(type, sectionId, false);
});
if (remove) {
this.removeSubCategory(subCategory.getId());
}
this.dao.delete(subCategory);
} else {
throw new ForbiddenException("Delete subCategory: You are not authorized to delete subCategory with id: " + subCategory.getId());
}
}
public void delete(String type, String id, boolean remove) {
SubCategory subCategory = this.find(id);
this.delete(type, subCategory, remove);
}
public void addSubCategory(Category category, String id) {
category.addSubCategory(id);
category.setUpdateDate(new Date());
this.categoryDAO.save(category);
}
public void removeSubCategory(String id) {
this.categoryDAO.findBySubCategoriesContaining(id).forEach(category -> {
category.removeSubCategory(id);
category.setUpdateDate(new Date());
this.categoryDAO.save(category);
});
}
public SubCategoryFull changeVisibility(String type, String alias, SubCategoryFull subCategory, Visibility visibility, Boolean propagate) {
if(this.commonService.hasEditAuthority(type, alias)) {
subCategory.setVisibility(visibility);
if(propagate) {
subCategory.setNumbers(subCategory.getNumbers().stream()
.map(section -> this.sectionService.changeVisibility(type, alias, section, visibility))
.collect(Collectors.toList()));
subCategory.setCharts(subCategory.getCharts().stream()
.map(section -> this.sectionService.changeVisibility(type, alias, section, visibility))
.collect(Collectors.toList()));
}
subCategory.update(this.save(new SubCategory(subCategory)));
return subCategory;
} else {
throw new ForbiddenException("Change subCategory visibility: You are not authorized to update subCategory with id: " + subCategory.getId());
}
}
public SubCategoryFull changeVisibility(String type, String alias, SubCategory subCategory, Visibility visibility, Boolean propagate) {
SubCategoryFull subCategoryFull = this.getFullSubCategory(type, alias, subCategory);
return this.changeVisibility(type, alias, subCategoryFull, visibility, propagate);
}
}

View File

@ -0,0 +1,194 @@
package eu.dnetlib.uoamonitorservice.service;
import eu.dnetlib.uoaadmintoolslibrary.handlers.ForbiddenException;
import eu.dnetlib.uoamonitorservice.dao.StakeholderDAO;
import eu.dnetlib.uoamonitorservice.dao.TopicDAO;
import eu.dnetlib.uoamonitorservice.dto.TopicFull;
import eu.dnetlib.uoamonitorservice.entities.Stakeholder;
import eu.dnetlib.uoamonitorservice.entities.Topic;
import eu.dnetlib.uoamonitorservice.generics.Common;
import eu.dnetlib.uoamonitorservice.handlers.EntityNotFoundException;
import eu.dnetlib.uoamonitorservice.handlers.PathNotValidException;
import eu.dnetlib.uoamonitorservice.primitives.Visibility;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.HashSet;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class TopicService {
private final StakeholderDAO stakeholderDAO;
private final TopicDAO dao;
private final CategoryService categoryService;
private final CommonService commonService;
@Autowired
public TopicService(StakeholderDAO stakeholderDAO, TopicDAO dao, CategoryService categoryService, CommonService commonService) {
this.stakeholderDAO = stakeholderDAO;
this.dao = dao;
this.categoryService = categoryService;
this.commonService = commonService;
}
public Topic find(String id) {
return dao.findById(id).orElseThrow(() -> new EntityNotFoundException("Topic with id: " + id + " not found"));
}
public Topic findByPath(Stakeholder stakeholder, String topicId) {
if (!stakeholder.getTopics().contains(topicId)) {
throw new PathNotValidException("Topic with id: " + topicId + " not found in Stakeholder: " + stakeholder.getId());
}
return this.dao.findById(topicId).orElseThrow(() -> new EntityNotFoundException("Topic with id: " + topicId + " not found"));
}
public TopicFull getFullTopic(String type, String alias, Topic topic) {
if (commonService.hasVisibilityAuthority(type, alias, topic)) {
return new TopicFull(topic, topic.getCategories().stream()
.map(categoryId -> this.categoryService.getFullCategory(type, alias, categoryId))
.collect(Collectors.toList()));
} else {
return null;
}
}
public TopicFull getFullTopic(String type, String alias, String id) {
Topic topic = this.find(id);
return this.getFullTopic(type, alias, topic);
}
public TopicFull buildTopic(TopicFull topicFull) {
topicFull.setCategories(topicFull.getCategories().stream().map(this.categoryService::buildCategory).collect(Collectors.toList()));
topicFull.update(this.save(new Topic(topicFull)));
return topicFull;
}
public Topic save(Topic topic) {
if(topic.getId() != null) {
topic.setCategories(this.find(topic.getId()).getCategories());
} else {
topic.setCreationDate(new Date());
}
topic.setUpdateDate(new Date());
topic.getCategories().forEach(this.categoryService::find);
return this.dao.save(topic);
}
public TopicFull save(Stakeholder stakeholder, Topic topic) {
if(topic.getId() != null) {
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
topic.setCategories(this.find(topic.getId()).getCategories());
this.updateChildren(topic);
topic = this.save(topic);
} else {
throw new ForbiddenException("You are not authorized to update stakeholder with id: " + stakeholder.getId());
}
} else {
if(this.commonService.hasCreateAuthority(stakeholder.getType())) {
topic = this.save(topic);
this.createChildren(stakeholder, topic);
this.addTopic(stakeholder, topic.getId());
} else {
throw new ForbiddenException("You are not authorized to create a topic in stakeholder with id: " + stakeholder.getId());
}
}
return this.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topic);
}
public void createChildren(Stakeholder defaultStakeholder, Topic topic) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.save(stakeholder, topic.copy());
});
}
public void updateChildren(Topic topic) {
this.dao.findByDefaultId(topic.getId()).forEach(child -> {
this.save(topic.override(child, this.find(topic.getId())));
});
}
public TopicFull reorderCategories(Stakeholder stakeholder, Topic topic, List<String> categories) {
if(this.commonService.hasEditAuthority(stakeholder.getType(), stakeholder.getAlias())) {
categories.forEach(this.categoryService::find);
if (topic.getCategories().size() == categories.size() && new HashSet<>(topic.getCategories()).containsAll(categories)) {
topic.setCategories(categories);
this.reorderChildren(stakeholder, topic, categories);
topic.setUpdateDate(new Date());
return this.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), this.dao.save(topic));
} else {
throw new EntityNotFoundException("Some categories dont exist in the topic with id " + topic.getId());
}
} else {
throw new ForbiddenException("You are not authorized to reorder categories in topic with id: " + topic.getId());
}
}
public void reorderChildren(Stakeholder defaultStakeholder, Topic defaultTopic, List<String> defaultCategories) {
this.stakeholderDAO.findByDefaultId(defaultStakeholder.getId()).forEach(stakeholder -> {
this.dao.findByDefaultId(defaultTopic.getId()).stream().map(topic -> this.getFullTopic(stakeholder.getType(), stakeholder.getAlias(), topic)).forEach(topic -> {
this.reorderCategories(stakeholder, new Topic(topic),
this.commonService.reorder(defaultCategories, topic.getCategories().stream().map(category -> (Common) category).collect(Collectors.toList())));
});
});
}
public void delete(String type, Topic topic, boolean remove) {
if (this.commonService.hasDeleteAuthority(type)) {
this.dao.findByDefaultId(topic.getId()).forEach(child -> {
this.delete(type, child.getId(), remove);
});
topic.getCategories().forEach(categoryId -> {
this.categoryService.delete(type, categoryId, false);
});
if (remove) {
this.removeTopic(topic.getId());
}
this.dao.delete(topic);
} else {
throw new ForbiddenException("Delete topic: You are not authorized to delete topic with id: " + topic.getId());
}
}
public void delete(String type, String id, boolean remove) {
Topic topic = this.find(id);
this.delete(type, topic, remove);
}
public void addTopic(Stakeholder stakeholder, String id) {
stakeholder.addTopic(id);
stakeholder.setUpdateDate(new Date());
this.stakeholderDAO.save(stakeholder);
}
public void removeTopic(String id) {
this.stakeholderDAO.findByTopicsContaining(id).forEach(stakeholder -> {
stakeholder.removeTopic(id);
stakeholder.setUpdateDate(new Date());
this.stakeholderDAO.save(stakeholder);
});
}
public TopicFull changeVisibility(String type, String alias, TopicFull topic, Visibility visibility, Boolean propagate) {
if (this.commonService.hasEditAuthority(type, alias)) {
topic.setVisibility(visibility);
if (propagate) {
topic.setCategories(topic.getCategories().stream()
.map(category -> this.categoryService.changeVisibility(type, alias, category, visibility, true))
.collect(Collectors.toList()));
}
topic.update(this.save(new Topic(topic)));
return topic;
} else {
throw new ForbiddenException("Change topic visibility: You are not authorized to update topic with id: " + topic.getId());
}
}
public TopicFull changeVisibility(String type, String alias, Topic topic, Visibility visibility, Boolean propagate) {
TopicFull topicFull = this.getFullTopic(type, alias, topic);
return this.changeVisibility(type, alias, topicFull, visibility, propagate);
}
}

View File

@ -24,5 +24,4 @@ monitorservice.globalVars.version=@version@
#production
#monitorservice.userInfoUrl = https://services.openaire.eu/uoa-user-management/api/users/getUserInfo?accessToken=
#monitorservice.originServer = .openaire.eu
#monitorservice.originServer = .openaire.eu

View File

@ -1,505 +0,0 @@
//version compatibility: 1.0.0-SNAPSHOT
//use openaire_monitor;
function upperCaseEnumValues() {
stakeholders = db.stakeholder.find().map(function (stakeholders) {
return stakeholders;
});
for(var i=0; i<stakeholders.length; i++) {
stakeholder = stakeholders[i];
stakeholderType = stakeholder.type;
stakeholder.type = stakeholderType.toUpperCase();
db.stakeholder.save(stakeholder);
}
print("Uppercase enum values for Stakeholder types");
sections = db.section.find().map(function (sections) {
return sections;
});
for(var i=0; i<sections.length; i++) {
section = sections[i];
sectionType = section.type;
section.type = sectionType.toUpperCase();
db.section.save(section);
}
print("Uppercase enum values for Section types");
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for(var i=0; i<indicators.length; i++) {
indicator = indicators[i];
indicatorType = indicator.type;
indicator.type = indicatorType.toUpperCase();
indicatorWidth = indicator.width;
indicator.width = indicatorWidth.toUpperCase();
indicatorPaths = indicator.indicatorPaths;
for(var j=0; j<indicatorPaths.lenght; j++) {
indicatorPath = indicatorPaths[j];
indicatorPathType = indicatorPath.type;
indicatorPath.type = indicatorPathType.toUpperCase();
indicatorPathSource = indicatorPath.source;
indicatorPath.source = indicatorPathSource.toUpperCase();
}
db.indicator.save(indicator);
}
print("Uppercase enum values for Indicator types and width");
print("Uppercase enum values for Indicator path types and source");
}
function addHeightInIndicators() {
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for(var i=0; i<indicators.length; i++) {
indicator = indicators[i];
if(indicator.type == "chart" || indicator.type == "CHART") {
indicator['height'] = "MEDIUM";
} else {
indicator['height'] = "SMALL";
}
db.indicator.save(indicator);
}
print("Height field added in Indicators");
}
function addVisibility() {
stakeholders = db.stakeholder.find().map(function (stakeholders) {
return stakeholders;
});
for (var i = 0; i < stakeholders.length; i++) {
stakeholder = stakeholders[i];
if (stakeholder.isActive) {
if (stakeholder.isPublic) {
stakeholder['visibility'] = "PUBLIC";
} else {
stakeholder['visibility'] = "RESTRICTED";
}
} else {
stakeholder['visibility'] = "PRIVATE";
}
db.stakeholder.save(stakeholder);
}
print("Add visibility field for Stakeholders");
topics = db.topic.find().map(function (topics) {
return topics;
});
for (var i = 0; i < topics.length; i++) {
topic = topics[i];
topicVisibility = "PRIVATE";
if (topic.isActive) {
if (topic.isPublic) {
topicVisibility = "PUBLIC";
} else {
topicVisibility = "RESTRICTED";
}
}
topic['visibility'] = topicVisibility;
db.topic.save(topic);
}
print("Add visibility field for Topics");
categories = db.category.find().map(function (categories) {
return categories;
});
for (var i = 0; i < categories.length; i++) {
category = categories[i];
if (category.isActive) {
if (category.isPublic) {
category['visibility'] = "PUBLIC";
} else {
category['visibility'] = "RESTRICTED";
}
} else {
category['visibility'] = "PRIVATE";
}
db.category.save(category);
}
print("Add visibility field for Categories");
subCategories = db.subCategory.find().map(function (subCategories) {
return subCategories;
});
for (var i = 0; i < subCategories.length; i++) {
subCategory = subCategories[i];
if (subCategory.isActive) {
if (subCategory.isPublic) {
subCategory['visibility'] = "PUBLIC";
} else {
subCategory['visibility'] = "RESTRICTED";
}
} else {
subCategory['visibility'] = "PRIVATE";
}
db.subCategory.save(subCategory);
}
print("Add visibility field for SubCategories");
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for (var i = 0; i < indicators.length; i++) {
indicator = indicators[i];
if (indicator.isActive) {
if (indicator.isPublic) {
indicator['visibility'] = "PUBLIC";
} else {
indicator['visibility'] = "RESTRICTED";
}
} else {
indicator['visibility'] = "PRIVATE";
}
db.indicator.save(indicator);
}
print("Add visibility field for Indicators");
}
function removeIsActiveAndIsPublic() {
stakeholders = db.stakeholder.find().map(function (stakeholders) {
return stakeholders;
});
for(var i=0; i<stakeholders.length; i++) {
stakeholder = stakeholders[i];
db.stakeholder.update({"_id": stakeholder._id}, {$unset: {isPublic: "", isActive: ""}});
}
topics = db.topic.find().map(function (topics) {
return topics;
});
for(var i=0; i<topics.length; i++) {
topic = topics[i];
db.topic.update({"_id": topic._id}, {$unset: {isPublic: "", isActive: ""}});
}
categories = db.category.find().map(function (categories) {
return categories;
});
for(var i=0; i<categories.length; i++) {
category = categories[i];
db.category.update({"_id": category._id}, {$unset: {isPublic: "", isActive: ""}});
}
subCategories = db.subCategory.find().map(function (subCategories) {
return subCategories;
});
for(var i=0; i<subCategories.length; i++) {
subCategory = subCategories[i];
db.subCategory.update({"_id": subCategory._id}, {$unset: {isPublic: "", isActive: ""}});
}
indicators = db.indicator.find().map(function (indicators) {
return indicators;
});
for(var i=0; i<indicators.length; i++) {
indicator = indicators[i];
db.indicator.update({"_id": indicator._id}, {$unset: {isPublic: "", isActive: ""}});
}
}
function addAdminToolsCollections () {
db.createCollection("portal");
db.createCollection("entity");
db.createCollection("page");
db.createCollection("pageHelpContent");
db.createCollection("divId");
db.createCollection("divHelpContent");
}
function addPortals() {
db.portal.save({"pid": "monitor", "name": "Monitor", "type": "monitor", "piwik": null, "pages": {}, "entities": {}});
}
function uniqueIndexes() {
db.portal.createIndex( { "pid": 1 }, { unique: true } );
db.stakeholder.createIndex( { "alias": 1 }, { unique: true } );
}
function addFooterDivIdForPortalType(portalType) {
homePageID = db.page.find({"portalType": portalType, "route": "/"}).map( function(portal) { return portal._id.str; } ).toString();
db.divId.save({ "name" : "footer", "pages" : [ homePageID ], "portalType" : portalType });
print("divId 'footer' added for "+portalType+" (home page id: "+homePageID + ")");
}
function addHomePageInPortalType(portalType) {
homePageID = db.page.insertOne({ "route" : "/", "name" : "Home", "type" : "other", "entities" : [ ], "portalType" : portalType, "top" : false, "bottom" : false, "left" : false, "right" : false }).insertedId.str;
print("Creating Home page with id " + homePageID);
portals = db.portal.find({"type": portalType}).map( function(portal) { return portal; } );
for (var i = 0; i < portals.length; i++) {
portal_pages = portals[i].pages;
portal_pages[homePageID] = true;
portal_pid = portals[i].pid;
db.portal.update({ "pid" : portal_pid },{$set: { "pages": portal_pages}});
print("Add home page with id " + homePageID + " on " + portalType + " " + portal_pid);
}
}
function addFooterHelpTextForPortalType(portalType) {
footerDivIdID = db.divId.find({"portalType": portalType, "name": "footer"}).map( function(divId) { return divId._id.str; } ).toString();
portals = db.portal.find({"type": portalType}).map( function(portal) { return portal; } );
for (var j = 0; j < portals.length; j++) {
portal = portals[j];
var content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452";
if(portal.pid == "egi") {
content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452";
} else if(portal.pid == "risis") {
content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452 and 824091";
} else if(portal.pid == "sobigdata") {
content = "This OpenAIRE MONITOR dashboard is part of a project that has received funding from the European Union's Horizon 2020 research and innovation programme under grant agreements No. 777541 and 101017452 and 871042";
}
db.divHelpContent.save(
{ "divId" : footerDivIdID,
"portal" : portal._id.str,
"content" : "<p class=\"uk-margin-remove-bottom\"><span style=\"font-size:8pt\">"+content+"</span></p>",
"isActive" : true
}
);
print("div help text for divId 'footer' added for "+portalType +" (id: "+ portal._id + " - pid: " + portal.pid + " - footer divId id: "+footerDivIdID + ")");
}
}
function statsProfileOfIndicatorsAsVariable() {
print("statsProfileOfIndicatorsAsVariable");
numOfNumbers = 0;
numOfCharts = 0;
numOfNonMonitorProfiles = 0;
numOfMonitorProfiles = 0;
numOfNoProfiles = 0;
differentProfiles = new Set();
// indicators = db.indicator.find({"type": "chart"}).map(function (indicator) {
// indicators = db.indicator.find({"type": "number"}).map(function (indicator) {
indicators = db.indicator.find().map(function (indicator) {
return indicator;
});
print(indicators.length);
for (var i = 0; i < indicators.length; i++) {
indicator = indicators[i];
indicatorPaths = indicator.indicatorPaths;
if(indicatorPaths) {
for (var j = 0; j < indicatorPaths.length; j++) {
indicatorPath = indicatorPaths[j];
chartObjectStr = "";
// if(indicator.type == "chart") {
chartObjectStr = indicatorPath.chartObject;
// chartObject = JSON.parse(chartObjectStr);
if(indicator.type == "chart") {
numOfCharts++;
} else {
numOfNumbers++;
}
// if(i==0) {
// if(chartObject.chartDescription != null && chartObject.chartDescription.queries != null) {
// print(chartObject.chartDescription.queries.length);
// for(var z = 0; z < chartObject.chartDescription.queries.length; z++) {
// query = chartObject.chartDescription.queries[z].query;
// print(query.profile);
// query.profile = "((__statsProfile__))";
// }
// }
// indicatorPath.chartObject = JSON.stringify(chartObject);
if(chartObjectStr != null) {
var included = chartObjectStr.includes('"profile":"monitor"');
if (!included) {
numOfNonMonitorProfiles++;
print("Indicator with id: " + indicator._id + " has not monitor profile.");
} else {
numOfMonitorProfiles++;
}
splitted = chartObjectStr.split('"profile":"');
if (splitted.length == 1) {
numOfNoProfiles++;
}
for (var z = 1; z < splitted.length; z = z + 2) {
prof = splitted[z].split('"')[0];
differentProfiles.add(prof);
}
chartObjectStr = chartObjectStr.split('"profile":"monitor"').join('"profile":"((__profile__))"');
chartObjectStr = chartObjectStr.split('"profile":"OpenAIRE All-inclusive"').join('"profile":"((__profile__))"');
chartObjectStr = chartObjectStr.split('"profile":"OpenAIRE Monitor"').join('"profile":"((__profile__))"');
indicatorPath.chartObject = chartObjectStr;
} else {
print("Indicator with id: " + indicator._id + " has no chartObject");
}
}
}
// save indicator
db.indicator.save(indicator);
}
print("\n");
print("numOfNumbers: "+numOfNumbers);
print("numOfCharts: "+numOfCharts);
print("numOfMonitorProfiles: "+numOfMonitorProfiles);
print("numOfNonMonitorProfiles: "+numOfNonMonitorProfiles);
print("numOfNoProfiles: "+numOfNoProfiles);
print("Different profiles are: ");
for (var item of differentProfiles) {
print(item);
}
}
function addFundingLevelInFilters(filter) {
if(filter.groupFilters && filter.groupFilters.length > 0) {
var index = filter.groupFilters.findIndex(filter => filter.field.includes('project'));
if(index !== -1) {
print('before: ' + JSON.stringify(filter));
var prefix = filter.groupFilters[index].field.substring(0, filter.groupFilters[index].field.indexOf('project'));
if(!filter.groupFilters.find(filter => filter.field === prefix + "project.funding level 1")) {
filter.groupFilters.push({
"field": prefix + "project.funding level 1",
"type": "contains",
"values": [
'((__index_shortName__))'
]
});
print('after: ' + JSON.stringify(filter));
} else {
print('Already added');
}
}
return filter;
}
}
function addFundingStreamInDefaultMSCA() {
print("addFundingStreamInDefaultMSCA")
var stakeholder = db.stakeholder.findOne({"alias": "default-fl1"});
if(stakeholder) {
stakeholder.topics.forEach((topic) => {
var topicObj = db.topic.findOne({"_id": ObjectId(topic)});
topicObj.categories.forEach((category) => {
var categoryObj = db.category.findOne({"_id": ObjectId(category)});
categoryObj.subCategories.forEach((subCategory) => {
var subCategoryObj = db.subCategory.findOne({"_id": ObjectId(subCategory)});
subCategoryObj.numbers.forEach((number) => {
var section = db.section.findOne({"_id": ObjectId(number)});
section.indicators.forEach((indicator) => {
var indicatorObject = db.indicator.findOne({"_id": ObjectId(indicator)});
if(indicatorObject.indicatorPaths[0].parameters) {
indicatorObject.indicatorPaths[0].parameters['index_shortName'] = stakeholder.index_shortName.toLowerCase();
if(indicatorObject.indicatorPaths[0] && indicatorObject.indicatorPaths[0].chartObject) {
var json = JSON.parse(indicatorObject.indicatorPaths[0].chartObject);
if(json.series && json.series.length > 0) {
json.series.forEach(query => {
if(query.query && query.query.filters && query.query.filters.length > 0) {
query.query.filters.forEach(filter => {
filter = addFundingLevelInFilters(filter);
});
}
});
indicatorObject.indicatorPaths[0].chartObject = JSON.stringify(json);
db.indicator.save(indicatorObject);
}
}
}
});
});
subCategoryObj.charts.forEach((chart) => {
var section = db.section.findOne({"_id": ObjectId(chart)});
section.indicators.forEach((indicator) => {
var indicatorObject = db.indicator.findOne({"_id": ObjectId(indicator)});
if(indicatorObject.indicatorPaths[0].parameters) {
indicatorObject.indicatorPaths[0].parameters['index_shortName'] = stakeholder.index_shortName.toLowerCase();
if (indicatorObject.indicatorPaths[0] && indicatorObject.indicatorPaths[0].chartObject) {
var json = JSON.parse(indicatorObject.indicatorPaths[0].chartObject);
if (json.chartDescription && json.chartDescription.queries && json.chartDescription.queries.length > 0) {
json.chartDescription.queries.forEach(query => {
if (query.query && query.query.filters && query.query.filters.length > 0) {
query.query.filters.forEach(filter => {
filter = addFundingLevelInFilters(filter);
});
}
});
indicatorObject.indicatorPaths[0].chartObject = JSON.stringify(json);
db.indicator.save(indicatorObject);
}
}
}
});
});
});
});
});
} else {
print("Profile doesn't exist")
}
}
use monitordb;
// use 1_openaire-mongodb-beta; // dev db
// 29-09-2020 - 22-10-2020
//upperCaseEnumValues();
// addHeightInIndicators();
// addVisibility();
// removeIsActiveAndIsPublic();
//
// addAdminToolsCollections();
// // addPortals();
//
// uniqueIndexes();
// 04-06-2021 - 24-06-2021
// addHomePageInPortalType("funder");
// addFooterDivIdForPortalType("funder");
// addFooterHelpTextForPortalType("funder");
// addHomePageInPortalType("ri");
// addFooterDivIdForPortalType("ri");
// addFooterHelpTextForPortalType("ri");
// addHomePageInPortalType("organization");
// addFooterDivIdForPortalType("organization");
// addFooterHelpTextForPortalType("organization");
// 11-04-2023
statsProfileOfIndicatorsAsVariable();
// 30-05-2023
addFundingStreamInDefaultMSCA();