diff --git a/apps/dnet-is-application/pom.xml b/apps/dnet-is-application/pom.xml index 2ff3ed49..1209a44e 100644 --- a/apps/dnet-is-application/pom.xml +++ b/apps/dnet-is-application/pom.xml @@ -4,7 +4,7 @@ eu.dnetlib.dhp apps - 3.2.9-SNAPSHOT + 3.3.3-SNAPSHOT ../ diff --git a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmAjaxController.java b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmAjaxController.java index 8375d84d..43ea3e9c 100644 --- a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmAjaxController.java +++ b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmAjaxController.java @@ -10,8 +10,8 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import eu.dnetlib.common.controller.AbstractDnetController; -import eu.dnetlib.data.openaire.dsm.model.Datasource; import eu.dnetlib.openaire.dsm.domain.BrowseTerm; +import eu.dnetlib.openaire.dsm.domain.SearchApisEntry; import eu.dnetlib.openaire.dsm.utils.DsmBrowsableFields; @RestController @@ -27,12 +27,12 @@ public class DsmAjaxController extends AbstractDnetController { } @GetMapping("/searchByField/{field}") - public List searchByField(@PathVariable final String field, @RequestParam final String value) { + public List searchByField(@PathVariable final String field, @RequestParam final String value) { return dsmService.searchByField(DsmBrowsableFields.valueOf(field), value); } @GetMapping("/search") - public List search(@RequestParam final String value) { + public List search(@RequestParam final String value) { return dsmService.search(value); } diff --git a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmService.java b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmService.java index 1baabe02..e50333a7 100644 --- a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmService.java +++ b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/DsmService.java @@ -56,6 +56,7 @@ import eu.dnetlib.openaire.dsm.domain.RegisteredDatasourceInfo; import eu.dnetlib.openaire.dsm.domain.RequestFilter; import eu.dnetlib.openaire.dsm.domain.RequestSort; import eu.dnetlib.openaire.dsm.domain.RequestSortOrder; +import eu.dnetlib.openaire.dsm.domain.SearchApisEntry; import eu.dnetlib.openaire.dsm.domain.SimpleDatasourceInfo; import eu.dnetlib.openaire.dsm.domain.SimpleResponse; import eu.dnetlib.openaire.dsm.utils.DsmBrowsableFields; @@ -447,12 +448,11 @@ public class DsmService { return jdbcTemplate.query(f.browseSql, new BeanPropertyRowMapper<>(BrowseTerm.class)); } - public List searchByField(final DsmBrowsableFields valueOf, final String value) { - // TODO Auto-generated method stub - return null; + public List searchByField(final DsmBrowsableFields f, final String value) { + return jdbcTemplate.query(f.searchSql, new BeanPropertyRowMapper<>(SearchApisEntry.class), value); } - public List search(final String value) { + public List search(final String value) { // TODO Auto-generated method stub return null; } diff --git a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/domain/SearchApisEntry.java b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/domain/SearchApisEntry.java new file mode 100644 index 00000000..a7e3adeb --- /dev/null +++ b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/domain/SearchApisEntry.java @@ -0,0 +1,154 @@ +package eu.dnetlib.openaire.dsm.domain; + +public class SearchApisEntry implements Comparable { + + private String id; + private String protocol; + private String compliance; + private Boolean active; + private String type; + private String aggrDate; + private Long aggrTotal; + private String dsId; + private String dsName; + private String websiteUrl; + private String dsOtherName; + private String organization; + private String country; + private String nsprefix; + private Boolean consenttermsofuse; + private Boolean fulltextdownload; + + public String getId() { + return id; + } + + public void setId(final String id) { + this.id = id; + } + + public String getProtocol() { + return protocol; + } + + public void setProtocol(final String protocol) { + this.protocol = protocol; + } + + public String getCompliance() { + return compliance; + } + + public void setCompliance(final String compliance) { + this.compliance = compliance; + } + + public Boolean getActive() { + return active; + } + + public void setActive(final Boolean active) { + this.active = active; + } + + public String getType() { + return type; + } + + public void setType(final String type) { + this.type = type; + } + + public String getAggrDate() { + return aggrDate; + } + + public void setAggrDate(final String aggrDate) { + this.aggrDate = aggrDate; + } + + public Long getAggrTotal() { + return aggrTotal; + } + + public void setAggrTotal(final Long aggrTotal) { + this.aggrTotal = aggrTotal; + } + + public String getDsId() { + return dsId; + } + + public void setDsId(final String dsId) { + this.dsId = dsId; + } + + public String getDsName() { + return dsName; + } + + public void setDsName(final String dsName) { + this.dsName = dsName; + } + + public String getWebsiteUrl() { + return websiteUrl; + } + + public void setWebsiteUrl(final String websiteUrl) { + this.websiteUrl = websiteUrl; + } + + public String getDsOtherName() { + return dsOtherName; + } + + public void setDsOtherName(final String dsOtherName) { + this.dsOtherName = dsOtherName; + } + + public String getOrganization() { + return organization; + } + + public void setOrganization(final String organization) { + this.organization = organization; + } + + public String getCountry() { + return country; + } + + public void setCountry(final String country) { + this.country = country; + } + + public String getNsprefix() { + return nsprefix; + } + + public void setNsprefix(final String nsprefix) { + this.nsprefix = nsprefix; + } + + public Boolean getConsenttermsofuse() { + return consenttermsofuse; + } + + public void setConsenttermsofuse(final Boolean consenttermsofuse) { + this.consenttermsofuse = consenttermsofuse; + } + + public Boolean getFulltextdownload() { + return fulltextdownload; + } + + public void setFulltextdownload(final Boolean fulltextdownload) { + this.fulltextdownload = fulltextdownload; + } + + @Override + public int compareTo(final SearchApisEntry o) { + return compliance.compareTo(o.getCompliance()); + } +} diff --git a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/utils/DsmBrowsableFields.java b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/utils/DsmBrowsableFields.java index e38bb35d..28d429ac 100644 --- a/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/utils/DsmBrowsableFields.java +++ b/apps/dnet-is-application/src/main/java/eu/dnetlib/openaire/dsm/utils/DsmBrowsableFields.java @@ -7,23 +7,24 @@ import org.apache.commons.io.IOUtils; public enum DsmBrowsableFields { - type("Datasource typologies", "browseType.sql", "searchByType.sql"), - country("Countries", "browseCountry.sql", "searchByCountry.sql"), - compliance("Compatibility levels", "browseCompliance.sql", "searchByCompliance.sql"), - protocol("API protocols", "browseProtocol.sql", "searchByProtocol.sql"), - active("API activation", "browseActive.sql", "searchByActive.sql"), - consenttermsofuse("Consent terms of use", "browseConsentTermOfUse.sql", "searchByConsentTermOfUse.sql"), - fulltextdownload("Fulltext download", "browseFulltextDownload.sql", "searchByFulltextDownload.sql"); + type("Datasource typologies", "browseType.sql"), + country("Countries", "browseCountry.sql"), + compliance("Compatibility levels", "browseCompliance.sql"), + protocol("API protocols", "browseProtocol.sql"), + active("API activation", "browseActive.sql"), + consenttermsofuse("Consent terms of use", "browseConsentTermOfUse.sql"), + fulltextdownload("Fulltext download", "browseFulltextDownload.sql"); public final String desc; public final String browseSql; public final String searchSql; - private DsmBrowsableFields(final String desc, final String browseSqlFile, final String searchSqlFile) { + private DsmBrowsableFields(final String desc, final String browseSqlFile) { this.desc = desc; try { this.browseSql = IOUtils.toString(getClass().getResourceAsStream("/sql/dsm/ui/" + browseSqlFile), StandardCharsets.UTF_8.name()); - this.searchSql = IOUtils.toString(getClass().getResourceAsStream("/sql/dsm/ui/" + searchSqlFile), StandardCharsets.UTF_8.name()); + this.searchSql = IOUtils.toString(getClass().getResourceAsStream("/sql/dsm/ui/searchApis.tmpl.sql"), StandardCharsets.UTF_8.name()) + .replaceAll("%condition%", this.name() + "::text = ?"); } catch (final IOException e) { throw new RuntimeException(e); } diff --git a/apps/dnet-is-application/src/main/resources/application.properties b/apps/dnet-is-application/src/main/resources/application.properties index b104947f..1b27836f 100644 --- a/apps/dnet-is-application/src/main/resources/application.properties +++ b/apps/dnet-is-application/src/main/resources/application.properties @@ -1,5 +1,8 @@ server.port=8280 +server.public_url = +server.public_desc = API Base URL + spring.profiles.active=dev maven.pom.path = /META-INF/maven/eu.dnetlib.dhp/dnet-is-application/effective-pom.xml diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseActive.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseActive.sql index 35c4746b..ea462cf0 100644 --- a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseActive.sql +++ b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseActive.sql @@ -1,5 +1,5 @@ select - a.active as term, + a.active::text as term, case when a.active is null then 'UNKNOWN' when a.active then 'active' else 'not active' end as name, count(*) as total from dsm_api a diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseConsentTermOfUse.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseConsentTermOfUse.sql index 44ee464a..c331aca7 100644 --- a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseConsentTermOfUse.sql +++ b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseConsentTermOfUse.sql @@ -1,5 +1,5 @@ select - d.consenttermsofuse as term, + d.consenttermsofuse::text as term, case when d.consenttermsofuse is null then 'UNKNOWN' when d.consenttermsofuse then 'YES' else 'NO' end as name, count(*) as total from diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseFulltextDownload.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseFulltextDownload.sql index 59485269..b33dab58 100644 --- a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseFulltextDownload.sql +++ b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/browseFulltextDownload.sql @@ -1,5 +1,5 @@ select - d.fulltextdownload as term, + d.fulltextdownload::text as term, case when d.fulltextdownload is null then 'UNKNOWN' when d.fulltextdownload then 'Available' else 'Not available' end as name, count(*) as total from diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchApis.tmpl.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchApis.tmpl.sql new file mode 100644 index 00000000..51b9372c --- /dev/null +++ b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchApis.tmpl.sql @@ -0,0 +1,40 @@ +SELECT * FROM (SELECT + a.id AS "id", + a.protocol AS "protocol", + coalesce(a.compatibility_override, a.compatibility) AS "compliance", + a.active AS "active", + ds.eosc_datasource_type AS "type", + coalesce(a.last_aggregation_date::text, a.last_download_date::text, '') AS "aggrDate", + coalesce(a.last_aggregation_total, a.last_download_total, 0) AS "aggrTotal", + ds.id AS "dsId", + ds.officialname AS "dsName", + ds.englishname AS "dsOtherName", + ds.namespaceprefix AS "nsprefix", + ds.websiteurl AS "websiteUrl", + coalesce((array_agg(o.country))[1], '-') AS "country", + (array_agg(o.legalname))[1] AS "organization", + ds.consenttermsofuse AS "consenttermsofuse", + ds.fulltextdownload AS "fulltextdownload" +FROM dsm_api a + LEFT OUTER JOIN dsm_services ds ON (a.service = ds.id) + LEFT OUTER JOIN dsm_service_organization dsorg ON (ds.id = dsorg.service) + LEFT OUTER JOIN dsm_organizations o ON (dsorg.organization = o.id) +WHERE ds.dedup_main_service = true +GROUP BY + a.id, + a.protocol, + a.compatibility_override, + a.compatibility, + a.active, + a.last_aggregation_date, + a.last_download_date, + a.last_aggregation_total, + a.last_download_total, + ds.id, + ds.officialname, + ds.namespaceprefix, + ds.websiteurl, + ds.consenttermsofuse, + ds.fulltextdownload, + eosc_datasource_type +) AS t WHERE %condition%; diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByActive.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByActive.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByCompliance.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByCompliance.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByConsentTermOfUse.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByConsentTermOfUse.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByCountry.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByCountry.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByFulltextDownload.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByFulltextDownload.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByProtocol.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByProtocol.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByType.sql b/apps/dnet-is-application/src/main/resources/sql/dsm/ui/searchByType.sql deleted file mode 100644 index e69de29b..00000000 diff --git a/apps/dnet-is-application/src/main/resources/templates/resultsDsApi.html b/apps/dnet-is-application/src/main/resources/templates/resultsDsApi.html index 51bb6578..0f9abb0c 100644 --- a/apps/dnet-is-application/src/main/resources/templates/resultsDsApi.html +++ b/apps/dnet-is-application/src/main/resources/templates/resultsDsApi.html @@ -17,13 +17,65 @@
- {{results}} + + + +

+ +

+

+ Number of APIs: {{(results | filter:apiFilter).length}} +

+ +
+
+
{{r.dsName}} + {{r.protocol}} + {{r.compliance}} +
{{r.dsOtherName}}
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Datasource Id{{r.dsId}}
API Id{{r.id}}
Namespace Prefix{{r.nsprefix}}
Organization{{r.organization}}
URL{{r.websiteUrl}}
Type{{r.type}}
Statusactivenot active
Consent Terms of UseYES
Fulltext DownloadYES
+
+ +
- +