Project

General

Profile

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

    
3
import java.io.StringReader;
4
import java.util.Collection;
5
import java.util.List;
6
import java.util.Map;
7
import java.util.stream.Collectors;
8

    
9
import com.google.common.collect.Iterables;
10
import com.google.common.collect.Maps;
11
import eu.dnetlib.broker.objects.*;
12
import eu.dnetlib.broker.objects.Journal;
13
import eu.dnetlib.data.proto.FieldTypeProtos;
14
import eu.dnetlib.data.proto.FieldTypeProtos.*;
15
import eu.dnetlib.data.proto.OafProtos.Oaf;
16
import eu.dnetlib.data.proto.OafProtos.OafEntity;
17
import eu.dnetlib.data.proto.ProjectProtos;
18
import eu.dnetlib.data.proto.ResultProtos;
19
import eu.dnetlib.data.proto.ResultProtos.Result;
20
import org.apache.commons.lang.StringUtils;
21
import org.dom4j.Document;
22
import org.dom4j.DocumentException;
23
import org.dom4j.io.SAXReader;
24

    
25
import static eu.dnetlib.data.mapreduce.util.OafHbaseUtils.getKey;
26
import static eu.dnetlib.data.mapreduce.util.OafHbaseUtils.getValue;
27

    
28
/**
29
 * Created by claudio on 22/07/16.
30
 */
31
public abstract class ProtoMapping {
32

    
33
	protected static List<Instance> mapInstances(final Collection<Result.Instance> in) {
34
		return in.stream()
35
				.map(i -> new Instance()
36
						.setHostedby(getValue(i.getHostedby()))
37
						.setInstancetype(getValue(i.getInstancetype()))
38
						.setLicense(getKey(i.getAccessright()))
39
						.setUrl(Iterables.getFirst(i.getUrlList(), "")))
40
				.collect(Collectors.toList());
41
	}
42

    
43
	protected static List<Pid> mapPids(final List<StructuredProperty> sp) {
44
		return sp.stream()
45
				.map(s -> new Pid().setType(s.getQualifier().getClassid()).setValue(s.getValue()))
46
				.collect(Collectors.toList());
47
	}
48

    
49
	protected static Journal mapJournal(final FieldTypeProtos.Journal j) {
50
		return new eu.dnetlib.broker.objects.Journal()
51
				.setName(j.getName())
52
				.setIssn(j.getIssnPrinted())
53
				.setEissn(j.getIssnOnline())
54
				.setLissn(j.getIssnLinking());
55
	}
56

    
57
	protected static List<ExternalReference> mapExternalRefs(final List<Result.ExternalReference> ext) {
58
		return ext.stream()
59
				.map(e -> new ExternalReference()
60
						.setUrl(e.getUrl())
61
						.setType(getKey(e.getQualifier()))
62
						.setRefidentifier(e.getRefidentifier())
63
						.setSitename(e.getSitename()))
64
				.collect(Collectors.toList());
65
	}
66

    
67
	protected static final List<Project> mapRelatedProjects(final OafEntity entity) {
68

    
69
		final Map<String, Oaf> projectMap = Maps.newHashMap();
70
		for(Oaf rel : entity.getCachedOafRelList()) {
71
			final OafEntity p = rel.getRel().getCachedOafTarget().getEntity();
72
			projectMap.put(p.getId(), Oaf.newBuilder(rel).build());
73
		}
74

    
75
		return projectMap.values().stream()
76
				.map(o -> mapRelatedProject(o.getRel().getCachedOafTarget().getEntity().getProject()))
77
				.collect(Collectors.toList());
78
	}
79

    
80
	protected static final Project mapRelatedProject(final ProjectProtos.Project project) {
81
		final Project p = new Project();
82
		final ProjectProtos.Project.Metadata mp = project.getMetadata();
83

    
84
		p.setCode(getValue(mp.getCode()));
85
		p.setAcronym(getValue(mp.getAcronym()));
86
		p.setTitle(getValue(mp.getTitle()));
87

    
88
		final String ftree = getValue(mp.getFundingtreeList());
89
		if (StringUtils.isNotBlank(ftree)) {
90
			try {
91
				final Document fdoc = new SAXReader().read(new StringReader(ftree));
92
				p.setFunder(fdoc.valueOf("/fundingtree/funder/shortname"));
93
				p.setJurisdiction(fdoc.valueOf("/fundingtree/funder/jurisdiction"));
94
				p.setFundingProgram(fdoc.valueOf("//funding_level_0/name"));
95
			} catch (final DocumentException e) {
96
				throw new RuntimeException(e);
97
			}
98
		}
99
		//System.out.println("ProtoMapping.mapRelatedProjects project = " + project.toJSON());
100
		return p;
101
	}
102

    
103
	protected static final List<Software> mapRelatedSoftwares(final OafEntity entity) {
104
		final Map<String, Oaf> softwareMap = Maps.newHashMap();
105
		for(Oaf rel : entity.getCachedOafRelList()) {
106
			final OafEntity p = rel.getRel().getCachedOafTarget().getEntity();
107
			softwareMap.put(p.getId(), Oaf.newBuilder(rel).build());
108
		}
109

    
110
		return softwareMap.values().stream()
111
				.map(o -> mapRelatedSoftware(o.getRel().getCachedOafTarget().getEntity().getResult()))
112
				.collect(Collectors.toList());
113
	}
114

    
115
	protected static final Software mapRelatedSoftware(final ResultProtos.Result result) {
116
		final Software s = new Software();
117
		final ResultProtos.Result.Metadata rp = result.getMetadata();
118

    
119
		s.setName(getValue(rp.getTitleList()));
120
		s.setDescription(getValue(rp.getDescriptionList()));
121
		s.setLandingPage(getValue(rp.getCodeRepositoryUrl()));
122

    
123
		if (result.getInstanceList() != null && result.getInstanceList().size() > 0) {
124
			s.setRepository(getValue(result.getInstanceList().get(0).getUrlList()));
125
		}
126

    
127
		//System.out.println("ProtoMapping.mapRelatedProjects project = " + project.toJSON());
128
		return s;
129
	}
130
}
(5-5/5)