new_model_for_communities #15

Merged
michele.artini merged 81 commits from new_model_for_communities into master 2023-10-24 08:12:26 +02:00
5 changed files with 189 additions and 158 deletions
Showing only changes of commit 653e925cff - Show all commits

View File

@ -24,7 +24,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import eu.dnetlib.openaire.exporter.exceptions.CommunityException;
import eu.dnetlib.openaire.exporter.exceptions.ResourceNotFoundException;
import eu.dnetlib.openaire.exporter.model.community.CommunityContentprovider;
import eu.dnetlib.openaire.exporter.model.community.CommunityDetails;
import eu.dnetlib.openaire.exporter.model.community.CommunityOpenAIRECommunities;
@ -74,7 +73,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public CommunityDetails getCommunity(@PathVariable final String id) throws CommunityException, ResourceNotFoundException {
public CommunityDetails getCommunity(@PathVariable final String id) throws CommunityException {
return communityService.getCommunity(id);
}
@ -91,7 +90,7 @@ public class CommunityApiController {
})
public void setCommunity(
@PathVariable final String id,
@RequestBody final CommunityWritableProperties properties) throws CommunityException, ResourceNotFoundException {
@RequestBody final CommunityWritableProperties properties) throws CommunityException {
communityService.setCommunity(id, properties);
}
@ -108,7 +107,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public Page<CommunityProject> getCommunityProjects(@PathVariable final String id, @PathVariable final Integer page, @PathVariable final Integer size)
throws CommunityException, ResourceNotFoundException {
throws CommunityException {
return communityService.getCommunityProjects(id, page, size);
}
@ -125,7 +124,7 @@ public class CommunityApiController {
})
public CommunityProject addCommunityProject(
@PathVariable final String id,
@RequestBody final CommunityProject project) throws CommunityException, ResourceNotFoundException {
@RequestBody final CommunityProject project) throws CommunityException {
return communityService.addCommunityProject(id, project);
}
@ -143,9 +142,9 @@ public class CommunityApiController {
})
public void deleteCommunityProject(
@PathVariable final String id,
@RequestBody final String projectId) throws CommunityException, ResourceNotFoundException {
@RequestBody final String projectId) throws CommunityException {
communityService.removeCommunityProject(id, projectId);
communityService.removeCommunityProjects(id, projectId);
}
@RequestMapping(value = "/community/{id}/projectList", produces = {
@ -159,11 +158,13 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public List<CommunityProject> addCommunityProjectList(
public CommunityProject[] addCommunityProjectList(
@PathVariable final String id,
@RequestBody final List<CommunityProject> projectList) throws CommunityException, ResourceNotFoundException {
@RequestBody final CommunityProject[] projects) throws CommunityException {
return communityService.addCommunityProjectList(id, projectList);
communityService.addCommunityProjects(id, projects);
return projects;
}
@RequestMapping(value = "/community/{id}/projectList", produces = {
@ -179,9 +180,9 @@ public class CommunityApiController {
})
public void deleteCommunityProjectList(
@PathVariable final String id,
@RequestBody final List<String> projectIdList) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] projectIdList) throws CommunityException {
communityService.removeCommunityProjectList(id, projectIdList);
communityService.removeCommunityProjects(id, projectIdList);
}
@RequestMapping(value = "/community/{id}/contentproviders", produces = {
@ -195,7 +196,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public List<CommunityContentprovider> getCommunityContentproviders(@PathVariable final String id) throws CommunityException, ResourceNotFoundException {
public List<CommunityContentprovider> getCommunityContentproviders(@PathVariable final String id) throws CommunityException {
return communityService.getCommunityContentproviders(id);
}
@ -212,9 +213,11 @@ public class CommunityApiController {
})
public CommunityContentprovider addCommunityContentprovider(
@PathVariable final String id,
@RequestBody final CommunityContentprovider contentprovider) throws CommunityException, ResourceNotFoundException {
@RequestBody final CommunityContentprovider contentprovider) throws CommunityException {
return communityService.addCommunityContentprovider(id, contentprovider);
communityService.addCommunityContentProviders(id, contentprovider);
return contentprovider;
}
@RequestMapping(value = "/community/{id}/contentproviders", produces = {
@ -230,34 +233,36 @@ public class CommunityApiController {
})
public void removeCommunityContentprovider(
@PathVariable final String id,
@RequestBody final String contentproviderId) throws CommunityException, ResourceNotFoundException {
@RequestBody final String contentproviderId) throws CommunityException {
communityService.removeCommunityContentProvider(id, contentproviderId);
communityService.removeCommunityContentProviders(id, contentproviderId);
}
@RequestMapping(value = "/community/{id}/contentprovidersList", produces = {
"application/json"
}, method = RequestMethod.POST)
@Operation(summary = "associate a list of content providers to the community", description = "associate a list of content providers to the community", tags = {
C_PJ, W
C_CP, W
})
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public List<CommunityContentprovider> addCommunityContentProvidersList(
public CommunityContentprovider[] addCommunityContentProvidersList(
@PathVariable final String id,
@RequestBody final List<CommunityContentprovider> contentprovidersList) throws CommunityException, ResourceNotFoundException {
@RequestBody final CommunityContentprovider[] contentprovidersList) throws CommunityException {
return communityService.addCommunityContentProvidersList(id, contentprovidersList);
communityService.addCommunityContentProviders(id, contentprovidersList);
return contentprovidersList;
}
@RequestMapping(value = "/community/{id}/contentprovidersList", produces = {
"application/json"
}, method = RequestMethod.DELETE)
@Operation(summary = "remove a list of content providers from the community", description = "remove a list of content providers from the community", tags = {
C_PJ, W
C_CP, W
})
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "OK"),
@ -266,9 +271,9 @@ public class CommunityApiController {
})
public void deleteCommunityContentProvidersList(
@PathVariable final String id,
@RequestBody final List<String> contentProviderIdList) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] contentProviderIdList) throws CommunityException {
communityService.removeCommunityContentProviderList(id, contentProviderIdList);
communityService.removeCommunityContentProviders(id, contentProviderIdList);
}
// ADDING CODE FOR COMMUNITY ORGANIZATIONS
@ -284,7 +289,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public List<CommunityOrganization> getCommunityOrganizations(@PathVariable final String id) throws CommunityException, ResourceNotFoundException {
public List<CommunityOrganization> getCommunityOrganizations(@PathVariable final String id) throws CommunityException {
return communityService.getCommunityOrganizations(id);
}
@ -301,9 +306,31 @@ public class CommunityApiController {
})
public CommunityOrganization addCommunityOrganization(
@PathVariable final String id,
@RequestBody final CommunityOrganization organization) throws CommunityException, ResourceNotFoundException {
@RequestBody final CommunityOrganization organization) throws CommunityException {
return communityService.addCommunityOrganization(id, organization);
communityService.addCommunityOrganizations(id, organization);
return organization;
}
@RequestMapping(value = "/community/{id}/organizationList", produces = {
"application/json"
}, method = RequestMethod.POST)
@Operation(summary = "associate a list of organizations to the community", description = "associate a list of organizations to the community", tags = {
C_O, W
})
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public CommunityOrganization[] addCommunityOrganizationList(
@PathVariable final String id,
@RequestBody final CommunityOrganization[] orgs) throws CommunityException {
communityService.addCommunityOrganizations(id, orgs);
return orgs;
}
@RequestMapping(value = "/community/{id}/organizations", produces = {
@ -319,10 +346,29 @@ public class CommunityApiController {
})
public void removeCommunityOrganization(
@PathVariable final String id,
@RequestBody final String organizationId) throws CommunityException, ResourceNotFoundException {
@RequestBody final String organizationId) throws CommunityException {
communityService.removeCommunityOrganization(id, organizationId);
communityService.removeCommunityOrganizations(id, organizationId);
}
@RequestMapping(value = "/community/{id}/organizationList", produces = {
"application/json"
}, method = RequestMethod.DELETE)
@Operation(summary = "remove a list of associations between some organizations and the community", description = "remove a list of associations between some organizations and the community", tags = {
C_O, W
})
@ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public void removeCommunityOrganizationList(
@PathVariable final String id,
@RequestBody final String[] orgsIdList) throws CommunityException {
communityService.removeCommunityOrganizations(id, orgsIdList);
}
// **********************
@RequestMapping(value = "/community/{id}/subjects", produces = {
@ -338,7 +384,7 @@ public class CommunityApiController {
})
public CommunityDetails addCommunitySubjects(
@PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] subjects) throws CommunityException {
return communityService.addCommunitySubjects(id, subjects);
}
@ -356,7 +402,7 @@ public class CommunityApiController {
})
public CommunityDetails removeCommunitySubjects(
@PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] subjects) throws CommunityException {
return communityService.removeCommunitySubjects(id, subjects);
}
@ -374,7 +420,7 @@ public class CommunityApiController {
})
public CommunityDetails addCommunityFOS(
@PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] subjects) throws CommunityException {
return communityService.addCommunityFOS(id, subjects);
}
@ -392,7 +438,7 @@ public class CommunityApiController {
})
public CommunityDetails removeCommunityFOS(
@PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] subjects) throws CommunityException {
return communityService.removeCommunityFOS(id, subjects);
}
@ -410,7 +456,7 @@ public class CommunityApiController {
})
public CommunityDetails addCommunitySDG(
@PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] subjects) throws CommunityException {
return communityService.addCommunitySDG(id, subjects);
}
@ -428,7 +474,7 @@ public class CommunityApiController {
})
public CommunityDetails removeCommunitySDG(
@PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException {
@RequestBody final String[] subjects) throws CommunityException {
return communityService.removeCommunitySDG(id, subjects);
}
@ -446,7 +492,7 @@ public class CommunityApiController {
})
public CommunityDetails addAdvancedConstraint(
@PathVariable final String id,
@RequestBody final SelectionCriteria advancedConstraint) throws CommunityException, ResourceNotFoundException {
@RequestBody final SelectionCriteria advancedConstraint) throws CommunityException {
return communityService.addCommunityAdvancedConstraint(id, advancedConstraint);
}
@ -463,7 +509,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public CommunityDetails removeAdvancedConstraint(
@PathVariable final String id) throws CommunityException, ResourceNotFoundException {
@PathVariable final String id) throws CommunityException {
return communityService.removeCommunityAdvancedConstraint(id);
}
@ -482,7 +528,7 @@ public class CommunityApiController {
public CommunityDetails addCommunityZenodoCommunity(
@PathVariable final String id,
@RequestParam(required = false, defaultValue = "false") final boolean main,
@RequestBody final String zenodocommunity) throws CommunityException, ResourceNotFoundException {
@RequestBody final String zenodocommunity) throws CommunityException {
return communityService.addCommunityZenodoCommunity(id, zenodocommunity, main);
@ -502,7 +548,7 @@ public class CommunityApiController {
public void removeCommunityZenodoCommunity(
@PathVariable final String id,
@RequestParam(required = false, defaultValue = "false") final boolean main,
@RequestBody final String zenodoCommId) throws CommunityException, ResourceNotFoundException {
@RequestBody final String zenodoCommId) throws CommunityException {
communityService.removeCommunityZenodoCommunity(id, zenodoCommId, main);
}
@ -518,7 +564,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error")
})
public CommunityOpenAIRECommunities getOpenAireCommunities(@PathVariable final String zenodoId) throws CommunityException, ResourceNotFoundException {
public CommunityOpenAIRECommunities getOpenAireCommunities(@PathVariable final String zenodoId) throws CommunityException {
final CommunityOpenAIRECommunities res = new CommunityOpenAIRECommunities();
res.setZenodoid(zenodoId);
res.setOpenAirecommunitylist(communityService.getOpenAIRECommunitiesByZenodoId(zenodoId));

View File

@ -23,6 +23,7 @@ import eu.dnetlib.openaire.community.model.DbCommunity;
import eu.dnetlib.openaire.community.model.DbDatasource;
import eu.dnetlib.openaire.community.model.DbDatasourcePK;
import eu.dnetlib.openaire.community.model.DbOrganization;
import eu.dnetlib.openaire.community.model.DbOrganizationPK;
import eu.dnetlib.openaire.community.model.DbProject;
import eu.dnetlib.openaire.community.model.DbProjectPK;
import eu.dnetlib.openaire.community.model.DbSubCommunity;
@ -49,7 +50,10 @@ import eu.dnetlib.openaire.exporter.model.community.selectioncriteria.SelectionC
@ConditionalOnProperty(value = "openaire.exporter.enable.community", havingValue = "true")
public class CommunityService {
// TODO: Verificare Tickets: #8835, #8854, #6483, #3259, #3494
// #8835 reimplementation ot the community API
// #8854 compatibility with the context API
// #6483 post methods to add multiple projects/providers
// #3494 Move context profiles from IS to dedicated DBs
@Autowired
private DbCommunityRepository dbCommunityRepository;
@ -78,6 +82,7 @@ public class CommunityService {
}
}
@Transactional
public CommunityDetails saveCommunity(final CommunityDetails details) throws CommunityException {
try {
dbCommunityRepository.save(CommunityMappingUtils.toCommunity(details));
@ -88,7 +93,8 @@ public class CommunityService {
}
}
public CommunityDetails getCommunity(final String id) throws CommunityException, ResourceNotFoundException {
@Transactional
public CommunityDetails getCommunity(final String id) throws CommunityException {
try {
final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
return CommunityMappingUtils.CommunityDetails(c);
@ -99,7 +105,7 @@ public class CommunityService {
}
@Transactional
public void setCommunity(final String id, final CommunityWritableProperties details) throws CommunityException, ResourceNotFoundException {
public void setCommunity(final String id, final CommunityWritableProperties details) throws CommunityException {
try {
final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
CommunityMappingUtils.populateCommunity(c, details);
@ -110,7 +116,8 @@ public class CommunityService {
}
}
public Page<CommunityProject> getCommunityProjects(final String id, final int page, final int size) throws CommunityException, ResourceNotFoundException {
@Transactional
public Page<CommunityProject> getCommunityProjects(final String id, final int page, final int size) throws CommunityException {
try {
return dbProjectRepository.findByCommunity(id, PageRequest.of(page, size)).map(CommunityMappingUtils::toCommunityProject);
} catch (final Throwable e) {
@ -119,7 +126,8 @@ public class CommunityService {
}
}
public CommunityProject addCommunityProject(final String id, final CommunityProject project) throws CommunityException, ResourceNotFoundException {
@Transactional
public CommunityProject addCommunityProject(final String id, final CommunityProject project) throws CommunityException {
try {
final DbProject p = CommunityMappingUtils.toDbProject(id, project);
dbProjectRepository.save(p);
@ -130,34 +138,24 @@ public class CommunityService {
}
}
public List<CommunityProject> addCommunityProjectList(final String id, final List<CommunityProject> projectList)
throws CommunityException, ResourceNotFoundException {
@Transactional
public void addCommunityProjects(final String id, final CommunityProject... projects) throws CommunityException {
try {
final List<DbProject> list = projectList.stream()
final List<DbProject> list = Arrays.stream(projects)
.map(p -> CommunityMappingUtils.toDbProject(id, p))
.collect(Collectors.toList());
dbProjectRepository.saveAll(list);
return projectList;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public void removeCommunityProject(final String id, final String projectId) throws CommunityException, ResourceNotFoundException {
@Transactional
public void removeCommunityProjects(final String id, final String... ids) throws CommunityException {
try {
dbProjectRepository.deleteById(new DbProjectPK(id, projectId));
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public void removeCommunityProjectList(final String id, final List<String> projectIdList) throws CommunityException, ResourceNotFoundException {
try {
final List<DbProjectPK> list = projectIdList.stream()
final List<DbProjectPK> list = Arrays.stream(ids)
.map(projectId -> new DbProjectPK(id, projectId))
.collect(Collectors.toList());
dbProjectRepository.deleteAllById(list);
@ -167,7 +165,7 @@ public class CommunityService {
}
}
public List<CommunityContentprovider> getCommunityContentproviders(final String id) throws CommunityException, ResourceNotFoundException {
public List<CommunityContentprovider> getCommunityContentproviders(final String id) throws CommunityException {
try {
return dbDatasourceRepository.findByCommunity(id)
.stream()
@ -179,47 +177,25 @@ public class CommunityService {
}
}
public CommunityContentprovider addCommunityContentprovider(final String id, final CommunityContentprovider cp)
throws CommunityException, ResourceNotFoundException {
@Transactional
public void addCommunityContentProviders(final String id, final CommunityContentprovider... contentproviders)
throws CommunityException {
try {
final DbDatasource ds = CommunityMappingUtils.toDbDatasource(id, cp);
dbDatasourceRepository.save(ds);
return cp;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public List<CommunityContentprovider> addCommunityContentProvidersList(final String id, final List<CommunityContentprovider> contentprovidersList)
throws CommunityException, ResourceNotFoundException {
try {
final List<DbDatasource> list = contentprovidersList.stream()
final List<DbDatasource> list = Arrays.stream(contentproviders)
.map(cp -> CommunityMappingUtils.toDbDatasource(id, cp))
.collect(Collectors.toList());
dbDatasourceRepository.saveAll(list);
return contentprovidersList;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public void removeCommunityContentProvider(final String id, final String contentproviderId) throws CommunityException, ResourceNotFoundException {
@Transactional
public void removeCommunityContentProviders(final String id, final String... ids) throws CommunityException {
try {
dbDatasourceRepository.deleteById(new DbDatasourcePK(id, contentproviderId));
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public void removeCommunityContentProviderList(final String id, final List<String> contentProviderIdList)
throws CommunityException, ResourceNotFoundException {
try {
final List<DbDatasourcePK> list = contentProviderIdList.stream()
final List<DbDatasourcePK> list = Arrays.stream(ids)
.map(dsId -> new DbDatasourcePK(id, dsId))
.collect(Collectors.toList());
dbDatasourceRepository.deleteAllById(list);
@ -229,16 +205,21 @@ public class CommunityService {
}
}
public void removeCommunityOrganization(final String id, final String organizationId) throws CommunityException, ResourceNotFoundException {
@Transactional
public void removeCommunityOrganizations(final String id, final String... ids) throws CommunityException {
try {
dbDatasourceRepository.deleteById(new DbDatasourcePK(id, organizationId));
final List<DbOrganizationPK> list = Arrays.stream(ids)
.map(orgId -> new DbOrganizationPK(id, orgId))
.collect(Collectors.toList());
dbOrganizationRepository.deleteAllById(list);
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public List<CommunityOrganization> getCommunityOrganizations(final String id) throws CommunityException, ResourceNotFoundException {
@Transactional
public List<CommunityOrganization> getCommunityOrganizations(final String id) throws CommunityException {
try {
return dbSupportOrgRepository.findByCommunity(id)
.stream()
@ -250,35 +231,22 @@ public class CommunityService {
}
}
public CommunityOrganization addCommunityOrganization(final String id, final CommunityOrganization organization)
throws CommunityException, ResourceNotFoundException {
@Transactional
public void addCommunityOrganizations(final String id, final CommunityOrganization... orgs) throws CommunityException {
try {
final DbSupportOrg o = CommunityMappingUtils.toDbSupportOrg(id, organization);
dbSupportOrgRepository.save(o);
return organization;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public List<CommunityOrganization> addCommunityOrganizationList(final String id, final List<CommunityOrganization> orgList)
throws CommunityException, ResourceNotFoundException {
try {
final List<DbSupportOrg> list = orgList.stream()
final List<DbSupportOrg> list = Arrays.stream(orgs)
.map(o -> CommunityMappingUtils.toDbSupportOrg(id, o))
.collect(Collectors.toList());
dbSupportOrgRepository.saveAll(list);
return orgList;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public void removeSubCommunity(final String id, final String subCommunityId) throws CommunityException, ResourceNotFoundException {
@Transactional
public void removeSubCommunity(final String id, final String subCommunityId) throws CommunityException {
try {
dbSubCommunityRepository.deleteById(subCommunityId);
} catch (final Throwable e) {
@ -287,7 +255,8 @@ public class CommunityService {
}
}
public List<SubCommunity> getSubCommunities(final String id) throws CommunityException, ResourceNotFoundException {
@Transactional
public List<SubCommunity> getSubCommunities(final String id) throws CommunityException {
try {
return dbSubCommunityRepository.findByCommunity(id)
.stream()
@ -299,33 +268,22 @@ public class CommunityService {
}
}
public SubCommunity addSubCommunity(final SubCommunity sub) throws CommunityException {
@Transactional
public void addSubCommunities(final SubCommunity... subs) throws CommunityException {
try {
final DbSubCommunity sc = CommunityMappingUtils.toDbSubCommunity(sub);
dbSubCommunityRepository.save(sc);
return sub;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public List<SubCommunity> addSubCommunityList(final List<SubCommunity> subs) throws CommunityException {
try {
final List<DbSubCommunity> list = subs.stream()
final List<DbSubCommunity> list = Arrays.stream(subs)
.map(CommunityMappingUtils::toDbSubCommunity)
.collect(Collectors.toList());
dbSubCommunityRepository.saveAll(list);
return subs;
} catch (final Throwable e) {
log.error(e);
throw new CommunityException(e);
}
}
public CommunityDetails addCommunitySubjects(final String id, final String... subjects) throws CommunityException, ResourceNotFoundException {
@Transactional
public CommunityDetails addCommunitySubjects(final String id, final String... subjects) throws CommunityException {
try {
return modifyElementToArrayField(id, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), false, subjects);
} catch (final Throwable e) {
@ -334,7 +292,7 @@ public class CommunityService {
}
}
public CommunityDetails removeCommunitySubjects(final String id, final String... subjects) throws CommunityException, ResourceNotFoundException {
public CommunityDetails removeCommunitySubjects(final String id, final String... subjects) throws CommunityException {
try {
return modifyElementToArrayField(id, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), true, subjects);
} catch (final Throwable e) {
@ -343,7 +301,7 @@ public class CommunityService {
}
}
public CommunityDetails addCommunityFOS(final String id, final String... foss) throws CommunityException, ResourceNotFoundException {
public CommunityDetails addCommunityFOS(final String id, final String... foss) throws CommunityException {
try {
return modifyElementToArrayField(id, c -> c.getFos(), (c, fos) -> c.setFos(fos), false, foss);
} catch (final Throwable e) {
@ -352,7 +310,7 @@ public class CommunityService {
}
}
public CommunityDetails removeCommunityFOS(final String id, final String... foss) throws CommunityException, ResourceNotFoundException {
public CommunityDetails removeCommunityFOS(final String id, final String... foss) throws CommunityException {
try {
return modifyElementToArrayField(id, c -> c.getFos(), (c, fos) -> c.setFos(fos), true, foss);
} catch (final Throwable e) {
@ -361,7 +319,7 @@ public class CommunityService {
}
}
public CommunityDetails addCommunitySDG(final String id, final String... sdgs) throws CommunityException, ResourceNotFoundException {
public CommunityDetails addCommunitySDG(final String id, final String... sdgs) throws CommunityException {
try {
return modifyElementToArrayField(id, c -> c.getSdg(), (c, sdg) -> c.setSdg(sdg), false, sdgs);
} catch (final Throwable e) {
@ -370,7 +328,7 @@ public class CommunityService {
}
}
public CommunityDetails removeCommunitySDG(final String id, final String... sdgs) throws CommunityException, ResourceNotFoundException {
public CommunityDetails removeCommunitySDG(final String id, final String... sdgs) throws CommunityException {
try {
return modifyElementToArrayField(id, c -> c.getSdg(), (c, sdg) -> c.setSdg(sdg), true, sdgs);
} catch (final Throwable e) {
@ -379,8 +337,9 @@ public class CommunityService {
}
}
@Transactional
public CommunityDetails addCommunityAdvancedConstraint(final String id, final SelectionCriteria advancedCosntraint)
throws CommunityException, ResourceNotFoundException {
throws CommunityException {
try {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
dbEntry.setAdvancedConstraints(advancedCosntraint);
@ -393,7 +352,8 @@ public class CommunityService {
}
}
public CommunityDetails removeCommunityAdvancedConstraint(final String id) throws ResourceNotFoundException, CommunityException {
@Transactional
public CommunityDetails removeCommunityAdvancedConstraint(final String id) throws CommunityException {
try {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
dbEntry.setAdvancedConstraints(null);
@ -406,7 +366,7 @@ public class CommunityService {
}
public CommunityDetails removeCommunityZenodoCommunity(final String id, final String zenodoCommunity, final boolean isMain)
throws CommunityException, ResourceNotFoundException {
throws CommunityException {
if (isMain) {
return updateElementToSimpleField(id, (c, val) -> c.setMainZenodoCommunity(val), null);
} else {
@ -415,7 +375,7 @@ public class CommunityService {
}
public CommunityDetails addCommunityZenodoCommunity(final String id, final String zenodoCommunity, final boolean isMain)
throws CommunityException, ResourceNotFoundException {
throws CommunityException {
try {
if (isMain) {
return updateElementToSimpleField(id, (c, val) -> c.setMainZenodoCommunity(val), zenodoCommunity);
@ -431,7 +391,7 @@ public class CommunityService {
@Transactional
private CommunityDetails updateElementToSimpleField(final String id,
final BiConsumer<DbCommunity, String> setter,
final String value) throws ResourceNotFoundException, CommunityException {
final String value) throws CommunityException {
try {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
setter.accept(dbEntry, value);
@ -448,7 +408,7 @@ public class CommunityService {
final Function<DbCommunity, String[]> getter,
final BiConsumer<DbCommunity, String[]> setter,
final boolean remove,
final String... values) throws ResourceNotFoundException, CommunityException {
final String... values) throws CommunityException {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
@ -472,6 +432,7 @@ public class CommunityService {
return getCommunity(id);
}
@Transactional
public List<String> getOpenAIRECommunitiesByZenodoId(final String zenodoId) throws CommunityException {
try {
return dbCommunityRepository.findByZenodoId(zenodoId);
@ -481,6 +442,7 @@ public class CommunityService {
}
}
@Transactional
public Map<String, Set<String>> getPropagationOrganizationCommunityMap() throws CommunityException {
try {
return dbOrganizationRepository.findAll()
@ -492,6 +454,7 @@ public class CommunityService {
}
}
@Transactional
public Set<String> getPropagationOrganizationsForCommunity(final String communityId) throws CommunityException {
try {
return dbOrganizationRepository.findByCommunity(communityId)

View File

@ -209,10 +209,10 @@ public class CommunityImporterService {
.collect(Collectors.toList());
service.saveCommunity(community);
service.addCommunityProjectList(context.getId(), projects);
service.addCommunityContentProvidersList(context.getId(), datasources);
service.addCommunityOrganizationList(context.getId(), orgs);
service.addSubCommunityList(subs);
service.addCommunityProjects(context.getId(), projects.toArray(new CommunityProject[projects.size()]));
service.addCommunityContentProviders(context.getId(), datasources.toArray(new CommunityContentprovider[datasources.size()]));
service.addCommunityOrganizations(context.getId(), orgs.toArray(new CommunityOrganization[orgs.size()]));
service.addSubCommunities(subs.toArray(new SubCommunity[subs.size()]));
} catch (
final Exception e) {
@ -398,4 +398,12 @@ public class CommunityImporterService {
protected void setService(final CommunityService service) {
this.service = service;
}
protected JdbcTemplate getJdbcTemplate() {
return jdbcTemplate;
}
protected void setJdbcTemplate(final JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
}

View File

@ -11,6 +11,13 @@ public class DbOrganizationPK implements Serializable {
private String orgId;
public DbOrganizationPK() {}
public DbOrganizationPK(final String community, final String orgId) {
this.community = community;
this.orgId = orgId;
}
public String getCommunity() {
return community;
}

View File

@ -4,6 +4,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertTrue;
import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Queue;
@ -16,6 +17,7 @@ import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.junit.jupiter.MockitoExtension;
import org.springframework.jdbc.core.JdbcTemplate;
import eu.dnetlib.openaire.community.CommunityService;
import eu.dnetlib.openaire.community.model.DbOrganization;
@ -40,11 +42,15 @@ class CommunityImporterServiceTest {
@Mock
private CommunityService service;
@Mock
private JdbcTemplate jdbcTemplate;
@BeforeEach
public void setUp() {
importer = new CommunityImporterService();
importer.setDbOrganizationRepository(dbOrganizationRepository);
importer.setService(service);
importer.setJdbcTemplate(jdbcTemplate);
}
@Test
@ -54,8 +60,8 @@ class CommunityImporterServiceTest {
// list.forEach(System.out::println);
assertEquals(245, list.size());
assertEquals(1, list.stream().filter(o -> o.getOrgId().equals("20|openorgs____::9dd5545aacd3d8019e00c3f837269746")).count());
assertEquals(2, list.stream().filter(o -> o.getOrgId().equals("20|openorgs____::d11f981828c485cd23d93f7f24f24db1")).count());
assertEquals(1, list.stream().filter(o -> o.getOrgId().equals("openorgs____::9dd5545aacd3d8019e00c3f837269746")).count());
assertEquals(2, list.stream().filter(o -> o.getOrgId().equals("openorgs____::d11f981828c485cd23d93f7f24f24db1")).count());
assertEquals(14, list.stream().filter(o -> o.getCommunity().equals("beopen")).count());
}
@ -68,37 +74,38 @@ class CommunityImporterServiceTest {
final Context context = ContextMappingUtils.parseContext(profile, errors);
assertTrue(errors.isEmpty());
Mockito.when(jdbcTemplate.queryForList(Mockito.anyString(), Mockito.any(Class.class), Mockito.anyString())).thenReturn(Arrays.asList("corda_______"));
importer.importCommunity(context);
final ArgumentCaptor<CommunityDetails> detailsCapture = ArgumentCaptor.forClass(CommunityDetails.class);
final ArgumentCaptor<List<CommunityProject>> projectsCapture = ArgumentCaptor.forClass(List.class);
final ArgumentCaptor<List<CommunityContentprovider>> datasourcesCapture = ArgumentCaptor.forClass(List.class);
final ArgumentCaptor<List<CommunityOrganization>> orgsCapture = ArgumentCaptor.forClass(List.class);
final ArgumentCaptor<List<SubCommunity>> subCommunitiesCapture = ArgumentCaptor.forClass(List.class);
final ArgumentCaptor<CommunityProject> projectsCapture = ArgumentCaptor.forClass(CommunityProject.class);
final ArgumentCaptor<CommunityContentprovider> datasourcesCapture = ArgumentCaptor.forClass(CommunityContentprovider.class);
final ArgumentCaptor<CommunityOrganization> orgsCapture = ArgumentCaptor.forClass(CommunityOrganization.class);
final ArgumentCaptor<SubCommunity> subCommunitiesCapture = ArgumentCaptor.forClass(SubCommunity.class);
Mockito.verify(service, Mockito.times(1)).saveCommunity(detailsCapture.capture());
Mockito.verify(service, Mockito.times(1)).addCommunityProjectList(Mockito.anyString(), projectsCapture.capture());
Mockito.verify(service, Mockito.times(1)).addCommunityContentProvidersList(Mockito.anyString(), datasourcesCapture.capture());
Mockito.verify(service, Mockito.times(1)).addCommunityOrganizationList(Mockito.anyString(), orgsCapture.capture());
Mockito.verify(service, Mockito.times(1)).addSubCommunityList(subCommunitiesCapture.capture());
Mockito.verify(service, Mockito.times(1)).addCommunityProjects(Mockito.anyString(), projectsCapture.capture());
Mockito.verify(service, Mockito.times(1)).addCommunityContentProviders(Mockito.anyString(), datasourcesCapture.capture());
Mockito.verify(service, Mockito.times(1)).addCommunityOrganizations(Mockito.anyString(), orgsCapture.capture());
Mockito.verify(service, Mockito.times(1)).addSubCommunities(subCommunitiesCapture.capture());
final CommunityDetails details = detailsCapture.getValue();
assertEquals("egi", details.getId());
// System.out.println(details);
final List<CommunityProject> projects = projectsCapture.getValue();
final List<CommunityProject> projects = projectsCapture.getAllValues();
assertEquals(83, projects.size());
// projects.forEach(System.out::println);
final List<CommunityContentprovider> datasources = datasourcesCapture.getValue();
final List<CommunityContentprovider> datasources = datasourcesCapture.getAllValues();
assertEquals(1, datasources.size());
// datasources.forEach(System.out::println);
final List<CommunityOrganization> orgs = orgsCapture.getValue();
final List<CommunityOrganization> orgs = orgsCapture.getAllValues();
assertEquals(1, orgs.size());
// orgs.forEach(System.out::println);
final List<SubCommunity> subs = subCommunitiesCapture.getValue();
final List<SubCommunity> subs = subCommunitiesCapture.getAllValues();
assertEquals(688, subs.size());
// subs.forEach(System.out::println);