103 lines
3.7 KiB
Java
103 lines
3.7 KiB
Java
package eu.dnetlib.openaire.community;
|
|
|
|
import static eu.dnetlib.openaire.community.CommunityMappingUtils.CONTENTPROVIDERS_ID_SUFFIX;
|
|
import static eu.dnetlib.openaire.community.CommunityMappingUtils.ORGANIZATION_ID_SUFFIX;
|
|
import static eu.dnetlib.openaire.community.CommunityMappingUtils.PROJECTS_ID_SUFFIX;
|
|
|
|
import java.io.IOException;
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Set;
|
|
import java.util.function.Function;
|
|
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 com.google.common.collect.Lists;
|
|
import com.google.common.collect.Sets;
|
|
|
|
import eu.dnetlib.openaire.common.ISClient;
|
|
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;
|
|
import eu.dnetlib.openaire.exporter.model.context.Category;
|
|
import eu.dnetlib.openaire.exporter.model.context.Concept;
|
|
import eu.dnetlib.openaire.exporter.model.context.Context;
|
|
|
|
@RestController
|
|
public class CommunityImporterController {
|
|
|
|
public final static Set<String> communityBlackList = Sets.newHashSet("fet-fp7", "fet-h2020");
|
|
|
|
@Autowired
|
|
private CommunityService service;
|
|
|
|
@Autowired
|
|
private ISClient isClient;
|
|
|
|
@GetMapping("/community_importer/import")
|
|
public List<String> importProfiles() throws CommunityException {
|
|
final Map<String, Context> contextMap = getContextMap();
|
|
|
|
final List<String> list = contextMap.keySet()
|
|
.stream()
|
|
.filter(id -> !communityBlackList.contains(id))
|
|
.collect(Collectors.toList());
|
|
|
|
list.forEach(id -> {
|
|
importCommunity(contextMap.get(id));
|
|
});
|
|
|
|
return list;
|
|
}
|
|
|
|
private Map<String, Context> getContextMap() throws CommunityException {
|
|
try {
|
|
return isClient.getCommunityContextMap();
|
|
} catch (final IOException e) {
|
|
throw new CommunityException(e);
|
|
}
|
|
}
|
|
|
|
public <R> List<R> getCommunityInfo(final Context context, final String idSuffix, final Function<Concept, R> mapping)
|
|
throws CommunityException {
|
|
if (context != null) {
|
|
final Map<String, Category> categories = context.getCategories();
|
|
final Category category = categories.get(context.getId() + idSuffix);
|
|
if (category != null) { return category.getConcepts()
|
|
.stream()
|
|
.map(mapping)
|
|
.collect(Collectors.toList()); }
|
|
}
|
|
return Lists.newArrayList();
|
|
}
|
|
|
|
private void importCommunity(final Context context) {
|
|
try {
|
|
|
|
final CommunityDetails community = CommunityMappingUtils.asCommunityProfile(context);
|
|
|
|
final List<CommunityContentprovider> datasources =
|
|
getCommunityInfo(context, CONTENTPROVIDERS_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityDataprovider(context.getId(), c));
|
|
final List<CommunityProject> projects =
|
|
getCommunityInfo(context, PROJECTS_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityProject(context.getId(), c));
|
|
final List<CommunityOrganization> orgs =
|
|
getCommunityInfo(context, ORGANIZATION_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityOrganization(context.getId(), c));
|
|
|
|
service.saveCommunity(community);
|
|
service.addCommunityProjectList(context.getId(), projects);
|
|
service.addCommunityContentProvidersList(context.getId(), datasources);
|
|
service.addCommunityOrganizationList(context.getId(), orgs);
|
|
// TODO MANAGE new fields and tables
|
|
} catch (final Exception e) {
|
|
throw new RuntimeException("Error importing community: " + context.getId(), e);
|
|
}
|
|
}
|
|
|
|
}
|