Project

General

Profile

« Previous | Next » 

Revision 62954

Added by Michele Artini 11 months ago

[maven-release-plugin] copy for tag dnet-openaire-datasource-manager-2.1.0

View differences:

modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/isDefinedParam.sql
1
SELECT * FROM dsm_apiparams WHERE api = :apiId AND lower(param) = lower(:param)
2

  
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/applicationContext-dnet-openaire-datasource-manager.properties
1
dnet.openaire.db.url      = jdbc:postgresql://localhost:5432/dnet_openaire
2
dnet.openaire.db.username = dnet
3
dnet.openaire.db.password =
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/java/eu/dnetlib/enabling/datasources/DatasourceManagerClients.java
1
package eu.dnetlib.enabling.datasources;
2

  
3
import java.text.ParseException;
4
import java.util.Date;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.stream.Collectors;
8

  
9
import org.apache.commons.io.IOUtils;
10
import org.apache.commons.logging.Log;
11
import org.apache.commons.logging.LogFactory;
12
import org.quartz.CronExpression;
13
import org.springframework.beans.factory.annotation.Autowired;
14
import org.springframework.beans.factory.annotation.Required;
15
import org.springframework.core.io.ClassPathResource;
16
import org.springframework.core.io.Resource;
17
import org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate;
18
import org.springframework.transaction.annotation.Transactional;
19

  
20
import com.google.common.collect.ImmutableMap;
21

  
22
import eu.dnetlib.enabling.datasources.common.Api;
23
import eu.dnetlib.enabling.datasources.common.ApiParam;
24
import eu.dnetlib.enabling.datasources.common.Datasource;
25
import eu.dnetlib.enabling.datasources.common.DsmException;
26
import eu.dnetlib.enabling.datasources.common.Identity;
27
import eu.dnetlib.enabling.datasources.common.Organization;
28
import eu.dnetlib.enabling.datasources.common.PidSystem;
29
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpDocumentNotFoundException;
30
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpException;
31
import eu.dnetlib.enabling.is.lookup.rmi.ISLookUpService;
32
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
33

  
34
public class DatasourceManagerClients {
35

  
36
	private static final Log log = LogFactory.getLog(DatasourceManagerClients.class);
37

  
38
	private static final Resource dsQuery = new ClassPathResource(LocalOpenaireDatasourceManagerImpl.QUERY_BASEDIR + "getDatasource.sql");
39
	private static final Resource dsQueryByPrefix = new ClassPathResource(LocalOpenaireDatasourceManagerImpl.QUERY_BASEDIR + "getDatasourceByPrefix.sql");
40
	private static final Resource dsIdentitiesQuery = new ClassPathResource(LocalOpenaireDatasourceManagerImpl.QUERY_BASEDIR + "dsIdentitiesQuery.sql");
41
	private static final Resource dsOrganizationsQuery = new ClassPathResource(LocalOpenaireDatasourceManagerImpl.QUERY_BASEDIR + "dsOrganizationsQuery.sql");
42
	private static final Resource listApisByDsId = new ClassPathResource(LocalOpenaireDatasourceManagerImpl.QUERY_BASEDIR + "listApisByDsId.sql");
43
	private static final Resource isDefinedParamQuery = new ClassPathResource(LocalOpenaireDatasourceManagerImpl.QUERY_BASEDIR + "isDefinedParam.sql");
44

  
45
	private NamedParameterJdbcTemplate jdbcTemplate;
46

  
47
	@Autowired
48
	private UniqueServiceLocator serviceLocator;
49

  
50
	@Transactional(readOnly = true)
51
	public List<Map<String, Object>> searchSQL(final String sql, final Map<String, Object> sqlParams) throws DsmException {
52
		try {
53
			log.debug("Executing SQL: " + sql);
54
			return jdbcTemplate.queryForList(sql, sqlParams);
55
		} catch (final Exception e) {
56
			log.error("Error executing sql", e);
57

  
58
			throw new DsmException(-1, "Error obtaining datasources from db", e);
59
		}
60
	}
61

  
62
	@Transactional(readOnly = true)
63
	public List<Map<String, Object>> searchSQL(final Resource sqlResource, final Map<String, Object> sqlParams) throws DsmException {
64
		try {
65
			return searchSQL(IOUtils.toString(sqlResource.getInputStream()), sqlParams);
66
		} catch (final Exception e) {
67
			log.error("Error executing sql", e);
68
			throw new DsmException(-1, "Error obtaining datasources from db", e);
69
		}
70
	}
71

  
72
	@Transactional
73
	public void updateSQL(final String dsId, final String sql, final Map<String, Object> sqlparams)
74
		throws DsmException {
75
		log.debug("Executing query SQL: " + sql);
76

  
77
		jdbcTemplate.update(sql, sqlparams);
78
	}
79

  
80
	@Transactional
81
	public void updateSQL(final String dsId, final Resource sqlResource, final Map<String, Object> sqlparams)
82
		throws DsmException {
83
		try {
84
			updateSQL(dsId, IOUtils.toString(sqlResource.getInputStream()), sqlparams);
85
		} catch (final Exception e) {
86
			log.error("Error in updateSQL", e);
87
			throw new DsmException(-1, "Error in updateSQL", e);
88
		}
89
	}
90

  
91
	@Transactional(readOnly = true)
92
	public Datasource<Organization<?>, Identity, PidSystem> getDatasourceById(final String id) throws DsmException {
93
		final List<Map<String, Object>> list = searchSQL(dsQuery, ImmutableMap.of("dsId", id));
94

  
95
		if (list.size() != 1) { throw new DsmException("Invalid number of ds with id: " + id); }
96

  
97
		final Datasource<Organization<?>, Identity, PidSystem> ds = DatasourceFunctions.mapToDatasource(list.get(0));
98
		ds.setIdentities(searchSQL(dsIdentitiesQuery, ImmutableMap.of("dsId", id))
99
			.stream()
100
			.map(DatasourceFunctions::mapToDsIdentity)
101
			.collect(Collectors.toSet()));
102
		ds.setOrganizations(searchSQL(dsOrganizationsQuery, ImmutableMap.of("dsId", id))
103
			.stream()
104
			.map(DatasourceFunctions::mapToDsOrganization)
105
			.collect(Collectors.toSet()));
106

  
107
		return ds;
108
	}
109

  
110
	public Datasource<Organization<?>, Identity, PidSystem> getDatasourceByPrefix(final String prefix) throws DsmException {
111
		final List<Map<String, Object>> list = searchSQL(dsQueryByPrefix, ImmutableMap.of("prefix", prefix));
112

  
113
		if (list.size() != 1) { throw new DsmException("Invalid number of ds with prefix: " + prefix); }
114

  
115
		final Datasource<Organization<?>, Identity, PidSystem> ds = DatasourceFunctions.mapToDatasource(list.get(0));
116
		ds.setIdentities(searchSQL(dsIdentitiesQuery, ImmutableMap.of("dsId", ds.getId()))
117
			.stream()
118
			.map(DatasourceFunctions::mapToDsIdentity)
119
			.collect(Collectors.toSet()));
120
		ds.setOrganizations(searchSQL(dsOrganizationsQuery, ImmutableMap.of("dsId", ds.getId()))
121
			.stream()
122
			.map(DatasourceFunctions::mapToDsOrganization)
123
			.collect(Collectors.toSet()));
124

  
125
		return ds;
126
	}
127

  
128
	@Transactional(readOnly = true)
129
	public List<Api<ApiParam>> getApis(final String dsId) throws DsmException {
130

  
131
		return searchSQL(listApisByDsId, ImmutableMap.of("dsId", dsId))
132
			.stream()
133
			.map(DatasourceFunctions::mapToApi)
134
			.collect(Collectors.toList());
135
	}
136

  
137
	@Transactional(readOnly = true)
138
	public boolean isDefinedParam(final String apiId, final String param) throws DsmException {
139
		return !searchSQL(isDefinedParamQuery, ImmutableMap.of("apiId", apiId, "param", param)).isEmpty();
140
	}
141

  
142
	public Date findNextScheduledExecution(final String dsId, final String ifaceId) throws DsmException {
143
		final String xquery = "/*[.//DATAPROVIDER/@interface='" + ifaceId + "' and .//SCHEDULING/@enabled='true']//CRON/text()";
144
		try {
145
			final String cronExpression = serviceLocator.getService(ISLookUpService.class).getResourceProfileByQuery(xquery);
146
			final CronExpression cron = new CronExpression(cronExpression);
147
			return cron.getNextValidTimeAfter(new Date());
148
		} catch (final ISLookUpDocumentNotFoundException e) {
149
			// When the value is not found a null value must be returned
150
			return null;
151
		} catch (final ISLookUpException e) {
152
			log.error("Error in xquery: " + xquery, e);
153
			throw new DsmException(-1, "Error in xquery: " + xquery, e);
154
		} catch (final ParseException e) {
155
			log.error("Error parsing cron expression", e);
156
			throw new DsmException(-1, "Error parsing cron expression", e);
157
		}
158
	}
159

  
160
	public NamedParameterJdbcTemplate getJdbcTemplate() {
161
		return jdbcTemplate;
162
	}
163

  
164
	@Required
165
	public void setJdbcTemplate(final NamedParameterJdbcTemplate jdbcTemplate) {
166
		this.jdbcTemplate = jdbcTemplate;
167
	}
168

  
169
}
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/pom.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
3
	<parent>
