Project

General

Profile

1
package eu.dnetlib.data.transform;
2

    
3
import java.util.List;
4
import java.util.Map;
5
import java.util.Map.Entry;
6

    
7
import com.google.common.collect.Lists;
8
import com.google.common.collect.Maps;
9
import com.googlecode.protobuf.format.JsonFormat;
10
import eu.dnetlib.data.graph.model.DNGFDecoder;
11
import eu.dnetlib.data.graph.model.DNGFRowKeyDecoder;
12
import eu.dnetlib.data.mapreduce.util.dao.HBaseTableDAO;
13
import eu.dnetlib.data.proto.DNGFProtos.DNGF;
14
import eu.dnetlib.data.proto.DliFieldTypeProtos;
15
import eu.dnetlib.data.proto.DliProtos;
16
import eu.dnetlib.data.proto.TypeProtos.Type;
17
import eu.dnetlib.dli.proto.DNGFDLISummaryConverter;
18
import org.apache.commons.lang3.StringUtils;
19
import org.apache.commons.logging.Log;
20
import org.apache.commons.logging.LogFactory;
21
import org.junit.Before;
22
import org.junit.Test;
23

    
24
import static eu.dnetlib.data.graph.utils.RelDescriptor.QUALIFIER_SEPARATOR;
25

    
26
/**
27
 * Created by sandro on 2/13/17.
28
 */
29
public class DLIConvertertTest extends AbstractTransformerTest {
30

    
31
	private static final Log log = LogFactory.getLog(DLIConvertertTest.class);
32

    
33
	private Ontologies ontologies;
34

    
35
    @Before
36
    public void setUp() throws Exception {
37
        factory = new XsltRowTransformerFactory();
38
        ontologies = OntologyLoader.loadOntologiesFromCp();
39
    }
40

    
41

    
42
    @Test
43
    public void testLinkPangaeaDLI() throws Exception {
44

    
45
        final List<Row> rows = Lists.newArrayList();
46
        rows.addAll(asRows(loadFromTransformationProfile("dmfdli2hbase.xml"), load("record_dli_dmf.xml")));
47
        rows.addAll(asRows(loadFromTransformationProfile("dmfdli2hbase.xml"), load("record_dli_dmf2.xml")));
48
        rows.addAll(asRows(loadFromTransformationProfile("pmfdli2hbase.xml"), load("record_dli_pmf.xml")));
49
        printAll(mapAll(buildTable(rows)));
50
    }
51

    
52
	private void printAll(final Map<String, DNGFDLISummaryConverter> converters) {
53
		converters.forEach((id, converter) -> log.info(JsonFormat.printToString(converter.convert())));
54
	}
55

    
56
	private Map<String, DNGFDLISummaryConverter> mapAll(final Map<String, Map<String, Map<String, byte[]>>> table) throws Exception {
57
		final Map<String, DNGFDLISummaryConverter> builders = Maps.newHashMap();
58
		for (final Entry<String, Map<String, Map<String, byte[]>>> e : table.entrySet()) {
59
			map(builders, e.getKey(), e.getValue());
60
	    }
61
	    return builders;
62
    }
63

    
64
	private void map(final Map<String, DNGFDLISummaryConverter> converters, final String rowKey, final Map<String, Map<String, byte[]>> row) throws Exception {
65

    
66
		final Type type = DNGFRowKeyDecoder.decode(rowKey).getType();
67

    
68
		final Map<String, byte[]> familyMap = row.get("metadata");
69

    
70
		if (familyMap == null) return;
71

    
72
		final byte[] bodyB = familyMap.get(type.toString());
73

    
74
		if (bodyB != null) {
75
			ensureBuilder(converters, rowKey);
76
			final DNGF mainEntity = DNGFDecoder.decode(
77
					familyMap.get(type.toString()),
78
					DliFieldTypeProtos.completionStatus, DliProtos.completionStatus, DliProtos.resolvedfrom, DliProtos.typedIdentifier).getDNGF();
79

    
80
			converters.get(rowKey).setMainEntity(mainEntity);
81

    
82
			final Map<String, byte[]> rels = row.get("rels");
83

    
84
			rels.forEach((q, v) -> {
85

    
86
				final DNGF.Builder rel = DNGF.newBuilder(HBaseTableDAO.parseProto(v));
87
				rel.getRelBuilder().setCachedTarget(mainEntity.getEntity());
88

    
89
				final String source = rel.getRel().getSource();
90
				final Type sourceType = rel.getRel().getSourceType();
91

    
92
				rel.getRelBuilder().setSource(rel.getRel().getTarget());
93
				rel.getRelBuilder().setSourceType(rel.getRel().getTargetType());
94

    
95
				rel.getRelBuilder().setTarget(source);
96
				rel.getRelBuilder().setTargetType(sourceType);
97

    
98
				final Ontology o = ontologies.get(rel.getRel().getRelType().getSchemeid());
99
				final String inverse = o.inverseOf(rel.getRel().getRelType().getClassid());
100
				rel.getRelBuilder().getRelTypeBuilder().setClassid(inverse).setClassname(inverse);
101

    
102
				final String targetId = StringUtils.substringAfter(q, QUALIFIER_SEPARATOR);
103

    
104
				ensureBuilder(converters, targetId);
105
				converters.get(targetId).addRelation(rel.build());
106
			});
107
		}
108

    
109
	}
110

    
111
	private void ensureBuilder(final Map<String, DNGFDLISummaryConverter> builders, final String rowKey) {
112
		if (!builders.containsKey(rowKey)) {
113
			builders.put(rowKey, new DNGFDLISummaryConverter());
114
		}
115
	}
116

    
117
}
(2-2/5)