From 98249be293f4b9e17eed22990c97ab2f0f8e0fbf Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Fri, 16 Jun 2023 11:12:24 +0200 Subject: [PATCH] community importer --- .../CommunityImporterController.java | 54 +++++++++++++++++++ .../community/db/CommunityService.java | 22 +++++++- .../community/db/utils/ConvertionUtils.java | 5 ++ 3 files changed, 79 insertions(+), 2 deletions(-) create mode 100644 apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityImporterController.java diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityImporterController.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityImporterController.java new file mode 100644 index 00000000..bcd752be --- /dev/null +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityImporterController.java @@ -0,0 +1,54 @@ +package eu.dnetlib.openaire.community; + +import java.util.List; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RestController; + +import eu.dnetlib.openaire.community.db.CommunityService; +import eu.dnetlib.openaire.exporter.exceptions.CommunityException; +import eu.dnetlib.openaire.exporter.model.community.CommunityContentprovider; +import eu.dnetlib.openaire.exporter.model.community.CommunityDetails; +import eu.dnetlib.openaire.exporter.model.community.CommunityOrganization; +import eu.dnetlib.openaire.exporter.model.community.CommunityProject; + +@RestController +public class CommunityImporterController { + + @Autowired + private CommunityService service; + + @Autowired + private CommunityApiCore core; + + @GetMapping("/community_importer/import") + public List importProfiles() throws CommunityException { + final List list = core.listCommunities() + .stream() + .map(c -> c.getId()) + .collect(Collectors.toList()); + + list.forEach(this::importCommunity); + + return list; + } + + private void importCommunity(final String id) { + try { + final CommunityDetails community = core.getCommunity(id); + final List datasources = core.getCommunityContentproviders(id); + final List projects = core.getCommunityProjects(id); + final List orgs = core.getCommunityOrganizations(id); + + service.saveCommunity(community); + service.addCommunityProjectList(id, projects); + service.addCommunityContentProvidersList(id, datasources); + service.addCommunityOrganizationList(id, orgs); + // TODO MANAGE new fields and tables + } catch (final Exception e) { + throw new RuntimeException("Error importing community: " + id, e); + } + } +} diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/CommunityService.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/CommunityService.java index aa23f862..1d5a8f42 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/CommunityService.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/CommunityService.java @@ -75,6 +75,12 @@ public class CommunityService { .collect(Collectors.toList()); } + // TODO perche' questo metodo non esisteva prima? + public CommunityDetails saveCommunity(final CommunityDetails details) throws CommunityException { + dbCommunityRepository.save(ConvertionUtils.toCommunity(details)); + return getCommunity(details.getId()); + } + public CommunityDetails getCommunity(final String id) throws CommunityException, ResourceNotFoundException { final DbCommunity c = dbCommunityRepository.findById(id).orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id)); return ConvertionUtils.CommunityDetails(c); @@ -106,7 +112,7 @@ public class CommunityService { dbProjectRepository.saveAll(list); - return projectList; + return getCommunityProjects(id); } public void removeCommunityProject(final String id, final String projectId) throws CommunityException, ResourceNotFoundException { @@ -143,7 +149,7 @@ public class CommunityService { dbDatasourceRepository.saveAll(list); - return contentprovidersList; + return getCommunityContentproviders(id); } public void removeCommunityContentProvider(final String id, final String contentproviderId) throws CommunityException, ResourceNotFoundException { @@ -176,6 +182,18 @@ public class CommunityService { return organization; } + public List addCommunityOrganizationList(final String id, final List orgList) + throws CommunityException, ResourceNotFoundException { + + final List list = orgList.stream() + .map(o -> ConvertionUtils.toDbOrganization(id, o)) + .collect(Collectors.toList()); + + dbOrganizationRepository.saveAll(list); + + return getCommunityOrganizations(id); + } + @Transactional public CommunityDetails addCommunitySubjects(final String id, final List subjects) throws CommunityException, ResourceNotFoundException { return modifyElementToArrayField(id, subjects, c -> c.getSubjects(), (c, subs) -> c.setSubjects(subs), false); diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/utils/ConvertionUtils.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/utils/ConvertionUtils.java index 0c639433..7091cb18 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/utils/ConvertionUtils.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/utils/ConvertionUtils.java @@ -23,6 +23,11 @@ public class ConvertionUtils { return summary; } + public static DbCommunity toCommunity(final CommunityDetails details) { + // TODO Auto-generated method stub + return null; + } + public static CommunityDetails CommunityDetails(final DbCommunity c) { final CommunityDetails details = new CommunityDetails();