Revision 9dc896c9
Added by Andreas Müller almost 7 years ago
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/specimen/SpecimenImportBase.java | ||
---|---|---|
50 | 50 |
import eu.etaxonomy.cdm.model.name.Rank; |
51 | 51 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignation; |
52 | 52 |
import eu.etaxonomy.cdm.model.name.SpecimenTypeDesignationStatus; |
53 |
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
|
|
53 |
import eu.etaxonomy.cdm.model.name.TaxonName; |
|
54 | 54 |
import eu.etaxonomy.cdm.model.name.TaxonNameFactory; |
55 | 55 |
import eu.etaxonomy.cdm.model.occurrence.Collection; |
56 | 56 |
import eu.etaxonomy.cdm.model.occurrence.DerivedUnit; |
... | ... | |
97 | 97 |
|
98 | 98 |
|
99 | 99 |
|
100 |
protected TaxonNameBase<?, ?> getOrCreateTaxonName(String scientificName, Rank rank, boolean preferredFlag, STATE state, int unitIndexInAbcdFile){
|
|
101 |
TaxonNameBase<?, ?> taxonName = null;
|
|
100 |
protected TaxonName getOrCreateTaxonName(String scientificName, Rank rank, boolean preferredFlag, STATE state, int unitIndexInAbcdFile){ |
|
101 |
TaxonName taxonName = null; |
|
102 | 102 |
SpecimenImportConfiguratorBase<?,?,?> config = state.getConfig(); |
103 | 103 |
|
104 | 104 |
//check atomised name data for rank |
... | ... | |
121 | 121 |
if(config.isIgnoreAuthorship() && parsedName!=null){// && preferredFlag){ |
122 | 122 |
// do not ignore authorship for non-preferred names because they need |
123 | 123 |
// to be created for the determination history |
124 |
String nameCache = TaxonNameBase.castAndDeproxy(parsedName).getNameCache();
|
|
125 |
List<TaxonNameBase> names = getNameService().findNamesByNameCache(nameCache, MatchMode.EXACT, null);
|
|
124 |
String nameCache = TaxonName.castAndDeproxy(parsedName).getNameCache(); |
|
125 |
List<TaxonName> names = getNameService().findNamesByNameCache(nameCache, MatchMode.EXACT, null); |
|
126 | 126 |
if (!names.isEmpty()){ |
127 |
taxonName = getBestMatchingName(scientificName, new ArrayList<TaxonNameBase>(names), state);
|
|
127 |
taxonName = getBestMatchingName(scientificName, new ArrayList<>(names), state); |
|
128 | 128 |
} |
129 | 129 |
if (taxonName == null && !names.isEmpty()){ |
130 | 130 |
taxonName = names.get(0); |
... | ... | |
132 | 132 |
|
133 | 133 |
} else { |
134 | 134 |
//search for existing names |
135 |
List<TaxonNameBase> names = getNameService().listByTitle(TaxonNameBase.class, scientificName, MatchMode.EXACT, null, null, null, null, null);
|
|
135 |
List<TaxonName> names = getNameService().listByTitle(TaxonName.class, scientificName, MatchMode.EXACT, null, null, null, null, null);
|
|
136 | 136 |
taxonName = getBestMatchingName(scientificName, names, state); |
137 | 137 |
//still nothing found -> try with the atomised name full title cache |
138 | 138 |
if(taxonName==null && atomisedTaxonName!=null){ |
139 |
names = getNameService().listByTitle(TaxonNameBase.class, atomisedTaxonName.getFullTitleCache(), MatchMode.EXACT, null, null, null, null, null);
|
|
139 |
names = getNameService().listByTitle(TaxonName.class, atomisedTaxonName.getFullTitleCache(), MatchMode.EXACT, null, null, null, null, null); |
|
140 | 140 |
taxonName = getBestMatchingName(atomisedTaxonName.getTitleCache(), names, state); |
141 | 141 |
//still nothing found -> try with the atomised name title cache |
142 | 142 |
if(taxonName==null){ |
143 |
names = getNameService().listByTitle(TaxonNameBase.class, atomisedTaxonName.getTitleCache(), MatchMode.EXACT, null, null, null, null, null);
|
|
143 |
names = getNameService().listByTitle(TaxonName.class, atomisedTaxonName.getTitleCache(), MatchMode.EXACT, null, null, null, null, null); |
|
144 | 144 |
taxonName = getBestMatchingName(atomisedTaxonName.getTitleCache(), names, state); |
145 | 145 |
} |
146 | 146 |
} |
... | ... | |
150 | 150 |
} |
151 | 151 |
|
152 | 152 |
if(taxonName==null && atomisedTaxonName!=null){ |
153 |
taxonName = (TaxonNameBase<?, ?>) atomisedTaxonName;
|
|
153 |
taxonName = (TaxonName<?, ?>) atomisedTaxonName; |
|
154 | 154 |
state.getReport().addName(taxonName); |
155 | 155 |
logger.info("Created new taxon name "+taxonName); |
156 | 156 |
if(taxonName.hasProblem()){ |
... | ... | |
179 | 179 |
return taxonName; |
180 | 180 |
} |
181 | 181 |
|
182 |
protected TaxonNameBase<?, ?> getBestMatchingName(String scientificName, java.util.Collection<TaxonNameBase> names, STATE state){
|
|
183 |
Set<TaxonNameBase> namesWithAcceptedTaxa = new HashSet<TaxonNameBase>();
|
|
184 |
List<TaxonNameBase> namesWithAcceptedTaxaInClassification = new ArrayList<TaxonNameBase>();
|
|
185 |
for (TaxonNameBase name : names) {
|
|
182 |
protected TaxonName getBestMatchingName(String scientificName, java.util.Collection<TaxonName> names, STATE state){
|
|
183 |
Set<TaxonName> namesWithAcceptedTaxa = new HashSet<>();
|
|
184 |
List<TaxonName> namesWithAcceptedTaxaInClassification = new ArrayList<>();
|
|
185 |
for (TaxonName name : names) { |
|
186 | 186 |
if(!name.getTaxa().isEmpty()){ |
187 | 187 |
Set<Taxon> taxa = name.getTaxa(); |
188 | 188 |
for (Taxon taxon:taxa){ |
... | ... | |
224 | 224 |
} |
225 | 225 |
//no names with accepted taxa found -> check accepted taxa of synonyms |
226 | 226 |
List<Taxon> taxaFromSynonyms = new ArrayList<>(); |
227 |
for (TaxonNameBase name : names) {
|
|
227 |
for (TaxonName name : names) { |
|
228 | 228 |
Set<TaxonBase> taxonBases = name.getTaxonBases(); |
229 | 229 |
for (TaxonBase taxonBase : taxonBases) { |
230 | 230 |
if(taxonBase.isInstanceOf(Synonym.class)){ |
... | ... | |
312 | 312 |
* @param state |
313 | 313 |
* @return the corresponding Botanical or Zoological or... name |
314 | 314 |
*/ |
315 |
protected TaxonNameBase<?,?> setTaxonNameByType(
|
|
315 |
protected TaxonName setTaxonNameByType( |
|
316 | 316 |
HashMap<String, String> atomisedMap, String fullName, STATE state) { |
317 | 317 |
boolean problem = false; |
318 | 318 |
if (logger.isDebugEnabled()){ |
... | ... | |
320 | 320 |
} |
321 | 321 |
|
322 | 322 |
if (state.getDataHolder().getNomenclatureCode().equals("Zoological") || state.getDataHolder().getNomenclatureCode().equals(NomenclaturalCode.ICZN.getUuid())) { |
323 |
TaxonNameBase<?,?> taxonName = TaxonNameFactory.NewZoologicalInstance(null);
|
|
323 |
TaxonName taxonName = TaxonNameFactory.NewZoologicalInstance(null); |
|
324 | 324 |
taxonName.setFullTitleCache(fullName, true); |
325 | 325 |
taxonName.setGenusOrUninomial(NB(getFromMap(atomisedMap, "Genus"))); |
326 | 326 |
taxonName.setInfraGenericEpithet(NB(getFromMap(atomisedMap, "SubGenus"))); |
... | ... | |
379 | 379 |
} |
380 | 380 |
} |
381 | 381 |
else if (state.getDataHolder().getNomenclatureCode().equals("Botanical") || state.getDataHolder().getNomenclatureCode().equals(NomenclaturalCode.ICNAFP.getUuid())) { |
382 |
TaxonNameBase taxonName = (TaxonNameBase)parseScientificName(fullName, state, state.getReport(), null);
|
|
382 |
TaxonName taxonName = (TaxonName)parseScientificName(fullName, state, state.getReport(), null);
|
|
383 | 383 |
if (taxonName != null){ |
384 | 384 |
return taxonName; |
385 | 385 |
} |
... | ... | |
439 | 439 |
} |
440 | 440 |
} |
441 | 441 |
else if (state.getDataHolder().getNomenclatureCode().equals("Bacterial") || state.getDataHolder().getNomenclatureCode().equals(NomenclaturalCode.ICNB.getUuid())) { |
442 |
TaxonNameBase taxonName = TaxonNameFactory.NewBacterialInstance(null);
|
|
442 |
TaxonName taxonName = TaxonNameFactory.NewBacterialInstance(null); |
|
443 | 443 |
taxonName.setFullTitleCache(fullName, true); |
444 | 444 |
taxonName.setGenusOrUninomial(getFromMap(atomisedMap, "Genus")); |
445 | 445 |
taxonName.setInfraGenericEpithet(NB(getFromMap(atomisedMap, "SubGenus"))); |
... | ... | |
478 | 478 |
} |
479 | 479 |
} |
480 | 480 |
else if (state.getDataHolder().getNomenclatureCode().equals("Cultivar")) { |
481 |
TaxonNameBase taxonName = TaxonNameFactory.NewCultivarInstance(null);
|
|
481 |
TaxonName taxonName = TaxonNameFactory.NewCultivarInstance(null); |
|
482 | 482 |
|
483 | 483 |
if (taxonName.hasProblem()) { |
484 | 484 |
logger.info("pb ICNCP"); |
... | ... | |
492 | 492 |
|
493 | 493 |
if (problem) { |
494 | 494 |
logger.info("Problem im setTaxonNameByType "); |
495 |
TaxonNameBase<?,?> taxonName = TaxonNameFactory.NewNonViralInstance(null);
|
|
495 |
TaxonName taxonName = TaxonNameFactory.NewNonViralInstance(null); |
|
496 | 496 |
taxonName.setFullTitleCache(fullName, true); |
497 | 497 |
return taxonName; |
498 | 498 |
} |
499 |
TaxonNameBase<?,?> tn = TaxonNameFactory.NewNonViralInstance(null);
|
|
499 |
TaxonName tn = TaxonNameFactory.NewNonViralInstance(null); |
|
500 | 500 |
return tn; |
501 | 501 |
} |
502 | 502 |
|
... | ... | |
567 | 567 |
return cdmRepository.getDescriptionService().saveOrUpdate(CdmBase.deproxy(cdmBase, DescriptionBase.class)); |
568 | 568 |
}else if (cdmBase.isInstanceOf(TaxonBase.class)){ |
569 | 569 |
return cdmRepository.getTaxonService().saveOrUpdate(CdmBase.deproxy(cdmBase, TaxonBase.class)); |
570 |
}else if (cdmBase.isInstanceOf(TaxonNameBase.class)){
|
|
571 |
return cdmRepository.getNameService().saveOrUpdate(CdmBase.deproxy(cdmBase, TaxonNameBase.class));
|
|
570 |
}else if (cdmBase.isInstanceOf(TaxonName.class)){ |
|
571 |
return cdmRepository.getNameService().saveOrUpdate(CdmBase.deproxy(cdmBase, TaxonName.class)); |
|
572 | 572 |
}else if (cdmBase.isInstanceOf(TaxonNode.class)){ |
573 | 573 |
return cdmRepository.getTaxonNodeService().saveOrUpdate(CdmBase.deproxy(cdmBase, TaxonNode.class)); |
574 | 574 |
}else{ |
... | ... | |
785 | 785 |
if(rank!=null){ |
786 | 786 |
if (rank.isLower(Rank.GENUS() )){ |
787 | 787 |
String genusOrUninomial = nvname.getGenusOrUninomial(); |
788 |
TaxonNameBase<?,?> taxonName = getOrCreateTaxonName(genusOrUninomial, Rank.GENUS(), preferredFlag, state, -1);
|
|
788 |
TaxonName taxonName = getOrCreateTaxonName(genusOrUninomial, Rank.GENUS(), preferredFlag, state, -1); |
|
789 | 789 |
genus = getOrCreateTaxonForName(taxonName, state); |
790 | 790 |
if (genus == null){ |
791 | 791 |
logger.debug("The genus should not be null " + taxonName); |
... | ... | |
799 | 799 |
String prefix = nvname.getGenusOrUninomial(); |
800 | 800 |
String name = nvname.getInfraGenericEpithet(); |
801 | 801 |
if (name != null){ |
802 |
TaxonNameBase<?,?> taxonName = getOrCreateTaxonName(prefix+" "+name, Rank.SUBGENUS(), preferredFlag, state, -1);
|
|
802 |
TaxonName taxonName = getOrCreateTaxonName(prefix+" "+name, Rank.SUBGENUS(), preferredFlag, state, -1); |
|
803 | 803 |
subgenus = getOrCreateTaxonForName(taxonName, state); |
804 | 804 |
if (preferredFlag) { |
805 | 805 |
parent = linkParentChildNode(genus, subgenus, classification, state); |
... | ... | |
811 | 811 |
String name = nvname.getInfraGenericEpithet(); |
812 | 812 |
String spe = nvname.getSpecificEpithet(); |
813 | 813 |
if (spe != null){ |
814 |
TaxonNameBase<?,?> taxonName = getOrCreateTaxonName(prefix+" "+name+" "+spe, Rank.SPECIES(), preferredFlag, state, -1);
|
|
814 |
TaxonName taxonName = getOrCreateTaxonName(prefix+" "+name+" "+spe, Rank.SPECIES(), preferredFlag, state, -1); |
|
815 | 815 |
species = getOrCreateTaxonForName(taxonName, state); |
816 | 816 |
if (preferredFlag) { |
817 | 817 |
parent = linkParentChildNode(subgenus, species, classification, state); |
... | ... | |
822 | 822 |
String prefix = nvname.getGenusOrUninomial(); |
823 | 823 |
String name = nvname.getSpecificEpithet(); |
824 | 824 |
if (name != null){ |
825 |
TaxonNameBase<?,?> taxonName = getOrCreateTaxonName(prefix+" "+name, Rank.SPECIES(), preferredFlag, state, -1);
|
|
825 |
TaxonName taxonName = getOrCreateTaxonName(prefix+" "+name, Rank.SPECIES(), preferredFlag, state, -1); |
|
826 | 826 |
species = getOrCreateTaxonForName(taxonName, state); |
827 | 827 |
if (preferredFlag) { |
828 | 828 |
parent = linkParentChildNode(genus, species, classification, state); |
... | ... | |
831 | 831 |
} |
832 | 832 |
} |
833 | 833 |
if (rank.isLower(Rank.INFRASPECIES())){ |
834 |
TaxonNameBase<?,?> taxonName = getOrCreateTaxonName(nvname.getFullTitleCache(), Rank.SUBSPECIES(), preferredFlag, state, -1);
|
|
834 |
TaxonName taxonName = getOrCreateTaxonName(nvname.getFullTitleCache(), Rank.SUBSPECIES(), preferredFlag, state, -1); |
|
835 | 835 |
subspecies = getOrCreateTaxonForName(taxonName, state); |
836 | 836 |
if (preferredFlag) { |
837 | 837 |
parent = linkParentChildNode(species, subspecies, classification, state); |
... | ... | |
891 | 891 |
return null; |
892 | 892 |
} |
893 | 893 |
|
894 |
protected Taxon getOrCreateTaxonForName(TaxonNameBase<?, ?> taxonNameBase, STATE state){
|
|
895 |
if (taxonNameBase != null){
|
|
896 |
Set<Taxon> acceptedTaxa = taxonNameBase.getTaxa();
|
|
894 |
protected Taxon getOrCreateTaxonForName(TaxonName taxonName, STATE state){
|
|
895 |
if (taxonName != null){ |
|
896 |
Set<Taxon> acceptedTaxa = taxonName.getTaxa(); |
|
897 | 897 |
if(acceptedTaxa.size()>0){ |
898 | 898 |
Taxon firstAcceptedTaxon = acceptedTaxa.iterator().next(); |
899 | 899 |
if(acceptedTaxa.size()>1){ |
900 | 900 |
String message = "More than one accepted taxon was found for taxon name: " |
901 |
+ taxonNameBase.getTitleCache() + "!\n" + firstAcceptedTaxon + "was chosen for "+state.getDerivedUnitBase();
|
|
901 |
+ taxonName.getTitleCache() + "!\n" + firstAcceptedTaxon + "was chosen for "+state.getDerivedUnitBase(); |
|
902 | 902 |
state.getReport().addInfoMessage(message); |
903 | 903 |
logger.warn(message); |
904 | 904 |
} |
... | ... | |
907 | 907 |
} |
908 | 908 |
} |
909 | 909 |
else{ |
910 |
Set<TaxonBase> taxonAndSynonyms = taxonNameBase.getTaxonBases();
|
|
910 |
Set<TaxonBase> taxonAndSynonyms = taxonName.getTaxonBases(); |
|
911 | 911 |
for (TaxonBase taxonBase : taxonAndSynonyms) { |
912 | 912 |
if(taxonBase.isInstanceOf(Synonym.class)){ |
913 | 913 |
Synonym synonym = HibernateProxyHelper.deproxy(taxonBase, Synonym.class); |
914 | 914 |
Taxon acceptedTaxonOfSynonym = synonym.getAcceptedTaxon(); |
915 | 915 |
if(acceptedTaxonOfSynonym == null){ |
916 | 916 |
String message = "No accepted taxon could be found for taxon name: " |
917 |
+ taxonNameBase.getTitleCache()
|
|
917 |
+ taxonName.getTitleCache() |
|
918 | 918 |
+ "!"; |
919 | 919 |
state.getReport().addInfoMessage(message); |
920 | 920 |
logger.warn(message); |
... | ... | |
925 | 925 |
} |
926 | 926 |
} |
927 | 927 |
} |
928 |
Taxon taxon = Taxon.NewInstance(taxonNameBase, state.getRef());
|
|
928 |
Taxon taxon = Taxon.NewInstance(taxonName, state.getRef()); |
|
929 | 929 |
save(taxon, state); |
930 | 930 |
state.getReport().addTaxon(taxon); |
931 | 931 |
logger.info("Created new taxon "+ taxon); |
... | ... | |
988 | 988 |
state.getDataHolder().setNomenclatureCode(identification.getCode()); |
989 | 989 |
} |
990 | 990 |
} |
991 |
TaxonNameBase<?,?> taxonName = getOrCreateTaxonName(scientificName, null, preferredFlag, state, i);
|
|
991 |
TaxonName taxonName = getOrCreateTaxonName(scientificName, null, preferredFlag, state, i); |
|
992 | 992 |
Taxon taxon = getOrCreateTaxonForName(taxonName, state); |
993 | 993 |
addTaxonNode(taxon, state,preferredFlag); |
994 | 994 |
linkDeterminationEvent(state, taxon, preferredFlag, derivedUnitFacade, identification.getIdentifier(), identification.getDate()); |
... | ... | |
1099 | 1099 |
} |
1100 | 1100 |
specimenTypeDesignationstatus = (SpecimenTypeDesignationStatus) cdmAppController.getTermService().find(specimenTypeDesignationstatus.getUuid()); |
1101 | 1101 |
//Designation |
1102 |
TaxonNameBase<?,?> name = taxon.getName();
|
|
1102 |
TaxonName name = taxon.getName(); |
|
1103 | 1103 |
SpecimenTypeDesignation designation = SpecimenTypeDesignation.NewInstance(); |
1104 | 1104 |
|
1105 | 1105 |
designation.setTypeStatus(specimenTypeDesignationstatus); |
Also available in: Unified diff
fix #6368 rename table and class TaxonNameBase