Project

General

Profile

1
package eu.dnetlib.resolver;
2

    
3
import com.googlecode.protobuf.format.JsonFormat;
4
import eu.dnetlib.data.collector.plugins.datacite.DataciteParser;
5
import eu.dnetlib.data.proto.dli.ScholixObjectProtos;
6
import eu.dnetlib.data.transform.xml.AbstractDNetXsltFunctions;
7
import eu.dnetlib.dli.DLIUtils;
8
import eu.dnetlib.dli.resolver.*;
9
import eu.dnetlib.dli.resolver.model.CompletionStatus;
10
import eu.dnetlib.dli.resolver.model.DLIObjectProvenance;
11
import eu.dnetlib.dli.resolver.model.DLIResolvedObject;
12
import eu.dnetlib.dli.resolver.model.ObjectProvisionMode;
13
import eu.dnetlib.dli.resolver.model.serializer.DLIResolverSerializer;
14
import eu.dnetlib.pid.resolver.AbstractPIDResolver;
15
import eu.dnetlib.resolver.parser.DMFResolverParser;
16
import eu.dnetlib.resolver.parser.PMFResolverParser;
17
import eu.dnetlib.resolver.parser.ScholixResolverParser;
18
import org.apache.commons.io.IOUtils;
19
import org.apache.commons.lang3.StringUtils;
20
import org.apache.commons.logging.Log;
21
import org.apache.commons.logging.LogFactory;
22
import org.junit.Assert;
23
import org.junit.Ignore;
24
import org.junit.Test;
25
import org.springframework.beans.factory.annotation.Autowired;
26

    
27
import java.io.IOException;
28
import java.io.InputStream;
29
import java.net.URISyntaxException;
30
import java.net.URL;
31
import java.time.LocalDateTime;
32
import java.util.Arrays;
33

    
34
/**
35
 * Created by sandro on 9/12/16.
36
 */