4
		<groupId>eu.dnetlib</groupId>
5
		<artifactId>dnet45-parent</artifactId>
6
		<version>1.0.0</version>
7
  	</parent>
8
	<modelVersion>4.0.0</modelVersion>
9
	<groupId>eu.dnetlib</groupId>
10
	<artifactId>dnet-openaire-datasource-manager</artifactId>
11
	<packaging>jar</packaging>
12
	<version>2.1.0</version>
13
	<scm>
14
		<developerConnection>scm:svn:https://svn.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0</developerConnection>
15
	</scm>
16
	<dependencies>
17
		<dependency>
18
			<groupId>eu.dnetlib</groupId>
19
			<artifactId>cnr-service-common</artifactId>
20
			<version>[2.1.0,3.0.0)</version>
21
		</dependency>
22
		<dependency>
23
			<groupId>eu.dnetlib</groupId>
24
			<artifactId>dnet-datasource-manager-common</artifactId>
25
			<version>[2.1.0,3.0.0)</version>
26
		</dependency>
27
		<dependency>
28
			<groupId>org.springframework</groupId>
29
			<artifactId>spring-tx</artifactId>
30
			<version>${spring.version}</version>
31
		</dependency>
32
		<dependency>
33
			<groupId>org.springframework</groupId>
34
			<artifactId>spring-jdbc</artifactId>
35
			<version>${spring.version}</version>
36
		</dependency>
37
		<dependency>
38
			<groupId>org.springframework</groupId>
39
			<artifactId>spring-context-support</artifactId>
40
			<version>${spring.version}</version>
41
		</dependency>
42
		<dependency>
43
  		    <groupId>junit</groupId>
44
            <artifactId>junit</artifactId>
45
            <version>${junit.version}</version>
46
            <scope>test</scope>
47
        </dependency>
48
	</dependencies>
49
</project>
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/searchApisNormal.sql
1
SELECT 
2
	a.id                                                                     AS "id",
3
	a.protocol                                                               AS "protocol",
4
	coalesce(a.compatibility_override, a.compatibility)                      AS "compliance",
5
	a.active                                                                 AS "active",
6
	a.baseurl                                                                AS "baseUrl",
7
	coalesce(a.last_aggregation_date::text, '')                              AS "aggrDate",
8
	coalesce(a.last_aggregation_total, 0)                                    AS "aggrTotal",
9
	coalesce(a.last_aggregation_mdid, '')                                    AS "aggrMdId",
10
	coalesce(a.last_collection_date::text, '')                               AS "collDate",
11
	coalesce(a.last_collection_total, 0)                                     AS "collTotal",
12
	coalesce(a.last_collection_mdid, '')                                     AS "collMdId",
13
	ds.id                                                                    AS "dsId",
14
	ds.officialname                                                          AS "name",
15
	ds.englishname                                                           AS "alternativeName",
16
	ds.namespaceprefix                                                       AS "prefix",
17
	ds.websiteurl                                                            AS "websiteUrl",
18
	coalesce((array_agg(o.country))[1], '-')                                 AS "country",
19
    (array_agg(o.legalname))[1]                                              AS "organization",
20
    ds.consenttermsofuse                                                     AS "consenttermsofuse",
21
    ds.fulltextdownload                                                      AS "fulltextdownload"
22
FROM dsm_api a
23
	LEFT OUTER JOIN dsm_services ds ON (a.service = ds.id)
24
	LEFT OUTER JOIN dsm_service_organization dsorg ON (ds.id = dsorg.service)
25
	LEFT OUTER JOIN dsm_organizations o ON (dsorg.organization = o.id)
26
WHERE
27
	ds.dedup_main_service = true AND (
28
		ds.id                 ILIKE :value 
29
		OR ds.officialname    ILIKE :value
30
		OR ds.englishname     ILIKE :value
31
		OR ds.namespaceprefix ILIKE :value
32
		OR ds.websiteurl      ILIKE :value
33
		OR a.baseurl          ILIKE :value
34
		OR o.legalname        ILIKE :value
35
	)
36
GROUP BY
37
	a.id,
38
	a.protocol,
39
	a.compatibility_override,
40
	a.compatibility,
41
	a.active,
42
	a.last_aggregation_date,
43
	a.last_download_date,
44
	a.last_collection_date,
45
	a.last_aggregation_total,
46
	a.last_download_total,
47
	a.last_collection_total,
48
	a.last_aggregation_mdid,
49
	a.last_download_objid,
50
	a.last_collection_mdid,
51
	ds.id,
52
	ds.officialname,
53
	ds.englishname,
54
	ds.namespaceprefix,
55
	ds.websiteurl,
56
    ds.consenttermsofuse,
57
    ds.fulltextdownload
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/searchApisUsingField.sql
1
SELECT * FROM (SELECT 
2
	a.id                                                                     AS "id",
3
	a.protocol                                                               AS "protocol",
4
	coalesce(a.compatibility_override, a.compatibility)                      AS "compliance",
5
	a.active                                                                 AS "active",
6
	a.baseurl                                                                AS "baseUrl",
7
	ds.eosc_datasource_type                                                  AS "type",
8
	coalesce(a.last_aggregation_date::text, '')                              AS "aggrDate",
9
	coalesce(a.last_aggregation_total, 0)                                    AS "aggrTotal",
10
	coalesce(a.last_aggregation_mdid, '')                                    AS "aggrMdId",
11
	coalesce(a.last_collection_date::text, '')                               AS "collDate",
12
	coalesce(a.last_collection_total, 0)                                     AS "collTotal",
13
	coalesce(a.last_collection_mdid, '')                                     AS "collMdId",
14
	ds.id                                                                    AS "dsId",
15
	ds.officialname                                                          AS "name",
16
	ds.englishname                                                           AS "alternativeName",
17
	ds.namespaceprefix                                                       AS "prefix",
18
	ds.websiteurl                                                            AS "websiteUrl",
19
	coalesce((array_agg(o.country))[1], '-')                                 AS "country",
20
    (array_agg(o.legalname))[1]                                              AS "organization",
21
    ds.consenttermsofuse                                                     AS "consenttermsofuse",
22
    ds.fulltextdownload                                                      AS "fulltextdownload"
23
FROM dsm_api a
24
	LEFT OUTER JOIN dsm_services ds ON (a.service = ds.id)
25
	LEFT OUTER JOIN dsm_service_organization dsorg ON (ds.id = dsorg.service)
26
	LEFT OUTER JOIN dsm_organizations o ON (dsorg.organization = o.id)
27
WHERE ds.dedup_main_service = true
28
GROUP BY
29
	a.id,
30
	a.protocol,
31
	a.compatibility_override,
32
	a.compatibility,
33
	a.active,
34
	a.last_aggregation_date,
35
	a.last_download_date,
36
	a.last_collection_date,
37
	a.last_aggregation_total,
38
	a.last_download_total,
39
	a.last_collection_total,
40
	a.last_aggregation_mdid,
41
	a.last_download_objid,
42
	a.last_collection_mdid,
43
	ds.id,
44
	ds.officialname,
45
	ds.englishname,
46
	ds.namespaceprefix,
47
	ds.websiteurl,
48
	ds.consenttermsofuse,
49
    ds.fulltextdownload,
50
    eosc_datasource_type
51
) AS t WHERE
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setLastCollectionInfo.sql
1
UPDATE dsm_api
2
SET (last_collection_mdid, last_collection_total, last_collection_date) = (:mdId, :total, :date)
3
WHERE id = :apiId AND service = :dsId;
4

  
5
UPDATE dsm_api
6
SET first_collection_date = :date
7
WHERE id = :apiId AND service = :dsId AND first_collection_date IS NULL;
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/dsOrganizationsQuery.sql
1
SELECT
2
	org.id               AS id,
