Changeset 6029
- Timestamp:
- 02/24/15 08:11:39 (9 years ago)
- Location:
- vlo/branches/vlo-3.1
- Files:
-
- 5 deleted
- 30 edited
- 11 copied
Legend:
- Unmodified
- Added
- Removed
-
vlo/branches/vlo-3.1
- Property svn:mergeinfo changed
/vlo/trunk merged: 5995-5997,5999-6003,6005-6007,6010-6012,6019-6020,6022-6023,6025-6028
- Property svn:mergeinfo changed
-
vlo/branches/vlo-3.1/vlo-commons/src/main/java/eu/clarin/cmdi/vlo/FacetConstants.java
r5896 r6029 15 15 public static final String FIELD_LANGUAGE = "language"; 16 16 public static final String FIELD_LICENSE = "license"; 17 public static final String FIELD_LANGUAGES = "languages";18 17 public static final String FIELD_LANGUAGE_CODE = "languageCode"; 19 18 public static final String FIELD_YEAR = "year"; … … 64 63 public static final String URN_NBN_PREFIX = "urn:nbn"; 65 64 public static final String URN_NBN_RESOLVER_URL = "http://www.nbn-resolving.org/redirect/"; 65 66 /** 67 * regular expression that matches the language prefix in description (group 68 * 1 matches the ISO639-3 language code) 69 */ 70 public static final String DESCRIPTION_LANGUAGE_PATTERN = "^\\{lang='([a-z]{3})'\\}"; 66 71 } -
vlo/branches/vlo-3.1/vlo-commons/src/main/resources/OrganisationControlledVocabulary.xml
r5885 r6029 761 761 <Variation>University of Helsinki, Department of General Linguistics.</Variation> 762 762 </Organisation> 763 <Organisation name="MPI for Psycholinguistics, MPG">764 <Variation>MPI</Variation>765 <Variation>Max Planck Institute for Psycholinguistics / MPG</Variation>766 <Variation>MPI for Psycholinguistics</Variation>767 <Variation>Max Planck Institute for Psycholinguistics</Variation>768 <Variation>MPI Nijmegen</Variation>769 </Organisation>770 763 <Organisation name="Heidelberger Akademie der Wissenschaften, University of Heidelberg"> 771 764 <Variation>University of Heidelberg, Heidelberger Akademie der Wissenschaften</Variation> … … 1488 1481 <Organisation name="MPI"> 1489 1482 <Variation>Max Planck Institute</Variation> 1483 <Variation>Max Planck Institut</Variation> 1490 1484 </Organisation> 1491 1485 <Organisation name="Finanstilsynet, OEM"/> … … 1868 1862 <Variation>Université Paris X- Nanterre</Variation> 1869 1863 <Variation>Université Paris X Nanterre</Variation> 1870 <Variation>Max Planck Institute for Evolutionary Anthropology</Variation>1871 1864 </Organisation> 1872 1865 <Organisation name="Goethe University Frankfurt, Institute of Empirical Linguistics"> … … 1879 1872 <Organisation name="Max Planck Institute for Evolutionary Anthropology"> 1880 1873 <Variation>Max-Planck-Institute for Evolutionary Anthropology</Variation> 1874 <Variation>Max Planck Institute for Evolutionary Anthropology</Variation> 1881 1875 </Organisation> 1882 1876 <Organisation name="National Foreign Language Resource Center, University of Hawai?i"/> … … 2063 2057 <Variation>Max Planck Institute for Psycolinguistics</Variation> 2064 2058 <Variation>Max Planck Institute for Psycholinguisticsc</Variation> 2059 <Variation>Max Planck Institut fuer Psycholinguistik, Nijmegen, Nl.</Variation> 2060 <Variation>Max-Planck-Institut fÃŒr Psycholinguistik</Variation> 2061 <Variation>Max Planck Institute for Psycholinguistics / MPG</Variation> 2062 <Variation>MPI for Psycholinguistics</Variation> 2063 <Variation>MPI for psycholinguistics, Nijmegen</Variation> 2064 <Variation>Max Planck Institute for Psycholinguistics</Variation> 2065 <Variation>MPI Nijmegen</Variation> 2066 <Variation>Max-Planck-Institut fÃÂŒr Psycholinguistik</Variation> 2067 <Variation>Max Planck for Psycholinguisics, Nijmegen, NL</Variation> 2068 <Variation>Max-Planck-InstitÃŒt fÃŒr Psycholinguïstik</Variation> 2069 <Variation>Max-Planck-InstitÃŒt fÃŒr Psycholinguïstiek</Variation> 2070 <Variation>Mac Planck Institute for Psycholinguistics</Variation> 2071 <Variation>Max Planck Institut fÃÂŒr Psychlinguistik</Variation> 2072 <Variation>Max Planck Institut fÃÂÃÂŒr Psychlinguistik</Variation> 2073 <Variation>Max Planck Institute for Psycho-Linguistics</Variation> 2074 <Variation>MPI for Psycholinguistics (Nijmegen, Netherlands)</Variation> 2075 <Variation>Max Plank Institute for Psycholinguistics</Variation> 2076 <Variation>MPI for Psycholinguistics Nijmegen</Variation> 2077 <Variation>Max-Planck-InstitÃŒt fÃŒr Psucholinguïstik</Variation> 2078 <Variation>Max-Planck-InstitÃŒt fÃŒr Psychlinguïstik</Variation> 2065 2079 </Organisation> 2066 2080 <Organisation name="Witwatersrand University Press"> … … 2135 2149 <Organisation name="Institute of Cybernetics, Tallinn University of Technology"> 2136 2150 <Variation>Institute of Cybernetics at Tallinn University of Technology</Variation> 2137 </Organisation>2138 <Organisation name="MPI fÃŒr Psycholinguistik">2139 <Variation>Max Planck Institut fuer Psycholinguistik, Nijmegen, Nl.</Variation>2140 <Variation>Max-Planck-Institut fÃŒr Psycholinguistik</Variation>2141 2151 </Organisation> 2142 2152 <Organisation name="Sheldon Press"> -
vlo/branches/vlo-3.1/vlo-commons/src/main/resources/VloConfig.xml
r5886 r6029 70 70 <!-- Fields shown as facets on the search page --> 71 71 <facetFields> 72 <facetField>language </facetField>72 <facetField>languageCode</facetField> 73 73 <facetField>collection</facetField> 74 74 <facetField>resourceClass</facetField> … … 86 86 87 87 <simpleSearchFacetFields> 88 <simpleSearchFacetField>language </simpleSearchFacetField>88 <simpleSearchFacetField>languageCode</simpleSearchFacetField> 89 89 <simpleSearchFacetField>collection</simpleSearchFacetField> 90 90 <simpleSearchFacetField>resourceClass</simpleSearchFacetField> … … 97 97 <searchResultField>name</searchResultField> 98 98 <searchResultField>country</searchResultField> 99 <searchResultField>language s</searchResultField>99 <searchResultField>languageCode</searchResultField> 100 100 <searchResultField>modality</searchResultField> 101 101 <searchResultField>subject</searchResultField> -
vlo/branches/vlo-3.1/vlo-commons/src/main/resources/facetConcepts.xml
r5994 r6029 149 149 <!-- IDSAGD_Speaker --> 150 150 </facetConcept> 151 <facetConcept name="language" description="The object language relevant for the resource or tool" definition="The object language relevant for the resource or tool, i.e. the language of the source material of a resource, the object language of a language description, or the language supported by a linguistic tool. If a tool is language independent, please use the ISO 639-3 'und' for 'undefined'.">152 <concept>http://www.isocat.org/datcat/DC-2482</concept>153 <concept>http://hdl.handle.net/11459/CCR_C-2482_08eded24-4086-7e3f-88e5-e0807fb01e17</concept>154 <!-- language code -->155 <concept>http://www.isocat.org/datcat/DC-2484</concept>156 <concept>http://hdl.handle.net/11459/CCR_C-2484_669684e7-cb9e-ea96-59cb-a25fe89b9b9d</concept>157 <!-- language name -->158 <concept>http://www.isocat.org/datcat/DC-5361</concept>159 <concept>http://hdl.handle.net/11459/CCR_C-5361_ba085ec1-9746-52bf-8cc1-3c300ce16eb8</concept>160 <!-- language usage (TEI) -->161 <concept>http://www.isocat.org/datcat/DC-5358</concept>162 <concept>http://hdl.handle.net/11459/CCR_C-5358_3cd089fe-ad03-6181-b20c-635ea41ed818</concept>163 <!--language (TEI) - MENZO: added for CLARIN-DK -->164 165 <concept>http://purl.org/dc/terms/language</concept>166 <!-- Had to be removed due to IDSAGD_Speaker <acceptableContext includeAny="false" includeEmpty="true"/>167 <rejectableContext includeAny="true" includeEmpty="false">168 <concept>http://www.isocat.org/datcat/DC-4146</concept>169 <concept>http://hdl.handle.net/11459/CCR_C-4146_5ccc45c8-d729-c180-2bf1-fccc56dde24d</concept>170 </rejectableContext> -->171 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language</pattern>172 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:subject/@olac-language</pattern>173 <pattern>/c:CMD/c:Components/c:LrtInventoryResource/c:LrtCommon/c:Languages/c:ISO639/c:iso-639-3-code/text()</pattern>174 <pattern>/c:CMD/c:Components/c:mods/c:language/c:languageTerm/text()</pattern>175 176 177 <!-- <concept>http://www.isocat.org/datcat/DC-2468</concept>178 <concept>http://hdl.handle.net/11459/CCR_C-2468_e4135e12-c272-171e-a8a2-48339228387b</concept> -->179 <!-- BAS REMOVED because of component SubjectLanguages -->180 181 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref/c:language/@olac-language</pattern>182 <!-- IDS OLAC-DcmiTerms-ref -->183 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref-DWR/c:language/@olac-language</pattern>184 <!-- IDS OLAC-DcmiTerms-ref-DWR -->185 <!-- <pattern>/c:CMD/c:Components/c:WebLichtWebService/c:Service/c:Operations/c:Operation/c:Input/c:ParameterGroup/c:Parameters/c:Parameter/c:Values/c:ParameterValue/c:Value/text()</pattern>-->186 <!-- WeblichtWebservices, breaks TÃŒbingen Resources (oai_sfs_uni_tuebingen_de_FID_15.xml)-->187 <blacklistPattern>/c:Actor_Languages/c:Actor_Language/</blacklistPattern>188 <!-- MPI (JK) -->189 <blacklistPattern>/c:ActorLanguage/c:Language/c:ISO639/c:iso-639-3-code</blacklistPattern>190 <blacklistPattern>/c:LanguageName</blacklistPattern>191 <!-- general -->192 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Speaker/c:LinguisticBackground</blacklistPattern>193 <!-- IDS IDSAGD_Speaker -->194 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Corpus/c:Collection/c:DocumentationLanguages</blacklistPattern>195 <!-- IDS IDSAGD_Corpus -->196 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:Documentations</blacklistPattern>197 <!-- IMS TextCorpusProfile -->198 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:DocumentationLanguages</blacklistPattern>199 <!-- IMS TextCorpusProfile -->200 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:Documentations</blacklistPattern>201 <!-- IMS ToolProfile -->202 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:ToolContext/c:DocumentationLanguages</blacklistPattern>203 <!-- IMS ToolProfile -->204 <blacklistPattern>/c:CMD/c:Components/c:LexicalResourceProfile/c:DocumentationLanguages</blacklistPattern>205 <!-- IMS c:LexicalResourceProfile -->206 <blacklistPattern>/c:CMD/c:Components/c:MultimodalCorpus/c:DocumentationLanguages</blacklistPattern>207 <!-- IMS c:MultimodalCorpus -->208 </facetConcept>209 151 <facetConcept name="languageCode" description="The object language relevant for the resource or tool" definition="The object language relevant for the resource or tool, i.e. the language of the source material of a resource, the object language of a language description, or the language supported by a linguistic tool. If a tool is language independent, please use the ISO 639-3 'und' for 'undefined'."> 210 152 <concept>http://www.isocat.org/datcat/DC-2482</concept> … … 246 188 <!-- MPI (JK) --> 247 189 <blacklistPattern>/c:ActorLanguage/c:Language/c:ISO639/c:iso-639-3-code</blacklistPattern> 248 <blacklistPattern>/c:LanguageName</blacklistPattern>249 <!-- general -->250 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Speaker/c:LinguisticBackground</blacklistPattern>251 <!-- IDS IDSAGD_Speaker -->252 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Corpus/c:Collection/c:DocumentationLanguages</blacklistPattern>253 <!-- IDS IDSAGD_Corpus -->254 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:Documentations</blacklistPattern>255 <!-- IMS TextCorpusProfile -->256 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:DocumentationLanguages</blacklistPattern>257 <!-- IMS TextCorpusProfile -->258 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:Documentations</blacklistPattern>259 <!-- IMS ToolProfile -->260 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:ToolContext/c:DocumentationLanguages</blacklistPattern>261 <!-- IMS ToolProfile -->262 <blacklistPattern>/c:CMD/c:Components/c:LexicalResourceProfile/c:DocumentationLanguages</blacklistPattern>263 <!-- IMS c:LexicalResourceProfile -->264 <blacklistPattern>/c:CMD/c:Components/c:MultimodalCorpus/c:DocumentationLanguages</blacklistPattern>265 <!-- IMS c:MultimodalCorpus -->266 </facetConcept>267 <facetConcept name="languages" description="The object language relevant for the resource or tool" definition="The object language relevant for the resource or tool, i.e. the language of the source material of a resource, the object language of a language description, or the language supported by a linguistic tool. If a tool is language independent, please use the ISO 639-3 'und' for 'undefined'.">268 <concept>http://www.isocat.org/datcat/DC-2482</concept>269 <concept>http://hdl.handle.net/11459/CCR_C-2482_08eded24-4086-7e3f-88e5-e0807fb01e17</concept>270 <!-- language code -->271 <concept>http://www.isocat.org/datcat/DC-2484</concept>272 <concept>http://hdl.handle.net/11459/CCR_C-2484_669684e7-cb9e-ea96-59cb-a25fe89b9b9d</concept>273 <!-- language name -->274 <concept>http://www.isocat.org/datcat/DC-5361</concept>275 <concept>http://hdl.handle.net/11459/CCR_C-5361_ba085ec1-9746-52bf-8cc1-3c300ce16eb8</concept>276 <!-- language usage (TEI) -->277 <concept>http://www.isocat.org/datcat/DC-5358</concept>278 <concept>http://hdl.handle.net/11459/CCR_C-5358_3cd089fe-ad03-6181-b20c-635ea41ed818</concept>279 <!--language (TEI) - MENZO: added for CLARIN-DK -->280 281 <concept>http://purl.org/dc/terms/language</concept>282 <!-- Had to be removed due to IDSAGD_Speaker <acceptableContext includeAny="false" includeEmpty="true"/>283 <rejectableContext includeAny="true" includeEmpty="false">284 <concept>http://www.isocat.org/datcat/DC-4146</concept>285 <concept>http://hdl.handle.net/11459/CCR_C-4146_5ccc45c8-d729-c180-2bf1-fccc56dde24d</concept>286 </rejectableContext>-->287 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language</pattern>288 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:subject/@olac-language</pattern>289 <pattern>/c:CMD/c:Components/c:LrtInventoryResource/c:LrtCommon/c:Languages/c:ISO639/c:iso-639-3-code/text()</pattern>290 <pattern>/c:CMD/c:Components/c:mods/c:language/c:languageTerm/text()</pattern>291 292 293 <!-- <concept>http://www.isocat.org/datcat/DC-2468</concept>294 <concept>http://hdl.handle.net/11459/CCR_C-2468_e4135e12-c272-171e-a8a2-48339228387b</concept> -->295 <!-- BAS REMOVED because of component SubjectLanguages -->296 297 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref/c:language/@olac-language</pattern>298 <!-- IDS OLAC-DcmiTerms-ref -->299 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref-DWR/c:language/@olac-language</pattern>300 <!-- IDS OLAC-DcmiTerms-ref-DWR -->301 <!-- <pattern>/c:CMD/c:Components/c:WebLichtWebService/c:Service/c:Operations/c:Operation/c:Input/c:ParameterGroup/c:Parameters/c:Parameter/c:Values/c:ParameterValue/c:Value/text()</pattern>-->302 <!-- WeblichtWebservices -->303 <blacklistPattern>/c:Actor_Languages/c:Actor_Language/</blacklistPattern>304 <!-- MPI (JK) -->305 <blacklistPattern>/c:ActorLanguage/c:Language/c:ISO639/c:iso-639-3-code</blacklistPattern>306 <!-- HZSK -->307 190 <blacklistPattern>/c:LanguageName</blacklistPattern> 308 191 <!-- general --> -
vlo/branches/vlo-3.1/vlo-commons/src/test/java/eu/clarin/cmdi/vlo/config/DefaultVloConfigFactoryTest.java
r5247 r6029 631 631 632 632 List<String> expResult = Arrays.asList( 633 "language ",633 "languageCode", 634 634 "collection", 635 635 "resourceClass", … … 653 653 public void testGetAllFacetsField() { 654 654 final String[] expItems = new String[]{ 655 "language ",655 "languageCode", 656 656 "collection", 657 657 "resourceClass", -
vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/CMDIParserVTDXML.java
r5985 r6029 28 28 29 29 private static final String DEFAULT_LANGUAGE = "und"; 30 30 31 31 public CMDIParserVTDXML(Map<String, PostProcessor> postProcessors, Boolean useLocalXSDCache) { 32 32 this.postProcessors = postProcessors; … … 244 244 languageCode = nav.toString(langAttrIndex).trim(); 245 245 // replace 2-letter with 3-letter codes 246 if( LanguageCodeUtils.getSilToIso639Map().containsKey(languageCode))247 languageCode = LanguageCodeUtils.getSilToIso639Map().get(languageCode);246 if(MetadataImporter.languageCodeUtils.getSilToIso639Map().containsKey(languageCode)) 247 languageCode = MetadataImporter.languageCodeUtils.getSilToIso639Map().get(languageCode); 248 248 249 249 List<String> valueList = postProcess(config.getName(), value); -
vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/LanguageCodePostProcessor.java
r5981 r6029 1 1 package eu.clarin.cmdi.vlo.importer; 2 2 3 import eu.clarin.cmdi.vlo.LanguageCodeUtils; 3 4 import org.slf4j.Logger; 4 5 import org.slf4j.LoggerFactory; … … 12 13 13 14 private final static Logger LOG = LoggerFactory.getLogger(LanguageCodePostProcessor.class); 14 15 15 16 protected static final String CODE_PREFIX = "code:"; 16 17 protected static final String LANG_NAME_PREFIX = "name:"; … … 40 41 41 42 protected String extractLanguageCode(String value) { 43 final LanguageCodeUtils languageCodeUtils = MetadataImporter.languageCodeUtils; 44 42 45 String result = value; 43 46 … … 45 48 46 49 // input is already ISO 639-3? 47 if( LanguageCodeUtils.getIso639ToLanguageNameMap().keySet().contains(result.toUpperCase()))50 if(languageCodeUtils.getIso639ToLanguageNameMap().keySet().contains(result.toUpperCase())) 48 51 return CODE_PREFIX + result.toLowerCase(); 49 52 50 53 // input is 2-letter code -> map to ISO 639-3 51 if( LanguageCodeUtils.getSilToIso639Map().containsKey(result.toLowerCase())) {52 return CODE_PREFIX + LanguageCodeUtils.getSilToIso639Map().get(result.toLowerCase());54 if(languageCodeUtils.getSilToIso639Map().containsKey(result.toLowerCase())) { 55 return CODE_PREFIX + languageCodeUtils.getSilToIso639Map().get(result.toLowerCase()); 53 56 } 54 57 55 if( LanguageCodeUtils.getLanguageNameToIso639Map().containsKey(result)) { // (english) language name?56 return CODE_PREFIX + LanguageCodeUtils.getLanguageNameToIso639Map().get(result);58 if(languageCodeUtils.getLanguageNameToIso639Map().containsKey(result)) { // (english) language name? 59 return CODE_PREFIX + languageCodeUtils.getLanguageNameToIso639Map().get(result); 57 60 } 58 61 59 62 // convert ISO 639-2/T codes to ISO 639-3 60 if ( LanguageCodeUtils.getIso6392TToISO6393Map().containsKey(result.toLowerCase())) {61 return CODE_PREFIX + LanguageCodeUtils.getIso6392TToISO6393Map().get(result.toLowerCase());63 if (languageCodeUtils.getIso6392TToISO6393Map().containsKey(result.toLowerCase())) { 64 return CODE_PREFIX + languageCodeUtils.getIso6392TToISO6393Map().get(result.toLowerCase()); 62 65 } 63 66 -
vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/MetadataImporter.java
r5979 r6029 1 1 package eu.clarin.cmdi.vlo.importer; 2 2 3 import eu.clarin.cmdi.vlo.LanguageCodeUtils; 3 4 import eu.clarin.cmdi.vlo.CommonUtils; 4 5 import eu.clarin.cmdi.vlo.FacetConstants; … … 76 77 POST_PROCESSORS.put(FacetConstants.FIELD_CONTINENT, new ContinentNamePostProcessor()); 77 78 POST_PROCESSORS.put(FacetConstants.FIELD_COUNTRY, new CountryNamePostProcessor()); 78 POST_PROCESSORS.put(FacetConstants.FIELD_LANGUAGE, new LanguageNamePostProcessor());79 POST_PROCESSORS.put(FacetConstants.FIELD_LANGUAGES, new LanguageLinkPostProcessor());80 79 POST_PROCESSORS.put(FacetConstants.FIELD_LANGUAGE_CODE, new LanguageCodePostProcessor()); 81 80 POST_PROCESSORS.put(FacetConstants.FIELD_LICENSE, new LicensePostProcessor()); … … 439 438 public static VloConfig config; 440 439 440 public static LanguageCodeUtils languageCodeUtils; 441 441 442 /** 442 443 * @param args … … 511 512 final XmlVloConfigFactory configFactory = new XmlVloConfigFactory(configUrl); 512 513 MetadataImporter.config = configFactory.newConfig(); 514 MetadataImporter.languageCodeUtils = new LanguageCodeUtils(MetadataImporter.config); 513 515 514 516 // optionally, modify the configuration here -
vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/OrganisationPostProcessor.java
r5887 r6029 35 35 @Override 36 36 public List<String> process(String value) { 37 String[] splitArray = value.split(";");37 String[] splitArray = normalizeInputString(value).split(";"); 38 38 for (int i = 0; i < splitArray.length; i++) { 39 39 String orgaName = splitArray[i]; 40 if (getNormalizedOrganisationNamesMap().containsKey( orgaName)) {41 splitArray[i] = getNormalizedOrganisationNamesMap().get( orgaName);40 if (getNormalizedOrganisationNamesMap().containsKey(normalizeVariant(orgaName))) { 41 splitArray[i] = getNormalizedOrganisationNamesMap().get(normalizeVariant(orgaName)); 42 42 } 43 43 } 44 44 45 45 return Arrays.asList(splitArray); 46 } 47 48 private String normalizeInputString(String value) { 49 return value.replaceAll("\\s+", " "); 50 } 51 52 private String normalizeVariant(String key) { 53 return key.toLowerCase().replaceAll("-", " "); 46 54 } 47 55 … … 75 83 NodeList childNodeList = node.getChildNodes(); 76 84 for (int j = 0; j < childNodeList.getLength(); j++) { 77 String variation = childNodeList.item(j).getTextContent();85 String variation = normalizeVariant(childNodeList.item(j).getTextContent()); 78 86 result.put(variation, organisationName); 79 87 } -
vlo/branches/vlo-3.1/vlo-importer/src/test/java/eu/clarin/cmdi/vlo/importer/CMDIDataProcessorTest.java
r5979 r6029 390 390 SolrInputDocument doc = data.getSolrDocument(); 391 391 assertNotNull(doc); 392 assertEquals(1 6, doc.getFieldNames().size());392 assertEquals(14, doc.getFieldNames().size()); 393 393 assertEquals("test-hdl:1839/00-0000-0000-0009-294C-9", doc.getFieldValue("_selfLink")); 394 394 assertEquals("kleve-route", doc.getFieldValue("name")); 395 395 assertEquals("Peter Wittenburg", doc.getFieldValue(FacetConstants.FIELD_PROJECT_NAME)); 396 396 assertEquals("Europe", doc.getFieldValue("continent")); 397 assertEquals(" English", doc.getFieldValue("language"));397 assertEquals("code:eng", doc.getFieldValue("languageCode")); 398 398 assertEquals("Netherlands", doc.getFieldValue("country")); 399 assertEquals("M PI for Psycholinguistics, MPG", doc.getFieldValue("organisation"));399 assertEquals("Max Planck Institute for Psycholinguistics", doc.getFieldValue("organisation")); 400 400 assertEquals("demo", doc.getFieldValue("genre")); 401 401 assertEquals( … … 593 593 SolrInputDocument doc = data.getSolrDocument(); 594 594 assertNotNull(doc); 595 assertEquals( 11, doc.getFieldNames().size());595 assertEquals(9, doc.getFieldNames().size()); 596 596 assertEquals("oai:ailla.utexas.edu:1", doc.getFieldValue("_selfLink")); 597 597 assertEquals(null, doc.getFieldValue("name")); 598 598 assertEquals(null, doc.getFieldValue("continent")); 599 assertEquals(1, doc.getFieldValues("language ").size());600 assertEquals(" Chinese", doc.getFieldValue("language"));599 assertEquals(1, doc.getFieldValues("languageCode").size()); 600 assertEquals("code:zho", doc.getFieldValue("languageCode")); 601 601 assertEquals(null, doc.getFieldValue("country")); 602 602 assertEquals(null, doc.getFieldValue("organisation")); … … 654 654 assertTrue(doc.getFieldValues(FacetConstants.FIELD_COUNTRY).contains("testCountry1")); 655 655 assertTrue(doc.getFieldValues(FacetConstants.FIELD_COUNTRY).contains("testCountry2")); 656 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_LANGUAGE ).size());657 assertTrue(doc.getFieldValues(FacetConstants.FIELD_LANGUAGE ).contains("test1"));656 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_LANGUAGE_CODE).size()); 657 assertTrue(doc.getFieldValues(FacetConstants.FIELD_LANGUAGE_CODE).contains("name:test1")); 658 658 659 659 content = ""; … … 681 681 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_COUNTRY).size()); 682 682 assertEquals("testCountry2", doc.getFieldValue(FacetConstants.FIELD_COUNTRY)); 683 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_LANGUAGE ).size());684 assertEquals(" test1", doc.getFieldValue(FacetConstants.FIELD_LANGUAGE));683 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_LANGUAGE_CODE).size()); 684 assertEquals("name:test1", doc.getFieldValue(FacetConstants.FIELD_LANGUAGE_CODE)); 685 685 686 686 content = ""; … … 711 711 assertTrue(doc.getFieldValues(FacetConstants.FIELD_COUNTRY).contains("testCountry1")); 712 712 assertTrue(doc.getFieldValues(FacetConstants.FIELD_COUNTRY).contains("testCountry2")); 713 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_LANGUAGE ).size());714 assertTrue(doc.getFieldValues(FacetConstants.FIELD_LANGUAGE ).contains("test1"));713 assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_LANGUAGE_CODE).size()); 714 assertTrue(doc.getFieldValues(FacetConstants.FIELD_LANGUAGE_CODE).contains("name:test1")); 715 715 } 716 716 … … 902 902 SolrInputDocument doc = data.getSolrDocument(); 903 903 assertNotNull(doc); 904 assertEquals( 11, doc.getFieldNames().size());904 assertEquals(9, doc.getFieldNames().size()); 905 905 assertEquals("clarin.eu:lrt:433", doc.getFieldValue("_selfLink")); 906 906 assertEquals("Corpus of Present-day Written Estonian", doc.getFieldValue("name")); 907 907 assertEquals(null, doc.getFieldValue("continent")); 908 assertEquals(1, doc.getFieldValues("language ").size());909 assertEquals(" Estonian", doc.getFieldValue("language"));908 assertEquals(1, doc.getFieldValues("languageCode").size()); 909 assertEquals("code:est", doc.getFieldValue("languageCode")); 910 910 assertEquals("Estonia", doc.getFieldValue("country")); 911 911 assertEquals("Test", doc.getFieldValue("organisation")); -
vlo/branches/vlo-3.1/vlo-importer/src/test/java/eu/clarin/cmdi/vlo/importer/FacetMappingFactoryTest.java
r5985 r6029 30 30 31 31 List<FacetConfiguration> facets = facetMapping.getFacets(); 32 assertEquals(2 2, facets.size());32 assertEquals(20, facets.size()); 33 33 34 34 int index = 0; … … 88 88 mapping = facets.get(index++); 89 89 90 assertEquals(FacetConstants.FIELD_LANGUAGE , mapping.getName());90 assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName()); 91 91 assertEquals(2, mapping.getPatterns().size()); 92 92 assertEquals("/c:CMD/c:Components/c:Session/c:MDGroup/c:Content/c:Content_Languages/c:Content_Language/c:Id/text()", … … 97 97 assertEquals("/c:CMD/c:Components/c:Session/c:Resources/c:WrittenResource/c:LanguageId/text()", 98 98 mapping.getPatterns().get(1)); 99 mapping = facets.get(index++);100 101 assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName());102 mapping = facets.get(index++);103 104 assertEquals(FacetConstants.FIELD_LANGUAGES, mapping.getName());105 99 mapping = facets.get(index++); 106 100 … … 181 175 182 176 List<FacetConfiguration> facets = facetMapping.getFacets(); 183 assertEquals( 20, facets.size());177 assertEquals(18, facets.size()); 184 178 185 179 int index = 0; … … 234 228 mapping = facets.get(index++); 235 229 236 assertEquals(FacetConstants.FIELD_LANGUAGE , mapping.getName());230 assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName()); 237 231 assertEquals(1, mapping.getPatterns().size()); 238 232 assertEquals("/c:CMD/c:Components/c:OLAC-DcmiTerms/c:language/text()", 239 233 mapping.getPatterns().get(0)); 240 234 assertEquals("/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language", mapping.getFallbackPatterns().get(0)); 241 mapping = facets.get(index++);242 243 assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName());244 mapping = facets.get(index++);245 246 assertEquals(FacetConstants.FIELD_LANGUAGES, mapping.getName());247 235 mapping = facets.get(index++); 248 236 … … 313 301 314 302 List<FacetConfiguration> facets = facetMapping.getFacets(); 315 assertEquals(1 9, facets.size());303 assertEquals(17, facets.size()); 316 304 317 305 int index = 0; … … 368 356 mapping = facets.get(index++); 369 357 370 assertEquals(FacetConstants.FIELD_LANGUAGE , mapping.getName());358 assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName()); 371 359 372 360 // LOG.info("XXXXX: " + mapping.getPatterns().get(0)); … … 377 365 "/c:CMD/c:Components/c:LrtInventoryResource/c:LrtCommon/c:Languages/c:ISO639/c:iso-639-3-code/text()", 378 366 mapping.getPatterns().get(0)); 379 mapping = facets.get(index++);380 381 assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName());382 mapping = facets.get(index++);383 384 assertEquals(FacetConstants.FIELD_LANGUAGES, mapping.getName());385 367 mapping = facets.get(index++); 386 368 … … 482 464 483 465 484 facet = facets.get(1 5);466 facet = facets.get(13); 485 467 assertEquals(FacetConstants.FIELD_DESCRIPTION, facet.getName()); 486 468 assertEquals(1, facet.getPatterns().size()); -
vlo/branches/vlo-3.1/vlo-importer/src/test/java/eu/clarin/cmdi/vlo/importer/ImporterTestcase.java
r5100 r6029 1 1 package eu.clarin.cmdi.vlo.importer; 2 2 3 import eu.clarin.cmdi.vlo.LanguageCodeUtils; 3 4 import eu.clarin.cmdi.vlo.config.DefaultVloConfigFactory; 4 5 import eu.clarin.cmdi.vlo.config.VloConfig; … … 39 40 MetadataImporter.config.setComponentRegistryRESTURL("http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/"); 40 41 config = MetadataImporter.config; 42 43 MetadataImporter.languageCodeUtils = new LanguageCodeUtils(config); 41 44 } 42 45 -
vlo/branches/vlo-3.1/vlo-importer/src/test/resources/facetConceptsTest.xml
r5994 r6029 115 115 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Speaker/c:LinguisticBackground/c:Competence/c:LanguageVariety/c:LanguageVarietyPlace/c:Location/c:Country</blacklistPattern> 116 116 </facetConcept> 117 <facetConcept name="language" description="The object language relevant for the resource or tool" definition="The object language relevant for the resource or tool, i.e. the language of the source material of a resource, the object language of a language description, or the language supported by a linguistic tool. If a tool is language independent, please use the ISO 639-3 'und' for 'undefined'.">118 <concept>http://www.isocat.org/datcat/DC-2482</concept>119 <concept>http://hdl.handle.net/11459/CCR_C-2482_08eded24-4086-7e3f-88e5-e0807fb01e17</concept>120 <!-- language code -->121 <concept>http://www.isocat.org/datcat/DC-2484</concept>122 <concept>http://hdl.handle.net/11459/CCR_C-2484_669684e7-cb9e-ea96-59cb-a25fe89b9b9d</concept>123 <!-- language name -->124 <concept>http://www.isocat.org/datcat/DC-5361</concept>125 <concept>http://hdl.handle.net/11459/CCR_C-5361_ba085ec1-9746-52bf-8cc1-3c300ce16eb8</concept>126 <!-- language usage (TEI) -->127 <concept>http://www.isocat.org/datcat/DC-5358</concept>128 <concept>http://hdl.handle.net/11459/CCR_C-5358_3cd089fe-ad03-6181-b20c-635ea41ed818</concept>129 <!--language (TEI) - MENZO: added for CLARIN-DK -->130 131 <concept>http://purl.org/dc/terms/language</concept>132 <!-- Had to be removed due to IDSAGD_Speaker <acceptableContext includeAny="false" includeEmpty="true"/>133 <rejectableContext includeAny="true" includeEmpty="false">134 <concept>http://www.isocat.org/datcat/DC-4146</concept>135 <concept>http://hdl.handle.net/11459/CCR_C-4146_5ccc45c8-d729-c180-2bf1-fccc56dde24d</concept>136 </rejectableContext> -->137 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language</pattern>138 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:subject/@olac-language</pattern>139 <pattern>/c:CMD/c:Components/c:LrtInventoryResource/c:LrtCommon/c:Languages/c:ISO639/c:iso-639-3-code/text()</pattern>140 <pattern>/c:CMD/c:Components/c:mods/c:language/c:languageTerm/text()</pattern>141 142 143 <!-- <concept>http://www.isocat.org/datcat/DC-2468</concept>144 <concept>http://hdl.handle.net/11459/CCR_C-2468_e4135e12-c272-171e-a8a2-48339228387b</concept> -->145 <!-- BAS REMOVED because of component SubjectLanguages -->146 147 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref/c:language/@olac-language</pattern>148 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref-DWR/c:language/@olac-language</pattern>149 <!-- <pattern>/c:CMD/c:Components/c:WebLichtWebService/c:Service/c:Operations/c:Operation/c:Input/c:ParameterGroup/c:Parameters/c:Parameter/c:Values/c:ParameterValue/c:Value/text()</pattern>-->150 <blacklistPattern>/c:Actor_Languages/c:Actor_Language/</blacklistPattern>151 <blacklistPattern>/c:ActorLanguage/c:Language/c:ISO639/c:iso-639-3-code</blacklistPattern>152 <blacklistPattern>/c:LanguageName</blacklistPattern>153 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Speaker/c:LinguisticBackground</blacklistPattern>154 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Corpus/c:Collection/c:DocumentationLanguages</blacklistPattern>155 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:Documentations</blacklistPattern>156 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:DocumentationLanguages</blacklistPattern>157 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:Documentations</blacklistPattern>158 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:ToolContext/c:DocumentationLanguages</blacklistPattern>159 <blacklistPattern>/c:CMD/c:Components/c:LexicalResourceProfile/c:DocumentationLanguages</blacklistPattern>160 <blacklistPattern>/c:CMD/c:Components/c:MultimodalCorpus/c:DocumentationLanguages</blacklistPattern>161 </facetConcept>162 117 <facetConcept name="languageCode" description="The object language relevant for the resource or tool" definition="The object language relevant for the resource or tool, i.e. the language of the source material of a resource, the object language of a language description, or the language supported by a linguistic tool. If a tool is language independent, please use the ISO 639-3 'und' for 'undefined'."> 163 118 <concept>http://www.isocat.org/datcat/DC-2482</concept> … … 180 135 <concept>http://hdl.handle.net/11459/CCR_C-4146_5ccc45c8-d729-c180-2bf1-fccc56dde24d</concept> 181 136 </rejectableContext> --> 182 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language</pattern>183 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:subject/@olac-language</pattern>184 <pattern>/c:CMD/c:Components/c:LrtInventoryResource/c:LrtCommon/c:Languages/c:ISO639/c:iso-639-3-code/text()</pattern>185 <pattern>/c:CMD/c:Components/c:mods/c:language/c:languageTerm/text()</pattern>186 187 188 <!-- <concept>http://www.isocat.org/datcat/DC-2468</concept>189 <concept>http://hdl.handle.net/11459/CCR_C-2468_e4135e12-c272-171e-a8a2-48339228387b</concept> -->190 <!-- BAS REMOVED because of component SubjectLanguages -->191 192 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref/c:language/@olac-language</pattern>193 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms-ref-DWR/c:language/@olac-language</pattern>194 <!-- <pattern>/c:CMD/c:Components/c:WebLichtWebService/c:Service/c:Operations/c:Operation/c:Input/c:ParameterGroup/c:Parameters/c:Parameter/c:Values/c:ParameterValue/c:Value/text()</pattern>-->195 <blacklistPattern>/c:Actor_Languages/c:Actor_Language/</blacklistPattern>196 <blacklistPattern>/c:ActorLanguage/c:Language/c:ISO639/c:iso-639-3-code</blacklistPattern>197 <blacklistPattern>/c:LanguageName</blacklistPattern>198 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Speaker/c:LinguisticBackground</blacklistPattern>199 <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Corpus/c:Collection/c:DocumentationLanguages</blacklistPattern>200 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:Documentations</blacklistPattern>201 <blacklistPattern>/c:CMD/c:Components/c:TextCorpusProfile/c:DocumentationLanguages</blacklistPattern>202 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:Documentations</blacklistPattern>203 <blacklistPattern>/c:CMD/c:Components/c:ToolProfile/c:ToolContext/c:DocumentationLanguages</blacklistPattern>204 <blacklistPattern>/c:CMD/c:Components/c:LexicalResourceProfile/c:DocumentationLanguages</blacklistPattern>205 <blacklistPattern>/c:CMD/c:Components/c:MultimodalCorpus/c:DocumentationLanguages</blacklistPattern>206 </facetConcept>207 <facetConcept name="languages" description="The object language relevant for the resource or tool" definition="The object language relevant for the resource or tool, i.e. the language of the source material of a resource, the object language of a language description, or the language supported by a linguistic tool. If a tool is language independent, please use the ISO 639-3 'und' for 'undefined'.">208 <concept>http://www.isocat.org/datcat/DC-2482</concept>209 <concept>http://hdl.handle.net/11459/CCR_C-2482_08eded24-4086-7e3f-88e5-e0807fb01e17</concept>210 <!-- language code -->211 <concept>http://www.isocat.org/datcat/DC-2484</concept>212 <concept>http://hdl.handle.net/11459/CCR_C-2484_669684e7-cb9e-ea96-59cb-a25fe89b9b9d</concept>213 <!-- language name -->214 <concept>http://www.isocat.org/datcat/DC-5361</concept>215 <concept>http://hdl.handle.net/11459/CCR_C-5361_ba085ec1-9746-52bf-8cc1-3c300ce16eb8</concept>216 <!-- language usage (TEI) -->217 <concept>http://www.isocat.org/datcat/DC-5358</concept>218 <concept>http://hdl.handle.net/11459/CCR_C-5358_3cd089fe-ad03-6181-b20c-635ea41ed818</concept>219 <!--language (TEI) - MENZO: added for CLARIN-DK -->220 221 <concept>http://purl.org/dc/terms/language</concept>222 <!-- Had to be removed due to IDSAGD_Speaker <acceptableContext includeAny="false" includeEmpty="true"/>223 <rejectableContext includeAny="true" includeEmpty="false">224 <concept>http://www.isocat.org/datcat/DC-4146</concept>225 <concept>http://hdl.handle.net/11459/CCR_C-4146_5ccc45c8-d729-c180-2bf1-fccc56dde24d</concept>226 </rejectableContext>-->227 137 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language</pattern> 228 138 <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:subject/@olac-language</pattern> -
vlo/branches/vlo-3.1/vlo-solr/src/main/solr_conf/solr/collection1/conf/schema.xml
r5932 r6029 420 420 <field name="continent" type="string" indexed="true" stored="true" multiValued="true"/> 421 421 <field name="country" type="string" indexed="true" stored="true" multiValued="true"/> 422 <field name="language " type="string" indexed="true" stored="true" multiValued="true" />422 <field name="languageCode" type="string" indexed="true" stored="true" multiValued="true" /> 423 423 <field name="license" type="string" indexed="true" stored="true" multiValued="true" /> 424 424 <field name="organisation" type="string" indexed="true" stored="true" multiValued="true"/> … … 448 448 <field name="_searchPageRef" type="string" indexed="true" stored="true" multiValued="true" /> 449 449 <field name="metadataSource" type="metadataSource" indexed="false" stored="true" multiValued="true" /> 450 <field name="languages" type="string" indexed="true" stored="true" multiValued="true" />451 <field name="languageCode" type="string" indexed="true" stored="true" multiValued="true" />452 450 453 451 <!-- Field for autocompletion (suggester) --> -
vlo/branches/vlo-3.1/vlo-web-app/pom.xml
r5988 r6029 221 221 <version>2.5.1</version> 222 222 <configuration> 223 <source>1. 6</source>224 <target>1. 6</target>223 <source>1.7</source> 224 <target>1.7</target> 225 225 <encoding>UTF-8</encoding> 226 226 <showWarnings>true</showWarnings> -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloServicesSpringConfig.java
r5231 r6029 18 18 19 19 import com.google.common.collect.Sets; 20 import eu.clarin.cmdi.vlo.LanguageCodeUtils; 20 21 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 21 22 import eu.clarin.cmdi.vlo.pojo.SearchContext; 23 import eu.clarin.cmdi.vlo.service.FacetParameterMapper; 22 24 import eu.clarin.cmdi.vlo.service.FieldFilter; 23 25 import eu.clarin.cmdi.vlo.service.PageParametersConverter; … … 30 32 import eu.clarin.cmdi.vlo.service.impl.DocumentParametersConverter; 31 33 import eu.clarin.cmdi.vlo.service.impl.ExclusiveFieldFilter; 34 import eu.clarin.cmdi.vlo.service.impl.FacetParameterMapperImpl; 32 35 import eu.clarin.cmdi.vlo.service.impl.InclusiveFieldFilter; 33 36 import eu.clarin.cmdi.vlo.service.impl.QueryFacetsSelectionParametersConverter; … … 37 40 import eu.clarin.cmdi.vlo.service.impl.UriResolverImpl; 38 41 import eu.clarin.cmdi.vlo.service.impl.XmlTransformationServiceImpl; 42 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider; 43 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProviderImpl; 39 44 import java.util.Properties; 40 45 import javax.inject.Inject; … … 82 87 return new HandleRestApiClient(); 83 88 } 89 90 @Bean 91 public FacetParameterMapper facetParameterMapper() { 92 return new FacetParameterMapperImpl(languageCodeUtils()); 93 } 84 94 85 95 @Bean(name = "queryParametersConverter") 86 96 public PageParametersConverter<QueryFacetsSelection> queryParametersConverter() { 87 return new QueryFacetsSelectionParametersConverter( );97 return new QueryFacetsSelectionParametersConverter(vloConfig, facetParameterMapper()); 88 98 } 89 99 … … 126 136 vloConfig.getTechnicalFields()); 127 137 } 138 139 @Bean 140 public LanguageCodeUtils languageCodeUtils() { 141 return new LanguageCodeUtils(vloConfig); 142 } 143 144 @Bean 145 public FieldValueConverterProvider fieldValueConverters() { 146 return new FieldValueConverterProviderImpl(languageCodeUtils()); 147 } 148 128 149 } -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSolrSpringConfig.java
r5231 r6029 96 96 FacetConstants.FIELD_DESCRIPTION, 97 97 FacetConstants.FIELD_COLLECTION, 98 FacetConstants.FIELD_LANGUAGE S,98 FacetConstants.FIELD_LANGUAGE_CODE, 99 99 FacetConstants.FIELD_MODALITY, 100 100 FacetConstants.FIELD_CONTINENT, -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/handle/impl/HandleRestApiClient.java
r4983 r6029 33 33 * Service that connects to the handle.net REST API and retrieves the URL for a 34 34 * given handle. 35 * 35 * 36 36 * Consider re-implementing using the handle API 37 37 * … … 99 99 // The handle API returns a JSON structure with a number of handle 100 100 // record fields. We are only interested in the value at 101 // values[x].data where values[x].type == 'URL'101 // values[x].data.value where values[x].type == 'URL' 102 102 103 103 final JSONObject jsonResponse = new JSONObject(jsonString); … … 106 106 final JSONObject object = valuesArray.getJSONObject(i); 107 107 final String type = object.getString("type"); 108 if ("URL".equals(type)) { 109 // the field we were looking for 110 return object.getString("data"); 108 if ("URL".equals(type) && object.has("data")) { 109 final JSONObject data = object.getJSONObject("data"); 110 if (data.has("value")) { 111 // the field we were looking for 112 return data.getString("value"); 113 } 111 114 } 112 115 } -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/QueryFacetsSelectionParametersConverter.java
r4999 r6029 18 18 19 19 import com.google.common.base.Splitter; 20 import com.google.common.collect.ImmutableSet; 20 21 import com.google.common.collect.Maps; 21 22 import static eu.clarin.cmdi.vlo.VloWebAppParameters.*; 23 import eu.clarin.cmdi.vlo.config.VloConfig; 22 24 import eu.clarin.cmdi.vlo.pojo.FacetSelection; 23 25 import eu.clarin.cmdi.vlo.pojo.FacetSelectionType; 24 26 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 27 import eu.clarin.cmdi.vlo.service.FacetParameterMapper; 25 28 import eu.clarin.cmdi.vlo.service.PageParametersConverter; 26 29 import java.util.Arrays; … … 28 31 import java.util.List; 29 32 import java.util.Map.Entry; 33 import java.util.Set; 34 import org.apache.wicket.Session; 30 35 import org.apache.wicket.request.mapper.parameter.PageParameters; 31 36 import org.apache.wicket.util.string.StringValue; … … 48 53 public final static Splitter FILTER_SPLITTER = Splitter.on(":").limit(2); 49 54 55 private final Set<String> facetsDefined; 56 private final FacetParameterMapper facetParamMapper; 57 58 /** 59 * Constructs a converter that does not do any facet (value) mapping 60 * 61 * @param config VLO configuration 62 * @see FacetParameterMapper.IdentityMapper 63 */ 64 public QueryFacetsSelectionParametersConverter(VloConfig config) { 65 this(config, new FacetParameterMapper.IdentityMapper()); 66 } 67 68 /** 69 * Constructs a converter that applies the provided facet (value) mapping 70 * 71 * @param config VLO configuration 72 * @param facetParamMapper mapper to apply to facet names and values 73 */ 74 public QueryFacetsSelectionParametersConverter(VloConfig config, FacetParameterMapper facetParamMapper) { 75 this.facetsDefined = ImmutableSet.copyOf(config.getAllFacetFields()); 76 this.facetParamMapper = facetParamMapper; 77 } 78 50 79 @Override 51 80 public QueryFacetsSelection fromParameters(PageParameters params) { … … 61 90 final List<String> fqType = FILTER_SPLITTER.splitToList(selectionType.toString()); 62 91 if (fqType.size() == 2) { 63 final String facet = f qType.get(0);92 final String facet = facetParamMapper.getFacet(fqType.get(0)); 64 93 final String type = fqType.get(1).toUpperCase(); 65 94 66 try { 67 final FacetSelectionType facetSelectionType = FacetSelectionType.valueOf(type); 68 selection.put(facet, new FacetSelection(facetSelectionType)); 69 } catch (IllegalArgumentException ex) { 70 logger.warn("Unknown selection type passed into query parameter {}: {}", FILTER_QUERY_TYPE, type); 95 if (facetsDefined.contains(facet)) { 96 try { 97 final FacetSelectionType facetSelectionType = FacetSelectionType.valueOf(type); 98 selection.put(facet, new FacetSelection(facetSelectionType)); 99 } catch (IllegalArgumentException ex) { 100 logger.warn("Unknown selection type passed into query parameter {}: {}", FILTER_QUERY_TYPE, type); 101 } 71 102 } 72 103 } else { … … 82 113 if (fq.size() == 2) { 83 114 // we have a facet - value pair 84 final String facet = fq.get(0); 85 final String value = fq.get(1); 86 if (selection.containsKey(facet)) { 87 selection.get(facet).getValues().add(value); 115 final String requestedFacet = fq.get(0); 116 final String facet = facetParamMapper.getFacet(requestedFacet); 117 final String value = facetParamMapper.getValue(requestedFacet, fq.get(1)); 118 if (facetsDefined.contains(facet)) { 119 if (selection.containsKey(facet)) { 120 selection.get(facet).getValues().add(value); 121 } else { 122 selection.put(facet, new FacetSelection(Arrays.asList(value))); 123 } 88 124 } else { 89 selection.put(facet, new FacetSelection(Arrays.asList(value))); 125 logger.debug("Undefined facet passed into query parameter {}: {}", FILTER_QUERY, facet); 126 127 if (Session.exists()) { 128 // generate Wicket error message 129 Session.get().error("Unknown facet: " + facet); 130 } 90 131 } 91 132 } else { -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/SolrFieldStringModel.java
r4996 r6029 17 17 package eu.clarin.cmdi.vlo.wicket.model; 18 18 19 import eu.clarin.cmdi.vlo.FacetConstants; 19 20 import java.util.Collection; 20 21 import java.util.Iterator; … … 25 26 /** 26 27 * Model that provides field values as String values for a given field values 27 * model, both for singular values and multiple values (imploding the 28 * latterinto a single string)28 * model, both for singular values and multiple values (imploding the latter 29 * into a single string) 29 30 * 30 31 * @author twagoo … … 33 34 34 35 private final IModel<Collection<Object>> fieldModel; 36 private final String field; 35 37 36 38 /** … … 42 44 */ 43 45 public SolrFieldStringModel(IModel<SolrDocument> documentModel, String fieldName) { 44 this(new SolrFieldModel<Object>(documentModel, fieldName)); 45 } 46 47 /** 48 * 49 * @param fieldModel model that provides field values as a collection 50 */ 51 public SolrFieldStringModel(IModel<Collection<Object>> fieldModel) { 52 this.fieldModel = fieldModel; 46 fieldModel = new SolrFieldModel<Object>(documentModel, fieldName); 47 field = fieldName; 53 48 } 54 49 … … 65 60 final Iterator<Object> iterator = fieldValues.iterator(); 66 61 if (iterator.hasNext()) { 67 final String firstValue = iterator.next().toString();62 final String firstValue = postprocessValue(iterator.next().toString()); 68 63 if (iterator.hasNext()) { 69 64 return getMultipleValuesString(firstValue, iterator); … … 93 88 } 94 89 90 private String postprocessValue(String value) { 91 if (value != null) { 92 if (FacetConstants.FIELD_DESCRIPTION.equals(field)) { 93 //remove language prefix 94 return value.replaceAll(FacetConstants.DESCRIPTION_LANGUAGE_PATTERN, ""); 95 } 96 } 97 return value; 98 } 99 95 100 } -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/BreadCrumbPanel.java
r5224 r6029 24 24 import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage; 25 25 import eu.clarin.cmdi.vlo.wicket.provider.FacetSelectionProvider; 26 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider; 26 27 import java.util.Collection; 27 28 import java.util.Iterator; … … 52 53 */ 53 54 public class BreadCrumbPanel extends GenericPanel<QueryFacetsSelection> { 54 55 55 56 @SpringBean(name = "queryParametersConverter") 56 57 private PageParametersConverter<QueryFacetsSelection> paramsConverter; 57 58 @SpringBean 59 private FieldValueConverterProvider fieldValueConverterProvider; 60 58 61 private final WebMarkupContainer query; 59 62 private final WebMarkupContainer facets; 60 63 61 64 public BreadCrumbPanel(String id, IModel<QueryFacetsSelection> model) { 62 65 super(id, model); … … 65 68 add(facets = createFacets(model, "facets")); 66 69 } 67 70 68 71 private WebMarkupContainer createQuery(final IModel<QueryFacetsSelection> selectionModel, String id) { 69 72 final WebMarkupContainer queryContainer = new WebMarkupContainer(id); 70 73 final Link link = new AjaxFallbackLink("leavequery") { 71 74 72 75 @Override 73 76 public void onClick(AjaxRequestTarget target) { … … 81 84 return queryContainer; 82 85 } 83 86 84 87 private WebMarkupContainer createFacets(final IModel<QueryFacetsSelection> model, String id) { 85 88 final WebMarkupContainer facetsContainer = new WebMarkupContainer(id); 86 89 facetsContainer.add(new AjaxFallbackLink("leaveselection") { 87 90 88 91 @Override 89 92 public void onClick(AjaxRequestTarget target) { … … 95 98 final FacetSelectionProvider facetSelectionProvider = new FacetSelectionProvider(model); 96 99 facetsContainer.add(new DataView<Map.Entry<String, FacetSelection>>("facet", facetSelectionProvider) { 97 100 98 101 @Override 99 102 protected void populateItem(final Item<Map.Entry<String, FacetSelection>> item) { … … 101 104 // add a label for the selected facet value(s) 102 105 final Label valueLabel = new Label("value", new PropertyModel(selectionModel, "value")) { 103 106 104 107 @Override 105 108 public <C> IConverter<C> getConverter(Class<C> type) { 109 final String facet = item.getModelObject().getKey(); 106 110 // converter to render the value(s) nicely 107 return (IConverter<C>) new SelectionConverter( item.getModelObject().getKey());111 return (IConverter<C>) new SelectionConverter(facet, fieldValueConverterProvider.getConverter(facet)); 108 112 } 109 113 110 114 }; 111 115 // add facet name as title attribute so that it becomes available through a tooltip … … 116 120 // add a link for removal of the facet value selection 117 121 item.add(new AjaxFallbackLink("removal") { 118 122 119 123 @Override 120 124 public void onClick(AjaxRequestTarget target) { … … 129 133 } 130 134 }); 131 135 132 136 return facetsContainer; 133 137 } … … 144 148 setResponsePage(FacetedSearchPage.class, paramsConverter.toParameters(selection)); 145 149 } 146 150 147 151 @Override 148 152 protected void onConfigure() { 149 153 super.onConfigure(); 150 154 151 155 final String queryString = getModelObject().getQuery(); 152 156 final Map<String, FacetSelection> selection = getModelObject().getSelection(); 153 157 154 158 query.setVisible(queryString != null && !queryString.isEmpty()); 155 159 facets.setVisible(selection != null && !selection.isEmpty()); … … 161 165 */ 162 166 private class SelectionConverter implements IConverter<FacetSelection> { 163 167 164 168 private final String facet; 165 166 public SelectionConverter(String facet) { 169 private final IConverter<String> valueConverter; 170 171 public SelectionConverter(String facet, IConverter<String> valueConverter) { 167 172 this.facet = facet; 168 } 169 173 this.valueConverter = valueConverter; 174 } 175 170 176 @Override 171 177 public FacetSelection convertToObject(String value, Locale locale) throws ConversionException { 172 178 throw new UnsupportedOperationException("Not supported yet."); 173 179 } 174 180 175 181 @Override 176 182 public String convertToString(FacetSelection selection, Locale locale) { 177 183 switch (selection.getSelectionType()) { 178 184 case AND: 179 return getCollectionString(selection, " and " );185 return getCollectionString(selection, " and ", locale); 180 186 case OR: 181 return getCollectionString(selection, " or " );187 return getCollectionString(selection, " or ", locale); 182 188 case NOT: 183 return "not [" + getCollectionString(selection, " or " ) + "]";189 return "not [" + getCollectionString(selection, " or ", locale) + "]"; 184 190 case NOT_EMPTY: 185 191 return getAnyValueString(); … … 187 193 return facet; 188 194 } 189 190 } 191 195 196 } 197 192 198 private String getAnyValueString() { 193 199 if (FacetConstants.FIELD_SEARCH_SERVICE.equals(facet)) { … … 196 202 return "any " + facet; 197 203 } 198 199 public String getCollectionString(FacetSelection selection, String valueSeparator ) {204 205 public String getCollectionString(FacetSelection selection, String valueSeparator, Locale locale) { 200 206 final Collection<String> value = selection.getValues(); 201 207 //TODO: include selection type … … 203 209 return ""; 204 210 } else if (value.size() == 1) { 205 return value.iterator().next();211 return getConvertedValue(value.iterator().next(), locale); 206 212 } else { 207 213 final Iterator<String> iterator = value.iterator(); 208 final StringBuilder sb = new StringBuilder( iterator.next());214 final StringBuilder sb = new StringBuilder(getConvertedValue(iterator.next(), locale)); 209 215 while (iterator.hasNext()) { 210 sb.append(valueSeparator).append( iterator.next());216 sb.append(valueSeparator).append(getConvertedValue(iterator.next(), locale)); 211 217 } 212 218 return sb.toString(); 213 219 } 214 220 } 215 221 222 private String getConvertedValue(String string, Locale locale) { 223 if (valueConverter != null) { 224 final String converted = valueConverter.convertToString(string, locale); 225 if (converted != null) { 226 return converted; 227 } 228 } 229 return string; 230 } 231 216 232 }; 217 233 } -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/FieldsTablePanel.java
r5268 r6029 17 17 package eu.clarin.cmdi.vlo.wicket.panels.record; 18 18 19 import eu.clarin.cmdi.vlo.wicket.components.LanguageInfoLink; 19 20 import com.google.common.collect.ImmutableSet; 20 21 import eu.clarin.cmdi.vlo.FacetConstants; … … 24 25 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 25 26 import eu.clarin.cmdi.vlo.service.PageParametersConverter; 27 import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel; 28 import eu.clarin.cmdi.vlo.wicket.model.DescriptionFieldModel; 26 29 import eu.clarin.cmdi.vlo.wicket.model.HandleLinkModel; 27 30 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel; … … 31 34 import java.util.List; 32 35 import org.apache.wicket.AttributeModifier; 36 import org.apache.wicket.Component; 33 37 import org.apache.wicket.extensions.markup.html.basic.SmartLinkLabel; 34 38 import org.apache.wicket.extensions.markup.html.basic.SmartLinkMultiLineLabel; … … 57 61 */ 58 62 private final static Collection<String> UNESCAPED_VALUE_FIELDS 59 = ImmutableSet.of( 60 FacetConstants.FIELD_LANGUAGES 61 ); 63 = Collections.emptySet(); // ImmutableSet.of(FacetConstants.FIELD_LANGUAGE_CODE); 62 64 63 65 /** … … 116 118 } 117 119 118 private Label createValueLabel(String id, final IModel<String> facetNameModel, final IModel<String> valueModel) {120 private Component createValueLabel(String id, final IModel<String> facetNameModel, final IModel<String> originalValueModel) { 119 121 final String fieldName = facetNameModel.getObject(); 120 if (SMART_LINK_FIELDS.contains(fieldName)) { 122 123 // allow for postprocessing or wrapping of the value model depending on the field 124 final IModel<String> valueModel = getValueModel(facetNameModel, originalValueModel); 125 126 if (FacetConstants.FIELD_LANGUAGE_CODE.equals(facetNameModel.getObject())) { 127 return new LanguageInfoLink(id, valueModel, facetNameModel); 128 } else if (SMART_LINK_FIELDS.contains(fieldName)) { 121 129 // create label that generates links 122 130 return new SmartLinkLabel(id, new HandleLinkModel(valueModel)); 123 131 } else { 124 132 // add a label for the facet value 125 final Label fieldLabel = new Label(id, valueModel); 133 final Label fieldLabel = new FieldValueLabel(id, valueModel, facetNameModel); 134 126 135 // some selected fields may have HTML that needs to be preserved... 127 136 fieldLabel.setEscapeModelStrings(!UNESCAPED_VALUE_FIELDS.contains(fieldName)); … … 155 164 } 156 165 166 private IModel<String> getValueModel(IModel<String> facetNameModel, IModel<String> valueModel) { 167 if (FacetConstants.FIELD_DESCRIPTION.equals(facetNameModel.getObject())) { 168 //wrap in model that removes the language prefix 169 return new DescriptionFieldModel(valueModel); 170 } 171 return valueModel; 172 } 173 157 174 } -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AllFacetValuesPanel.java
r5136 r6029 22 22 import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder; 23 23 import eu.clarin.cmdi.vlo.wicket.components.AjaxIndicatingForm; 24 import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel; 24 25 import eu.clarin.cmdi.vlo.wicket.components.FieldValueOrderSelector; 25 26 import eu.clarin.cmdi.vlo.wicket.model.BridgeModel; 26 27 import eu.clarin.cmdi.vlo.wicket.model.BridgeOuterModel; 27 28 import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider; 29 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider; 28 30 import java.util.Collections; 29 31 import org.apache.solr.client.solrj.response.FacetField; … … 48 50 import org.apache.wicket.model.Model; 49 51 import org.apache.wicket.model.PropertyModel; 52 import org.apache.wicket.spring.injection.annot.SpringBean; 50 53 51 54 /** … … 58 61 */ 59 62 public abstract class AllFacetValuesPanel extends GenericPanel<FacetField> { 63 64 @SpringBean 65 private FieldValueConverterProvider fieldValueConverterProvider; 60 66 61 67 private final FacetFieldValuesProvider valuesProvider; … … 88 94 89 95 // create a provider that shows all values and is sorted by name by default 90 valuesProvider = new FacetFieldValuesProvider(model, Integer.MAX_VALUE, FieldValueOrderSelector.NAME_SORT ) {96 valuesProvider = new FacetFieldValuesProvider(model, Integer.MAX_VALUE, FieldValueOrderSelector.NAME_SORT, fieldValueConverterProvider) { 91 97 92 98 @Override … … 123 129 124 130 private DataView<FacetField.Count> createValuesView(String id) { 131 final IModel<String> fieldNameModel = new PropertyModel<String>(getModel(), "name"); 125 132 return new DataView<FacetField.Count>(id, valuesProvider, ITEMS_PER_PAGE) { 126 133 … … 145 152 146 153 // 'name' field from Count (name of value) 147 selectLink.add(new Label("name"));154 selectLink.add(new FieldValueLabel("name", fieldNameModel)); 148 155 149 156 // 'count' field from Count (document count for value) … … 224 231 } 225 232 226 227 233 private class UpdateOptionsFormBehavior extends OnChangeAjaxBehavior { 228 234 -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.java
r5177 r6029 23 23 import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder; 24 24 import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection; 25 import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel; 25 26 import eu.clarin.cmdi.vlo.wicket.provider.PartitionedDataProvider; 26 27 import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel; 27 28 import eu.clarin.cmdi.vlo.wicket.pages.AllFacetValuesPage; 28 29 import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider; 30 import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider; 29 31 import java.util.Collection; 30 32 import java.util.Collections; … … 53 55 import org.apache.wicket.model.PropertyModel; 54 56 import org.apache.wicket.request.cycle.RequestCycle; 57 import org.apache.wicket.spring.injection.annot.SpringBean; 55 58 56 59 /** … … 69 72 private final IModel<FieldValuesFilter> filterModel; 70 73 private final int subListSize; 71 74 private final IModel<String> fieldNameModel; 75 76 @SpringBean 77 private FieldValueConverterProvider fieldValueConverterProvider; 72 78 /** 73 79 * Creates a new panel with selectable values for a single facet … … 114 120 valuesWindow = createAllValuesWindow("allValues"); 115 121 add(valuesWindow); 122 123 fieldNameModel = new PropertyModel<>(model, "name"); 116 124 } 117 125 … … 146 154 */ 147 155 private DataView createValuesView(String id) { 148 final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES ){156 final FacetFieldValuesProvider valuesProvider = new FacetFieldValuesProvider(getModel(), MAX_NUMBER_OF_FACETS_TO_SHOW, LOW_PRIORITY_VALUES, fieldValueConverterProvider){ 149 157 150 158 @Override … … 203 211 204 212 // 'name' field from Count (name of value) 205 selectLink.add(new Label("name"));213 selectLink.add(new FieldValueLabel("name", fieldNameModel)); 206 214 // 'count' field from Count (document count for value) 207 215 selectLink.add(new Label("count")); -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/SelectedFacetPanel.java
r5105 r6029 18 18 19 19 import eu.clarin.cmdi.vlo.pojo.FacetFieldSelection; 20 import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel; 20 21 import java.util.Collection; 21 22 import java.util.Collections; … … 23 24 import org.apache.wicket.ajax.AjaxRequestTarget; 24 25 import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxFallbackLink; 25 import org.apache.wicket.markup.html.basic.Label;26 26 import org.apache.wicket.markup.html.list.ListItem; 27 27 import org.apache.wicket.markup.html.list.ListView; … … 50 50 // Model of the list of selected values in this facet 51 51 final PropertyModel<List<String>> propertyModel = new PropertyModel<List<String>>(getModel(), "facetValues"); 52 final PropertyModel<String> fieldNameModel = new PropertyModel(getModel(), "facetField.name"); 52 53 // Repeating container of value + unselection links 53 54 final ListView<String> listView = new ListView<String>(id, propertyModel) { … … 61 62 protected void populateItem(final ListItem<String> item) { 62 63 // A label showing the name of the facet 63 item.add(new Label("facetValue", item.getModel()));64 item.add(new FieldValueLabel("facetValue", item.getModel(), fieldNameModel)); 64 65 // A link to remove the value selection from this facet 65 66 item.add(new RemoveLink("unselectValue", item.getModel())); -
vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProvider.java
r5154 r6029 24 24 import eu.clarin.cmdi.vlo.pojo.FieldValuesFilter; 25 25 import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder; 26 import eu.clarin.cmdi.vlo.wicket.CachingConverter; 26 27 import java.io.Serializable; 27 28 import java.text.Collator; … … 38 39 import org.apache.wicket.model.IModel; 39 40 import org.apache.wicket.model.Model; 41 import org.apache.wicket.util.convert.IConverter; 40 42 import org.slf4j.Logger; 41 43 import org.slf4j.LoggerFactory; … … 49 51 */ 50 52 public class FacetFieldValuesProvider extends SortableDataProvider<FacetField.Count, FieldValuesOrder> implements ListProvider<FacetField.Count> { 51 53 52 54 private final static Logger logger = LoggerFactory.getLogger(FacetFieldValuesProvider.class); 53 55 private final IModel<FacetField> model; 54 56 private final int maxNumberOfItems; 55 57 private final Collection<String> lowPriorityValues; 58 private final FieldValueConverterProvider fieldValueConverterProvider; 56 59 57 60 /** … … 71 74 * @param lowPriorityValues values that should with low priority (e.g. 72 75 * unknown, unspecified) 73 */ 74 public FacetFieldValuesProvider(IModel<FacetField> model, Collection<String> lowPriorityValues) { 75 this(model, Integer.MAX_VALUE, lowPriorityValues); 76 * @param fieldValueConverterProvider 77 */ 78 public FacetFieldValuesProvider(IModel<FacetField> model, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) { 79 this(model, Integer.MAX_VALUE, lowPriorityValues, fieldValueConverterProvider); 76 80 } 77 81 … … 81 85 * @param max maximum number of values to show 82 86 * @param lowPriorityValues (e.g. unknown, unspecified) 83 */ 84 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues) { 85 this(model, max, lowPriorityValues, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false)); 86 } 87 88 public FacetFieldValuesProvider(IModel<FacetField> model, int max, SortParam<FieldValuesOrder> sort) { 89 this(model, max, null, sort); 87 * @param fieldValueConverterProvider 88 */ 89 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, FieldValueConverterProvider fieldValueConverterProvider) { 90 this(model, max, lowPriorityValues, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), fieldValueConverterProvider); 91 } 92 93 public FacetFieldValuesProvider(IModel<FacetField> model, int max, SortParam<FieldValuesOrder> sort, FieldValueConverterProvider fieldValueConverterProvider) { 94 this(model, max, null, sort, fieldValueConverterProvider); 90 95 } 91 96 … … 97 102 * @param lowPriorityValues (e.g. unknown, unspecified) 98 103 * @param sort initial sort property and order 99 */ 100 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, SortParam<FieldValuesOrder> sort) { 104 * @param fieldValueConverterProvider 105 */ 106 public FacetFieldValuesProvider(IModel<FacetField> model, int max, Collection<String> lowPriorityValues, SortParam<FieldValuesOrder> sort, FieldValueConverterProvider fieldValueConverterProvider) { 101 107 this.model = model; 102 108 this.maxNumberOfItems = max; 103 109 this.lowPriorityValues = lowPriorityValues; 110 this.fieldValueConverterProvider = fieldValueConverterProvider; 104 111 setSort(sort); 105 112 } … … 113 120 return null; 114 121 } 115 122 116 123 @Override 117 124 public Iterator<? extends FacetField.Count> iterator(long first, long count) { … … 119 126 return getList().listIterator((int) first); 120 127 } 121 128 122 129 @Override 123 130 public List<? extends FacetField.Count> getList() { … … 132 139 } 133 140 } 134 141 135 142 @Override 136 143 public long size() { … … 140 147 return size; 141 148 } 142 149 143 150 @Override 144 151 public IModel<FacetField.Count> model(FacetField.Count object) { … … 161 168 } 162 169 } 163 170 164 171 private Iterable<Count> getFilteredValues() { 165 172 if (filtered == null) { … … 170 177 return filtered; 171 178 } 172 179 173 180 private long getSize() { 174 181 if (hasFilter()) { … … 182 189 } 183 190 } 184 191 185 192 private boolean hasFilter() { 186 193 return getFilterModel() != null && getFilterModel().getObject() != null && !getFilterModel().getObject().isEmpty(); … … 200 207 } 201 208 } 202 209 203 210 private Ordering getBaseOrdering() { 204 211 final Ordering ordering; … … 206 213 ordering = new CountOrdering(); 207 214 } else if (getSort().getProperty() == FieldValuesOrder.NAME) { 208 ordering = new NameOrdering(getLocale() );215 ordering = new NameOrdering(getLocale(), fieldValueConverterProvider.getConverter(model.getObject().getName())); 209 216 } else { 210 217 ordering = Ordering.natural(); 211 218 } 212 219 213 220 if (getSort().isAscending()) { 214 221 return ordering; … … 217 224 } 218 225 } 219 226 220 227 protected Locale getLocale() { 221 228 try { … … 229 236 return Locale.getDefault(); 230 237 } 231 238 232 239 private final static class CountOrdering extends Ordering<FacetField.Count> { 233 240 234 241 @Override 235 242 public int compare(Count arg0, Count arg1) { … … 237 244 } 238 245 }; 239 246 240 247 private final static class NameOrdering extends Ordering<FacetField.Count> implements Serializable { 241 248 242 249 private final Collator collator; 243 244 public NameOrdering(Locale locale) { 250 private final IConverter converter; 251 private final Locale locale; 252 253 public NameOrdering(Locale locale, IConverter<String> converter) { 245 254 collator = Collator.getInstance(locale); 246 255 collator.setStrength(Collator.PRIMARY); 247 } 248 256 this.converter = new CachingConverter(converter); 257 this.locale = locale; 258 } 259 249 260 @Override 250 261 public int compare(Count arg0, Count arg1) { 251 return collator.compare(arg0.getName(), arg1.getName()); 262 if (converter == null) { 263 return collator.compare(arg0.getName(), arg1.getName()); 264 } else { 265 return collator.compare( 266 converter.convertToString(arg0.getName(), locale), 267 converter.convertToString(arg1.getName(), locale)); 268 } 252 269 } 253 270 }; … … 258 275 */ 259 276 private static class PriorityOrdering extends Ordering<FacetField.Count> { 260 277 261 278 private final Collection<String> lowPriorityValues; 262 279 263 280 public PriorityOrdering(Collection<String> lowPriorityValues) { 264 281 this.lowPriorityValues = lowPriorityValues; 265 282 } 266 283 267 284 @Override 268 285 public int compare(Count arg0, Count arg1) { 269 286 270 287 if (lowPriorityValues.contains(arg0.getName())) { 271 288 if (!lowPriorityValues.contains(arg1.getName())) { … … 281 298 return 0; 282 299 } 283 300 284 301 }; 285 302 286 303 @Override 287 304 public void detach() { -
vlo/branches/vlo-3.1/vlo-web-app/src/main/resources/fieldNames.properties
r5093 r6029 17 17 field.collection=Collection 18 18 field.name=Name 19 field.language=Language 20 field.languages=Language 19 field.languageCode=Language 21 20 field.genre=Genre 22 21 field.description=Description -
vlo/branches/vlo-3.1/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/QueryFacetsSelectionParametersConverterTest.java
r4999 r6029 17 17 package eu.clarin.cmdi.vlo.service.impl; 18 18 19 import com.google.common.collect.ImmutableList; 19 20 import com.google.common.collect.Maps; 21 import static eu.clarin.cmdi.vlo.FacetConstants.FIELD_COLLECTION; 22 import static eu.clarin.cmdi.vlo.FacetConstants.FIELD_COUNTRY; 23 import eu.clarin.cmdi.vlo.config.VloConfig; 20 24 import eu.clarin.cmdi.vlo.pojo.FacetSelection; 21 25 import eu.clarin.cmdi.vlo.pojo.FacetSelectionType; … … 44 48 @Before 45 49 public void setUp() { 46 instance = new QueryFacetsSelectionParametersConverter(); 50 VloConfig config = new VloConfig() { 51 52 @Override 53 public List<String> getAllFacetFields() { 54 return ImmutableList.of("facet1", "facet2", "facet3", "facet4"); 55 } 56 57 }; 58 instance = new QueryFacetsSelectionParametersConverter(config); 47 59 } 48 60 … … 60 72 params.add("fq", "facet2:value:C"); // has a colon in value 61 73 params.add("fq", "illegal-no-colon"); //should get ignored 74 params.add("fq", "facet5:valueD"); //not in list, should get ignored 62 75 params.add("fq", ""); // not a valid facet selection 63 76 params.add("fq", "invalid"); // not a valid facet selection -
vlo/branches/vlo-3.1/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/wicket/provider/FacetFieldValuesProviderTest.java
r5129 r6029 23 23 import java.util.Iterator; 24 24 import java.util.Locale; 25 import java.util.Locale;26 25 import org.apache.solr.client.solrj.response.FacetField; 27 26 import org.apache.wicket.extensions.markup.html.repeater.util.SortParam; 28 27 import org.apache.wicket.model.IModel; 29 28 import org.apache.wicket.model.Model; 29 import org.apache.wicket.util.convert.ConversionException; 30 import org.apache.wicket.util.convert.converter.AbstractConverter; 31 import org.jmock.Expectations; 32 import org.jmock.Mockery; 33 import org.jmock.integration.junit4.JUnit4Mockery; 34 import org.junit.Assert; 30 35 import static org.junit.Assert.*; 31 36 import org.junit.Before; … … 40 45 public final static Collection<String> LOW_PRIORITY_VALUES = ImmutableSet.of("Xlow priority"); 41 46 47 private final Mockery context = new JUnit4Mockery(); 42 48 private FacetField facetField; 49 private FieldValueConverterProvider valueConverterProvider; 43 50 44 51 @Before … … 50 57 facetField.add("third value", 103); 51 58 facetField.add("FOURTH value", 104); //intentional upper case, sort and filter should be case insensitive 59 60 valueConverterProvider = context.mock(FieldValueConverterProvider.class); 61 context.checking(new Expectations() { 62 { 63 allowing(valueConverterProvider).getConverter(with(any(String.class))); 64 will(returnValue(new AbstractConverter<String>() { 65 66 @Override 67 protected Class<String> getTargetType() { 68 return String.class; 69 } 70 71 @Override 72 public String convertToObject(String value, Locale locale) throws ConversionException { 73 Assert.fail("convertToObject should not get called on the Field Value converter"); 74 return null; 75 } 76 })); 77 } 78 }); 52 79 } 53 80 … … 57 84 @Test 58 85 public void testIteratorCountOrder() { 59 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true) );86 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true), valueConverterProvider); 60 87 61 88 long first = 0; … … 93 120 @Test 94 121 public void testIteratorCountOrderDescending() { 95 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false) );122 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), valueConverterProvider); 96 123 97 124 long first = 0; … … 129 156 @Test 130 157 public void testIteratorCountOrderDefaultPriority() { 131 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false) );158 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, false), valueConverterProvider); 132 159 133 160 long first = 0; … … 164 191 @Test 165 192 public void testIteratorNameOrderDescending() { 166 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false) );193 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false), valueConverterProvider); 167 194 168 195 final long first = 0; … … 206 233 facetField.add("één nederlandse waarde", 1); 207 234 208 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true) ) {235 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true), valueConverterProvider) { 209 236 210 237 @Override … … 246 273 @Test 247 274 public void testIteratorOffset() { 248 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true) );275 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.COUNT, true), valueConverterProvider); 249 276 250 277 final long first = 2; … … 265 292 // potential is lower than limit 266 293 { 267 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false) );294 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false), valueConverterProvider); 268 295 // actual number is returned 269 296 assertEquals(5, instance.size()); … … 271 298 // potential is higher than limit 272 299 { 273 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 2, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false) );300 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 2, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, false), valueConverterProvider); 274 301 // maximum number is returned (result is capped) 275 302 assertEquals(2, instance.size()); … … 285 312 filterModel.getObject().setName("th"); 286 313 287 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true) ) {314 final FacetFieldValuesProvider instance = new FacetFieldValuesProvider(Model.of(facetField), 10, LOW_PRIORITY_VALUES, new SortParam<FieldValuesOrder>(FieldValuesOrder.NAME, true), valueConverterProvider) { 288 315 289 316 @Override … … 308 335 309 336 assertFalse(result.hasNext()); 310 337 311 338 instance.detach(); 312 339 // add minimal occurences condition to filter
Note: See TracChangeset
for help on using the changeset viewer.