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/model/metadata/CdmMetaData.java
70 70
        V_05_22_00("5.22.0.0.20210315"),
71 71
        V_05_23_00("5.23.0.0.20210422"),
72 72
        V_05_25_00("5.25.0.0.20210609"),
73
        V_05_25_01("5.25.1.0.20210702")
73
        V_05_25_01("5.25.1.0.20210702"),
74
        V_05_27_00("5.25.1.0.20210913")
74 75
        ;
75 76
        private String versionString;
76 77
	    private CdmVersion(String versionString){
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/ICultivarPlantName.java
20 20
 * @since 26.01.2017
21 21
 */
22 22
public interface ICultivarPlantName extends IBotanicalName {
23

  
23 24
    /**
24 25
     * Returns the characteristical cultivar name part string assigned to <i>this</i>
25 26
     * cultivar taxon name. In the scientific name "Clematis alpina 'Ruby'" for
26 27
     * instance this characteristical string is "Ruby". This part of the name is
27 28
     * governed by the International Code for the Nomenclature of Cultivated
28
     * Plants and the string should include neither quotes nor + signs
29
     * Plants (ICNCP) and the string should include neither quotes nor + signs
29 30
     * (these elements of the name cache string will be generated by the
30
     * {@link eu.etaxonomy.cdm.strategy.cache.name.BotanicNameDefaultCacheStrategy default cache strategy}).
31
     * {@link eu.etaxonomy.cdm.strategy.cache.name.INonViralNameCacheStrategy cache strategy}).
31 32
     */
32 33
    public String getCultivarName();
33 34

  
......
35 36
     * @see  #getCultivarName()
36 37
     */
37 38
    public void setCultivarName(String cultivarName);
38
}
39

  
40
    //#9761
41
    /**
42
     * Returns the cultivar name part representing the cultivar group
43
     * and/or the grex (for orchids). It must include the markers indicating
44
     * grex or group (e.g. grex, gx, Group, Gp, Gruppe, Gruppo, etc.).
45
     * TODO brackets
46
     */
47
    public String getCultivarGroup();
48

  
49
    /**
50
     * @see  #getCultivarGroup()
51
     */
52
    public void setCultivarGroup(String cultivarGroup);
53
}
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/TaxonName.java
559 559
    @Column(length=255)
560 560
    private String cultivarName;
561 561

  
562
    //#9761
563
    @XmlElement(name = "CultivarName")
564
    @NullOrNotEmpty
565
    @Column(length=255)
566
    private String cultivarGroup;
567

  
562 568
    // ************** FUNGUS name attributes
563 569
    //to indicate that the type of the name is asexual or not
564 570
    @XmlElement(name ="IsAnamorphic")
......
1290 1296
        this.cultivarName = isBlank(cultivarName) ? null : cultivarName;
1291 1297
    }
1292 1298

  
1299
    @Override
1300
    public String getCultivarGroup(){
1301
        return this.cultivarGroup;
1302
    }
1303

  
1304
    /**
1305
     * @see  #getCultivarGroup()
1306
     */
1307
    @Override
1308
    public void setCultivarGroup(String cultivarGroup){
1309
        this.cultivarGroup = isBlank(cultivarGroup) ? null : cultivarGroup;
1310
    }
1311

  
1293 1312
    // **************** Fungus Name
1294 1313
    @Override