3
	org.legalshortname   AS legalshortname,
4
	org.legalname        AS legalname,
5
	org.websiteurl       AS websiteurl,
6
	org.logourl          AS logourl,
7
	org.country          AS country,
8
	org.collectedfrom    AS collectedfrom,
9
	org.dateofcollection AS dateofcollection,
10
	org.provenanceaction AS provenanceaction
11
FROM
12
	dsm_organizations org
13
	LEFT OUTER JOIN dsm_service_organization dso ON (org.id = dso.organization)
14
WHERE 
15
	dso.service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/addDatasource.sql
1
INSERT INTO dsm_services(
2
	id,
3
	officialname,
4
	englishname,
5
	websiteurl,
6
	logourl,
7
	contactemail,
8
	latitude,
9
	longitude,
10
	timezone,
11
	namespaceprefix,
12
	languages,--array
13
	collectedfrom,
14
	dateofvalidation,
15
	provenanceaction,
16
	platform,
17
	activationid,
18
	description,
19
	releasestartdate,
20
	releaseenddate,
21
	missionstatementurl,
22
	databaseaccesstype,
23
	datauploadtype,
24
	databaseaccessrestriction,
25
	datauploadrestriction,
26
	citationguidelineurl,
27
	certificates,
28
	aggregator,
29
	issn,
30
	eissn,
31
	lissn,
32
	registeredby,
33
	subjects,--array
34
	managed,
35
	eosc_datasource_type,
36
	eosc_type
37
) VALUES (
38
	:id,
39
	:officialname,
40
	:englishname,
41
	:websiteurl,
42
	:logourl,
43
	:contactemail,
44
	:latitude,
45
	:longitude,
46
	:timezone,
47
	:namespaceprefix,
48
	:languages,--array
49
	:collectedfrom,
50
	:dateofvalidation,
51
	:provenanceaction,
52
	:platform,
53
	:activationid,
54
	:description,
55
	:releasestartdate,
56
	:releaseenddate,
57
	:missionstatementurl,
58
	:databaseaccesstype,
59
	:datauploadtype,
60
	:databaseaccessrestriction,
61
	:datauploadrestriction,
62
	:citationguidelineurl,
63
	:certificates,
64
	:aggregator,
65
	:issn,
66
	:eissn,
67
	:lissn,
68
	:registeredby,
69
	:subjects,--array
70
	:managed,
71
	:eoscdatasourcetype,
72
	:eosctype
73
)
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/addOrganization.sql
1
BEGIN;
2

  
3
INSERT INTO dsm_organizations(
4
	id, 
5
	legalshortname, 
6
	legalname, 
7
	websiteurl,
8
	logourl,
9
	country,
10
	collectedfrom
11
) VALUES (
12
	:orgId, 
13
	:legalshortname, 
14
	:legalname, 
15
	:websiteurl,
16
	:logourl,
17
	:country,
18
	:collectedfrom
19
);
20

  
21
INSERT INTO dsm_service_organization(
22
	service, 
23
	organization
24
) VALUES (
25
	:dsId,
26
	:orgId
27
);
28

  
29
COMMIT;
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/deleteDatasource.sql
1
BEGIN;
2
DELETE FROM dsm_apiparams USING dsm_api WHERE api = dsm_api.id AND api.service = :dsId;
3
DELETE FROM api WHERE service = :dsId;
4
DELETE FROM dsm_service_organization WHERE service = :dsId;
5
DELETE FROM dsm_servicepids WHERE service = :dsId;
6
DELETE FROM dsm_services WHERE id = :dsId;
7
COMMIT;
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/dsIdentitiesQuery.sql
1
 SELECT
2
 	id.pid,
3
 	id.issuertype 
4
 FROM
5
 	dsm_identities id 
6
	LEFT OUTER JOIN dsm_servicepids dp ON (id.pid = dp.pid)
7
WHERE
8
	dp.service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/getDatasource.sql
1
SELECT
2
	ds.id                        AS "id",
3
	ds.officialname              AS "officialname",
4
	ds.englishname               AS "englishname",
5
	ds.websiteurl                AS "websiteurl",
6
	ds.logourl                   AS "logourl",
7
	ds.contactemail              AS "contactemail",
8
	ds.latitude                  AS "latitude",
9
	ds.longitude                 AS "longitude",
10
	ds.timezone                  AS "timezone",
11
	ds.namespaceprefix           AS "namespaceprefix",
12
	ds.languages                 AS "languages",
13
	ds.collectedfrom             AS "collectedfrom",
14
	ds.dateofvalidation          AS "dateofvalidation",
15
	ds.provenanceaction          AS "provenanceaction",
16
	ds.dateofcollection          AS "dateofcollection",
17
	ds.platform                  AS "platform",
18
	ds.activationid              AS "activationId",
19
	ds.description               AS "description",
20
	ds.releasestartdate          AS "releasestartdate",
21
	ds.releaseenddate            AS "releaseenddate",
22
	ds.missionstatementurl       AS "missionstatementurl",
23
	ds.databaseaccesstype        AS "databaseaccesstype",
24
	ds.datauploadtype            AS "datauploadtype",
25
	ds.databaseaccessrestriction AS "databaseaccessrestriction",
26
	ds.datauploadrestriction     AS "datauploadrestriction",
27
	ds.citationguidelineurl      AS "citationguidelineurl",
28
	ds.certificates              AS "certificates",
29
	ds.aggregator                AS "aggregator",
30
	ds.issn                      AS "issn",
31
	ds.eissn                     AS "eissn",
32
	ds.lissn                     AS "lissn",
33
	ds.registeredby              AS "registeredby",
34
	ds.subjects                  AS "subjects",
35
	ds.managed                   AS "managed",
36
	ds.consenttermsofuse         AS "consenttermsofuse",
37
	ds.consenttermsofusedate     AS "consenttermsofusedate",
38
	ds.fulltextdownload          AS "fulltextdownload",
39
	ds.eosc_datasource_type      AS "eosc_datasource_type",
40
	ds.status                    AS "status"
41
FROM
42
	dsm_services ds
43
WHERE
44
	ds.id = :dsId 
45
	AND eosc_datasource_type IS NOT NULL
46
	AND dedup_main_service = true
47

  
48
	
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/getDatasourceByPrefix.sql
1
SELECT
2
	ds.id                        AS "id",
3
	ds.officialname              AS "officialname",
4
	ds.englishname               AS "englishname",
5
	ds.websiteurl                AS "websiteurl",
6
	ds.logourl                   AS "logourl",
7
	ds.contactemail              AS "contactemail",
8
	ds.latitude                  AS "latitude",
9
	ds.longitude                 AS "longitude",
10
	ds.timezone                  AS "timezone",
11
	ds.namespaceprefix           AS "namespaceprefix",
12
	ds.languages                 AS "languages",
13
	ds.collectedfrom             AS "collectedfrom",
14
	ds.dateofvalidation          AS "dateofvalidation",
15
	ds.provenanceaction          AS "provenanceaction",
