Revision 8422c0cd
Added by Andreas Müller almost 8 years ago
cdm-pesi/src/main/java/eu/etaxonomy/cdm/io/pesi/erms/ErmsTaxonImport.java | ||
---|---|---|
1 | 1 |
/** |
2 | 2 |
* Copyright (C) 2007 EDIT |
3 |
* European Distributed Institute of Taxonomy
|
|
3 |
* European Distributed Institute of Taxonomy |
|
4 | 4 |
* http://www.e-taxonomy.eu |
5 |
*
|
|
5 |
* |
|
6 | 6 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
7 | 7 |
* See LICENSE.TXT at the top of this package for the full license terms. |
8 | 8 |
*/ |
... | ... | |
53 | 53 |
@Component |
54 | 54 |
public class ErmsTaxonImport extends ErmsImportBase<TaxonBase<?>> implements IMappingImport<TaxonBase<?>, ErmsImportState>{ |
55 | 55 |
private static final Logger logger = Logger.getLogger(ErmsTaxonImport.class); |
56 |
|
|
56 |
|
|
57 | 57 |
public static final UUID TNS_EXT_UUID = UUID.fromString("41cb0450-ac84-4d73-905e-9c7773c23b05"); |
58 |
|
|
58 |
|
|
59 | 59 |
private DbImportMapping<ErmsImportState, ErmsImportConfigurator> mapping; |
60 |
|
|
60 |
|
|
61 | 61 |
private static final String pluralString = "taxa"; |
62 | 62 |
private static final String dbTableName = "tu"; |
63 | 63 |
private static final Class<?> cdmTargetClass = TaxonBase.class; |
... | ... | |
65 | 65 |
public ErmsTaxonImport(){ |
66 | 66 |
super(pluralString, dbTableName, cdmTargetClass); |
67 | 67 |
} |
68 |
|
|
69 |
|
|
68 |
|
|
69 |
|
|
70 | 70 |
|
71 | 71 |
// /* (non-Javadoc) |
72 | 72 |
// * @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getIdQuery() |
... | ... | |
81 | 81 |
/* (non-Javadoc) |
82 | 82 |
* @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#getMapping() |
83 | 83 |
*/ |
84 |
protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() { |
|
84 |
@Override |
|
85 |
protected DbImportMapping<ErmsImportState, ErmsImportConfigurator> getMapping() { |
|
85 | 86 |
if (mapping == null){ |
86 | 87 |
mapping = new DbImportMapping<ErmsImportState, ErmsImportConfigurator>(); |
87 |
|
|
88 |
|
|
88 | 89 |
mapping.addMapper(DbImportObjectCreationMapper.NewInstance(this, "id", TAXON_NAMESPACE)); //id + tu_status |
89 | 90 |
UUID tsnUuid = ErmsTransformer.uuidTsn; |
90 |
mapping.addMapper(DbImportLsidMapper.NewInstance("GUID", "lsid"));
|
|
91 |
mapping.addMapper(DbImportLsidMapper.NewInstance("GUID", "lsid")); |
|
91 | 92 |
|
92 |
ExtensionType tsnExtType = getExtensionType(tsnUuid, "TSN", "TSN", "TSN");
|
|
93 |
ExtensionType tsnExtType = getExtensionType(tsnUuid, "TSN", "TSN", "TSN"); |
|
93 | 94 |
mapping.addMapper(DbImportExtensionMapper.NewInstance("tsn", tsnExtType)); |
94 | 95 |
// mapping.addMapper(DbImportStringMapper.NewInstance("tu_name", "(NonViralName)name.nameCache")); |
95 |
|
|
96 |
ExtensionType displayNameExtType = getExtensionType(ErmsTransformer.uuidDisplayName, "display name", "display name", "display name");
|
|
96 |
|
|
97 |
ExtensionType displayNameExtType = getExtensionType(ErmsTransformer.uuidDisplayName, "display name", "display name", "display name"); |
|
97 | 98 |
mapping.addMapper(DbImportExtensionMapper.NewInstance("tu_displayname", displayNameExtType)); |
98 |
ExtensionType fuzzyNameExtType = getExtensionType(ErmsTransformer.uuidFuzzyName, "fuzzy name", "fuzzy name", "fuzzy name");
|
|
99 |
ExtensionType fuzzyNameExtType = getExtensionType(ErmsTransformer.uuidFuzzyName, "fuzzy name", "fuzzy name", "fuzzy name"); |
|
99 | 100 |
mapping.addMapper(DbImportExtensionMapper.NewInstance("tu_fuzzyname", fuzzyNameExtType)); |
100 | 101 |
mapping.addMapper(DbImportStringMapper.NewInstance("tu_authority", "(NonViralName)name.authorshipCache")); |
101 |
|
|
102 |
ExtensionType fossilStatusExtType = getExtensionType(ErmsTransformer.uuidFossilStatus, "fossil status", "fossil status", "fos. stat.");
|
|
102 |
|
|
103 |
ExtensionType fossilStatusExtType = getExtensionType(ErmsTransformer.uuidFossilStatus, "fossil status", "fossil status", "fos. stat."); |
|
103 | 104 |
mapping.addMapper(DbImportExtensionMapper.NewInstance("fossil_name", fossilStatusExtType)); |
104 | 105 |
// mapping.addMapper(DbImportExtensionTypeCreationMapper.NewInstance("fossil_name", EXTENSION_TYPE_NAMESPACE, "fossil_name", "fossil_name", "fossil_name")); |
105 | 106 |
|
106 |
ExtensionType unacceptExtType = getExtensionType(ErmsTransformer.uuidUnacceptReason, "unaccept reason", "unaccept reason", "reason");
|
|
107 |
ExtensionType unacceptExtType = getExtensionType(ErmsTransformer.uuidUnacceptReason, "unaccept reason", "unaccept reason", "reason"); |
|
107 | 108 |
mapping.addMapper(DbImportExtensionMapper.NewInstance("tu_unacceptreason", unacceptExtType)); |
108 |
|
|
109 |
ExtensionType qualityStatusExtType = getExtensionType(ErmsTransformer.uuidQualityStatus, "quality status", "quality status", "quality status");
|
|
109 |
|
|
110 |
ExtensionType qualityStatusExtType = getExtensionType(ErmsTransformer.uuidQualityStatus, "quality status", "quality status", "quality status"); |
|
110 | 111 |
mapping.addMapper(DbImportExtensionMapper.NewInstance("qualitystatus_name", qualityStatusExtType)); //checked by Tax Editor ERMS1.1, Added by db management team (2x), checked by Tax Editor |
111 | 112 |
|
112 | 113 |
mapping.addMapper(DbImportMarkerMapper.NewInstance("tu_marine", ErmsTransformer.uuidMarkerMarine, "marine", "marine", "marine", null)); |
... | ... | |
114 | 115 |
mapping.addMapper(DbImportMarkerMapper.NewInstance("tu_fresh", ErmsTransformer.uuidMarkerFreshwater, "freshwater", "fresh", "fresh", null)); |
115 | 116 |
mapping.addMapper(DbImportMarkerMapper.NewInstance("tu_terrestrial", ErmsTransformer.uuidMarkerTerrestrial, "terrestrial", "terrestrial", "terrestrial", null)); |
116 | 117 |
|
117 |
|
|
118 |
|
|
118 | 119 |
// UUID hiddenUuid = ErmsTransformer.uuidHidden; |
119 | 120 |
// mapping.addMapper(DbImportMarkerCreationMapper.Mapper.NewInstance("qualitystatus_name", qualityUuid, "quality status", "quality status", "quality status")); //checked by Tax Editor ERMS1.1, Added by db management team (2x), checked by Tax Editor |
120 |
|
|
121 |
|
|
121 | 122 |
//not yet implemented |
122 |
mapping.addMapper(DbNotYetImplementedMapper.NewInstance("tu_sp", "included in rank/object creation"));
|
|
123 |
mapping.addMapper(DbNotYetImplementedMapper.NewInstance("tu_sp", "included in rank/object creation")); |
|
123 | 124 |
mapping.addMapper(DbIgnoreMapper.NewInstance("cache_citation", "Needs check if this is needed in PESI")); |
124 |
|
|
125 |
|
|
125 |
|
|
126 |
|
|
126 | 127 |
//ignore |
127 | 128 |
mapping.addMapper(DbIgnoreMapper.NewInstance("tu_fossil", "tu_fossil implemented as foreign key")); |
128 |
|
|
129 |
|
|
129 | 130 |
} |
130 | 131 |
|
131 | 132 |
return mapping; |
... | ... | |
136 | 137 |
*/ |
137 | 138 |
@Override |
138 | 139 |
protected String getRecordQuery(ErmsImportConfigurator config) { |
139 |
String strSelect = " SELECT tu.*, parent1.tu_name AS parent1name, parent2.tu_name AS parent2name, parent3.tu_name AS parent3name, "
|
|
140 |
+ " parent1.tu_rank AS parent1rank, parent2.tu_rank AS parent2rank, parent3.tu_rank AS parent3rank, " +
|
|
140 |
String strSelect = " SELECT tu.*, parent1.tu_name AS parent1name, parent2.tu_name AS parent2name, parent3.tu_name AS parent3name, " |
|
141 |
+ " parent1.tu_rank AS parent1rank, parent2.tu_rank AS parent2rank, parent3.tu_rank AS parent3rank, " + |
|
141 | 142 |
" status.status_id as status_id, status.status_name, fossil.fossil_name, qualitystatus.qualitystatus_name"; |
142 |
String strFrom = " FROM tu LEFT OUTER JOIN tu AS parent1 ON parent1.id = tu.tu_parent " +
|
|
143 |
" LEFT OUTER JOIN tu AS parent2 ON parent2.id = parent1.tu_parent " +
|
|
144 |
" LEFT OUTER JOIN tu AS parent3 ON parent2.tu_parent = parent3.id " +
|
|
145 |
" LEFT OUTER JOIN status ON tu.tu_status = status.status_id " +
|
|
143 |
String strFrom = " FROM tu LEFT OUTER JOIN tu AS parent1 ON parent1.id = tu.tu_parent " + |
|
144 |
" LEFT OUTER JOIN tu AS parent2 ON parent2.id = parent1.tu_parent " + |
|
145 |
" LEFT OUTER JOIN tu AS parent3 ON parent2.tu_parent = parent3.id " + |
|
146 |
" LEFT OUTER JOIN status ON tu.tu_status = status.status_id " + |
|
146 | 147 |
" LEFT OUTER JOIN fossil ON tu.tu_fossil = fossil.fossil_id " + |
147 | 148 |
" LEFT OUTER JOIN qualitystatus ON tu.tu_qualitystatus = qualitystatus.id "; |
148 | 149 |
String strWhere = " WHERE ( tu.id IN (" + ID_LIST_TOKEN + ") )"; |
149 | 150 |
String strRecordQuery = strSelect + strFrom + strWhere; |
150 | 151 |
return strRecordQuery; |
151 | 152 |
} |
152 |
|
|
153 |
|
|
153 |
|
|
154 |
|
|
154 | 155 |
/* (non-Javadoc) |
155 | 156 |
* @see eu.etaxonomy.cdm.io.erms.ErmsImportBase#doInvoke(eu.etaxonomy.cdm.io.erms.ErmsImportState) |
156 | 157 |
*/ |
157 | 158 |
@Override |
158 | 159 |
protected void doInvoke(ErmsImportState state) { |
159 | 160 |
state.setAcceptedTaxaKeys(getAcceptedTaxaKeys(state)); |
160 |
|
|
161 |
|
|
161 | 162 |
//first path |
162 | 163 |
super.doInvoke(state); |
163 | 164 |
return; |
... | ... | |
180 | 181 |
" UNION SELECT DISTINCT %s FROM %s " + |
181 | 182 |
" UNION SELECT DISTINCT %s FROM %s " + |
182 | 183 |
" UNION SELECT DISTINCT %s FROM %s "; |
183 |
sql = String.format(sql,
|
|
184 |
parentCol, taxonTable,
|
|
185 |
idCol, taxonTable, accCol,
|
|
184 |
sql = String.format(sql, |
|
185 |
parentCol, taxonTable, |
|
186 |
idCol, taxonTable, accCol, |
|
186 | 187 |
accCol, taxonTable, |
187 | 188 |
tuFk, vernacularsTable, |
188 | 189 |
tuFk, distributionTable); |
... | ... | |
208 | 209 |
Class<?> cdmClass; |
209 | 210 |
Set<String> idSet; |
210 | 211 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>(); |
211 |
|
|
212 |
|
|
212 | 213 |
try{ |
213 | 214 |
Set<String> nameIdSet = new HashSet<String>(); |
214 | 215 |
Set<String> referenceIdSet = new HashSet<String>(); |
... | ... | |
228 | 229 |
} |
229 | 230 |
return result; |
230 | 231 |
} |
231 |
|
|
232 |
|
|
232 | 233 |
@Override |
233 | 234 |
public TaxonBase<?> createObject(ResultSet rs, ErmsImportState state) throws SQLException { |
234 | 235 |
int statusId = rs.getInt("status_id"); |
235 | 236 |
// Object accTaxonId = rs.getObject("tu_acctaxon"); |
236 | 237 |
Integer meId = rs.getInt("id"); |
237 |
|
|
238 |
|
|
238 | 239 |
String tuName = rs.getString("tu_name"); |
239 | 240 |
String displayName = rs.getString("tu_displayname"); |
240 |
|
|
241 |
|
|
241 | 242 |
String parent1Name = rs.getString("parent1name"); |
242 | 243 |
Integer parent1Rank = rs.getInt("parent1rank"); |
243 |
|
|
244 |
|
|
244 | 245 |
String parent2Name = rs.getString("parent2name"); |
245 | 246 |
Integer parent2Rank = rs.getInt("parent2rank"); |
246 |
|
|
247 |
|
|
247 | 248 |
String parent3Name = rs.getString("parent3name"); |
248 | 249 |
// Integer parent3Rank = rs.getInt("parent3rank"); |
249 |
|
|
250 |
|
|
250 | 251 |
NonViralName<?> taxonName = getTaxonName(rs, state); |
251 | 252 |
//set epithets |
252 | 253 |
if (taxonName.isGenus() || taxonName.isSupraGeneric()){ |
... | ... | |
275 | 276 |
logger.warn(warning); |
276 | 277 |
taxonName.setNameCache(tuName); |
277 | 278 |
} |
278 |
|
|
279 |
|
|
279 | 280 |
} |
280 | 281 |
//e.g. Leucon [Platyhelminthes] ornatus |
281 | 282 |
if (containsBrackets(displayName)){ |
282 | 283 |
taxonName.setNameCache(displayName); |
283 | 284 |
logger.warn("Set name cache: " + displayName + ";id =" + meId); |
284 | 285 |
} |
285 |
|
|
286 |
|
|
286 | 287 |
//add original source for taxon name (taxon original source is added in mapper |
287 |
Reference<?> citation = state.getTransactionalSourceReference();
|
|
288 |
Reference citation = state.getTransactionalSourceReference(); |
|
288 | 289 |
addOriginalSource(rs, taxonName, "id", NAME_NAMESPACE, citation); |
289 |
|
|
290 |
|
|
290 | 291 |
//old: if (statusId == 1){ |
291 | 292 |
if (state.getAcceptedTaxaKeys().contains(meId)){ |
292 | 293 |
Taxon result = Taxon.NewInstance(taxonName, citation); |
... | ... | |
305 | 306 |
private void handleNotAcceptedTaxon(Taxon taxon, int statusId, ErmsImportState state, ResultSet rs) throws SQLException { |
306 | 307 |
ExtensionType notAccExtensionType = getExtensionType(state, ErmsTransformer.uuidErmsTaxonStatus, "ERMS taxon status", "ERMS taxon status", "status", null); |
307 | 308 |
String statusName = rs.getString("status_name"); |
308 |
|
|
309 |
|
|
309 | 310 |
if (statusId > 1){ |
310 | 311 |
taxon.addExtension(statusName, notAccExtensionType); |
311 | 312 |
} |
... | ... | |
315 | 316 |
|
316 | 317 |
/** |
317 | 318 |
* @param parent1Rank |
318 |
* @param displayName
|
|
319 |
* @param taxonName
|
|
320 |
* @param meId
|
|
319 |
* @param displayName |
|
320 |
* @param taxonName |
|
321 |
* @param meId |
|
321 | 322 |
*/ |
322 | 323 |
private void handleException(Integer parent1Rank, NonViralName<?> taxonName, String displayName, Integer meId) { |
323 | 324 |
logger.warn("Parent of infra specific taxon is higher than species. Used nameCache: " + displayName + "; id=" + meId) ; |
... | ... | |
357 | 358 |
* Returns an empty Taxon Name instance according to the given rank and kingdom. |
358 | 359 |
* @param rs |
359 | 360 |
* @return |
360 |
* @throws SQLException
|
|
361 |
* @throws SQLException |
|
361 | 362 |
*/ |
362 | 363 |
private NonViralName<?> getTaxonName(ResultSet rs, ErmsImportState state) throws SQLException { |
363 | 364 |
NonViralName<?> result; |
364 | 365 |
Integer kingdomId = parseKingdomId(rs); |
365 | 366 |
Integer intRank = rs.getInt("tu_rank"); |
366 |
|
|
367 |
|
|
367 | 368 |
NomenclaturalCode nc = ErmsTransformer.kingdomId2NomCode(kingdomId); |
368 | 369 |
Rank rank = null; |
369 | 370 |
if (kingdomId != null){ |
... | ... | |
384 | 385 |
NonViralNameDefaultCacheStrategy<?> cacheStrategy = PesiTaxonExport.zooNameStrategy; |
385 | 386 |
result.setCacheStrategy(cacheStrategy); |
386 | 387 |
} |
387 |
|
|
388 |
|
|
388 | 389 |
return result; |
389 | 390 |
} |
390 | 391 |
|
391 | 392 |
/** |
392 |
* Returns the kingdom id by extracting it from the second character in the <code>tu_sp</code>
|
|
393 |
* Returns the kingdom id by extracting it from the second character in the <code>tu_sp</code> |
|
393 | 394 |
* attribute. If the attribute can not be parsed to a valid id <code>null</code> |
394 | 395 |
* is returned. If the attribute is <code>null</code> the id of the record is returned. |
395 | 396 |
* @param rs |
... | ... | |
402 | 403 |
if (treeString != null){ |
403 | 404 |
if (CdmUtils.isNotEmpty(treeString) && treeString.length() > 1){ |
404 | 405 |
String strKingdom = treeString.substring(1,2); |
405 |
|
|
406 |
|
|
406 | 407 |
if (! treeString.substring(0, 1).equals("#") && ! treeString.substring(2, 3).equals("#") ){ |
407 | 408 |
logger.warn("Tree string " + treeString + " has no recognized format"); |
408 | 409 |
}else{ |
... | ... | |
420 | 421 |
return result; |
421 | 422 |
} |
422 | 423 |
|
423 |
|
|
424 |
|
|
424 | 425 |
/* (non-Javadoc) |
425 | 426 |
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#doCheck(eu.etaxonomy.cdm.io.common.IImportConfigurator) |
426 | 427 |
*/ |
... | ... | |
429 | 430 |
IOValidator<ErmsImportState> validator = new ErmsTaxonImportValidator(); |
430 | 431 |
return validator.validate(state); |
431 | 432 |
} |
432 |
|
|
433 |
|
|
433 |
|
|
434 |
|
|
434 | 435 |
/* (non-Javadoc) |
435 | 436 |
* @see eu.etaxonomy.cdm.io.common.CdmIoBase#isIgnore(eu.etaxonomy.cdm.io.common.IImportConfigurator) |
436 | 437 |
*/ |
437 |
protected boolean isIgnore(ErmsImportState state){ |
|
438 |
@Override |
|
439 |
protected boolean isIgnore(ErmsImportState state){ |
|
438 | 440 |
return ! state.getConfig().isDoTaxa(); |
439 | 441 |
} |
440 | 442 |
|
Also available in: Unified diff
Remove generics from Reference in cdmlib-app #5830