Project

General

Profile

Download (2.3 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 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

    
10
package eu.etaxonomy.cdm.validation.constraint;
11

    
12
import javax.validation.ConstraintValidator;
13
import javax.validation.ConstraintValidatorContext;
14

    
15
import eu.etaxonomy.cdm.model.name.Rank;
16
import eu.etaxonomy.cdm.model.taxon.Taxon;
17
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
18
import eu.etaxonomy.cdm.validation.annotation.ChildTaxaMustNotSkipRanks;
19

    
20
public class ChildTaxaMustNotSkipRanksValidator implements
21
		ConstraintValidator<ChildTaxaMustNotSkipRanks, TaxonNode> {
22

    
23
	@Override
24
    public void initialize(ChildTaxaMustNotSkipRanks childTaxaMustNotSkipRanks) { }
25

    
26
	@Override
27
    public boolean isValid(TaxonNode taxonNode, ConstraintValidatorContext constraintContext) {
28
		boolean valid = true;
29

    
30
	    try{
31
	        Taxon parent = taxonNode.getParent() == null ? null : taxonNode.getParent().getTaxon();
32
	        Rank parentRank = parent == null ? null : parent.getNullSafeRank();
33
	        Rank childRank = taxonNode.getNullSafeRank();
34

    
35
    	    if (parent != null  && parent.getName() != null && childRank != null ) {
36
                if(parent.getName().isSupraGeneric() && childRank.isLower(Rank.GENUS())) {
37
        			valid = false;
38
        			constraintContext.buildConstraintViolationWithTemplate("{eu.etaxonomy.cdm.validation.annotation.ChildTaxaMustNotSkipRanks.cannotSkipGenus.message}").addNode("fromTaxon").addNode("name").addNode("rank").addConstraintViolation();
39
        		} else if(parentRank != null && parentRank.isHigher(Rank.SPECIES())
40
        		        && childRank.isLower(Rank.SPECIES())) {
41
        			valid = false;
42
        			constraintContext.buildConstraintViolationWithTemplate("{eu.etaxonomy.cdm.validation.annotation.ChildTaxaMustNotSkipRanks.cannotSkipSpecies.message}").addNode("fromTaxon").addNode("name").addNode("rank").addConstraintViolation();
43
        		}
44
                if (!valid){
45
                    constraintContext.disableDefaultConstraintViolation();
46
                }
47
            }
48
        } catch (Exception e) {
49
            throw new RuntimeException(e);
50
        }
51
		return valid;
52
	}
53
}
(4-4/20)