Project

General

Profile

« Previous | Next » 

Revision f7e576ba

Added by Andreas Müller over 2 years ago

ref #9761 add cultivarGroup column

View differences:

cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/cache/name/TaxonNameDefaultCacheStrategy.java
11 11
import java.util.ArrayList;
12 12
import java.util.List;
13 13
import java.util.UUID;
14
import java.util.regex.Matcher;
15
import java.util.regex.Pattern;
14 16

  
15 17
import org.apache.log4j.Logger;
16 18

  
......
377 379
        } else /*if (isNotBlank(taxonName.getGenusOrUninomial())) */{
378 380
            scientificNameTags = getGenusOrUninomialTaggedNameCache(taxonName);
379 381
        }
380
        String cultivarStr;
381
        if (taxonName.getRank().getUuid().equals(Rank.uuidCultivar)){
382

  
383
        UUID rankUuid = taxonName.getRank().getUuid();
384
        boolean rankIsHandled = true;
385
        String cultivarStr = null;
386
        String groupStr = taxonName.getCultivarGroup();
387
        if (rankUuid.equals(Rank.uuidCultivar)){
382 388
            cultivarStr = surroundedCultivarEpithet(taxonName);
389
            if (isNotBlank(cultivarStr) && isNotBlank(groupStr)){
390
                groupStr = surroundGroupWithBracket(groupStr);
391
            }
392
            cultivarStr = CdmUtils.concat(" ", groupStr, cultivarStr);
393
        }else if (rankUuid.equals(Rank.uuidCultivarGroup)){
394
            cultivarStr = CdmUtils.concat(" ", groupStr, checkHasGroupEpithet(groupStr)? null: "Group");
395
        }else if (rankUuid.equals(Rank.uuidGrex)){
396
            cultivarStr = CdmUtils.concat(" ", groupStr, checkHasGrexEpithet(groupStr)? null: "grex");
397
        }else{
398
            rankIsHandled = false;
399
        }
400
        if (isNotBlank(cultivarStr)){
383 401
            builder.addAll(scientificNameTags);
384 402
            builder.add(TagEnum.cultivar, cultivarStr);
385
        }else if (taxonName.getRank().getUuid().equals(Rank.uuidCultivarGroup)){
386
            //TODO check if Group exists in Name already
387
            cultivarStr = taxonName.getCultivarName() + (checkHasGroupEpithet(taxonName.getCultivarName())? "": " Group");
388
            builder.addAll(scientificNameTags);
389
            builder.add(TagEnum.cultivar, cultivarStr);
390
        }else if (taxonName.getRank().getUuid().equals(Rank.uuidGrex)){
391
            cultivarStr = taxonName.getCultivarName() + (checkHasGrexEpithet(taxonName.getCultivarName())? "": " grex");
392
            builder.addAll(scientificNameTags);
393
            builder.add(TagEnum.cultivar, cultivarStr);
394
        }else if (taxonName.getRank().getUuid().equals(Rank.uuidGraftChimaera)){
403
        }
404

  
405
        if (rankUuid.equals(Rank.uuidGraftChimaera)){
395 406
            //TODO not yet fully implemented
396 407
            cultivarStr = "+ " + taxonName.getGenusOrUninomial() + " " + surroundedCultivarEpithet(taxonName);
397 408
            builder.add(TagEnum.cultivar, cultivarStr);
398
        }else{
409
        } else if (!rankIsHandled){
399 410
            throw new IllegalStateException("Unsupported rank " + taxonName.getRank().getTitleCache() + " for cultivar.");
400 411
        }
401 412

  
402 413
        return builder.getTaggedText();
403 414
    }
404 415

  
405
    private boolean checkHasGroupEpithet(String cultivarName) {
406
        String[] splits = cultivarName.split("\\s+");
416
    private String surroundGroupWithBracket(String groupStr) {
417
        if (groupStr.matches(NonViralNameParserImplRegExBase.grex + "$")){
418
            return groupStr;
419
        }else if (groupStr.matches(".*" + NonViralNameParserImplRegExBase.grex + ".+")){
420
            Matcher matcher = Pattern.compile(NonViralNameParserImplRegExBase.grex + "\\s*" ).matcher(groupStr);
421
            matcher.find();
422
            return groupStr.substring(0, matcher.end()) + "("+ groupStr.substring(matcher.end())+ ")";
423
        }else{
424
            return "("+ groupStr + ")";
425
        }
426
    }
427

  
428
    private boolean checkHasGroupEpithet(String group) {
429

  
430
        String[] splits = group == null? new String[0]: group.split("\\s+");
407 431
        if (splits.length <= 1){
408 432
            return false;
409 433
        }else if (splits[0].matches(NonViralNameParserImplRegExBase.group)
......
414 438
        }
415 439
    }
416 440

  
417
    private boolean checkHasGrexEpithet(String cultivarName) {
418
        String[] splits = cultivarName.split("\\s+");
441
    private boolean checkHasGrexEpithet(String grex) {
442
        String[] splits = grex == null? new String[0]: grex.split("\\s+");
419 443
        if (splits.length <= 1){
420 444
            return false;
421 445
        }else if (splits[splits.length-1].matches(NonViralNameParserImplRegExBase.grex)){

Also available in: Unified diff