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

Last change on this file since 989 was 989, checked in by paucas, 13 years ago
  • implemented lowercasing
File size: 38.0 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")); //TODO PD curate year needs to be only the year also for olac, lrt
382        assertEquals(null, doc.getFieldValue("subject"));
383//TODO PD make it work check TRAC ticket to get resources in
384//        Collection<Object> fieldValue = doc.getFieldValues("resource");
385//        assertEquals(2, fieldValue.size());
386    }
387
388    @Test
389    public void testEmptyFieldsShouldBeNull() throws Exception {
390        String content = "";
391        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
392        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
393        content += "     xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438204/xsd\">\n";
394        content += "   <Header>\n";
395        content += "      <MdCreationDate>2008-05-27</MdCreationDate>\n";
396        content += "      <MdSelfLink>test-hdl:1839/00-0000-0000-0009-294C-9</MdSelfLink>\n";
397        content += "      <MdProfile>clarin.eu:cr1:p_1271859438204</MdProfile>\n";
398        content += "   </Header>\n";
399        content += "   <Resources>\n";
400        content += "      <ResourceProxyList>\n";
401        content += "      </ResourceProxyList>\n";
402        content += "      <JournalFileProxyList/>\n";
403        content += "      <ResourceRelationList/>\n";
404        content += "   </Resources>\n";
405        content += "   <Components>\n";
406        content += "      <Session>\n";
407        content += "         <Name>kleve-route</Name>\n";
408        content += "         <Title>route description to Kleve</Title>\n";
409        content += "         <Date></Date>\n";
410        content += "         <descriptions>\n";
411        content += "            <Description LanguageId=\"ISO639-2:eng\">Test.</Description>\n";
412        content += "         </descriptions>\n";
413        content += "         <MDGroup>\n";
414        content += "            <Location>\n";
415        content += "               <Continent>Europe</Continent>\n";
416        content += "               <Country>Netherlands</Country>\n";
417        content += "               <Region/>\n";
418        content += "               <Address>Wundtlaan 1, Nijmegen</Address>\n";
419        content += "            </Location>\n";
420        content += "            <Project>\n";
421        content += "               <Name>Peter Wittenburg</Name>\n";
422        content += "               <Title>Route description test resource</Title>\n";
423        content += "               <Id/>\n";
424        content += "               <Contact>\n";
425        content += "                  <Name></Name>\n";
426        content += "                  <Address></Address>\n";
427        content += "                  <Email></Email>\n";
428        content += "                  <Organisation></Organisation>\n";
429        content += "               </Contact>\n";
430        content += "               <descriptions>\n";
431        content += "                  <Description LanguageId=\"\"/>\n";
432        content += "               </descriptions>\n";
433        content += "            </Project>\n";
434        content += "            <Keys>\n";
435        content += "            </Keys>\n";
436        content += "            <Content>\n";
437        content += "               <Genre>Unspecified</Genre>\n";
438        content += "               <SubGenre>Unspecified</SubGenre>\n";
439        content += "               <Task>route description</Task>\n";
440        content += "               <Modalities>Speech; Gestures</Modalities>\n";
441        content += "               <CommunicationContext>\n";
442        content += "               </CommunicationContext>\n";
443        content += "               <Content_Languages>\n";
444        content += "               </Content_Languages>\n";
445        content += "               <descriptions>\n";
446        content += "               </descriptions>\n";
447        content += "            </Content>\n";
448        content += "            <Actors>\n";
449        content += "            </Actors>\n";
450        content += "         </MDGroup>\n";
451        content += "         <Resources>\n";
452        content += "         </Resources>\n";
453        content += "      </Session>\n";
454        content += "   </Components>\n";
455        content += "</CMD>\n";
456        File cmdiFile = createCmdiFile("testSession", content);
457        CMDIDigester digester = new CMDIDigester(getIMDIFacetMap());
458        CMDIData data = digester.process(cmdiFile);
459        assertEquals("test-hdl:1839/00-0000-0000-0009-294C-9", data.getId());
460        List<String> resources = data.getResources();
461        assertEquals(0, resources.size());
462        SolrInputDocument doc = data.getSolrDocument();
463        assertNotNull(doc);
464        assertEquals(5, doc.getFieldNames().size());
465        assertEquals("kleve-route", doc.getFieldValue("name"));
466        assertEquals("Europe", doc.getFieldValue("continent"));
467        assertEquals("Netherlands", doc.getFieldValue("country"));
468        assertEquals("unspecified", doc.getFieldValue("genre"));
469        assertEquals("Test.", doc.getFieldValue("description"));
470        assertEquals("Should be null not empty string", null, doc.getFieldValue("organisation"));
471        assertEquals(null, doc.getFieldValue("language"));
472        assertEquals(null, doc.getFieldValue("subject"));
473        assertEquals(null, doc.getFieldValue("year"));
474    }
475
476    @Test
477    public void testOlac() throws Exception {
478        String content = "";
479        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
480        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
481        content += "     xmlns:dc=\"http://purl.org/dc/elements/1.1/\"\n";
482        content += "     xmlns:oai_dc=\"http://www.openarchives.org/OAI/2.0/oai_dc/\"\n";
483        content += "     xmlns:defns=\"http://www.openarchives.org/OAI/2.0/\"\n";
484        content += "     xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438236/xsd\">\n";
485        content += "   <Header>\n";
486        content += "      <MdCreator>olac2cmdi.xsl</MdCreator>\n";
487        content += "      <MdCreationDate>2002-12-14</MdCreationDate>\n";
488        content += "      <MdSelfLink>oai:ailla.utexas.edu:1</MdSelfLink>\n";
489        content += "      <MdProfile>clarin.eu:cr1:p_1271859438236</MdProfile>\n";
490        content += "   </Header>\n";
491        content += "   <Resources>\n";
492        content += "      <ResourceProxyList/>\n";
493        content += "      <JournalFileProxyList/>\n";
494        content += "      <ResourceRelationList/>\n";
495        content += "   </Resources>\n";
496        content += "   <Components>\n";
497        content += "      <OLAC-DcmiTerms>\n";
498        content += "         <creator>Joel Sherzer (recorder)</creator>\n";
499        content += "         <description>\n";
500        content += "    Channel: Talking;\n";
501        content += "    Genre: Traditional Narrative / Story;\n";
502        content += "    Country: Panama;\n";
503        content += "    Place of Recording: Mulatuppu;\n";
504        content += "    Event: Community Gathering;\n";
505        content += "    Institutional Affiliation: University of Texas at Austin;\n";
506        content += "    Participant Information: Political Leader;\n";
507        content += "      </description>\n";
508        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";
509        content += "      </description>\n";
510        content += "         <identifier>http://uts.cc.utexas.edu/~ailla/audio/sherzer/one_eyed_grandmother.ram</identifier>\n";
511        content += "         <identifier>http://uts.cc.utexas.edu/~ailla/texts/sherzer/one_eyed_grandmother.pdf</identifier>\n";
512        content += "         <language olac-language=\"x-sil-CHN\"/>\n";
513        content += "         <language>Chinese</language>\n";
514        content += "         <subject>Kuna</subject>\n";
515        content += "         <type olac-linguistic-type=\"Transcription\"/>\n";
516        content += "      </OLAC-DcmiTerms>\n";
517        content += "   </Components>\n";
518        content += "</CMD>\n";
519
520        File cmdiFile = createCmdiFile("testOlac", content);
521        CMDIDigester digester = new CMDIDigester(getOlacFacetMap());
522        CMDIData data = digester.process(cmdiFile);
523        assertEquals("oai:ailla.utexas.edu:1", data.getId());
524        List<String> resources = data.getResources();
525        assertEquals(0, resources.size());
526        SolrInputDocument doc = data.getSolrDocument();
527        assertNotNull(doc);
528        assertEquals(3, doc.getFieldNames().size());
529        assertEquals(null, doc.getFieldValue("name"));
530        assertEquals(null, doc.getFieldValue("continent"));
531        assertEquals(1, doc.getFieldValues("language").size());
532        assertEquals("x-sil-CHN", doc.getFieldValue("language"));
533        assertEquals(null, doc.getFieldValue("country"));
534        assertEquals(null, doc.getFieldValue("organisation"));
535        assertEquals("transcription", doc.getFieldValue("genre"));
536      //  assertEquals("Kuna", doc.getFieldValue("subject"));
537        assertEquals(2, doc.getFieldValues("description").size());
538    }
539
540    @Test
541    public void testOlacCollection() throws Exception {
542        String content = "";
543        content += "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n";
544        content += "<CMD xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n";
545        content += "    xsi:schemaLocation=\"http://www.clarin.eu/cmd http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/clarin.eu:cr1:p_1271859438236/xsd\">\n";
546        content += "    <Header>\n";
547        content += "        <MdCreator>dir2cmdicollection.py</MdCreator>\n";
548        content += "        <MdCreationDate>2010-10-11</MdCreationDate>\n";
549        content += "        <MdSelfLink>collection_ATILF_Resources.cmdi</MdSelfLink>\n";
550        content += "        <MdProfile>clarin.eu:cr1:p_1271859438236</MdProfile>\n";
551        content += "    </Header>\n";
552        content += "    <Resources>\n";
553        content += "        <ResourceProxyList>\n";
554        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";
555        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";
556        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";
557        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";
558        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";
559        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";
560        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";
561        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";
562        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";
563        content += "        </ResourceProxyList>\n";
564        content += "        <JournalFileProxyList/>\n";
565        content += "        <ResourceRelationList/>\n";
566        content += "    </Resources>\n";
567        content += "    <Components>\n";
568        content += "        <olac></olac>\n";
569        content += "    </Components>\n";
570        content += "</CMD>\n";
571
572        File cmdiFile = createCmdiFile("testOlac", content);
573        CMDIDigester digester = new CMDIDigester(getOlacFacetMap());
574        CMDIData data = digester.process(cmdiFile);
575        assertEquals("collection_ATILF_Resources.cmdi", data.getId());
576        List<String> resources = data.getResources();
577        assertEquals(9, resources.size());
578        SolrInputDocument doc = data.getSolrDocument();
579        assertNull(doc);
580
581    }
582
583    //TODO PD add LRT test
584   
585    private FacetMapping getOlacFacetMap() {
586        BeanFactory factory = new ClassPathXmlApplicationContext(new String[] { "importerConfig.xml" }); 
587        FacetMapping facetMapping = (FacetMapping) factory.getBean("olacMapping");
588        return facetMapping;
589    }
590
591    private FacetMapping getIMDIFacetMap() {
592        BeanFactory factory = new ClassPathXmlApplicationContext(new String[] { "importerConfig.xml" });
593        FacetMapping facetMapping = (FacetMapping) factory.getBean("imdiMapping");
594        return facetMapping;
595    }
596
597    private File createCmdiFile(String name, String content) throws IOException {
598        File file = File.createTempFile(name, "cmdi", testDir);
599        FileUtils.writeStringToFile(file, content, "UTF-8");
600        return file;
601    }
602
603    @AfterClass
604    public static void cleanup() {
605        FileUtils.deleteQuietly(testDir);
606    }
607
608    @BeforeClass
609    public static void setup() {
610        final String baseTempPath = System.getProperty("java.io.tmpdir");
611        testDir = new File(baseTempPath + File.separator + "testRegistry_" + System.currentTimeMillis());
612        testDir.mkdir();
613        testDir.deleteOnExit();
614    }
615
616}
Note: See TracBrowser for help on using the repository browser.