From 3edd995e9dfb3b960465d084475f9ff9a8505b2b Mon Sep 17 00:00:00 2001 From: "michele.artini" Date: Thu, 15 Jun 2023 11:27:59 +0200 Subject: [PATCH] mapping functions --- .../openaire/community/CommunityClient.java | 5 +- .../community/CommunityClientImpl.java | 79 +- .../openaire/community/CommunityCommon.java | 1009 +++++++++-------- .../community/CommunityConstants.java | 6 +- .../community/CommunityMappingUtils.java | 135 ++- .../community/db/CommunityService.java | 5 + .../community/db/ConvertionUtils.java | 70 +- .../db/enums/CommunityClaimType.java | 25 +- .../db/enums/CommunityClaimTypeConverter.java | 12 +- .../db/enums/CommunityMembershipType.java | 20 +- .../CommunityMembershipTypeConverter.java | 8 +- .../community/db/enums/CommunityStatus.java | 8 - .../community/db/model/DbCommunity.java | 2 +- .../model/community/CommunityStatus.java | 5 +- .../model/community/CommunitySummary.java | 18 +- 15 files changed, 797 insertions(+), 610 deletions(-) delete mode 100644 apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityStatus.java diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClient.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClient.java index 4b028a20..a6296ce7 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClient.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClient.java @@ -6,10 +6,11 @@ import java.util.Set; import eu.dnetlib.openaire.exporter.exceptions.CommunityException; import eu.dnetlib.openaire.exporter.exceptions.ResourceNotFoundException; +@Deprecated public interface CommunityClient { - Map> getInverseZenodoCommunityMap() throws CommunityException, ResourceNotFoundException; + Map> getInverseZenodoCommunityMap() throws CommunityException, ResourceNotFoundException; - void dropCache(); + void dropCache(); } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClientImpl.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClientImpl.java index 06ff04f6..5434f943 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClientImpl.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityClientImpl.java @@ -1,5 +1,11 @@ package eu.dnetlib.openaire.community; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -13,51 +19,50 @@ import eu.dnetlib.openaire.exporter.exceptions.ResourceNotFoundException; import eu.dnetlib.openaire.exporter.model.community.CommunitySummary; import eu.dnetlib.openaire.exporter.model.community.CommunityZenodoCommunity; -import java.util.*; - @Component +@Deprecated public class CommunityClientImpl implements CommunityClient { - private static final Log log = LogFactory.getLog(CommunityClient.class); + private static final Log log = LogFactory.getLog(CommunityClient.class); - @Autowired - private CommunityCommon communityCommon; + @Autowired + private CommunityCommon communityCommon; - @Override - @Cacheable("community-cache") - public Map> getInverseZenodoCommunityMap () throws CommunityException, ResourceNotFoundException { - log.info("Creating the data structure. Not using cache"); - final Map> inverseListMap = new HashMap<>(); + @Override + @Cacheable("community-cache") + public Map> getInverseZenodoCommunityMap() throws CommunityException, ResourceNotFoundException { + log.info("Creating the data structure. Not using cache"); + final Map> inverseListMap = new HashMap<>(); - final List communityList = communityCommon.listCommunities(); + final List communityList = communityCommon.listCommunities(); - for(CommunitySummary cs :communityList){ - final String communityId = cs.getId(); - List czc = communityCommon.getCommunityZenodoCommunities(communityId); - for(CommunityZenodoCommunity zc:czc){ - final String zenodoId = zc.getZenodoid(); - if(!inverseListMap.containsKey(zenodoId)) { - inverseListMap.put(zc.getZenodoid(),new HashSet<>()); - } - inverseListMap.get(zc.getZenodoid()).add(communityId); - } - final String zenodoMainCommunity = communityCommon.getCommunity(communityId).getZenodoCommunity(); - if(!inverseListMap.containsKey(zenodoMainCommunity)) { - inverseListMap.put(zenodoMainCommunity,new HashSet<>()); - } + for (final CommunitySummary cs : communityList) { + final String communityId = cs.getId(); + final List czc = communityCommon.getCommunityZenodoCommunities(communityId); + for (final CommunityZenodoCommunity zc : czc) { + final String zenodoId = zc.getZenodoid(); + if (!inverseListMap.containsKey(zenodoId)) { + inverseListMap.put(zc.getZenodoid(), new HashSet<>()); + } + inverseListMap.get(zc.getZenodoid()).add(communityId); + } + final String zenodoMainCommunity = communityCommon.getCommunity(communityId).getZenodoCommunity(); + if (!inverseListMap.containsKey(zenodoMainCommunity)) { + inverseListMap.put(zenodoMainCommunity, new HashSet<>()); + } - inverseListMap.get(zenodoMainCommunity).add(communityId); - } - return inverseListMap; - } + inverseListMap.get(zenodoMainCommunity).add(communityId); + } + return inverseListMap; + } - - - @Override - @CacheEvict(cacheNames = { "community-cache", "context-cache-community"}, allEntries = true) - @Scheduled(fixedDelayString = "${openaire.exporter.cache.ttl}") - public void dropCache(){ - log.debug("dropped community cache"); - } + @Override + @CacheEvict(cacheNames = { + "community-cache", "context-cache-community" + }, allEntries = true) + @Scheduled(fixedDelayString = "${openaire.exporter.cache.ttl}") + public void dropCache() { + log.debug("dropped community cache"); + } } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityCommon.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityCommon.java index 1274e058..6b9dac23 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityCommon.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityCommon.java @@ -1,8 +1,50 @@ package eu.dnetlib.openaire.community; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_NAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_OFFICIALNAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_SELCRITERIA; +import static eu.dnetlib.openaire.community.CommunityConstants.CONTENTPROVIDERS_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.CORGANIZATION_LOGOURL; +import static eu.dnetlib.openaire.community.CommunityConstants.CORGANIZATION_NAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CORGANIZATION_WEBSITEURL; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_ADVANCED_CONSTRAINT; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_FOS; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_SDG; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_SUBJECT; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_ACRONYM; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_FULLNAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_FUNDER; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_NUMBER; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_DESCRIPTION; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_LOGOURL; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_NAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_STATUS; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_ZENODOC; +import static eu.dnetlib.openaire.community.CommunityConstants.CSV_DELIMITER; +import static eu.dnetlib.openaire.community.CommunityConstants.CZENODOCOMMUNITY_ID; +import static eu.dnetlib.openaire.community.CommunityConstants.ID_SEPARATOR; +import static eu.dnetlib.openaire.community.CommunityConstants.OPENAIRE_ID; +import static eu.dnetlib.openaire.community.CommunityConstants.ORGANIZATION_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.PROJECTS_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.ZENODOCOMMUNITY_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.communityBlackList; + +import java.io.IOException; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import java.util.function.Function; +import java.util.stream.Collectors; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Component; + import com.google.common.base.Joiner; import com.google.common.collect.Lists; import com.google.gson.Gson; + import eu.dnetlib.openaire.common.ISClient; import eu.dnetlib.openaire.exporter.exceptions.CommunityException; import eu.dnetlib.openaire.exporter.exceptions.ResourceNotFoundException; @@ -18,472 +60,511 @@ import eu.dnetlib.openaire.exporter.model.context.Concept; import eu.dnetlib.openaire.exporter.model.context.Context; import eu.dnetlib.openaire.exporter.model.context.Param; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.io.IOException; -import java.util.*; -import java.util.function.Function; -import java.util.stream.Collectors; - -import static eu.dnetlib.openaire.community.CommunityConstants.*; - - @Component +@Deprecated public class CommunityCommon { - @Autowired - private ISClient isClient; - - public Map getContextMap() throws CommunityException { - try { - return isClient.getCommunityContextMap(); - } catch (IOException e) { - throw new CommunityException(e); - } - } - - public List listCommunities() throws CommunityException { - return getContextMap().values().stream() - .filter(context -> !communityBlackList.contains(context.getId())) - .map(CommunityMappingUtils::asCommunitySummary) - .collect(Collectors.toList()); - } - - - public List getCommunityInfo(final String id, final String idSuffix, final Function mapping) throws CommunityException { - final Map contextMap = getContextMap(); - final Context context = contextMap.get(id); - if (context != null) { - final Map categories = context.getCategories(); - final Category category = categories.get(id + idSuffix); - if (category != null) { - return category.getConcepts().stream() - .map(mapping) - .collect(Collectors.toList()); - } - } - return Lists.newArrayList(); - } - - public CommunityDetails getCommunity(final String id) throws CommunityException, ResourceNotFoundException { - final Context context = getContextMap().get(id); - if (context == null || CommunityConstants.communityBlackList.contains(id)) { - //ResponseStatusException(NOT_FOUND, "Unable to find resource"); - throw new ResourceNotFoundException(); - } - return CommunityMappingUtils.asCommunityProfile(context); - } - - public List getCommunityZenodoCommunities(final String id) throws CommunityException, ResourceNotFoundException { - getCommunity(id); // ensure the community exists. - return getCommunityInfo(id, ZENODOCOMMUNITY_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityZenodoCommunity(id, c)); - } - - - public void updateProject(String communityId, CommunityProject project) throws CommunityException { - final Context context = getContextMap().get(communityId); - Category prj = context.getCategories().get(communityId + PROJECTS_ID_SUFFIX); - if (prj.getConcepts().stream().map(c -> c.getId()).collect(Collectors.toList()) - .contains(communityId + PROJECTS_ID_SUFFIX + ID_SEPARATOR + project.getId())){ - prj.getConcepts().forEach(concept -> { - if (concept.getId().equals(communityId + PROJECTS_ID_SUFFIX + ID_SEPARATOR + project.getId())) { - if (project.getName() != null) { - - concept.getParams().replace(CPROJECT_FULLNAME, Arrays.asList(new Param() - .setName(CPROJECT_FULLNAME).setValue(project.getName()))); - } - if (project.getAcronym() != null) { - if(concept.getParams().keySet().contains(CPROJECT_ACRONYM)){ - concept.getParams().replace(CPROJECT_ACRONYM, Arrays.asList(new Param() - .setName(CPROJECT_ACRONYM).setValue(project.getAcronym()))); - } - else{ - concept.getParams().put(CPROJECT_ACRONYM, Arrays.asList(new Param() - .setName(CPROJECT_ACRONYM).setValue(project.getAcronym()))); - } - - } - if (project.getOpenaireId() != null) { - if(concept.getParams().keySet().contains(OPENAIRE_ID)){ - concept.getParams().replace(OPENAIRE_ID, Arrays.asList(new Param() - .setName(OPENAIRE_ID).setValue(project.getOpenaireId()))); - } - else{ - concept.getParams().put(OPENAIRE_ID, Arrays.asList(new Param() - .setName(OPENAIRE_ID).setValue(project.getOpenaireId()))); - } - - } - if (project.getFunder() != null) { - concept.getParams().replace(CPROJECT_FUNDER, Arrays.asList(new Param() - .setName(CPROJECT_FUNDER).setValue(project.getFunder()))); - } - if (project.getGrantId() != null) { - concept.getParams().replace(CPROJECT_NUMBER, Arrays.asList(new Param() - .setName(CPROJECT_NUMBER).setValue(project.getGrantId()))); - - } - } - }); - } - else{ - Concept concept = new Concept(); - concept.setId(communityId + PROJECTS_ID_SUFFIX + ID_SEPARATOR + project.getId()); - concept.setClaim(false); - if(project.getAcronym() != null) - concept.setLabel(project.getAcronym()); - else - concept.setLabel(""); - - Map> params = new TreeMap<>(); - - if(project.getAcronym() != null){ - params.put(CPROJECT_ACRONYM, Arrays.asList(new Param().setName(CPROJECT_ACRONYM) - .setValue(project.getAcronym()))); - } - - if (project.getName() != null){ - params.put(CPROJECT_FULLNAME, Arrays.asList(new Param() - .setName(CPROJECT_FULLNAME) - .setValue(project.getName()) - )); - } - - if (project.getOpenaireId() != null){ - params.put(OPENAIRE_ID, Arrays.asList(new Param() - .setName(OPENAIRE_ID) - .setValue(project.getOpenaireId()) - )); - } - - if(project.getFunder() != null){ - params.put(CPROJECT_FUNDER, Arrays.asList(new Param() - .setName(CPROJECT_FUNDER) - .setValue(project.getFunder()) - )); - } - - if (project.getGrantId()!=null){ - params.put(CPROJECT_NUMBER, Arrays.asList(new Param() - .setName(CPROJECT_NUMBER) - .setValue(project.getGrantId()) - )); - } - - concept.setParams(params); - prj.getConcepts().add(concept); - - - } - - } - - public void removeAdvancedConstraint(String id) throws CommunityException { - final Context context = getContextMap().get(id); - context.getParams() - .replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() - .setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(null))); - } - - public void updateCommunity(String id, CommunityWritableProperties community) throws CommunityException { - final Context context = getContextMap().get(id); - - if(community.getShortName() != null) { - context.setLabel(community.getShortName()); - } - - if (community.getName() != null){ - context.getParams().replace(CSUMMARY_NAME, Arrays.asList(new Param() - .setValue(community.getName()).setName(CSUMMARY_NAME))); - } - if(community.getDescription() != null) { - context.getParams() - .replace(CSUMMARY_DESCRIPTION, Arrays.asList(new Param() - .setName(CSUMMARY_DESCRIPTION).setValue(community.getDescription()))); - } - if(community.getLogoUrl() != null){ - context.getParams() - .replace(CSUMMARY_LOGOURL, Arrays.asList(new Param() - .setName(CSUMMARY_LOGOURL).setValue(community.getLogoUrl()))); - - } - if (community.getStatus() != null) { - context.getParams() - .replace(CSUMMARY_STATUS, Arrays.asList(new Param() - .setName(CSUMMARY_STATUS).setValue(community.getStatus().name()))); - } - if (community.getSubjects() != null) { - context.getParams() - .replace(CPROFILE_SUBJECT, Arrays.asList(new Param().setName(CPROFILE_SUBJECT) - .setValue(Joiner.on(CSV_DELIMITER) - .join(community.getSubjects())))); - } - if(community.getFos() != null){ - if (context.getParams().containsKey(CPROFILE_FOS)) - context.getParams() - .replace(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS) - .setValue(Joiner.on(CSV_DELIMITER) - .join(community.getFos())))); - else - context.getParams().put(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS) - .setValue(Joiner.on(CSV_DELIMITER) - .join(community.getFos())))); - } - if(community.getSdg() != null){ - if(context.getParams().containsKey(CPROFILE_SDG)) - context.getParams() - .replace(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG) - .setValue(Joiner.on(CSV_DELIMITER) - .join(community.getSdg())))); - else - context.getParams().put(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG) - .setValue(Joiner.on(CSV_DELIMITER) - .join(community.getSdg())))); - } - if (community.getAdvancedConstraints() != null) { - if(context.getParams().containsKey(CPROFILE_ADVANCED_CONSTRAINT)) - context.getParams() - .replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() - .setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(new Gson().toJson(community.getAdvancedConstraints())))); - else - context.getParams().put(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() - .setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(new Gson().toJson(community.getAdvancedConstraints())))); - } - if(community.getMainZenodoCommunity() != null){ - context.getParams() - .replace(CSUMMARY_ZENODOC, Arrays.asList(new Param() - .setName(CSUMMARY_ZENODOC).setValue(community.getMainZenodoCommunity()))); - - } - - } - - - public void removeFromCategory(String communityId, String category, String conceptId) throws CommunityException { - Map cmap = getContextMap(); - Context context = cmap.get(communityId); - Map cat = context.getCategories(); - - List concepts = cat.get(communityId + category).getConcepts() - .stream().filter(c -> !c.getId().equals(communityId + category + ID_SEPARATOR + conceptId)).collect(Collectors.toList()); - - cat.get(communityId + category).setConcepts(concepts); - } - - public void updateDatasource(String communityId, CommunityContentprovider cp) throws CommunityException { - final Context context = getContextMap().get(communityId); - Category dts = context.getCategories().get(communityId + CONTENTPROVIDERS_ID_SUFFIX); - if (dts.getConcepts().stream().map(c -> c.getId()).collect(Collectors.toList()) - .contains(communityId + CONTENTPROVIDERS_ID_SUFFIX + ID_SEPARATOR + cp.getId())){ - dts.getConcepts().forEach(concept -> { - if (concept.getId().equals(communityId + CONTENTPROVIDERS_ID_SUFFIX + ID_SEPARATOR + cp.getId())) { - - - if (cp.getName() != null) { - if(concept.getParams().keySet().contains(CCONTENTPROVIDER_NAME)){ - concept.getParams().replace(CCONTENTPROVIDER_NAME, Arrays.asList(new Param() - .setName(CCONTENTPROVIDER_NAME).setValue(cp.getName()))); - } - else{ - concept.getParams().put(CCONTENTPROVIDER_NAME, Arrays.asList(new Param() - .setName(CCONTENTPROVIDER_NAME).setValue(cp.getName()))); - } - - } - if (cp.getOfficialname() != null) { - if(concept.getParams().keySet().contains(CCONTENTPROVIDER_OFFICIALNAME)){ - concept.getParams().replace(CCONTENTPROVIDER_OFFICIALNAME, Arrays.asList(new Param() - .setName(CCONTENTPROVIDER_OFFICIALNAME).setValue(cp.getOfficialname()))); - } - else{ - concept.getParams().put(CCONTENTPROVIDER_OFFICIALNAME, Arrays.asList(new Param() - .setName(CCONTENTPROVIDER_OFFICIALNAME).setValue(cp.getOfficialname()))); - } - - } - - - if (cp.getOpenaireId() != null) { - if(concept.getParams().keySet().contains(OPENAIRE_ID)){ - concept.getParams().replace(OPENAIRE_ID, Arrays.asList(new Param() - .setName(OPENAIRE_ID).setValue(cp.getOpenaireId()))); - } - else{ - concept.getParams().put(OPENAIRE_ID, Arrays.asList(new Param() - .setName(OPENAIRE_ID).setValue(cp.getOpenaireId()))); - } - - } - - if (cp.getSelectioncriteria() != null) { - if(concept.getParams().keySet().contains(CCONTENTPROVIDER_SELCRITERIA)){ - concept.getParams().replace(CCONTENTPROVIDER_SELCRITERIA, Arrays.asList(new Param() - .setName(CCONTENTPROVIDER_SELCRITERIA).setValue(cp.toJson()))); - } - else{ - concept.getParams().put(CCONTENTPROVIDER_SELCRITERIA, Arrays.asList(new Param() - .setName(CCONTENTPROVIDER_SELCRITERIA).setValue(cp.toJson()))); - } - - } - } - }); - } - else{ - Concept concept = new Concept(); - concept.setId(communityId + CONTENTPROVIDERS_ID_SUFFIX + ID_SEPARATOR + cp.getId()); - concept.setClaim(false); - concept.setLabel(""); - - Map> params = new TreeMap<>(); - - if (cp.getName() != null) { - params.put( CCONTENTPROVIDER_NAME, Arrays.asList(new Param().setValue(cp.getName()).setName(CCONTENTPROVIDER_NAME))); - } - if(cp.getOfficialname()!= null){ - params.put( CCONTENTPROVIDER_OFFICIALNAME, Arrays.asList(new Param().setValue(cp.getOfficialname()).setName(CCONTENTPROVIDER_OFFICIALNAME))); - } - if (cp.getOpenaireId() != null){ - params.put( OPENAIRE_ID, Arrays.asList(new Param().setValue(cp.getOpenaireId()).setName(OPENAIRE_ID))); - } - if(cp.getSelectioncriteria() != null){ - params.put( CCONTENTPROVIDER_SELCRITERIA, Arrays.asList(new Param().setValue(cp.toJson()).setName(CCONTENTPROVIDER_SELCRITERIA))); - - } - - concept.setParams(params); - dts.getConcepts().add(concept); - - - } - - } - - public void updateOrganization(String communityId, CommunityOrganization organization) throws CommunityException { - - final Context context = getContextMap().get(communityId); - Category orgs = context.getCategories().get(communityId + ORGANIZATION_ID_SUFFIX); - if (orgs.getConcepts().stream().map(c -> c.getId()).collect(Collectors.toList()) - .contains(communityId + ORGANIZATION_ID_SUFFIX + ID_SEPARATOR + organization.getId())){ - orgs.getConcepts().forEach(concept -> { - if (concept.getId().equals(communityId + ORGANIZATION_ID_SUFFIX + ID_SEPARATOR + organization.getId())) { - - - if (organization.getName() != null) { - if(concept.getParams().keySet().contains(CORGANIZATION_NAME)){ - concept.getParams().replace(CORGANIZATION_NAME, Arrays.asList(new Param() - .setName(CORGANIZATION_NAME).setValue(organization.getName()))); - } - else{ - concept.getParams().put(CORGANIZATION_NAME, Arrays.asList(new Param() - .setName(CORGANIZATION_NAME).setValue(organization.getName()))); - } - - } - if (organization.getLogo_url() != null) { - if(concept.getParams().keySet().contains(CORGANIZATION_LOGOURL)){ - concept.getParams().replace(CORGANIZATION_LOGOURL, Arrays.asList(new Param() - .setName(CORGANIZATION_LOGOURL).setValue(Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes())))); - } - else{ - concept.getParams().put(CORGANIZATION_LOGOURL, Arrays.asList(new Param() - .setName(CORGANIZATION_LOGOURL).setValue(Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes())))); - } - - } - - - if (organization.getWebsite_url() != null) { - if(concept.getParams().keySet().contains(CORGANIZATION_WEBSITEURL)){ - concept.getParams().replace(CORGANIZATION_WEBSITEURL, Arrays.asList(new Param() - .setName(CORGANIZATION_WEBSITEURL).setValue(Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes())))); - } - else{ - concept.getParams().put(CORGANIZATION_WEBSITEURL, Arrays.asList(new Param() - .setName(CORGANIZATION_WEBSITEURL).setValue(Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes())))); - } - - } - - } - - }); - } - else{ - - Concept concept = new Concept(); - concept.setId(communityId + ORGANIZATION_ID_SUFFIX + ID_SEPARATOR + organization.getId()); - concept.setClaim(false); - concept.setLabel(""); - - Map> params = new TreeMap<>(); - - if (organization.getName() != null) { - params.put( CORGANIZATION_NAME, Arrays.asList(new Param().setValue(organization.getName()).setName(CORGANIZATION_NAME))); - } - if(organization.getLogo_url()!= null){ - - params.put( CORGANIZATION_LOGOURL, Arrays.asList(new Param().setValue(Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes())).setName(CORGANIZATION_LOGOURL))); - } - if (organization.getWebsite_url() != null){ - params.put( CORGANIZATION_WEBSITEURL, Arrays.asList(new Param().setValue(Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes())).setName(CORGANIZATION_WEBSITEURL))); - } - - - concept.setParams(params); - orgs.getConcepts().add(concept); - - - } - - } - - public void updateZenodoCommunity(String communityId, CommunityZenodoCommunity zc) throws CommunityException { - final Context context = getContextMap().get(communityId); - Category zcs = context.getCategories().get(communityId + ZENODOCOMMUNITY_ID_SUFFIX); - if (zcs.getConcepts().stream().map(c -> c.getId()).collect(Collectors.toList()) - .contains(communityId + ZENODOCOMMUNITY_ID_SUFFIX + ID_SEPARATOR + zc.getId())){ - zcs.getConcepts().forEach(concept -> { - if (concept.getId().equals(communityId + ZENODOCOMMUNITY_ID_SUFFIX + ID_SEPARATOR + zc.getId())) { - - - if (zc.getZenodoid() != null) { - if(concept.getParams().keySet().contains(CZENODOCOMMUNITY_ID)){ - concept.getParams().replace(CZENODOCOMMUNITY_ID, Arrays.asList(new Param() - .setName(CZENODOCOMMUNITY_ID).setValue(zc.getZenodoid()))); - } - else{ - concept.getParams().put(CZENODOCOMMUNITY_ID, Arrays.asList(new Param() - .setName(CZENODOCOMMUNITY_ID).setValue(zc.getZenodoid()))); - } - - } - - } - - }); - } - else{ - - Concept concept = new Concept(); - concept.setId(communityId + ZENODOCOMMUNITY_ID_SUFFIX + ID_SEPARATOR + zc.getId()); - concept.setClaim(false); - - - Map> params = new TreeMap<>(); - - if (zc.getZenodoid() != null) { - params.put( CZENODOCOMMUNITY_ID, Arrays.asList(new Param().setValue(zc.getZenodoid()).setName(CZENODOCOMMUNITY_ID))); - concept.setLabel(zc.getZenodoid()); - }else{ - concept.setLabel(""); - } - concept.setParams(params); - zcs.getConcepts().add(concept); - - } - - } + @Autowired + private ISClient isClient; + + public Map getContextMap() throws CommunityException { + try { + return isClient.getCommunityContextMap(); + } catch (final IOException e) { + throw new CommunityException(e); + } + } + + public List listCommunities() throws CommunityException { + return getContextMap().values() + .stream() + .filter(context -> !communityBlackList.contains(context.getId())) + .map(CommunityMappingUtils::asCommunitySummary) + .collect(Collectors.toList()); + } + + public List getCommunityInfo(final String id, final String idSuffix, final Function mapping) throws CommunityException { + final Map contextMap = getContextMap(); + final Context context = contextMap.get(id); + if (context != null) { + final Map categories = context.getCategories(); + final Category category = categories.get(id + idSuffix); + if (category != null) { return category.getConcepts() + .stream() + .map(mapping) + .collect(Collectors.toList()); } + } + return Lists.newArrayList(); + } + + public CommunityDetails getCommunity(final String id) throws CommunityException, ResourceNotFoundException { + final Context context = getContextMap().get(id); + if (context == null || CommunityConstants.communityBlackList.contains(id)) { + // ResponseStatusException(NOT_FOUND, "Unable to find resource"); + throw new ResourceNotFoundException(); + } + return CommunityMappingUtils.asCommunityProfile(context); + } + + public List getCommunityZenodoCommunities(final String id) throws CommunityException, ResourceNotFoundException { + getCommunity(id); // ensure the community exists. + return getCommunityInfo(id, ZENODOCOMMUNITY_ID_SUFFIX, c -> CommunityMappingUtils.asCommunityZenodoCommunity(id, c)); + } + + public void updateProject(final String communityId, final CommunityProject project) throws CommunityException { + final Context context = getContextMap().get(communityId); + final Category prj = context.getCategories().get(communityId + PROJECTS_ID_SUFFIX); + if (prj.getConcepts() + .stream() + .map(c -> c.getId()) + .collect(Collectors.toList()) + .contains(communityId + PROJECTS_ID_SUFFIX + ID_SEPARATOR + project.getId())) { + prj.getConcepts().forEach(concept -> { + if (concept.getId().equals(communityId + PROJECTS_ID_SUFFIX + ID_SEPARATOR + project.getId())) { + if (project.getName() != null) { + + concept.getParams() + .replace(CPROJECT_FULLNAME, Arrays.asList(new Param() + .setName(CPROJECT_FULLNAME) + .setValue(project.getName()))); + } + if (project.getAcronym() != null) { + if (concept.getParams().keySet().contains(CPROJECT_ACRONYM)) { + concept.getParams() + .replace(CPROJECT_ACRONYM, Arrays.asList(new Param() + .setName(CPROJECT_ACRONYM) + .setValue(project.getAcronym()))); + } else { + concept.getParams() + .put(CPROJECT_ACRONYM, Arrays.asList(new Param() + .setName(CPROJECT_ACRONYM) + .setValue(project.getAcronym()))); + } + + } + if (project.getOpenaireId() != null) { + if (concept.getParams().keySet().contains(OPENAIRE_ID)) { + concept.getParams() + .replace(OPENAIRE_ID, Arrays.asList(new Param() + .setName(OPENAIRE_ID) + .setValue(project.getOpenaireId()))); + } else { + concept.getParams() + .put(OPENAIRE_ID, Arrays.asList(new Param() + .setName(OPENAIRE_ID) + .setValue(project.getOpenaireId()))); + } + + } + if (project.getFunder() != null) { + concept.getParams() + .replace(CPROJECT_FUNDER, Arrays.asList(new Param() + .setName(CPROJECT_FUNDER) + .setValue(project.getFunder()))); + } + if (project.getGrantId() != null) { + concept.getParams() + .replace(CPROJECT_NUMBER, Arrays.asList(new Param() + .setName(CPROJECT_NUMBER) + .setValue(project.getGrantId()))); + + } + } + }); + } else { + final Concept concept = new Concept(); + concept.setId(communityId + PROJECTS_ID_SUFFIX + ID_SEPARATOR + project.getId()); + concept.setClaim(false); + if (project.getAcronym() != null) { + concept.setLabel(project.getAcronym()); + } else { + concept.setLabel(""); + } + + final Map> params = new TreeMap<>(); + + if (project.getAcronym() != null) { + params.put(CPROJECT_ACRONYM, Arrays.asList(new Param().setName(CPROJECT_ACRONYM) + .setValue(project.getAcronym()))); + } + + if (project.getName() != null) { + params.put(CPROJECT_FULLNAME, Arrays.asList(new Param() + .setName(CPROJECT_FULLNAME) + .setValue(project.getName()))); + } + + if (project.getOpenaireId() != null) { + params.put(OPENAIRE_ID, Arrays.asList(new Param() + .setName(OPENAIRE_ID) + .setValue(project.getOpenaireId()))); + } + + if (project.getFunder() != null) { + params.put(CPROJECT_FUNDER, Arrays.asList(new Param() + .setName(CPROJECT_FUNDER) + .setValue(project.getFunder()))); + } + + if (project.getGrantId() != null) { + params.put(CPROJECT_NUMBER, Arrays.asList(new Param() + .setName(CPROJECT_NUMBER) + .setValue(project.getGrantId()))); + } + + concept.setParams(params); + prj.getConcepts().add(concept); + + } + + } + + public void removeAdvancedConstraint(final String id) throws CommunityException { + final Context context = getContextMap().get(id); + context.getParams() + .replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() + .setName(CPROFILE_ADVANCED_CONSTRAINT) + .setValue(null))); + } + + public void updateCommunity(final String id, final CommunityWritableProperties community) throws CommunityException { + final Context context = getContextMap().get(id); + + if (community.getShortName() != null) { + context.setLabel(community.getShortName()); + } + + if (community.getName() != null) { + context.getParams() + .replace(CSUMMARY_NAME, Arrays.asList(new Param() + .setValue(community.getName()) + .setName(CSUMMARY_NAME))); + } + if (community.getDescription() != null) { + context.getParams() + .replace(CSUMMARY_DESCRIPTION, Arrays.asList(new Param() + .setName(CSUMMARY_DESCRIPTION) + .setValue(community.getDescription()))); + } + if (community.getLogoUrl() != null) { + context.getParams() + .replace(CSUMMARY_LOGOURL, Arrays.asList(new Param() + .setName(CSUMMARY_LOGOURL) + .setValue(community.getLogoUrl()))); + + } + if (community.getStatus() != null) { + context.getParams() + .replace(CSUMMARY_STATUS, Arrays.asList(new Param() + .setName(CSUMMARY_STATUS) + .setValue(community.getStatus().name()))); + } + if (community.getSubjects() != null) { + context.getParams() + .replace(CPROFILE_SUBJECT, Arrays.asList(new Param().setName(CPROFILE_SUBJECT) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getSubjects())))); + } + if (community.getFos() != null) { + if (context.getParams().containsKey(CPROFILE_FOS)) { + context.getParams() + .replace(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getFos())))); + } else { + context.getParams() + .put(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getFos())))); + } + } + if (community.getSdg() != null) { + if (context.getParams().containsKey(CPROFILE_SDG)) { + context.getParams() + .replace(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getSdg())))); + } else { + context.getParams() + .put(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getSdg())))); + } + } + if (community.getAdvancedConstraints() != null) { + if (context.getParams().containsKey(CPROFILE_ADVANCED_CONSTRAINT)) { + context.getParams() + .replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() + .setName(CPROFILE_ADVANCED_CONSTRAINT) + .setValue(new Gson().toJson(community.getAdvancedConstraints())))); + } else { + context.getParams() + .put(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() + .setName(CPROFILE_ADVANCED_CONSTRAINT) + .setValue(new Gson().toJson(community.getAdvancedConstraints())))); + } + } + if (community.getMainZenodoCommunity() != null) { + context.getParams() + .replace(CSUMMARY_ZENODOC, Arrays.asList(new Param() + .setName(CSUMMARY_ZENODOC) + .setValue(community.getMainZenodoCommunity()))); + + } + + } + + public void removeFromCategory(final String communityId, final String category, final String conceptId) throws CommunityException { + final Map cmap = getContextMap(); + final Context context = cmap.get(communityId); + final Map cat = context.getCategories(); + + final List concepts = cat.get(communityId + category) + .getConcepts() + .stream() + .filter(c -> !c.getId().equals(communityId + category + ID_SEPARATOR + conceptId)) + .collect(Collectors.toList()); + + cat.get(communityId + category).setConcepts(concepts); + } + + public void updateDatasource(final String communityId, final CommunityContentprovider cp) throws CommunityException { + final Context context = getContextMap().get(communityId); + final Category dts = context.getCategories().get(communityId + CONTENTPROVIDERS_ID_SUFFIX); + if (dts.getConcepts() + .stream() + .map(c -> c.getId()) + .collect(Collectors.toList()) + .contains(communityId + CONTENTPROVIDERS_ID_SUFFIX + ID_SEPARATOR + cp.getId())) { + dts.getConcepts().forEach(concept -> { + if (concept.getId().equals(communityId + CONTENTPROVIDERS_ID_SUFFIX + ID_SEPARATOR + cp.getId())) { + + if (cp.getName() != null) { + if (concept.getParams().keySet().contains(CCONTENTPROVIDER_NAME)) { + concept.getParams() + .replace(CCONTENTPROVIDER_NAME, Arrays.asList(new Param() + .setName(CCONTENTPROVIDER_NAME) + .setValue(cp.getName()))); + } else { + concept.getParams() + .put(CCONTENTPROVIDER_NAME, Arrays.asList(new Param() + .setName(CCONTENTPROVIDER_NAME) + .setValue(cp.getName()))); + } + + } + if (cp.getOfficialname() != null) { + if (concept.getParams().keySet().contains(CCONTENTPROVIDER_OFFICIALNAME)) { + concept.getParams() + .replace(CCONTENTPROVIDER_OFFICIALNAME, Arrays.asList(new Param() + .setName(CCONTENTPROVIDER_OFFICIALNAME) + .setValue(cp.getOfficialname()))); + } else { + concept.getParams() + .put(CCONTENTPROVIDER_OFFICIALNAME, Arrays.asList(new Param() + .setName(CCONTENTPROVIDER_OFFICIALNAME) + .setValue(cp.getOfficialname()))); + } + + } + + if (cp.getOpenaireId() != null) { + if (concept.getParams().keySet().contains(OPENAIRE_ID)) { + concept.getParams() + .replace(OPENAIRE_ID, Arrays.asList(new Param() + .setName(OPENAIRE_ID) + .setValue(cp.getOpenaireId()))); + } else { + concept.getParams() + .put(OPENAIRE_ID, Arrays.asList(new Param() + .setName(OPENAIRE_ID) + .setValue(cp.getOpenaireId()))); + } + + } + + if (cp.getSelectioncriteria() != null) { + if (concept.getParams().keySet().contains(CCONTENTPROVIDER_SELCRITERIA)) { + concept.getParams() + .replace(CCONTENTPROVIDER_SELCRITERIA, Arrays.asList(new Param() + .setName(CCONTENTPROVIDER_SELCRITERIA) + .setValue(cp.toJson()))); + } else { + concept.getParams() + .put(CCONTENTPROVIDER_SELCRITERIA, Arrays.asList(new Param() + .setName(CCONTENTPROVIDER_SELCRITERIA) + .setValue(cp.toJson()))); + } + + } + } + }); + } else { + final Concept concept = new Concept(); + concept.setId(communityId + CONTENTPROVIDERS_ID_SUFFIX + ID_SEPARATOR + cp.getId()); + concept.setClaim(false); + concept.setLabel(""); + + final Map> params = new TreeMap<>(); + + if (cp.getName() != null) { + params.put(CCONTENTPROVIDER_NAME, Arrays.asList(new Param().setValue(cp.getName()).setName(CCONTENTPROVIDER_NAME))); + } + if (cp.getOfficialname() != null) { + params.put(CCONTENTPROVIDER_OFFICIALNAME, Arrays.asList(new Param().setValue(cp.getOfficialname()).setName(CCONTENTPROVIDER_OFFICIALNAME))); + } + if (cp.getOpenaireId() != null) { + params.put(OPENAIRE_ID, Arrays.asList(new Param().setValue(cp.getOpenaireId()).setName(OPENAIRE_ID))); + } + if (cp.getSelectioncriteria() != null) { + params.put(CCONTENTPROVIDER_SELCRITERIA, Arrays.asList(new Param().setValue(cp.toJson()).setName(CCONTENTPROVIDER_SELCRITERIA))); + + } + + concept.setParams(params); + dts.getConcepts().add(concept); + + } + + } + + public void updateOrganization(final String communityId, final CommunityOrganization organization) throws CommunityException { + + final Context context = getContextMap().get(communityId); + final Category orgs = context.getCategories().get(communityId + ORGANIZATION_ID_SUFFIX); + if (orgs.getConcepts() + .stream() + .map(c -> c.getId()) + .collect(Collectors.toList()) + .contains(communityId + ORGANIZATION_ID_SUFFIX + ID_SEPARATOR + organization.getId())) { + orgs.getConcepts().forEach(concept -> { + if (concept.getId().equals(communityId + ORGANIZATION_ID_SUFFIX + ID_SEPARATOR + organization.getId())) { + + if (organization.getName() != null) { + if (concept.getParams().keySet().contains(CORGANIZATION_NAME)) { + concept.getParams() + .replace(CORGANIZATION_NAME, Arrays.asList(new Param() + .setName(CORGANIZATION_NAME) + .setValue(organization.getName()))); + } else { + concept.getParams() + .put(CORGANIZATION_NAME, Arrays.asList(new Param() + .setName(CORGANIZATION_NAME) + .setValue(organization.getName()))); + } + + } + if (organization.getLogo_url() != null) { + if (concept.getParams().keySet().contains(CORGANIZATION_LOGOURL)) { + concept.getParams() + .replace(CORGANIZATION_LOGOURL, Arrays.asList(new Param() + .setName(CORGANIZATION_LOGOURL) + .setValue(Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes())))); + } else { + concept.getParams() + .put(CORGANIZATION_LOGOURL, Arrays.asList(new Param() + .setName(CORGANIZATION_LOGOURL) + .setValue(Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes())))); + } + + } + + if (organization.getWebsite_url() != null) { + if (concept.getParams().keySet().contains(CORGANIZATION_WEBSITEURL)) { + concept.getParams() + .replace(CORGANIZATION_WEBSITEURL, Arrays.asList(new Param() + .setName(CORGANIZATION_WEBSITEURL) + .setValue(Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes())))); + } else { + concept.getParams() + .put(CORGANIZATION_WEBSITEURL, Arrays.asList(new Param() + .setName(CORGANIZATION_WEBSITEURL) + .setValue(Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes())))); + } + + } + + } + + }); + } else { + + final Concept concept = new Concept(); + concept.setId(communityId + ORGANIZATION_ID_SUFFIX + ID_SEPARATOR + organization.getId()); + concept.setClaim(false); + concept.setLabel(""); + + final Map> params = new TreeMap<>(); + + if (organization.getName() != null) { + params.put(CORGANIZATION_NAME, Arrays.asList(new Param().setValue(organization.getName()).setName(CORGANIZATION_NAME))); + } + if (organization.getLogo_url() != null) { + + params.put(CORGANIZATION_LOGOURL, Arrays + .asList(new Param().setValue(Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes())).setName(CORGANIZATION_LOGOURL))); + } + if (organization.getWebsite_url() != null) { + params.put(CORGANIZATION_WEBSITEURL, Arrays + .asList(new Param().setValue(Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes())) + .setName(CORGANIZATION_WEBSITEURL))); + } + + concept.setParams(params); + orgs.getConcepts().add(concept); + + } + + } + + public void updateZenodoCommunity(final String communityId, final CommunityZenodoCommunity zc) throws CommunityException { + final Context context = getContextMap().get(communityId); + final Category zcs = context.getCategories().get(communityId + ZENODOCOMMUNITY_ID_SUFFIX); + if (zcs.getConcepts() + .stream() + .map(c -> c.getId()) + .collect(Collectors.toList()) + .contains(communityId + ZENODOCOMMUNITY_ID_SUFFIX + ID_SEPARATOR + zc.getId())) { + zcs.getConcepts().forEach(concept -> { + if (concept.getId().equals(communityId + ZENODOCOMMUNITY_ID_SUFFIX + ID_SEPARATOR + zc.getId())) { + + if (zc.getZenodoid() != null) { + if (concept.getParams().keySet().contains(CZENODOCOMMUNITY_ID)) { + concept.getParams() + .replace(CZENODOCOMMUNITY_ID, Arrays.asList(new Param() + .setName(CZENODOCOMMUNITY_ID) + .setValue(zc.getZenodoid()))); + } else { + concept.getParams() + .put(CZENODOCOMMUNITY_ID, Arrays.asList(new Param() + .setName(CZENODOCOMMUNITY_ID) + .setValue(zc.getZenodoid()))); + } + + } + + } + + }); + } else { + + final Concept concept = new Concept(); + concept.setId(communityId + ZENODOCOMMUNITY_ID_SUFFIX + ID_SEPARATOR + zc.getId()); + concept.setClaim(false); + + final Map> params = new TreeMap<>(); + + if (zc.getZenodoid() != null) { + params.put(CZENODOCOMMUNITY_ID, Arrays.asList(new Param().setValue(zc.getZenodoid()).setName(CZENODOCOMMUNITY_ID))); + concept.setLabel(zc.getZenodoid()); + } else { + concept.setLabel(""); + } + concept.setParams(params); + zcs.getConcepts().add(concept); + + } + + } } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityConstants.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityConstants.java index 2bbd751e..1aa84835 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityConstants.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityConstants.java @@ -4,6 +4,7 @@ import java.util.Set; import com.google.common.collect.Sets; +@Deprecated public class CommunityConstants { public final static Set communityBlackList = Sets.newHashSet("fet-fp7", "fet-h2020"); @@ -49,13 +50,12 @@ public class CommunityConstants { public final static String CCONTENTPROVIDERENABLED_DEFAULT = "true"; public final static String CCONTENTPROVIDER_SELCRITERIA = "selcriteria"; - //community zenodo community + // community zenodo community public final static String CZENODOCOMMUNITY_ID = "zenodoid"; - //community organization + // community organization public final static String CORGANIZATION_NAME = "name"; public final static String CORGANIZATION_LOGOURL = "logourl"; public final static String CORGANIZATION_WEBSITEURL = "websiteurl"; - } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityMappingUtils.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityMappingUtils.java index fb5da147..291e011d 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityMappingUtils.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityMappingUtils.java @@ -1,10 +1,50 @@ package eu.dnetlib.openaire.community; +import static eu.dnetlib.openaire.common.Utils.escape; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDERENABLED_DEFAULT; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_ENABLED; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_NAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_OFFICIALNAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CCONTENTPROVIDER_SELCRITERIA; +import static eu.dnetlib.openaire.community.CommunityConstants.CONTENTPROVIDERS_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.CORGANIZATION_LOGOURL; +import static eu.dnetlib.openaire.community.CommunityConstants.CORGANIZATION_NAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CORGANIZATION_WEBSITEURL; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_ADVANCED_CONSTRAINT; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_CREATIONDATE; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_FOS; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_SDG; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROFILE_SUBJECT; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_ACRONYM; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_FULLNAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_FUNDER; +import static eu.dnetlib.openaire.community.CommunityConstants.CPROJECT_NUMBER; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_DESCRIPTION; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_LOGOURL; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_NAME; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_STATUS; +import static eu.dnetlib.openaire.community.CommunityConstants.CSUMMARY_ZENODOC; +import static eu.dnetlib.openaire.community.CommunityConstants.CSV_DELIMITER; +import static eu.dnetlib.openaire.community.CommunityConstants.CZENODOCOMMUNITY_ID; +import static eu.dnetlib.openaire.community.CommunityConstants.ID_SEPARATOR; +import static eu.dnetlib.openaire.community.CommunityConstants.OPENAIRE_ID; +import static eu.dnetlib.openaire.community.CommunityConstants.ORGANIZATION_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.PIPE_SEPARATOR; +import static eu.dnetlib.openaire.community.CommunityConstants.PROJECTS_ID_SUFFIX; +import static eu.dnetlib.openaire.community.CommunityConstants.ZENODOCOMMUNITY_ID_SUFFIX; + import java.text.ParseException; -import java.util.*; +import java.util.Arrays; +import java.util.Base64; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import java.util.stream.Stream; +import org.apache.commons.lang3.StringUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + import com.google.common.escape.Escaper; import com.google.common.xml.XmlEscapers; @@ -20,13 +60,7 @@ import eu.dnetlib.openaire.exporter.model.context.Concept; import eu.dnetlib.openaire.exporter.model.context.Context; import eu.dnetlib.openaire.exporter.model.context.Param; -import org.apache.commons.lang3.StringUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import static eu.dnetlib.openaire.common.Utils.escape; -import static eu.dnetlib.openaire.community.CommunityConstants.*; - +@Deprecated public class CommunityMappingUtils { private final static String pattern = "yyyy-MM-dd'T'hh:mm:ss"; @@ -38,8 +72,8 @@ public class CommunityMappingUtils { summary.setId(c.getId()); summary.setShortName(c.getLabel()); - summary.setLastUpdateDate(c.getLastUpdateDate()); - summary.setCreationDate(c.getCreationDate()); + // summary.setLastUpdateDate(c.getLastUpdateDate()); + // summary.setCreationDate(c.getCreationDate()); summary.setQueryId(c.getId() + PIPE_SEPARATOR + c.getLabel()); summary.setType(c.getType()); @@ -63,7 +97,7 @@ public class CommunityMappingUtils { return summary; } - public static CommunityDetails asCommunityProfile(final Context c) { + public static CommunityDetails asCommunityProfile(final Context c) { final CommunityDetails p = new CommunityDetails(asCommunitySummary(c)); p.setLastUpdateDate(c.getLastUpdateDate()); @@ -78,14 +112,14 @@ public class CommunityMappingUtils { p.setSdg(splitValues(asValues(params.get(CPROFILE_SDG)), CSV_DELIMITER)); } if (params.containsKey(CPROFILE_ADVANCED_CONSTRAINT)) { - //In the map the string is the serialization of the json representing the selection criteria so it is a valid json + // In the map the string is the serialization of the json representing the selection criteria so it is a valid json p.setAdvancedConstraints(SelectionCriteria.fromJson(asCsv(params.get(CPROFILE_ADVANCED_CONSTRAINT)))); } - if (params.containsKey(CPROFILE_CREATIONDATE)){ + if (params.containsKey(CPROFILE_CREATIONDATE)) { try { p.setCreationDate(org.apache.commons.lang3.time.DateUtils.parseDate(asCsv(params.get(CPROFILE_CREATIONDATE)), pattern)); - }catch(ParseException e) { + } catch (final ParseException e) { log.debug("Exception on date format: " + e.getMessage()); } } @@ -121,44 +155,40 @@ public class CommunityMappingUtils { return d; } - public static CommunityZenodoCommunity asCommunityZenodoCommunity(final String communityId, final Concept c){ + public static CommunityZenodoCommunity asCommunityZenodoCommunity(final String communityId, final Concept c) { final CommunityZenodoCommunity z = new CommunityZenodoCommunity(); final Map> p = c.getParams(); z.setCommunityId(communityId); z.setId(StringUtils.substringAfterLast(c.getId(), ID_SEPARATOR)); - z.setZenodoid(firstValue(p,CZENODOCOMMUNITY_ID)); - //z.setName(c.getLabel()); + z.setZenodoid(firstValue(p, CZENODOCOMMUNITY_ID)); + // z.setName(c.getLabel()); return z; } - - public static CommunityOrganization asCommunityOrganization(String id, Concept c) { + public static CommunityOrganization asCommunityOrganization(final String id, final Concept c) { final Map> p = c.getParams(); final CommunityOrganization o = new CommunityOrganization(); o.setCommunityId(id); o.setId(StringUtils.substringAfterLast(c.getId(), ID_SEPARATOR)); - o.setName(firstValue(p,CORGANIZATION_NAME)); - o.setLogo_url(getDecodedUrl(firstValue(p,CORGANIZATION_LOGOURL))); - o.setWebsite_url(getDecodedUrl(firstValue(p,CORGANIZATION_WEBSITEURL))); + o.setName(firstValue(p, CORGANIZATION_NAME)); + o.setLogo_url(getDecodedUrl(firstValue(p, CORGANIZATION_LOGOURL))); + o.setWebsite_url(getDecodedUrl(firstValue(p, CORGANIZATION_WEBSITEURL))); return o; } - private static String getDecodedUrl(final String encoded_url){ - if(encoded_url == null){ - return encoded_url; - } + private static String getDecodedUrl(final String encoded_url) { + if (encoded_url == null) { return encoded_url; } return new String(Base64.getDecoder().decode(encoded_url)); } - private static List splitValues(final Stream stream, final String separator) { return stream.map(s -> s.split(separator)) - .map(Arrays::asList) - .flatMap(List::stream) - .filter(StringUtils::isNotBlank) - .map(StringUtils::trim) - .collect(Collectors.toList()); + .map(Arrays::asList) + .flatMap(List::stream) + .filter(StringUtils::isNotBlank) + .map(StringUtils::trim) + .collect(Collectors.toList()); } private static String firstValue(final Map> p, final String paramName) { @@ -167,11 +197,12 @@ public class CommunityMappingUtils { private static String asCsv(final List params) { return asValues(params) - .collect(Collectors.joining(CSV_DELIMITER)); + .collect(Collectors.joining(CSV_DELIMITER)); } private static Stream asValues(final List params) { - return params == null ? Stream.empty() : params.stream() + return params == null ? Stream.empty() + : params.stream() .map(Param::getValue) .map(StringUtils::trim) .distinct(); @@ -180,10 +211,9 @@ public class CommunityMappingUtils { public static String asProjectXML(final String contextId, final CommunityProject project) { final Escaper esc = XmlEscapers.xmlAttributeEscaper(); final StringBuilder sb = new StringBuilder(); - sb.append( - String.format( - "\n", - escape(esc, contextId), PROJECTS_ID_SUFFIX, ID_SEPARATOR, escape(esc, String.valueOf(project.getId())), escape(esc, project.getAcronym()))); + sb.append(String + .format("\n", escape(esc, contextId), PROJECTS_ID_SUFFIX, ID_SEPARATOR, escape(esc, String + .valueOf(project.getId())), escape(esc, project.getAcronym()))); sb.append(paramXML(CPROJECT_FULLNAME, project.getName())); sb.append(paramXML(CPROJECT_ACRONYM, project.getAcronym())); sb.append(paramXML(CPROJECT_NUMBER, project.getGrantId())); @@ -197,14 +227,13 @@ public class CommunityMappingUtils { log.info("creating the XML for the content provider"); final Escaper esc = XmlEscapers.xmlAttributeEscaper(); final StringBuilder sb = new StringBuilder(); - sb.append( - String.format( - "\n", - escape(esc, contextId), CONTENTPROVIDERS_ID_SUFFIX, ID_SEPARATOR, escape(esc, String.valueOf(ccp.getId())), escape(esc, ccp.getName()))); + sb.append(String + .format("\n", escape(esc, contextId), CONTENTPROVIDERS_ID_SUFFIX, ID_SEPARATOR, escape(esc, String + .valueOf(ccp.getId())), escape(esc, ccp.getName()))); sb.append(paramXML(OPENAIRE_ID, ccp.getOpenaireId())); sb.append(paramXML(CCONTENTPROVIDER_NAME, ccp.getName())); sb.append(paramXML(CCONTENTPROVIDER_OFFICIALNAME, ccp.getOfficialname())); - sb.append(paramXML(CCONTENTPROVIDER_ENABLED,CCONTENTPROVIDERENABLED_DEFAULT)); + sb.append(paramXML(CCONTENTPROVIDER_ENABLED, CCONTENTPROVIDERENABLED_DEFAULT)); sb.append(paramXMLNoEscape(CCONTENTPROVIDER_SELCRITERIA, ccp.toXML())); sb.append("\n"); log.info(sb.toString()); @@ -214,32 +243,28 @@ public class CommunityMappingUtils { public static String asZenodoCommunityXML(final String contextId, final CommunityZenodoCommunity zc) { final Escaper esc = XmlEscapers.xmlAttributeEscaper(); final StringBuilder sb = new StringBuilder(); - sb.append( - String.format( - "\n", - escape(esc, contextId), ZENODOCOMMUNITY_ID_SUFFIX, ID_SEPARATOR, escape(esc, String.valueOf(zc.getId())), escape(esc, zc.getZenodoid()))); + sb.append(String + .format("\n", escape(esc, contextId), ZENODOCOMMUNITY_ID_SUFFIX, ID_SEPARATOR, escape(esc, String + .valueOf(zc.getId())), escape(esc, zc.getZenodoid()))); sb.append(paramXML(CZENODOCOMMUNITY_ID, zc.getZenodoid())); sb.append("\n"); return sb.toString(); } - - public static String asOrganizationXML(final String contextId, CommunityOrganization organization) { + public static String asOrganizationXML(final String contextId, final CommunityOrganization organization) { final Escaper esc = XmlEscapers.xmlAttributeEscaper(); final StringBuilder sb = new StringBuilder(); - sb.append( - String.format( - "\n", - escape(esc, contextId), ORGANIZATION_ID_SUFFIX, ID_SEPARATOR, escape(esc, String.valueOf(organization.getId())), escape(esc, organization.getName()))); + sb.append(String + .format("\n", escape(esc, contextId), ORGANIZATION_ID_SUFFIX, ID_SEPARATOR, escape(esc, String + .valueOf(organization.getId())), escape(esc, organization.getName()))); sb.append(paramXML(CORGANIZATION_NAME, organization.getName())); sb.append(paramXML(CORGANIZATION_LOGOURL, Base64.getEncoder().encodeToString(organization.getLogo_url().getBytes()))); - sb.append(paramXML(CORGANIZATION_WEBSITEURL,Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes()))); + sb.append(paramXML(CORGANIZATION_WEBSITEURL, Base64.getEncoder().encodeToString(organization.getWebsite_url().getBytes()))); sb.append("\n"); return sb.toString(); } - private static String paramXML(final String paramName, final String value) { return String.format("%s\n", paramName, escape(XmlEscapers.xmlContentEscaper(), value)); } 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 1c04c8c4..b57909ab 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 @@ -51,6 +51,11 @@ public class CommunityService { // 5) Capire come gestire il campo Id (Integer) di CommunityContentprovider // 6) Capire come gestire il campo Id (Integer) di CommunityOrganization // 7) Modificare le api per gestire le ZenodoCommunities (main + others) + // 8) i campi name e lastUpdate mancano nel nuovo modello delle communities, si aggiungono? + // 9) i campi officialName e selectioncriteria mancano nel nuovo modello delle datasource, si aggiungono? + // 10) i campi name, logoUrl e websiteUrl mancano nel nuovo modello delle organization, + // esistono solo in quello delle support_org, occorre rivedere le api e i mapping + // 11) Move enums in dnet-exporter-model @Autowired private DbCommunityRepository dbCommunityRepository; diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/ConvertionUtils.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/ConvertionUtils.java index 8b25b173..bf3d2d30 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/ConvertionUtils.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/ConvertionUtils.java @@ -1,5 +1,7 @@ package eu.dnetlib.openaire.community.db; +import static eu.dnetlib.openaire.community.CommunityConstants.PIPE_SEPARATOR; + import eu.dnetlib.openaire.community.db.model.DbCommunity; import eu.dnetlib.openaire.community.db.model.DbDatasource; import eu.dnetlib.openaire.community.db.model.DbOrganization; @@ -11,14 +13,40 @@ import eu.dnetlib.openaire.exporter.model.community.CommunitySummary; public class ConvertionUtils { - public static CommunitySummary toSummary(final DbCommunity dbEntry) { - // TODO - return null; + public static CommunitySummary toSummary(final DbCommunity c) { + final CommunitySummary summary = new CommunitySummary(); + + summary.setId(c.getId()); + summary.setShortName(c.getLabel()); + summary.setName(null); // TODO: the field is missing in the db model + summary.setLastUpdateDate(null); // TODO: the field is missing in the db model + summary.setCreationDate(c.getCreationDate()); + summary.setQueryId(c.getId() + PIPE_SEPARATOR + c.getLabel()); + summary.setType(c.getType().toString()); + summary.setDescription(c.getDescription()); + summary.setLogoUrl(c.getLogoUrl()); + summary.setStatus(c.getStatus()); + summary.setZenodoCommunity(c.getMainZenodoCommunity()); + + return summary; } public static CommunityProject toCommunityProject(final DbProject dbEntry) { - // TODO - return null; + final CommunityProject cp = new CommunityProject(); + + cp.setCommunityId(dbEntry.getCommunity()); + + // TODO id e openaireId sono uguali + cp.setId(dbEntry.getProjectId()); + cp.setOpenaireId(dbEntry.getProjectId()); + + cp.setName(dbEntry.getProjectName()); + cp.setAcronym(dbEntry.getProjectAcronym()); + + cp.setFunder(dbEntry.getProjectFunder()); + cp.setGrantId(dbEntry.getProjectCode()); + + return cp; } public static DbProject toDbProject(final String id, final CommunityProject project) { @@ -27,8 +55,22 @@ public class ConvertionUtils { } public static CommunityContentprovider toCommunityContentprovider(final DbDatasource dbEntry) { - // TODO - return null; + final CommunityContentprovider ccp = new CommunityContentprovider(); + + ccp.setCommunityId(dbEntry.getCommunity()); + + // TODO id e openaireId sono uguali + ccp.setId(dbEntry.getDsId()); + ccp.setOpenaireId(dbEntry.getDsId()); + + // TODO name e officialName sono uguali + ccp.setName(dbEntry.getDsName()); + ccp.setOfficialname(dbEntry.getDsName()); + + // TODO il campo manca nel nuovo modello + ccp.setSelectioncriteria(null); + + return ccp; } public static DbDatasource toDbDatasource(final String id, final CommunityContentprovider provider) { @@ -37,8 +79,18 @@ public class ConvertionUtils { } public static CommunityOrganization toCommunityOrganiztion(final DbOrganization dbEntry) { - // TODO - return null; + final CommunityOrganization co = new CommunityOrganization(); + co.setCommunityId(dbEntry.getCommunity()); + co.setId(dbEntry.getOrgId()); + + // TODO: + // queste informazioni sono mancanti nel modello delle organizations + // ma esitono in quello delle support_organizations + co.setLogo_url(null); + co.setName(null); + co.setWebsite_url(null); + + return co; } public static DbOrganization toDbOrganization(final String id, final CommunityOrganization org) { diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimType.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimType.java index c4bbca02..077342ce 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimType.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimType.java @@ -1,7 +1,26 @@ package eu.dnetlib.openaire.community.db.enums; public enum CommunityClaimType { - managersOnly, - membersOnly, - all + + managersOnly("managers-only"), + membersOnly("members-only"), + all("all"); + + private final String description; + + private CommunityClaimType(final String description) { + this.description = description; + } + + public String getDescription() { + return description; + } + + public static CommunityClaimType fromDescription(final String dbData) { + for (final CommunityClaimType t : CommunityClaimType.values()) { + if (t.description.equalsIgnoreCase(dbData)) { return t; } + } + return null; + } + } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimTypeConverter.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimTypeConverter.java index d9940e49..bacda019 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimTypeConverter.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/db/enums/CommunityClaimTypeConverter.java @@ -10,12 +10,8 @@ public class CommunityClaimTypeConverter implements AttributeConverter