refactoring

This commit is contained in:
Michele Artini 2023-07-04 11:36:44 +02:00
parent 09606452d4
commit 653e925cff
5 changed files with 189 additions and 158 deletions

View File

@ -24,7 +24,6 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import eu.dnetlib.openaire.exporter.exceptions.CommunityException; 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.CommunityContentprovider;
import eu.dnetlib.openaire.exporter.model.community.CommunityDetails; import eu.dnetlib.openaire.exporter.model.community.CommunityDetails;
import eu.dnetlib.openaire.exporter.model.community.CommunityOpenAIRECommunities; import eu.dnetlib.openaire.exporter.model.community.CommunityOpenAIRECommunities;
@ -74,7 +73,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"), @ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error") @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); return communityService.getCommunity(id);
} }
@ -91,7 +90,7 @@ public class CommunityApiController {
}) })
public void setCommunity( public void setCommunity(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final CommunityWritableProperties properties) throws CommunityException, ResourceNotFoundException { @RequestBody final CommunityWritableProperties properties) throws CommunityException {
communityService.setCommunity(id, properties); communityService.setCommunity(id, properties);
} }
@ -108,7 +107,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "500", description = "unexpected error") @ApiResponse(responseCode = "500", description = "unexpected error")
}) })
public Page<CommunityProject> getCommunityProjects(@PathVariable final String id, @PathVariable final Integer page, @PathVariable final Integer size) 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); return communityService.getCommunityProjects(id, page, size);
} }
@ -125,7 +124,7 @@ public class CommunityApiController {
}) })
public CommunityProject addCommunityProject( public CommunityProject addCommunityProject(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final CommunityProject project) throws CommunityException, ResourceNotFoundException { @RequestBody final CommunityProject project) throws CommunityException {
return communityService.addCommunityProject(id, project); return communityService.addCommunityProject(id, project);
} }
@ -143,9 +142,9 @@ public class CommunityApiController {
}) })
public void deleteCommunityProject( public void deleteCommunityProject(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/projectList", produces = {
@ -159,11 +158,13 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"), @ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error") @ApiResponse(responseCode = "500", description = "unexpected error")
}) })
public List<CommunityProject> addCommunityProjectList( public CommunityProject[] addCommunityProjectList(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/projectList", produces = {
@ -179,9 +180,9 @@ public class CommunityApiController {
}) })
public void deleteCommunityProjectList( public void deleteCommunityProjectList(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/contentproviders", produces = {
@ -195,7 +196,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"), @ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error") @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); return communityService.getCommunityContentproviders(id);
} }
@ -212,9 +213,11 @@ public class CommunityApiController {
}) })
public CommunityContentprovider addCommunityContentprovider( public CommunityContentprovider addCommunityContentprovider(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/contentproviders", produces = {
@ -230,34 +233,36 @@ public class CommunityApiController {
}) })
public void removeCommunityContentprovider( public void removeCommunityContentprovider(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/contentprovidersList", produces = {
"application/json" "application/json"
}, method = RequestMethod.POST) }, 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 = { @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 = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),
@ApiResponse(responseCode = "404", description = "not found"), @ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error") @ApiResponse(responseCode = "500", description = "unexpected error")
}) })
public List<CommunityContentprovider> addCommunityContentProvidersList( public CommunityContentprovider[] addCommunityContentProvidersList(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/contentprovidersList", produces = {
"application/json" "application/json"
}, method = RequestMethod.DELETE) }, 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 = { @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 = { @ApiResponses(value = {
@ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "200", description = "OK"),
@ -266,9 +271,9 @@ public class CommunityApiController {
}) })
public void deleteCommunityContentProvidersList( public void deleteCommunityContentProvidersList(
@PathVariable final String id, @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 // ADDING CODE FOR COMMUNITY ORGANIZATIONS
@ -284,7 +289,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"), @ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error") @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); return communityService.getCommunityOrganizations(id);
} }
@ -301,9 +306,31 @@ public class CommunityApiController {
}) })
public CommunityOrganization addCommunityOrganization( public CommunityOrganization addCommunityOrganization(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/organizations", produces = {
@ -319,10 +346,29 @@ public class CommunityApiController {
}) })
public void removeCommunityOrganization( public void removeCommunityOrganization(
@PathVariable final String id, @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 = { @RequestMapping(value = "/community/{id}/subjects", produces = {
@ -338,7 +384,7 @@ public class CommunityApiController {
}) })
public CommunityDetails addCommunitySubjects( public CommunityDetails addCommunitySubjects(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException { @RequestBody final String[] subjects) throws CommunityException {
return communityService.addCommunitySubjects(id, subjects); return communityService.addCommunitySubjects(id, subjects);
} }
@ -356,7 +402,7 @@ public class CommunityApiController {
}) })
public CommunityDetails removeCommunitySubjects( public CommunityDetails removeCommunitySubjects(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException { @RequestBody final String[] subjects) throws CommunityException {
return communityService.removeCommunitySubjects(id, subjects); return communityService.removeCommunitySubjects(id, subjects);
} }
@ -374,7 +420,7 @@ public class CommunityApiController {
}) })
public CommunityDetails addCommunityFOS( public CommunityDetails addCommunityFOS(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException { @RequestBody final String[] subjects) throws CommunityException {
return communityService.addCommunityFOS(id, subjects); return communityService.addCommunityFOS(id, subjects);
} }
@ -392,7 +438,7 @@ public class CommunityApiController {
}) })
public CommunityDetails removeCommunityFOS( public CommunityDetails removeCommunityFOS(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException { @RequestBody final String[] subjects) throws CommunityException {
return communityService.removeCommunityFOS(id, subjects); return communityService.removeCommunityFOS(id, subjects);
} }
@ -410,7 +456,7 @@ public class CommunityApiController {
}) })
public CommunityDetails addCommunitySDG( public CommunityDetails addCommunitySDG(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException { @RequestBody final String[] subjects) throws CommunityException {
return communityService.addCommunitySDG(id, subjects); return communityService.addCommunitySDG(id, subjects);
} }
@ -428,7 +474,7 @@ public class CommunityApiController {
}) })
public CommunityDetails removeCommunitySDG( public CommunityDetails removeCommunitySDG(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final String[] subjects) throws CommunityException, ResourceNotFoundException { @RequestBody final String[] subjects) throws CommunityException {
return communityService.removeCommunitySDG(id, subjects); return communityService.removeCommunitySDG(id, subjects);
} }
@ -446,7 +492,7 @@ public class CommunityApiController {
}) })
public CommunityDetails addAdvancedConstraint( public CommunityDetails addAdvancedConstraint(
@PathVariable final String id, @PathVariable final String id,
@RequestBody final SelectionCriteria advancedConstraint) throws CommunityException, ResourceNotFoundException { @RequestBody final SelectionCriteria advancedConstraint) throws CommunityException {
return communityService.addCommunityAdvancedConstraint(id, advancedConstraint); return communityService.addCommunityAdvancedConstraint(id, advancedConstraint);
} }
@ -463,7 +509,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "500", description = "unexpected error") @ApiResponse(responseCode = "500", description = "unexpected error")
}) })
public CommunityDetails removeAdvancedConstraint( public CommunityDetails removeAdvancedConstraint(
@PathVariable final String id) throws CommunityException, ResourceNotFoundException { @PathVariable final String id) throws CommunityException {
return communityService.removeCommunityAdvancedConstraint(id); return communityService.removeCommunityAdvancedConstraint(id);
} }
@ -482,7 +528,7 @@ public class CommunityApiController {
public CommunityDetails addCommunityZenodoCommunity( public CommunityDetails addCommunityZenodoCommunity(
@PathVariable final String id, @PathVariable final String id,
@RequestParam(required = false, defaultValue = "false") final boolean main, @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); return communityService.addCommunityZenodoCommunity(id, zenodocommunity, main);
@ -502,7 +548,7 @@ public class CommunityApiController {
public void removeCommunityZenodoCommunity( public void removeCommunityZenodoCommunity(
@PathVariable final String id, @PathVariable final String id,
@RequestParam(required = false, defaultValue = "false") final boolean main, @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); communityService.removeCommunityZenodoCommunity(id, zenodoCommId, main);
} }
@ -518,7 +564,7 @@ public class CommunityApiController {
@ApiResponse(responseCode = "404", description = "not found"), @ApiResponse(responseCode = "404", description = "not found"),
@ApiResponse(responseCode = "500", description = "unexpected error") @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(); final CommunityOpenAIRECommunities res = new CommunityOpenAIRECommunities();
res.setZenodoid(zenodoId); res.setZenodoid(zenodoId);
res.setOpenAirecommunitylist(communityService.getOpenAIRECommunitiesByZenodoId(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.DbDatasource;
import eu.dnetlib.openaire.community.model.DbDatasourcePK; import eu.dnetlib.openaire.community.model.DbDatasourcePK;
import eu.dnetlib.openaire.community.model.DbOrganization; 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.DbProject;
import eu.dnetlib.openaire.community.model.DbProjectPK; import eu.dnetlib.openaire.community.model.DbProjectPK;
import eu.dnetlib.openaire.community.model.DbSubCommunity; 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") @ConditionalOnProperty(value = "openaire.exporter.enable.community", havingValue = "true")
public class CommunityService { 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 @Autowired
private DbCommunityRepository dbCommunityRepository; private DbCommunityRepository dbCommunityRepository;
@ -78,6 +82,7 @@ public class CommunityService {
} }
} }
@Transactional
public CommunityDetails saveCommunity(final CommunityDetails details) throws CommunityException { public CommunityDetails saveCommunity(final CommunityDetails details) throws CommunityException {
try { try {
dbCommunityRepository.save(CommunityMappingUtils.toCommunity(details)); 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 { try {
final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id)); final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
return CommunityMappingUtils.CommunityDetails(c); return CommunityMappingUtils.CommunityDetails(c);
@ -99,7 +105,7 @@ public class CommunityService {
} }
@Transactional @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 { try {
final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id)); final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
CommunityMappingUtils.populateCommunity(c, details); 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 { try {
return dbProjectRepository.findByCommunity(id, PageRequest.of(page, size)).map(CommunityMappingUtils::toCommunityProject); return dbProjectRepository.findByCommunity(id, PageRequest.of(page, size)).map(CommunityMappingUtils::toCommunityProject);
} catch (final Throwable e) { } 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 { try {
final DbProject p = CommunityMappingUtils.toDbProject(id, project); final DbProject p = CommunityMappingUtils.toDbProject(id, project);
dbProjectRepository.save(p); dbProjectRepository.save(p);
@ -130,34 +138,24 @@ public class CommunityService {
} }
} }
public List<CommunityProject> addCommunityProjectList(final String id, final List<CommunityProject> projectList) @Transactional
throws CommunityException, ResourceNotFoundException { public void addCommunityProjects(final String id, final CommunityProject... projects) throws CommunityException {
try { try {
final List<DbProject> list = projectList.stream() final List<DbProject> list = Arrays.stream(projects)
.map(p -> CommunityMappingUtils.toDbProject(id, p)) .map(p -> CommunityMappingUtils.toDbProject(id, p))
.collect(Collectors.toList()); .collect(Collectors.toList());
dbProjectRepository.saveAll(list); dbProjectRepository.saveAll(list);
return projectList;
} catch (final Throwable e) { } catch (final Throwable e) {
log.error(e); log.error(e);
throw new CommunityException(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 { try {
dbProjectRepository.deleteById(new DbProjectPK(id, projectId)); final List<DbProjectPK> list = Arrays.stream(ids)
} 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()
.map(projectId -> new DbProjectPK(id, projectId)) .map(projectId -> new DbProjectPK(id, projectId))
.collect(Collectors.toList()); .collect(Collectors.toList());
dbProjectRepository.deleteAllById(list); 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 { try {
return dbDatasourceRepository.findByCommunity(id) return dbDatasourceRepository.findByCommunity(id)
.stream() .stream()
@ -179,47 +177,25 @@ public class CommunityService {
} }
} }
public CommunityContentprovider addCommunityContentprovider(final String id, final CommunityContentprovider cp) @Transactional
throws CommunityException, ResourceNotFoundException { public void addCommunityContentProviders(final String id, final CommunityContentprovider... contentproviders)
throws CommunityException {
try { try {
final DbDatasource ds = CommunityMappingUtils.toDbDatasource(id, cp); final List<DbDatasource> list = Arrays.stream(contentproviders)
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()
.map(cp -> CommunityMappingUtils.toDbDatasource(id, cp)) .map(cp -> CommunityMappingUtils.toDbDatasource(id, cp))
.collect(Collectors.toList()); .collect(Collectors.toList());
dbDatasourceRepository.saveAll(list); dbDatasourceRepository.saveAll(list);
return contentprovidersList;
} catch (final Throwable e) { } catch (final Throwable e) {
log.error(e); log.error(e);
throw new CommunityException(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 { try {
dbDatasourceRepository.deleteById(new DbDatasourcePK(id, contentproviderId)); final List<DbDatasourcePK> list = Arrays.stream(ids)
} 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()
.map(dsId -> new DbDatasourcePK(id, dsId)) .map(dsId -> new DbDatasourcePK(id, dsId))
.collect(Collectors.toList()); .collect(Collectors.toList());
dbDatasourceRepository.deleteAllById(list); 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 { 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) { } catch (final Throwable e) {
log.error(e); log.error(e);
throw new CommunityException(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 { try {
return dbSupportOrgRepository.findByCommunity(id) return dbSupportOrgRepository.findByCommunity(id)
.stream() .stream()
@ -250,35 +231,22 @@ public class CommunityService {
} }
} }
public CommunityOrganization addCommunityOrganization(final String id, final CommunityOrganization organization) @Transactional
throws CommunityException, ResourceNotFoundException { public void addCommunityOrganizations(final String id, final CommunityOrganization... orgs) throws CommunityException {
try { try {
final DbSupportOrg o = CommunityMappingUtils.toDbSupportOrg(id, organization); final List<DbSupportOrg> list = Arrays.stream(orgs)
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()
.map(o -> CommunityMappingUtils.toDbSupportOrg(id, o)) .map(o -> CommunityMappingUtils.toDbSupportOrg(id, o))
.collect(Collectors.toList()); .collect(Collectors.toList());
dbSupportOrgRepository.saveAll(list); dbSupportOrgRepository.saveAll(list);
return orgList;
} catch (final Throwable e) { } catch (final Throwable e) {
log.error(e); log.error(e);
throw new CommunityException(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 { try {
dbSubCommunityRepository.deleteById(subCommunityId); dbSubCommunityRepository.deleteById(subCommunityId);
} catch (final Throwable e) { } 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 { try {
return dbSubCommunityRepository.findByCommunity(id) return dbSubCommunityRepository.findByCommunity(id)
.stream() .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 { try {
final DbSubCommunity sc = CommunityMappingUtils.toDbSubCommunity(sub); final List<DbSubCommunity> list = Arrays.stream(subs)
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()
.map(CommunityMappingUtils::toDbSubCommunity) .map(CommunityMappingUtils::toDbSubCommunity)
.collect(Collectors.toList()); .collect(Collectors.toList());
dbSubCommunityRepository.saveAll(list); dbSubCommunityRepository.saveAll(list);
return subs;
} catch (final Throwable e) { } catch (final Throwable e) {
log.error(e); log.error(e);
throw new CommunityException(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 { try {
return modifyElementToArrayField(id, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), false, subjects); return modifyElementToArrayField(id, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), false, subjects);
} catch (final Throwable e) { } 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 { try {
return modifyElementToArrayField(id, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), true, subjects); return modifyElementToArrayField(id, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), true, subjects);
} catch (final Throwable e) { } 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 { try {
return modifyElementToArrayField(id, c -> c.getFos(), (c, fos) -> c.setFos(fos), false, foss); return modifyElementToArrayField(id, c -> c.getFos(), (c, fos) -> c.setFos(fos), false, foss);
} catch (final Throwable e) { } 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 { try {
return modifyElementToArrayField(id, c -> c.getFos(), (c, fos) -> c.setFos(fos), true, foss); return modifyElementToArrayField(id, c -> c.getFos(), (c, fos) -> c.setFos(fos), true, foss);
} catch (final Throwable e) { } 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 { try {
return modifyElementToArrayField(id, c -> c.getSdg(), (c, sdg) -> c.setSdg(sdg), false, sdgs); return modifyElementToArrayField(id, c -> c.getSdg(), (c, sdg) -> c.setSdg(sdg), false, sdgs);
} catch (final Throwable e) { } 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 { try {
return modifyElementToArrayField(id, c -> c.getSdg(), (c, sdg) -> c.setSdg(sdg), true, sdgs); return modifyElementToArrayField(id, c -> c.getSdg(), (c, sdg) -> c.setSdg(sdg), true, sdgs);
} catch (final Throwable e) { } catch (final Throwable e) {
@ -379,8 +337,9 @@ public class CommunityService {
} }
} }
@Transactional
public CommunityDetails addCommunityAdvancedConstraint(final String id, final SelectionCriteria advancedCosntraint) public CommunityDetails addCommunityAdvancedConstraint(final String id, final SelectionCriteria advancedCosntraint)
throws CommunityException, ResourceNotFoundException { throws CommunityException {
try { try {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id)); final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
dbEntry.setAdvancedConstraints(advancedCosntraint); 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 { try {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id)); final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
dbEntry.setAdvancedConstraints(null); dbEntry.setAdvancedConstraints(null);
@ -406,7 +366,7 @@ public class CommunityService {
} }
public CommunityDetails removeCommunityZenodoCommunity(final String id, final String zenodoCommunity, final boolean isMain) public CommunityDetails removeCommunityZenodoCommunity(final String id, final String zenodoCommunity, final boolean isMain)
throws CommunityException, ResourceNotFoundException { throws CommunityException {
if (isMain) { if (isMain) {
return updateElementToSimpleField(id, (c, val) -> c.setMainZenodoCommunity(val), null); return updateElementToSimpleField(id, (c, val) -> c.setMainZenodoCommunity(val), null);
} else { } else {
@ -415,7 +375,7 @@ public class CommunityService {
} }
public CommunityDetails addCommunityZenodoCommunity(final String id, final String zenodoCommunity, final boolean isMain) public CommunityDetails addCommunityZenodoCommunity(final String id, final String zenodoCommunity, final boolean isMain)
throws CommunityException, ResourceNotFoundException { throws CommunityException {
try { try {
if (isMain) { if (isMain) {
return updateElementToSimpleField(id, (c, val) -> c.setMainZenodoCommunity(val), zenodoCommunity); return updateElementToSimpleField(id, (c, val) -> c.setMainZenodoCommunity(val), zenodoCommunity);
@ -431,7 +391,7 @@ public class CommunityService {
@Transactional @Transactional
private CommunityDetails updateElementToSimpleField(final String id, private CommunityDetails updateElementToSimpleField(final String id,
final BiConsumer<DbCommunity, String> setter, final BiConsumer<DbCommunity, String> setter,
final String value) throws ResourceNotFoundException, CommunityException { final String value) throws CommunityException {
try { try {
final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id)); final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
setter.accept(dbEntry, value); setter.accept(dbEntry, value);
@ -448,7 +408,7 @@ public class CommunityService {
final Function<DbCommunity, String[]> getter, final Function<DbCommunity, String[]> getter,
final BiConsumer<DbCommunity, String[]> setter, final BiConsumer<DbCommunity, String[]> setter,
final boolean remove, 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)); final DbCommunity dbEntry = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id));
@ -472,6 +432,7 @@ public class CommunityService {
return getCommunity(id); return getCommunity(id);
} }
@Transactional
public List<String> getOpenAIRECommunitiesByZenodoId(final String zenodoId) throws CommunityException { public List<String> getOpenAIRECommunitiesByZenodoId(final String zenodoId) throws CommunityException {
try { try {
return dbCommunityRepository.findByZenodoId(zenodoId); return dbCommunityRepository.findByZenodoId(zenodoId);
@ -481,6 +442,7 @@ public class CommunityService {
} }
} }
@Transactional
public Map<String, Set<String>> getPropagationOrganizationCommunityMap() throws CommunityException { public Map<String, Set<String>> getPropagationOrganizationCommunityMap() throws CommunityException {
try { try {
return dbOrganizationRepository.findAll() return dbOrganizationRepository.findAll()
@ -492,6 +454,7 @@ public class CommunityService {
} }
} }
@Transactional
public Set<String> getPropagationOrganizationsForCommunity(final String communityId) throws CommunityException { public Set<String> getPropagationOrganizationsForCommunity(final String communityId) throws CommunityException {
try { try {
return dbOrganizationRepository.findByCommunity(communityId) return dbOrganizationRepository.findByCommunity(communityId)

View File

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