Project

General

Profile

1 26600 sandro.lab
package eu.dnetlib.data.transform;
2
3 57397 michele.ar
import static org.junit.Assert.assertFalse;
4
import static org.junit.Assert.assertNotNull;
5
import static org.junit.Assert.assertTrue;
6
7
import java.io.BufferedReader;
8
import java.io.IOException;
9
import java.io.InputStream;
10
import java.io.InputStreamReader;
11
import java.io.StringReader;
12
import java.io.UnsupportedEncodingException;
13
import java.util.ArrayList;
14
import java.util.HashMap;
15
import java.util.Iterator;
16
import java.util.List;
17
import java.util.Map;
18 30967 claudio.at
import java.util.Map.Entry;
19 57397 michele.ar
import java.util.Set;
20 35746 alessia.ba
import java.util.zip.GZIPInputStream;
21 57397 michele.ar
22 30967 claudio.at
import javax.xml.transform.TransformerConfigurationException;
23
import javax.xml.transform.TransformerFactoryConfigurationError;
24
25 57397 michele.ar
import org.apache.commons.io.IOUtils;
26
import org.apache.commons.lang.StringUtils;
27
import org.apache.commons.logging.Log;
28
import org.apache.commons.logging.LogFactory;
29
import org.dom4j.Document;
30
import org.dom4j.DocumentException;
31
import org.dom4j.io.SAXReader;
32
import org.json.JSONObject;
33
import org.junit.Before;
34
import org.junit.Ignore;
35
import org.junit.Test;
36
import org.springframework.core.io.ByteArrayResource;
37
import org.springframework.core.io.Resource;
38
39 44483 claudio.at
import com.google.common.base.Function;
40
import com.google.common.collect.Iterables;
41 31997 claudio.at
import com.google.common.collect.Lists;
42 30967 claudio.at
import com.google.common.collect.Maps;
43 38025 claudio.at
import com.google.common.collect.Sets;
44 26600 sandro.lab
import com.google.protobuf.InvalidProtocolBufferException;
45 53408 claudio.at
import com.googlecode.protobuf.format.JsonFormat;
46 55177 alessia.ba
import com.googlecode.protobuf.format.JsonFormat.ParseException;
47 57397 michele.ar
48 53408 claudio.at
import eu.dnetlib.actionmanager.actions.ActionFactory;
49
import eu.dnetlib.actionmanager.actions.XsltInfoPackageAction;
50
import eu.dnetlib.actionmanager.common.Agent;
51
import eu.dnetlib.actionmanager.common.Operation;
52
import eu.dnetlib.actionmanager.common.Provenance;
53 57397 michele.ar
import eu.dnetlib.data.mapreduce.hbase.index.config.Context;
54
import eu.dnetlib.data.mapreduce.hbase.index.config.ContextMapper;
55
import eu.dnetlib.data.mapreduce.hbase.index.config.EntityConfigTable;
56
import eu.dnetlib.data.mapreduce.hbase.index.config.IndexConfig;
57
import eu.dnetlib.data.mapreduce.hbase.index.config.IndexConfigTest;
58
import eu.dnetlib.data.mapreduce.hbase.index.config.LinkDescriptor;
59
import eu.dnetlib.data.mapreduce.hbase.index.config.RelClasses;
60
import eu.dnetlib.data.mapreduce.hbase.index.config.RelClassesTest;
61
import eu.dnetlib.data.mapreduce.util.OafDecoder;
62
import eu.dnetlib.data.mapreduce.util.OafRowKeyDecoder;
63
import eu.dnetlib.data.mapreduce.util.RelDescriptor;
64
import eu.dnetlib.data.mapreduce.util.UpdateMerger;
65
import eu.dnetlib.data.mapreduce.util.XmlRecordFactory;
66
import eu.dnetlib.data.mapreduce.util.XmlRecordFactoryTest;
67 26600 sandro.lab
import eu.dnetlib.data.proto.KindProtos.Kind;
68
import eu.dnetlib.data.proto.OafProtos.Oaf;
69 30967 claudio.at
import eu.dnetlib.data.proto.TypeProtos.Type;
70 26600 sandro.lab
import eu.dnetlib.miscutils.functional.xml.IndentXmlString;
71
72
public class XsltRowTransformerFactoryTest {
73
74 40063 alessia.ba
	private static final Log log = LogFactory.getLog(XsltRowTransformerFactoryTest.class);
75 52562 alessia.ba
	private static String basePathProfiles = "/eu/dnetlib/test/profiles/TransformationRuleDSResources/TransformationRuleDSResourceType/2hbase/";
76 26600 sandro.lab
	private XsltRowTransformerFactory factory;
77 30967 claudio.at
	private EntityConfigTable entityConfigTable;
78 26600 sandro.lab
79
	@Before
80
	public void setUp() throws Exception {
81
		factory = new XsltRowTransformerFactory();
82 30967 claudio.at
		entityConfigTable = IndexConfig.load(IndexConfigTest.config).getConfigMap();
83 26600 sandro.lab
	}
84
85
	@Test
86 48702 claudio.at
	@Ignore // need to reimplement because claimUpdates_2_hbase.xsl was removed
87 42534 alessia.ba
	public void testParseOafClaimUpdate() throws Exception {
88
		doTest(loadFromTransformationProfile("claimUpdates_2_hbase.xsl"), load("recordClaimUpdate.xml"));
89
	}
90
91
	@Test
92 48702 claudio.at
	@Ignore // need to reimplement because claimUpdates_2_hbase.xsl was removed
93 39616 claudio.at
	public void testParseClaimUpdate() throws Exception {
94
95 41468 claudio.at
		final List<Row> rows = Lists.newArrayList();
96
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordClaim.xml")));
97
		rows.addAll(asRows(loadFromTransformationProfile("claimUpdates_2_hbase.xsl"), load("recordClaimUpdate.xml")));
98
99
		printAll(mapAll(buildTable(rows)));
100 39616 claudio.at
	}
101
102
	@Test
103 52543 alessia.ba
	public void testParseClaimRel() throws Exception {
104
105
		doTest(loadFromTransformationProfile("claimRels_2_hbase.xml"), load("recordClaimRel.xml"));
106
	}
107
108
	@Test
109 49718 claudio.at
	public void testParseFp7IctPUB() throws Exception {
110
111
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("ec_fp7_ict.xml"));
112
	}