16
	ds.dateofcollection          AS "dateofcollection",
17
	ds.platform                  AS "platform",
18
	ds.activationid              AS "activationId",
19
	ds.description               AS "description",
20
	ds.releasestartdate          AS "releasestartdate",
21
	ds.releaseenddate            AS "releaseenddate",
22
	ds.missionstatementurl       AS "missionstatementurl",
23
	ds.databaseaccesstype        AS "databaseaccesstype",
24
	ds.datauploadtype            AS "datauploadtype",
25
	ds.databaseaccessrestriction AS "databaseaccessrestriction",
26
	ds.datauploadrestriction     AS "datauploadrestriction",
27
	ds.citationguidelineurl      AS "citationguidelineurl",
28
	ds.certificates              AS "certificates",
29
	ds.aggregator                AS "aggregator",
30
	ds.issn                      AS "issn",
31
	ds.eissn                     AS "eissn",
32
	ds.lissn                     AS "lissn",
33
	ds.registeredby              AS "registeredby",
34
	ds.subjects                  AS "subjects",
35
	ds.managed                   AS "managed",
36
	ds.consenttermsofuse         AS "consenttermsofuse",
37
	ds.consenttermsofusedate     AS "consenttermsofusedate",
38
	ds.fulltextdownload          AS "fulltextdownload",
39
	ds.eosc_datasource_type      AS "eosc_datasource_type",
40
	ds.status                    AS "status"
41
FROM
42
	dsm_services ds
43
WHERE
44
	ds.namespaceprefix = :prefix
45
	AND eosc_datasource_type IS NOT NULL
46
	AND dedup_main_service = true
47
	
48

  
49
	
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/insertApi.sql
1
INSERT INTO dsm_api(
2
	id,
3
	protocol, 
4
	baseurl,
5
	service,
6
	contentdescription,
7
	compatibility,
8
	metadata_identifier_path,
9
	removable
10
) VALUES (
11
	:apiId,
12
	:protocol, 
13
	:baseUrl,
14
	:dsId,
15
	:contentDescription,
16
	:compatibility,
17
	:metadataIdentifierPath,
18
	:removable
19
)
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/listApisByDsId.sql
1
SELECT
2
	a.id                                                AS "id",
3
	a.protocol                                          AS "protocol",
4
	a.baseurl                                           AS "baseUrl",
5
	a.service                                           AS "datasource",
6
	a.contentdescription                                AS "contentdescription",
7
	a.active                                            AS "active",
8
	a.removable                                         AS "removable",
9
	coalesce(a.compatibility_override, a.compatibility) AS "compatibility",
10
	a.compatibility_override IS NOT null                AS "isCompatibilityOverrided",
11
	a.metadata_identifier_path                          AS "metadataIdentifierPath",
12
	a.last_collection_total                             AS "lastCollectionTotal",
13
	a.last_collection_date                              AS "lastCollectionDate",
14
	a.last_collection_mdid                              AS "lastCollectionMdid",
15
	a.last_aggregation_total                            AS "lastAggregationTotal",
16
	a.last_aggregation_date                             AS "lastAggregationDate",
17
	a.last_aggregation_mdid                             AS "lastAggregationMdid",
18
	a.last_download_total                               AS "lastDownloadTotal",
19
	a.last_download_date                                AS "lastDownloadDate",
20
	a.last_download_objid                               AS "lastDownloadObjid",
21
	a.last_validation_job                               AS "lastValidationJob",
22
	array_agg(p.param || '=' || p.value)                AS "params"
23
FROM 
24
	dsm_api a
25
	LEFT OUTER JOIN dsm_apiparams p on (a.id = p.api)
26
WHERE
27
	a.service = :dsId
28
GROUP BY
29
	a.id,
30
	a.protocol,
31
	a.baseurl,
32
	a.service,
33
	a.contentdescription,
34
	a.active,
35
	a.removable,
36
	a.compatibility_override,
37
	a.compatibility,
38
	a.metadata_identifier_path,
39
	a.last_collection_total,
40
	a.last_collection_date,
41
	a.last_collection_mdid,
42
	a.last_aggregation_total,
43
	a.last_aggregation_date,
44
	a.last_aggregation_mdid,
45
	a.last_download_total,
46
	a.last_download_date,
47
	a.last_download_objid,
