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 com.fasterxml.jackson.databind.SerializationFeature;
6
import eu.dnetlib.domain.data.Repository;
7
import eu.dnetlib.domain.data.RepositoryInterface;
8
import eu.dnetlib.repo.manager.domain.RepositorySnippet;
9
import eu.dnetlib.repo.manager.shared.AggregationDetails;
10
import eu.dnetlib.repo.manager.shared.Timezone;
11
import org.apache.commons.codec.digest.DigestUtils;
12
import org.apache.log4j.Logger;
13
import org.json.JSONArray;
14
import org.json.JSONException;
15
import org.json.JSONObject;
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
public class Converter {
26

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

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

    
31
        Repository repository = new Repository();
32
        
33
        JSONObject datasource = repositoryObject.getJSONObject("datasource");
34

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

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

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

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

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

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

    
57

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

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

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

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

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

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

    
92
        //subjects
93

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

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

    
105
        /* identities field  */
106

    
107
        return repository;
108
    }
109

    
110
    public static Date convertStringToDate(String date){
111

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

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

    
124
    public static String convertDateToString(Date date){
125

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

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

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

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

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

    
149
    private static RepositorySnippet jsonToRepositorySnippetObject(JSONObject repositorySnippetObject) throws JSONException {
150

    
151

    
152
        RepositorySnippet repositorySnippet = new RepositorySnippet();
153

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

    
156

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

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

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

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

    
173
    }
174

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

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

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

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

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

    
195
        RepositoryInterface repositoryInterface = new RepositoryInterface();
196

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

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

    
207

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

    
212

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

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

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

    
222
        repositoryInterface.setAccessParams(accessParams);
223

    
224
        return repositoryInterface;
225
    }
226

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
282
        //TODO check identitites
283
        //Map<String,String> identity = new HashMap<>();
284
        Map<String, Object> identities = new HashMap<>();
285
        identities.put("issuertype", "piwik");
286
        identities.put("pid","piwik:"+repository.getPiwikInfo().getSiteId());
287
        repositoryMap.put("identities",identities);
288
        repositoryMap.put("subjects","");
289

    
290
        return mapper.writeValueAsString(repositoryMap);
291
    }
292

    
293
    public static String repositoryInterfaceObjectToJson(Repository repository,RepositoryInterface repositoryInterface) throws JSONException {
294

    
295
        JSONObject jsonObject = new JSONObject();
296

    
297
        jsonObject.put("id",repositoryInterface.getId());
298
        jsonObject.put("protocol",repositoryInterface.getAccessProtocol());
299
        jsonObject.put("datasource",repository.getId());
300
        jsonObject.put("contentdescription",repositoryInterface.getContentDescription());
301
        jsonObject.put("typology",repositoryInterface.getTypology());
302
        jsonObject.put("compatibility",repositoryInterface.getDesiredCompatibilityLevel());
303
        jsonObject.put("compatibilityOverride",repositoryInterface.getDesiredCompatibilityLevel());
304

    
305
        jsonObject.put("lastCollectionTotal","");
306

    
307
        jsonObject.put("lastCollectionDate",repositoryInterface.getLastCollectionDate());
308
        jsonObject.put("lastAggregationTotal","");
309
        jsonObject.put("lastAggregationDate","");
310
        jsonObject.put("lastDownloadTotal","");
311
        jsonObject.put("lastDownloadDate","");
312

    
313
        jsonObject.put("baseurl",repositoryInterface.getBaseUrl());
314
        jsonObject.put("removable",repositoryInterface.isRemovable());
315

    
316
        
317
        JSONArray apiparams = new JSONArray();
318
        for(String param: repositoryInterface.getAccessParams().keySet()){
319
            JSONObject jo = new JSONObject();
320
            jo.put("param",param);
321
            jo.put("value",repositoryInterface.getAccessParams().get(param));
322
            apiparams.put(jo);
323
        }
324
        jsonObject.put("apiParams",apiparams);
325

    
326

    
327
//        jsonObject.put("metadataIdentifierPath",repositoryInterface.getMetadataIdentifierPath());
328

    
329

    
330
        return jsonObject.toString();
331
    }
332

    
333
    public static ArrayList<String> readFile(String filename) {
334
        String line;
335
        ArrayList<String> list = new ArrayList<String>();
336
        try {
337
            //InputStream in = Converter.class.getResourceAsStream("resources/eu/dnetlib/repo/manager/service/utils/"+filename);
338
            InputStream in = Converter.class.getClass().getResourceAsStream("/eu/**/" + filename);
339
            BufferedReader br = new BufferedReader(new InputStreamReader(in));
340
            while((line = br.readLine()) != null) {
341
                list.add(line.trim());
342
            }
343
            br.close();
344
        } catch (IOException e) {
345
            LOGGER.debug("Error opening file!");
346
            LOGGER.error(e);
347
        }
348
        return list;
349
    }
350

    
351
    public static List<AggregationDetails> getAggregationHistoryFromJson(JSONObject datasourceInfo) throws JSONException {
352
        JSONArray rs;
353
        List<AggregationDetails> aggregationDetailsList = new ArrayList<>();
354

    
355
        if (datasourceInfo.get("aggregationHistory") != null && !datasourceInfo.get("aggregationHistory").toString().equals("null")) {
356
            rs = new JSONArray(datasourceInfo.get("aggregationHistory").toString());
357

    
358
            for (int i = 0; i < rs.length(); i++)
359
                aggregationDetailsList.add(jsonToAggregationDetails(rs.getJSONObject(i)));
360
        }
361

    
362
        return aggregationDetailsList;
363
    }
364

    
365
    private static AggregationDetails jsonToAggregationDetails(JSONObject aggregationObject) throws JSONException {
366

    
367
        AggregationDetails aggregationDetails = new AggregationDetails();
368

    
369
        aggregationDetails.setAggregationStage(aggregationObject.get("aggregationStage").toString());
370
        if(aggregationObject.has("collectionMode"))
371
            aggregationDetails.setCollectionMode(aggregationObject.get("collectionMode").toString());
372
        if(aggregationObject.has("indexedVersion"))
373
            aggregationDetails.setIndexedVersion(Boolean.parseBoolean(aggregationObject.get("indexedVersion").toString()));
374
        aggregationDetails.setDate(convertStringToDate(aggregationObject.get("date").toString()));
375
        aggregationDetails.setNumberOfRecords(Integer.parseInt(aggregationObject.get("numberOfRecords").toString()));
376
        return aggregationDetails;
377
    }
378

    
379

    
380
    public static List<Timezone> toTimezones(List<String> timezones) {
381

    
382
        List<Timezone> tmz = new ArrayList<>();
383
        for(String t : timezones){
384
            String[] s = t.split("\t");
385
            tmz.add(new Timezone(s[1],Double.parseDouble(s[0])));
386
        }
387
        return tmz;
388
    }
389

    
390
    private static String getOpenaireId(String repositoryId) {
391
        if (repositoryId != null && repositoryId.contains("::"))
392
            return repositoryId.split("::")[0] + "::" + DigestUtils.md5Hex(repositoryId.split("::")[1]);
393
        return null;
394
    }
395

    
396
}
(1-1/2)