113
114
	@Test
115 52524 claudio.at
	public void testParseRecordCrossref() throws Exception {
116
117
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("recordCrossref.xml"));
118
	}
119
120
	@Test
121 38586 claudio.at
	public void testParseDatasetPUB() throws Exception {
122
123 40063 alessia.ba
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordDatasetPUB.xml"));
124 38586 claudio.at
	}
125
126
	@Test
127 52422 claudio.at
	public void testParseSoftwareEgiApp() throws Exception {
128
129
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("softwareEgiApp.xml"));
130
	}
131
132
	@Test
133
	public void testParseSoftwareEgiApp2() throws Exception {
134
135
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("softwareEgiApp2.xml"));
136
	}
137
138
	@Test
139
	public void testParseOrpEgiApp() throws Exception {
140
141
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("orpEgiApp.xml"));
142
	}
143
144
	@Test
145 55099 alessia.ba
	public void testParseSoftwareDOECODE() throws Exception {
146
147
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("doecode.xml"));
148
	}
149
150
	@Test
151 48854 claudio.at
	public void testParseDatasetLindat() throws Exception {
152
153
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("datasetLindat.xml"));
154
	}
155
156
	@Test
157 53362 miriam.bag
	public void testParseDatasetNeuroVault() throws Exception {
158
159
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordNeuroVault.xml"));
160
	}
161
162
	@Test
163 55182 alessia.ba
	public void testParseDatasetNeuroVault2() throws Exception {
164
165
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordNeuroVault2.xml"));
166
	}
167
168
	@Test
169 31997 claudio.at
	public void testParseClaim() throws Exception {
170 26600 sandro.lab
171 40063 alessia.ba
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("recordClaim.xml"));
172 30967 claudio.at
	}
173 26600 sandro.lab
174 30967 claudio.at
	@Test
175 55093 alessia.ba
	public void testParseClaimDedup() throws Exception {
176
177
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("recordClaimedDedup.xml"));
178
	}
179
180
	@Test
181 42825 alessia.ba
	public void testParseClaimDataset() throws Exception {
182
183
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordClaimDataset.xml"));
184
	}
185
186
	@Test
187 39431 claudio.at
	public void testParseACM() throws Exception {
188
189 40063 alessia.ba
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("recordACM.xml"));
190 39431 claudio.at
	}
191
192
	@Test
193 39616 claudio.at
	public void testParseASB() throws Exception {
194
195 40063 alessia.ba
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("recordASB.xml"));
196 39616 claudio.at
	}
197
198
	@Test
199 33382 claudio.at
	public void testParseProjectCorda() throws Exception {
200 26600 sandro.lab
201 40205 claudio.at
		doTest(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordCorda.xml"));
202 26600 sandro.lab
	}
203
204
	@Test
205 33382 claudio.at
	public void testParseProjectFCT() throws Exception {
206
207 40205 claudio.at
		doTest(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordFCT.xml"));
208 33382 claudio.at
	}
209
210
	@Test
211 57758 alessia.ba
	public void testParseProjectWithSummaryAndAmount() throws Exception {
212
213
		doTest(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectWithSummaryAndAmount.xml"));
214
	}
215
216
	@Test
217
	public void testLinkOrganizationWithBudget() throws Exception {
218
219
		final List<Row> rows = Lists.newArrayList();
220
		rows.addAll(asRows(loadFromTransformationProfile("organizations_2_hbase.xsl"), load("organization.xml")));
221
		rows.addAll(asRows(loadFromTransformationProfile("projectorganization_2_hbase.xsl"), load("project_org_budget.xml")));
222
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectWithSummaryAndAmount.xml")));
223
224
		printAll(mapAll(buildTable(rows)));
225
	}
226
227
228
	@Test
229 40205 claudio.at
	public void testParseOaf() throws Exception {
230 26600 sandro.lab
231 40063 alessia.ba
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("record.xml"));
232 30967 claudio.at
	}
233 26600 sandro.lab
234 30967 claudio.at
	@Test
235 40205 claudio.at
	public void testParseOafPublication() throws Exception {
236
237 52980 alessia.ba
		doTest(loadFromTransformationProfile("oaf_entity2hbase.xml"), load("record.xml"));
238 40205 claudio.at
	}
239
240
	@Test
241 43558 claudio.at
	public void testParseLindat() throws Exception {
242
243
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordLindat.xml"));
244
	}
245
246
	@Test
247 31997 claudio.at
	public void testParseDatacite() throws Exception {
248 26600 sandro.lab
249 40063 alessia.ba
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordDatacite.xml"));
250 30967 claudio.at
	}
251 26600 sandro.lab
252 31997 claudio.at
	@Test
253 33382 claudio.at
	public void testParseDatacite2() throws Exception {
254
255 40063 alessia.ba
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("recordDatacite2.xml"));
256 33382 claudio.at
	}
257
258
	@Test
259 55263 alessia.ba
	public void testParseDataciteNewES() throws Exception {
260
261
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("dataciteNew.xml"));
262
	}
263
264
	@Test
265 57775 alessia.ba
	public void testParseDatacite2hostedby() throws Exception {
266
267
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("datacite2hostedby.xml"));
268
	}
269
270
	@Test
271 42495 alessia.ba
	public void testParseOpenTrials() throws Exception {
272
273
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("opentrials_datacite1.xml"));
274
	}
275
276
	@Test
277 32094 claudio.at
	public void testLinkPangaea() throws Exception {
278 26600 sandro.lab
279 34438 claudio.at
		final List<Row> rows = Lists.newArrayList();
280 40205 claudio.at
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("pangaeODF1.xml")));
281
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("pangaeODF2.xml")));
282 40063 alessia.ba
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("pangaeOAF.xml")));
283 40205 claudio.at
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordCordaPangaea.xml")));
284 31997 claudio.at
285 38025 claudio.at
		printAll(mapAll(buildTable(rows)));