48
	a.last_validation_job
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/db_fixes/script.sql
1
alter table dsm_api add column compatibility_override text default NULL;
2

  
3
update dsm_api set removable = true where id in (select api.id from dsm_api api left join dsm_services d on d.id = api.service where d.managed = true and api.removable=false);
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/java/eu/dnetlib/enabling/datasources/LocalOpenaireDatasourceManagerImpl.java
1
package eu.dnetlib.enabling.datasources;
2

  
3
import java.io.StringWriter;
4
import java.util.ArrayList;
5
import java.util.Date;
6
import java.util.HashMap;
7
import java.util.HashSet;
8
import java.util.List;
9
import java.util.Map;
10
import java.util.Optional;
11
import java.util.Set;
12
import java.util.stream.Collectors;
13

  
14
import org.apache.commons.io.IOUtils;
15
import org.apache.commons.lang3.StringUtils;
16
import org.apache.commons.lang3.math.NumberUtils;
17
import org.apache.commons.logging.Log;
18
import org.apache.commons.logging.LogFactory;
19
import org.springframework.beans.factory.annotation.Required;
20
import org.springframework.core.io.ClassPathResource;
21
import org.springframework.core.io.Resource;
22
import org.springframework.transaction.annotation.Transactional;
23

  
24
import com.google.common.collect.ImmutableMap;
25

  
26
import eu.dnetlib.enabling.datasources.common.Api;
27
import eu.dnetlib.enabling.datasources.common.ApiParam;
28
import eu.dnetlib.enabling.datasources.common.BrowsableField;
29
import eu.dnetlib.enabling.datasources.common.BrowseTerm;
30
import eu.dnetlib.enabling.datasources.common.BrowseTermImpl;
31
import eu.dnetlib.enabling.datasources.common.Datasource;
32
import eu.dnetlib.enabling.datasources.common.DsmException;
33
import eu.dnetlib.enabling.datasources.common.DsmForbiddenException;
34
import eu.dnetlib.enabling.datasources.common.DsmNotFoundException;
35
import eu.dnetlib.enabling.datasources.common.DsmRuntimeException;
36
import eu.dnetlib.enabling.datasources.common.Identity;
37
import eu.dnetlib.enabling.datasources.common.Organization;
38
import eu.dnetlib.enabling.datasources.common.PidSystem;
39
import eu.dnetlib.enabling.datasources.common.SearchApisEntry;
40
import eu.dnetlib.enabling.datasources.common.SimpleDatasource;
41

  
42
public class LocalOpenaireDatasourceManagerImpl implements LocalOpenaireDatasourceManager {
43

  
44
	private DatasourceManagerClients datasourceManagerClients;
45

  
46
	private List<DbBrowsableField> browsableFields;
47

  
48
	public static final String QUERY_BASEDIR = "/eu/dnetlib/enabling/datasources/queries/";
49

  
50
	private static final Resource searchDsByType = new ClassPathResource(QUERY_BASEDIR + "searchDsByType.sql");
51
	private static final Resource searchApis = new ClassPathResource(QUERY_BASEDIR + "searchApisNormal.sql");
52
	private static final Resource searchApisUsingField = new ClassPathResource(QUERY_BASEDIR + "searchApisUsingField.sql");
53
	private static final Resource addDs = new ClassPathResource(QUERY_BASEDIR + "addDatasource.sql");
54
	private static final Resource addOrg = new ClassPathResource(QUERY_BASEDIR + "addOrganization.sql");
55
	private static final Resource deleteDs = new ClassPathResource(QUERY_BASEDIR + "deleteDatasource.sql");
56
	private static final Resource setActive = new ClassPathResource(QUERY_BASEDIR + "setActive.sql");
57
	private static final Resource setManaged = new ClassPathResource(QUERY_BASEDIR + "setManaged.sql");
58
	private static final Resource setCompliance = new ClassPathResource(QUERY_BASEDIR + "setCompliance.sql");
59
	private static final Resource overrideCompliance = new ClassPathResource(QUERY_BASEDIR + "overrideCompliance.sql");
60
	private static final Resource resetCompliance = new ClassPathResource(QUERY_BASEDIR + "resetCompliance.sql");
61
	private static final Resource setLastCollectionInfo = new ClassPathResource(QUERY_BASEDIR + "setLastCollectionInfo.sql");
62
	private static final Resource setLastAggregationInfo = new ClassPathResource(QUERY_BASEDIR + "setLastAggregationInfo.sql");
63
	private static final Resource setLastDownloadInfo = new ClassPathResource(QUERY_BASEDIR + "setLastDownloadInfo.sql");
64
	private static final Resource setLastValidationJob = new ClassPathResource(QUERY_BASEDIR + "setLastValidationJob.sql");
65
	private static final Resource resetLastOperationsInfo = new ClassPathResource(QUERY_BASEDIR + "resetLastOperationsInfo.sql");
66
	private static final Resource insertApiParam = new ClassPathResource(QUERY_BASEDIR + "insertApiParam.sql");
67
	private static final Resource insertApi = new ClassPathResource(QUERY_BASEDIR + "insertApi.sql");
68
	private static final Resource setRemovable = new ClassPathResource(QUERY_BASEDIR + "setRemovable.sql");
69

  
70
	private static final Log log = LogFactory.getLog(LocalOpenaireDatasourceManagerImpl.class);
71

  
72
	@Override
73
	@Transactional(readOnly = true)
74
	public Set<String> listManagedDatasourceIds() throws DsmRuntimeException {
75
		try {
76
			return datasourceManagerClients.searchSQL("SELECT id FROM dsm_services WHERE managed = true", new HashMap<>())
77
				.stream()
78
				.map(m -> (String) m.get("id"))
79
				.collect(Collectors.toCollection(HashSet::new));
80
		} catch (final DsmException e) {
81
			throw new DsmRuntimeException(e);
82
		}
83
	}
84

  
85
	@Override
86
	@Transactional(readOnly = true)
87
	public List<SimpleDatasource> searchDatasourcesByType(final String type) throws DsmException {
88

  
89
		return datasourceManagerClients.searchSQL(searchDsByType, ImmutableMap.of("type", type))
90
			.stream()
91
			.map(DatasourceFunctions::mapToSimpleDs)
92
			.collect(Collectors.toList());
93
	}
94

  
95
	@Override
96
	@Transactional(readOnly = true)
97
	public List<? extends SearchApisEntry> searchApis(final String field, final Object value) throws DsmException {
98
		try {
99
			final StringWriter sql = new StringWriter();
100

  
101
			final Map<String, Object> params = new HashMap<>();
102
			if (field != null && value != null) {
103
				if (field.equalsIgnoreCase("__search__")) {
104
					params.put("value", "%" + value + "%");
105
					sql.append(IOUtils.toString(searchApis.getInputStream()));
106
				} else {
107
					sql.append(IOUtils.toString(searchApisUsingField.getInputStream()));
108

  
109
					if (field.equalsIgnoreCase("collbackend")) {
110
						sql.append("\"collMdId\" is not null and \"collMdId\" != '' and \"collMdId\" ");
111
						if (StringUtils.equalsIgnoreCase(value.toString(), MDStoreBackend.HDFS.toString())) {
112
							sql.append("like 'md-%' and length(\"collMdId\") <= 40");
113
						} else {
114
							// MONGO
115
							sql.append("not like 'md-%' and length(\"collMdId\") > 40");
116
						}
117
					} else {
118
						params.put("value", value);
119
						sql.append(field);
120
						sql.append("::text = ");
121
						sql.append(":value");
122
					}
123
				}
124

  
125
				return datasourceManagerClients.searchSQL(sql.toString(), params)
126
					.stream()
127
					.map(DatasourceFunctions::mapToSearchApisEntry)
128
					.collect(Collectors.toList());
129
			}
130
		} catch (final Exception e) {
131
			log.error("Error searching field " + field + " - value: " + value, e);
132
		}
133
		return new ArrayList<>();
134
	}
135

  
136
	@Override
137
	@Transactional
138
	public void saveDs(final Datasource<Organization<?>, Identity, PidSystem> ds) throws DsmException {
139

  
140
		if (StringUtils.isBlank(ds.getAggregator())) {
141
			ds.setAggregator("OPENAIRE");
142
		}
143

  
144
		ds.setManaged(true);
145

  
146
		datasourceManagerClients.updateSQL(ds.getId(), addDs, DatasourceFunctions.dsToMap(ds));
147

  
148
		if (ds.getOrganizations() != null) {
149
			for (final Organization<?> org : ds.getOrganizations()) {
150
				final Map<String, Object> orgParams = DatasourceFunctions.orgToMap(ds.getId(), org);
151
				datasourceManagerClients.updateSQL(ds.getId(), addOrg, orgParams);
152
			}
153
		}
154
		final Map<String, Object> params = new HashMap<>();
155
		params.put("removable", true);
156
		params.put("dsId", ds.getId());
157
		datasourceManagerClients.updateSQL(ds.getId(), setRemovable, params);
158
	}
159

  
160
	@Override
161
	@Transactional
162
	public void deleteDs(final String dsId) throws DsmException {
163
		datasourceManagerClients.updateSQL(dsId, deleteDs, ImmutableMap.of("dsId", dsId));
164
	}
165

  
166
	@Override
167
	public Datasource<Organization<?>, Identity, PidSystem> getDs(final String dsId) throws DsmException {
168
		return datasourceManagerClients.getDatasourceById(dsId);
169
	}
170

  
171
	@Override
172
	public Datasource<Organization<?>, Identity, PidSystem> getDsByNsPrefix(final String prefix) throws DsmException {
173
		return datasourceManagerClients.getDatasourceByPrefix(prefix);
174
	}
175

  
176
	@Override
177
	public List<Api<ApiParam>> getApis(final String dsId) throws DsmException {
178
		return datasourceManagerClients.getApis(dsId);
179
	}
180

  
181
	@Override
182
	public void setManaged(final String dsId, final boolean managed) throws DsmException {
183
		final String id = dsId;
184

  
185
		final Map<String, Object> params = new HashMap<>();
186
		params.put("managed", managed);
187
		params.put("dsId", id);
188

  
189
		datasourceManagerClients.updateSQL(id, setManaged, params);
190

  
191
		params.clear();
192
		params.put("removable", true);
193
		params.put("dsId", id);
194

  
195
		datasourceManagerClients.updateSQL(id, setRemovable, params);
196

  
197
	}
198

  
199
	@Override
200
	public boolean isManaged(final String dsId) throws DsmException {
201
		final String q = "SELECT id from dsm_services WHERE id = :dsId AND managed = true";
202
		return !datasourceManagerClients.searchSQL(q, ImmutableMap.of("dsId", dsId)).isEmpty();
203
	}
204

  
205
	@Override
206
	@Transactional
207
	public void setActive(final String dsId, final String apiId, final boolean active) throws DsmException {
208
		final String id = dsId;
209

  
210
		final Map<String, Object> params = new HashMap<>();
211
		params.put("active", active);
212
		params.put("apiId", apiId);
213
		params.put("dsId", id);
214

  
215
		datasourceManagerClients.updateSQL(id, setActive, params);
216
		if (!active) {
217
			datasourceManagerClients.updateSQL(dsId, resetLastOperationsInfo, params);
218
		}
219

  
220
		setManaged(id, true);
221
	}
222

  
223
	@Override
224
	@Transactional(readOnly = true)
225
	public boolean isActive(final String dsId, final String apiId) throws DsmException {
226
		final String q = "SELECT * from dsm_api WHERE id = :apiId AND service = :dsId AND active = true";
227
		return !datasourceManagerClients.searchSQL(q, ImmutableMap.of("dsId", dsId, "apiId", apiId)).isEmpty();
228
	}
229

  
230
	@Override
231
	@Transactional(readOnly = true)
232
	public boolean isRemovable(final String dsId, final String apiId) throws DsmException {
233
		final String q = "SELECT * from dsm_api WHERE id = :apiId AND service = :dsId AND active != true AND removable = true";
234
		return !datasourceManagerClients.searchSQL(q, ImmutableMap.of("dsId", dsId, "apiId", apiId)).isEmpty();
235
	}
236

  
237
	@Override
238
	@Transactional
239
	public void updateCompliance(final String dsId, final String apiId, final String level, final boolean override) throws DsmException {
240
		final String id = dsId;
241

  
242
		if (!override) {
243
			datasourceManagerClients.updateSQL(id, setCompliance, ImmutableMap.of("level", level, "apiId", apiId, "dsId", id));
244
		} else if (level != null) {
245
			datasourceManagerClients.updateSQL(id, overrideCompliance, ImmutableMap.of("level", level, "apiId", apiId, "dsId", id));
246
		} else {
247
			datasourceManagerClients.updateSQL(id, resetCompliance, ImmutableMap.of("apiId", apiId, "dsId", id));
248
		}
249

  
250
		setManaged(id, true);
251
	}
252

  
253
	@Override
254
	public void setLastCollectionInfo(final String dsId, final String apiId, final String mdId, final Integer size, final Date date)
255
		throws DsmException {
256
		setLastOperationInfo(setLastCollectionInfo, dsId, apiId, mdId, size, date);
257
	}
258

  
259
	@Override
260
	public void setLastAggregationInfo(final String dsId, final String apiId, final String mdId, final Integer size, final Date date)
261
		throws DsmException {
262
		setLastOperationInfo(setLastAggregationInfo, dsId, apiId, mdId, size, date);
263
	}
264

  
265
	@Override
266
	public void setLastDownloadInfo(final String dsId, final String apiId, final String objId, final Integer size, final Date date)
267
		throws DsmException {
268
		setLastOperationInfo(setLastDownloadInfo, dsId, apiId, objId, size, date);
269
	}
270

  
271
	@Override
272
	public void setLastValidationJob(final String dsId, final String apiId, final String jobId) throws DsmException {
273
		final Map<String, Object> params = new HashMap<>();
274
		params.put("dsId", dsId);
275
		params.put("apiId", apiId);
276
		params.put("jobId", jobId);
277

  
278
		datasourceManagerClients.updateSQL(dsId, setLastValidationJob, params);
279
		setManaged(dsId, true);
280
	}
281

  
282
	@Transactional
283
	protected void setLastOperationInfo(final Resource sqlResource,
284
		final String dsId,
285
		final String apiId,
286
		final String mdId,
287
		final Integer size,
288
		final Date date)
289
		throws DsmException {
290
		final Map<String, Object> params = new HashMap<>();
291
		params.put("dsId", dsId);
292
		params.put("apiId", apiId);
293
		params.put("mdId", mdId);
294
		params.put("total", size);
295
		if (date != null) {
296
			params.put("date", new java.sql.Timestamp(date.getTime()));
297
		}
298

  
299
		datasourceManagerClients.updateSQL(dsId, sqlResource, params);
300

  
301
		setManaged(dsId, true);
302
	}
303

  
304
	@Override
305
	@Transactional
306
	public void updateApiDetails(final String dsId,
307
		final String apiId,
308
		final String metadataIdentifierPath,
309
		final String baseUrl,
310
		final Map<String, String> params)
311
		throws DsmException {
312

  
313
		final String id = dsId;
314

  
315
		// Delete old params
316
		datasourceManagerClients.updateSQL(id, "DELETE FROM dsm_apiparams WHERE api = :api", ImmutableMap.of("api", apiId));
317

  
318
		// Insert new params
319
		for (final Map.Entry<String, String> e : params.entrySet()) {
320
			final Map<String, Object> sqlParams = ImmutableMap.of("param", e.getKey(), "value", e.getValue(), "api", apiId);
321
			datasourceManagerClients.updateSQL(id, insertApiParam, sqlParams);
322
		}
323

  
324
		// Update the BaseURL
325
		datasourceManagerClients
326
			.updateSQL(id, "UPDATE dsm_api SET baseurl = :baseurl WHERE id = :api", ImmutableMap.of("baseurl", baseUrl, "api", apiId));
327

  
328
		// Update the metadata_identifier_path
329
		datasourceManagerClients.updateSQL(id, "UPDATE dsm_api SET metadata_identifier_path = :path WHERE id = :api", ImmutableMap
330
			.of("path", metadataIdentifierPath, "api", apiId));
331

  
332
		setManaged(id, true);
333
	}
334

  
335
	@Override
336
	public List<? extends BrowsableField> listBrowsableFields() throws DsmException {
337
		return getBrowsableFields();
338
	}
339

  
340
	@Override
341
	public List<BrowseTerm> browseField(final String field) throws DsmException {
342
		final Optional<DbBrowsableField> bf = getBrowsableFields()
343
			.stream()
344
			.filter(f -> f.getId().equals(field))
345
			.findFirst();
346

  
347
		if (bf.isPresent()) {
348
			return datasourceManagerClients.searchSQL(bf.get().getSql(), new HashMap<>())
349
				.stream()
350
				.filter(m -> m.get("term") != null)
351
				.filter(m -> m.get("count") != null)
352
				.filter(m -> StringUtils.isNotBlank(m.get("term").toString()))
353
				.map(m -> new BrowseTermImpl(m.get("term").toString(), NumberUtils.toInt(m.get("count").toString(), 0)))
354
				.collect(Collectors.toList());
355
		} else {
356
			log.error("Not browsable field:" + field);
357
			throw new DsmException("Not browsable field:" + field);
358
		}
359
	}
360

  
361
	@Override
362
	@Transactional
363
	public void addApi(final Api<ApiParam> api) throws DsmException {
364

  
365
		datasourceManagerClients.updateSQL(api.getDatasource(), insertApi, DatasourceFunctions.apiToMap(api));
366

  
367
		if (api.getApiParams() != null) {
368
			api.getApiParams().forEach(p -> {
369
				final ImmutableMap<String, Object> sqlParams = ImmutableMap.of("param", p.getParam(), "value", p.getValue(), "api", api.getId());
370
				try {
371
					datasourceManagerClients.updateSQL(api.getDatasource(), insertApiParam, sqlParams);
372
				} catch (final DsmException e) {
373
					throw new RuntimeException(e);
374
				}
375
			});
376
		}
377

  
378
		setManaged(api.getDatasource(), true);
379
	}
380

  
381
	@Override
382
	@Transactional
383
	public void deleteApi(final String dsId, final String apiId) throws DsmForbiddenException, DsmNotFoundException {
384
		try {
385
			if (!isRemovable(dsId, apiId)) { throw new DsmForbiddenException("The api " + apiId + " can't be deleted"); }
386

  
387
			datasourceManagerClients.updateSQL(dsId, "DELETE FROM dsm_apiparams WHERE api = :api", ImmutableMap.of("api", apiId));
388
			datasourceManagerClients.updateSQL(dsId, "DELETE FROM dsm_api WHERE id = :api", ImmutableMap.of("api", apiId));
389

  
390
			setManaged(dsId, true);
391
		} catch (final Exception e) {
392
			throw new DsmForbiddenException("The api " + apiId + " can't be deleted");
393
		}
394
	}
395

  
396
	public DatasourceManagerClients getDatasourceManagerClients() {
397
		return datasourceManagerClients;
398
	}
399

  
400
	@Required
401
	public void setDatasourceManagerClients(final DatasourceManagerClients datasourceManagerClients) {
402
		this.datasourceManagerClients = datasourceManagerClients;
403
	}
404

  
405
	public List<DbBrowsableField> getBrowsableFields() {
406
		return browsableFields;
407
	}
408

  
409
	@Required
410
	public void setBrowsableFields(final List<DbBrowsableField> browsableFields) {
411
		this.browsableFields = browsableFields;
412
	}
413

  
414
	@Override
415
	@Deprecated
416
	public void regenerateProfiles() throws DsmException {}
417

  
418
	@Override
419
	public void updateTickets(final String dsId, final Set<Integer> tickets) throws DsmException {
420
		datasourceManagerClients.updateSQL(dsId, "DELETE FROM dsm_tickets WHERE service = :service", ImmutableMap.of("service", dsId));
421

  
422
		for (final Integer t : tickets) {
423
			datasourceManagerClients
424
				.updateSQL(dsId, "INSERT INTO dsm_tickets (service, ticket) VALUES (:service, :ticket)", ImmutableMap.of("service", dsId, "ticket", t));
425
		}
426
	}
427

  
428
	@Override
429
	public Set<Integer> listTickets(final String dsId) throws DsmException {
430
		return datasourceManagerClients.searchSQL("select ticket from dsm_tickets where service = :service", ImmutableMap.of("service", dsId))
431
			.stream()
432
			.map(r -> r.get("ticket"))
433
			.filter(n -> n instanceof Integer)
434
			.map(n -> (Integer) n)
435
			.collect(Collectors.toSet());
436
	}
437

  
438
}
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/java/eu/dnetlib/enabling/datasources/MDStoreBackend.java
1
package eu.dnetlib.enabling.datasources;
2

  
3
public enum MDStoreBackend {
4
	MONGO,
5
	HDFS
6
}
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/deploy.info
1
{"type_source": "SVN", "goal": "package -U -T 4C source:jar", "url": "http://svn-public.driver.research-infrastructures.eu/driver/dnet45/modules/dnet-openaire-datasource-manager/trunk/", "deploy_repository": "dnet45-snapshots", "version": "4", "mail": "sandro.labruzzo@isti.cnr.it,michele.artini@isti.cnr.it, claudio.atzori@isti.cnr.it, alessia.bardi@isti.cnr.it", "deploy_repository_url": "http://maven.research-infrastructures.eu/nexus/content/repositories/dnet45-snapshots", "name": "dnet-openaire-datasource-manager"}
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/overrideCompliance.sql
1
UPDATE dsm_api SET compatibility_override = :level WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/resetCompliance.sql
1
UPDATE dsm_api SET compatibility_override = NULL WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/resetLastOperationsInfo.sql
1
UPDATE dsm_api
2
SET 	(last_aggregation_mdid, last_aggregation_total, last_aggregation_date, last_collection_mdid, last_collection_total, last_collection_date, last_download_objid, last_download_total, last_download_date) = (null, null, null, null, null, null, null, null, null)
3
WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/searchDsByType.sql
1
SELECT
2
	ds.id           AS id,
