diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java index 5b320bac..9683ec36 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/CommunityService.java @@ -50,6 +50,7 @@ import eu.dnetlib.openaire.exporter.model.community.CommunitySummary; import eu.dnetlib.openaire.exporter.model.community.CommunityWritableProperties; import eu.dnetlib.openaire.exporter.model.community.SubCommunity; import eu.dnetlib.openaire.exporter.model.community.selectioncriteria.SelectionCriteria; +import eu.dnetlib.openaire.exporter.model.context.IISConfigurationEntry; @Service @ConditionalOnProperty(value = "openaire.exporter.enable.community", havingValue = "true") @@ -591,4 +592,24 @@ public class CommunityService { dbCommunityRepository.deleteById(id); } + @Transactional + public List getIISConfiguration(final String id) throws CommunityException { + try { + final List res = new ArrayList<>(); + + res.add(dbCommunityRepository.findById(id) + .map(CommunityMappingUtils::asIISConfigurationEntry) + .orElseThrow(() -> new ResourceNotFoundException("Community not found: " + id))); + + for (final DbSubCommunity subc : dbSubCommunityRepository.findByCommunity(id)) { + res.add(CommunityMappingUtils.asIISConfigurationEntry(subc)); + } + + return res; + } catch (final Throwable e) { + log.error(e); + throw new CommunityException(e); + } + } + } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/importer/CommunityImporterService.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/importer/CommunityImporterService.java index 3a9bacd3..5df6224d 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/importer/CommunityImporterService.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/importer/CommunityImporterService.java @@ -50,55 +50,55 @@ import eu.dnetlib.openaire.exporter.model.context.Param; public class CommunityImporterService { // common - private final static String OPENAIRE_ID = "openaireId"; - private final static String PIPE_SEPARATOR = "||"; - private final static String ID_SEPARATOR = "::"; - private final static String CSV_DELIMITER = ","; - private final static String CLABEL = "label"; + public final static String OPENAIRE_ID = "openaireId"; + public final static String PIPE_SEPARATOR = "||"; + public final static String ID_SEPARATOR = "::"; + public final static String CSV_DELIMITER = ","; + public final static String CLABEL = "label"; // id suffixes - private final static String PROJECTS_ID_SUFFIX = ID_SEPARATOR + "projects"; - private final static String CONTENTPROVIDERS_ID_SUFFIX = ID_SEPARATOR + "contentproviders"; - private final static String ZENODOCOMMUNITY_ID_SUFFIX = ID_SEPARATOR + "zenodocommunities"; - private final static String ORGANIZATION_ID_SUFFIX = ID_SEPARATOR + "organizations"; + public final static String PROJECTS_ID_SUFFIX = ID_SEPARATOR + "projects"; + public final static String CONTENTPROVIDERS_ID_SUFFIX = ID_SEPARATOR + "contentproviders"; + public final static String ZENODOCOMMUNITY_ID_SUFFIX = ID_SEPARATOR + "zenodocommunities"; + public final static String ORGANIZATION_ID_SUFFIX = ID_SEPARATOR + "organizations"; // community summary - private final static String CSUMMARY_DESCRIPTION = "description"; - private final static String CSUMMARY_LOGOURL = "logourl"; - private final static String CSUMMARY_STATUS = "status"; - private final static String CSUMMARY_NAME = "name"; - private final static String CSUMMARY_MANAGER = "manager"; - private final static String CSUMMARY_ZENODOC = "zenodoCommunity"; + public final static String CSUMMARY_DESCRIPTION = "description"; + public final static String CSUMMARY_LOGOURL = "logourl"; + public final static String CSUMMARY_STATUS = "status"; + public final static String CSUMMARY_NAME = "name"; + public final static String CSUMMARY_MANAGER = "manager"; + public final static String CSUMMARY_ZENODOC = "zenodoCommunity"; // community profile - private final static String CPROFILE_SUBJECT = "subject"; - private final static String CPROFILE_CREATIONDATE = "creationdate"; - private final static String CPROFILE_FOS = "fos"; - private final static String CPROFILE_SDG = "sdg"; - private final static String CPROFILE_ADVANCED_CONSTRAINT = "advancedConstraints"; - private final static String CPROFILE_REMOVE_CONSTRAINT = "removeConstraints"; - private final static String CPROFILE_SUGGESTED_ACKNOWLEDGEMENT = "suggestedAcknowledgement"; + public final static String CPROFILE_SUBJECT = "subject"; + public final static String CPROFILE_CREATIONDATE = "creationdate"; + public final static String CPROFILE_FOS = "fos"; + public final static String CPROFILE_SDG = "sdg"; + public final static String CPROFILE_ADVANCED_CONSTRAINT = "advancedConstraints"; + public final static String CPROFILE_REMOVE_CONSTRAINT = "removeConstraints"; + public final static String CPROFILE_SUGGESTED_ACKNOWLEDGEMENT = "suggestedAcknowledgement"; // community project - private final static String CPROJECT_FUNDER = "funder"; - private final static String CPROJECT_NUMBER = "CD_PROJECT_NUMBER"; - private final static String CPROJECT_FULLNAME = "projectfullname"; - private final static String CPROJECT_ACRONYM = "acronym"; + public final static String CPROJECT_FUNDER = "funder"; + public final static String CPROJECT_NUMBER = "CD_PROJECT_NUMBER"; + public final static String CPROJECT_FULLNAME = "projectfullname"; + public final static String CPROJECT_ACRONYM = "acronym"; // community content provider - private final static String CCONTENTPROVIDER_NAME = "name"; - private final static String CCONTENTPROVIDER_OFFICIALNAME = "officialname"; - private final static String CCONTENTPROVIDER_ENABLED = "enabled"; - private final static String CCONTENTPROVIDERENABLED_DEFAULT = "true"; - private final static String CCONTENTPROVIDER_SELCRITERIA = "selcriteria"; + public final static String CCONTENTPROVIDER_NAME = "name"; + public final static String CCONTENTPROVIDER_OFFICIALNAME = "officialname"; + public final static String CCONTENTPROVIDER_ENABLED = "enabled"; + public final static String CCONTENTPROVIDERENABLED_DEFAULT = "true"; + public final static String CCONTENTPROVIDER_SELCRITERIA = "selcriteria"; // community zenodo community - private final static String CZENODOCOMMUNITY_ID = "zenodoid"; + public final static String CZENODOCOMMUNITY_ID = "zenodoid"; // community organization - private final static String CORGANIZATION_NAME = "name"; - private final static String CORGANIZATION_LOGOURL = "logourl"; - private final static String CORGANIZATION_WEBSITEURL = "websiteurl"; + public final static String CORGANIZATION_NAME = "name"; + public final static String CORGANIZATION_LOGOURL = "logourl"; + public final static String CORGANIZATION_WEBSITEURL = "websiteurl"; @Autowired private DbOrganizationRepository dbOrganizationRepository; diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/utils/CommunityMappingUtils.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/utils/CommunityMappingUtils.java index 78bec420..376d17cc 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/utils/CommunityMappingUtils.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/community/utils/CommunityMappingUtils.java @@ -15,6 +15,7 @@ import org.apache.commons.logging.LogFactory; import com.google.common.collect.Lists; +import eu.dnetlib.openaire.community.importer.CommunityImporterService; import eu.dnetlib.openaire.community.model.DbCommunity; import eu.dnetlib.openaire.community.model.DbDatasource; import eu.dnetlib.openaire.community.model.DbProject; @@ -27,6 +28,7 @@ import eu.dnetlib.openaire.exporter.model.community.CommunityProject; import eu.dnetlib.openaire.exporter.model.community.CommunitySummary; import eu.dnetlib.openaire.exporter.model.community.CommunityWritableProperties; import eu.dnetlib.openaire.exporter.model.community.SubCommunity; +import eu.dnetlib.openaire.exporter.model.context.IISConfigurationEntry; public class CommunityMappingUtils { @@ -252,4 +254,32 @@ public class CommunityMappingUtils { return list != null ? list.toArray(new String[list.size()]) : new String[0]; } + public static IISConfigurationEntry asIISConfigurationEntry(final DbCommunity c) { + final IISConfigurationEntry conf = new IISConfigurationEntry(); + conf.setId(c.getId()); + conf.setLabel(c.getName()); + conf.addParams(CommunityImporterService.CSUMMARY_DESCRIPTION, c.getDescription()); + conf.addParams(CommunityImporterService.CSUMMARY_LOGOURL, c.getLogoUrl()); + conf.addParams(CommunityImporterService.CSUMMARY_STATUS, c.getStatus().toString()); + conf.addParams(CommunityImporterService.CSUMMARY_NAME, c.getName()); + conf.addParams(CommunityImporterService.CSUMMARY_ZENODOC, c.getMainZenodoCommunity()); + conf.addParams(CommunityImporterService.CPROFILE_SUBJECT, c.getSubjects()); + conf.addParams(CommunityImporterService.CPROFILE_FOS, c.getFos()); + conf.addParams(CommunityImporterService.CPROFILE_SDG, c.getSdg()); + conf.addParams(CommunityImporterService.CPROFILE_ADVANCED_CONSTRAINT, c.getAdvancedConstraints() != null ? c.getAdvancedConstraints().toJson() : null); + conf.addParams(CommunityImporterService.CPROFILE_REMOVE_CONSTRAINT, c.getRemoveConstraints() != null ? c.getRemoveConstraints().toJson() : null); + conf.addParams(CommunityImporterService.CPROFILE_SUGGESTED_ACKNOWLEDGEMENT, c.getSuggestedAcknowledgements()); + conf.addParams(CommunityImporterService.CPROFILE_CREATIONDATE, c.getCreationDate() != null ? c.getCreationDate().toString() : null); + return conf; + } + + public static IISConfigurationEntry asIISConfigurationEntry(final DbSubCommunity subc) { + final IISConfigurationEntry conf = new IISConfigurationEntry(); + conf.setId(subc.getId()); + conf.setLabel(subc.getLabel()); + if (subc.getParams() != null) { + conf.getParams().addAll(subc.getParams()); + } + return conf; + } } diff --git a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/context/ContextApiController.java b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/context/ContextApiController.java index f3e2564d..761e9709 100644 --- a/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/context/ContextApiController.java +++ b/apps/dnet-exporter-api/src/main/java/eu/dnetlib/openaire/context/ContextApiController.java @@ -1,6 +1,5 @@ package eu.dnetlib.openaire.context; -import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.Set; @@ -109,19 +108,8 @@ public class ContextApiController extends AbstractDnetController { @ApiResponse(responseCode = "200", description = "OK"), @ApiResponse(responseCode = "500", description = "unexpected error") }) - public List getIISConfiguration( - @PathVariable final String contextId) throws CommunityException { - - try { - // TODO, see ticket https://support.openaire.eu/issues/9019 - // ritornare le informazioni solo dei context (root) e delle subCommunities - final List res = new ArrayList<>(); - - return res; - } catch (final Throwable e) { - log.error(e); - throw new CommunityException(e); - } + public List getIISConfiguration(@PathVariable final String contextId) throws CommunityException { + return communityService.getIISConfiguration(contextId); } @RequestMapping(value = "/context/category/{categoryId}", produces = { diff --git a/libs/dnet-exporter-model/src/main/java/eu/dnetlib/openaire/exporter/model/context/IISConfigurationEntry.java b/libs/dnet-exporter-model/src/main/java/eu/dnetlib/openaire/exporter/model/context/IISConfigurationEntry.java index 26c9f75c..64d712a0 100644 --- a/libs/dnet-exporter-model/src/main/java/eu/dnetlib/openaire/exporter/model/context/IISConfigurationEntry.java +++ b/libs/dnet-exporter-model/src/main/java/eu/dnetlib/openaire/exporter/model/context/IISConfigurationEntry.java @@ -4,13 +4,15 @@ import java.io.Serializable; import java.util.ArrayList; import java.util.List; +import org.apache.commons.lang3.StringUtils; + public class IISConfigurationEntry implements Serializable { private static final long serialVersionUID = -1470248262314248937L; private String id; private String label; - private List params = new ArrayList<>(); + private List params = new ArrayList<>(); public String getId() { return id; @@ -28,12 +30,22 @@ public class IISConfigurationEntry implements Serializable { this.label = label; } - public List getParams() { + public List getParams() { return params; } - public void setParams(final List params) { + public void setParams(final List params) { this.params = params; } + public void addParams(final String name, final String... values) { + if (StringUtils.isNoneBlank(name) && values != null) { + for (final String v : values) { + if (StringUtils.isNotBlank(v)) { + params.add(new Param().setName(name).setValue(v)); + } + } + } + } + }