286 31997 claudio.at
	}
287
288 33382 claudio.at
	@Test
289 57186 sandro.lab
	public void testODF() throws Exception {
290
291
		final List<Row> rows = Lists.newArrayList();
292
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("odf.xml")));
293 57397 michele.ar
		// printAll(mapAll(buildTable(rows)));
294 57186 sandro.lab
	}
295
296
	@Test
297 43795 alessia.ba
	public void testPangaea() throws Exception {
298
299
		final List<Row> rows = Lists.newArrayList();
300
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("pangaeOAF2.xml")));
301
		printAll(mapAll(buildTable(rows)));
302
	}
303 57397 michele.ar
304 45034 alessia.ba
	@Test
305
	public void testZenodo() throws Exception {
306 43795 alessia.ba
307 45034 alessia.ba
		final List<Row> rows = Lists.newArrayList();
308
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("zenodoData.xml")));
309
		printAll(mapAll(buildTable(rows)));
310
	}
311
312 43795 alessia.ba
	@Test
313 52193 alessia.ba
	public void testZenodoSoftware() throws Exception {
314
315
		final List<Row> rows = Lists.newArrayList();
316
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("softwareZenodo_odf.xml")));
317
		printAll(mapAll(buildTable(rows)));
318
	}
319
320
	@Test
321 35179 michele.ar
	public void testLinkCorda() throws Exception {
322
323
		final List<Row> rows = Lists.newArrayList();
324 40205 claudio.at
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordCorda.xml")));
325 40063 alessia.ba
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordCorda.xml")));
326 35179 michele.ar
327 38025 claudio.at
		printAll(mapAll(buildTable(rows)));
328 35179 michele.ar
	}
329
330
	@Test
331 33382 claudio.at
	public void testLinkFCT() throws Exception {
332
333 34438 claudio.at
		final List<Row> rows = Lists.newArrayList();
334 40205 claudio.at
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordFCT.xml")));
335 40063 alessia.ba
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordFCT.xml")));
336 33382 claudio.at
337 38025 claudio.at
		printAll(mapAll(buildTable(rows)));
338 33382 claudio.at
	}
339
340
	@Test
341 41468 claudio.at
	public void testLinkARC() throws Exception {
342
343
		final List<Row> rows = Lists.newArrayList();
344
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordARC.xml")));
345
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordARC.xml")));
346
347
		printAll(mapAll(buildTable(rows)));
348
	}
349
350
	@Test
351 33382 claudio.at
	public void testLinkWT() throws Exception {
352
353 34438 claudio.at
		final List<Row> rows = Lists.newArrayList();
354 40205 claudio.at
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordWT.xml")));
355 40063 alessia.ba
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordWT.xml")));
356 33382 claudio.at
357 38025 claudio.at
		printAll(mapAll(buildTable(rows)));
358 33382 claudio.at
	}
359
360 34438 claudio.at
	@Test
361
	public void testLinkOrganization() throws Exception {
362
363
		final List<Row> rows = Lists.newArrayList();
364 40205 claudio.at
		rows.addAll(asRows(loadFromTransformationProfile("organizations_2_hbase.xsl"), load("organization.xml")));
365
		rows.addAll(asRows(loadFromTransformationProfile("projectorganization_2_hbase.xsl"), load("project_organization.xml")));
366
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordCorda.xml")));
367 34438 claudio.at
368 38025 claudio.at
		printAll(mapAll(buildTable(rows)));
369 34438 claudio.at
	}
370
371 35746 alessia.ba
	@Test
372 46587 alessia.ba
	public void testLinkOrganizationAffiliation() throws Exception {
373
374
		final List<Row> rows = Lists.newArrayList();
375
		rows.addAll(asRows(loadFromTransformationProfile("organizations_2_hbase.xsl"), load("organization.xml")));
376
		rows.addAll(asRows(loadFromTransformationProfile("resultorganization_2_hbase.xsl"), load("result_organization.xml")));
377
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("record.xml")));
378
379
		printAll(mapAll(buildTable(rows)));
380
	}
381
382
	@Test
383 44483 claudio.at
	public void testDuplicates() throws Exception {
384
		final String mergeId = "50|dedup_wf_001::08ed625d07e5738b794ff14d6773fd9f";
385
		final List<Row> rows = Lists.newArrayList();
386
387 49029 claudio.at
		final Function<Row, Row> f = rowIn -> {
388 44483 claudio.at
389 57397 michele.ar
			final List<Column<String, byte[]>> cols = Lists.newArrayList();
390
			for (final Column<String, byte[]> col : rowIn.getColumns()) {
391 49029 claudio.at
				if (col.getName().equals("body")) {
392
					cols.add(new Column(col.getName(), col.getValue()));
393 44483 claudio.at
394
				}
395
			}
396 49029 claudio.at
			return new Row("result", rowIn.getKey(), cols);
397 44483 claudio.at
		};
398
399
		final List<Row> puma1 = asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordPuma1.xml"), f);
400
		puma1.add(new Row("resultResult_dedup_isMergedIn", mergeId));
401
402
		final List<Row> puma2 = asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordPuma2.xml"), f);
403
		puma2.add(new Row("resultResult_dedup_isMergedIn", mergeId));
404
405
		rows.addAll(puma1);
406
		rows.addAll(puma2);
407
408 57397 michele.ar
		final List<Oaf> duplicates = Lists.newArrayList();
409 44483 claudio.at
		duplicates.add(getOafBody(puma1));
410
		duplicates.add(getOafBody(puma2));
411
		final Oaf.Builder oafMerge = OafEntityMerger.merge(mergeId, duplicates);
412
413 48697 claudio.at
		final Row mergeRow = new Row("result", mergeId, Lists.newArrayList(new Column("body", oafMerge.build().toByteArray())));
414 44483 claudio.at
415
		rows.add(mergeRow);
416
417
		printAll(mapAll(buildTable(rows)));
418
	}