3
	ds.officialname AS name,
4
	ds.eosc_datasource_type     AS eosc_datasource_type,
5
	array_agg(a.id) AS apis
6
FROM
7
	dsm_services ds
8
	LEFT OUTER JOIN dsm_api a ON (ds.id = a.service)
9
WHERE
10
	ds.eosc_datasource_type = :type AND ds.dedup_main_service = true
11
GROUP BY
12
	ds.id, ds.officialname, ds.eosc_datasource_type
13
ORDER BY
14
	 ds.officialname
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setActive.sql
1
UPDATE dsm_api SET active = :active WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setCompliance.sql
1
UPDATE dsm_api SET compatibility = :level WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setLastAggregationInfo.sql
1
UPDATE dsm_api
2
SET (last_aggregation_mdid, last_aggregation_total, last_aggregation_date) = (:mdId, :total, :date)
3
WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setLastDownloadInfo.sql
1
UPDATE dsm_api
2
SET (last_download_objid, last_download_total, last_download_date) = (:mdId, :total, :date)
3
WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setLastValidationJob.sql
1
UPDATE dsm_api
2
SET (last_validation_job) = (:jobId)
3
WHERE id = :apiId AND service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setManaged.sql
1
UPDATE dsm_services SET managed = :managed WHERE id = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/setRemovable.sql
1
UPDATE dsm_api SET removable = :removable WHERE service = :dsId
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/queries/insertApiParam.sql
1
INSERT INTO dsm_apiparams(param, value, api) VALUES (:param, :value, :api)
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/eu/dnetlib/enabling/datasources/applicationContext-dnet-openaire-datasource-manager.xml
1
<?xml version="1.0" encoding="UTF-8"?>
2
<beans xmlns="http://www.springframework.org/schema/beans"
3
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
4
	xmlns:sec="http://cxf.apache.org/configuration/security" xmlns:wsa="http://cxf.apache.org/ws/addressing"
