diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClient.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClient.java index 01752de5..6a048867 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClient.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClient.java @@ -22,6 +22,8 @@ public interface ISClient { void updateContextParam(String id, String name, String value); + void updateContextParamNoEscape(String id, String name, String value); + void updateContextAttribute(String id, String name, String value); void addConcept(String id, String categoryId, String data); diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClientImpl.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClientImpl.java index 3bb72c60..960d437d 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClientImpl.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/common/ISClientImpl.java @@ -117,6 +117,18 @@ public class ISClientImpl implements ISClient { } } + @Override + @CacheEvict(value = { + "context-cache", "context-cache-funder" + }, allEntries = true) + public void updateContextParamNoEscape(final String id, final String name, final String value) { + try { + _quickSeachProfile(getXQueryNoEscape(id, name, value)); + } catch (final ISLookUpException e) { + throw new DsmRuntimeException(String.format("unable update context param [id: %s, name: %s, value: %s]", id, name, value), e); + } + } + @Override @CacheEvict(value = { "context-cache", "context-cache-funder" @@ -211,6 +223,16 @@ public class ISClientImpl implements ISClient { } } + private String getXQueryNoEscape(final String id, final String name, final String value) { + if (StringUtils.isNotBlank(value)) { + return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" + + "/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with %s", id, name, name, value); + } else { + return String.format("update replace collection('/db/DRIVER/ContextDSResources/ContextDSResourceType')" + + "/RESOURCE_PROFILE/BODY/CONFIGURATION/context[./@id = '%s']/param[./@name = '%s'] with ", id, name, name); + } + } + private String getConceptXQuery(final String id, final String name, final String value) { final Escaper esc = XmlEscapers.xmlContentEscaper(); if (StringUtils.isNotBlank(value)) { diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java index 75ad8fd8..bde3672d 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java @@ -10,6 +10,7 @@ import static eu.dnetlib.openaire.common.ExporterConstants.W; import java.util.List; +import eu.dnetlib.openaire.community.selectioncriteria.SelectionCriteria; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.web.bind.annotation.CrossOrigin; @@ -387,7 +388,7 @@ public class CommunityApiController { @ApiResponse(responseCode = "500", description = "unexpected error") }) public CommunityDetails addAdvancedConstraint( @PathVariable final String id, - @RequestBody final String advancedConstraint) throws CommunityException, CommunityNotFoundException { + @RequestBody final SelectionCriteria advancedConstraint) throws CommunityException, CommunityNotFoundException { return communityApiCore.addCommunityAdvancedConstraint(id, advancedConstraint); } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiCore.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiCore.java index a07d8ea7..473b84a1 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiCore.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiCore.java @@ -3,6 +3,8 @@ package eu.dnetlib.openaire.community; import java.util.*; import java.util.stream.Collectors; +import com.google.gson.Gson; +import eu.dnetlib.openaire.community.selectioncriteria.SelectionCriteria; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -82,7 +84,7 @@ public class CommunityApiCore {// implements CommunityClient{ } if (details.getAdvancedConstraint() != null) { - isClient.updateContextParam(id, CPROFILE_ADVANCED_CONSTRAINT, details.getAdvancedConstraint()); + isClient.updateContextParamNoEscape(id, CPROFILE_ADVANCED_CONSTRAINT, ""); } if (details.getMainZenodoCommunity() != null) { @@ -310,7 +312,7 @@ public class CommunityApiCore {// implements CommunityClient{ current.addAll(sdgs); - cd.setFos(Lists.newArrayList(current)); + cd.setSdg(Lists.newArrayList(current)); setCommunity(id, CommunityWritableProperties.fromDetails(cd)); @@ -325,16 +327,16 @@ public class CommunityApiCore {// implements CommunityClient{ current.removeAll(sdgs); - cd.setFos(Lists.newArrayList(current)); + cd.setSdg(Lists.newArrayList(current)); setCommunity(id, CommunityWritableProperties.fromDetails(cd)); return cd; } - public CommunityDetails addCommunityAdvancedConstraint(final String id, final String advancedCosntraint) throws CommunityException, CommunityNotFoundException { + public CommunityDetails addCommunityAdvancedConstraint(final String id, final SelectionCriteria advancedCosntraint) throws CommunityException, CommunityNotFoundException { - final CommunityDetails cd = cc.getCommunity(id); + final CommunityDetails cd = new CommunityDetails(); cd.setAdvancedConstraint(advancedCosntraint); @@ -345,9 +347,9 @@ public class CommunityApiCore {// implements CommunityClient{ public CommunityDetails removeCommunityAdvancedConstraint(final String id) throws CommunityException, CommunityNotFoundException { - final CommunityDetails cd = cc.getCommunity(id); - - cd.setAdvancedConstraint(null); + final CommunityDetails cd = new CommunityDetails(); + SelectionCriteria sl = new SelectionCriteria(); + cd.setAdvancedConstraint(sl); setCommunity(id, CommunityWritableProperties.fromDetails(cd)); 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 fde84333..52d4dd40 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 @@ -2,7 +2,9 @@ package eu.dnetlib.openaire.community; 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.community.selectioncriteria.SelectionCriteria; import eu.dnetlib.openaire.context.Category; import eu.dnetlib.openaire.context.Concept; import eu.dnetlib.openaire.context.Context; @@ -199,6 +201,23 @@ public class CommunityCommon { .setValue(Joiner.on(CSV_DELIMITER) .join(community.getSubjects())))); } + if(community.getFos() != null){ + context.getParams() + .replace(CPROFILE_FOS, Arrays.asList(new Param().setName(CPROFILE_FOS) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getFos())))); + } + if(community.getSdg() != null){ + context.getParams() + .replace(CPROFILE_SDG, Arrays.asList(new Param().setName(CPROFILE_SDG) + .setValue(Joiner.on(CSV_DELIMITER) + .join(community.getSdg())))); + } + if (community.getAdvancedConstraint() != null) { + context.getParams() + .replace(CPROFILE_ADVANCED_CONSTRAINT, Arrays.asList(new Param() + .setName(CPROFILE_ADVANCED_CONSTRAINT).setValue(new Gson().toJson(community.getAdvancedConstraint())))); + } if(community.getMainZenodoCommunity() != null){ context.getParams() .replace(CSUMMARY_ZENODOC, Arrays.asList(new Param() diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityDetails.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityDetails.java index 712c3702..7625582a 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityDetails.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityDetails.java @@ -5,6 +5,7 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonAutoDetect; +import eu.dnetlib.openaire.community.selectioncriteria.SelectionCriteria; import io.swagger.v3.oas.annotations.media.Schema; @JsonAutoDetect @@ -26,7 +27,7 @@ public class CommunityDetails extends CommunitySummary { private List sdg; @Schema(description = "list of advanced criteria to associate results to this community") - private String advancedConstraint; + private SelectionCriteria advancedConstraint; public CommunityDetails() {} @@ -79,11 +80,11 @@ public class CommunityDetails extends CommunitySummary { this.sdg = sdg; } - public String getAdvancedConstraint() { + public SelectionCriteria getAdvancedConstraint() { return advancedConstraint; } - public void setAdvancedConstraint(String advancedConstraint) { + public void setAdvancedConstraint(SelectionCriteria advancedConstraint) { this.advancedConstraint = advancedConstraint; } } 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 a54bd368..24ce0262 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 @@ -69,7 +69,7 @@ public class CommunityMappingUtils { p.setSdg(splitValues(asValues(params.get(CPROFILE_SDG)), CSV_DELIMITER)); } if (params.containsKey(CPROFILE_ADVANCED_CONSTRAINT)) { - p.setAdvancedConstraint(asCsv(params.get(CPROFILE_ADVANCED_CONSTRAINT))); + p.setAdvancedConstraint(SelectionCriteria.fromJson(asCsv(params.get(CPROFILE_ADVANCED_CONSTRAINT)))); } if (params.containsKey(CPROFILE_CREATIONDATE)){ try { diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityWritableProperties.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityWritableProperties.java index 1be9ed90..db6d3e5e 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityWritableProperties.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityWritableProperties.java @@ -4,8 +4,11 @@ import java.util.List; import com.fasterxml.jackson.annotation.JsonAutoDetect; +import eu.dnetlib.openaire.community.selectioncriteria.SelectionCriteria; import io.swagger.v3.oas.annotations.media.Schema; +import javax.persistence.criteria.Selection; + @JsonAutoDetect public class CommunityWritableProperties { @@ -31,7 +34,7 @@ public class CommunityWritableProperties { private List sdg; @Schema(description = "Advanced constraint for the association of results to the community") - private String advancedConstraint; + private SelectionCriteria advancedConstraint; @Schema(description = "status of the community, drives its visibility") @@ -71,11 +74,11 @@ public class CommunityWritableProperties { this.sdg = sdg; } - public String getAdvancedConstraint() { + public SelectionCriteria getAdvancedConstraint() { return advancedConstraint; } - public void setAdvancedConstraint(String advancedConstraint) { + public void setAdvancedConstraint(SelectionCriteria advancedConstraint) { this.advancedConstraint = advancedConstraint; } diff --git a/apps/dnet-exporter-api/src/main/resources/application.properties b/apps/dnet-exporter-api/src/main/resources/application.properties index bde38f76..340eb274 100644 --- a/apps/dnet-exporter-api/src/main/resources/application.properties +++ b/apps/dnet-exporter-api/src/main/resources/application.properties @@ -22,7 +22,7 @@ management.endpoints.web.base-path = / management.endpoints.web.path-mapping.prometheus = metrics management.endpoints.web.path-mapping.health = health - +apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityApiController.java # ENABLE / DISABLE CONTROLLERS openaire.exporter.enable.dsm = true openaire.exporter.enable.community = true diff --git a/apps/dnet-exporter-api/src/main/resources/global.properties b/apps/dnet-exporter-api/src/main/resources/global.properties index 82988336..6b026841 100644 --- a/apps/dnet-exporter-api/src/main/resources/global.properties +++ b/apps/dnet-exporter-api/src/main/resources/global.properties @@ -1,7 +1,12 @@ -services.is.host = localhost -services.is.port = 8280 -services.is.protocol = http -services.is.context = app +#services.is.host = localhost +services.is.host = dev-openaire.d4science.org +#services.is.port = 8280 +services.is.port = 443 +#services.is.protocol = http +services.is.protocol = https +#services.is.context = app +services.is.context = is +#services.is.baseurl = ${services.is.protocol}://${services.is.host}:${services.is.port}/${services.is.context}/services services.is.baseurl = ${services.is.protocol}://${services.is.host}:${services.is.port}/${services.is.context}/services openaire.exporter.isLookupUrl = ${services.is.baseurl}/isLookUp @@ -15,7 +20,8 @@ openaire.exporter.cxfClientConnectTimeout = 60000 openaire.exporter.cxfClientReceiveTimeout = 120000 # JDBC -openaire.exporter.jdbc.url = jdbc:postgresql://localhost:5432/dnet_openaireplus +#openaire.exporter.jdbc.url = jdbc:postgresql://localhost:5432/dnet_openaireplus +openaire.exporter.jdbc.url = jdbc:postgresql://localhost:5432/dev_openaire_8280 openaire.exporter.jdbc.user = dnetapi openaire.exporter.jdbc.pwd = dnetPwd openaire.exporter.jdbc.minIdle = 1