419
420
	private Oaf getOafBody(final List<Row> rows) throws InvalidProtocolBufferException {
421 57397 michele.ar
		for (final Row row : rows) {
422
			if (StringUtils.startsWith(row.getKey(), "50")) { return Oaf.parseFrom(row.getColumn("body").getValue());
423 44483 claudio.at
424
			}
425
		}
426
		return null;
427
	}
428
429
	@Test
430 35746 alessia.ba
	public void testParseDoajOAF() throws Exception {
431
432 40063 alessia.ba
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("doajUniversityRecord.xml"));
433 35746 alessia.ba
	}
434
435 39888 alessia.ba
	@Test
436
	public void testParseDatasource() throws Exception {
437
438 40205 claudio.at
		doTest(loadFromTransformationProfile("datasources_2_hbase.xsl"), load("datasourceNative.xml"));
439 39888 alessia.ba
	}
440 57397 michele.ar
441 44899 alessia.ba
	@Test
442
	public void testParseDatasourcePiwik() throws Exception {
443 39888 alessia.ba
444 44899 alessia.ba
		doTest(loadFromTransformationProfile("datasources_2_hbase.xsl"), load("datasourcePiwik.xml"));
445
	}
446
447 40205 claudio.at
	@Test
448 40341 alessia.ba
	public void testParseDataDatasource() throws Exception {
449
450
		doTest(loadFromTransformationProfile("datasources_2_hbase.xsl"), load("dataDatasource.xml"));
451
	}
452
453
	@Test
454 36164 claudio.at
	public void testFromMongodbCompressedDump() throws Exception {
455 40063 alessia.ba
		doTestJsonGz(loadFromTransformationProfile("oaf2hbase.xml"), load("mdstore_cleaned.json.gz"));
456 35746 alessia.ba
	}
457
458 40205 claudio.at
	@Test
459
	public void testLoadFromTransformationProfile() throws IOException {
460 57397 michele.ar
		final InputStream in = loadFromTransformationProfile("oaf2hbase.xml");
461 40205 claudio.at
		log.info(IOUtils.toString(in));
462
	}
463
464
	@Test
465
	public void test_template() throws Exception {
466
		final String xslt = IOUtils.toString(loadFromTransformationProfile("oaf2hbase.xml"));
467
		final XsltRowTransformer transformer = factory.getTransformer(xslt);
468
		assertNotNull(transformer);
469
470
		final String record = IOUtils.toString(load("record.xml"));
471
		final List<Row> rows = transformer.apply(record);
472
473
		System.out.println(rows);
474
	}
475
476
	@Test
477
	public void testWrongCharsOrganization() throws Exception {
478
		final List<Row> rows = Lists.newArrayList();
479
		rows.addAll(asRows(loadFromTransformationProfile("organizations_2_hbase.xsl"), load("organizationWrongChars.xml")));
480
		printAll(mapAll(buildTable(rows)));
481
	}
482
483 43169 alessia.ba
	@Test
484
	public void testParseProjectWithFunderOriginalName() throws Exception {
485
486
		doTest(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectWithFunderOriginalName.xml"));
487
	}
488 57397 michele.ar
489 43169 alessia.ba
	@Test
490
	public void testLinkFunderOriginalName() throws Exception {
491
492
		final List<Row> rows = Lists.newArrayList();
493
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectWithFunderOriginalName.xml")));
494
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordFunderOriginalName.xml")));
495
496
		printAll(mapAll(buildTable(rows)));
497
	}
498
499 44070 alessia.ba
	@Test
500
	public void testProjectExtraInfo() throws Exception {
501
		final List<Row> rows = Lists.newArrayList();
502
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordExtraInfo.xml")));
503
		printAll(mapAll(buildTable(rows)));
504
	}
505
506 48697 claudio.at
	@Test
507
	public void testParseSoftwareFromODF() throws Exception {
508
		final List<Row> rows = Lists.newArrayList();
509
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("softwareODF.xml")));
510
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordCorda.xml")));
511
		printAll(mapAll(buildTable(rows)));
512
	}
513
514 52212 alessia.ba
	@Test
515 48697 claudio.at
	public void testParseSoftwareFromOAF() throws Exception {
516
		final List<Row> rows = Lists.newArrayList();
517 52212 alessia.ba
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordOAFsoftwareCLOSED.xml")));
518 48697 claudio.at
		printAll(mapAll(buildTable(rows)));
519
	}
520
521 52212 alessia.ba
	@Test
522 54978 alessia.ba
	public void testParsePubFromODF() throws Exception {
523
		final List<Row> rows = Lists.newArrayList();
524
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("recordODFPub.xml")));
525
		printAll(mapAll(buildTable(rows)));
526
	}
527
528
	@Test
529 52212 alessia.ba
	public void testParseSoftwareFromOAFOpen() throws Exception {
530
		final List<Row> rows = Lists.newArrayList();
531
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("recordOAFsoftwareOPEN.xml")));
532
		printAll(mapAll(buildTable(rows)));
533
	}
534
535 52275 alessia.ba
	@Test
536 53756 alessia.ba
	public void testParseSoftwareBiotool() throws Exception {
537
		final List<Row> rows = Lists.newArrayList();
538
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("biotoolSw.xml")));
539
		printAll(mapAll(buildTable(rows)));
540
	}
541
542
	@Test
543 52275 alessia.ba
	public void testParseOafWithExternalRef() throws Exception {
544
		final List<Row> rows = Lists.newArrayList();
545
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("oafWithExternalReference.xml")));
546
		printAll(mapAll(buildTable(rows)));
547
	}
548
549 52277 alessia.ba
	@Test
550
	public void testParseOafWithCommunity() throws Exception {
551
		final List<Row> rows = Lists.newArrayList();
552
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("oafWithCommunity.xml")));
553
		printAll(mapAll(buildTable(rows)));
554
	}
555
556 53408 claudio.at
	@Test
