Project

General

Profile

1
package eu.dnetlib.data.mapreduce.hbase.broker.mapping;
2

    
3
import java.util.Collection;
4
import java.util.List;
5
import java.util.stream.Collectors;
6

    
7
import com.google.common.collect.Lists;
8
import eu.dnetlib.broker.objects.OpenAireEventPayload;
9
import eu.dnetlib.data.mapreduce.hbase.broker.OrcidEventFactory;
10
import eu.dnetlib.data.proto.FieldTypeProtos;
11
import eu.dnetlib.data.proto.FieldTypeProtos.StringField;
12
import eu.dnetlib.data.proto.FieldTypeProtos.StructuredProperty;
13
import eu.dnetlib.data.proto.OafProtos.OafEntity;
14
import eu.dnetlib.data.proto.ResultProtos.Result.Instance;
15

    
16
import static eu.dnetlib.data.mapreduce.util.OafHbaseUtils.*;
17

    
18
/**
19
 * Created by alessia on 21/07/16.
20
 */
21
public class HighlightFactory extends ProtoMapping {
22

    
23
	public static OpenAireEventPayload highlightEnrichOa(final OpenAireEventPayload p, final Collection<Instance> instances) {
24
		p.getHighlight().setInstances(mapInstances(instances));
25
		return p;
26
	}
27

    
28
	public static OpenAireEventPayload highlightEnrichPid(final OpenAireEventPayload p, final List<StructuredProperty> pids) {
29
		p.getHighlight().setPids(mapPids(pids));
30
		return p;
31
	}
32

    
33
	public static OpenAireEventPayload highlightEnrichPublicationDate(final OpenAireEventPayload p, final StringField date) {
34
		p.getHighlight().setPublicationdate(getValue(date));
35
		return p;
36
	}
37

    
38
	public static OpenAireEventPayload highlightEnrichAbstract(final OpenAireEventPayload p, final List<StringField> descriptionList) {
39
		p.getHighlight().setAbstracts(listValues(descriptionList));
40
		return p;
41
	}
42

    
43
	public static OpenAireEventPayload highlightEnrichOrcidAuthor(final OpenAireEventPayload p, final FieldTypeProtos.Author author) {
44
		final FieldTypeProtos.Author.Builder authorBuilder = FieldTypeProtos.Author.newBuilder(author);
45
		List<FieldTypeProtos.KeyValue> orcid = authorBuilder.getPidBuilderList().stream()
46
				.filter(pid -> OrcidEventFactory.ORCID_TYPE_MARKER.equals(pid.getKey()))
47
				.map(pid -> pid.build())
48
				.collect(Collectors.toList());
49
		authorBuilder.clearPid().addAllPid(orcid);
50

    
51
		p.getHighlight().getCreators().add(mapValue(authorBuilder.build()));
52
		return p;
53
	}
54

    
55
	public static OpenAireEventPayload highlightEnrichSubject(final OpenAireEventPayload p, final List<StructuredProperty> subjects) {
56
		p.getHighlight().setSubjects(listValues(subjects));
57
		return p;
58
	}
59

    
60
	// TODO: highlight for the following reasons
61
	public static OpenAireEventPayload highlightEnrichProject(final OpenAireEventPayload p, final OafEntity project, final String provenance) {
62
		// TODO: this can wait. Think about generating the openaire string for project links: it will be easier for subscribers to integrate
63
		// it back to their records!
64

    
65
		p.getHighlight().setProjects(Lists.newArrayList(mapRelatedProject(project.getProject())));
66

    
67
		return p;
68
	}
69

    
70
	public static OpenAireEventPayload highlightEnrichSoftware(final OpenAireEventPayload p, final OafEntity software, final String provenance) {
71

    
72
		p.getHighlight().setSoftwares(Lists.newArrayList(mapRelatedSoftware(software.getResult())));
73

    
74
		return p;
75
	}
76

    
77
	public static OpenAireEventPayload highlightEnrichDataset(final OpenAireEventPayload p) {
78
		// TODO: this can wait
79
		return p;
80
	}
81

    
82
	public static OpenAireEventPayload highlightEnrichAuthorPid(final OpenAireEventPayload p) {
83
		// TODO: this can wait
84
		return p;
85
	}
86

    
87
	// Commenting highlights for addition events: the record is new for the subscriber!
88
	/*
89
	 * public static OpenAireEventPayload highlightAddByAffiliation(final OpenAireEventPayload p){ return p; }
90
	 *
91
	 * public static OpenAireEventPayload highlightAddByReference(final OpenAireEventPayload p){ return p; }
92
	 *
93
	 * public static OpenAireEventPayload highlightAddByProject(final OpenAireEventPayload p){ //TODO: this cannot wait return p; }
94
	 */
95

    
96
}
(3-3/5)