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.*;
5
import eu.dnetlib.data.proto.DatasourceProtos.Datasource;
6
import eu.dnetlib.data.proto.DatasourceProtos.Datasource.Metadata;
7
import eu.dnetlib.data.proto.FieldTypeProtos.StringField;
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
import org.apache.log4j.Logger;
17

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

    
21
/**
22
 * @author eri Simple serializer that parses input Oaf Protos and prepares them
23
 *         for sqoop
24
 */
25
public class OldSerializer {
26

    
27
    private static String DELIM;
28
    private Logger log = Logger.getLogger(this.getClass());
29
    private String NULL_STRING = "";
30

    
31
    private static String SEPERATOR;
32
    private FundingParser fundingParser;
33

    
34

    
35
    public OldSerializer(String delim, String seperator) {
36
        this.setDELIM(delim);
37
        this.setSEPERATOR(seperator);
38
        this.fundingParser = new FundingParser(delim);
39
    }
40

    
41

    
42
    public String serialize(Oaf oaf) {
43

    
44
        switch (oaf.getKind()) {
45
            case entity:
46
                OafEntity valueEntity = oaf.getEntity();
47

    
48

    
49
                switch (valueEntity.getType()) {
50
                    case datasource:
51

    
52
                        return buildDatasource(valueEntity);
53
                    case organization:
54

    
55
                        return buildOrganization(valueEntity);
56

    
57
                    case project:
58

    
59
                        return buildProject(valueEntity);
60

    
61
                    case result:
62

    
63
                        return buildResult(valueEntity);
64
                    case person:
65
                        return null;
66
                    //  return buildPerson(valueEntity);
67

    
68
                    default:
69
                        log.error("wrong type");
70
                        break;
71
                }
72
                break;
73
            case relation:
74
                OafRel valueRel = oaf.getRel();
75

    
76
                return buildRel(valueRel);
77

    
78
        }
79

    
80
        return null;
81

    
82
    }
83

    
84
    public String serialize(OafRel oaf) {
85

    
86
        switch (oaf.getRelType()) {
87

    
88
            default:
89
                return buildRel(oaf);
90

    
91
        }
92

    
93
    }
94

    
95

    
96
    public ArrayList<String> extractRelations(Oaf oaf) {
97
        OafEntity valueEntity = oaf.getEntity();
98
        ArrayList<String> relations = new ArrayList<String>();
99
        switch (valueEntity.getType()) {
100
            case result:
101
                relations.addAll(getResultDatasources(valueEntity));
102
                relations.addAll(getDedups(valueEntity));
103
                return relations;
104
            case datasource:
105
                relations.addAll(getDedups(valueEntity));
106
                return relations;
107
            case person:
108
              //  relations.addAll(getDedups(valueEntity));
109
                return relations;
110
            case organization:
111
                relations.addAll(getDedups(valueEntity));
112
                return relations;
113
            default:
114
                return relations;
115
        }
116

    
117
    }
118

    
119
    private String buildRel(OafRel Rel) {
120
        switch (Rel.getRelType()) {
121
            case datasourceOrganization:
122
                return getStringField(Rel.getRelType().name()) + getStringField("datasource") + getStringField(Rel.getSource()) + getStringField("organization") + getStringField(Rel.getTarget());
123
            case resultResult:
124

    
125
                return getStringField(Rel.getRelType().name()) + getStringField("result") + getStringField(Rel.getSource()) + getStringField("result") + getStringField(Rel.getTarget());
126
            case personPerson:
127
                return getStringField(Rel.getRelType().name()) + getStringField(" person") + getStringField(Rel.getSource()) + getStringField(" person") + getStringField(Rel.getTarget());
128

    
129
            case organizationOrganization:
130
                return getStringField(Rel.getRelType().name()) + getStringField("organization") + getStringField(Rel.getSource()) + getStringField("organization") + getStringField(Rel.getTarget());
131

    
132
            case personResult:
133
                return getStringField(Rel.getRelType().name()) + getStringField("person") + getStringField(Rel.getSource()) + getStringField("result") + getStringField(Rel.getTarget());
134

    
135
            case projectOrganization:
136
                return getStringField(Rel.getRelType().name()) + getStringField("project") + getStringField(Rel.getSource()) + getStringField("organization") + getStringField(Rel.getTarget());
137

    
138
            case projectPerson:
139
                return getStringField(Rel.getRelType().name()) + getStringField("project") + getStringField(Rel.getSource()) + getStringField("person") + getStringField(Rel.getTarget());
140

    
141
            case resultOrganization:
142
                return getStringField(Rel.getRelType().name()) + getStringField("result") + getStringField(Rel.getSource()) + getStringField("organization") + getStringField(Rel.getTarget());
143

    
144
            case resultProject:
145
                return getStringField(Rel.getRelType().name()) + getStringField("result") + getStringField(Rel.getSource()) + getStringField("project") + getStringField(Rel.getTarget());
146
            default:
147
                return null;
148
        }
149

    
150
    }
151

    
152

    
153
    private String getHeader(OafEntity data) {
154
        String buff = new String();
155

    
156
        //  EntityType
157
        buff += getStringField(data.getType().name());
158

    
159
        // OpenaireID
160
        buff += cleanId(data.getId()) + DELIM;
161
        //  dateOfTransformation
162

    
163
        // TODO change to dateOfTransformation here when released
164
        buff += getStringDateField(data.getDateofcollection());
165

    
166
        //    dateOfCollection
167
        buff += getStringDateField(data.getDateofcollection());
168

    
169
        String originalId = new String();
170
        // originalId
171

    
172
        for (String oid : data.getOriginalIdList()) {
173
            originalId += oid + SEPERATOR;
174
        }
175

    
176
        buff += originalId + DELIM;
177

    
178
        return buff;
179

    
180
    }
181

    
182

    
183
    private String buildDatasource(OafEntity data) {
184

    
185

    
186
        Datasource d = data.getDatasource();
187

    
188
        Metadata metadata = d.getMetadata();
189

    
190

    
191
        String buff = getHeader(data);
192

    
193
		//Datasourcetype
194
		if (metadata.hasDatasourcetype()) {
195
			buff += getStringField(metadata.getDatasourcetype().getClassname());
196
		} else {
197
			buff += getStringField(null);
198
		}
199

    
200
        //Openairecompatibility
201
        buff += getStringField(metadata.getOpenairecompatibility().getClassname());
202

    
203
        //OfficialName
204
        buff += getStringField(metadata.getOfficialname().getValue());
205

    
206
        //  Englishname
207
        buff += getStringField(metadata.getEnglishname().getValue());
208

    
209
        //Websiteurl
210
        buff += getStringField(metadata.getWebsiteurl().getValue());
211

    
212
        //LogoURL
213
        buff += getStringField(metadata.getLogourl().getValue());
214

    
215
        //Contactemail
216
        buff += getStringField(metadata.getContactemail().getValue());
217
        //Namespaceprefix
218
        buff += getStringField(metadata.getNamespaceprefix().getValue());
219

    
220
        // latitude
221
        buff += getStringField(metadata.getLatitude().getValue());
222

    
223
        // longtitude
224
        buff += getStringField(metadata.getLongitude().getValue());
225

    
226
        // dateofvalidation,
227
        buff += getStringDateField(metadata.getDateofvalidation().getValue());
228

    
229
        //Description
230
        buff += getStringField(metadata.getDescription().getValue());
231

    
232
        //subjects
233
        String subj = new String();
234
        for (StructuredProperty s : metadata.getSubjectsList()) {
235
            subj += clean(s.getValue()) + SEPERATOR;
236

    
237
        }
238

    
239
        //subjectList
240
        buff += getMultipleStringField(subj);
241

    
242
        //Number of items
243
        buff += getStringField(metadata.getOdnumberofitems().getValue());
244

    
245
        //Date of number of items
246
        buff += getStringDateField(metadata.getOdnumberofitemsdate().getValue());
247

    
248
        // Policies
249
        buff += getStringField(metadata.getOdpolicies().getValue());
250

    
251
        //languages
252
        String languages = new String();
253
        for (StringField lang : metadata.getOdlanguagesList()) {
254
            languages += clean(lang.getValue()) + SEPERATOR;
255
        }
256
        buff += getMultipleStringField(languages);
257

    
258

    
259
        // Content type
260
        String contentType = new String();
261
        for (StringField c : metadata.getOdcontenttypesList()) {
262
            contentType += clean(c.getValue()) + SEPERATOR;
263
        }
264
        buff += getMultipleStringField(contentType);
265

    
266
        //Access info package
267
        String accessInfo = new String();
268
        for (StringField c : metadata.getAccessinfopackageList()) {
269
            accessInfo += clean(c.getValue()) + SEPERATOR;
270
        }
271
        buff += getMultipleStringField(accessInfo);
272

    
273
        //Release start date
274
        buff += getStringDateField(metadata.getReleasestartdate().getValue());
275

    
276

    
277
        //Release end date
278
        buff += getStringDateField(metadata.getReleaseenddate().getValue());
279

    
280
        //Mission statement url
281
        buff += getStringField(metadata.getMissionstatementurl().getValue());
282

    
283
        //Data provider
284
        buff += getStringField(String.valueOf(metadata.getDataprovider().getValue()));
285

    
286
        //Service provider
287
        buff += getStringField(String.valueOf(metadata.getServiceprovider().getValue()));
288

    
289
        //Database access type
290
        buff += getStringField(metadata.getDatabaseaccessrestriction().getValue());
291

    
292
        //Data upload type
293
        buff += getStringField(metadata.getDatauploadtype().getValue());
294

    
295
        //Data upload restrictions
296
        buff += getStringField(metadata.getDatauploadrestriction().getValue());
297

    
298

    
299
        //Versioning
300
        buff += getStringField(String.valueOf(metadata.getVersioning().getValue()));
301

    
302
        //Citation guideline url
303
        buff += getStringField(String.valueOf(metadata.getCitationguidelineurl().getValue()));
304

    
305
        //Quality management kind
306
        buff += getStringField(String.valueOf(metadata.getQualitymanagementkind().getValue()));
307

    
308
        //PID systems
309
        buff += getStringField(metadata.getPidsystems().getValue());
310

    
311
        //Certificates
312
        buff += getStringField(metadata.getCertificates().getValue());
313

    
314
        //Policies
315
        String policies = new String();
316
        for (FieldTypeProtos.KeyValue property : metadata.getPoliciesList()) {
317
            policies += clean(property.getValue()) + SEPERATOR;
318
        }
319
        buff += getMultipleStringField(policies);
320

    
321
        buff += getTrust(data);
322

    
323
        return buff;
324

    
325
    }
326

    
327

    
328
    private String buildOrganization(OafEntity data) {
329

    
330

    
331
        Organization organization = data.getOrganization();
332
        eu.dnetlib.data.proto.OrganizationProtos.Organization.Metadata metadata = organization.getMetadata();
333

    
334
        String buff = getHeader(data);
335

    
336
		//getLegalshortname
337
		buff += getStringField(metadata.getLegalshortname().getValue());
338
		// `name`,
339
		buff += getStringField(metadata.getLegalname().getValue());
340
		//website URL
341
		String[] split = metadata.getWebsiteurl().getValue().split(",");
342
		String urls = new String();
343

    
344
        for (String s : split) {
345
            urls += s + SEPERATOR;
346
        }
347
        buff += getMultipleStringField(urls);
348

    
349
        //logourl
350
        buff += getStringField(metadata.getLogourl().getValue());
351
        // `country`,
352
        buff += getStringField(metadata.getCountry().getClassid());
353

    
354
        buff += getTrust(data);
355
        return buff;
356

    
357
    }
358

    
359
    String getTrust(OafEntity data) {
360
        for (FieldTypeProtos.ExtraInfo info : data.getExtraInfoList()) {
361
            return getStringField(info.getTrust());
362

    
363
        }
364
        return NULL_STRING + DELIM;
365
    }
366

    
367

    
368
    private String buildResult(OafEntity data) {
369

    
370
        Result result = data.getResult();
371
        eu.dnetlib.data.proto.ResultProtos.Result.Metadata metadata = result.getMetadata();
372

    
373

    
374
        String buff = getHeader(data);
375

    
376

    
377
        //   titleString
378
        String titleString = new String();
379
        String alternativeTitles = new String();
380

    
381
		for (int i = 0; i < metadata.getTitleList().size(); i++) {
382
			StructuredProperty title = metadata.getTitleList().get(i);
383

    
384
			titleString = title.getValue();
385

    
386
			break;
387
		}
388

    
389
        //  pubtitle
390
        buff += getStringField(titleString);
391
        // date of acceptance CHANGED THIS TO DATE FORMAT
392
        buff += getStringDateField(metadata.getDateofacceptance().getValue());
393

    
394
        // publisher
395
        buff += getStringField(metadata.getPublisher().getValue());
396

    
397

    
398
        //PID
399
        String pids = new String();
400
        for (StructuredProperty p : data.getPidList()) {
401
            pids += clean(p.getValue()) + SEPERATOR;
402
        }
403
        buff += getMultipleStringField(pids);
404

    
405
        //language
406
        buff += getStringField(metadata.getLanguage().getClassid());
407

    
408
        // RelevantDate
409
        String reldate = new String();
410

    
411
        for (StructuredProperty p : metadata.getRelevantdateList()) {
412
            reldate += p.getValue();
413
            break;
414
        }
415

    
416
        buff += getStringDateField(reldate);
417

    
418
        //Subject
419
        String subjects = new String();
420
        for (StructuredProperty subj : metadata.getSubjectList()) {
421

    
422
            if (subj.getValue() != null && !subj.getValue().isEmpty()) {
423
                subjects += clean(subj.getValue()) + SEPERATOR;
424

    
425
            }
426
        }
427

    
428
        buff += getMultipleStringField(subjects);
429

    
430
        //TODO ExternalReference
431

    
432
        buff += getStringField(" ");
433

    
434
        //Source
435
        String source = new String();
436
        for (StringField s : metadata.getSourceList()) {
437
            source += clean(s.getValue()) + SEPERATOR;
438
        }
439

    
440
        buff += getMultipleStringField(source);
441

    
442

    
443
		//TODO Format     
444
		buff += getStringField("");
445

    
446
		//Context
447
		String context = new String();
448
		for (Result.Context s : metadata.getContextList()) {
449
			context += s.getId() + SEPERATOR;
450
		}
451
		buff += getMultipleStringField(context);
452

    
453

    
454
		//country TODO does not exist; throws error
455
		String country = new String();
456

    
457

    
458
        buff += getStringField(country);
459

    
460

    
461
        //Best License
462
        buff += getStringField(getBestLicense(result));
463
        //Description
464
        String description = new String();
465

    
466
        for (StringField desc : metadata.getDescriptionList()) {
467
            description += desc;
468
            break;
469
        }
470

    
471
		buff += getStringField(description);
472
		//Journal  
473
		buff += getStringField(metadata.getJournal().getName());  //#null#!
474

    
475

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

    
478

    
479
        // TODO isRelatedTo
480

    
481
        //   resource type
482
        buff += getStringField(metadata.getResourcetype().getClassname());
483
        //   device
484
        buff += getStringField(metadata.getDevice().getValue());
485
        //   size
486
        buff += getStringField(metadata.getSize().getValue());
487
        //     version
488
        buff += getStringField(metadata.getVersion().getValue());
489

    
490
        //   metadata update
491
        buff += getStringDateField(metadata.getLastmetadataupdate().getValue());
492
        //   metadata version
493
        buff += getStringField(metadata.getMetadataversionnumber().getValue());
494

    
495

    
496
        // year
497
        buff += getYearInt(metadata.getDateofacceptance().getValue());
498

    
499
        // type
500
        buff += getStringField(metadata.getResulttype().getClassname());
501

    
502

    
503
        buff += getTrust(data);
504

    
505

    
506
        return buff;
507
    }
508

    
509

    
510
    private String buildProject(OafEntity data) {
511

    
512

    
513
        Project project = data.getProject();
514
        eu.dnetlib.data.proto.ProjectProtos.Project.Metadata metadata = project.getMetadata();
515

    
516

    
517
        String buff = getHeader(data);
518

    
519

    
520
        //Code
521
        buff += getStringField(metadata.getCode().getValue());
522
        // `Websiteurl`,
523
        buff += getStringField(metadata.getWebsiteurl().getValue());
524

    
525

    
526
        // `Acronym`,
527
        buff += getStringField(metadata.getAcronym().getValue());
528

    
529
        //Titlem
530
        buff += getStringField(metadata.getTitle().getValue());
531

    
532
        // Startdate
533
        buff += getNumericField(metadata.getStartdate().getValue());
534

    
535
        // Enddate
536
        buff += getNumericField(metadata.getEnddate().getValue());
537

    
538
        //`Call identifer`
539
        buff += getStringField(metadata.getCallidentifier().getValue());
540

    
541
        //`KeyWords`
542
        buff += getStringField(metadata.getKeywords().getValue());
543

    
544
        //`Duration`
545
        buff += getStringField(metadata.getDuration().getValue());
546

    
547
        //esc39
548
        buff += getStringField(metadata.getEcsc39().getValue().toString());
549

    
550
        //`Contracttype`
551
        buff += getStringField(metadata.getContracttype().getClassname());
552

    
553
        //`OA mandate pubs`  TODO DOES NOT EXIST
554
        buff += getStringField(metadata.getOamandatepublications().getValue());
555
        // buff += getStringField("");
556

    
557
        //`Subjects` TODO DOES NOT EXIST EITHER
558
        String subjects = new String();
559
        for (StructuredProperty s : metadata.getSubjectsList()) {
560

    
561
            subjects += clean(s.getValue()) + SEPERATOR;
562
        }
563
        buff += getMultipleStringField(subjects);
564

    
565

    
566
        //`EC293`
567
        buff += getStringField(metadata.getEcarticle293().getValue());
568

    
569

    
570
        List<StringField> fundList = metadata.getFundingtreeList();
571

    
572

    
573
        if (!fundList.isEmpty()) // `funding_lvl0`,
574
        {
575
            //TODO funder + 3 funding levels
576
           /* funder text,
577
            funding_lvl0 text,
578
	        funding_lvl1 text,
579
	        funding_lvl2 text,
580
	        funding_lvl3 text,*/
581
            buff += this.fundingParser.getFundingInfo(fundList.get(0).getValue());
582

    
583
        } else {
584

    
585
            buff += this.fundingParser.getFundingInfo("");
586
        }
587

    
588

    
589
        buff += getTrust(data);
590

    
591
        return buff;
592

    
593
    }
594

    
595

    
596
    private String buildPerson(OafEntity data) {
597

    
598
        PersonProtos.Person person = data.getPerson();
599
        eu.dnetlib.data.proto.PersonProtos.Person.Metadata metadata = person.getMetadata();
600

    
601
        String buff = getHeader(data);
602

    
603

    
604
        // `firstname`,
605
        buff += getStringField(metadata.getFirstname().getValue());
606

    
607
        // `secondNames`,
608

    
609
        String secondNames = new String();
610
        for (StringField s : metadata.getSecondnamesList()) {
611

    
612
            secondNames += s.getValue() + ' ';
613
        }
614

    
615
        buff += getStringField(secondNames);
616

    
617
        // `fullname`,
618
        buff += getStringField(metadata.getFullname().getValue());
619
        // `Fax`,
620
        buff += getStringField(metadata.getFax().getValue());
621
        // `Email`,
622
        buff += getStringField(metadata.getEmail().getValue());
623
        // `Phone`,
624
        buff += getStringField(metadata.getPhone().getValue());
625

    
626
        // `Nationality`,
627
        buff += getStringField(metadata.getNationality().getClassid());
628

    
629
        // `PIDS`,
630
        String pids = new String();
631
        for (StructuredProperty s : data.getPidList()) {
632

    
633
            pids += s.getValue() + ";";
634

    
635

    
636
        }
637
        buff += getStringField(pids);
638

    
639

    
640
        buff += getTrust(data);
641

    
642
        return buff;
643

    
644
    }
645

    
646

    
647
    private ArrayList<String> getResultDatasources(OafEntity valueEntity) {
648

    
649
        ArrayList<String> buffs = new ArrayList<String>();
650
        Result result = valueEntity.getResult();
651

    
652
        //TODO hosted by
653
        for (Instance instance : (result.getInstanceList())) {
654
            String hostedBy = instance.getHostedby().getKey();
655

    
656
            if (hostedBy != null && !hostedBy.isEmpty()) {
657
                buffs.add(getStringField("resultDatasource") + getStringField("result") + getStringField(cleanId(valueEntity.getId())) + getStringField("datasource") + getStringField(hostedBy));
658
            }
659
        }
660

    
661
        //TODO  collected froms
662
        for (FieldTypeProtos.KeyValue collectedFromValue : (valueEntity.getCollectedfromList())) {
663
            String collectedFrom = collectedFromValue.getKey();
664
            if (collectedFrom != null && !collectedFrom.isEmpty())
665
                buffs.add((getStringField("resultDatasource") + getStringField("result") + getStringField(cleanId(valueEntity.getId())) + getStringField("datasource") + getStringField(collectedFrom)));
666

    
667
        }
668
        return buffs;
669

    
670
    }
671

    
672

    
673
    public String cleanId(String value) {
674
        if (value != null) {
675
            //   DO NOT CHANGE THIS: IT REMOVES ID PREFIX ( 5|datacite____::
676

    
677
			// to datacite____:: )
678
			// AND REPLACES OCCURENCES OF DELIM CHARS IN DATA
679
			value = value.replaceFirst(".*\\|", "");
680
			value = value.replace("\n", "");
681
		}
682

    
683
        return value;
684

    
685
    }
686

    
687
    //TODO make them in pairs
688
    private ArrayList<String> getDedups(OafEntity valueEntity) {
689

    
690
        ArrayList<String> buffs = new ArrayList<String>();
691

    
692
        if (!valueEntity.getChildrenList().isEmpty()) {
693

    
694
            String header = getStringField("dedup") + getStringField(valueEntity.getType().name()) + getStringField(cleanId(valueEntity.getId())) + getStringField(valueEntity.getType().name());
695

    
696
            for (OafEntity child : valueEntity.getChildrenList()) {
697
                {
698
                    if (child.getType() == valueEntity.getType()) { // if it is result, then its the deduplication
699

    
700
                        buffs.add(header + getStringField(cleanId(child.getId())));
701

    
702
                    }
703
                }
704
            }
705

    
706
        }
707

    
708
        return buffs;
709

    
710
    }
711

    
712

    
713
    private String getNumericField(String data) {
714
        if (data == null || data.isEmpty() || data.equals("")) {
715
            return NULL_STRING + DELIM;
716
        } else {
717

    
718
            return data + DELIM;
719
        }
720
    }
721

    
722

    
723
    private String getYearInt(String data) {
724
        if (data == null || data.isEmpty() || data.equals("-1")) {
725
            return NULL_STRING + DELIM;
726
        }
727
        String[] split = data.split("-");
728

    
729
        if (split == null || split.length == 0) {
730
            return NULL_STRING + DELIM;
731
        }
732

    
733
        String year = split[0];
734

    
735
        year = cleanNumber(year);
736

    
737
        return year + DELIM;
738

    
739

    
740
    }
741

    
742
    private static String cleanNumber(String number) {
743
        number = number.replaceAll("[^A-Za-z0-9:,____]", "");
744

    
745
        return number;
746
    }
747

    
748

    
749
    private String getStringField(String data) {
750

    
751
        if (data == null || data.isEmpty() || data.equals("")) {
752

    
753
            return NULL_STRING + DELIM;
754
        } else {
755

    
756
            String field = clean(data);
757
            if (field == null) {
758
                return NULL_STRING + DELIM;
759
            } else {
760
                return field + DELIM;
761
            }
762
        }
763
    }
764

    
765

    
766
    private String getMultipleStringField(String data) {
767
        if (data == null || data.isEmpty() || data.equals("")) {
768
            return NULL_STRING + DELIM;
769
        }
770

    
771
        return data + DELIM;
772

    
773
    }
774

    
775
    private String getStringDateField(String data) {
776

    
777
        if (data == null || data.isEmpty() || data.equals("") || data.equals("-1")) {
778

    
779
            return NULL_STRING + DELIM;
780
        }
781
        return data + DELIM;
782

    
783
    }
784

    
785

    
786
    public String getId(OafProtos.Oaf oaf) {
787
        switch (oaf.getKind()) {
788
            case entity:
789

    
790
                return cleanId(oaf.getEntity().getId());
791
            case relation:
792

    
793
                return cleanId(oaf.getRel().getSource());
794

    
795
        }
796
        return null;
797

    
798
    }
799

    
800

    
801
    private String getBestLicense(ResultProtos.Result result) {
802
        FieldTypeProtos.Qualifier bestLicense = null;
803
        LicenseComparator lc = new LicenseComparator();
804
        for (ResultProtos.Result.Instance instance : (result.getInstanceList())) {
805
            if (lc.compare(bestLicense, instance.getLicence()) > 0) {
806
                bestLicense = instance.getLicence();
807
            }
808
        }
809
        if (bestLicense != null) {
810
            return bestLicense.getClassname();
811
        } else {
812
            return null;
813
        }
814
    }
815

    
816

    
817
	private String clean(String value) {
818
		if (value != null) {
819
			// TODO DO NOT CHANGE THIS: IT REMOVES ID PREFIX ( 5|datacite____::
820
			// to datacite____:: )
821
			// AND REPLACES OCCURENCES OF DELIM CHARS IN DATA
822
			value = value.replaceFirst(".*\\|", "");
823
			value = value.replaceAll("[\"\\r\\\\;]", "");
824
			value=value.replace(SEPERATOR," ");
825
			value = value.replaceAll("[^a-zA-Z0-9 .-_:/]+", "");
826
		}
827

    
828
        return value;
829

    
830
    }
831

    
832

    
833
    public String getDELIM() {
834
        return DELIM;
835
    }
836

    
837
    public void setDELIM(String dELIM) {
838
        DELIM = dELIM;
839
    }
840

    
841

    
842
    public static String getSEPERATOR() {
843
        return SEPERATOR;
844
    }
845

    
846
    public static void setSEPERATOR(String SEPERATOR) {
847
        OldSerializer.SEPERATOR = SEPERATOR;
848
    }
849
}
(5-5/6)