557
	public void testParseOafWithUpdates() throws Exception {
558
		final List<Row> rows = Lists.newArrayList();
559
		rows.addAll(asRows(loadFromTransformationProfile("oaf2hbase.xml"), load("oafWithCommunity.xml")));
560
561 57397 michele.ar
		final ActionFactory actionFactory = new ActionFactory();
562 53408 claudio.at
563 57397 michele.ar
		final Map<String, Resource> xslts = Maps.newHashMap();
564 53408 claudio.at
565
		xslts.put("oaf2hbase", new ByteArrayResource(IOUtils.toString(loadFromTransformationProfile("oaf2hbase.xml")).getBytes()));
566
		actionFactory.setXslts(xslts);
567
568 57397 michele.ar
		final XsltInfoPackageAction pa = actionFactory.generateInfoPackageAction(
569 53408 claudio.at
				"oaf2hbase",
570
				"rawset-id",
571
				new Agent("agent-id", "agent-name", Agent.AGENT_TYPE.algo),
572
				Operation.UPDATE,
573
				IOUtils.toString(load("oafUpdateWithCommunity.xml")),
574
				Provenance.sysimport_mining_aggregator,
575
				"0.9");
576
577
		final String qualifier = "update_" + System.nanoTime();
578
579
		IOUtils.readLines(load("country_updates.json")).forEach(line -> {
580
581 57397 michele.ar
			final Oaf.Builder oaf = Oaf.newBuilder();
582 53408 claudio.at
583
			try {
584
				JsonFormat.merge(line, oaf);
585 57397 michele.ar
			} catch (final JsonFormat.ParseException e) {
586 53408 claudio.at
				throw new IllegalArgumentException(e);
587
			}
588
589 57397 michele.ar
			final Column<String, byte[]> col = new Column<>("update_" + System.nanoTime(), oaf.build().toByteArray());
590 53408 claudio.at
			rows.add(new Row("result", oaf.getEntity().getId(), Lists.newArrayList(col)));
591
		});
592
593
		pa.asAtomicActions().forEach(a -> {
594 57397 michele.ar
			final Column<String, byte[]> col = new Column<>("update_" + System.nanoTime(), a.getTargetValue());
595 53408 claudio.at
			rows.add(new Row(a.getTargetColumnFamily(), a.getTargetRowKey(), Lists.newArrayList(col)));
596
		});
597
598
		/*
599 57397 michele.ar
		 * rows.forEach(r -> { log.info(r); });
600
		 */
601 53408 claudio.at
602
		mapAll(buildTable(rows)).entrySet().forEach(b -> {
603
			log.info(b.getKey());
604
			log.info(b.getValue());
605
		});
606
	}
607
608 54978 alessia.ba
	@Test
609
	public void testParseCrisPub() throws Exception {
610
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("cris_pub1.xml"));
611
	}
612
613 55177 alessia.ba
	@Test
614
	public void testBioToolSwRowJson() throws Exception {
615
		doTestJsonRow(IOUtils.toString(load("biotoolSwRow.json")));
616
	}
617
618 55887 alessia.ba
	@Test
619
	public void testParseVirta() throws Exception {
620
		doTest(loadFromTransformationProfile("datasources_2_hbase.xsl"), load("virta.xml"));
621
	}
622
623
	@Test
624
	public void testParseJournal() throws Exception {
625
		doTest(loadFromTransformationProfile("datasources_2_hbase.xsl"), load("datasourceWithISSN.xml"));
626
	}
627
628 57091 alessia.ba
	@Test
629 57092 alessia.ba
	public void testGuidelines4Qeios() throws Exception {
630 57091 alessia.ba
631
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("guidelines4_qeios1.xml"));
632
	}
633
634 57397 michele.ar
	@Test
635
	public void testGuidelines4Aria() throws Exception {
636 57092 alessia.ba
637 57397 michele.ar
		doTest(loadFromTransformationProfile("odf2hbase.xml"), load("guidelines4_aria.xml"));
638
	}
639 57092 alessia.ba
640 57162 alessia.ba
	@Test
641
	public void testJournalRecord() throws Exception {
642
		doTest(loadFromTransformationProfile("oaf2hbase.xml"), load("journalRecord.xml"));
643
	}
644
645 57203 alessia.ba
	@Test
646
	public void testSygmaDatacite() throws Exception {
647
648
		final List<Row> rows = Lists.newArrayList();
649
		rows.addAll(asRows(loadFromTransformationProfile("odf2hbase.xml"), load("sygma_datacite.xml")));
650
		rows.addAll(asRows(loadFromTransformationProfile("projects_2_hbase.xsl"), load("projectRecordCorda.xml")));
651
652
		printAll(mapAll(buildTable(rows)));
653
	}
654
655 57397 michele.ar
	@Test
656
	public void testOpenOrganizations() throws Exception {
657
658
		final List<Row> rows = Lists.newArrayList();
659
		rows.addAll(asRows(loadFromTransformationProfile("organizations_2_hbase.xsl"), load("openorgs_sample.xml")));
660
661
		printAll(mapAll(buildTable(rows)));
662
	}
663
664 55177 alessia.ba
	private void doTestJsonRow(final String json) throws Exception {
665 57397 michele.ar
		final Row row = asRowFromJson(json);
666 55177 alessia.ba
		log.info(row);
667 57397 michele.ar
		final List<Row> rows = new ArrayList<>();
668 55177 alessia.ba
		rows.add(row);
669
		final Map<String, Map<String, Map<String, byte[]>>> table = buildTable(rows);
670
		final Map<String, XmlRecordFactory> builders = mapAll(table);
671
		printAll(builders);
672
673
	}
674
675 31997 claudio.at
	private void doTest(final InputStream xsltStream, final InputStream recordStream) throws Exception {
676
		try {
677 34438 claudio.at
			final List<Row> rows = asRows(xsltStream, recordStream);
678 31997 claudio.at
679 40063 alessia.ba
			log.info(rows);
680 26600 sandro.lab
681 34438 claudio.at
			final Map<String, Map<String, Map<String, byte[]>>> table = buildTable(rows);
682 26600 sandro.lab
683 30967 claudio.at
			// System.out.println("\n" + table.toString());
684 26600 sandro.lab
685 34438 claudio.at
			final Map<String, XmlRecordFactory> builders = mapAll(table);
686 28094 claudio.at
687 38025 claudio.at
			printAll(builders);
688 34438 claudio.at
		} catch (final InvalidProtocolBufferException e) {
689 31997 claudio.at
			throw new Exception(e);
690 34438 claudio.at
		} catch (final TransformerConfigurationException e) {
691 31997 claudio.at
			throw new Exception(e);
692 34438 claudio.at
		} catch (final TransformerFactoryConfigurationError e) {
693 31997 claudio.at
			throw new Exception(e);
694 34438 claudio.at
		} catch (final DocumentException e) {
695 31997 claudio.at
			throw new Exception(e);
696 26600 sandro.lab
		}
697
	}