37

    
38

    
39
//@RunWith(SpringJUnit4ClassRunner.class)
40
//@ContextConfiguration(classes = { ConfigurationTestConfig.class})
41
@Ignore
42
public class DLIParserTest extends  DLIAbstractTest{
43

    
44
	private static final Log log = LogFactory.getLog(DLIParserTest.class);
45

    
46
	@Autowired
47
    private DLIResolverSerializer serializer;
48

    
49
	@Test
50
	public void testDMFParser() throws IOException {
51
		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/transform/huge.xml");
52
		String str = IOUtils.toString(resourceAsStream);
53
		DMFResolverParser parser = new DMFResolverParser();
54
        DLIResolvedObject object = parser.parseObject(str);
55
        Assert.assertNotNull(object);
56
		Assert.assertNotNull(object.getTitles());
57
		Assert.assertNotNull(object.getDescription());
58
		Assert.assertNotNull(object.getType());
59
		System.out.println(object);
60
//		object.setTitles(Arrays.asList("TITOLO 1", "TITOLO 2"));
61
//		Assert.assertEquals(CompletionStatus.complete.toString(), object.getCompletionStatus());
62
//        DLIResolvedObject nullObject = parser.parseObject(IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordScholix.xml")));
63
//        Assert.assertNull(nullObject);
64
//		nullObject = parser.parseObject(IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputPMFRecord.xml")));
65
//		Assert.assertNull(nullObject);
66

    
67
	}
68

    
69

    
70

    
71
	@Test
72
    public void testDOI(){
73
	    final String url="https://ssl.fao.org/glisapi/v1/pgrfas?doi=5gg0w";
74

    
75
	    DLIUtils.isValidDoi(url);
76
    }
77

    
78

    
79
	@Test
80
	public void testResolvedDate() throws IOException {
81
		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputPMF.xml");
82
		String str = IOUtils.toString(resourceAsStream);
83

    
84
		PMFResolverParser parser = new PMFResolverParser();
85
        DLIResolvedObject object = parser.parseObject(str);
86
        Assert.assertNotNull(object.getResolvedDate());
87
	}
88

    
89

    
90
	@Test
91
	public void testDataciteParser() throws Exception {
92

    
93
		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordOpenaire.xml");
94
		String str = IOUtils.toString(resourceAsStream);
95
		DMFResolverParser parser = new DMFResolverParser();
96
        DLIResolvedObject object = parser.parseObject(str);
97
        System.out.println(object.getType());
98
		object.getRelations().forEach(it -> System.out.println(it.getTargetPID()));
99
		Assert.assertTrue(object.getCompletionStatus().equals("complete"));
100
		System.out.println("object = " + object);
101

    
102
		final String replacingXML = serializer.serializeReplacingXML(str, object);
103

    
104
		log.debug(replacingXML);
105

    
106

    
107

    
108
	}
109

    
110
	@Test
111
	public void testScholixParser() throws IOException, URISyntaxException {
112
		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/ieda.xml");
113

    
114
		String str = IOUtils.toString(resourceAsStream);
115
		ScholixResolverParser parser = new ScholixResolverParser();
116
        DLIResolvedObject object = parser.parseObject(str);
117

    
118
        final ScholixObjectProtos.Scholix.Builder scholix = ScholixObjectProtos.Scholix.newBuilder();
119

    
120
        scholix.addLinkproviderBuilder()
121
                .setName(object.getDatasourceProvenance().get(0).getDatasource())
122
                .addIdentifiersBuilder()
123
                .setIdentifier(object.getDatasourceProvenance().get(0).getDatasourceId())
124
                .setSchema("dnetIdentifier");
125

    
126

    
127

    
128
        scholix.setRelationship(ScholixObjectProtos.ScholixRelationship.newBuilder()
129
                .setName(object.getRelations().get(0).getRelationSemantics())
130
                .setInverse(object.getRelations().get(0).getInverseRelation())
131
                .setSchema("datacite")
132
                .build());
133
        final CrossRefParserJSON parserJSON = new CrossRefParserJSON();
134
        DLIResolvedObject dli_source = parserJSON.parseRecord(IOUtils.toString(new URL("https://api.crossref.org/works/10.1002/2016JG003630").openStream()));
135
        DLIResolvedObject dli_target = DataciteResolver.parseResponse(AbstractPIDResolver.requestURL("http://search.datacite.org/api?wt=json&q=doi:10.6073/pasta/6038bd9745347610df8a51c92ca0e452"));
136
        final ScholixObjectProtos.ScholixResource source = generateResource(dli_source);
137
        final ScholixObjectProtos.ScholixResource target = generateResource(dli_target);
138
        scholix.setSource(source);
139
        scholix.setTarget(target);
140
        scholix.setPublicationDate(LocalDateTime.now().toString());
141
        System.out.println(JsonFormat.printToString(scholix.build()));
142

    
143
        System.out.println(generateIdentifier(dli_source, dli_target));
144

    
145

    
146
	}
147

    
148
    private String generateIdentifier(final DLIResolvedObject source, DLIResolvedObject target) {
149

    
150
        return AbstractDNetXsltFunctions.md5(String.format("%s::%s", source.getPid().toLowerCase().trim(), target.getPid().toLowerCase().trim()));
151

    
152
    }
153

    
154
    private ScholixObjectProtos.ScholixResource generateResource(DLIResolvedObject result) {
155
        final ScholixObjectProtos.ScholixResource.Builder builder = ScholixObjectProtos.ScholixResource.newBuilder();
156
        if (result.getDatasourceProvenance() != null)
157
            result.getDatasourceProvenance().forEach(
158
                    objectProvenance -> {
159
                        builder.addCollectedFrom(ScholixObjectProtos.ScholixCollectedFrom.newBuilder()
160
                                .setProvisionMode(((DLIObjectProvenance) objectProvenance).getProvisionMode())
161
                                .setCompletionStatus(((DLIObjectProvenance) objectProvenance).getCompletionStatus())
162
                                .setProvider(ScholixObjectProtos.ScholixEntityId.newBuilder()
163
                                        .setName(objectProvenance.getDatasource())
164
                                        .addIdentifiers(ScholixObjectProtos.ScholixIdentifier.newBuilder().setIdentifier(objectProvenance.getDatasourceId())
165
                                                .setSchema("dnetIdentifier").build())
166
                                        .build()));
167
                        if (StringUtils.isNotEmpty(((DLIObjectProvenance) objectProvenance).getPublisher())) {
168
                            builder.addPublisher(ScholixObjectProtos.ScholixEntityId.newBuilder()
169
                                    .setName(((DLIObjectProvenance) objectProvenance).getPublisher())
170
                                    .build());
171
                        }
172

    
173
                    });
174
        builder.addIdentifier(ScholixObjectProtos.ScholixIdentifier.newBuilder().
175
                setIdentifier(result.getPid())
176
                .setSchema(result.getPidType())
177
                .build());
178
        builder.setObjectType(result.getType().toString());
179
        if (result.getTitles() != null && result.getTitles().size() > 0)
180
            builder.setTitle(result.getTitles().get(0));
181
        if (result.getAuthors() != null)
182
            result.getAuthors().forEach(author -> builder.addCreator(
183
                    ScholixObjectProtos.ScholixEntityId.newBuilder()
184
                            .setName(author)
185
                            .build()));
186
        if (StringUtils.isNotBlank(result.getDate())) {
187
            builder.setPublicationDate(result.getDate());
188
        }
189

    
190
        String tp = null;
191

    
192
        switch (result.getType()) {
193
            case dataset:
194
                tp = "60";
195
                break;
196
            case unknown:
197
                tp = "70";
198
                break;
199
            case publication:
200
                tp = "50";
201
                break;
202
        }
203
        builder.setDnetIdentifier(tp + "|dnet________::" + result.getIdentifier());
204
        return builder.build();
205
    }
206

    
207
	@Test
208
	public void testScholixCompleteParser() throws IOException {
209
		final InputStream resourceAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordScholix.xml");
210

    
211
		String str = IOUtils.toString(resourceAsStream);
212
		ScholixResolverParser parser = new ScholixResolverParser();
213
        DLIResolvedObject object = parser.parseObject(str);
214

    
215
		log.debug("object = " + object);
216

    
217
		Assert.assertNotNull(object);
218
		log.debug("object.getCompletionStatus() = " + object.getCompletionStatus());
219

    
220
//		Assert.assertTrue(object.getCompletionStatus().equals(CompletionStatus.complete.toString()));
221
//
222
//		Assert.assertNotNull(object.getDate());
223
//		Assert.assertNotNull(object.getTitles());
224
//		Assert.assertTrue(object.getTitles().size() == 1);
225
//
226
//		Assert.assertNotNull(object.getDatasourceProvenance());
227
//		Assert.assertTrue(object.getDatasourceProvenance().size() == 1);
228
//		Assert.assertNotNull(object.getDatasourceProvenance().get(0).getPublisher());
229
//		Assert.assertNotNull(object.getDatasourceProvenance().get(0).getPublisherId());
230
//
231
//
232
//		Assert.assertNotNull(object.getRelations());
233
//
234
//		Assert.assertTrue(object.getRelations().size() == 1);
235
//
236
//		Assert.assertNotNull(object.getRelations().get(0).getTargetPID().getId());
237
//		Assert.assertNotNull(object.getRelations().get(0).getTargetPID().getType());
238
//
239
//
240
//		DLIResolvedObject nullObject = parser.parseObject(IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordDMF.xml")));
241
//		Assert.assertNull(nullObject);
242
//		nullObject = parser.parseObject(IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputPMFRecord.xml")));
243
//		Assert.assertNull(nullObject);
244

    
245
	}
246

    
247

    
248
	@Test
249
	public void testPMFParser() throws Exception {
250
		final InputStream resource = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputPMF.xml");
251
		String xml = IOUtils.toString(resource);
252

    
253
		PMFResolverParser parser = new PMFResolverParser();
254
        final DLIResolvedObject resolvedObject = parser.parseObject(xml);
255
        Assert.assertNotNull(resolvedObject);
256

    
257
        Assert.assertNotNull(resolvedObject.getPidType());
258
		log.debug("resolvedObject = " + resolvedObject);
259

    
260
		Assert.assertNotNull(resolvedObject.getRelations());
261
		resolvedObject.getRelations().forEach(it -> Assert.assertNotNull(it));
262

    
263
        DLIResolvedObject nullObject = parser.parseObject(IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordScholix.xml")));
264
        Assert.assertNull(nullObject);
265
		nullObject = parser.parseObject(IOUtils.toString(getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordDMF.xml")));
266
		Assert.assertNull(nullObject);
267
	}
268

    
269
	@Test
270
	public void testOpenAIREParser() throws Exception {
271

    
272
		final InputStream resource = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordOpenaire.xml");
273

    
274
		final String record = IOUtils.toString(resource);
275

    
276
		final OpenAireParser parser = new OpenAireParser();
277
        final DLIResolvedObject object = parser.parseObject(record);
278
        object.setPid("od_______908::ff0270cae25acd9367ef26a53ee5e4a3");
279
		object.setPidType("openaire");
280

    
281
        final DLIObjectProvenance provenance = new DLIObjectProvenance();
282
        provenance.setCompletionStatus(CompletionStatus.complete.toString());
283
		provenance.setDatasourceId("dli::r3d100010778");
284
		provenance.setDatasource("NCBI Nucleotide");
285
		provenance.setProvisionMode(ObjectProvisionMode.resolved.toString());
286
		object.setDatasourceProvenance(Arrays.asList(provenance));
287

    
288
		log.debug(object);
289

    
290
	}
291

    
292
	@Test
293
	public void testProteinParser() throws IOException {
294
		final NCBINResolver resolver = new NCBINResolver();
295
		resolver.setNCBINParser(new NCBINParser());
296
        final DLIResolvedObject p02768 = resolver.resolve("U36380", "protein");
297

    
298
		log.debug(p02768.getDescription());
299
		Assert.assertNotNull(p02768);
300
		Assert.assertNotNull(p02768.getDescription());
301

    
302
		log.debug("p02768 = " + p02768);
303

    
304
	}
305

    
306

    
307

    
308

    
309

    
310

    
311

    
312

    
313

    
314
}
(3-3/6)