Changeset 6029


Ignore:
Timestamp:
02/24/15 08:11:39 (9 years ago)
Author:
Twan Goosen
Message:

merged changes from trunk

Location:
vlo/branches/vlo-3.1
Files:
5 deleted
30 edited
11 copied

Legend:

Unmodified
Added
Removed
  • vlo/branches/vlo-3.1

  • vlo/branches/vlo-3.1/vlo-commons/src/main/java/eu/clarin/cmdi/vlo/FacetConstants.java

    r5896 r6029  
    1515    public static final String FIELD_LANGUAGE = "language";
    1616    public static final String FIELD_LICENSE = "license";
    17     public static final String FIELD_LANGUAGES = "languages";
    1817    public static final String FIELD_LANGUAGE_CODE = "languageCode";
    1918    public static final String FIELD_YEAR = "year";
     
    6463    public static final String URN_NBN_PREFIX = "urn:nbn";
    6564    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})'\\}";
    6671}
  • vlo/branches/vlo-3.1/vlo-commons/src/main/resources/OrganisationControlledVocabulary.xml

    r5885 r6029  
    761761        <Variation>University of Helsinki, Department of General Linguistics.</Variation>
    762762    </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>
    770763    <Organisation name="Heidelberger Akademie der Wissenschaften, University of Heidelberg">
    771764        <Variation>University of Heidelberg, Heidelberger Akademie der Wissenschaften</Variation>
     
    14881481    <Organisation name="MPI">
    14891482        <Variation>Max Planck Institute</Variation>
     1483        <Variation>Max Planck Institut</Variation>
    14901484    </Organisation>
    14911485    <Organisation name="Finanstilsynet, OEM"/>
     
    18681862        <Variation>Université Paris X- Nanterre</Variation>
    18691863        <Variation>Université Paris X Nanterre</Variation>
    1870         <Variation>Max Planck Institute for Evolutionary Anthropology</Variation>
    18711864    </Organisation>
    18721865    <Organisation name="Goethe University Frankfurt, Institute of Empirical Linguistics">
     
    18791872    <Organisation name="Max Planck Institute for Evolutionary Anthropology">
    18801873        <Variation>Max-Planck-Institute for Evolutionary Anthropology</Variation>
     1874        <Variation>Max Planck Institute for Evolutionary Anthropology</Variation>
    18811875    </Organisation>
    18821876    <Organisation name="National Foreign Language Resource Center, University of Hawai?i"/>
     
    20632057        <Variation>Max Planck Institute for Psycolinguistics</Variation>
    20642058        <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>
    20652079    </Organisation>
    20662080    <Organisation name="Witwatersrand University Press">
     
    21352149    <Organisation name="Institute of Cybernetics, Tallinn University of Technology">
    21362150        <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>
    21412151    </Organisation>
    21422152    <Organisation name="Sheldon Press">
  • vlo/branches/vlo-3.1/vlo-commons/src/main/resources/VloConfig.xml

    r5886 r6029  
    7070    <!-- Fields shown as facets on the search page -->
    7171    <facetFields>       
    72         <facetField>language</facetField>
     72        <facetField>languageCode</facetField>
    7373        <facetField>collection</facetField>
    7474        <facetField>resourceClass</facetField>
     
    8686       
    8787    <simpleSearchFacetFields>
    88         <simpleSearchFacetField>language</simpleSearchFacetField>
     88        <simpleSearchFacetField>languageCode</simpleSearchFacetField>
    8989        <simpleSearchFacetField>collection</simpleSearchFacetField>
    9090        <simpleSearchFacetField>resourceClass</simpleSearchFacetField>
     
    9797        <searchResultField>name</searchResultField>
    9898        <searchResultField>country</searchResultField>
    99         <searchResultField>languages</searchResultField>
     99        <searchResultField>languageCode</searchResultField>
    100100        <searchResultField>modality</searchResultField>
    101101        <searchResultField>subject</searchResultField>
  • vlo/branches/vlo-3.1/vlo-commons/src/main/resources/facetConcepts.xml

    r5994 r6029  
    149149                <!-- IDSAGD_Speaker -->
    150150        </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>
    209151        <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'.">
    210152                <concept>http://www.isocat.org/datcat/DC-2482</concept>
     
    246188                <!-- MPI (JK) -->
    247189                <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 -->
    307190                <blacklistPattern>/c:LanguageName</blacklistPattern>
    308191                <!-- general -->
  • vlo/branches/vlo-3.1/vlo-commons/src/test/java/eu/clarin/cmdi/vlo/config/DefaultVloConfigFactoryTest.java

    r5247 r6029  
    631631
    632632        List<String> expResult = Arrays.asList(
    633                 "language",
     633                "languageCode",
    634634                "collection",
    635635                "resourceClass",
     
    653653    public void testGetAllFacetsField() {
    654654        final String[] expItems = new String[]{
    655             "language",
     655            "languageCode",
    656656            "collection",
    657657            "resourceClass",
  • vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/CMDIParserVTDXML.java

    r5985 r6029  
    2828   
    2929    private static final String DEFAULT_LANGUAGE = "und";
    30 
     30   
    3131    public CMDIParserVTDXML(Map<String, PostProcessor> postProcessors, Boolean useLocalXSDCache) {
    3232        this.postProcessors = postProcessors;
     
    244244                languageCode = nav.toString(langAttrIndex).trim();
    245245            // 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);
    248248           
    249249            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  
    11package eu.clarin.cmdi.vlo.importer;
    22
     3import eu.clarin.cmdi.vlo.LanguageCodeUtils;
    34import org.slf4j.Logger;
    45import org.slf4j.LoggerFactory;
     
    1213
    1314    private final static Logger LOG = LoggerFactory.getLogger(LanguageCodePostProcessor.class);
    14    
     15
    1516    protected static final String CODE_PREFIX = "code:";
    1617    protected static final String LANG_NAME_PREFIX = "name:";
     
    4041
    4142    protected String extractLanguageCode(String value) {
     43        final LanguageCodeUtils languageCodeUtils = MetadataImporter.languageCodeUtils;
     44       
    4245        String result = value;
    4346       
     
    4548       
    4649        // input is already ISO 639-3?
    47         if(LanguageCodeUtils.getIso639ToLanguageNameMap().keySet().contains(result.toUpperCase()))
     50        if(languageCodeUtils.getIso639ToLanguageNameMap().keySet().contains(result.toUpperCase()))
    4851            return CODE_PREFIX + result.toLowerCase();
    4952       
    5053        // 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());
    5356        }
    5457
    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);
    5760        }
    5861
    5962        // 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());
    6265        }
    6366       
  • vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/MetadataImporter.java

    r5979 r6029  
    11package eu.clarin.cmdi.vlo.importer;
    22
     3import eu.clarin.cmdi.vlo.LanguageCodeUtils;
    34import eu.clarin.cmdi.vlo.CommonUtils;
    45import eu.clarin.cmdi.vlo.FacetConstants;
     
    7677        POST_PROCESSORS.put(FacetConstants.FIELD_CONTINENT, new ContinentNamePostProcessor());
    7778        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());
    8079        POST_PROCESSORS.put(FacetConstants.FIELD_LANGUAGE_CODE, new LanguageCodePostProcessor());
    8180        POST_PROCESSORS.put(FacetConstants.FIELD_LICENSE, new LicensePostProcessor());
     
    439438    public static VloConfig config;
    440439
     440    public static LanguageCodeUtils languageCodeUtils;
     441   
    441442    /**
    442443     * @param args
     
    511512            final XmlVloConfigFactory configFactory = new XmlVloConfigFactory(configUrl);
    512513            MetadataImporter.config = configFactory.newConfig();
     514            MetadataImporter.languageCodeUtils = new LanguageCodeUtils(MetadataImporter.config);
    513515
    514516            // optionally, modify the configuration here
  • vlo/branches/vlo-3.1/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/OrganisationPostProcessor.java

    r5887 r6029  
    3535    @Override
    3636    public List<String> process(String value) {
    37         String[] splitArray = value.split(";");
     37        String[] splitArray = normalizeInputString(value).split(";");
    3838        for (int i = 0; i < splitArray.length; i++) {
    3939            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));
    4242            }
    4343        }
    44 
     44       
    4545        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("-", " ");
    4654    }
    4755
     
    7583            NodeList childNodeList = node.getChildNodes();
    7684            for (int j = 0; j < childNodeList.getLength(); j++) {
    77                 String variation = childNodeList.item(j).getTextContent();
     85                String variation = normalizeVariant(childNodeList.item(j).getTextContent());
    7886                result.put(variation, organisationName);
    7987            }
  • vlo/branches/vlo-3.1/vlo-importer/src/test/java/eu/clarin/cmdi/vlo/importer/CMDIDataProcessorTest.java

    r5979 r6029  
    390390        SolrInputDocument doc = data.getSolrDocument();
    391391        assertNotNull(doc);
    392         assertEquals(16, doc.getFieldNames().size());
     392        assertEquals(14, doc.getFieldNames().size());
    393393        assertEquals("test-hdl:1839/00-0000-0000-0009-294C-9", doc.getFieldValue("_selfLink"));
    394394        assertEquals("kleve-route", doc.getFieldValue("name"));
    395395        assertEquals("Peter Wittenburg", doc.getFieldValue(FacetConstants.FIELD_PROJECT_NAME));
    396396        assertEquals("Europe", doc.getFieldValue("continent"));
    397         assertEquals("English", doc.getFieldValue("language"));
     397        assertEquals("code:eng", doc.getFieldValue("languageCode"));
    398398        assertEquals("Netherlands", doc.getFieldValue("country"));
    399         assertEquals("MPI for Psycholinguistics, MPG", doc.getFieldValue("organisation"));
     399        assertEquals("Max Planck Institute for Psycholinguistics", doc.getFieldValue("organisation"));
    400400        assertEquals("demo", doc.getFieldValue("genre"));
    401401        assertEquals(
     
    593593        SolrInputDocument doc = data.getSolrDocument();
    594594        assertNotNull(doc);
    595         assertEquals(11, doc.getFieldNames().size());
     595        assertEquals(9, doc.getFieldNames().size());
    596596        assertEquals("oai:ailla.utexas.edu:1", doc.getFieldValue("_selfLink"));
    597597        assertEquals(null, doc.getFieldValue("name"));
    598598        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"));
    601601        assertEquals(null, doc.getFieldValue("country"));
    602602        assertEquals(null, doc.getFieldValue("organisation"));
     
    654654        assertTrue(doc.getFieldValues(FacetConstants.FIELD_COUNTRY).contains("testCountry1"));
    655655        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"));
    658658
    659659        content = "";
     
    681681        assertEquals(1, doc.getFieldValues(FacetConstants.FIELD_COUNTRY).size());
    682682        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));
    685685
    686686        content = "";
     
    711711        assertTrue(doc.getFieldValues(FacetConstants.FIELD_COUNTRY).contains("testCountry1"));
    712712        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"));
    715715    }
    716716
     
    902902        SolrInputDocument doc = data.getSolrDocument();
    903903        assertNotNull(doc);
    904         assertEquals(11, doc.getFieldNames().size());
     904        assertEquals(9, doc.getFieldNames().size());
    905905        assertEquals("clarin.eu:lrt:433", doc.getFieldValue("_selfLink"));
    906906        assertEquals("Corpus of Present-day Written Estonian", doc.getFieldValue("name"));
    907907        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"));
    910910        assertEquals("Estonia", doc.getFieldValue("country"));
    911911        assertEquals("Test", doc.getFieldValue("organisation"));
  • vlo/branches/vlo-3.1/vlo-importer/src/test/java/eu/clarin/cmdi/vlo/importer/FacetMappingFactoryTest.java

    r5985 r6029  
    3030       
    3131        List<FacetConfiguration> facets = facetMapping.getFacets();
    32         assertEquals(22, facets.size());
     32        assertEquals(20, facets.size());
    3333       
    3434        int index = 0;
     
    8888        mapping = facets.get(index++);
    8989       
    90         assertEquals(FacetConstants.FIELD_LANGUAGE, mapping.getName());
     90        assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName());
    9191        assertEquals(2, mapping.getPatterns().size());
    9292        assertEquals("/c:CMD/c:Components/c:Session/c:MDGroup/c:Content/c:Content_Languages/c:Content_Language/c:Id/text()",
     
    9797        assertEquals("/c:CMD/c:Components/c:Session/c:Resources/c:WrittenResource/c:LanguageId/text()",
    9898                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());
    10599        mapping = facets.get(index++);
    106100       
     
    181175       
    182176        List<FacetConfiguration> facets = facetMapping.getFacets();
    183         assertEquals(20, facets.size());
     177        assertEquals(18, facets.size());
    184178       
    185179        int index = 0;
     
    234228        mapping = facets.get(index++);
    235229       
    236         assertEquals(FacetConstants.FIELD_LANGUAGE, mapping.getName());
     230        assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName());
    237231        assertEquals(1, mapping.getPatterns().size());
    238232        assertEquals("/c:CMD/c:Components/c:OLAC-DcmiTerms/c:language/text()",
    239233                mapping.getPatterns().get(0));
    240234        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());
    247235        mapping = facets.get(index++);
    248236       
     
    313301
    314302        List<FacetConfiguration> facets = facetMapping.getFacets();
    315         assertEquals(19, facets.size());
     303        assertEquals(17, facets.size());
    316304       
    317305        int index = 0;
     
    368356        mapping = facets.get(index++);
    369357       
    370         assertEquals(FacetConstants.FIELD_LANGUAGE, mapping.getName());
     358        assertEquals(FacetConstants.FIELD_LANGUAGE_CODE, mapping.getName());
    371359
    372360        // LOG.info("XXXXX: " + mapping.getPatterns().get(0));
     
    377365                "/c:CMD/c:Components/c:LrtInventoryResource/c:LrtCommon/c:Languages/c:ISO639/c:iso-639-3-code/text()",
    378366                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());
    385367        mapping = facets.get(index++);
    386368       
     
    482464       
    483465       
    484         facet = facets.get(15);
     466        facet = facets.get(13);
    485467        assertEquals(FacetConstants.FIELD_DESCRIPTION, facet.getName());
    486468        assertEquals(1, facet.getPatterns().size());
  • vlo/branches/vlo-3.1/vlo-importer/src/test/java/eu/clarin/cmdi/vlo/importer/ImporterTestcase.java

    r5100 r6029  
    11package eu.clarin.cmdi.vlo.importer;
    22
     3import eu.clarin.cmdi.vlo.LanguageCodeUtils;
    34import eu.clarin.cmdi.vlo.config.DefaultVloConfigFactory;
    45import eu.clarin.cmdi.vlo.config.VloConfig;
     
    3940        MetadataImporter.config.setComponentRegistryRESTURL("http://catalog.clarin.eu/ds/ComponentRegistry/rest/registry/profiles/");
    4041        config = MetadataImporter.config;
     42       
     43        MetadataImporter.languageCodeUtils = new LanguageCodeUtils(config);
    4144    }
    4245
  • vlo/branches/vlo-3.1/vlo-importer/src/test/resources/facetConceptsTest.xml

    r5994 r6029  
    115115                <blacklistPattern>/c:CMD/c:Components/c:IDSAGD_Speaker/c:LinguisticBackground/c:Competence/c:LanguageVariety/c:LanguageVarietyPlace/c:Location/c:Country</blacklistPattern>
    116116        </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>
    162117        <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'.">
    163118                <concept>http://www.isocat.org/datcat/DC-2482</concept>
     
    180135      <concept>http://hdl.handle.net/11459/CCR_C-4146_5ccc45c8-d729-c180-2bf1-fccc56dde24d</concept>
    181136    </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>-->
    227137                <pattern>/c:CMD/c:Components//c:OLAC-DcmiTerms/c:language/@olac-language</pattern>
    228138                <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  
    420420   <field name="continent" type="string" indexed="true" stored="true" multiValued="true"/>
    421421   <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" />
    423423   <field name="license" type="string" indexed="true" stored="true" multiValued="true" />
    424424   <field name="organisation"  type="string" indexed="true" stored="true" multiValued="true"/>
     
    448448   <field name="_searchPageRef" type="string" indexed="true" stored="true" multiValued="true" />
    449449   <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" />
    452450   
    453451   <!-- Field for autocompletion (suggester) -->
  • vlo/branches/vlo-3.1/vlo-web-app/pom.xml

    r5988 r6029  
    221221                <version>2.5.1</version>
    222222                <configuration>
    223                     <source>1.6</source>
    224                     <target>1.6</target>
     223                    <source>1.7</source>
     224                    <target>1.7</target>
    225225                    <encoding>UTF-8</encoding>
    226226                    <showWarnings>true</showWarnings>
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloServicesSpringConfig.java

    r5231 r6029  
    1818
    1919import com.google.common.collect.Sets;
     20import eu.clarin.cmdi.vlo.LanguageCodeUtils;
    2021import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2122import eu.clarin.cmdi.vlo.pojo.SearchContext;
     23import eu.clarin.cmdi.vlo.service.FacetParameterMapper;
    2224import eu.clarin.cmdi.vlo.service.FieldFilter;
    2325import eu.clarin.cmdi.vlo.service.PageParametersConverter;
     
    3032import eu.clarin.cmdi.vlo.service.impl.DocumentParametersConverter;
    3133import eu.clarin.cmdi.vlo.service.impl.ExclusiveFieldFilter;
     34import eu.clarin.cmdi.vlo.service.impl.FacetParameterMapperImpl;
    3235import eu.clarin.cmdi.vlo.service.impl.InclusiveFieldFilter;
    3336import eu.clarin.cmdi.vlo.service.impl.QueryFacetsSelectionParametersConverter;
     
    3740import eu.clarin.cmdi.vlo.service.impl.UriResolverImpl;
    3841import eu.clarin.cmdi.vlo.service.impl.XmlTransformationServiceImpl;
     42import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider;
     43import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProviderImpl;
    3944import java.util.Properties;
    4045import javax.inject.Inject;
     
    8287        return new HandleRestApiClient();
    8388    }
     89   
     90    @Bean
     91    public FacetParameterMapper facetParameterMapper() {
     92        return new FacetParameterMapperImpl(languageCodeUtils());
     93    }
    8494
    8595    @Bean(name = "queryParametersConverter")
    8696    public PageParametersConverter<QueryFacetsSelection> queryParametersConverter() {
    87         return new QueryFacetsSelectionParametersConverter();
     97        return new QueryFacetsSelectionParametersConverter(vloConfig, facetParameterMapper());
    8898    }
    8999
     
    126136                vloConfig.getTechnicalFields());
    127137    }
     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
    128149}
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/config/VloSolrSpringConfig.java

    r5231 r6029  
    9696            FacetConstants.FIELD_DESCRIPTION,
    9797            FacetConstants.FIELD_COLLECTION,
    98             FacetConstants.FIELD_LANGUAGES,
     98            FacetConstants.FIELD_LANGUAGE_CODE,
    9999            FacetConstants.FIELD_MODALITY,
    100100            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  
    3333 * Service that connects to the handle.net REST API and retrieves the URL for a
    3434 * given handle.
    35  * 
     35 *
    3636 * Consider re-implementing using the handle API
    3737 *
     
    9999        // The handle API returns a JSON structure with a number of handle
    100100        // 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'
    102102
    103103        final JSONObject jsonResponse = new JSONObject(jsonString);
     
    106106            final JSONObject object = valuesArray.getJSONObject(i);
    107107            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                }
    111114            }
    112115        }
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/service/impl/QueryFacetsSelectionParametersConverter.java

    r4999 r6029  
    1818
    1919import com.google.common.base.Splitter;
     20import com.google.common.collect.ImmutableSet;
    2021import com.google.common.collect.Maps;
    2122import static eu.clarin.cmdi.vlo.VloWebAppParameters.*;
     23import eu.clarin.cmdi.vlo.config.VloConfig;
    2224import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2325import eu.clarin.cmdi.vlo.pojo.FacetSelectionType;
    2426import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     27import eu.clarin.cmdi.vlo.service.FacetParameterMapper;
    2528import eu.clarin.cmdi.vlo.service.PageParametersConverter;
    2629import java.util.Arrays;
     
    2831import java.util.List;
    2932import java.util.Map.Entry;
     33import java.util.Set;
     34import org.apache.wicket.Session;
    3035import org.apache.wicket.request.mapper.parameter.PageParameters;
    3136import org.apache.wicket.util.string.StringValue;
     
    4853    public final static Splitter FILTER_SPLITTER = Splitter.on(":").limit(2);
    4954
     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
    5079    @Override
    5180    public QueryFacetsSelection fromParameters(PageParameters params) {
     
    6190                final List<String> fqType = FILTER_SPLITTER.splitToList(selectionType.toString());
    6291                if (fqType.size() == 2) {
    63                     final String facet = fqType.get(0);
     92                    final String facet = facetParamMapper.getFacet(fqType.get(0));
    6493                    final String type = fqType.get(1).toUpperCase();
    6594
    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                        }
    71102                    }
    72103                } else {
     
    82113                if (fq.size() == 2) {
    83114                    // 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                        }
    88124                    } 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                        }
    90131                    }
    91132                } else {
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/model/SolrFieldStringModel.java

    r4996 r6029  
    1717package eu.clarin.cmdi.vlo.wicket.model;
    1818
     19import eu.clarin.cmdi.vlo.FacetConstants;
    1920import java.util.Collection;
    2021import java.util.Iterator;
     
    2526/**
    2627 * 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  * latter into a single string)
     28 * model, both for singular values and multiple values (imploding the latter
     29 * into a single string)
    2930 *
    3031 * @author twagoo
     
    3334
    3435    private final IModel<Collection<Object>> fieldModel;
     36    private final String field;
    3537
    3638    /**
     
    4244     */
    4345    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;
    5348    }
    5449
     
    6560        final Iterator<Object> iterator = fieldValues.iterator();
    6661        if (iterator.hasNext()) {
    67             final String firstValue = iterator.next().toString();
     62            final String firstValue = postprocessValue(iterator.next().toString());
    6863            if (iterator.hasNext()) {
    6964                return getMultipleValuesString(firstValue, iterator);
     
    9388    }
    9489
     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
    95100}
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/BreadCrumbPanel.java

    r5224 r6029  
    2424import eu.clarin.cmdi.vlo.wicket.pages.FacetedSearchPage;
    2525import eu.clarin.cmdi.vlo.wicket.provider.FacetSelectionProvider;
     26import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider;
    2627import java.util.Collection;
    2728import java.util.Iterator;
     
    5253 */
    5354public class BreadCrumbPanel extends GenericPanel<QueryFacetsSelection> {
    54 
     55   
    5556    @SpringBean(name = "queryParametersConverter")
    5657    private PageParametersConverter<QueryFacetsSelection> paramsConverter;
    57 
     58    @SpringBean
     59    private FieldValueConverterProvider fieldValueConverterProvider;
     60   
    5861    private final WebMarkupContainer query;
    5962    private final WebMarkupContainer facets;
    60 
     63   
    6164    public BreadCrumbPanel(String id, IModel<QueryFacetsSelection> model) {
    6265        super(id, model);
     
    6568        add(facets = createFacets(model, "facets"));
    6669    }
    67 
     70   
    6871    private WebMarkupContainer createQuery(final IModel<QueryFacetsSelection> selectionModel, String id) {
    6972        final WebMarkupContainer queryContainer = new WebMarkupContainer(id);
    7073        final Link link = new AjaxFallbackLink("leavequery") {
    71 
     74           
    7275            @Override
    7376            public void onClick(AjaxRequestTarget target) {
     
    8184        return queryContainer;
    8285    }
    83 
     86   
    8487    private WebMarkupContainer createFacets(final IModel<QueryFacetsSelection> model, String id) {
    8588        final WebMarkupContainer facetsContainer = new WebMarkupContainer(id);
    8689        facetsContainer.add(new AjaxFallbackLink("leaveselection") {
    87 
     90           
    8891            @Override
    8992            public void onClick(AjaxRequestTarget target) {
     
    9598        final FacetSelectionProvider facetSelectionProvider = new FacetSelectionProvider(model);
    9699        facetsContainer.add(new DataView<Map.Entry<String, FacetSelection>>("facet", facetSelectionProvider) {
    97 
     100           
    98101            @Override
    99102            protected void populateItem(final Item<Map.Entry<String, FacetSelection>> item) {
     
    101104                // add a label for the selected facet value(s)
    102105                final Label valueLabel = new Label("value", new PropertyModel(selectionModel, "value")) {
    103 
     106                   
    104107                    @Override
    105108                    public <C> IConverter<C> getConverter(Class<C> type) {
     109                        final String facet = item.getModelObject().getKey();
    106110                        // 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));
    108112                    }
    109 
     113                   
    110114                };
    111115                // add facet name as title attribute so that it becomes available through a tooltip
     
    116120                // add a link for removal of the facet value selection
    117121                item.add(new AjaxFallbackLink("removal") {
    118 
     122                   
    119123                    @Override
    120124                    public void onClick(AjaxRequestTarget target) {
     
    129133            }
    130134        });
    131 
     135       
    132136        return facetsContainer;
    133137    }
     
    144148        setResponsePage(FacetedSearchPage.class, paramsConverter.toParameters(selection));
    145149    }
    146 
     150   
    147151    @Override
    148152    protected void onConfigure() {
    149153        super.onConfigure();
    150 
     154       
    151155        final String queryString = getModelObject().getQuery();
    152156        final Map<String, FacetSelection> selection = getModelObject().getSelection();
    153 
     157       
    154158        query.setVisible(queryString != null && !queryString.isEmpty());
    155159        facets.setVisible(selection != null && !selection.isEmpty());
     
    161165     */
    162166    private class SelectionConverter implements IConverter<FacetSelection> {
    163 
     167       
    164168        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) {
    167172            this.facet = facet;
    168         }
    169 
     173            this.valueConverter = valueConverter;
     174        }
     175       
    170176        @Override
    171177        public FacetSelection convertToObject(String value, Locale locale) throws ConversionException {
    172178            throw new UnsupportedOperationException("Not supported yet.");
    173179        }
    174 
     180       
    175181        @Override
    176182        public String convertToString(FacetSelection selection, Locale locale) {
    177183            switch (selection.getSelectionType()) {
    178184                case AND:
    179                     return getCollectionString(selection, " and ");
     185                    return getCollectionString(selection, " and ", locale);
    180186                case OR:
    181                     return getCollectionString(selection, " or ");
     187                    return getCollectionString(selection, " or ", locale);
    182188                case NOT:
    183                     return "not [" + getCollectionString(selection, " or ") + "]";
     189                    return "not [" + getCollectionString(selection, " or ", locale) + "]";
    184190                case NOT_EMPTY:
    185191                    return getAnyValueString();
     
    187193                    return facet;
    188194            }
    189 
    190         }
    191 
     195           
     196        }
     197       
    192198        private String getAnyValueString() {
    193199            if (FacetConstants.FIELD_SEARCH_SERVICE.equals(facet)) {
     
    196202            return "any " + facet;
    197203        }
    198 
    199         public String getCollectionString(FacetSelection selection, String valueSeparator) {
     204       
     205        public String getCollectionString(FacetSelection selection, String valueSeparator, Locale locale) {
    200206            final Collection<String> value = selection.getValues();
    201207            //TODO: include selection type
     
    203209                return "";
    204210            } else if (value.size() == 1) {
    205                 return value.iterator().next();
     211                return getConvertedValue(value.iterator().next(), locale);
    206212            } else {
    207213                final Iterator<String> iterator = value.iterator();
    208                 final StringBuilder sb = new StringBuilder(iterator.next());
     214                final StringBuilder sb = new StringBuilder(getConvertedValue(iterator.next(), locale));
    209215                while (iterator.hasNext()) {
    210                     sb.append(valueSeparator).append(iterator.next());
     216                    sb.append(valueSeparator).append(getConvertedValue(iterator.next(), locale));
    211217                }
    212218                return sb.toString();
    213219            }
    214220        }
    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       
    216232    };
    217233}
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/record/FieldsTablePanel.java

    r5268 r6029  
    1717package eu.clarin.cmdi.vlo.wicket.panels.record;
    1818
     19import eu.clarin.cmdi.vlo.wicket.components.LanguageInfoLink;
    1920import com.google.common.collect.ImmutableSet;
    2021import eu.clarin.cmdi.vlo.FacetConstants;
     
    2425import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
    2526import eu.clarin.cmdi.vlo.service.PageParametersConverter;
     27import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
     28import eu.clarin.cmdi.vlo.wicket.model.DescriptionFieldModel;
    2629import eu.clarin.cmdi.vlo.wicket.model.HandleLinkModel;
    2730import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
     
    3134import java.util.List;
    3235import org.apache.wicket.AttributeModifier;
     36import org.apache.wicket.Component;
    3337import org.apache.wicket.extensions.markup.html.basic.SmartLinkLabel;
    3438import org.apache.wicket.extensions.markup.html.basic.SmartLinkMultiLineLabel;
     
    5761     */
    5862    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);
    6264
    6365    /**
     
    116118    }
    117119
    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) {
    119121        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)) {
    121129            // create label that generates links
    122130            return new SmartLinkLabel(id, new HandleLinkModel(valueModel));
    123131        } else {
    124132            // 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
    126135            // some selected fields may have HTML that needs to be preserved...
    127136            fieldLabel.setEscapeModelStrings(!UNESCAPED_VALUE_FIELDS.contains(fieldName));
     
    155164    }
    156165
     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
    157174}
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/AllFacetValuesPanel.java

    r5136 r6029  
    2222import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder;
    2323import eu.clarin.cmdi.vlo.wicket.components.AjaxIndicatingForm;
     24import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
    2425import eu.clarin.cmdi.vlo.wicket.components.FieldValueOrderSelector;
    2526import eu.clarin.cmdi.vlo.wicket.model.BridgeModel;
    2627import eu.clarin.cmdi.vlo.wicket.model.BridgeOuterModel;
    2728import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider;
     29import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider;
    2830import java.util.Collections;
    2931import org.apache.solr.client.solrj.response.FacetField;
     
    4850import org.apache.wicket.model.Model;
    4951import org.apache.wicket.model.PropertyModel;
     52import org.apache.wicket.spring.injection.annot.SpringBean;
    5053
    5154/**
     
    5861 */
    5962public abstract class AllFacetValuesPanel extends GenericPanel<FacetField> {
     63
     64    @SpringBean
     65    private FieldValueConverterProvider fieldValueConverterProvider;
    6066
    6167    private final FacetFieldValuesProvider valuesProvider;
     
    8894
    8995        // 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) {
    9197
    9298            @Override
     
    123129
    124130    private DataView<FacetField.Count> createValuesView(String id) {
     131        final IModel<String> fieldNameModel = new PropertyModel<String>(getModel(), "name");
    125132        return new DataView<FacetField.Count>(id, valuesProvider, ITEMS_PER_PAGE) {
    126133
     
    145152
    146153                // 'name' field from Count (name of value)
    147                 selectLink.add(new Label("name"));
     154                selectLink.add(new FieldValueLabel("name", fieldNameModel));
    148155
    149156                // 'count' field from Count (document count for value)
     
    224231    }
    225232
    226 
    227233    private class UpdateOptionsFormBehavior extends OnChangeAjaxBehavior {
    228234
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/java/eu/clarin/cmdi/vlo/wicket/panels/search/FacetValuesPanel.java

    r5177 r6029  
    2323import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder;
    2424import eu.clarin.cmdi.vlo.pojo.QueryFacetsSelection;
     25import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
    2526import eu.clarin.cmdi.vlo.wicket.provider.PartitionedDataProvider;
    2627import eu.clarin.cmdi.vlo.wicket.model.SolrFieldNameModel;
    2728import eu.clarin.cmdi.vlo.wicket.pages.AllFacetValuesPage;
    2829import eu.clarin.cmdi.vlo.wicket.provider.FacetFieldValuesProvider;
     30import eu.clarin.cmdi.vlo.wicket.provider.FieldValueConverterProvider;
    2931import java.util.Collection;
    3032import java.util.Collections;
     
    5355import org.apache.wicket.model.PropertyModel;
    5456import org.apache.wicket.request.cycle.RequestCycle;
     57import org.apache.wicket.spring.injection.annot.SpringBean;
    5558
    5659/**
     
    6972    private final IModel<FieldValuesFilter> filterModel;
    7073    private final int subListSize;
    71 
     74    private final IModel<String> fieldNameModel;
     75
     76    @SpringBean
     77    private FieldValueConverterProvider fieldValueConverterProvider;
    7278    /**
    7379     * Creates a new panel with selectable values for a single facet
     
    114120        valuesWindow = createAllValuesWindow("allValues");
    115121        add(valuesWindow);
     122
     123        fieldNameModel = new PropertyModel<>(model, "name");
    116124    }
    117125
     
    146154     */
    147155    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){
    149157
    150158            @Override
     
    203211
    204212        // 'name' field from Count (name of value)
    205         selectLink.add(new Label("name"));
     213        selectLink.add(new FieldValueLabel("name", fieldNameModel));
    206214        // 'count' field from Count (document count for value)
    207215        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  
    1818
    1919import eu.clarin.cmdi.vlo.pojo.FacetFieldSelection;
     20import eu.clarin.cmdi.vlo.wicket.components.FieldValueLabel;
    2021import java.util.Collection;
    2122import java.util.Collections;
     
    2324import org.apache.wicket.ajax.AjaxRequestTarget;
    2425import org.apache.wicket.extensions.ajax.markup.html.IndicatingAjaxFallbackLink;
    25 import org.apache.wicket.markup.html.basic.Label;
    2626import org.apache.wicket.markup.html.list.ListItem;
    2727import org.apache.wicket.markup.html.list.ListView;
     
    5050        // Model of the list of selected values in this facet
    5151        final PropertyModel<List<String>> propertyModel = new PropertyModel<List<String>>(getModel(), "facetValues");
     52        final PropertyModel<String> fieldNameModel = new PropertyModel(getModel(), "facetField.name");
    5253        // Repeating container of value + unselection links
    5354        final ListView<String> listView = new ListView<String>(id, propertyModel) {
     
    6162            protected void populateItem(final ListItem<String> item) {
    6263                // 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));
    6465                // A link to remove the value selection from this facet
    6566                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  
    2424import eu.clarin.cmdi.vlo.pojo.FieldValuesFilter;
    2525import eu.clarin.cmdi.vlo.pojo.FieldValuesOrder;
     26import eu.clarin.cmdi.vlo.wicket.CachingConverter;
    2627import java.io.Serializable;
    2728import java.text.Collator;
     
    3839import org.apache.wicket.model.IModel;
    3940import org.apache.wicket.model.Model;
     41import org.apache.wicket.util.convert.IConverter;
    4042import org.slf4j.Logger;
    4143import org.slf4j.LoggerFactory;
     
    4951 */
    5052public class FacetFieldValuesProvider extends SortableDataProvider<FacetField.Count, FieldValuesOrder> implements ListProvider<FacetField.Count> {
    51 
     53   
    5254    private final static Logger logger = LoggerFactory.getLogger(FacetFieldValuesProvider.class);
    5355    private final IModel<FacetField> model;
    5456    private final int maxNumberOfItems;
    5557    private final Collection<String> lowPriorityValues;
     58    private final FieldValueConverterProvider fieldValueConverterProvider;
    5659
    5760    /**
     
    7174     * @param lowPriorityValues values that should with low priority (e.g.
    7275     * 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);
    7680    }
    7781
     
    8185     * @param max maximum number of values to show
    8286     * @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);
    9095    }
    9196
     
    97102     * @param lowPriorityValues (e.g. unknown, unspecified)
    98103     * @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) {
    101107        this.model = model;
    102108        this.maxNumberOfItems = max;
    103109        this.lowPriorityValues = lowPriorityValues;
     110        this.fieldValueConverterProvider = fieldValueConverterProvider;
    104111        setSort(sort);
    105112    }
     
    113120        return null;
    114121    }
    115 
     122   
    116123    @Override
    117124    public Iterator<? extends FacetField.Count> iterator(long first, long count) {
     
    119126        return getList().listIterator((int) first);
    120127    }
    121 
     128   
    122129    @Override
    123130    public List<? extends FacetField.Count> getList() {
     
    132139        }
    133140    }
    134 
     141   
    135142    @Override
    136143    public long size() {
     
    140147        return size;
    141148    }
    142 
     149   
    143150    @Override
    144151    public IModel<FacetField.Count> model(FacetField.Count object) {
     
    161168        }
    162169    }
    163 
     170   
    164171    private Iterable<Count> getFilteredValues() {
    165172        if (filtered == null) {
     
    170177        return filtered;
    171178    }
    172 
     179   
    173180    private long getSize() {
    174181        if (hasFilter()) {
     
    182189        }
    183190    }
    184 
     191   
    185192    private boolean hasFilter() {
    186193        return getFilterModel() != null && getFilterModel().getObject() != null && !getFilterModel().getObject().isEmpty();
     
    200207        }
    201208    }
    202 
     209   
    203210    private Ordering getBaseOrdering() {
    204211        final Ordering ordering;
     
    206213            ordering = new CountOrdering();
    207214        } else if (getSort().getProperty() == FieldValuesOrder.NAME) {
    208             ordering = new NameOrdering(getLocale());
     215            ordering = new NameOrdering(getLocale(), fieldValueConverterProvider.getConverter(model.getObject().getName()));
    209216        } else {
    210217            ordering = Ordering.natural();
    211218        }
    212 
     219       
    213220        if (getSort().isAscending()) {
    214221            return ordering;
     
    217224        }
    218225    }
    219 
     226   
    220227    protected Locale getLocale() {
    221228        try {
     
    229236        return Locale.getDefault();
    230237    }
    231 
     238   
    232239    private final static class CountOrdering extends Ordering<FacetField.Count> {
    233 
     240       
    234241        @Override
    235242        public int compare(Count arg0, Count arg1) {
     
    237244        }
    238245    };
    239 
     246   
    240247    private final static class NameOrdering extends Ordering<FacetField.Count> implements Serializable {
    241 
     248       
    242249        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) {
    245254            collator = Collator.getInstance(locale);
    246255            collator.setStrength(Collator.PRIMARY);
    247         }
    248 
     256            this.converter = new CachingConverter(converter);
     257            this.locale = locale;
     258        }
     259       
    249260        @Override
    250261        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            }
    252269        }
    253270    };
     
    258275     */
    259276    private static class PriorityOrdering extends Ordering<FacetField.Count> {
    260 
     277       
    261278        private final Collection<String> lowPriorityValues;
    262 
     279       
    263280        public PriorityOrdering(Collection<String> lowPriorityValues) {
    264281            this.lowPriorityValues = lowPriorityValues;
    265282        }
    266 
     283       
    267284        @Override
    268285        public int compare(Count arg0, Count arg1) {
    269 
     286           
    270287            if (lowPriorityValues.contains(arg0.getName())) {
    271288                if (!lowPriorityValues.contains(arg1.getName())) {
     
    281298            return 0;
    282299        }
    283 
     300       
    284301    };
    285 
     302   
    286303    @Override
    287304    public void detach() {
  • vlo/branches/vlo-3.1/vlo-web-app/src/main/resources/fieldNames.properties

    r5093 r6029  
    1717field.collection=Collection
    1818field.name=Name
    19 field.language=Language
    20 field.languages=Language
     19field.languageCode=Language
    2120field.genre=Genre
    2221field.description=Description
  • vlo/branches/vlo-3.1/vlo-web-app/src/test/java/eu/clarin/cmdi/vlo/service/impl/QueryFacetsSelectionParametersConverterTest.java

    r4999 r6029  
    1717package eu.clarin.cmdi.vlo.service.impl;
    1818
     19import com.google.common.collect.ImmutableList;
    1920import com.google.common.collect.Maps;
     21import static eu.clarin.cmdi.vlo.FacetConstants.FIELD_COLLECTION;
     22import static eu.clarin.cmdi.vlo.FacetConstants.FIELD_COUNTRY;
     23import eu.clarin.cmdi.vlo.config.VloConfig;
    2024import eu.clarin.cmdi.vlo.pojo.FacetSelection;
    2125import eu.clarin.cmdi.vlo.pojo.FacetSelectionType;
     
    4448    @Before
    4549    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);
    4759    }
    4860
     
    6072        params.add("fq", "facet2:value:C"); // has a colon in value
    6173        params.add("fq", "illegal-no-colon"); //should get ignored
     74        params.add("fq", "facet5:valueD"); //not in list, should get ignored
    6275        params.add("fq", ""); // not a valid facet selection
    6376        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  
    2323import java.util.Iterator;
    2424import java.util.Locale;
    25 import java.util.Locale;
    2625import org.apache.solr.client.solrj.response.FacetField;
    2726import org.apache.wicket.extensions.markup.html.repeater.util.SortParam;
    2827import org.apache.wicket.model.IModel;
    2928import org.apache.wicket.model.Model;
     29import org.apache.wicket.util.convert.ConversionException;
     30import org.apache.wicket.util.convert.converter.AbstractConverter;
     31import org.jmock.Expectations;
     32import org.jmock.Mockery;
     33import org.jmock.integration.junit4.JUnit4Mockery;
     34import org.junit.Assert;
    3035import static org.junit.Assert.*;
    3136import org.junit.Before;
     
    4045    public final static Collection<String> LOW_PRIORITY_VALUES = ImmutableSet.of("Xlow priority");
    4146
     47    private final Mockery context = new JUnit4Mockery();
    4248    private FacetField facetField;
     49    private FieldValueConverterProvider valueConverterProvider;
    4350
    4451    @Before
     
    5057        facetField.add("third value", 103);
    5158        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        });
    5279    }
    5380
     
    5784    @Test
    5885    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);
    6087
    6188        long first = 0;
     
    93120    @Test
    94121    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);
    96123
    97124        long first = 0;
     
    129156    @Test
    130157    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);
    132159
    133160        long first = 0;
     
    164191    @Test
    165192    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);
    167194
    168195        final long first = 0;
     
    206233        facetField.add("één nederlandse waarde", 1);
    207234
    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) {
    209236
    210237            @Override
     
    246273    @Test
    247274    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);
    249276
    250277        final long first = 2;
     
    265292        // potential is lower than limit
    266293        {
    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);
    268295            // actual number is returned
    269296            assertEquals(5, instance.size());
     
    271298        // potential is higher than limit
    272299        {
    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);
    274301            // maximum number is returned (result is capped)
    275302            assertEquals(2, instance.size());
     
    285312        filterModel.getObject().setName("th");
    286313
    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) {
    288315
    289316            @Override
     
    308335
    309336        assertFalse(result.hasNext());
    310        
     337
    311338        instance.detach();
    312339        // add minimal occurences condition to filter
Note: See TracChangeset for help on using the changeset viewer.