698
699 35746 alessia.ba
	private void doTestJsonGz(final InputStream xsltStream, final InputStream recordStream) throws Exception {
700
701 36164 claudio.at
		final Iterator<List<Row>> rowsIterator = asRowsJsonGzip(xsltStream, recordStream);
702 35746 alessia.ba
703 36164 claudio.at
		int i = 0;
704
		while (rowsIterator.hasNext()) {
705
			final List<Row> rows = rowsIterator.next();
706
			i++;
707 35746 alessia.ba
708 57397 michele.ar
			if (i % 10000 == 0) {
709 36164 claudio.at
				System.out.println(i);
710
			}
711 35746 alessia.ba
712 36164 claudio.at
			final Map<String, Map<String, Map<String, byte[]>>> table = buildTableDoaj(rows);
713 35746 alessia.ba
714 36164 claudio.at
			for (final Map<String, Map<String, byte[]>> m : table.values()) {
715
				for (final Map<String, byte[]> mv : m.values()) {
716
					for (final byte[] v : mv.values()) {
717
						final OafDecoder d = OafDecoder.decode(v);
718
						assertNotNull(d);
719
						assertNotNull(d.getOaf());
720
721
						switch (d.getKind()) {
722
						case entity:
723
							assertNotNull(d.getMetadata());
724
							if (d.getOaf().getEntity().getType().equals(Type.result)) {
725
								System.out.println(d.getOaf());
726
							}
727
							break;
728
						case relation:
729
							assertNotNull(d.getRel());
730
							break;
731
						default:
732
							break;
733
						}
734
					}
735
				}
736 35746 alessia.ba
			}
737
		}
738
	}
739
740 44483 claudio.at
	private List<Row> asRows(final InputStream xsltStream, final InputStream recordStream, final Function<Row, Row> p) throws Exception {
741 48697 claudio.at
		return asRows(xsltStream, new HashMap<>(), recordStream, p);
742 44483 claudio.at
	}
743
744 31997 claudio.at
	private List<Row> asRows(final InputStream xsltStream, final InputStream recordStream) throws Exception {
745 48697 claudio.at
		return asRows(xsltStream, new HashMap<>(), recordStream);
746 38025 claudio.at
	}
747
748
	private List<Row> asRows(final InputStream xsltStream, final Map<String, Object> params, final InputStream recordStream) throws Exception {
749 44483 claudio.at
		return asRows(xsltStream, params, recordStream, null);
750
	}
751
752 57397 michele.ar
	private List<Row> asRows(final InputStream xsltStream, final Map<String, Object> params, final InputStream recordStream, final Function<Row, Row> p)
753
			throws Exception {
754 34438 claudio.at
		final String xslt = IOUtils.toString(xsltStream);
755 38025 claudio.at
		final XsltRowTransformer transformer = factory.getTransformer(xslt, params);
756 31997 claudio.at
		assertNotNull(transformer);
757 26600 sandro.lab
758 34438 claudio.at
		final String record = IOUtils.toString(recordStream);
759
		final List<Row> rows = transformer.apply(record);
760 31997 claudio.at
761
		assertNotNull(rows);
762
		assertFalse(rows.isEmpty());
763 44483 claudio.at
		return p == null ? rows : Lists.newArrayList(Iterables.transform(rows, p));
764 31997 claudio.at
	}
765
766 35746 alessia.ba
	private Iterator<List<Row>> asRowsJsonGzip(final InputStream xsltStream, final InputStream recordStreamJsonGzip) throws Exception {
767
		final String xslt = IOUtils.toString(xsltStream);
768
		final XsltRowTransformer transformer = factory.getTransformer(xslt);
769
		assertNotNull(transformer);
770
		assertNotNull(recordStreamJsonGzip);
771
772 36164 claudio.at
		final GZIPInputStream stream = new GZIPInputStream(recordStreamJsonGzip);
773 35746 alessia.ba
		assertNotNull(stream);
774
		final BufferedReader inStream = new BufferedReader(new InputStreamReader(stream));
775
		assertNotNull(inStream);
776
		return new Iterator<List<Row>>() {
777
778
			String jsonRecord = null;
779
780
			@Override
781
			public boolean hasNext() {
782
				try {
783
					return (jsonRecord = inStream.readLine()) != null;
784 36164 claudio.at
				} catch (final IOException e) {
785 35746 alessia.ba
					throw new RuntimeException(e);
786
				}
787
			}
788
789
			@Override
790
			public List<Row> next() {
791
792 36164 claudio.at
				final JSONObject jsonObj = new JSONObject(jsonRecord);
793
				final String body = jsonObj.getString("body");
794
				try {
795
					assertTrue(StringUtils.isNotBlank(body));
796
					// System.out.println(body);
797
					final List<Row> rows = transformer.apply(body);
798
					assertNotNull(rows);
799
					assertFalse(rows.isEmpty());
800
					return rows;
801
				} catch (final Throwable e) {
802
					System.err.println("error transforming document: " + body);
803
					throw new RuntimeException(e);
804
				}
805 35746 alessia.ba
			}
806
807
			@Override
808
			public void remove() {
809 43394 claudio.at
				throw new UnsupportedOperationException();
810 35746 alessia.ba
			}
811
812
		};
813
814
	}