5
	xmlns:p="http://www.springframework.org/schema/p" xmlns:http="http://cxf.apache.org/transports/http/configuration"
6
	xmlns:t="http://dnetlib.eu/springbeans/t" xmlns:template="http://dnetlib.eu/springbeans/template"
7
	xmlns:util="http://www.springframework.org/schema/util"
8
	xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
9
                                    http://cxf.apache.org/ws/addressing http://cxf.apache.org/schemas/ws-addr-conf.xsd
10
                                    http://cxf.apache.org/configuration/security http://cxf.apache.org/schemas/configuration/security.xsd
11
                                    http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd
12
                            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
13
                            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd
14
                            http://dnetlib.eu/springbeans/template http://dnetlib.eu/springbeans/template.xsd">
15

  
16
	<bean id="localOpenaireDatasourceManager"
17
		class="eu.dnetlib.enabling.datasources.LocalOpenaireDatasourceManagerImpl"
18
		p:datasourceManagerClients-ref="datasourceManagerClients">
19
		<property name="browsableFields">
20
			<list>
21
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
22
					p:id="country" p:label="Datasource countries"
23
					p:sql="select o.country as term, count(*) as count from dsm_api a left outer join dsm_services d on (a.service = d.id) left outer join dsm_service_organization dao on (d.id = dao.service) left outer join dsm_organizations o on (dao.organization = o.id) group by o.country order by count desc" />
24
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
25
					p:id="type" p:label="API typologies"
26
					p:sql="select d.eosc_datasource_type as term, count(*) as count from dsm_api a left outer join dsm_services d on (a.service = d.id) group by d.eosc_datasource_type order by count desc" />
27
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
28
					p:id="protocol" p:label="API protocols"
29
					p:sql="select a.protocol as term, count(*) as count from dsm_api a group by a.protocol order by count desc" />
30
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
31
					p:id="compliance" p:label="API compatibility levels"
32
					p:sql="select coalesce(a.compatibility_override, a.compatibility) as term, count(*) as count from dsm_api a group by coalesce(a.compatibility_override, a.compatibility) order by count desc" />
33
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
34
					p:id="active" p:label="API activation"
35
					p:sql="select a.active as term, count(*) as count from dsm_api a group by a.active order by count desc" />
36
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
37
					p:id="consenttermsofuse" p:label="Consent terms of use"
38
					p:sql="select d.consenttermsofuse as term, count(*) as count from dsm_api a left outer join dsm_services d on (a.service = d.id) group by d.consenttermsofuse order by count desc" />
39
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
40
					p:id="fulltextdownload" p:label="Fulltext download"
41
					p:sql="select d.fulltextdownload as term, count(*) as count from dsm_api a left outer join dsm_services d on (a.service = d.id) group by d.fulltextdownload order by count desc" />
42
				<bean class="eu.dnetlib.enabling.datasources.DbBrowsableField"
43
					p:id="collbackend" p:label="Last Collection Backend"
44
					p:sql="select t.term, count(*) from (select CASE WHEN last_collection_mdid LIKE 'md-%' and length(last_collection_mdid) &lt;= 40 THEN 'HDFS' ELSE 'MONGO' END as term from dsm_api where last_collection_mdid is not null) as t group by t.term order by count desc" />			
45
			</list>
46
		</property>
47
	</bean>
48

  
49
	<bean id="datasourceManagerClients"
50
		class="eu.dnetlib.enabling.datasources.DatasourceManagerClients">
51
		<property name="jdbcTemplate">
52
			<bean class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
53
				<constructor-arg>
54
					<bean class="org.springframework.jdbc.datasource.DriverManagerDataSource"
55
						p:driverClassName="org.postgresql.Driver" p:url="${dnet.openaire.db.url}"
