Project

General

Profile

1
package eu.dnetlib.data.mapreduce.hbase.lodExport.utils;
2

    
3
import eu.dnetlib.data.mapreduce.util.LicenseComparator;
4
import eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata;
5
import eu.dnetlib.data.proto.FieldTypeProtos;
6
import eu.dnetlib.data.proto.FieldTypeProtos.StringField;
7
import eu.dnetlib.data.proto.FieldTypeProtos.Author;
8
import eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty;
9
import eu.dnetlib.data.proto.OafProtos.Oaf;
10
import eu.dnetlib.data.proto.OafProtos.OafEntity;
11
import eu.dnetlib.data.proto.OafProtos.OafRel;
12
import eu.dnetlib.data.proto.OrganizationProtos.Organization;
13
import eu.dnetlib.data.proto.ProjectProtos.Project;
14
import eu.dnetlib.data.proto.ResultProtos.Result;
15
import eu.dnetlib.data.proto.ResultProtos.Result.Instance;
16

    
17
import java.util.ArrayList;
18
import java.util.List;
19
import java.util.Set;
20

    
21
/**
22
 * @author eri Simple serializer that parses input Oaf Protos and prepares them
23
 *         for sqoop
24
 */
25
public class Serializer {
26
    private static final String TEXT_PATTERN = "[^a-zA-Z0-9 .-_:/@+=-]";
27
    private static final String ID_PATTERN = "[^a-zA-Z0-9.:/_-]";
28
    private static final String DOI_PATTERN = ".*\\/(10.)";
29

    
30
    public static String serialize(Oaf oaf, String DELIM) {
31
        switch (oaf.getKind()) {
32
            case entity:
33
                OafEntity valueEntity = oaf.getEntity();
34
                switch (valueEntity.getType()) {
35
                    case datasource:
36
                        return buildDatasource(valueEntity, DELIM);
37
                    case organization:
38
                        return buildOrganization(valueEntity, DELIM);
39
                    case project:
40
                        return buildProject(valueEntity, DELIM);
41
                    case result:
42
                        return buildResult(valueEntity, DELIM);
43
                    default:
44
                        break;
45
                }
46
                break;
47
            case relation:
48
                OafRel valueRel = oaf.getRel();
49

    
50
                return serialize(valueRel, DELIM);
51

    
52
        }
53

    
54
        return null;
55

    
56
    }
57

    
58

    
59
    public static void extractRelations(Oaf oaf, String DELIM, Set<String> relations) {
60
        OafEntity valueEntity = oaf.getEntity();
61
        switch (valueEntity.getType()) {
62
            case result:
63
                getResultDatasources(valueEntity, DELIM, relations);
64
                getDedups(valueEntity, DELIM, relations);
65
            case datasource:
66
                getDedups(valueEntity, DELIM, relations);
67
                /*
68
            case person:
69
                getDedups(valueEntity, DELIM, relations);
70
                */
71
            case organization:
72
                getDedups(valueEntity, DELIM, relations);
73
            default:
74
        }
75

    
76
    }
77

    
78
    public static String serialize(OafRel Rel, String DELIM) {
79
        StringBuilder buff;
80
        switch (Rel.getRelType()) {
81
            case datasourceOrganization:
82
                buff = new StringBuilder();
83
                buff.append(Rel.getRelType().name()).append(DELIM).append("datasource").append(DELIM).append(cleanId(Rel.getSource())).append(DELIM)
84
                        .append("organization").append(DELIM).append(cleanId(Rel.getTarget())).append(DELIM).append("\n");
85
                return buff.toString();
86
            case resultResult:
87
                buff = new StringBuilder();
88
                buff.append(Rel.getRelType().name()).append(DELIM).append("result").append(DELIM).append(cleanId(Rel.getSource())).append(DELIM)
89
                        .append("result").append(DELIM).append(cleanId(Rel.getTarget())).append(DELIM);
90
                return buff.toString();
91
            case organizationOrganization:
92
                buff = new StringBuilder();
93
                buff.append(Rel.getRelType().name()).append(DELIM).append("organization").append(DELIM).append(cleanId(Rel.getSource())).append(DELIM)
94
                        .append("organization").append(DELIM).append(cleanId(Rel.getTarget())).append(DELIM);
95
                return buff.toString();
96
            case projectOrganization:
97
                buff = new StringBuilder();
98
                buff.append(Rel.getRelType().name()).append(DELIM).append("project").append(DELIM).append(cleanId(Rel.getSource())).append(DELIM)
99
                        .append("organization").append(DELIM).append(cleanId(Rel.getTarget())).append(DELIM);
100
                return buff.toString();
101
            case resultOrganization:
102
                buff = new StringBuilder();
103
                buff.append(Rel.getRelType().name()).append(DELIM).append("result").append(DELIM).append(cleanId(Rel.getSource())).append(DELIM)
104
                        .append("organization").append(DELIM).append(cleanId(Rel.getTarget())).append(DELIM);
105
                return buff.toString();
106
//TODO - SOS RELATION RESULT PROJECT IS INVERTED! SOURCE IS PROJECT, TARGET IS RESULT
107

    
108
            case resultProject:
109
                buff = new StringBuilder();
110
                buff.append(Rel.getRelType().name()).append(DELIM).append("result").append(DELIM).append(cleanId(Rel.getTarget())).append(DELIM)
111
                        .append("project").append(DELIM).append(cleanId(Rel.getSource())).append(DELIM);
112
                return buff.toString();
113
            default:
114

    
115
        }
116

    
117
        return "";
118

    
119
    }
120

    
121
    private static String getHeader(OafEntity data, String DELIM) {
122
        String SEPERATOR = ";";
123

    
124
        StringBuilder buff = new StringBuilder();
125

    
126
        //  EntityType
127
        buff.append(data.getType().name()).append(DELIM);
128

    
129
        // OpenaireID
130
        buff.append(cleanId(data.getId())).append(DELIM);
131
        //  dateOfTransformation
132

    
133
        // TODO  CRITERIA FOR IDENTIFYING UPDATED RECORDS
134
        buff.append(cleanId(data.getDateoftransformation())).append(DELIM);
135

    
136
        //    dateOfCollection
137
        buff.append(clean(data.getDateofcollection())).append(DELIM);
138

    
139
        String dataStr = new String();
140
        // originalId
141

    
142
        for (String oid : data.getOriginalIdList()) {
143
            dataStr += cleanDoi(oid) + SEPERATOR; //oid is not openaireid, clean instead of cleanid
144
        }
145

    
146
        buff.append(dataStr).append(DELIM);
147
        return buff.toString();
148
    }
149

    
150

    
151
    private static String buildDatasource(OafEntity data, String DELIM) {
152
        String SEPERATOR = ";";
153

    
154
        StringBuilder buff = new StringBuilder();
155

    
156
        buff.append(getHeader(data, DELIM));
157
        Metadata metadata = data.getDatasource().getMetadata();
158

    
159
        //Datasourcetype
160
        buff.append(clean(metadata.getDatasourcetype().getClassname())).append(DELIM);
161

    
162
        //Openairecompatibility
163
        buff.append(clean(metadata.getOpenairecompatibility().getClassname())).append(DELIM);
164

    
165
        //OfficialName
166
        buff.append(clean(metadata.getOfficialname().getValue())).append(DELIM);
167

    
168
        //  Englishname
169
        buff.append(clean(metadata.getEnglishname().getValue())).append(DELIM);
170

    
171
        //Websiteurl
172
        buff.append(clean(metadata.getWebsiteurl().getValue())).append(DELIM);
173

    
174
        //LogoURL
175
        buff.append(clean(metadata.getLogourl().getValue())).append(DELIM);
176

    
177
        //Contactemail
178
        buff.append(clean(metadata.getContactemail().getValue())).append(DELIM);
179

    
180
        //Namespaceprefix
181
        buff.append(clean(metadata.getNamespaceprefix().getValue())).append(DELIM);
182

    
183
        // latitude
184
        buff.append(clean(metadata.getLatitude().getValue())).append(DELIM);
185

    
186
        // longtitude
187
        buff.append(clean(metadata.getLongitude().getValue())).append(DELIM);
188

    
189
        // dateofvalidation,
190
        buff.append(clean(metadata.getDateofvalidation().getValue())).append(DELIM);
191

    
192
        //Description
193
        buff.append(clean(metadata.getDescription().getValue())).append(DELIM);
194

    
195
        //subjects
196
        String subj = new String();
197
        for (StructuredProperty s : metadata.getSubjectsList()) {
198
            subj += clean(s.getValue()) + SEPERATOR;
199
        }
200

    
201
        //subjectList
202
        buff.append(clean(subj)).append(DELIM);
203

    
204
        //Number of items
205
        buff.append(clean(metadata.getOdnumberofitems().getValue())).append(DELIM);
206

    
207
        //Date of number of items
208
        buff.append(clean(metadata.getOdnumberofitemsdate().getValue())).append(DELIM);
209

    
210
        // Policies
211
        buff.append(clean(metadata.getOdpolicies().getValue())).append(DELIM);
212

    
213
        //languages
214
        String dataStr = new String();
215

    
216
        for (StringField lang : metadata.getOdlanguagesList()) {
217
            dataStr += clean(lang.getValue()) + SEPERATOR;
218
        }
219

    
220
        buff.append(dataStr).append(DELIM);
221
        ;
222

    
223

    
224
        // Content type
225
        dataStr = " ";
226
        for (StringField c : metadata.getOdcontenttypesList()) {
227
            dataStr += clean(c.getValue()) + SEPERATOR;
228
        }
229
        buff.append(dataStr).append(DELIM);
230

    
231
        //Access info package
232
        dataStr = " ";
233

    
234
        for (StringField c : metadata.getAccessinfopackageList()) {
235
            dataStr += clean(c.getValue()) + SEPERATOR;
236
        }
237

    
238
        buff.append(dataStr).append(DELIM);
239

    
240
        //Release start date
241
        buff.append(clean(metadata.getReleasestartdate().getValue())).append(DELIM);
242

    
243
        //Release end date
244
        buff.append(clean(metadata.getReleaseenddate().getValue())).append(DELIM);
245

    
246
        //Mission statement url
247
        buff.append(clean(metadata.getMissionstatementurl().getValue())).append(DELIM);
248

    
249
        //Data provider
250
        buff.append(clean(String.valueOf(metadata.getDataprovider().getValue()))).append(DELIM);
251

    
252
        //Service provider
253
        buff.append(clean(String.valueOf(metadata.getServiceprovider().getValue()))).append(DELIM);
254

    
255
        //Database access type
256
        buff.append(clean(metadata.getDatabaseaccessrestriction().getValue())).append(DELIM);
257

    
258
        //Data upload type
259
        buff.append(clean(metadata.getDatauploadtype().getValue())).append(DELIM);
260

    
261
        //Data upload restrictions
262
        buff.append(clean(metadata.getDatauploadrestriction().getValue())).append(DELIM);
263

    
264
        //Versioning
265
        buff.append(clean(String.valueOf(metadata.getVersioning().getValue()))).append(DELIM);
266

    
267
        //Citation guideline url
268
        buff.append(clean(metadata.getCitationguidelineurl().getValue())).append(DELIM);
269

    
270
        //Quality management kind
271
        buff.append(clean(metadata.getQualitymanagementkind().getValue())).append(DELIM);
272

    
273
        //PID systems
274
        buff.append(clean(metadata.getPidsystems().getValue())).append(DELIM);
275

    
276
        //Certificates
277
        buff.append(clean(metadata.getCertificates().getValue())).append(DELIM);
278

    
279
        //Policies
280
        dataStr = " ";
281
        for (FieldTypeProtos.KeyValue property : metadata.getPoliciesList()) {
282
            dataStr += clean(property.getValue()) + SEPERATOR;
283
        }
284

    
285
        buff.append(dataStr).append(DELIM);
286

    
287
        buff.append(getTrust(data)).append(DELIM);
288
        return buff.toString();
289
    }
290

    
291

    
292
    private static String buildOrganization(OafEntity data, String DELIM) {
293
        String SEPERATOR = ";";
294

    
295
        StringBuilder buff = new StringBuilder();
296
        buff.append(getHeader(data, DELIM));
297

    
298
        Organization organization = data.getOrganization();
299
        Organization.Metadata metadata = organization.getMetadata();
300

    
301
        //getLegalshortname
302
        buff.append(clean(metadata.getLegalshortname().getValue())).append(DELIM);
303
        // `name`,
304
        buff.append(clean(metadata.getLegalname().getValue())).append(DELIM);
305
        //website URL
306
        String[] split = metadata.getWebsiteurl().getValue().split(",");
307
        String dataStr = new String();
308

    
309
        for (String s : split) {
310
            dataStr += s.replace(DELIM, " ") + SEPERATOR;
311
        }
312

    
313
        buff.append(dataStr).append(DELIM);
314
        //logourl
315
        buff.append(clean(metadata.getLogourl().getValue())).append(DELIM);
316
        // `country`,
317
        buff.append(clean(metadata.getCountry().getClassid())).append(DELIM);
318
        buff.append(getTrust(data)).append(DELIM);
319

    
320
        return buff.toString();
321

    
322
    }
323

    
324
    static String getTrust(OafEntity data) {
325
        for (FieldTypeProtos.ExtraInfo info : data.getExtraInfoList()) {
326
            return (info.getTrust());
327

    
328
        }
329
        return " ";
330
    }
331

    
332

    
333
    private static String buildResult(OafEntity data, String DELIM) {
334
        String SEPERATOR = ";";
335

    
336
        Result.Metadata metadata = data.getResult().getMetadata();
337

    
338

    
339
        StringBuilder buff = new StringBuilder();
340

    
341
        buff.append(getHeader(data, DELIM));
342

    
343
        //   titleString
344
        String dataStr = new String();
345

    
346
        for (int i = 0; i < metadata.getTitleList().size(); i++) {
347
            StructuredProperty title = metadata.getTitleList().get(i);
348
            dataStr = clean(title.getValue());
349
            break;
350
        }
351

    
352
        //  pubtitle
353
        buff.append(clean(dataStr)).append(DELIM);
354

    
355
        // date of acceptance CHANGED THIS TO DATE FORMAT
356
        buff.append(clean(metadata.getDateofacceptance().getValue())).append(DELIM);
357

    
358
        // publisher
359
        buff.append(clean(metadata.getPublisher().getValue())).append(DELIM);
360

    
361

    
362
        //PID
363
        dataStr = " ";
364
        for (StructuredProperty p : data.getPidList()) {
365
            dataStr += clean(p.getValue()) + SEPERATOR;
366
        }
367

    
368
        buff.append(dataStr).append(DELIM);
369

    
370
        //language
371
        buff.append(clean(metadata.getLanguage().getClassid())).append(DELIM);
372

    
373
        // RelevantDate
374
        dataStr = " ";
375

    
376
        for (StructuredProperty p : metadata.getRelevantdateList()) {
377
            dataStr += clean(p.getValue());
378
            break;
379
        }
380

    
381
        buff.append(dataStr).append(DELIM);
382

    
383
        //Subject
384
        dataStr = " ";
385
        for (StructuredProperty subj : metadata.getSubjectList()) {
386

    
387
            if (subj.getValue() != null && !subj.getValue().isEmpty()) {
388
                dataStr += clean(subj.getValue()) + SEPERATOR;
389
            }
390
        }
391

    
392
        buff.append(dataStr).append(DELIM);
393

    
394
        //TODO ExternalReference
395

    
396
        buff.append(" ").append(DELIM);
397

    
398
        //Source
399
        dataStr = " ";
400
        for (StringField s : metadata.getSourceList()) {
401
            dataStr += clean(s.getValue()) + SEPERATOR;
402
        }
403

    
404
        buff.append(dataStr).append(DELIM);
405

    
406
        //TODO Format     
407
        buff.append(" ").append(DELIM);
408

    
409
        //Context
410
        dataStr = " ";
411
        for (Result.Context s : metadata.getContextList()) {
412
            dataStr += clean(s.getId()) + SEPERATOR;
413
        }
414
        buff.append(dataStr).append(DELIM);
415

    
416
        //country
417

    
418
        String country = " ";
419

    
420
        for (FieldTypeProtos.Qualifier c : metadata.getCountryList()) {
421
            country += clean(c.getClassid()) + SEPERATOR;
422
        }
423

    
424
        buff.append(country).append(DELIM);
425

    
426
        //Best License
427
        buff.append(getBestLicense(data.getResult())).append(DELIM);
428

    
429
        //Description
430
        dataStr = " ";
431

    
432
        for (StringField desc : metadata.getDescriptionList()) {
433
            dataStr += clean(desc.getValue());
434
            break;
435
        }
436

    
437
        buff.append(dataStr).append(DELIM);
438

    
439
        //Journal  
440
        buff.append(clean(metadata.getJournal().getName())).append(DELIM);  //#null#!
441

    
442

    
443
        // TODO ERI SOS : HERE IN GET JOUTNAL. GET DATA INFO I CAN FIND PROVENANCE AND SIMILARITY
444

    
445
        // TODO isRelatedTo
446

    
447
        //   resource type
448
        buff.append(clean(metadata.getResourcetype().getClassname())).append(DELIM);
449
        //   device
450
        buff.append(clean(metadata.getDevice().getValue())).append(DELIM);
451
        //   size
452
        buff.append(clean(metadata.getSize().getValue())).append(DELIM);
453
        //     version
454
        buff.append(clean(metadata.getVersion().getValue())).append(DELIM);
455

    
456
        //   metadata update
457
        buff.append(clean(metadata.getLastmetadataupdate().getValue())).append(DELIM);
458
        //   metadata version
459
        buff.append(clean(metadata.getMetadataversionnumber().getValue())).append(DELIM);
460

    
461
        // year
462
        buff.append(clean(getYearInt(metadata.getDateofacceptance().getValue()))).append(DELIM);
463

    
464
        // type
465
        buff.append(clean(metadata.getResulttype().getClassname())).append(DELIM);
466

    
467
        buff.append(getTrust(data)).append(DELIM);
468

    
469
        //Authors
470
        dataStr = " ";
471
        for(Author p : metadata.getAuthorList()){
472
            dataStr += clean(p.getFullname()) + SEPERATOR;
473
        }
474

    
475
        buff.append(dataStr).append(DELIM);
476

    
477
        return buff.toString();
478
    }
479

    
480

    
481
    private static String buildProject(OafEntity data, String DELIM) {
482
        String SEPERATOR = ";";
483

    
484
        StringBuilder buff = new StringBuilder();
485

    
486
        buff.append(getHeader(data, DELIM));
487
        Project.Metadata metadata = data.getProject().getMetadata();
488

    
489

    
490
        //Code
491
        buff.append(metadata.getCode().getValue()).append(DELIM);
492
        // `Websiteurl`,
493
        buff.append(clean(metadata.getWebsiteurl().getValue())).append(DELIM);
494
        //TODO here
495

    
496
        // `Acronym`,
497
        buff.append(clean(metadata.getAcronym().getValue())).append(DELIM);
498

    
499
        //Title
500
        buff.append(clean(metadata.getTitle().getValue())).append(DELIM);
501

    
502
        // Startdate
503
        buff.append(clean(metadata.getStartdate().getValue())).append(DELIM);
504

    
505
        // Enddate
506
        buff.append(clean(metadata.getEnddate().getValue())).append(DELIM);
507

    
508
        //`Call identifer`
509
        buff.append(clean(metadata.getCallidentifier().getValue())).append(DELIM);
510

    
511
        //`KeyWords`
512
        buff.append(clean(metadata.getKeywords().getValue())).append(DELIM);
513

    
514
        //`Duration`
515
        buff.append(clean(metadata.getDuration().getValue())).append(DELIM);
516

    
517
        //esc39
518
        buff.append(clean(metadata.getEcsc39().getValue())).append(DELIM);
519

    
520
        //`Contracttype`
521
        buff.append(clean(metadata.getContracttype().getClassname())).append(DELIM);
522

    
523
        //`OA mandate pubs`  TODO DOES NOT EXIST
524
        buff.append(clean(metadata.getOamandatepublications().getValue())).append(DELIM);
525
        //`Subjects`
526
        String dataStr = new String();
527
        for (StructuredProperty s : metadata.getSubjectsList()) {
528

    
529
            dataStr += clean(s.getValue()) + SEPERATOR;
530
        }
531
        buff.append(dataStr).append(DELIM);
532

    
533
        //`EC293`
534
        buff.append(clean(metadata.getEcarticle293().getValue())).append(DELIM);
535

    
536
        List<StringField> fundList = metadata.getFundingtreeList();
537

    
538
        if (!fundList.isEmpty()) // `funding_lvl0`,
539
        {//TODO funder + 3 funding levels
540
           /* funder text,
541
            funding_lvl0 text,
542
	        funding_lvl1 text,
543
	        funding_lvl2 text,
544
	        funding_lvl3 text,*/
545
            buff.append(FundingParser.getFundingInfo(fundList.get(0).getValue(), DELIM));
546
        } else {
547

    
548
            buff.append(FundingParser.getFundingInfo("", DELIM));
549
        }
550

    
551
        buff.append(getTrust(data)).append(DELIM);
552

    
553
        return buff.toString();
554

    
555
    }
556

    
557
    private static void getResultDatasources(OafEntity valueEntity, String DELIM, Set<String> returnList) {
558
        String SEPERATOR = ";";
559

    
560
        Result result = valueEntity.getResult();
561

    
562
        if (valueEntity.getId().contains("dedup")) return;
563

    
564
        //TODO hosted by
565
        for (Instance instance : (result.getInstanceList())) {
566
            String hostedBy = instance.getHostedby().getKey();
567

    
568
            if (hostedBy != null && !hostedBy.isEmpty()) {
569
                returnList.add("resultDatasource" + DELIM + "result" + DELIM +
570
                        cleanId(valueEntity.getId()) + DELIM + "datasource" + DELIM + cleanId(hostedBy) + DELIM);
571
            }
572
        }
573

    
574
        //TODO  collected froms
575
        for (FieldTypeProtos.KeyValue collectedFromValue : (valueEntity.getCollectedfromList())) {
576
            String collectedFrom = collectedFromValue.getKey();
577
            if (collectedFrom != null && !collectedFrom.isEmpty())
578
                returnList.add(("resultDatasource" + DELIM
579
                        + "result" + DELIM + cleanId(valueEntity.getId()) + DELIM
580
                        + "datasource" + DELIM + cleanId(collectedFrom) + DELIM));
581

    
582
        }
583

    
584

    
585
    }
586

    
587

    
588
    public static String cleanId(String value) {
589
        if (value == null) {
590
            return " ";
591
        }
592

    
593
        //   DO NOT CHANGE THIS: IT REMOVES ID PREFIX ( 5|datacite____::
594
        // to datacite____:: )
595
        // AND REPLACES OCCURENCES OF DELIM CHARS IN DATA
596
        value = value.replaceFirst(".*\\|", "");
597
        value = value.replaceAll(ID_PATTERN, "");
598
        value = value.replace("#", " ");
599
        value = value.replace("\n", " ");
600
        return value;
601
    }
602

    
603
    private static String clean(String value) {
604
        if (value == null) {
605
            return " ";
606
        }
607

    
608

    
609
        // TODO DO NOT CHANGE THIS: IT REMOVES ID PREFIX ( 5|datacite____::
610
        value = value.replaceAll("[\"\\r\\\\;]", "");
611
        value = value.replace("\\", "");
612
        value = value.replaceAll(TEXT_PATTERN, " ");
613

    
614
        value = value.replace(">", " ");
615
        value = value.replace("<", " ");
616
        value = value.replace("\"", " ");
617
        value = value.replace("\\", " ");
618
        value = value.replace("'", " ");
619
        value = value.replace("«", " ");
620
        value = value.replace("»", " ");
621
        value = value.replace("#", " ");
622
        value = value.replace("\\", " ");
623
        value = value.replace("\n", " ");
624
        value = value.replace(",", "");
625
        value = value.replace("#", "");
626
        value = value.replace(";", "");
627

    
628

    
629
        return value;
630
    }
631

    
632
    private static String cleanDoi(String value) {
633
        value = value.replaceAll(DOI_PATTERN, "");
634
        value = value.replace("#", " ");
635
        value = value.replace("\n", " ");
636
        return value;
637
    }
638

    
639

    
640
    //TODO make them in pairs
641
    private static void getDedups(OafEntity valueEntity, String DELIM, Set<String> returnList) {
642
        if (!valueEntity.getChildrenList().isEmpty() && valueEntity.getId().contains("dedup")) {
643
            ArrayList<String> entries = new ArrayList<String>();
644

    
645
            for (OafEntity child : valueEntity.getChildrenList()) {
646
                if (child.getType() == valueEntity.getType() && !child.getId().contains("dedup")) {
647
                    // if it is result, then its the deduplication
648
                    entries.add(cleanId(child.getId()));
649
                }
650
            }
651

    
652
            for (int i = 0; i < entries.size() - 1; i++) {
653
                for (int j = i + 1; j < entries.size(); j++) {
654
                    returnList.add("dedup" + DELIM +
655
                            valueEntity.getType().name() + DELIM +
656
                            entries.get(i) + DELIM +
657
                            valueEntity.getType().name() + DELIM +
658
                            entries.get(j) + DELIM);
659
                }
660
            }
661

    
662
        }
663

    
664
    }
665

    
666

    
667
    private static String getYearInt(String data) {
668
        if (data == null || data.isEmpty() || data.equals("-1")) {
669
            return " ";
670
        }
671
        String[] split = data.split("-");
672

    
673
        if (split == null || split.length == 0) {
674
            return " ";
675
        }
676

    
677

    
678
        return split[0];
679

    
680

    
681
    }
682

    
683

    
684
    private static String getBestLicense(Result result) {
685
        FieldTypeProtos.Qualifier bestLicense = null;
686
        LicenseComparator lc = new LicenseComparator();
687
        for (Instance instance : (result.getInstanceList())) {
688
            if (lc.compare(bestLicense, instance.getAccessright()) > 0) {
689
                bestLicense = instance.getAccessright();
690
            }
691
        }
692
        if (bestLicense != null) {
693
            return bestLicense.getClassname();
694
        } else {
695
            return null;
696
        }
697
    }
698

    
699

    
700
}
(4-4/4)