815
816
	private Map<String, Map<String, Map<String, byte[]>>> buildTableDoaj(final List<Row> rows) throws UnsupportedEncodingException {
817 34438 claudio.at
		final Map<String, Map<String, Map<String, byte[]>>> table = Maps.newHashMap();
818 31997 claudio.at
819 34438 claudio.at
		for (final Row row : rows) {
820
			final String rowKey = row.getKey();
821
			final String cf = row.getColumnFamily();
822 31997 claudio.at
			if (!table.containsKey(rowKey)) {
823 48697 claudio.at
				table.put(rowKey, new HashMap<>());
824 31997 claudio.at
			}
825
			if (!table.get(rowKey).containsKey(cf)) {
826 48697 claudio.at
				table.get(rowKey).put(row.getColumnFamily(), new HashMap<>());
827 31997 claudio.at
			}
828 34438 claudio.at
			for (final Column<String, byte[]> c : row.getColumns()) {
829 35746 alessia.ba
				// System.out.println(String.format("ADDING K:%s CF:%s Q:%s", rowKey, cf, c.getName()));
830
				table.get(rowKey).get(cf).put(c.getName(), c.getValue());
831
				if (cf.equals("result") && c.getName().equals("body")) {
832 36164 claudio.at
					// System.out.println(String.format("ADDING K:%s CF:%s Q:%s", rowKey, cf, c.getName()));
833 35746 alessia.ba
					assertTrue(StringUtils.isNotBlank(new String(c.getValue(), "UTF-8")));
834
				}
835
			}
836
		}
837
		return table;
838
839
	}
840
841 53588 sandro.lab
	protected Map<String, Map<String, Map<String, byte[]>>> buildTable(final List<Row> rows) throws UnsupportedEncodingException {
842 35746 alessia.ba
		final Map<String, Map<String, Map<String, byte[]>>> table = Maps.newHashMap();
843
844
		for (final Row row : rows) {
845
			final String rowKey = row.getKey();
846
			final String cf = row.getColumnFamily();
847
			if (!table.containsKey(rowKey)) {
848 49029 claudio.at
				table.put(rowKey, new HashMap<>());
849 35746 alessia.ba
			}
850
			if (!table.get(rowKey).containsKey(cf)) {
851 49029 claudio.at
				table.get(rowKey).put(row.getColumnFamily(), new HashMap<>());
852 35746 alessia.ba
			}
853
			for (final Column<String, byte[]> c : row.getColumns()) {
854 31997 claudio.at
				System.out.println(String.format("ADDING K:%s CF:%s Q:%s", rowKey, cf, c.getName()));
855
				table.get(rowKey).get(cf).put(c.getName(), c.getValue());
856 38586 claudio.at
				if (c.getName().equals("body")) {
857 36164 claudio.at
					final String theBody = new String(c.getValue(), "UTF-8");
858 35746 alessia.ba
					assertTrue(StringUtils.isNotBlank(theBody));
859 57397 michele.ar
					// System.out.println(theBody);
860 35746 alessia.ba
				}
861 31997 claudio.at
			}
862
		}
863
		return table;
864 35746 alessia.ba
865 31997 claudio.at
	}
866
867 53588 sandro.lab
	protected Map<String, XmlRecordFactory> mapAll(final Map<String, Map<String, Map<String, byte[]>>> table) throws Exception {
868 31997 claudio.at
869 34438 claudio.at
		final Map<String, XmlRecordFactory> builders = Maps.newHashMap();
870
		for (final Entry<String, Map<String, Map<String, byte[]>>> e : table.entrySet()) {
871 31997 claudio.at
			map(builders, e.getKey(), e.getValue());
872
		}
873
		return builders;
874
	}
875
876 35746 alessia.ba
	// private Map<String, XmlRecordFactory> mapResultsOnly(final Map<String, Map<String, Map<String, byte[]>>> table) throws Exception {
877
	//
878
	// final Map<String, XmlRecordFactory> builders = Maps.newHashMap();
879
	// for (final Entry<String, Map<String, Map<String, byte[]>>> e : table.entrySet()) {
880
	// final Type type = OafRowKeyDecoder.decode(e.getKey()).getType();
881
	// if (type == Type.result) {
882
	// map(builders, e.getKey(), e.getValue());
883
	// }
884
	// }
885
	// return builders;
886
	// }
887
888 31997 claudio.at
	private void map(final Map<String, XmlRecordFactory> builders, final String rowKey, final Map<String, Map<String, byte[]>> row) throws Exception {
889
890 30967 claudio.at
		final Type type = OafRowKeyDecoder.decode(rowKey).getType();
891 26600 sandro.lab
892 41468 claudio.at
		final Map<String, byte[]> familyMap = row.get(type.toString());
893 26600 sandro.lab
894 57397 michele.ar
		if (familyMap == null) { return; }
895 26600 sandro.lab
896 41468 claudio.at
		final byte[] bodyB = familyMap.get("body");
897 26600 sandro.lab
898 30967 claudio.at
		if (bodyB != null) {
899
			ensureBuilder(builders, rowKey);
900 41468 claudio.at
901
			final Oaf oaf = UpdateMerger.mergeBodyUpdates(familyMap);
902
903
			final OafDecoder mainEntity = OafDecoder.decode(oaf);
904
905 30967 claudio.at
			builders.get(rowKey).setMainEntity(mainEntity);
906 28094 claudio.at
907 34438 claudio.at
			for (final LinkDescriptor ld : entityConfigTable.getDescriptors(type)) {
908 26600 sandro.lab
909 34438 claudio.at
				final String it = ld.getRelDescriptor().getIt();
910
				final Map<String, byte[]> cols = row.get(it);
911 26600 sandro.lab
912 57397 michele.ar
				if (cols != null && !cols.isEmpty()) {
913 26600 sandro.lab
914 34438 claudio.at
					for (final byte[] oafB : cols.values()) {
915 26600 sandro.lab
916 41468 claudio.at
						final Oaf.Builder relBuilder = Oaf.newBuilder(Oaf.parseFrom(oafB));
917 26600 sandro.lab
918 30967 claudio.at
						if (ld.isSymmetric()) {
919 34438 claudio.at
							final RelDescriptor rd = ld.getRelDescriptor();
920 40205 claudio.at
921
							relBuilder.getRelBuilder().setCachedTarget(mainEntity.getEntity()).setRelType(rd.getRelType()).setSubRelType(rd.getSubRelType());
922 30967 claudio.at
						}
923 26600 sandro.lab
924 40205 claudio.at
						relBuilder.getRelBuilder().setChild(ld.isChild());
925 26600 sandro.lab
926 40314 claudio.at
						final Oaf.Builder oafBuilder = Oaf.newBuilder().setKind(Kind.relation).setLastupdatetimestamp(System.currentTimeMillis());
927 40205 claudio.at
						oafBuilder.mergeFrom(relBuilder.build());
928 26600 sandro.lab
929 40205 claudio.at
						final String targetId = ld.isSymmetric() ? oafBuilder.getRel().getTarget() : oafBuilder.getRel().getSource();
930 30967 claudio.at
						ensureBuilder(builders, targetId);
931 34438 claudio.at
						final OafDecoder decoder = OafDecoder.decode(oafBuilder.build());
932 37334 claudio.at
933 30967 claudio.at
						if (ld.isChild()) {
934 37334 claudio.at
							builders.get(targetId).addChild(type, decoder);
935 30967 claudio.at
						} else {
936 37334 claudio.at
							builders.get(targetId).addRelation(type, decoder);
937 30967 claudio.at
						}
938 37334 claudio.at
					}
939 26600 sandro.lab
940 30967 claudio.at
				}
941
			}
942 26600 sandro.lab
		}
943
944
	}
