Project

General

Profile

1
package eu.dnetlib.repo.manager.utils;
2

    
3
import com.fasterxml.jackson.core.JsonProcessingException;
4
import com.fasterxml.jackson.databind.ObjectMapper;
5
import eu.dnetlib.domain.data.Repository;
6
import eu.dnetlib.domain.data.RepositoryInterface;
7
import eu.dnetlib.repo.manager.domain.AggregationDetails;
8
import eu.dnetlib.repo.manager.domain.RepositorySnippet;
9
import eu.dnetlib.repo.manager.domain.Timezone;
10
import org.apache.commons.codec.digest.DigestUtils;
11
import org.apache.log4j.Logger;
12
import org.json.JSONArray;
13
import org.json.JSONException;
14
import org.json.JSONObject;
15
import org.springframework.stereotype.Component;
16

    
17
import java.io.BufferedReader;
18
import java.io.IOException;
19
import java.io.InputStream;
20
import java.io.InputStreamReader;
21
import java.text.ParseException;
22
import java.text.SimpleDateFormat;
23
import java.util.*;
24

    
25
@Component
26
public class Converter {
27

    
28
    private static final Logger LOGGER = Logger.getLogger(Converter.class);
29

    
30
    public static Repository jsonToRepositoryObject(JSONObject repositoryObject) throws JSONException {
31

    
32
        Repository repository = new Repository();
33

    
34
        JSONObject datasource = repositoryObject.getJSONObject("datasource");
35

    
36
        //if( datasource.equals(null))
37
        //    return null;
38

    
39
        repository.setId(datasource.get("id").toString());
40
        repository.setOfficialName(datasource.get("officialname").toString());
41

    
42
        repository.setEnglishName(datasource.get("englishname").toString());
43
        if (repository.getEnglishName().equals("null"))
44
            repository.setEnglishName("");
45

    
46
        repository.setWebsiteUrl(datasource.get("websiteurl").toString());
47
        if (repository.getWebsiteUrl().equals("null"))
48
            repository.setWebsiteUrl("");
49

    
50
        repository.setLogoUrl(datasource.get("logourl").toString());
51
        if (repository.getLogoUrl().equals("null"))
52
            repository.setLogoUrl("");
53

    
54
        repository.setContactEmail(datasource.get("contactemail").toString());
55
        if (repository.getContactEmail().equals("null"))
56
            repository.setContactEmail("");
57

    
58

    
59
        repository.setLatitude(toDouble(datasource.get("latitude").toString()));
60
        repository.setLongitude(toDouble(datasource.get("longitude").toString()));
61
        Double timezone = toDouble(datasource.get("timezone").toString());
62
        repository.setTimezone(timezone != null ? timezone : 0.0);
63
        repository.setNamespacePrefix(datasource.get("namespaceprefix").toString());
64
        repository.setOdLanguages(datasource.get("languages").toString());
65
        repository.setDateOfValidation(convertStringToDate(datasource.get("dateofvalidation").toString()));
66

    
67
        /*  typology -> platform
68
         *  datasource class -> typology */
69
        repository.setTypology(datasource.get("platform").toString());
70
        if (repository.getTypology().equals("null"))
71
            repository.setTypology("");
72
        repository.setDatasourceClass(datasource.get("typology").toString());
73

    
74
        repository.setDateOfCollection(convertStringToDate(datasource.get("dateofcollection").toString()));
75
        repository.setActivationId(datasource.get("activationId").toString());
76

    
77
        repository.setDescription(datasource.get("description").toString());
78
        if (repository.getDescription().equals("null"))
79
            repository.setDescription("");
80

    
81
        repository.setIssn(datasource.get("issn").toString());
82
        repository.setLissn(datasource.get("lissn").toString());
83
        if (repository.getLissn().equals("null"))
84
            repository.setLissn("");
85
        repository.setEissn(datasource.get("eissn").toString());
86
        if (repository.getEissn().equals("null"))
87
            repository.setEissn("");
88
        repository.setRegisteredBy(datasource.get("registeredby").toString());
89

    
90
        /* managed field */
91
        repository.setRegistered(Boolean.parseBoolean(datasource.get("managed").toString()));
92

    
93
        //subjects
94

    
95
        repository.setAggregator(datasource.get("aggregator").toString());
96
        repository.setCollectedFrom(datasource.get("collectedfrom").toString());
97

    
98
        //TODO change organization to list
99
        JSONArray organizations = ((JSONArray) datasource.get("organizations"));
100
        if (organizations.length() != 0) {
101
            repository.setOrganization(((JSONArray) datasource.get("organizations")).getJSONObject(0).get("legalname").toString());
102
            String countryCode = ((JSONArray) datasource.get("organizations")).getJSONObject(0).get("country").toString();
103
            repository.setCountryCode(countryCode);
104
        }
105

    
106
        /* identities field  */
107

    
108
        return repository;
109
    }
110

    
111
    public static Date convertStringToDate(String date) {
112

    
113
        if (Objects.equals(date, "null"))
114
            return null;
115

    
116
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
117
        try {
118
            return formatter.parse(date);
119
        } catch (ParseException e) {
120
            LOGGER.error(e);
121
        }
122
        return null;
123
    }
124

    
125
    public static String convertDateToString(Date date) {
126

    
127
        if (Objects.equals(date, null))
128
            return null;
129

    
130
        SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
131
        return formatter.format(date);
132
    }
133

    
134
    public static Double toDouble(String number) {
135
        if (Objects.equals(number, "null"))
136
            return 0.0;
137
        else
138
            return Double.valueOf(number);
139
    }
140

    
141
    public static List<RepositorySnippet> jsonToRepositorySnippetList(JSONObject json) throws JSONException {
142

    
143
        List<RepositorySnippet> resultSet = new ArrayList<>();
144
        JSONArray rs = json.getJSONArray("datasourceInfo");
145
        for (int i = 0; i < rs.length(); i++)
146
            resultSet.add(jsonToRepositorySnippetObject(rs.getJSONObject(i)));
147
        return resultSet;
148
    }
149

    
150
    public static RepositorySnippet jsonToRepositorySnippetObject(JSONObject repositorySnippetObject) throws JSONException {
151

    
152

    
153
        RepositorySnippet repositorySnippet = new RepositorySnippet();
154

    
155
//        JSONObject datasource = repositorySnippetObject.getJSONObject("datasource");
156

    
157

    
158
        repositorySnippet.setId(repositorySnippetObject.get("id").toString());
159
        repositorySnippet.setOfficialname(repositorySnippetObject.get("officialname").toString());
160

    
161
        repositorySnippet.setEnglishname(repositorySnippetObject.get("englishname").toString());
162
        if (repositorySnippet.getEnglishname().equals("null"))
163
            repositorySnippet.setEnglishname("");
164

    
165
        repositorySnippet.setWebsiteurl(repositorySnippetObject.get("websiteurl").toString());
166
        if (repositorySnippet.getWebsiteurl().equals("null"))
167
            repositorySnippet.setWebsiteurl("");
168

    
169
        repositorySnippet.setRegisteredby(repositorySnippetObject.get("registeredby").toString());
170
        if (repositorySnippet.getRegisteredby().equals("null"))
171
            repositorySnippet.setRegisteredby("");
172
        return repositorySnippet;
173

    
174
    }
175

    
176
    public static List<Repository> jsonToRepositoryList(JSONObject json) throws JSONException {
177

    
178
        List<Repository> resultSet = new ArrayList<>();
179
        JSONArray rs = json.getJSONArray("datasourceInfo");
180
        for (int i = 0; i < rs.length(); i++)
181
            resultSet.add(jsonToRepositoryObject(rs.getJSONObject(i)));
182
        return resultSet;
183
    }
184

    
185
    public static List<RepositoryInterface> jsonToRepositoryInterfaceList(JSONObject json) throws JSONException {
186

    
187
        List<RepositoryInterface> resultSet = new ArrayList<>();
188
        JSONArray rs = json.getJSONArray("api");
189
        for (int i = 0; i < rs.length(); i++)
190
            resultSet.add(jsonToRepositoryInterfaceObject(rs.getJSONObject(i)));
191
        return resultSet;
192
    }
193

    
194
    public static RepositoryInterface jsonToRepositoryInterfaceObject(JSONObject repositoryInterfaceObject) throws JSONException {
195

    
196
        RepositoryInterface repositoryInterface = new RepositoryInterface();
197

    
198
        repositoryInterface.setId(repositoryInterfaceObject.get("id").toString());
199
        repositoryInterface.setAccessProtocol(repositoryInterfaceObject.get("protocol").toString());
200
        repositoryInterface.setContentDescription(repositoryInterfaceObject.get("contentdescription").toString());
201
        repositoryInterface.setTypology(repositoryInterfaceObject.get("typology").toString());
202
        repositoryInterface.setCompliance(repositoryInterfaceObject.get("compatibility").toString());
203
        repositoryInterface.setLastCollectionDate(repositoryInterfaceObject.get("lastCollectionDate").toString());
204

    
205
        repositoryInterface.setBaseUrl(repositoryInterfaceObject.get("baseurl").toString());
206
        repositoryInterface.setRemovable(Boolean.parseBoolean(repositoryInterfaceObject.get("removable").toString()));
207

    
208

    
209
        // repositoryInterface.setMetadataIdentifierPath(repositoryInterfaceObject.get("metadataIdentifierPath").toString());
210
        repositoryInterface.setDesiredCompatibilityLevel(repositoryInterfaceObject.get("compatibility").toString());
211
        //repositoryInterface.setActive(Boolean.parseBoolean(repositoryInterfaceObject.get("active").toString()));
212

    
213

    
214
        Map<String, String> accessParams = new HashMap<>();
215
        Map<String, String> extraFields = new HashMap<>();
216

    
217
        ObjectMapper mapper = new ObjectMapper();
218
        JSONArray apiparams = repositoryInterfaceObject.getJSONArray("apiParams");
219

    
220
        for (int i = 0; i < apiparams.length(); i++)
221
            accessParams.put(apiparams.getJSONObject(i).getString("param"), apiparams.getJSONObject(i).getString("value"));
222

    
223
        repositoryInterface.setAccessParams(accessParams);
224

    
225
        return repositoryInterface;
226
    }
227

    
228
    public static String repositoryObjectToJson(Repository repository) throws JSONException, JsonProcessingException {
229

    
230
        HashMap<String, Object> repositoryMap = new HashMap<>();
231
        ObjectMapper mapper = new ObjectMapper();
232

    
233
        repositoryMap.put("id", repository.getId());
234
        repositoryMap.put("openaireId", getOpenaireId(repository.getId()));
235
        repositoryMap.put("officialname", repository.getOfficialName());
236
        repositoryMap.put("englishname", repository.getEnglishName());
237
        repositoryMap.put("websiteurl", repository.getWebsiteUrl());
238
        repositoryMap.put("logourl", repository.getLogoUrl());
239
        repositoryMap.put("contactemail", repository.getContactEmail());
240
        repositoryMap.put("longitude", repository.getLongitude().toString());
241
        repositoryMap.put("latitude", repository.getLatitude().toString());
242
        repositoryMap.put("timezone", repository.getTimezone());
243

    
244
        repositoryMap.put("namespaceprefix", repository.getNamespacePrefix() != null ? repository.getNamespacePrefix() : "");
245
        repositoryMap.put("languages", repository.getOdLanguages() != null ? repository.getOdLanguages() : "");
246

    
247
        repositoryMap.put("dateofcollection", repository.getDateOfCollection() != null ? convertDateToString(repository.getDateOfCollection()) : "");
248

    
249
        /*
250
         * typology -> platform
251
         * datasource class -> typology
252
         * */
253
        repositoryMap.put("typology", repository.getDatasourceClass());
254
        repositoryMap.put("platform", repository.getTypology());
255

    
256
        repositoryMap.put("dateofvalidation", repository.getDateOfCollection() != null ? convertDateToString(repository.getDateOfCollection()) : "");
257
        repositoryMap.put("activationId", repository.getActivationId() != null ? repository.getActivationId() : "");
258

    
259
        repositoryMap.put("description", repository.getDescription());
260

    
261
        repositoryMap.put("eissn", repository.getEissn() != null ? repository.getEissn() : "");
262
        repositoryMap.put("issn", repository.getIssn() != null ? repository.getIssn() : "");
263
        repositoryMap.put("lissn", repository.getLissn() != null ? repository.getLissn() : "");
264

    
265
        repositoryMap.put("registeredby", repository.getRegisteredBy());
266

    
267
        repositoryMap.put("aggregator", repository.getAggregator() != null ? repository.getAggregator() : "");
268
        repositoryMap.put("collectedfrom", repository.getCollectedFrom() != null ? repository.getCollectedFrom() : "");
269

    
270
        repositoryMap.put("managed", repository.isRegistered());
271

    
272
        Map<String, String> organization = new HashMap<>();
273
        organization.put("legalname", repository.getOrganization());
274
        organization.put("country", repository.getCountryCode());
275
        organization.put("legalshortname", "");
276
        organization.put("websiteurl", "");
277
        organization.put("logourl", "");
278

    
279
        List organizations = new ArrayList();
280
        organizations.add(organization);
281
        repositoryMap.put("organizations", organizations);
282

    
283
        //TODO check identitites
284
        //Map<String,String> identity = new HashMap<>();
285

    
286
        if (repository.getPiwikInfo() != null) {
287
            Map<String, Object> identity = new HashMap<>();
288
            HashSet<Map<String, Object>> identities = new HashSet<>();
289

    
290
            identity.put("issuertype", "piwik");
291
            identity.put("pid", "piwik:" + repository.getPiwikInfo().getSiteId());
292

    
293
            identities.add(identity);
294

    
295
            repositoryMap.put("identities", identities);
296
        }
297

    
298
        repositoryMap.put("subjects", "");
299

    
300
        return mapper.writeValueAsString(repositoryMap);
301
    }
302

    
303
    public static String repositoryInterfaceObjectToJson(Repository repository, RepositoryInterface repositoryInterface) throws JSONException {
304

    
305
        JSONObject jsonObject = new JSONObject();
306

    
307
        jsonObject.put("id", repositoryInterface.getId());
308
        jsonObject.put("protocol", repositoryInterface.getAccessProtocol());
309
        jsonObject.put("datasource", repository.getId());
310
        jsonObject.put("contentdescription", repositoryInterface.getContentDescription());
311
        jsonObject.put("typology", repositoryInterface.getTypology());
312
        jsonObject.put("compatibility", repositoryInterface.getDesiredCompatibilityLevel());
313
        jsonObject.put("compatibilityOverride", repositoryInterface.getDesiredCompatibilityLevel());
314

    
315
        jsonObject.put("lastCollectionTotal", "");
316

    
317
        jsonObject.put("lastCollectionDate", repositoryInterface.getLastCollectionDate());
318
        jsonObject.put("lastAggregationTotal", "");
319
        jsonObject.put("lastAggregationDate", "");
320
        jsonObject.put("lastDownloadTotal", "");
321
        jsonObject.put("lastDownloadDate", "");
322

    
323
        jsonObject.put("baseurl", repositoryInterface.getBaseUrl());
324
        jsonObject.put("removable", repositoryInterface.isRemovable());
325

    
326

    
327
        JSONArray apiparams = new JSONArray();
328
        for (String param : repositoryInterface.getAccessParams().keySet()) {
329
            JSONObject jo = new JSONObject();
330
            jo.put("param", param);
331
            jo.put("value", repositoryInterface.getAccessParams().get(param));
332
            apiparams.put(jo);
333
        }
334
        jsonObject.put("apiParams", apiparams);
335

    
336

    
337
//        jsonObject.put("metadataIdentifierPath",repositoryInterface.getMetadataIdentifierPath());
338

    
339

    
340
        return jsonObject.toString();
341
    }
342

    
343
    public static ArrayList<String> readFile(String filename) {
344
        String line;
345
        ArrayList<String> list = new ArrayList<String>();
346
        try {
347
            //InputStream in = Converter.class.getResourceAsStream("resources/eu/dnetlib/repo/manager/service/utils/"+filename);
348
            InputStream in = Converter.class.getClass().getResourceAsStream("/eu/**/" + filename);
349
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
350
            while ((line = br.readLine()) != null) {
351
                list.add(line.trim());
352
            }
353
            br.close();
354
        } catch (IOException e) {
355
            LOGGER.debug("Error opening file!");
356
            LOGGER.error(e);
357
        }
358
        return list;
359
    }
360

    
361
    public static List<AggregationDetails> getAggregationHistoryFromJson(JSONObject datasourceInfo) throws JSONException {
362
        JSONArray rs;
363
        List<AggregationDetails> aggregationDetailsList = new ArrayList<>();
364

    
365
        if (datasourceInfo.get("aggregationHistory") != null && !datasourceInfo.get("aggregationHistory").toString().equals("null")) {
366
            rs = new JSONArray(datasourceInfo.get("aggregationHistory").toString());
367

    
368
            for (int i = 0; i < rs.length(); i++)
369
                aggregationDetailsList.add(jsonToAggregationDetails(rs.getJSONObject(i)));
370
        }
371

    
372
        return aggregationDetailsList;
373
    }
374

    
375
    private static AggregationDetails jsonToAggregationDetails(JSONObject aggregationObject) throws JSONException {
376

    
377
        AggregationDetails aggregationDetails = new AggregationDetails();
378

    
379
        aggregationDetails.setAggregationStage(aggregationObject.get("aggregationStage").toString());
380
        if (aggregationObject.has("collectionMode"))
381
            aggregationDetails.setCollectionMode(aggregationObject.get("collectionMode").toString());
382
        if (aggregationObject.has("indexedVersion"))
383
            aggregationDetails.setIndexedVersion(Boolean.parseBoolean(aggregationObject.get("indexedVersion").toString()));
384
        aggregationDetails.setDate(convertStringToDate(aggregationObject.get("date").toString()));
385
        aggregationDetails.setNumberOfRecords(Integer.parseInt(aggregationObject.get("numberOfRecords").toString()));
386
        return aggregationDetails;
387
    }
388

    
389

    
390
    public static List<Timezone> toTimezones(List<String> timezones) {
391

    
392
        List<Timezone> tmz = new ArrayList<>();
393
        for (String t : timezones) {
394
            String[] s = t.split("\t");
395
            tmz.add(new Timezone(s[1], Double.parseDouble(s[0])));
396
        }
397
        return tmz;
398
    }
399

    
400
    private static String getOpenaireId(String repositoryId) {
401
        if (repositoryId != null && repositoryId.contains("::"))
402
            return repositoryId.split("::")[0] + "::" + DigestUtils.md5Hex(repositoryId.split("::")[1]);
403
        return null;
404
    }
405

    
406
}
(1-1/6)