Project

General

Profile

1
package eu.dnetlib.dli.transform;
2

    
3
import eu.dnetlib.data.transform.OntologyLoader;
4
import eu.dnetlib.dli.DLIUtils;
5
import eu.dnetlib.dli.resolver.model.ResolvedObject;
6
import eu.dnetlib.enabling.locators.UniqueServiceLocator;
7
import eu.dnetlib.resolver.parser.DMFResolverParser;
8
import eu.dnetlib.rmi.enabling.ISLookUpException;
9
import eu.dnetlib.rmi.enabling.ISLookUpService;
10
import org.antlr.stringtemplate.StringTemplate;
11
import org.apache.commons.io.IOUtils;
12
import org.apache.commons.logging.Log;
13
import org.apache.commons.logging.LogFactory;
14
import org.dom4j.Document;
15
import org.dom4j.DocumentException;
16
import org.dom4j.io.SAXReader;
17
import org.junit.Assert;
18
import org.junit.Before;
19
import org.junit.Ignore;
20
import org.junit.Test;
21
import org.junit.runner.RunWith;
22
import org.mockito.Mock;
23
import org.mockito.Mockito;
24
import org.mockito.runners.MockitoJUnitRunner;
25
import org.springframework.web.client.RestTemplate;
26

    
27
import javax.xml.transform.OutputKeys;
28
import javax.xml.transform.Transformer;
29
import javax.xml.transform.TransformerFactory;
30
import javax.xml.transform.stream.StreamResult;
31
import javax.xml.transform.stream.StreamSource;
32
import java.io.IOException;
33
import java.io.InputStream;
34
import java.io.StringWriter;
35
import java.util.Arrays;
36
import java.util.List;
37

    
38
import static org.mockito.Mockito.when;
39

    
40
/**
41
 * Created by sandro on 9/16/16.
42
 */
43

    
44
@RunWith(MockitoJUnitRunner.class)
45
public class DLITransformTest {
46

    
47

    
48
    private static final Log log = LogFactory.getLog(DLITransformTest.class);
49

    
50
    private static final String BASE_URL = "http://%s:9200/%s?pretty";
51
    private static final String BASE_CFG_URL = "http://%s:9200/%s?pretty";
52

    
53
    @Mock
54
    private DLIUtils dliUtilsInstance;
55

    
56

    
57
    @Mock
58
    private UniqueServiceLocator uniqueServiceLocator;
59

    
60
    @Mock
61
    private ISLookUpService isLookUpServiceMock;
62

    
63

    
64
    @Before
65
    public void initialize() throws ISLookUpException, IOException {
66

    
67
        final String query = "for $x in collection('/db/DRIVER/RepositoryServiceResources/RepositoryServiceResourceType') "
68
                + "return concat($x//FIELD[./key='NamespacePrefix']/value/text(),'@--@',$x//FIELD[./key='DataSourceId']/value/text(),'@--@',$x//ENGLISH_NAME )";
69
        dliUtilsInstance = Mockito.mock(DLIUtils.class);
70

    
71
        uniqueServiceLocator = Mockito.mock(UniqueServiceLocator.class);
72
        isLookUpServiceMock = Mockito.mock(ISLookUpService.class);
73
        dliUtilsInstance.setServiceLocator(uniqueServiceLocator);
74
        DLIUtils.setInstance(dliUtilsInstance);
75
        when(dliUtilsInstance.getServiceLocator()).thenReturn(uniqueServiceLocator);
76
        when(uniqueServiceLocator.getService(ISLookUpService.class)).thenReturn(isLookUpServiceMock);
77
        List<String> resutlDS = Arrays.asList(
78
                "r3d100010255@--@dli_________::r3d100010255@--@icpsr",
79
                "r3d100010134@--@dli_________::r3d100010134@--@pangaea"
80

    
81
        );
82
        when(isLookUpServiceMock.quickSearchProfile(query)).thenReturn(resutlDS);
83
        DLIUtils.ontologies = OntologyLoader.loadOntologiesFromCp();
84

    
85

    
86
    }
87

    
88

    
89
    private InputStream loadFromTransformationProfile(final String profilePath) throws IOException {
90
        InputStream profile = getClass().getResourceAsStream(profilePath);
91
        SAXReader saxReader = new SAXReader();
92
        Document doc = null;
93
        try {
94
            doc = saxReader.read(profile);
95
        } catch (DocumentException e) {
96
            e.printStackTrace();
97
            throw new RuntimeException(e);
98
        }
99
        String xslt = doc.selectSingleNode("//SCRIPT/CODE/text()").asXML();
100
        return IOUtils.toInputStream(xslt.replace("<![CDATA[", "").replace("]]>", ""));
101
    }
102

    
103

    
104
    @Test
105
    public void testOAI2DMFTransform() throws Exception {
106

    
107
        final InputStream xsltAsStream =
108
                loadFromTransformationProfile("/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/oai_datacite_transform.xml");
109
        final TransformerFactory factory = TransformerFactory.newInstance();
110
        factory.newTransformer();
111
        final StreamSource xsltSource = new StreamSource(xsltAsStream);
112
        final InputStream recordStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputRecordDMF.xml");
113
        final Transformer transformer = factory.newTransformer(xsltSource);
114
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
115
        final StringWriter output = new StringWriter();
116
        transformer.transform(new StreamSource(recordStream), new StreamResult(output));
117
        final String record = output.toString();
118
        final DMFResolverParser parser = new DMFResolverParser();
119
        log.debug(record);
120
        final ResolvedObject object = parser.parseObject(record);
121

    
122
        Assert.assertNotNull(object.getSubjects());
123
        Assert.assertTrue(object.getSubjects().size() > 0);
124

    
125
        object.getRelations().forEach(it -> log.debug(it.getTargetPID()));
126

    
127
        log.debug(object);
128

    
129
        StringTemplate st = new StringTemplate();
130

    
131
        final String template = IOUtils.toString(this.getClass().getResourceAsStream("/eu/dnetlib/dli/templates/DMFXML.st"));
132

    
133
        st.setTemplate(template);
134

    
135
        st.setAttribute("object", object);
136

    
137
        System.out.println(st.toString());
138

    
139
    }
140

    
141
    @Test
142
    public void testICPSRTransform() throws Exception {
143

    
144

    
145
        final InputStream xsltAsStream =
146
                loadFromTransformationProfile("/eu/dnetlib/bootstrap/profiles/TransformationRuleDSResources/oai_icpsr_transform.xml");
147

    
148
        final TransformerFactory factory = TransformerFactory.newInstance();
149
        factory.newTransformer();
150
        final StreamSource xsltSource = new StreamSource(xsltAsStream);
151
        final InputStream recordStream = this.getClass().getResourceAsStream("/eu/dnetlib/dli/parser/InputICPSR.xml");
152

    
153
        final Transformer transformer = factory.newTransformer(xsltSource);
154
        transformer.setOutputProperty(OutputKeys.INDENT, "yes");
155
        final StringWriter output = new StringWriter();
156
        transformer.transform(new StreamSource(recordStream), new StreamResult(output));
157
        final String record = output.toString();
158

    
159
        System.out.println(record);
160
    }
161

    
162

    
163
}
    (1-1/1)