1295 1314
    public boolean isAnamorphic(){
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)){
cdmlib-model/src/main/java/eu/etaxonomy/cdm/strategy/parser/NonViralNameParserImpl.java
1553 1553

  
1554 1554
            if (isNotBlank(grexName)){
1555 1555
                nameToBeFilled.setRank(Rank.GREX());
1556
                nameToBeFilled.setCultivarName(grexName); //TODO
1556
                nameToBeFilled.setCultivarGroup(grexName);
1557 1557
            }
1558 1558
            if (isNotBlank(groupName) || isNotBlank(brGroupName)){
1559 1559
                nameToBeFilled.setRank(Rank.CULTIVARGROUP());
1560 1560
                if (isBlank(groupName)){
1561 1561
                    groupName = brGroupName;
1562 1562
                }
1563
                nameToBeFilled.setCultivarName(CdmUtils.concat(" ", grexName, groupName));  //TODO
1563
                nameToBeFilled.setCultivarGroup(CdmUtils.concat(" ", grexName, groupName));
1564 1564
            }
1565 1565
            if (isNotBlank(cultivarName)){
1566 1566
                nameToBeFilled.setRank(Rank.CULTIVAR());
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/cache/name/TaxonNameDefaultCacheStrategyTest.java
300 300

  
301 301
        //cultivar group
302 302
        speciesName.setRank(Rank.CULTIVARGROUP());
303
        Assert.assertEquals("Abies Group", strategy.getTitleCache(speciesName)); //not sure if this is correct for an empty group field
304
        speciesName.setCultivarGroup("Cultus Group");
303 305
        Assert.assertEquals("Abies Cultus Group", strategy.getTitleCache(speciesName));
304
        speciesName.setCultivarName("Cultus Group");
305 306

  
306
        speciesName.setRank(Rank.CULTIVARGROUP());
307
        speciesName.setCultivarName("Cultus Group");
308
        Assert.assertEquals("Abies Cultus Group", strategy.getTitleCache(speciesName));
309
        speciesName.setCultivarName("Cultus Gruppe");
307
        speciesName.setCultivarGroup("Cultus Gruppe");
310 308
        Assert.assertEquals("Abies Cultus Gruppe", strategy.getTitleCache(speciesName));
311
        speciesName.setCultivarName("Cultus Gp");
309
        speciesName.setCultivarGroup("Cultus Gp");
312 310
        Assert.assertEquals("Abies Cultus Gp", strategy.getTitleCache(speciesName));
313
        speciesName.setCultivarName("Gruppo Cultus");
311
        speciesName.setCultivarGroup("Gruppo Cultus");
314 312
        Assert.assertEquals("Abies Gruppo Cultus", strategy.getTitleCache(speciesName));
315
        speciesName.setCultivarName("Druppo Cultus");
313
        speciesName.setCultivarGroup("Druppo Cultus");
316 314
        Assert.assertEquals("Abies Druppo Cultus Group", strategy.getTitleCache(speciesName));
317 315

  
318 316
        //grex
319 317
        speciesName.setRank(Rank.GREX());
320
        speciesName.setCultivarName("Lovely");
318
        speciesName.setCultivarGroup("Lovely");
321 319
        Assert.assertEquals("Abies Lovely grex", strategy.getTitleCache(speciesName));
322 320

  
323 321
        //graft chimaera
......
328 326
        speciesName.setCultivarName("Adamii");
329 327

  
330 328
        Assert.assertEquals("+ Laburnocytisus 'Adamii'", strategy.getTitleCache(speciesName));
331

  
332

  
333 329
    }
334 330

  
335

  
336 331
    //3665
337 332
    @Test
338 333
    public void testOriginalSpelling() {
cdmlib-model/src/test/java/eu/etaxonomy/cdm/strategy/parser/NonViralNameParserImplTest.java
2397 2397
        name = (TaxonName)parser.parseFullName(group);
2398 2398
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2399 2399
        Assert.assertNull(name.getSpecificEpithet());
2400
        Assert.assertEquals("Albus Group", name.getCultivarName());  //TODO should be cultivar group field
2400
        Assert.assertEquals("Albus Group", name.getCultivarGroup());
2401 2401
        Assert.assertEquals("Abies Albus Group", name.getNameCache());
2402 2402
        Assert.assertEquals(Rank.uuidCultivarGroup, name.getRank().getUuid());
2403 2403

  
......
2405 2405
        name = (TaxonName)parser.parseFullName(group);
2406 2406
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2407 2407
        Assert.assertNull(name.getSpecificEpithet());
2408
        Assert.assertEquals("Albus Gp", name.getCultivarName());  //TODO should be cultivar group field
2408
        Assert.assertEquals("Albus Gp", name.getCultivarGroup());
2409 2409
        Assert.assertEquals("Abies Albus Gp", name.getNameCache());
2410 2410
        Assert.assertEquals(Rank.uuidCultivarGroup, name.getRank().getUuid());
2411 2411

  
......
2413 2413
        name = (TaxonName)parser.parseFullName(group);
2414 2414
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2415 2415
        Assert.assertNull(name.getSpecificEpithet());
2416
        Assert.assertEquals("Gruppo Albus", name.getCultivarName());  //TODO should be cultivar group field
2416
        Assert.assertEquals("Gruppo Albus", name.getCultivarGroup());
2417 2417
        Assert.assertEquals("Abies Gruppo Albus", name.getNameCache());
2418 2418
        Assert.assertEquals(Rank.uuidCultivarGroup, name.getRank().getUuid());
2419 2419

  
......
2422 2422
        name = (TaxonName)parser.parseFullName(grex);
2423 2423
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2424 2424
        Assert.assertNull(name.getSpecificEpithet());
2425
        Assert.assertEquals("Albus grex", name.getCultivarName());  //TODO should be cultivar group field
2425
        Assert.assertEquals("Albus grex", name.getCultivarGroup());
2426 2426
        Assert.assertEquals("Abies Albus grex", name.getNameCache());
2427 2427
        Assert.assertEquals(Rank.uuidGrex, name.getRank().getUuid());
2428 2428

  
......
2430 2430
        name = (TaxonName)parser.parseFullName(grex);
2431 2431
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2432 2432
        Assert.assertNull(name.getSpecificEpithet());
2433
        Assert.assertEquals("Albus Second grex", name.getCultivarName());  //TODO should be cultivar group field
2433
        Assert.assertEquals("Albus Second grex", name.getCultivarGroup());
2434 2434
        Assert.assertEquals("Abies Albus Second grex", name.getNameCache());
2435 2435
        Assert.assertEquals(Rank.uuidGrex, name.getRank().getUuid());
2436 2436

  
......
2439 2439
        name = (TaxonName)parser.parseFullName(combined);
2440 2440
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2441 2441
        Assert.assertNull(name.getSpecificEpithet());
2442
        Assert.assertEquals("Pretty", name.getCultivarName());  //TODO should be cultivar group field
2443
        Assert.assertEquals("Abies 'Pretty'", name.getNameCache());
2442
        Assert.assertEquals("Pretty", name.getCultivarName());
2443
        Assert.assertEquals("Albus Gruppo", name.getCultivarGroup());
2444
        Assert.assertEquals(combined, name.getNameCache());
2444 2445
        Assert.assertEquals(Rank.uuidCultivar, name.getRank().getUuid());
2445 2446

  
2446 2447
        combined = "Abies White grex (Albus Gruppo) 'Pretty'";
2447 2448
        name = (TaxonName)parser.parseFullName(combined);
2448 2449
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2449 2450
        Assert.assertNull(name.getSpecificEpithet());
2450
        Assert.assertEquals("Pretty", name.getCultivarName());  //TODO should be cultivar group field
2451
        Assert.assertEquals("Abies 'Pretty'", name.getNameCache());
2451
        Assert.assertEquals("Pretty", name.getCultivarName());
2452
        Assert.assertEquals("White grex Albus Gruppo", name.getCultivarGroup());
2453
        Assert.assertEquals(combined, name.getNameCache());
2452 2454
        Assert.assertEquals(Rank.uuidCultivar, name.getRank().getUuid());
2453 2455

  
2454 2456
        combined = "Abies White grex Albus Gruppo";
2455 2457
        name = (TaxonName)parser.parseFullName(combined);
2456 2458
        Assert.assertEquals("Abies", name.getGenusOrUninomial());
2457 2459
        Assert.assertNull(name.getSpecificEpithet());
2458
        Assert.assertEquals("White grex Albus Gruppo", name.getCultivarName());  //TODO should be cultivar group field
2460
        Assert.assertEquals("White grex Albus Gruppo", name.getCultivarGroup());
2459 2461
        Assert.assertEquals(combined, name.getNameCache());
2460 2462
        Assert.assertEquals(Rank.uuidCultivarGroup, name.getRank().getUuid());
2461 2463

  
......
2466 2468
        Assert.assertNull(name.getGenusOrUninomial());
2467 2469
        Assert.assertNull(name.getSpecificEpithet());
2468 2470
        Assert.assertNull(name.getCultivarName());
2471
        Assert.assertNull(name.getCultivarGroup());
2469 2472
        Assert.assertEquals(combined, name.getNameCache());
2470 2473
        Assert.assertNull(name.getRank());
2471 2474

  
......
2475 2478
        Assert.assertNull(name.getGenusOrUninomial());
2476 2479
        Assert.assertNull(name.getSpecificEpithet());
2477 2480
        Assert.assertNull(name.getCultivarName());
2481
        Assert.assertNull(name.getCultivarGroup());
2478 2482
        Assert.assertEquals(combined, name.getNameCache());
2479 2483
        Assert.assertNull(name.getRank());
2480 2484
    }
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/CdmUpdater.java
17 17
import eu.etaxonomy.cdm.common.monitor.IProgressMonitor;
18 18
import eu.etaxonomy.cdm.database.CdmDataSource;
19 19
import eu.etaxonomy.cdm.database.ICdmDataSource;
20
import eu.etaxonomy.cdm.database.update.v523_525.SchemaUpdater_5250_5251;
20
import eu.etaxonomy.cdm.database.update.v525_527.SchemaUpdater_5251_5270;
21 21
import eu.etaxonomy.cdm.model.metadata.CdmMetaData;
22 22

  
23 23
/**
......
66 66
    private static final Logger logger = Logger.getLogger(CdmUpdater.class);
67 67

  
68 68
    private static final ISchemaUpdater getCurrentSchemaUpdater() {
69
        return SchemaUpdater_5250_5251.NewInstance();
69
        return SchemaUpdater_5251_5270.NewInstance();
70 70
    }
71 71

  
72 72
    public static CdmUpdater NewInstance(){
cdmlib-persistence/src/main/java/eu/etaxonomy/cdm/database/update/v525_527/SchemaUpdater_5251_5270.java
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9
package eu.etaxonomy.cdm.database.update.v525_527;
10

  
11
import java.util.ArrayList;
12
import java.util.List;
13

  
14
import org.apache.log4j.Logger;
15

  
16
import eu.etaxonomy.cdm.database.update.ColumnAdder;
17
import eu.etaxonomy.cdm.database.update.ISchemaUpdater;
18
import eu.etaxonomy.cdm.database.update.ISchemaUpdaterStep;
19
import eu.etaxonomy.cdm.database.update.SchemaUpdaterBase;
20
import eu.etaxonomy.cdm.database.update.v523_525.SchemaUpdater_5250_5251;
21
import eu.etaxonomy.cdm.model.metadata.CdmMetaData.CdmVersion;
22

  
23
/**
24
 * @author a.mueller
25
 * @date 22.04.2021
26
 */
27
public class SchemaUpdater_5251_5270 extends SchemaUpdaterBase {
28

  
29
	@SuppressWarnings("unused")
30
	private static final Logger logger = Logger.getLogger(SchemaUpdater_5251_5270.class);
31

  
32
	private static final CdmVersion startSchemaVersion = CdmVersion.V_05_25_01;
33
	private static final CdmVersion endSchemaVersion = CdmVersion.V_05_27_00;
34

  
35
// ********************** FACTORY METHOD *************************************
36

  
37
	public static SchemaUpdater_5251_5270 NewInstance() {
38
		return new SchemaUpdater_5251_5270();
39
	}
40

  
41
	protected SchemaUpdater_5251_5270() {
42
		super(startSchemaVersion.versionString(), endSchemaVersion.versionString());
43
	}
44

  
45
    @Override
46
    public ISchemaUpdater getPreviousUpdater() {
47
        return SchemaUpdater_5250_5251.NewInstance();
48
    }
49

  
50
	@Override
51
	protected List<ISchemaUpdaterStep> getUpdaterList() {
52

  
53
		String stepName;
54
		String tableName;
55
		String newColumnName;
56

  
57
		List<ISchemaUpdaterStep> stepList = new ArrayList<>();
58

  
59
		//add cultivarGroup
60
		//#9761
61
		stepName = "Add cultivarGroup";
62
		tableName = "TaxonName";
63
		newColumnName = "cultivarGroup";
64
		ColumnAdder.NewStringInstance(stepList, stepName, tableName, newColumnName, INCLUDE_AUDIT);
65

  
66
		//TODO update where rank = CultivarGroup
67

  
68
        return stepList;
69
    }
70

  
71
}

Also available in: Unified diff