source: vlo/trunk/vlo_webapp/src/test/java/eu/clarin/cmdi/vlo/importer/CMDIDigesterTest.java @ 995

Last change on this file since 995 was 995, checked in by patdui, 13 years ago
  • added test for lrt mapping
File size: 41.4 KB
Line 
1package eu.clarin.cmdi.vlo.importer;
2
3import static org.junit.Assert.assertEquals;
4import static org.junit.Assert.assertNotNull;
5import static org.junit.Assert.assertNull;
6
7import java.io.File;
8import java.io.IOException;
9import java.util.List;
10
11import org.apache.commons.io.FileUtils;
12import org.apache.solr.common.SolrInputDocument;
13import org.junit.AfterClass;
14import org.junit.BeforeClass;
15import org.junit.Test;
16import org.springframework.beans.factory.BeanFactory;
17import org.springframework.context.support.ClassPathXmlApplicationContext;
18
19public class CMDIDigesterTest {
20
21    private static File testDir;
22
23    @Test
24    public void testCreateCMDIDataFromCorpus() throws Exception {
25        String content = "";
26        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
27        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
28        content += "   <Header>\n";
29        content += "      <MdCreationDate>2003-01-14</MdCreationDate>\n";
30        content += "      <MdSelfLink>test-hdl:1839/00-0000-0000-0000-0001-D</MdSelfLink>\n";
31        content += "      <MdProfile>clarin.eu:cr1:p_1274880881885</MdProfile>\n";
32        content += "   </Header>\n";
33        content += "   <Resources>\n";
34        content += "      <ResourceProxyList>\n";
35        content += "         <ResourceProxy id=\"d28635e19\">\n";
36        content += "            <ResourceType>Metadata</ResourceType>\n";
37        content += "            <ResourceRef>../acqui_data/Corpusstructure/acqui.imdi.cmdi</ResourceRef>\n";
38        content += "         </ResourceProxy>\n";
39        content += "         <ResourceProxy id=\"d28635e23\">\n";
40        content += "            <ResourceType>Metadata</ResourceType>\n";
41        content += "            <ResourceRef>../Comprehension/Corpusstructure/comprehension.imdi.cmdi</ResourceRef>\n";
42        content += "         </ResourceProxy>\n";
43        content += "         <ResourceProxy id=\"d28635e26\">\n";
44        content += "            <ResourceType>Metadata</ResourceType>\n";
45        content += "            <ResourceRef>../lac_data/Corpusstructure/lac.imdi.cmdi</ResourceRef>\n";
46        content += "         </ResourceProxy>\n";
47        content += "      </ResourceProxyList>\n";
48        content += "      <JournalFileProxyList/>\n";
49        content += "      <ResourceRelationList/>\n";
50        content += "   </Resources>\n";
51        content += "   <Components>\n";
52        content += "      <imdi-corpus>\n";
53        content += "         <Corpus>\n";
54        content += "            <Name>MPI corpora</Name>\n";
55        content += "            <Title>Corpora of the Max-Planck Institute for Psycholinguistics</Title>\n";
56        content += "            <CorpusLink Name=\"Acquisition\">../acqui_data/Corpusstructure/acqui.imdi</CorpusLink>\n";
57        content += "            <CorpusLink Name=\"Comprehension\">../Comprehension/Corpusstructure/comprehension.imdi</CorpusLink>\n";
58        content += "            <CorpusLink Name=\"Language and Cognition\">../lac_data/Corpusstructure/lac.imdi</CorpusLink>\n";
59        content += "            <descriptions>\n";
60        content += "               <Description LanguageId=\"\">IMDI corpora</Description>\n";
61        content += "               <Description LanguageId=\"\"/>\n";
62        content += "            </descriptions>\n";
63        content += "         </Corpus>\n";
64        content += "      </imdi-corpus>\n";
65        content += "   </Components>\n";
66        content += "</CMD>\n";
67        File cmdiFile = createCmdiFile("testCorpus", content);
68        CMDIDigester digester = new CMDIDigester(getIMDIFacetMap());
69        CMDIData data = digester.process(cmdiFile);
70        assertEquals("test-hdl:1839/00-0000-0000-0000-0001-D", data.getId());
71        List<String> resources = data.getResources();
72        assertEquals(3, resources.size());
73        SolrInputDocument doc = data.getSolrDocument();
74        assertNull(doc);
75    }
76
77    @Test
78    public void testCreateCMDIDataFromSession() throws Exception {
79        String content = "";
80        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
81        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
82        content += "     xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438204/xsd\">\n";
83        content += "   <Header>\n";
84        content += "      <MdCreationDate>2008-05-27</MdCreationDate>\n";
85        content += "      <MdSelfLink>test-hdl:1839/00-0000-0000-0009-294C-9</MdSelfLink>\n";
86        content += "      <MdProfile>clarin.eu:cr1:p_1271859438204</MdProfile>\n";
87        content += "   </Header>\n";
88        content += "   <Resources>\n";
89        content += "      <ResourceProxyList>\n";
90        content += "         <ResourceProxy id=\"d314e408\">\n";
91        content += "            <ResourceType>Resource</ResourceType>\n";
92        content += "            <ResourceRef>../Media/elan-example1.mpg</ResourceRef>\n";
93        content += "         </ResourceProxy>\n";
94        content += "         <ResourceProxy id=\"d314e471\">\n";
95        content += "            <ResourceType>Resource</ResourceType>\n";
96        content += "            <ResourceRef>../Media/elan-example1.mp4</ResourceRef>\n";
97        content += "         </ResourceProxy>\n";
98        content += "      </ResourceProxyList>\n";
99        content += "      <JournalFileProxyList/>\n";
100        content += "      <ResourceRelationList/>\n";
101        content += "   </Resources>\n";
102        content += "   <Components>\n";
103        content += "      <Session>\n";
104        content += "         <Name>kleve-route</Name>\n";
105        content += "         <Title>route description to Kleve</Title>\n";
106        content += "         <Date>2002-10-30</Date>\n";
107        content += "         <descriptions>\n";
108        content += "            <Description LanguageId=\"ISO639-2:eng\">This  recording was made to generate a freely available test resource including speech and gestures. The annotations were created by Peter and Kita who is gesture researcher at the MPI for Psycholinguistics.</Description>\n";
109        content += "            <Description LanguageId=\"ISO639-2:ger\">Diese Aufnahme wurde erzeugt, um eine frei verf\\u00fcgbare Test Resource zur Verf\\u00fcgung stellen zu k\\u00f6nnen, die Sprache und Gestik umfasst. Die Annotationen wurden von Peter und Kita, dem Gestik Researcher am MPI erzeugt.</Description>\n";
110        content += "         </descriptions>\n";
111        content += "         <MDGroup>\n";
112        content += "            <Location>\n";
113        content += "               <Continent>Europe</Continent>\n";
114        content += "               <Country>Netherlands</Country>\n";
115        content += "               <Region/>\n";
116        content += "               <Address>Wundtlaan 1, Nijmegen</Address>\n";
117        content += "            </Location>\n";
118        content += "            <Project>\n";
119        content += "               <Name>Peter Wittenburg</Name>\n";
120        content += "               <Title>Route description test resource</Title>\n";
121        content += "               <Id/>\n";
122        content += "               <Contact>\n";
123        content += "                  <Name>Peter Wittenburg</Name>\n";
124        content += "                  <Address>Wundtlaan 1, 6525 XD Nijmegen</Address>\n";
125        content += "                  <Email>peter.wittenburg@mpi.nl</Email>\n";
126        content += "                  <Organisation>Max Planck Institute for Psycholinguistics</Organisation>\n";
127        content += "               </Contact>\n";
128        content += "               <descriptions>\n";
129        content += "                  <Description LanguageId=\"\"/>\n";
130        content += "               </descriptions>\n";
131        content += "            </Project>\n";
132        content += "            <Keys>\n";
133        content += "               <Key Name=\"conversion.IMDI.1.9to3.0.warning\">Unknown mapping of Genre: conversation|explanation|unspecified --&gt; ???</Key>\n";
134        content += "            </Keys>\n";
135        content += "            <Content>\n";
136        content += "               <Genre>Unspecified</Genre>\n";
137        content += "               <SubGenre>Unspecified</SubGenre>\n";
138        content += "               <Task>route description</Task>\n";
139        content += "               <Modalities>Speech; Gestures</Modalities>\n";
140        content += "               <CommunicationContext>\n";
141        content += "                  <Interactivity>interactive</Interactivity>\n";
142        content += "                  <PlanningType>semi-spontaneous</PlanningType>\n";
143        content += "                  <Involvement>elicited</Involvement>\n";
144        content += "                  <SocialContext>Unspecified</SocialContext>\n";
145        content += "                  <EventStructure>Unspecified</EventStructure>\n";
146        content += "                  <Channel>Unspecified</Channel>\n";
147        content += "               </CommunicationContext>\n";
148        content += "               <Content_Languages>\n";
149        content += "                  <descriptions>\n";
150        content += "                     <Description LanguageId=\"\"/>\n";
151        content += "                  </descriptions>\n";
152        content += "                  <Content_Language>\n";
153        content += "                     <Id>ISO639-3:eng</Id>\n";
154        content += "                     <Name>English</Name>\n";
155        content += "                     <descriptions>\n";
156        content += "                        <Description LanguageId=\"\"/>\n";
157        content += "                     </descriptions>\n";
158        content += "                  </Content_Language>\n";
159        content += "               </Content_Languages>\n";
160        content += "               <Keys>\n";
161        content += "                  <Key Name=\"IMDI__1_9.Interactional\">conversation</Key>\n";
162        content += "                  <Key Name=\"IMDI__1_9.Discursive\">explanation</Key>\n";
163        content += "                  <Key Name=\"IMDI__1_9.Interactional\">Unspecified</Key>\n";
164        content += "               </Keys>\n";
165        content += "               <descriptions>\n";
166        content += "                  <Description LanguageId=\"ISO639:eng\">This file was generated from an IMDI 1.9 file and transformed to IMDI 3.0. The substructure of Genre is replaced by two elements named \"Genre\" and \"SubGenre\". The original content of Genre substructure was: Interactional = 'conversation', Discursive = 'explanation', Performance = 'Unspecified'. These values have been added as Keys to the Content information.</Description>\n";
167        content += "                  <Description LanguageId=\"ISO639:eng\">Peter explains how to come from Nijmegen to Kleve by car, such that Kita would be able to get there.</Description>\n";
168        content += "               </descriptions>\n";
169        content += "            </Content>\n";
170        content += "            <Actors>\n";
171        content += "               <descriptions>\n";
172        content += "                  <Description LanguageId=\"\"/>\n";
173        content += "               </descriptions>\n";
174        content += "               <Actor>\n";
175        content += "                  <Role>interviewee</Role>\n";
176        content += "                  <Name>Peter</Name>\n";
177        content += "                  <FullName>Peter Wittenburg</FullName>\n";
178        content += "                  <Code>W</Code>\n";
179        content += "                  <FamilySocialRole>Unspecified</FamilySocialRole>\n";
180        content += "                  <EthnicGroup/>\n";
181        content += "                  <Age>Unknown</Age>\n";
182        content += "                  <BirthDate>Unspecified</BirthDate>\n";
183        content += "                  <Sex>Unknown</Sex>\n";
184        content += "                  <Education>university</Education>\n";
185        content += "                  <Anonymized>true</Anonymized>\n";
186        content += "                  <Contact>\n";
187        content += "                     <Name/>\n";
188        content += "                     <Address/>\n";
189        content += "                     <Email/>\n";
190        content += "                     <Organisation/>\n";
191        content += "                  </Contact>\n";
192        content += "                  <Keys/>\n";
193        content += "                  <descriptions>\n";
194        content += "                     <Description LanguageId=\"\"/>\n";
195        content += "                  </descriptions>\n";
196        content += "                  <Actor_Languages>\n";
197        content += "                     <descriptions>\n";
198        content += "                        <Description LanguageId=\"\"/>\n";
199        content += "                     </descriptions>\n";
200        content += "                     <Actor_Language>\n";
201        content += "                        <Id>ISO639-3:nld</Id>\n";
202        content += "                        <Name>Dutch</Name>\n";
203        content += "                        <descriptions>\n";
204        content += "                           <Description LanguageId=\"\"/>\n";
205        content += "                        </descriptions>\n";
206        content += "                     </Actor_Language>\n";
207        content += "                     <Actor_Language>\n";
208        content += "                        <Id>ISO639-3:deu</Id>\n";
209        content += "                        <Name>German</Name>\n";
210        content += "                        <descriptions>\n";
211        content += "                           <Description LanguageId=\"\"/>\n";
212        content += "                        </descriptions>\n";
213        content += "                     </Actor_Language>\n";
214        content += "                     <Actor_Language>\n";
215        content += "                        <Id>ISO639-3:eng</Id>\n";
216        content += "                        <Name>English</Name>\n";
217        content += "                        <descriptions>\n";
218        content += "                           <Description LanguageId=\"\"/>\n";
219        content += "                        </descriptions>\n";
220        content += "                     </Actor_Language>\n";
221        content += "                  </Actor_Languages>\n";
222        content += "               </Actor>\n";
223        content += "               <Actor>\n";
224        content += "                  <Role>interviewer</Role>\n";
225        content += "                  <Name>Kita</Name>\n";
226        content += "                  <FullName>Sotaro Kita</FullName>\n";
227        content += "                  <Code>k</Code>\n";
228        content += "                  <FamilySocialRole>Unspecified</FamilySocialRole>\n";
229        content += "                  <EthnicGroup/>\n";
230        content += "                  <Age>Unknown</Age>\n";
231        content += "                  <BirthDate>Unspecified</BirthDate>\n";
232        content += "                  <Sex>Unknown</Sex>\n";
233        content += "                  <Education>university</Education>\n";
234        content += "                  <Anonymized>true</Anonymized>\n";
235        content += "                  <Contact>\n";
236        content += "                     <Name/>\n";
237        content += "                     <Address/>\n";
238        content += "                     <Email/>\n";
239        content += "                     <Organisation/>\n";
240        content += "                  </Contact>\n";
241        content += "                  <Keys/>\n";
242        content += "                  <descriptions>\n";
243        content += "                     <Description LanguageId=\"\"/>\n";
244        content += "                  </descriptions>\n";
245        content += "                  <Actor_Languages>\n";
246        content += "                     <descriptions>\n";
247        content += "                        <Description LanguageId=\"\"/>\n";
248        content += "                     </descriptions>\n";
249        content += "                     <Actor_Language>\n";
250        content += "                        <Id>ISO639-3:eng</Id>\n";
251        content += "                        <Name>English</Name>\n";
252        content += "                        <descriptions>\n";
253        content += "                           <Description LanguageId=\"\"/>\n";
254        content += "                        </descriptions>\n";
255        content += "                     </Actor_Language>\n";
256        content += "                     <Actor_Language>\n";
257        content += "                        <Id>ISO639-3:jpn</Id>\n";
258        content += "                        <Name>Japanese</Name>\n";
259        content += "                        <descriptions>\n";
260        content += "                           <Description LanguageId=\"\"/>\n";
261        content += "                        </descriptions>\n";
262        content += "                     </Actor_Language>\n";
263        content += "                  </Actor_Languages>\n";
264        content += "               </Actor>\n";
265        content += "               <Actor>\n";
266        content += "                  <Role>Collector</Role>\n";
267        content += "                  <Name>Peter Wittenburg</Name>\n";
268        content += "                  <FullName>Peter Wittenburg</FullName>\n";
269        content += "                  <Code>Unspecified</Code>\n";
270        content += "                  <FamilySocialRole>Unspecified</FamilySocialRole>\n";
271        content += "                  <EthnicGroup/>\n";
272        content += "                  <Age>Unspecified</Age>\n";
273        content += "                  <BirthDate>Unspecified</BirthDate>\n";
274        content += "                  <Sex>Unspecified</Sex>\n";
275        content += "                  <Education/>\n";
276        content += "                  <Anonymized>false</Anonymized>\n";
277        content += "                  <Contact>\n";
278        content += "                     <Name>Peter Wittenburg</Name>\n";
279        content += "                     <Address>Wundtlaan 1, 6525 XD Nijmegen</Address>\n";
280        content += "                     <Email>peter.wittenburg@mpi.nl</Email>\n";
281        content += "                     <Organisation>Max-Planck-Institute for Psycholinguistics</Organisation>\n";
282        content += "                  </Contact>\n";
283        content += "                  <Keys/>\n";
284        content += "                  <descriptions>\n";
285        content += "                     <Description LanguageId=\"\"/>\n";
286        content += "                  </descriptions>\n";
287        content += "                  <Actor_Languages/>\n";
288        content += "               </Actor>\n";
289        content += "            </Actors>\n";
290        content += "         </MDGroup>\n";
291        content += "         <Resources>\n";
292        content += "            <MediaFile ref=\"d314e408\">\n";
293        content += "               <ResourceLink>../Media/elan-example1.mpg</ResourceLink>\n";
294        content += "               <Type>video</Type>\n";
295        content += "               <Format>video/x-mpeg1</Format>\n";
296        content += "               <Size/>\n";
297        content += "               <Quality>Unknown</Quality>\n";
298        content += "               <RecordingConditions>excellent</RecordingConditions>\n";
299        content += "               <TimePosition>\n";
300        content += "                  <Start>Unknown</Start>\n";
301        content += "                  <End>Unknown</End>\n";
302        content += "               </TimePosition>\n";
303        content += "               <Access>\n";
304        content += "                  <Availability>openly available</Availability>\n";
305        content += "                  <Date>2003-02-12</Date>\n";
306        content += "                  <Owner>MPI for Psycholinguistics</Owner>\n";
307        content += "                  <Publisher/>\n";
308        content += "                  <Contact>\n";
309        content += "                     <Name>Romuald Skiba</Name>\n";
310        content += "                     <Address/>\n";
311        content += "                     <Email/>\n";
312        content += "                     <Organisation/>\n";
313        content += "                  </Contact>\n";
314        content += "                  <descriptions>\n";
315        content += "                     <Description LanguageId=\"\"/>\n";
316        content += "                  </descriptions>\n";
317        content += "               </Access>\n";
318        content += "               <descriptions>\n";
319        content += "                  <Description LanguageId=\"\"/>\n";
320        content += "               </descriptions>\n";
321        content += "               <Keys/>\n";
322        content += "            </MediaFile>\n";
323        content += "            <MediaFile ref=\"d314e471\">\n";
324        content += "               <ResourceLink>../Media/elan-example1.mp4</ResourceLink>\n";
325        content += "               <Type>video</Type>\n";
326        content += "               <Format>video/mp4</Format>\n";
327        content += "               <Size/>\n";
328        content += "               <Quality>Unknown</Quality>\n";
329        content += "               <RecordingConditions>excellent</RecordingConditions>\n";
330        content += "               <TimePosition>\n";
331        content += "                  <Start>Unknown</Start>\n";
332        content += "                  <End>Unknown</End>\n";
333        content += "               </TimePosition>\n";
334        content += "               <Access>\n";
335        content += "                  <Availability>openly available</Availability>\n";
336        content += "                  <Date>2003-02-12</Date>\n";
337        content += "                  <Owner>MPI for Psycholinguistics</Owner>\n";
338        content += "                  <Publisher/>\n";
339        content += "                  <Contact>\n";
340        content += "                     <Name>Romuald Skiba</Name>\n";
341        content += "                     <Address/>\n";
342        content += "                     <Email/>\n";
343        content += "                     <Organisation/>\n";
344        content += "                  </Contact>\n";
345        content += "                  <descriptions>\n";
346        content += "                     <Description LanguageId=\"\"/>\n";
347        content += "                  </descriptions>\n";
348        content += "               </Access>\n";
349        content += "               <descriptions>\n";
350        content += "                  <Description LanguageId=\"\"/>\n";
351        content += "               </descriptions>\n";
352        content += "               <Keys/>\n";
353        content += "            </MediaFile>\n";
354        content += "         </Resources>\n";
355        content += "         <References>\n";
356        content += "            <descriptions>\n";
357        content += "               <Description LanguageId=\"\"/>\n";
358        content += "            </descriptions>\n";
359        content += "         </References>\n";
360        content += "      </Session>\n";
361        content += "   </Components>\n";
362        content += "</CMD>\n";
363        File cmdiFile = createCmdiFile("testSession", content);
364        CMDIDigester digester = new CMDIDigester(getIMDIFacetMap());
365        CMDIData data = digester.process(cmdiFile);
366        assertEquals("test-hdl:1839/00-0000-0000-0009-294C-9", data.getId());
367        List<String> resources = data.getResources();
368        assertEquals(0, resources.size());
369        SolrInputDocument doc = data.getSolrDocument();
370        assertNotNull(doc);
371        assertEquals(8, doc.getFieldNames().size());
372        assertEquals("kleve-route", doc.getFieldValue("name"));
373        assertEquals("Europe", doc.getFieldValue("continent"));
374        assertEquals("ISO639-3:eng", doc.getFieldValue("language"));
375        assertEquals("Netherlands", doc.getFieldValue("country"));
376        assertEquals("Max Planck Institute for Psycholinguistics", doc.getFieldValue("organisation"));
377        assertEquals("unspecified", doc.getFieldValue("genre"));
378        assertEquals(
379                "This  recording was made to generate a freely available test resource including speech and gestures. The annotations were created by Peter and Kita who is gesture researcher at the MPI for Psycholinguistics.",
380                doc.getFieldValue("description"));
381        assertEquals("2002-10-30", doc.getFieldValue("year"));
382        assertEquals(null, doc.getFieldValue("subject"));
383    }
384
385    @Test
386    public void testEmptyFieldsShouldBeNull() throws Exception {
387        String content = "";
388        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
389        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
390        content += "     xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438204/xsd\">\n";
391        content += "   <Header>\n";
392        content += "      <MdCreationDate>2008-05-27</MdCreationDate>\n";
393        content += "      <MdSelfLink>test-hdl:1839/00-0000-0000-0009-294C-9</MdSelfLink>\n";
394        content += "      <MdProfile>clarin.eu:cr1:p_1271859438204</MdProfile>\n";
395        content += "   </Header>\n";
396        content += "   <Resources>\n";
397        content += "      <ResourceProxyList>\n";
398        content += "      </ResourceProxyList>\n";
399        content += "      <JournalFileProxyList/>\n";
400        content += "      <ResourceRelationList/>\n";
401        content += "   </Resources>\n";
402        content += "   <Components>\n";
403        content += "      <Session>\n";
404        content += "         <Name>kleve-route</Name>\n";
405        content += "         <Title>route description to Kleve</Title>\n";
406        content += "         <Date></Date>\n";
407        content += "         <descriptions>\n";
408        content += "            <Description LanguageId=\"ISO639-2:eng\">Test.</Description>\n";
409        content += "         </descriptions>\n";
410        content += "         <MDGroup>\n";
411        content += "            <Location>\n";
412        content += "               <Continent>Europe</Continent>\n";
413        content += "               <Country>Netherlands</Country>\n";
414        content += "               <Region/>\n";
415        content += "               <Address>Wundtlaan 1, Nijmegen</Address>\n";
416        content += "            </Location>\n";
417        content += "            <Project>\n";
418        content += "               <Name>Peter Wittenburg</Name>\n";
419        content += "               <Title>Route description test resource</Title>\n";
420        content += "               <Id/>\n";
421        content += "               <Contact>\n";
422        content += "                  <Name></Name>\n";
423        content += "                  <Address></Address>\n";
424        content += "                  <Email></Email>\n";
425        content += "                  <Organisation></Organisation>\n";
426        content += "               </Contact>\n";
427        content += "               <descriptions>\n";
428        content += "                  <Description LanguageId=\"\"/>\n";
429        content += "               </descriptions>\n";
430        content += "            </Project>\n";
431        content += "            <Keys>\n";
432        content += "            </Keys>\n";
433        content += "            <Content>\n";
434        content += "               <Genre>Unspecified</Genre>\n";
435        content += "               <SubGenre>Unspecified</SubGenre>\n";
436        content += "               <Task>route description</Task>\n";
437        content += "               <Modalities>Speech; Gestures</Modalities>\n";
438        content += "               <CommunicationContext>\n";
439        content += "               </CommunicationContext>\n";
440        content += "               <Content_Languages>\n";
441        content += "               </Content_Languages>\n";
442        content += "               <descriptions>\n";
443        content += "               </descriptions>\n";
444        content += "            </Content>\n";
445        content += "            <Actors>\n";
446        content += "            </Actors>\n";
447        content += "         </MDGroup>\n";
448        content += "         <Resources>\n";
449        content += "         </Resources>\n";
450        content += "      </Session>\n";
451        content += "   </Components>\n";
452        content += "</CMD>\n";
453        File cmdiFile = createCmdiFile("testSession", content);
454        CMDIDigester digester = new CMDIDigester(getIMDIFacetMap());
455        CMDIData data = digester.process(cmdiFile);
456        assertEquals("test-hdl:1839/00-0000-0000-0009-294C-9", data.getId());
457        List<String> resources = data.getResources();
458        assertEquals(0, resources.size());
459        SolrInputDocument doc = data.getSolrDocument();
460        assertNotNull(doc);
461        assertEquals(5, doc.getFieldNames().size());
462        assertEquals("kleve-route", doc.getFieldValue("name"));
463        assertEquals("Europe", doc.getFieldValue("continent"));
464        assertEquals("Netherlands", doc.getFieldValue("country"));
465        assertEquals("unspecified", doc.getFieldValue("genre"));
466        assertEquals("Test.", doc.getFieldValue("description"));
467        assertEquals("Should be null not empty string", null, doc.getFieldValue("organisation"));
468        assertEquals(null, doc.getFieldValue("language"));
469        assertEquals(null, doc.getFieldValue("subject"));
470        assertEquals(null, doc.getFieldValue("year"));
471    }
472
473    @Test
474    public void testOlac() throws Exception {
475        String content = "";
476        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
477        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
478        content += "     xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n";
479        content += "     xmlns:oai_dc=\"http://www.openarchives.org/OAI/2.0/oai_dc/\"\n";
480        content += "     xmlns:defns=\"http://www.openarchives.org/OAI/2.0/\"\n";
481        content += "     xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438236/xsd\">\n";
482        content += "   <Header>\n";
483        content += "      <MdCreator>olac2cmdi.xsl</MdCreator>\n";
484        content += "      <MdCreationDate>2002-12-14</MdCreationDate>\n";
485        content += "      <MdSelfLink>oai:ailla.utexas.edu:1</MdSelfLink>\n";
486        content += "      <MdProfile>clarin.eu:cr1:p_1271859438236</MdProfile>\n";
487        content += "   </Header>\n";
488        content += "   <Resources>\n";
489        content += "      <ResourceProxyList/>\n";
490        content += "      <JournalFileProxyList/>\n";
491        content += "      <ResourceRelationList/>\n";
492        content += "   </Resources>\n";
493        content += "   <Components>\n";
494        content += "      <OLAC-DcmiTerms>\n";
495        content += "         <creator>Joel Sherzer (recorder)</creator>\n";
496        content += "         <description>\n";
497        content += "    Channel: Talking;\n";
498        content += "    Genre: Traditional Narrative / Story;\n";
499        content += "    Country: Panama;\n";
500        content += "    Place of Recording: Mulatuppu;\n";
501        content += "    Event: Community Gathering;\n";
502        content += "    Institutional Affiliation: University of Texas at Austin;\n";
503        content += "    Participant Information: Political Leader;\n";
504        content += "      </description>\n";
505        content += "         <description>The one-eyed grandmother is one of many traditional Kuna stories performed in the Kuna gathering house. This story, performed here by Pedro Arias, combines European derived motifs (Tom Thumb and Hansel and Gretel) with themes that seem more Kuna in origin. All are woven together and a moral is provided. Pedro Arias performed this story before a gathered audience in the morning..\n";
506        content += "      </description>\n";
507        content += "         <identifier>http://uts.cc.utexas.edu/~ailla/audio/sherzer/one_eyed_grandmother.ram</identifier>\n";
508        content += "         <identifier>http://uts.cc.utexas.edu/~ailla/texts/sherzer/one_eyed_grandmother.pdf</identifier>\n";
509        content += "         <language olac-language=\"x-sil-CHN\"/>\n";
510        content += "         <language>Chinese</language>\n";
511        content += "         <subject>Kuna</subject>\n";
512        content += "         <type olac-linguistic-type=\"Transcription\"/>\n";
513        content += "      </OLAC-DcmiTerms>\n";
514        content += "   </Components>\n";
515        content += "</CMD>\n";
516
517        File cmdiFile = createCmdiFile("testOlac", content);
518        CMDIDigester digester = new CMDIDigester(getOlacFacetMap());
519        CMDIData data = digester.process(cmdiFile);
520        assertEquals("oai:ailla.utexas.edu:1", data.getId());
521        List<String> resources = data.getResources();
522        assertEquals(0, resources.size());
523        SolrInputDocument doc = data.getSolrDocument();
524        assertNotNull(doc);
525        assertEquals(3, doc.getFieldNames().size());
526        assertEquals(null, doc.getFieldValue("name"));
527        assertEquals(null, doc.getFieldValue("continent"));
528        assertEquals(1, doc.getFieldValues("language").size());
529        assertEquals("x-sil-CHN", doc.getFieldValue("language"));
530        assertEquals(null, doc.getFieldValue("country"));
531        assertEquals(null, doc.getFieldValue("organisation"));
532        assertEquals("transcription", doc.getFieldValue("genre"));
533        //  assertEquals("Kuna", doc.getFieldValue("subject"));
534        assertEquals(2, doc.getFieldValues("description").size());
535    }
536
537    @Test
538    public void testOlacCollection() throws Exception {
539        String content = "";
540        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
541        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
542        content += "    xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438236/xsd\">\n";
543        content += "    <Header>\n";
544        content += "        <MdCreator>dir2cmdicollection.py</MdCreator>\n";
545        content += "        <MdCreationDate>2010-10-11</MdCreationDate>\n";
546        content += "        <MdSelfLink>collection_ATILF_Resources.cmdi</MdSelfLink>\n";
547        content += "        <MdProfile>clarin.eu:cr1:p_1271859438236</MdProfile>\n";
548        content += "    </Header>\n";
549        content += "    <Resources>\n";
550        content += "        <ResourceProxyList>\n";
551        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0001.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0001.xml.cmdi</ResourceRef></ResourceProxy>\n";
552        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0002.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0002.xml.cmdi</ResourceRef></ResourceProxy>\n";
553        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0003.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0003.xml.cmdi</ResourceRef></ResourceProxy>\n";
554        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0004.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0004.xml.cmdi</ResourceRef></ResourceProxy>\n";
555        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0005_a.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0005_a.xml.cmdi</ResourceRef></ResourceProxy>\n";
556        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0005_b.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0005_b.xml.cmdi</ResourceRef></ResourceProxy>\n";
557        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_0006.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_0006.xml.cmdi</ResourceRef></ResourceProxy>\n";
558        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_M277.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_M277.xml.cmdi</ResourceRef></ResourceProxy>\n";
559        content += "<ResourceProxy id=\"ATILF_Resources_0_oai_atilf_inalf_fr_M592.xml.cmdi\"><ResourceType>Metadata</ResourceType><ResourceRef>ATILF_Resources/0/oai_atilf_inalf_fr_M592.xml.cmdi</ResourceRef></ResourceProxy>\n";
560        content += "        </ResourceProxyList>\n";
561        content += "        <JournalFileProxyList/>\n";
562        content += "        <ResourceRelationList/>\n";
563        content += "    </Resources>\n";
564        content += "    <Components>\n";
565        content += "        <olac></olac>\n";
566        content += "    </Components>\n";
567        content += "</CMD>\n";
568
569        File cmdiFile = createCmdiFile("testOlac", content);
570        CMDIDigester digester = new CMDIDigester(getOlacFacetMap());
571        CMDIData data = digester.process(cmdiFile);
572        assertEquals("collection_ATILF_Resources.cmdi", data.getId());
573        List<String> resources = data.getResources();
574        assertEquals(9, resources.size());
575        SolrInputDocument doc = data.getSolrDocument();
576        assertNull(doc);
577
578    }
579
580    @Test
581    public void testLrtCollection() throws Exception {
582        String content = "";
583        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
584        content += "<CMD ns0:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1289827960126/xsd\" xmlns:ns0=\"http://www.w3.org/2001/XMLSchema-instance\">\n";
585        content += "    <Header>\n";
586        content += "        <MdCreator>lrt2cmdi.py</MdCreator>\n";
587        content += "        <MdCreationDate>2010-11-17</MdCreationDate>\n";
588        content += "        <MdSelfLink>clarin.eu:lrt:433</MdSelfLink>\n";
589        content += "        <MdProfile>clarin.eu:cr1:p_1289827960126</MdProfile>\n";
590        content += "    </Header>\n";
591        content += "    <Resources>\n";
592        content += "        <ResourceProxyList />\n";
593        content += "        <JournalFileProxyList />\n";
594        content += "        <ResourceRelationList />\n";
595        content += "    </Resources>\n";
596        content += "    <Components>\n";
597        content += "        <LrtInventoryResource>\n";
598        content += "            <LrtCommon>\n";
599        content += "                <ResourceName>Corpus of Present-day Written Estonian</ResourceName>\n";
600        content += "                <ResourceType>Written Corpus</ResourceType>\n";
601        content += "                <LanguagesOther />\n";
602        content += "                <Description>written general; 95 mio words; TEI/SGML</Description>\n";
603        content += "                <ContactPerson>Kadri.Muischnek@ut.ee</ContactPerson>\n";
604        content += "                <Format />\n";
605        content += "                <Institute>Test</Institute>\n";
606        content += "                <MetadataLink />\n";
607        content += "                <Publications />\n";
608        content += "                <ReadilyAvailable>true</ReadilyAvailable>\n";
609        content += "                <ReferenceLink />         \n";
610        content += "                <Languages><ISO639><iso-639-3-code>est</iso-639-3-code></ISO639></Languages>\n";
611        content += "                <Countries><Country><Code>EE</Code></Country></Countries>\n";
612        content += "            </LrtCommon>\n";
613        content += "       </LrtInventoryResource>\n";
614        content += "    </Components>\n";
615        content += "</CMD>\n";
616
617        File cmdiFile = createCmdiFile("testOlac", content);
618        CMDIDigester digester = new CMDIDigester(getLrtFacetMap());
619        CMDIData data = digester.process(cmdiFile);
620        assertEquals("clarin.eu:lrt:433", data.getId());
621        List<String> resources = data.getResources();
622        assertEquals(0, resources.size());
623        SolrInputDocument doc = data.getSolrDocument();
624        assertNotNull(doc);
625        assertEquals(5, doc.getFieldNames().size());
626        assertEquals("Corpus of Present-day Written Estonian", doc.getFieldValue("name"));
627        assertEquals(null, doc.getFieldValue("continent"));
628        assertEquals(1, doc.getFieldValues("language").size());
629        assertEquals("est", doc.getFieldValue("language"));
630        assertEquals("EE", doc.getFieldValue("country"));
631        assertEquals("Test", doc.getFieldValue("organisation"));
632        assertEquals(null, doc.getFieldValue("year"));
633        assertEquals(null, doc.getFieldValue("genre"));
634        assertEquals("written general; 95 mio words; TEI/SGML", doc.getFieldValue("description"));
635    }
636
637    private FacetMapping getOlacFacetMap() {
638        BeanFactory factory = new ClassPathXmlApplicationContext(new String[] { "importerConfig.xml" });
639        FacetMapping facetMapping = (FacetMapping) factory.getBean("olacMapping");
640        return facetMapping;
641    }
642
643    private FacetMapping getIMDIFacetMap() {
644        BeanFactory factory = new ClassPathXmlApplicationContext(new String[] { "importerConfig.xml" });
645        FacetMapping facetMapping = (FacetMapping) factory.getBean("imdiMapping");
646        return facetMapping;
647    }
648
649    private FacetMapping getLrtFacetMap() {
650        BeanFactory factory = new ClassPathXmlApplicationContext(new String[] { "importerConfig.xml" });
651        FacetMapping facetMapping = (FacetMapping) factory.getBean("lrtMapping");
652        return facetMapping;
653    }
654
655    private File createCmdiFile(String name, String content) throws IOException {
656        File file = File.createTempFile(name, "cmdi", testDir);
657        FileUtils.writeStringToFile(file, content, "UTF-8");
658        return file;
659    }
660
661    @AfterClass
662    public static void cleanup() {
663        FileUtils.deleteQuietly(testDir);
664    }
665
666    @BeforeClass
667    public static void setup() {
668        final String baseTempPath = System.getProperty("java.io.tmpdir");
669        testDir = new File(baseTempPath + File.separator + "testRegistry_" + System.currentTimeMillis());
670        testDir.mkdir();
671        testDir.deleteOnExit();
672    }
673
674}
Note: See TracBrowser for help on using the repository browser.