945
946 38025 claudio.at
	private void printAll(final Map<String, XmlRecordFactory> builders) throws DocumentException {
947
		print(Sets.newHashSet(Type.values()), builders, null);
948
	}
949
950
	private void print(final Set<Type> types, final Map<String, XmlRecordFactory> builders, final Map<Type, Set<String>> xpaths) throws DocumentException {
951
		final SAXReader r = new SAXReader();
952
953 34438 claudio.at
		for (final Entry<String, XmlRecordFactory> e : builders.entrySet()) {
954 38025 claudio.at
			final OafRowKeyDecoder kd = OafRowKeyDecoder.decode(e.getKey());
955
956 57397 michele.ar
			if (!e.getValue().isValid()) { throw new IllegalArgumentException("invalid builder: " + e.getKey()); }
957 38025 claudio.at
			if (types.contains(kd.getType())) {
958
				final String val = IndentXmlString.apply(e.getValue().build());
959
960 57397 michele.ar
				if (xpaths != null && !xpaths.isEmpty() && xpaths.get(kd.getType()) != null) {
961 38025 claudio.at
					final Document doc = r.read(new StringReader(val));
962
963 40063 alessia.ba
					log.debug("\n" + e.getKey());
964 38025 claudio.at
					for (final String xpath : xpaths.get(kd.getType())) {
965 40063 alessia.ba
						log.debug(doc.valueOf(xpath));
966 38025 claudio.at
					}
967
				} else {
968 40063 alessia.ba
					log.info(val);
969 38025 claudio.at
				}
970 31997 claudio.at
			}
971
		}
972
	}
973
974 35746 alessia.ba
	private void printNoIndent(final Map<String, XmlRecordFactory> builders) {
975
		for (final Entry<String, XmlRecordFactory> e : builders.entrySet()) {
976
			if (e.getValue().isValid()) {
977 40063 alessia.ba
				log.debug(e.getValue().build());
978 35746 alessia.ba
			} else {
979 40063 alessia.ba
				log.debug("invalid builder: " + e.getKey());
980 35746 alessia.ba
			}
981
		}
982
	}
983
984 31997 claudio.at
	private void ensureBuilder(final Map<String, XmlRecordFactory> builders, final String rowKey) throws Exception {
985 30967 claudio.at
		if (!builders.containsKey(rowKey)) {
986
			builders.put(rowKey, newBuilder());
987 26600 sandro.lab
		}
988
	}
989
990 30967 claudio.at
	private XmlRecordFactory newBuilder() throws TransformerConfigurationException, TransformerFactoryConfigurationError, DocumentException {
991 46587 alessia.ba
		return new XmlRecordFactory(entityConfigTable, ContextMapper.fromXml(Context.xml),
992 57397 michele.ar
				RelClasses.fromJSon(RelClassesTest.relClassesJson), XmlRecordFactoryTest.SCHEMA_LOCATION, true, false, false,
993
				XmlRecordFactoryTest.specialDatasourceTypes);
994 30967 claudio.at
	}
995
996 33382 claudio.at
	private InputStream load(final String fileName) {
997
		return getClass().getResourceAsStream(fileName);
998
	}
999
1000 40063 alessia.ba
	private InputStream loadFromTransformationProfile(final String profilePath) {
1001
		log.info("Loading xslt from: " + basePathProfiles + profilePath);
1002 57397 michele.ar
		final InputStream profile = getClass().getResourceAsStream(basePathProfiles + profilePath);
1003
		final SAXReader saxReader = new SAXReader();
1004 40063 alessia.ba
		Document doc = null;
1005
		try {
1006
			doc = saxReader.read(profile);
1007 57397 michele.ar
		} catch (final DocumentException e) {
1008 40063 alessia.ba
			e.printStackTrace();
1009
			throw new RuntimeException(e);
1010
		}
1011 57397 michele.ar
		final String xslt = doc.selectSingleNode("//SCRIPT/CODE/*[local-name()='stylesheet']").asXML();
1012
		// log.info(xslt);
1013 40063 alessia.ba
		return IOUtils.toInputStream(xslt);
1014
	}
1015
1016 57397 michele.ar
	private Row asRowFromJson(final String json) throws ParseException {
1017
		final Oaf.Builder oafBuilder = Oaf.newBuilder();
1018 55177 alessia.ba
		JsonFormat.merge(json, oafBuilder);
1019
		final Oaf oaf = oafBuilder.build();
1020 57397 michele.ar
		final Row row = new Row("result", oaf.getEntity().getId());
1021
		final Column<String, byte[]> c = new Column<>("body", oaf.toByteArray());
1022 55177 alessia.ba
		row.setColumn("body", c);
1023
		return row;
1024
1025
	}
1026
1027 26600 sandro.lab
}