ref #9354: improve sorting in distribution editor
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / view / checklist / e4 / TaxonDistributionDtoComparator.java
1 /**
2 * Copyright (C) 2018 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.taxeditor.editor.view.checklist.e4;
10
11 import java.util.Comparator;
12
13 import eu.etaxonomy.cdm.api.service.dto.TaxonDistributionDTO;
14 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDto;
15 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDtoByNameComparator;
16 import eu.etaxonomy.cdm.persistence.dto.TaxonNodeDtoByRankAndNameComparator;
17
18 /**
19 * @author k.luther
20 * @since 28.11.2018
21 */
22 public class TaxonDistributionDtoComparator implements Comparator<TaxonDistributionDTO> {
23
24 Comparator<TaxonNodeDto> comparator1 = new TaxonNodeDtoByRankAndNameComparator();
25 Comparator<TaxonNodeDto> comparator2 = new TaxonNodeDtoByNameComparator();
26
27 public TaxonDistributionDtoComparator(){
28 super();
29 }
30
31 @Override
32 public int compare(TaxonDistributionDTO taxonDistr0, TaxonDistributionDTO taxonDistr1) {
33
34 //if parent is not the same sort by name
35 if ((taxonDistr0.getTaxonNodeDto() != null && taxonDistr1.getTaxonNodeDto() != null) && !taxonDistr0.getTaxonNodeDto().getParentUUID().equals(taxonDistr1.getTaxonNodeDto().getParentUUID()) ){
36 return comparator2.compare(taxonDistr0.getTaxonNodeDto(), taxonDistr1.getTaxonNodeDto());
37 }
38 // if parent is the same sort by rank and name
39 if (taxonDistr0.getTaxonNodeDto() != null && taxonDistr1.getTaxonNodeDto() != null && taxonDistr0.getTaxonNodeDto().getParentUUID().equals( taxonDistr1.getTaxonNodeDto().getParentUUID())){
40 return this.comparator1.compare(taxonDistr0.getTaxonNodeDto(), taxonDistr1.getTaxonNodeDto());
41 }else if (taxonDistr0 == taxonDistr1 || (taxonDistr0.getTaxonNodeDto() == null) && (taxonDistr1.getTaxonNodeDto() == null)){
42 return 0;
43 } else if (taxonDistr0.getTaxonNodeDto() != null && taxonDistr1.getTaxonNodeDto() == null){
44 return -1;
45 } else if (taxonDistr0.getTaxonNodeDto() == null && taxonDistr1.getTaxonNodeDto() != null){
46 return 1;
47 }else{
48 return taxonDistr0.getTaxonUuid().compareTo(taxonDistr1.getTaxonUuid());
49 }
50 }
51
52 }