1 package org.cateproject.controller.taxon;
2
3 import java.util.Comparator;
4
5 import eu.etaxonomy.cdm.model.name.BotanicalName;
6 import eu.etaxonomy.cdm.model.name.TaxonNameBase;
7 import eu.etaxonomy.cdm.model.name.ZoologicalName;
8 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;
9 import eu.etaxonomy.cdm.model.reference.ReferenceBase;
10 import eu.etaxonomy.cdm.model.taxon.SynonymRelationship;
11
12 public class BotanicalSynonymComparator implements
13 Comparator<SynonymRelationship> {
14
15
16
17
18 public int compare(SynonymRelationship o1, SynonymRelationship o2) {
19 if(!o1.getSynonym().getName().getHomotypicalGroup().getUuid().equals(o2.getSynonym().getName().getHomotypicalGroup().getUuid())) {
20 Integer homotypicalGroupAge1 = 10000;
21 for(TaxonNameBase n : o1.getSynonym().getName().getHomotypicalGroup().getTypifiedNames()) {
22 n = TaxonNameBase.deproxy(n, TaxonNameBase.class);
23 if(n instanceof BotanicalName) {
24 INomenclaturalReference nomenclaturalReference = n.getNomenclaturalReference();
25 if(nomenclaturalReference != null && nomenclaturalReference.getDatePublished() != null && nomenclaturalReference.getDatePublished().getStartYear() != null) {
26 homotypicalGroupAge1 = n.getNomenclaturalReference().getDatePublished().getStartYear() < homotypicalGroupAge1 ? n.getNomenclaturalReference().getDatePublished().getStartYear() : homotypicalGroupAge1;
27 }
28 } else {
29 homotypicalGroupAge1 = ((ZoologicalName)n).getOriginalPublicationYear() < homotypicalGroupAge1 ? ((ZoologicalName)n).getOriginalPublicationYear() : homotypicalGroupAge1;
30 }
31 }
32
33 Integer homotypicalGroupAge2 = 10000;
34 for(TaxonNameBase n : o2.getSynonym().getName().getHomotypicalGroup().getTypifiedNames()) {
35 n = n.deproxy(n, TaxonNameBase.class);
36
37 if(n instanceof BotanicalName) {
38 INomenclaturalReference nomenclaturalReference = n.getNomenclaturalReference();
39 if(nomenclaturalReference != null && nomenclaturalReference.getDatePublished() != null && nomenclaturalReference.getDatePublished().getStartYear() != null) {
40 homotypicalGroupAge2 = n.getNomenclaturalReference().getDatePublished().getStartYear() < homotypicalGroupAge2 ? n.getNomenclaturalReference().getDatePublished().getStartYear() : homotypicalGroupAge2;
41 }
42 } else {
43 homotypicalGroupAge2 = ((ZoologicalName)n).getOriginalPublicationYear() < homotypicalGroupAge2 ? ((ZoologicalName)n).getOriginalPublicationYear() : homotypicalGroupAge2;
44 }
45
46 }
47 return homotypicalGroupAge1.compareTo(homotypicalGroupAge2);
48 } else {
49 TaxonNameBase n1 = TaxonNameBase.deproxy(o1.getSynonym().getName(),TaxonNameBase.class);
50 TaxonNameBase n2 = TaxonNameBase.deproxy(o2.getSynonym().getName(),TaxonNameBase.class);
51 Integer nameAge1 = 0;
52 Integer nameAge2 = 0;
53
54 if(n1 instanceof BotanicalName) {
55 INomenclaturalReference nomenclaturalReference = n1.getNomenclaturalReference();
56 if(nomenclaturalReference != null && nomenclaturalReference.getDatePublished() != null && nomenclaturalReference.getDatePublished().getStartYear() != null) {
57 nameAge1 = n1.getNomenclaturalReference().getDatePublished().getStartYear();
58 }
59 } else {
60 nameAge1 = ((ZoologicalName)n1).getOriginalPublicationYear();
61 }
62
63 if(n2 instanceof BotanicalName) {
64 INomenclaturalReference nomenclaturalReference = n2.getNomenclaturalReference();
65 if(nomenclaturalReference != null && nomenclaturalReference.getDatePublished() != null && nomenclaturalReference.getDatePublished().getStartYear() != null) {
66 nameAge2 = n2.getNomenclaturalReference().getDatePublished().getStartYear();
67 }
68 } else {
69 nameAge2 = ((ZoologicalName)n2).getOriginalPublicationYear();
70 }
71
72 return nameAge1.compareTo(nameAge2);
73 }
74 }
75
76 }