dnet-applications/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityImporterController...

61 lines
2.3 KiB
Java

package eu.dnetlib.openaire.community;
import static eu.dnetlib.openaire.community.CommunityCommon.CONTENTPROVIDERS_ID_SUFFIX;
import static eu.dnetlib.openaire.community.CommunityCommon.ORGANIZATION_ID_SUFFIX;
import static eu.dnetlib.openaire.community.CommunityCommon.PROJECTS_ID_SUFFIX;
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 CommunityCommon cc;
@GetMapping("/community_importer/import")
public List<String> importProfiles() throws CommunityException {
final List<String> list = cc.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 = cc.getCommunity(id);
final List<CommunityContentprovider> datasources =
cc.getCommunityInfo(id, CONTENTPROVIDERS_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityDataprovider(id, c));
final List<CommunityProject> projects = cc.getCommunityInfo(id, PROJECTS_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityProject(id, c));
final List<CommunityOrganization> orgs = cc.getCommunityInfo(id, ORGANIZATION_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityOrganization(id, c));
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);
}
}
}