Project

General

Profile

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

    
3
import java.util.ArrayList;
4
import java.util.HashMap;
5
import java.util.HashSet;
6
import java.util.List;
7
import java.util.Map;
8
import java.util.Set;
9

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

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

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

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

    
55
    @SpringBeanByName
56
    private Marshaller marshaller;
57

    
58
    @SpringBeanByType
59
    private Mapper mapper;
60

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

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

    
73
    private URI serverURI;
74

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

    
82
        model = new HashMap<>();
83
        identifyView = new IdentifyView();
84
        identifyView.setMarshaller(marshaller);
85

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

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

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

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

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

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

    
108
        request = new MockHttpServletRequest();
109

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

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

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

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

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

    
130
        model.put("earliestDatestamp",ISODateTimeFormat.dateTimeParser().parseDateTime("1990-02-01T12:00:00Z"));
131
        model.put("adminEmail","somebody@loc.gov");
132
        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>");
133

    
134

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
225
        DateTime from = new DateTime(1990,2,1,12,0,0, 0);
226
        DateTime until = new DateTime();
227
        model.put("from",from);
228
        model.put("until", until);
229

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

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

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

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

    
262
        DateTime from = new DateTime(1990,2,1,12,0,0, 0);
263
        DateTime until = new DateTime();
264
        model.put("from",from);
265
        model.put("until", until);
266

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

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

    
297

    
298
    }
299
}
(2-2/3)