Changeset 6310


Ignore:
Timestamp:
06/19/15 13:03:55 (9 years ago)
Author:
Twan Goosen
Message:

some refactoring of the matchPattern method for readability and code reusability

File:
1 edited

Legend:

Unmodified
Added
Removed
  • vlo/trunk/vlo-importer/src/main/java/eu/clarin/cmdi/vlo/importer/CMDIParserVTDXML.java

    r6214 r6310  
    211211                cmdiData.addResource(ref, type, mimeType);
    212212            }
    213            
     213
    214214            // resource hierarchy information?
    215             if(type.toLowerCase().equals("metadata")) {
     215            if (type.toLowerCase().equals("metadata")) {
    216216                ResourceStructureGraph.addEdge(ref, mdSelfLinkString);
    217217            }
     
    265265     */
    266266    private boolean matchPattern(CMDIData cmdiData, VTDNav nav, FacetConfiguration config, String pattern, Boolean allowMultipleValues) throws VTDException {
    267         boolean matchedPattern = false;
    268         AutoPilot ap = new AutoPilot(nav);
     267        final AutoPilot ap = new AutoPilot(nav);
    269268        setNameSpace(ap);
    270269        ap.selectXPath(pattern);
     270       
     271        boolean matchedPattern = false;
    271272        int index = ap.evalXPath();
    272273        while (index != -1) {
     
    276277                index++;
    277278            }
    278             String value = nav.toString(index);
    279 
    280             // extract language code in xml:lang if available
    281             Integer langAttrIndex = nav.getAttrVal("xml:lang");
    282             String languageCode = DEFAULT_LANGUAGE;
    283             if (langAttrIndex != -1) {
    284                 languageCode = nav.toString(langAttrIndex).trim();
    285             }
    286             // replace 2-letter with 3-letter codes
    287             if (MetadataImporter.languageCodeUtils.getSilToIso639Map().containsKey(languageCode)) {
    288                 languageCode = MetadataImporter.languageCodeUtils.getSilToIso639Map().get(languageCode);
    289             }
     279            final String value = nav.toString(index);
     280
     281            final String languageCode = extractLanguageCode(nav);
    290282
    291283            // ignore non-English language names for facet LANGUAGE_CODE
     
    295287            }
    296288
    297             List<String> valueList = postProcess(config.getName(), value);
    298             for (int i = 0; i < valueList.size(); i++) {
    299                 if (!allowMultipleValues && i > 0) {
    300                     break;
    301                 }
    302                 String fieldValue = valueList.get(i).trim();
    303                 if (config.getName().equals(FacetConstants.FIELD_DESCRIPTION)) {
    304                     fieldValue = "{lang='" + languageCode + "'}" + fieldValue;
    305                 }
    306                 cmdiData.addDocField(config.getName(), fieldValue, config.isCaseInsensitive());
    307             }
     289            final List<String> valueList = postProcess(config.getName(), value);
     290            insertFacetValues(config.getName(), valueList, cmdiData, languageCode, allowMultipleValues, config.isCaseInsensitive());
    308291            index = ap.evalXPath();
    309292
     
    313296        }
    314297        return matchedPattern;
     298    }
     299
     300    private String extractLanguageCode(VTDNav nav) throws NavException {
     301        // extract language code in xml:lang if available
     302        Integer langAttrIndex = nav.getAttrVal("xml:lang");
     303        String languageCode = DEFAULT_LANGUAGE;
     304        if (langAttrIndex != -1) {
     305            languageCode = nav.toString(langAttrIndex).trim();
     306        }
     307        // replace 2-letter with 3-letter codes
     308        if (MetadataImporter.languageCodeUtils.getSilToIso639Map().containsKey(languageCode)) {
     309            languageCode = MetadataImporter.languageCodeUtils.getSilToIso639Map().get(languageCode);
     310        }
     311        return languageCode;
     312    }
     313
     314    private void insertFacetValues(String name, List<String> valueList, CMDIData cmdiData, String languageCode, boolean allowMultipleValues, boolean caseInsensitive) {
     315        for (int i = 0; i < valueList.size(); i++) {
     316            if (!allowMultipleValues && i > 0) {
     317                break;
     318            }
     319            String fieldValue = valueList.get(i).trim();
     320            if (name.equals(FacetConstants.FIELD_DESCRIPTION)) {
     321                fieldValue = "{lang='" + languageCode + "'}" + fieldValue;
     322            }
     323            cmdiData.addDocField(name, fieldValue, caseInsensitive);
     324        }
    315325    }
    316326
Note: See TracChangeset for help on using the changeset viewer.