56
						p:username="${dnet.openaire.db.username}" p:password="${dnet.openaire.db.password}" />
57
				</constructor-arg>
58
			</bean>
59
		</property>
60
	</bean>
61

  
62
</beans>
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/resources/db_fixes/tickets.sql
1
CREATE TABLE dsm_tickets(
2
	service text REFERENCES dsm_services(id) ON DELETE CASCADE,
3
	ticket integer,
4
	PRIMARY KEY (service, ticket)
5
);
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/java/eu/dnetlib/enabling/datasources/LocalOpenaireDatasourceManager.java
1
package eu.dnetlib.enabling.datasources;
2

  
3
import java.util.Set;
4

  
5
import eu.dnetlib.enabling.datasources.common.Api;
6
import eu.dnetlib.enabling.datasources.common.ApiParam;
7
import eu.dnetlib.enabling.datasources.common.Datasource;
8
import eu.dnetlib.enabling.datasources.common.DsmException;
9
import eu.dnetlib.enabling.datasources.common.Identity;
10
import eu.dnetlib.enabling.datasources.common.LocalDatasourceManager;
11
import eu.dnetlib.enabling.datasources.common.Organization;
12
import eu.dnetlib.enabling.datasources.common.PidSystem;
13

  
14
public interface LocalOpenaireDatasourceManager extends LocalDatasourceManager<Datasource<Organization<?>, Identity, PidSystem>, Api<ApiParam>> {
15

  
16
	void updateTickets(String dsId, Set<Integer> tickets) throws DsmException;
17

  
18
	Set<Integer> listTickets(String dsId) throws DsmException;
19

  
20
}
modules/dnet-openaire-datasource-manager/tags/dnet-openaire-datasource-manager-2.1.0/src/main/java/eu/dnetlib/enabling/datasources/DatasourceFunctions.java
1
package eu.dnetlib.enabling.datasources;
2

  
3
import java.sql.Array;
4
import java.sql.Date;
5
import java.sql.SQLException;
6
import java.sql.Timestamp;
7
import java.util.Arrays;
8
import java.util.HashMap;
9
import java.util.Map;
10
import java.util.Objects;
11
import java.util.stream.Collectors;
12

  
13
import org.apache.commons.lang3.StringUtils;
14
import org.apache.commons.logging.Log;
15
import org.apache.commons.logging.LogFactory;
16

  
17
import eu.dnetlib.enabling.datasources.common.Api;
18
import eu.dnetlib.enabling.datasources.common.ApiParam;
19
import eu.dnetlib.enabling.datasources.common.ApiParamImpl;
20
import eu.dnetlib.enabling.datasources.common.Datasource;
21
import eu.dnetlib.enabling.datasources.common.Identity;
22
import eu.dnetlib.enabling.datasources.common.Organization;
23
import eu.dnetlib.enabling.datasources.common.PidSystem;
24
import eu.dnetlib.enabling.datasources.common.SearchApisEntry;
25
import eu.dnetlib.enabling.datasources.common.SimpleDatasource;
26

  
27
public class DatasourceFunctions {
28

  
29
	private static final String EOSC_DATA_SOURCE = "Data Source";
30

  
31
	private static final Log log = LogFactory.getLog(DatasourceFunctions.class);
32

  
33
	public static SimpleDatasource mapToSimpleDs(final Map<String, Object> map) {
34
		final SimpleDatasource ds = new SimpleDatasource();
35
		ds.setId(castObject(map.get("id"), String.class));
36
		ds.setName(castObject(map.get("name"), String.class));
37
		ds.setOrigId(castObject(map.get("id"), String.class));
38
		ds.setEoscDatasourceType(castObject(map.get("eosc_datasource_type"), String.class));
39
		ds.setValid(true);
40
		try {
41
			final Array arr = castObject(map.get("apis"), Array.class);
42

  
43
			if (arr != null && ((Object[]) arr.getArray()).length > 0) {
44
				ds.setApis(Arrays.stream((Object[]) arr.getArray())
45
					.filter(Objects::nonNull)
46
					.map(Object::toString)
47
					.collect(Collectors.toSet()));
48
			}
49
		} catch (final SQLException e) {
50
			log.error("Error parsing array (apis)", e);
51
			throw new RuntimeException("Error parsing array (apis)", e);
52
		}
53

  
54
		return ds;
55
	}
56

  
57
	public static Datasource<Organization<?>, Identity, PidSystem> mapToDatasource(final Map<String, Object> map) {
58
		final Datasource<Organization<?>, Identity, PidSystem> ds = new Datasource<>();
59
		ds.setId(castObject(map.get("id"), String.class));
60
		ds.setOfficialname(castObject(map.get("officialname"), String.class));
61
		ds.setEnglishname(castObject(map.get("englishname"), String.class));
62
		ds.setWebsiteurl(castObject(map.get("websiteurl"), String.class));
63
		ds.setLogourl(castObject(map.get("logourl"), String.class));
64
		ds.setContactemail(castObject(map.get("contactemail"), String.class));
65
		ds.setLatitude(castObject(map.get("latitude"), Double.class));
66
		ds.setLongitude(castObject(map.get("longitude"), Double.class));
67
		ds.setTimezone(castObject(map.get("timezone"), String.class));
68
		ds.setNamespaceprefix(castObject(map.get("namespaceprefix"), String.class));
69
		ds.setLanguages(castObject(map.get("languages"), String.class));
70
		ds.setCollectedfrom(castObject(map.get("collectedfrom"), String.class));
71
		ds.setDateofvalidation(castObject(map.get("dateofvalidation"), Date.class));
72
		ds.setEoscDatasourceType(castObject(map.get("eosc_datasource_type"), String.class));
73
		ds.setProvenanceaction(castObject(map.get("provenanceaction"), String.class));
74
		ds.setDateofcollection(castObject(map.get("dateofcollection"), Date.class));
75
		ds.setPlatform(castObject(map.get("platform"), String.class));
76
		ds.setActivationId(castObject(map.get("activationId"), String.class));
77
		ds.setDescription(castObject(map.get("description"), String.class));
78
		ds.setReleasestartdate(castObject(map.get("releasestartdate"), Date.class));
79
		ds.setReleaseenddate(castObject(map.get("releaseenddate"), Date.class));
80
		ds.setMissionstatementurl(castObject(map.get("missionstatementurl"), String.class));
81
		ds.setDatabaseaccesstype(castObject(map.get("databaseaccesstype"), String.class));
82
		ds.setDatauploadtype(castObject(map.get("datauploadtype"), String.class));
83
		ds.setDatabaseaccessrestriction(castObject(map.get("databaseaccessrestriction"), String.class));
84
		ds.setDatauploadrestriction(castObject(map.get("datauploadrestriction"), String.class));
85
		ds.setCitationguidelineurl(castObject(map.get("citationguidelineurl"), String.class));
86
		ds.setCertificates(castObject(map.get("certificates"), String.class));
87
		ds.setAggregator(castObject(map.get("aggregator"), String.class));
88
		ds.setIssn(castObject(map.get("issn"), String.class));
89
		ds.setEissn(castObject(map.get("eissn"), String.class));
90
		ds.setLissn(castObject(map.get("lissn"), String.class));
91
		ds.setRegisteredby(castObject(map.get("registeredby"), String.class));
92
		ds.setSubjects(castObject(map.get("subjects"), String.class));
93
		ds.setManaged(castObject(map.get("managed"), Boolean.class));
94
		ds.setConsentTermsOfUse(castObject(map.get("consenttermsofuse"), Boolean.class));
95
		ds.setConsentTermsOfUseDate(castObject(map.get("consenttermsofusedate"), Date.class));
96
		ds.setFullTextDownload(castObject(map.get("fulltextdownload"), Boolean.class));
97
		ds.setStatus(castObject(map.get("status"), String.class));
98

  
99
		return ds;
100
	}
101

  
102
	public static Identity mapToDsIdentity(final Map<String, Object> map) {
103
		final Identity id = new Identity();
104
		id.setPid(castObject(map.get("pid"), String.class));
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff