Revision 02bf7c25
Added by Andreas Müller over 4 years ago
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/indexFungorum/IndexFungorumImportState.java | ||
---|---|---|
9 | 9 |
|
10 | 10 |
package eu.etaxonomy.cdm.io.pesi.indexFungorum; |
11 | 11 |
|
12 |
import java.util.ArrayList; |
|
13 | 12 |
import java.util.HashMap; |
14 |
import java.util.List; |
|
15 | 13 |
import java.util.Map; |
16 | 14 |
import java.util.UUID; |
17 | 15 |
|
... | ... | |
36 | 34 |
|
37 | 35 |
private Map<String, TaxonBase> speciesMap; |
38 | 36 |
|
39 |
private List<UUID> infraspecificTaxaUUIDs = new ArrayList<>();
|
|
37 |
private Map<UUID,Integer> infraspecificTaxaUUIDs = new HashMap<>();
|
|
40 | 38 |
|
41 | 39 |
|
42 | 40 |
|
... | ... | |
49 | 47 |
// super(config); |
50 | 48 |
} |
51 | 49 |
|
52 |
public List<UUID> getInfraspecificTaxaUUIDs() {
|
|
50 |
public Map<UUID,Integer> getInfraspecificTaxaUUIDs() {
|
|
53 | 51 |
return infraspecificTaxaUUIDs; |
54 | 52 |
} |
55 |
public void setInfraspecificTaxaUUIDs(List<UUID> infraspecificTaxaUUIDs) {
|
|
53 |
public void setInfraspecificTaxaUUIDs(Map<UUID, Integer> infraspecificTaxaUUIDs) {
|
|
56 | 54 |
this.infraspecificTaxaUUIDs = infraspecificTaxaUUIDs; |
57 | 55 |
} |
58 | 56 |
|
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/indexFungorum/IndexFungorumSpeciesImport.java | ||
---|---|---|
15 | 15 |
import java.util.HashSet; |
16 | 16 |
import java.util.Map; |
17 | 17 |
import java.util.Set; |
18 |
import java.util.UUID; |
|
19 | 18 |
|
20 |
import org.apache.commons.lang.StringUtils; |
|
21 | 19 |
import org.apache.log4j.Logger; |
22 | 20 |
import org.springframework.stereotype.Component; |
23 | 21 |
|
... | ... | |
91 | 89 |
String phylumName = rs.getString("Phylum name"); |
92 | 90 |
|
93 | 91 |
String preferredName = rs.getString("PreferredName"); |
94 |
if (StringUtils.isBlank(preferredName)){
|
|
95 |
logger.warn("Preferred name is blank. This case is not yet handled by IF import. RECORD UMBER" + CdmUtils.Nz(id)); |
|
92 |
if (isBlank(preferredName)){ |
|
93 |
logger.warn("Preferred name is blank. This case is not yet handled by IF import. RECORD NUMBER" + CdmUtils.Nz(id));
|
|
96 | 94 |
} |
97 | 95 |
|
98 | 96 |
//Rank rank = Rank.SPECIES(); |
... | ... | |
101 | 99 |
INonViralName name = parser.parseSimpleName(preferredName, NomenclaturalCode.ICNAFP, null); |
102 | 100 |
|
103 | 101 |
Taxon taxon = Taxon.NewInstance(name, sourceReference); |
104 |
//if name is infraspecific the parent should be the species not the genus |
|
105 |
Taxon parent;
|
|
106 |
if (!name.isInfraSpecific()){
|
|
107 |
parent = getParentTaxon(state, rs);
|
|
102 |
//if name is infra-specific the parent should be the species not the genus
|
|
103 |
Integer genusId = rs.getInt("PreferredNameFDCnumber");
|
|
104 |
if (!name.isInfraSpecific()){
|
|
105 |
Taxon parent = getParentTaxon(state, genusId);
|
|
108 | 106 |
if (parent == null){ |
109 |
logger.warn("parent not found for name:" +preferredName); |
|
107 |
logger.warn("parent not found for name:" + preferredName + "ID(PreferredNameIFnumber)" +id+ "; GenusId(PreferredNameFDCnumber): "); |
|
108 |
}else{ |
|
109 |
classification.addParentChild(parent, taxon, null, null); |
|
110 | 110 |
} |
111 |
classification.addParentChild(parent, taxon, null, null); |
|
112 |
} |
|
111 |
}else { |
|
112 |
state.getInfraspecificTaxaUUIDs().put(taxon.getUuid(), genusId); |
|
113 |
} |
|
113 | 114 |
|
114 | 115 |
//author + publication |
115 | 116 |
makeAuthorAndPublication(state, rs, name); |
... | ... | |
121 | 122 |
ExtensionType fossilExtType = getExtensionType(state, ErmsTransformer.uuidExtFossilStatus, "fossil status", "fossil status", "fos. stat."); |
122 | 123 |
Extension.NewInstance(taxon, PesiTransformer.STR_FOSSIL_ONLY, fossilExtType); |
123 | 124 |
} |
125 |
|
|
124 | 126 |
//save |
127 |
getTaxonService().saveOrUpdate(taxon); |
|
125 | 128 |
|
126 |
UUID uuidTaxon = getTaxonService().saveOrUpdate(taxon); |
|
127 |
//getNameService().saveOrUpdate(name); |
|
128 |
if (name.isInfraSpecific()){ |
|
129 |
state.getInfraspecificTaxaUUIDs().add(uuidTaxon); |
|
130 |
} |
|
131 | 129 |
} |
132 | 130 |
} catch (Exception e) { |
133 | 131 |
e.printStackTrace(); |
... | ... | |
138 | 136 |
return success; |
139 | 137 |
} |
140 | 138 |
|
141 |
private Taxon getParentTaxon(IndexFungorumImportState state, ResultSet rs) throws SQLException { |
|
142 |
Integer genusId = rs.getInt("PreferredNameFDCnumber"); |
|
143 |
|
|
144 |
Taxon taxon = state.getRelatedObject(NAMESPACE_GENERA, String.valueOf(genusId), Taxon.class); |
|
145 |
if (taxon == null){ |
|
146 |
logger.warn("Taxon not found for " + genusId); |
|
147 |
} |
|
148 |
return taxon; |
|
139 |
private Taxon getParentTaxon(IndexFungorumImportState state, Integer genusId) { |
|
140 |
return state.getRelatedObject(NAMESPACE_GENERA, String.valueOf(genusId), Taxon.class); |
|
149 | 141 |
} |
150 | 142 |
|
151 | 143 |
@Override |
152 | 144 |
public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition(ResultSet rs, IndexFungorumImportState state) { |
153 |
String nameSpace; |
|
154 |
Class<?> cdmClass;
|
|
145 |
|
|
146 |
String nameSpace;
|
|
155 | 147 |
Set<String> idSet; |
156 | 148 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<>(); |
157 | 149 |
|
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/indexFungorum/IndexFungorumSubSpeciesImport.java | ||
---|---|---|
63 | 63 |
propertyPaths.add("taxonNodes.parent.*"); |
64 | 64 |
propertyPaths.add("taxonNodes.parent.taxon.*"); |
65 | 65 |
Classification classification = getClassification(state); |
66 |
for (UUID infraspecificTaxonUUID: state.getInfraspecificTaxaUUIDs()){ |
|
66 |
for (UUID infraspecificTaxonUUID: state.getInfraspecificTaxaUUIDs().keySet()){
|
|
67 | 67 |
TransactionStatus txStatus = startTransaction(); |
68 | 68 |
Taxon infraspecificTaxon = (Taxon)getTaxonService().load(infraspecificTaxonUUID, propertyPaths); |
69 | 69 |
|
... | ... | |
80 | 80 |
List<TaxonBase> potentialParents = getTaxonService().findTaxaByName(matchingConfig); |
81 | 81 |
//Taxon.class, parentNameString + "sec. ", MatchMode.BEGINNING, , pageSize, pageNumber, orderHints, propertyPaths) |
82 | 82 |
//.searchNames(String uninomial,String infraGenericEpithet, String specificEpithet, String infraspecificEpithet, Rank rank, Integer pageSize, Integer pageNumber, List<OrderHint> orderHints, |
83 |
boolean matched = false; |
|
83 | 84 |
if (potentialParents.size()>1){ |
84 | 85 |
for (@SuppressWarnings("rawtypes") TaxonBase potentialParent : potentialParents){ |
85 | 86 |
if (potentialParent.getTitleCache().equals(parentNameString + " sec*")){ |
86 | 87 |
classification.addParentChild((Taxon)potentialParent, infraspecificTaxon, null, null); |
88 |
matched = true; |
|
89 |
break; |
|
87 | 90 |
} |
88 | 91 |
} |
92 |
if (matched == false){ |
|
93 |
logger.warn("Multiple match candidates but no match for " + name.getTitleCache()); |
|
94 |
} |
|
89 | 95 |
}else if (!potentialParents.isEmpty()){ |
90 | 96 |
Taxon parent = HibernateProxyHelper.deproxy(potentialParents.get(0), Taxon.class); |
91 |
Taxon child = (Taxon)getTaxonService().load(infraspecificTaxon.getUuid(), propertyPaths);
|
|
92 |
classification.addParentChild(parent, child, null, null);
|
|
97 |
classification.addParentChild(parent, infraspecificTaxon, null, null);
|
|
98 |
matched = true;
|
|
93 | 99 |
} else{ |
100 |
Integer genusId = state.getInfraspecificTaxaUUIDs().get(infraspecificTaxonUUID); |
|
101 |
Taxon genusParent = getParentGenus(state, genusId); |
|
102 |
// Taxon genusParent = state.getRelatedObject(NAMESPACE_GENERA, String.valueOf(genusId), Taxon.class); |
|
103 |
classification.addParentChild(genusParent, infraspecificTaxon, null, null); |
|
104 |
logger.warn("Added infraspecific taxon to genus because species does not exist: " + infraspecificTaxon.getTitleCache()); |
|
105 |
matched = true; |
|
106 |
} |
|
107 |
if (!matched){ |
|
94 | 108 |
System.out.println("No parent for: " + name.getTitleCache()); |
95 | 109 |
} |
96 | 110 |
getTaxonService().saveOrUpdate(infraspecificTaxon); |
... | ... | |
98 | 112 |
} |
99 | 113 |
} |
100 | 114 |
|
115 |
private Taxon getParentGenus(IndexFungorumImportState state, Integer genusId) { |
|
116 |
Taxon result = getCommonService().getSourcedObjectByIdInSource(Taxon.class, String.valueOf(genusId), NAMESPACE_GENERA); |
|
117 |
return result; |
|
118 |
} |
|
119 |
|
|
101 | 120 |
private String getParentNameInfraSpecific(TaxonName taxonName){ |
102 | 121 |
String parentName = taxonName.getGenusOrUninomial() + " " + taxonName.getSpecificEpithet(); |
103 | 122 |
return parentName; |
Also available in: Unified diff
ref #2826 fix IF subspecies import, link to genus if species not exists