Revision 6f79628c
Added by Andreas Müller over 4 years ago
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/out/PesiTaxonExport.java | ||
---|---|---|
105 | 105 |
private static final String parentPluralString = "Taxa"; |
106 | 106 |
private static final String pluralStringNames = "Names"; |
107 | 107 |
|
108 |
private PreparedStatement parentTaxonFk_TreeIndex_KingdomFkStmt;
|
|
108 |
// private PreparedStatement parentTaxonFk_TreeIndex_KingdomFkStmts;
|
|
109 | 109 |
private PreparedStatement parentTaxonFkStmt; |
110 | 110 |
private PreparedStatement rankTypeExpertsUpdateStmt; |
111 | 111 |
private PreparedStatement rankUpdateStmt; |
... | ... | |
201 | 201 |
|
202 | 202 |
|
203 | 203 |
private void initPreparedStatements(PesiExportState state) throws SQLException { |
204 |
initTreeIndexStatement(state); |
|
204 |
// initTreeIndexStatement(state);
|
|
205 | 205 |
initRankExpertsUpdateStmt(state); |
206 | 206 |
initRankUpdateStatement(state); |
207 | 207 |
|
208 | 208 |
initParentFkStatement(state); |
209 | 209 |
} |
210 | 210 |
|
211 |
// Prepare TreeIndex-And-KingdomFk-Statement |
|
212 |
private void initTreeIndexStatement(PesiExportState state) throws SQLException { |
|
213 |
Connection connection = state.getConfig().getDestination().getConnection(); |
|
214 |
String parentTaxonFk_TreeIndex_KingdomFkSql = "UPDATE Taxon SET ParentTaxonFk = ?, TreeIndex = ? WHERE TaxonId = ?"; |
|
215 |
parentTaxonFk_TreeIndex_KingdomFkStmt = connection.prepareStatement(parentTaxonFk_TreeIndex_KingdomFkSql); |
|
216 |
} |
|
211 |
// // Prepare TreeIndex-And-KingdomFk-Statement
|
|
212 |
// private void initTreeIndexStatement(PesiExportState state) throws SQLException {
|
|
213 |
// Connection connection = state.getConfig().getDestination().getConnection();
|
|
214 |
// String parentTaxonFk_TreeIndex_KingdomFkSql = "UPDATE Taxon SET ParentTaxonFk = ?, TreeIndex = ? WHERE TaxonId = ?";
|
|
215 |
// parentTaxonFk_TreeIndex_KingdomFkStmt = connection.prepareStatement(parentTaxonFk_TreeIndex_KingdomFkSql);
|
|
216 |
// }
|
|
217 | 217 |
|
218 | 218 |
// Prepare TreeIndex-And-KingdomFk-Statement |
219 | 219 |
private void initParentFkStatement(PesiExportState state) throws SQLException { |
... | ... | |
240 | 240 |
} |
241 | 241 |
|
242 | 242 |
private boolean doPhase01(PesiExportState state, PesiExportMapping mapping, PesiExportMapping additionalSourceMapping){ |
243 |
if (!state.getConfig().isDoTaxaPhase1()){ |
|
244 |
return true; |
|
245 |
} |
|
243 |
|
|
246 | 244 |
int count = 0; |
247 | 245 |
int pastCount = 0; |
248 | 246 |
boolean success = true; |
... | ... | |
490 | 488 |
logger.info("Started new transaction for rank, kingdom, typeName, expertFk and speciesExpertFK. Fetching some " + pluralString + " (max: " + limit + ") ..."); |
491 | 489 |
} |
492 | 490 |
int partitionCount = 0; |
493 |
List<TaxonBase> list; |
|
491 |
@SuppressWarnings("rawtypes") |
|
492 |
List<TaxonBase> list; |
|
494 | 493 |
while ((list = getNextTaxonPartition(TaxonBase.class, limit, partitionCount++, null)) != null) { |
495 | 494 |
|
496 | 495 |
if (logger.isDebugEnabled()) { |
... | ... | |
507 | 506 |
doCount(count++, modCount, pluralString); |
508 | 507 |
Integer typeNameFk = getTypeNameFk(taxonName, state); |
509 | 508 |
Integer kingdomFk = findKingdomIdFromTreeIndex(taxon, state); |
509 |
Integer rankFk = getRankFk(taxonName, kingdomFk); |
|
510 | 510 |
|
511 | 511 |
invokeRankDataAndTypeNameFkAndKingdomFk(taxonName, state.getDbId(taxon), |
512 |
typeNameFk, kingdomFk, state); |
|
512 |
typeNameFk, kingdomFk, rankFk, state);
|
|
513 | 513 |
} |
514 | 514 |
|
515 | 515 |
// Commit transaction |
... | ... | |
590 | 590 |
matcher = pattern.matcher(treeIndex); |
591 | 591 |
if(matcher.find()) { |
592 | 592 |
String treeIndexKingdom = matcher.group(0); |
593 |
kingdomID = state.getTreeIndexKingdomMap().get(treeIndexKingdom); |
|
593 |
Map<String, Integer> map = state.getTreeIndexKingdomMap(); |
|
594 |
kingdomID = map.get(treeIndexKingdom); |
|
594 | 595 |
} |
595 | 596 |
} |
596 | 597 |
if(Rank.DOMAIN().equals(taxon.getName().getRank())){ |
... | ... | |
1095 | 1096 |
* @param nomenclaturalCode The {@link NomenclaturalCode NomenclaturalCode}. |
1096 | 1097 |
* @param taxonFk The TaxonFk to store the values for. |
1097 | 1098 |
* @param typeNameFk The TypeNameFk. |
1099 |
* @param rankFk |
|
1098 | 1100 |
* @param state |
1099 | 1101 |
* @param kindomFk The KingdomFk. |
1100 | 1102 |
* @param expertFk The ExpertFk. |
... | ... | |
1102 | 1104 |
* @return Whether save was successful or not. |
1103 | 1105 |
*/ |
1104 | 1106 |
private boolean invokeRankDataAndTypeNameFkAndKingdomFk(TaxonName taxonName, |
1105 |
Integer taxonFk, Integer typeNameFk, Integer kingdomFk, PesiExportState state) { |
|
1106 |
|
|
1107 |
NomenclaturalCode nomenclaturalCodes = taxonName.getNameType(); |
|
1107 |
Integer taxonFk, Integer typeNameFk, Integer kingdomFk, Integer rankFk, PesiExportState state) { |
|
1108 | 1108 |
|
1109 |
Integer rankFk = null; |
|
1110 | 1109 |
try { |
1111 | 1110 |
int index = 1; |
1112 |
rankFk = getRankFk(taxonName, kingdomFk); |
|
1113 | 1111 |
if (rankFk != null) { |
1114 | 1112 |
rankTypeExpertsUpdateStmt.setInt(index++, rankFk); |
1115 | 1113 |
} else { |
... | ... | |
1157 | 1155 |
rankTypeExpertsUpdateStmt.executeUpdate(); |
1158 | 1156 |
return true; |
1159 | 1157 |
} catch (SQLException e) { |
1160 |
logger.error("Data could not be inserted into database: " + e.getMessage() + "; rankFk = " + rankFk + "; kingdomFk = " + kingdomFk ); |
|
1158 |
String name = taxonName == null? null:taxonName.getTitleCache(); |
|
1159 |
logger.error("Data could not be inserted into database: " + e.getMessage() + "; rankFk = " + rankFk + "; kingdomFk = " + kingdomFk + "; taxonFk = "+ taxonFk + "; typeNameFk = " + typeNameFk + "; name = " + name); |
|
1161 | 1160 |
e.printStackTrace(); |
1162 | 1161 |
return false; |
1163 | 1162 |
} catch (Exception e) { |
1164 |
logger.error("Some exception occurred: " + e.getMessage() + "; rankFk = " + rankFk + "; kingdomFk = " + kingdomFk); |
|
1163 |
String name = taxonName == null? null:taxonName.getTitleCache(); |
|
1164 |
logger.error("Some exception occurred: " + e.getMessage() + "; rankFk = " + rankFk + "; kingdomFk = " + kingdomFk + "; taxonFk = "+ taxonFk + "; typeNameFk = " + typeNameFk + "; name = " + name); |
|
1165 | 1165 |
e.printStackTrace(); |
1166 | 1166 |
return false; |
1167 | 1167 |
} |
... | ... | |
1173 | 1173 |
* @return Whether the delete operation was successful or not. |
1174 | 1174 |
*/ |
1175 | 1175 |
protected boolean doDelete(PesiExportState state) { |
1176 |
if (!state.getConfig().isDoTaxaPhase1()){ |
|
1177 |
return true; |
|
1178 |
} |
|
1176 |
|
|
1179 | 1177 |
Source destination = state.getConfig().getDestination(); |
1180 | 1178 |
|
1181 | 1179 |
String[] tables = new String[]{"AdditionalTaxonSource","CommonNameSource","CommonName", |
... | ... | |
1227 | 1225 |
if (nodes == null||nodes.isEmpty()){ |
1228 | 1226 |
kingdomId = getKingdomFk(taxonName); |
1229 | 1227 |
}else{ |
1228 |
//should not happen, method exists only pure names |
|
1230 | 1229 |
kingdomId = findKingdomIdFromTreeIndex(nodes.iterator().next().getTaxon(), state); |
1231 | 1230 |
} |
1232 | 1231 |
return getRankCache(taxonName, kingdomId, state); |
... | ... | |
2208 | 2207 |
//experts |
2209 | 2208 |
ExtensionType extensionTypeSpeciesExpertName = (ExtensionType)getTermService().find(PesiTransformer.uuidExtSpeciesExpertName); |
2210 | 2209 |
mapping.addMapper(DbExtensionMapper.NewInstance(extensionTypeSpeciesExpertName, "SpeciesExpertName")); |
2211 |
|
|
2212 | 2210 |
ExtensionType extensionTypeExpertName = (ExtensionType)getTermService().find(PesiTransformer.uuidExtExpertName); |
2213 | 2211 |
mapping.addMapper(DbExtensionMapper.NewInstance(extensionTypeExpertName, "ExpertName")); |
2214 | 2212 |
|
2215 |
//handled in Phase02 now |
|
2216 |
// mapping.addMapper(MethodMapper.NewInstance("ParentTaxonFk", this, TaxonBase.class, PesiExportState.class)); //by AM, doesn't work, FK exception |
|
2213 |
//ParentTaxonFk handled in Phase02 now |
|
2217 | 2214 |
mapping.addMapper(ObjectChangeMapper.NewInstance(TaxonBase.class, TaxonName.class, "Name")); |
2218 | 2215 |
|
2219 | 2216 |
addNameMappers(mapping); |
... | ... | |
2248 | 2245 |
mapping.addMapper(DbLastActionMapper.NewInstance("LastAction", true)); |
2249 | 2246 |
|
2250 | 2247 |
addNameMappers(mapping); |
2251 |
//TODO add author mapper, TypeNameFk
|
|
2248 |
//TODO add author mapper |
|
2252 | 2249 |
|
2253 | 2250 |
return mapping; |
2254 | 2251 |
} |
2255 | 2252 |
|
2256 | 2253 |
private void addNameMappers(PesiExportMapping mapping) { |
2254 |
|
|
2255 |
//epithets |
|
2257 | 2256 |
mapping.addMapper(DbStringMapper.NewInstance("GenusOrUninomial", "GenusOrUninomial")); |
2258 | 2257 |
mapping.addMapper(DbStringMapper.NewInstance("InfraGenericEpithet", "InfraGenericEpithet")); |
2259 | 2258 |
mapping.addMapper(DbStringMapper.NewInstance("SpecificEpithet", "SpecificEpithet")); |
2260 | 2259 |
mapping.addMapper(DbStringMapper.NewInstance("InfraSpecificEpithet", "InfraSpecificEpithet")); |
2261 | 2260 |
|
2261 |
//full name |
|
2262 | 2262 |
// mapping.addMapper(DbStringMapper.NewInstance("NameCache", "WebSearchName")); //does not work as we need other cache strategy |
2263 | 2263 |
mapping.addMapper(MethodMapper.NewInstance("WebSearchName", this, TaxonName.class)); |
2264 |
|
|
2265 | 2264 |
mapping.addMapper(MethodMapper.NewInstance("FullName", this, TaxonName.class)); |
2266 | 2265 |
|
2267 |
|
|
2266 |
//nom ref |
|
2268 | 2267 |
mapping.addMapper(MethodMapper.NewInstance("NomRefString", this, TaxonName.class)); |
2269 | 2268 |
|
2269 |
//status |
|
2270 | 2270 |
mapping.addMapper(MethodMapper.NewInstance("NameStatusFk", this, TaxonName.class)); |
2271 | 2271 |
mapping.addMapper(MethodMapper.NewInstance("NameStatusCache", this, TaxonName.class, PesiExportState.class)); |
2272 |
mapping.addMapper(MethodMapper.NewInstance("TypeFullnameCache", this, TaxonName.class)); |
|
2273 |
//TODO TypeNameFk |
|
2274 |
|
|
2275 |
//quality status |
|
2276 | 2272 |
mapping.addMapper(MethodMapper.NewInstance("QualityStatusFk", this, TaxonName.class)); |
2277 | 2273 |
mapping.addMapper(MethodMapper.NewInstance("QualityStatusCache", this, TaxonName.class, PesiExportState.class)); |
2278 | 2274 |
|
2275 |
//types |
|
2276 |
mapping.addMapper(MethodMapper.NewInstance("TypeFullnameCache", this, TaxonName.class)); |
|
2277 |
//TypeNameFk handled in Phase3 |
|
2278 |
|
|
2279 |
//supplemental |
|
2279 | 2280 |
mapping.addMapper(MethodMapper.NewInstance("IdInSource", this, IdentifiableEntity.class)); |
2280 | 2281 |
mapping.addMapper(MethodMapper.NewInstance("OriginalDB", this, IdentifiableEntity.class) ); |
2281 | 2282 |
|
Also available in: Unified diff
2717 cleanup and better logging for PesiExport¶