1 |
26600
|
sandro.lab
|
package eu.dnetlib.enabling.datasources;
|
2 |
|
|
|
3 |
49970
|
michele.ar
|
import java.sql.Array;
|
4 |
49928
|
michele.ar
|
import java.sql.Date;
|
5 |
49970
|
michele.ar
|
import java.sql.SQLException;
|
6 |
50381
|
claudio.at
|
import java.sql.Timestamp;
|
7 |
51943
|
michele.ar
|
import java.util.Arrays;
|
8 |
|
|
import java.util.HashMap;
|
9 |
|
|
import java.util.Map;
|
10 |
|
|
import java.util.Objects;
|
11 |
49970
|
michele.ar
|
import java.util.stream.Collectors;
|
12 |
26600
|
sandro.lab
|
|
13 |
50719
|
claudio.at
|
import org.apache.commons.lang3.StringUtils;
|
14 |
26600
|
sandro.lab
|
import org.apache.commons.logging.Log;
|
15 |
|
|
import org.apache.commons.logging.LogFactory;
|
16 |
|
|
|
17 |
51943
|
michele.ar
|
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 |
62109
|
michele.ar
|
import eu.dnetlib.enabling.datasources.common.PidSystem;
|
24 |
51943
|
michele.ar
|
import eu.dnetlib.enabling.datasources.common.SearchApisEntry;
|
25 |
|
|
import eu.dnetlib.enabling.datasources.common.SimpleDatasource;
|
26 |
|
|
|
27 |
26600
|
sandro.lab
|
public class DatasourceFunctions {
|
28 |
|
|
|
29 |
62109
|
michele.ar
|
private static final String EOSC_DATA_SOURCE = "Data Source";
|
30 |
|
|
|
31 |
51943
|
michele.ar
|
private static final Log log = LogFactory.getLog(DatasourceFunctions.class);
|
32 |
26600
|
sandro.lab
|
|
33 |
51943
|
michele.ar
|
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 |
62109
|
michele.ar
|
ds.setEoscDatasourceType(castObject(map.get("eosc_datasource_type"), String.class));
|
39 |
51943
|
michele.ar
|
ds.setValid(true);
|
40 |
|
|
try {
|
41 |
|
|
final Array arr = castObject(map.get("apis"), Array.class);
|
42 |
50602
|
sandro.lab
|
|
43 |
51943
|
michele.ar
|
if (arr != null && ((Object[]) arr.getArray()).length > 0) {
|
44 |
|
|
ds.setApis(Arrays.stream((Object[]) arr.getArray())
|
45 |
62109
|
michele.ar
|
.filter(Objects::nonNull)
|
46 |
|
|
.map(Object::toString)
|
47 |
|
|
.collect(Collectors.toSet()));
|
48 |
51943
|
michele.ar
|
}
|
49 |
|
|
} catch (final SQLException e) {
|
50 |
|
|
log.error("Error parsing array (apis)", e);
|
51 |
|
|
throw new RuntimeException("Error parsing array (apis)", e);
|
52 |
|
|
}
|
53 |
50278
|
michele.ar
|
|
54 |
51943
|
michele.ar
|
return ds;
|
55 |
|
|
}
|
56 |
50278
|
michele.ar
|
|
57 |
62109
|
michele.ar
|
public static Datasource<Organization<?>, Identity, PidSystem> mapToDatasource(final Map<String, Object> map) {
|
58 |
|
|
final Datasource<Organization<?>, Identity, PidSystem> ds = new Datasource<>();
|
59 |
51943
|
michele.ar
|
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 |
62109
|
michele.ar
|
ds.setEoscDatasourceType(castObject(map.get("eosc_datasource_type"), String.class));
|
73 |
51943
|
michele.ar
|
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 |
62109
|
michele.ar
|
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 |
51943
|
michele.ar
|
return ds;
|
100 |
|
|
}
|
101 |
26600
|
sandro.lab
|
|
102 |
51943
|
michele.ar
|
public static Identity mapToDsIdentity(final Map<String, Object> map) {
|
103 |
|
|
final Identity id = new Identity();
|
104 |
|
|
id.setPid(castObject(map.get("pid"), String.class));
|
105 |
|
|
id.setIssuertype(castObject(map.get("issuertype"), String.class));
|
106 |
|
|
return id;
|
107 |
|
|
}
|
108 |
50602
|
sandro.lab
|
|
109 |
62109
|
michele.ar
|
public static Organization<Datasource<?, ?, ?>> mapToDsOrganization(final Map<String, Object> map) {
|
110 |
|
|
final Organization<Datasource<?, ?, ?>> org = new Organization<>();
|
111 |
51943
|
michele.ar
|
org.setId(castObject(map.get("id"), String.class));
|
112 |
|
|
org.setLegalshortname(castObject(map.get("legalshortname"), String.class));
|
113 |
|
|
org.setLegalname(castObject(map.get("legalname"), String.class));
|
114 |
|
|
org.setWebsiteurl(castObject(map.get("websiteurl"), String.class));
|
115 |
|
|
org.setLogourl(castObject(map.get("logourl"), String.class));
|
116 |
|
|
org.setCountry(castObject(map.get("country"), String.class));
|
117 |
|
|
org.setCollectedfrom(castObject(map.get("collectedfrom"), String.class));
|
118 |
|
|
org.setDateofcollection(castObject(map.get("dateofcollection"), Date.class));
|
119 |
|
|
org.setProvenanceaction(castObject(map.get("provenanceaction"), String.class));
|
120 |
|
|
return org;
|
121 |
|
|
}
|
122 |
50154
|
michele.ar
|
|
123 |
51943
|
michele.ar
|
public static SearchApisEntry mapToSearchApisEntry(final Map<String, Object> map) {
|
124 |
|
|
final SearchApisEntry a = new SearchApisEntry();
|
125 |
|
|
a.setId(castObject(map.get("id"), String.class));
|
126 |
|
|
a.setCompliance(castObject(map.get("compliance"), String.class));
|
127 |
|
|
a.setActive(castObject(map.get("active"), Boolean.class));
|
128 |
|
|
a.setRepoId(castObject(map.get("dsId"), String.class));
|
129 |
|
|
a.setRepoName(castObject(map.get("name"), String.class));
|
130 |
|
|
a.setRepoCountry(castObject(map.get("country"), String.class));
|
131 |
|
|
a.setRepoPrefix(castObject(map.get("prefix"), String.class));
|
132 |
|
|
a.setAggrDate(castObject(map.get("aggrDate"), String.class));
|
133 |
|
|
a.setAggrTotal(castObject(map.get("aggrTotal"), Integer.class));
|
134 |
62939
|
michele.ar
|
a.setAggrBackend(calculateMdstoreBackendById(castObject(map.get("aggrMdId"), String.class)));
|
135 |
|
|
a.setCollDate(castObject(map.get("collDate"), String.class));
|
136 |
|
|
a.setCollTotal(castObject(map.get("collTotal"), Integer.class));
|
137 |
|
|
a.setCollBackend(calculateMdstoreBackendById(castObject(map.get("collMdId"), String.class)));
|
138 |
51943
|
michele.ar
|
a.setProtocol(castObject(map.get("protocol"), String.class));
|
139 |
|
|
a.setAlternativeName(castObject(map.get("alternativeName"), String.class));
|
140 |
|
|
a.setRepoOrganization(castObject(map.get("organization"), String.class));
|
141 |
|
|
return a;
|
142 |
|
|
}
|
143 |
26600
|
sandro.lab
|
|
144 |
62939
|
michele.ar
|
private static String calculateMdstoreBackendById(final String mdId) {
|
145 |
|
|
if (StringUtils.isBlank(mdId)) {
|
146 |
|
|
return "";
|
147 |
|
|
} else if (StringUtils.trim(mdId).startsWith("md-")) {
|
148 |
|
|
return "HDFS";
|
149 |
|
|
} else {
|
150 |
|
|
return "MONGO";
|
151 |
|
|
}
|
152 |
|
|
}
|
153 |
|
|
|
154 |
51943
|
michele.ar
|
public static Api<ApiParam> mapToApi(final Map<String, Object> map) {
|
155 |
|
|
final Api<ApiParam> a = new Api<>();
|
156 |
|
|
a.setId(castObject(map.get("id"), String.class));
|
157 |
|
|
a.setProtocol(castObject(map.get("protocol"), String.class));
|
158 |
|
|
a.setDatasource(castObject(map.get("datasource"), String.class));
|
159 |
|
|
a.setContentdescription(castObject(map.get("contentdescription"), String.class));
|
160 |
|
|
a.setActive(castObject(map.get("active"), Boolean.class));
|
161 |
|
|
a.setRemovable(castObject(map.get("removable"), Boolean.class));
|
162 |
|
|
a.setCompatibility(castObject(map.get("compatibility"), String.class));
|
163 |
|
|
a.setCompatibilityOverrided(castObject(map.get("isCompatibilityOverrided"), Boolean.class));
|
164 |
|
|
a.setMetadataIdentifierPath(castObject(map.get("metadataIdentifierPath"), String.class));
|
165 |
|
|
a.setLastCollectionTotal(castObject(map.get("lastCollectionTotal"), Integer.class));
|
166 |
|
|
a.setLastCollectionDate(castObject(map.get("lastCollectionDate"), Timestamp.class));
|
167 |
|
|
a.setLastCollectionMdid(castObject(map.get("lastCollectionMdid"), String.class));
|
168 |
|
|
a.setLastAggregationTotal(castObject(map.get("lastAggregationTotal"), Integer.class));
|
169 |
|
|
a.setLastAggregationDate(castObject(map.get("lastAggregationDate"), Timestamp.class));
|
170 |
|
|
a.setLastAggregationMdid(castObject(map.get("lastAggregationMdid"), String.class));
|
171 |
|
|
a.setLastDownloadTotal(castObject(map.get("lastDownloadTotal"), Integer.class));
|
172 |
|
|
a.setLastDownloadDate(castObject(map.get("lastDownloadDate"), Timestamp.class));
|
173 |
|
|
a.setLastDownloadObjid(castObject(map.get("lastDownloadObjid"), String.class));
|
174 |
|
|
a.setLastValidationJob(castObject(map.get("lastValidationJob"), String.class));
|
175 |
|
|
a.setBaseurl(castObject(map.get("baseUrl"), String.class));
|
176 |
|
|
try {
|
177 |
|
|
final Array arr = castObject(map.get("params"), Array.class);
|
178 |
|
|
if (arr != null) {
|
179 |
|
|
a.setApiParams(Arrays.stream((Object[]) arr.getArray())
|
180 |
62109
|
michele.ar
|
.filter(Objects::nonNull)
|
181 |
|
|
.map(Object::toString)
|
182 |
|
|
.map(s -> {
|
183 |
|
|
final ApiParam p = new ApiParamImpl();
|
184 |
|
|
p.setParam(StringUtils.substringBefore(s, "="));
|
185 |
|
|
p.setValue(StringUtils.substringAfter(s, "="));
|
186 |
|
|
return p;
|
187 |
|
|
})
|
188 |
|
|
.collect(Collectors.toSet()));
|
189 |
51943
|
michele.ar
|
}
|
190 |
|
|
} catch (final SQLException e) {
|
191 |
|
|
log.error("Error parsing array params", e);
|
192 |
|
|
throw new RuntimeException("Error parsing array params", e);
|
193 |
|
|
}
|
194 |
26600
|
sandro.lab
|
|
195 |
51943
|
michele.ar
|
return a;
|
196 |
|
|
}
|
197 |
49970
|
michele.ar
|
|
198 |
62109
|
michele.ar
|
public static Map<String, Object> dsToMap(final Datasource<Organization<?>, Identity, PidSystem> ds) {
|
199 |
51943
|
michele.ar
|
final Map<String, Object> map = new HashMap<>();
|
200 |
50043
|
michele.ar
|
|
201 |
51943
|
michele.ar
|
map.put("id", ds.getId());
|
202 |
|
|
map.put("officialname", ds.getOfficialname());
|
203 |
|
|
map.put("englishname", ds.getEnglishname());
|
204 |
|
|
map.put("websiteurl", ds.getWebsiteurl());
|
205 |
|
|
map.put("logourl", ds.getLogourl());
|
206 |
|
|
map.put("contactemail", ds.getContactemail());
|
207 |
|
|
map.put("latitude", ds.getLatitude());
|
208 |
|
|
map.put("longitude", ds.getLongitude());
|
209 |
|
|
map.put("timezone", ds.getTimezone());
|
210 |
|
|
map.put("namespaceprefix", ds.getNamespaceprefix());
|
211 |
|
|
map.put("languages", ds.getLanguages());
|
212 |
|
|
map.put("collectedfrom", ds.getCollectedfrom());
|
213 |
|
|
map.put("dateofvalidation", ds.getDateofvalidation());
|
214 |
62109
|
michele.ar
|
map.put("eosctype", EOSC_DATA_SOURCE);
|
215 |
|
|
map.put("eoscdatasourcetype", ds.getEoscDatasourceType());
|
216 |
51943
|
michele.ar
|
map.put("provenanceaction", ds.getProvenanceaction());
|
217 |
|
|
map.put("platform", ds.getPlatform());
|
218 |
|
|
map.put("activationid", ds.getActivationId());
|
219 |
|
|
map.put("description", ds.getDescription());
|
220 |
|
|
map.put("releasestartdate", ds.getReleasestartdate());
|
221 |
|
|
map.put("releaseenddate", ds.getReleaseenddate());
|
222 |
|
|
map.put("missionstatementurl", ds.getMissionstatementurl());
|
223 |
|
|
map.put("databaseaccesstype", ds.getDatabaseaccesstype());
|
224 |
|
|
map.put("datauploadtype", ds.getDatauploadtype());
|
225 |
|
|
map.put("databaseaccessrestriction", ds.getDatabaseaccessrestriction());
|
226 |
|
|
map.put("datauploadrestriction", ds.getDatauploadrestriction());
|
227 |
|
|
map.put("citationguidelineurl", ds.getCitationguidelineurl());
|
228 |
|
|
map.put("pidsystems", ds.getPidsystems());
|
229 |
|
|
map.put("certificates", ds.getCertificates());
|
230 |
|
|
map.put("aggregator", ds.getAggregator());
|
231 |
|
|
map.put("issn", ds.getIssn());
|
232 |
|
|
map.put("eissn", ds.getEissn());
|
233 |
|
|
map.put("lissn", ds.getLissn());
|
234 |
|
|
map.put("registeredby", ds.getRegisteredby());
|
235 |
|
|
map.put("subjects", ds.getSubjects());
|
236 |
|
|
map.put("managed", ds.getManaged());
|
237 |
62109
|
michele.ar
|
map.put("status", ds.getStatus());
|
238 |
50201
|
michele.ar
|
|
239 |
51943
|
michele.ar
|
return map;
|
240 |
|
|
}
|
241 |
50201
|
michele.ar
|
|
242 |
51943
|
michele.ar
|
public static Map<String, Object> orgToMap(final String dsId, final Organization<?> org) {
|
243 |
|
|
final Map<String, Object> map = new HashMap<>();
|
244 |
|
|
map.put("dsId", dsId);
|
245 |
|
|
map.put("orgId", org.getId());
|
246 |
|
|
map.put("legalname", org.getLegalname());
|
247 |
|
|
map.put("legalshortname", org.getLegalshortname());
|
248 |
|
|
map.put("websiteurl", org.getWebsiteurl());
|
249 |
|
|
map.put("logourl", org.getLogourl());
|
250 |
|
|
map.put("country", org.getCountry());
|
251 |
59199
|
alessia.ba
|
map.put("collectedfrom", org.getCollectedfrom());
|
252 |
51943
|
michele.ar
|
return map;
|
253 |
|
|
}
|
254 |
49890
|
michele.ar
|
|
255 |
51943
|
michele.ar
|
public static Map<String, Object> apiToMap(final Api<?> api) {
|
256 |
|
|
final Map<String, Object> map = new HashMap<>();
|
257 |
|
|
map.put("apiId", api.getId());
|
258 |
|
|
map.put("protocol", api.getProtocol());
|
259 |
|
|
map.put("baseUrl", api.getBaseurl());
|
260 |
|
|
map.put("dsId", api.getDatasource());
|
261 |
|
|
map.put("contentDescription", api.getContentdescription());
|
262 |
|
|
map.put("compatibility", api.getCompatibility());
|
263 |
|
|
map.put("metadataIdentifierPath", api.getMetadataIdentifierPath());
|
264 |
|
|
map.put("removable", api.getRemovable());
|
265 |
|
|
// The other fields are not required in the INSERT operation
|
266 |
|
|
return map;
|
267 |
|
|
}
|
268 |
49983
|
michele.ar
|
|
269 |
51943
|
michele.ar
|
@SuppressWarnings("unchecked")
|
270 |
|
|
private static <T> T castObject(final Object o, final Class<T> clazz) {
|
271 |
|
|
if (o == null) { return null; }
|
272 |
|
|
if (clazz.isInstance(o)) { return (T) o; }
|
273 |
|
|
throw new IllegalArgumentException("Type not managed: " + clazz.getSimpleName());
|
274 |
|
|
}
|
275 |
49890
|
michele.ar
|
|
276 |
26600
|
sandro.lab
|
}
|