Project

General

Profile

Download (12.4 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.remote.view;
2

    
3
import java.net.URI;
4
import java.time.ZoneId;
5
import java.time.ZonedDateTime;
6
import java.util.ArrayList;
7
import java.util.HashMap;
8
import java.util.HashSet;
9
import java.util.List;
10
import java.util.Map;
11
import java.util.Set;
12

    
13
import org.apache.log4j.Logger;
14
import org.custommonkey.xmlunit.XMLUnit;
15
import org.dozer.Mapper;
16
import org.hibernate.envers.RevisionType;
17
import org.joda.time.format.ISODateTimeFormat;
18
import org.junit.Before;
19
import org.junit.Ignore;
20
import org.junit.Test;
21
import org.springframework.mock.web.MockHttpServletRequest;
22
import org.springframework.mock.web.MockHttpServletResponse;
23
import org.springframework.oxm.Marshaller;
24
import org.unitils.UnitilsJUnit4;
25
import org.unitils.spring.annotation.SpringApplicationContext;
26
import org.unitils.spring.annotation.SpringBeanByName;
27
import org.unitils.spring.annotation.SpringBeanByType;
28

    
29
import eu.etaxonomy.cdm.api.service.pager.Pager;
30
import eu.etaxonomy.cdm.api.service.pager.impl.DefaultPagerImpl;
31
import eu.etaxonomy.cdm.common.UriUtils;
32
import eu.etaxonomy.cdm.model.common.LSID;
33
import eu.etaxonomy.cdm.model.name.TaxonName;
34
import eu.etaxonomy.cdm.model.taxon.Taxon;
35
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
36
import eu.etaxonomy.cdm.model.view.AuditEvent;
37
import eu.etaxonomy.cdm.model.view.AuditEventRecord;
38
import eu.etaxonomy.cdm.model.view.AuditEventRecordImpl;
39
import eu.etaxonomy.cdm.remote.dto.oaipmh.DeletedRecord;
40
import eu.etaxonomy.cdm.remote.dto.oaipmh.Granularity;
41
import eu.etaxonomy.cdm.remote.dto.oaipmh.MetadataPrefix;
42
import eu.etaxonomy.cdm.remote.dto.oaipmh.ResumptionToken;
43
import eu.etaxonomy.cdm.remote.dto.oaipmh.SetSpec;
44
import eu.etaxonomy.cdm.remote.view.oaipmh.IdentifyView;
45
import eu.etaxonomy.cdm.remote.view.oaipmh.ListIdentifiersView;
46
import eu.etaxonomy.cdm.remote.view.oaipmh.ListMetadataFormatsView;
47
import eu.etaxonomy.cdm.remote.view.oaipmh.ListSetsView;
48
import eu.etaxonomy.cdm.remote.view.oaipmh.dc.GetRecordView;
49
import eu.etaxonomy.cdm.remote.view.oaipmh.dc.ListRecordsView;
50

    
51
@SpringApplicationContext("file:./target/test-classes/eu/etaxonomy/cdm/applicationContext-test.xml")
52
public class OaiPmhViewTest extends UnitilsJUnit4 {
53

    
54
    public static final Logger logger = Logger.getLogger(OaiPmhViewTest.class);
55

    
56
    @SpringBeanByName
57
    private Marshaller marshaller;
58

    
59
    @SpringBeanByType
60
    private Mapper mapper;
61

    
62
    private Map<String,Object> model;
63
    private IdentifyView identifyView;
64
    private GetRecordView getRecordView;
65
    private ListMetadataFormatsView listMetadataFormatsView;
66
    private ListSetsView listSetsView;
67
    private ListIdentifiersView listIdentifiersView;
68
    private ListRecordsView listRecordsView;
69
    private MockHttpServletRequest request;
70
    private MockHttpServletResponse response;
71

    
72
    private eu.etaxonomy.cdm.remote.view.oaipmh.rdf.GetRecordView rdfGetRecordView;
73

    
74
    private URI serverURI;
75

    
76
    @Before
77
    public void setUp() throws Exception {
78
        XMLUnit.setControlParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
79
        XMLUnit.setTestParser("org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
80
        XMLUnit.setSAXParserFactory("org.apache.xerces.jaxp.SAXParserFactoryImpl");
81
        XMLUnit.setIgnoreWhitespace(true);
82

    
83
        model = new HashMap<String,Object>();
84
        identifyView = new IdentifyView();
85
        identifyView.setMarshaller(marshaller);
86

    
87
        getRecordView = new GetRecordView();
88
        getRecordView.setMarshaller(marshaller);
89
        getRecordView.setMapper(mapper);
90

    
91
        rdfGetRecordView = new eu.etaxonomy.cdm.remote.view.oaipmh.rdf.GetRecordView();
92
        rdfGetRecordView.setMarshaller(marshaller);
93
        rdfGetRecordView.setMapper(mapper);
94

    
95
        listMetadataFormatsView = new ListMetadataFormatsView();
96
        listMetadataFormatsView.setMarshaller(marshaller);
97

    
98
        listSetsView = new ListSetsView();
99
        listSetsView.setMarshaller(marshaller);
100

    
101
        listIdentifiersView = new ListIdentifiersView();
102
        listIdentifiersView.setMarshaller(marshaller);
103
        listIdentifiersView.setMapper(mapper);
104

    
105
        listRecordsView = new ListRecordsView();
106
        listRecordsView.setMarshaller(marshaller);
107
        listRecordsView.setMapper(mapper);
108

    
109
        request = new MockHttpServletRequest();
110

    
111
        serverURI = new URI("http://memory.loc.gov");
112

    
113
        request.setServerName(serverURI.toString());
114
        request.setServerPort(80);
115
        response = new MockHttpServletResponse();
116
    }
117

    
118
    @Test
119
    public void testIdentifyView() throws Exception {
120

    
121
        if(!serviceIsAvailable()){
122
            return;
123
        }
124

    
125
        model.put("repositoryName", "Library of Congress Open Archive Initiative Repository 1");
126
        model.put("baseURL","http://memory.loc.gov/cgi-bin/oai");
127
        model.put("protocolVersion","2.0");
128
        model.put("deletedRecord",DeletedRecord.TRANSIENT);
129
        model.put("granularity",Granularity.YYYY_MM_DD_THH_MM_SS_Z);
130

    
131
        model.put("earliestDatestamp",ISODateTimeFormat.dateTimeParser().parseDateTime("1990-02-01T12:00:00Z"));
132
        model.put("adminEmail","somebody@loc.gov");
133
        model.put("description","<oai-identifier xmlns=\"http://www.openarchives.org/OAI/2.0/oai-identifier\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://www.openarchives.org/OAI/2.0/oai-identifier  http://www.openarchives.org/OAI/2.0/oai-identifier.xsd\"><scheme>oai</scheme><repositoryIdentifier>lcoa1.loc.gov</repositoryIdentifier><delimiter>:</delimiter><sampleIdentifier>oai:lcoa1.loc.gov:loc.music/musdi.002</sampleIdentifier></oai-identifier>");
134

    
135

    
136
        request.setRequestURI("/cgi-bin/oai?verb=Identify");
137

    
138
        identifyView.render(model, request, response);
139
//		String resource = "/eu/etaxonomy/cdm/remote/view/oaipmh/IdentifyView.xml";
140
//		System.out.println(new String(response.getContentAsByteArray()));
141
//		XMLAssert.assertXMLEqual(new InputStreamReader(this.getClass().getResourceAsStream(resource)),new StringReader(new String(response.getContentAsByteArray())));
142
    }
143

    
144
    @Ignore
145
    @Test
146
    public void testGetRecordView() throws Exception {
147

    
148
        if(!serviceIsAvailable()){
149
            return;
150
        }
151

    
152
        Taxon taxon = Taxon.NewInstance((TaxonName)null, null);
153
        taxon.setTitleCache("TitleCache", true);
154
        taxon.setCreated(ZonedDateTime.now());
155
        taxon.setLsid(new LSID("urn:lsid:example.org:taxonconcepts:1"));
156

    
157
        AuditEventRecord<Taxon> auditEventRecord = new AuditEventRecordImpl<Taxon>(new Object[] {taxon, new AuditEvent(),RevisionType.ADD});
158

    
159
        model.put("object", auditEventRecord);
160

    
161
        request.setRequestURI("/cgi-bin/oai?verb=GetRecord&identifier=urn:lsid:example.org:taxonconcepts:1&metadataPrefix=oai_dc");
162
        getRecordView.render(model, request, response);
163
//		System.out.println(new String(response.getContentAsByteArray()));
164
    }
165

    
166
    @Ignore
167
    @Test
168
    public void testRdfGetRecordView() throws Exception {
169

    
170
        if(!serviceIsAvailable()){
171
            return;
172
        }
173

    
174
        Taxon taxon = Taxon.NewInstance(null, null);
175
        taxon.setTitleCache("TitleCache", true);
176
        taxon.setCreated(ZonedDateTime.now());
177
        taxon.setLsid(new LSID("urn:lsid:example.org:taxonconcepts:1"));
178

    
179
        AuditEventRecord<Taxon> auditEventRecord = new AuditEventRecordImpl<Taxon>(new Object[] {taxon, new AuditEvent(),RevisionType.ADD});
180

    
181
        model.put("object", auditEventRecord);
182

    
183
        request.setRequestURI("/cgi-bin/oai?verb=GetRecord&identifier=urn:lsid:example.org:taxonconcepts:1&metadataPrefix=rdf");
184
        rdfGetRecordView.render(model, request, response);
185
        //System.out.println(new String(response.getContentAsByteArray()));
186
    }
187

    
188
    @Test
189
    public void testListMetadataFormatsView() throws Exception {
190

    
191
        if(!serviceIsAvailable()){
192
            return;
193
        }
194

    
195
        request.setRequestURI("/cgi-bin/pdataprov?verb=ListMetadataFormats&identifier=oai:perseus.tufts.edu:Perseus:text:1999.02.0119");
196
        listMetadataFormatsView.render(model, request, response);
197
        //System.out.println(new String(response.getContentAsByteArray()));
198
    }
199

    
200
    @Test
201
    public void testListSetsView() throws Exception {
202

    
203
        if(!serviceIsAvailable()){
204
            return;
205
        }
206

    
207
        request.setRequestURI("/OAI-script?verb=ListSets");
208
        Set<SetSpec> sets = new HashSet<SetSpec>();
209
        sets.add(SetSpec.TAXON);
210
        sets.add(SetSpec.SYNONYM);
211
        model.put("sets",sets);
212
        listSetsView.render(model, request, response);
213
//		System.out.println(new String(response.getContentAsByteArray()));
214
    }
215

    
216
    @Ignore
217
    @Test
218
    public void testListIdentifiersView() throws Exception {
219

    
220
        if(!serviceIsAvailable()){
221
            return;
222
        }
223

    
224
        model.put("metadataPrefix", MetadataPrefix.OAI_DC);
225

    
226
        ZonedDateTime from = ZonedDateTime.of(1990,2,1,12,0,0, 0, ZoneId.systemDefault());
227
        ZonedDateTime until = ZonedDateTime.of(1990,2,1,12,0,0, 0, ZoneId.systemDefault());
228
        model.put("from",from);
229
        model.put("until", until);
230

    
231
        List<AuditEventRecord<TaxonBase>> r = new ArrayList<AuditEventRecord<TaxonBase>>();
232
        for(int i = 0; i < 10; i++) {
233
            TaxonBase taxon = Taxon.NewInstance(null, null);
234
            taxon.setTitleCache("TitleCache", true);
235
            taxon.setCreated(ZonedDateTime.now());
236
            taxon.setLsid(new LSID("urn:lsid:example.org:taxonconcepts:"+i));
237
            if((i % 3) == 0 ) {
238
                AuditEventRecord<TaxonBase> auditEventRecord = new AuditEventRecordImpl<TaxonBase>(new Object[] {taxon, new AuditEvent(),RevisionType.DEL});
239
                r.add(auditEventRecord);
240
            } else {
241
                AuditEventRecord<TaxonBase> auditEventRecord = new AuditEventRecordImpl<TaxonBase>(new Object[] {taxon, new AuditEvent(),RevisionType.ADD});
242
                r.add(auditEventRecord);
243
            }
244
        }
245
        Pager<AuditEventRecord<TaxonBase>> results = new DefaultPagerImpl(0, 100, 10,r);
246
        model.put("pager", results);
247
        ResumptionToken resumptionToken = new ResumptionToken(results, from, until, MetadataPrefix.OAI_DC, null);
248
        model.put("resumptionToken",resumptionToken);
249
        listIdentifiersView.render(model, request, response);
250
//		System.out.println(new String(response.getContentAsByteArray()));
251
    }
252

    
253
    @Ignore
254
    @Test
255
    public void testListRecordsView() throws Exception {
256

    
257
        if(!serviceIsAvailable()){
258
            return;
259
        }
260

    
261
        model.put("metadataPrefix", MetadataPrefix.OAI_DC);
262

    
263
        ZonedDateTime from = ZonedDateTime.of(1990,2,1,12,0,0, 0, ZoneId.systemDefault());
264
        ZonedDateTime until = ZonedDateTime.of(1990,2,1,12,0,0, 0, ZoneId.systemDefault());
265
        model.put("from",from);
266
        model.put("until", until);
267

    
268
        List<AuditEventRecord<TaxonBase>> r = new ArrayList<AuditEventRecord<TaxonBase>>();
269
        for(int i = 0; i < 10; i++) {
270
            TaxonBase taxon = Taxon.NewInstance(null, null);
271
            taxon.setTitleCache("TitleCache", true);
272
            taxon.setCreated(ZonedDateTime.now());
273
            taxon.setLsid(new LSID("urn:lsid:example.org:taxonconcepts:"+i));
274
            if((i % 3) == 0 ) {
275
                AuditEventRecord<TaxonBase> auditEventRecord = new AuditEventRecordImpl<TaxonBase>(new Object[] {taxon, new AuditEvent(),RevisionType.DEL});
276
                r.add(auditEventRecord);
277
            } else {
278
                AuditEventRecord<TaxonBase> auditEventRecord = new AuditEventRecordImpl<TaxonBase>(new Object[] {taxon, new AuditEvent(),RevisionType.ADD});
279
                r.add(auditEventRecord);
280
            }
281
        }
282
        Pager<AuditEventRecord<TaxonBase>> results = new DefaultPagerImpl(0, 100, 10,r);
283
        model.put("pager", results);
284
        ResumptionToken resumptionToken = new ResumptionToken(results, from, until, MetadataPrefix.OAI_DC, null);
285
        model.put("resumptionToken",resumptionToken);
286
        listRecordsView.render(model, request, response);
287
        //System.out.println(new String(response.getContentAsByteArray()));
288
    }
289

    
290
    private boolean serviceIsAvailable() {
291
        if(!UriUtils.isServiceAvailable(serverURI)) {
292
            logger.info("Service " + serverURI.toString() + " unavailable");
293
            return false;
294
        } else {
295
            return true;
296
        }
297

    
298

    
299
    }
300
}
(2-2/3)