Project

General

Profile

1
package eu.dnetlib.resolver;
2

    
3
import com.google.gson.Gson;
4
import com.google.gson.GsonBuilder;
5
import eu.dnetlib.data.transform.OntologyLoader;
6
import eu.dnetlib.dli.DLIUtils;
7
import eu.dnetlib.dli.resolver.model.*;
8
import eu.dnetlib.dli.resolver.model.serializer.DLIResolverSerializer;
9
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
10
import eu.dnetlib.pid.resolver.model.ObjectType;
11
import eu.dnetlib.pid.resolver.model.PID;
12
import eu.dnetlib.resolver.parser.DMFResolverParser;
13
import eu.dnetlib.resolver.parser.PMFResolverParser;
14
import eu.dnetlib.rmi.enabling.ISLookUpService;
15
import org.apache.commons.io.IOUtils;
16
import org.apache.commons.logging.Log;
17
import org.apache.commons.logging.LogFactory;
18
import org.junit.Assert;
19
import org.junit.Before;
20
import org.junit.Ignore;
21
import org.junit.Test;
22
import org.junit.runner.RunWith;
23
import org.mockito.Mock;
24
import org.mockito.Mockito;
25
import org.springframework.beans.factory.annotation.Autowired;
26
import org.springframework.test.context.ContextConfiguration;
27
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
28

    
29
import javax.xml.transform.OutputKeys;
30
import javax.xml.transform.Transformer;
31
import javax.xml.transform.TransformerFactory;
32
import javax.xml.transform.stream.StreamResult;
33
import javax.xml.transform.stream.StreamSource;
34
import java.io.ByteArrayInputStream;
35
import java.io.IOException;
36
import java.io.InputStream;
37
import java.io.StringWriter;
38
import java.util.Arrays;
39
import java.util.List;
40
import java.util.Map;
41

    
42
import static org.mockito.Mockito.when;
43

    
44
/**
45
 * Created by sandro on 10/4/16.
46
 */
47
@RunWith(SpringJUnit4ClassRunner.class)
48
@ContextConfiguration(classes = { ConfigurationTestConfig.class })
49

    
50
public class DLISerializerTest extends DLIAbstractTest {
51

    
52
    private static final Log log = LogFactory.getLog(DLISerializerTest.class);
53

    
54
	@Autowired
55
    private DLIResolverSerializer serializer;
56

    
57
	@Test
58
	public void testSerializeScholix() {
59
		log.debug(serializer.serializeToXML(createScholixMock()));
60
	}
61

    
62
	@Test
63
	public void testSerializePMF() throws IOException {
64
		final InputStream recordStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputPMF.xml");
65

    
66
		final DLIResolvedObject object = createPMFMock();
67

    
68
		object.setCompletionStatus(CompletionStatus.complete.toString());
69

    
70
		final DLIObjectProvenance provencance = new DLIObjectProvenance();
71
		provencance.setDatasource("Provencance1");
72
		provencance.setDatasourceId("pid1");
73
		provencance.setProvisionMode("resolved");
74
		provencance.setCompletionStatus("complete");
75
		object.getDatasourceProvenance().add(provencance);
76

    
77

    
78

    
79
		object.setPid("MOCKPID");
80
		object.setPidType("MOCKPIDType");
81
		final String replacingXML = serializer.serializeReplacingXML(IOUtils.toString(recordStream), object);
82

    
83
		log.debug(replacingXML);
84
	}
85

    
86
	@Test
87
	public void testSerializeDMF() throws Exception {
88
		final DLIResolvedObject object = createDMFMock();
89
		final InputStream recordStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordDMF.xml");
90

    
91
		final String replacingXML = serializer.serializeReplacingXML(IOUtils.toString(recordStream), object);
92

    
93
		log.debug(replacingXML);
94

    
95
	}
96

    
97

    
98
	@Test
99
	public void testSerializeFromJson() throws Exception {
100
		final InputStream recordStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/transform/resolvedObject.json");
101

    
102

    
103
		final DLIResolvedObject resolvedObject = DLIResolvedObject.fromJson(IOUtils.toString(recordStream));
104
		Assert.assertEquals(resolvedObject.getType(), ObjectType.dataset);
105
		final String recordTemplate =
106
				"<root xmlns:oaf=\"http://namespace.dnet.eu/oaf\" xmlns:dri=\"http://www.driver-repository.eu/namespace/dri\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\">%s</root>";
107
		final String xml = serializer.serializeToXML(resolvedObject);
108

    
109
		final String inputRecord = String.format(recordTemplate, xml);
110

    
111
		final InputStream xsltAsStream = getClass().getResourceAsStream("/eu/dnetlib/resolver/xslt/transformResolvedRecord.xsl");
112

    
113
		final InputStream xmlAsStream = getClass().getResourceAsStream("/eu/dnetlib/dli/transform/inputResolved.xml");
114

    
115
		final TransformerFactory factory = TransformerFactory.newInstance();
116
		factory.newTransformer();
117
		final StreamSource xsltSource = new StreamSource(xsltAsStream);
118

    
119
		final Transformer transformer = factory.newTransformer(xsltSource);
120
		transformer.setOutputProperty(OutputKeys.INDENT, "yes");
121
		final StringWriter output = new StringWriter();
122
		transformer.transform(new StreamSource(new ByteArrayInputStream(inputRecord.getBytes())), new StreamResult(output));
123
		final String record = output.toString();
124
		System.out.println("record = " + record);
125
	}
126

    
127
	private DLIResolvedObject createPMFMock() throws IOException {
128
		final InputStream resource = getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputPMF.xml");
129
		String xml = IOUtils.toString(resource);
130

    
131
		PMFResolverParser parser = new PMFResolverParser();
132
		return parser.parseObject(xml);
133
	}
134

    
135
	private DLIResolvedObject createDMFMock() throws Exception {
136
		final InputStream xsltAsStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/transform/oai_datacite_transform.xsl");
137

    
138
		final TransformerFactory factory = TransformerFactory.newInstance();
139
		factory.newTransformer();
140
		final StreamSource xsltSource = new StreamSource(xsltAsStream);
141
		final InputStream recordStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordDMF.xml");
142
		final Transformer transformer = factory.newTransformer(xsltSource);
143
		transformer.setOutputProperty(OutputKeys.INDENT, "yes");
144
		final StringWriter output = new StringWriter();
145
		transformer.transform(new StreamSource(recordStream), new StreamResult(output));
146
		final String record = output.toString();
147
		final DMFResolverParser parser = new DMFResolverParser();
148
		return parser.parseObject(record);
149

    
150
	}
151

    
152
	private DLIResolvedObject createScholixMock() {
153

    
154
		final DLIResolvedObject mock = new DLIResolvedObject();
155
		mock.setPid("mock");
156
		mock.setPidType("mockType");
157
		final DLIObjectProvenance provenance = new DLIObjectProvenance();
158
		provenance.setDatasource("Mock Datasource");
159
        provenance.setDatasourceId("Mock Id");
160
        mock.setDatasourceProvenance(Arrays.asList(provenance));
161
		final DLIObjectRelation relation = new DLIObjectRelation();
162
		relation.setTargetPID(new PID("mockTarget", "mockType"));
163
		relation.setTargetType(ObjectType.unknown);
164
        relation.setRelationSemantics("unknown");
165
        relation.setRelationProvenance(Arrays.asList(provenance));
166
		mock.setRelations(Arrays.asList(relation));
167
		return mock;
168
	}
169

    
170
}
(5-5/6)