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 |
*/
|
... | ... | |
64 |
64 |
private static final Logger logger = Logger.getLogger(BerlinModelTaxonRelationImport.class);
|
65 |
65 |
|
66 |
66 |
public static final String TREE_NAMESPACE = "PTRefFk";
|
67 |
|
|
|
67 |
|
68 |
68 |
private static int modCount = 30000;
|
69 |
69 |
private static final String pluralString = "taxon relations";
|
70 |
70 |
private static final String dbTableName = "RelPTaxon";
|
71 |
71 |
|
72 |
|
|
|
72 |
|
73 |
73 |
public BerlinModelTaxonRelationImport(){
|
74 |
74 |
super(dbTableName, pluralString);
|
75 |
75 |
}
|
... | ... | |
83 |
83 |
*/
|
84 |
84 |
private void makeClassifications(BerlinModelImportState state) throws SQLException{
|
85 |
85 |
logger.info("start make classification ...");
|
86 |
|
|
|
86 |
|
87 |
87 |
Set<String> idSet = getTreeReferenceIdSet(state);
|
88 |
88 |
|
89 |
89 |
//reference map
|
90 |
90 |
String nameSpace = BerlinModelReferenceImport.REFERENCE_NAMESPACE;
|
91 |
91 |
Class<?> cdmClass = Reference.class;
|
92 |
92 |
Map<String, Reference> refMap = (Map<String, Reference>)getCommonService().getSourcedObjectsByIdInSource(cdmClass, idSet, nameSpace);
|
93 |
|
|
|
93 |
|
94 |
94 |
String treeName = "Classification - No Name";
|
95 |
|
|
|
95 |
|
96 |
96 |
ResultSet rs = state.getConfig().getSource().getResultSet(getClassificationQuery(state)) ;
|
97 |
97 |
int i = 0;
|
98 |
98 |
//for each reference
|
99 |
99 |
try {
|
100 |
100 |
//TODO handle case useSingleClassification = true && sourceSecId = null, which returns no record
|
101 |
101 |
while (rs.next()){
|
102 |
|
|
|
102 |
|
103 |
103 |
try {
|
104 |
104 |
if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}
|
105 |
|
|
|
105 |
|
106 |
106 |
Integer ptRefFkInt = nullSafeInt(rs,"PTRefFk");
|
107 |
107 |
String ptRefFk= String.valueOf(ptRefFkInt);
|
108 |
108 |
Reference<?> ref = refMap.get(ptRefFk);
|
109 |
|
|
|
109 |
|
110 |
110 |
String refCache = rs.getString("RefCache");
|
111 |
111 |
if (StringUtils.isNotBlank(refCache)){
|
112 |
112 |
treeName = refCache;
|
... | ... | |
121 |
121 |
}
|
122 |
122 |
IdentifiableSource identifiableSource = IdentifiableSource.NewDataImportInstance(ptRefFk, TREE_NAMESPACE);
|
123 |
123 |
tree.addSource(identifiableSource);
|
124 |
|
|
|
124 |
|
125 |
125 |
getClassificationService().save(tree);
|
126 |
126 |
state.putClassificationUuidInt(ptRefFkInt, tree);
|
127 |
127 |
} catch (Exception e) {
|
... | ... | |
140 |
140 |
|
141 |
141 |
/**
|
142 |
142 |
* @return
|
143 |
|
* @throws SQLException
|
|
143 |
* @throws SQLException
|
144 |
144 |
*/
|
145 |
145 |
private Set<String> getTreeReferenceIdSet(BerlinModelImportState state) throws SQLException {
|
146 |
146 |
Source source = state.getConfig().getSource();
|
... | ... | |
158 |
158 |
*/
|
159 |
159 |
private String getClassificationQuery(BerlinModelImportState state) {
|
160 |
160 |
boolean includeAllClassifications = state.getConfig().isIncludeAllNonMisappliedRelatedClassifications();
|
161 |
|
String strQuerySelect = "SELECT PTaxon.PTRefFk, r.RefCache ";
|
162 |
|
String strQueryFrom = " FROM RelPTaxon " +
|
|
161 |
String strQuerySelect = "SELECT PTaxon.PTRefFk, r.RefCache ";
|
|
162 |
String strQueryFrom = " FROM RelPTaxon " +
|
163 |
163 |
" INNER JOIN PTaxon AS PTaxon ON RelPTaxon.PTNameFk2 = PTaxon.PTNameFk AND RelPTaxon.PTRefFk2 = PTaxon.PTRefFk " +
|
164 |
|
" INNER JOIN Reference r ON PTaxon.PTRefFk = r.RefId ";
|
165 |
|
String strQueryWhere = " WHERE (RelPTaxon.RelQualifierFk = 1) ";
|
|
164 |
" INNER JOIN Reference r ON PTaxon.PTRefFk = r.RefId ";
|
|
165 |
String strQueryWhere = " WHERE (RelPTaxon.RelQualifierFk = 1) ";
|
166 |
166 |
if (includeAllClassifications){
|
167 |
167 |
strQueryWhere = " WHERE (RelPTaxon.RelQualifierFk <> 3) ";
|
168 |
168 |
}else{
|
... | ... | |
174 |
174 |
}
|
175 |
175 |
}
|
176 |
176 |
}
|
177 |
|
|
|
177 |
|
178 |
178 |
String strQueryGroupBy = " GROUP BY PTaxon.PTRefFk, r.RefCache ";
|
179 |
179 |
String strQuery = strQuerySelect + " " + strQueryFrom + " " + strQueryWhere + " " + strQueryGroupBy;
|
180 |
|
|
181 |
|
|
|
180 |
|
|
181 |
|
182 |
182 |
if (includeAllClassifications){
|
183 |
183 |
//add otherdirection
|
184 |
|
strQuerySelect = "SELECT PTaxon.PTRefFk, r.RefCache ";
|
185 |
|
strQueryFrom = " FROM RelPTaxon rel " +
|
|
184 |
strQuerySelect = "SELECT PTaxon.PTRefFk, r.RefCache ";
|
|
185 |
strQueryFrom = " FROM RelPTaxon rel " +
|
186 |
186 |
" INNER JOIN PTaxon AS PTaxon ON rel.PTNameFk1 = PTaxon.PTNameFk AND rel.PTRefFk1 = PTaxon.PTRefFk " +
|
187 |
|
" INNER JOIN Reference r ON PTaxon.PTRefFk = r.RefId ";
|
|
187 |
" INNER JOIN Reference r ON PTaxon.PTRefFk = r.RefId ";
|
188 |
188 |
strQueryWhere =" WHERE (rel.RelQualifierFk <> 3) ";
|
189 |
189 |
String strAllQuery = strQuerySelect + " " + strQueryFrom + " " + strQueryWhere + " " + strQueryGroupBy;
|
190 |
190 |
strQuery = strQuery + " UNION " + strAllQuery;
|
191 |
191 |
}
|
192 |
|
|
193 |
|
|
194 |
|
|
|
192 |
|
|
193 |
|
|
194 |
|
195 |
195 |
boolean includeFlatClassifications = state.getConfig().isIncludeFlatClassifications();
|
196 |
|
//concepts with
|
|
196 |
//concepts with
|
197 |
197 |
if (includeFlatClassifications){
|
198 |
|
String strFlatQuery =
|
|
198 |
String strFlatQuery =
|
199 |
199 |
" SELECT pt.PTRefFk AS secRefFk, r.RefCache AS secRef " +
|
200 |
|
" FROM PTaxon AS pt LEFT OUTER JOIN " +
|
|
200 |
" FROM PTaxon AS pt LEFT OUTER JOIN " +
|
201 |
201 |
" Reference r ON pt.PTRefFk = r.RefId LEFT OUTER JOIN " +
|
202 |
202 |
" RelPTaxon rel1 ON pt.PTNameFk = rel1.PTNameFk2 AND pt.PTRefFk = rel1.PTRefFk2 LEFT OUTER JOIN " +
|
203 |
|
" RelPTaxon AS rel2 ON pt.PTNameFk = rel2.PTNameFk1 AND pt.PTRefFk = rel2.PTRefFk1 " +
|
204 |
|
" WHERE (rel2.RelQualifierFk IS NULL) AND (rel1.RelQualifierFk IS NULL) " +
|
|
203 |
" RelPTaxon AS rel2 ON pt.PTNameFk = rel2.PTNameFk1 AND pt.PTRefFk = rel2.PTRefFk1 " +
|
|
204 |
" WHERE (rel2.RelQualifierFk IS NULL) AND (rel1.RelQualifierFk IS NULL) " +
|
205 |
205 |
" GROUP BY pt.PTRefFk, r.RefCache "
|
206 |
206 |
;
|
207 |
|
|
|
207 |
|
208 |
208 |
strQuery = strQuery + " UNION " + strFlatQuery;
|
209 |
209 |
}
|
210 |
210 |
|
211 |
|
|
212 |
|
|
|
211 |
|
|
212 |
|
213 |
213 |
if (state.getConfig().getClassificationQuery() != null){
|
214 |
214 |
strQuery = state.getConfig().getClassificationQuery();
|
215 |
215 |
}
|
216 |
216 |
return strQuery;
|
217 |
217 |
}
|
218 |
|
|
|
218 |
|
219 |
219 |
@Override
|
220 |
220 |
protected String getRecordQuery(BerlinModelImportConfigurator config) {
|
221 |
|
String strQuery =
|
222 |
|
" SELECT RelPTaxon.*, FromTaxon.RIdentifier as taxon1Id, ToTaxon.RIdentifier as taxon2Id, ToTaxon.PTRefFk as treeRefFk, FromTaxon.PTRefFk as fromRefFk, q.is_concept_relation " +
|
|
221 |
String strQuery =
|
|
222 |
" SELECT RelPTaxon.*, FromTaxon.RIdentifier as taxon1Id, ToTaxon.RIdentifier as taxon2Id, ToTaxon.PTRefFk as treeRefFk, FromTaxon.PTRefFk as fromRefFk, q.is_concept_relation " +
|
223 |
223 |
" FROM PTaxon as FromTaxon " +
|
224 |
224 |
" INNER JOIN RelPTaxon ON FromTaxon.PTNameFk = RelPTaxon.PTNameFk1 AND FromTaxon.PTRefFk = RelPTaxon.PTRefFk1 " +
|
225 |
225 |
" INNER JOIN PTaxon AS ToTaxon ON RelPTaxon.PTNameFk2 = ToTaxon.PTNameFk AND RelPTaxon.PTRefFk2 = ToTaxon.PTRefFk " +
|
226 |
|
" INNER JOIN RelPTQualifier q ON q.RelPTQualifierId = RelPTaxon.RelQualifierFk " +
|
|
226 |
" INNER JOIN RelPTQualifier q ON q.RelPTQualifierId = RelPTaxon.RelQualifierFk " +
|
227 |
227 |
" WHERE RelPTaxon.RelPTaxonId IN ("+ID_LIST_TOKEN+") ORDER BY RelPTaxon.RelPTaxonId ";
|
228 |
228 |
return strQuery;
|
229 |
229 |
}
|
... | ... | |
233 |
233 |
boolean success = true ;
|
234 |
234 |
BerlinModelImportConfigurator config = state.getConfig();
|
235 |
235 |
Set<TaxonBase> taxaToSave = new HashSet<TaxonBase>();
|
236 |
|
Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>) partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
|
|
236 |
Map<String, TaxonBase> taxonMap = partitioner.getObjectMap(BerlinModelTaxonImport.NAMESPACE);
|
237 |
237 |
Map<Integer, Classification> classificationMap = new HashMap<Integer, Classification>();
|
238 |
|
Map<String, Reference> refMap = (Map<String, Reference>)partitioner.getObjectMap(BerlinModelReferenceImport.REFERENCE_NAMESPACE);
|
|
238 |
Map<String, Reference> refMap = partitioner.getObjectMap(BerlinModelReferenceImport.REFERENCE_NAMESPACE);
|
239 |
239 |
|
240 |
240 |
ResultSet rs = partitioner.getResultSet();
|
241 |
|
|
|
241 |
|
242 |
242 |
try{
|
243 |
243 |
int i = 0;
|
244 |
244 |
//for each reference
|
245 |
245 |
while (rs.next()){
|
246 |
|
|
|
246 |
|
247 |
247 |
if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}
|
248 |
|
|
|
248 |
|
249 |
249 |
int relPTaxonId = rs.getInt("RelPTaxonId");
|
250 |
250 |
Integer taxon1Id = nullSafeInt(rs, "taxon1Id");
|
251 |
251 |
Integer taxon2Id = nullSafeInt(rs, "taxon2Id");
|
... | ... | |
253 |
253 |
Integer relRefFk = nullSafeInt(rs,"relRefFk");
|
254 |
254 |
int treeRefFk = rs.getInt("treeRefFk");
|
255 |
255 |
int fromRefFk = rs.getInt("fromRefFk");
|
256 |
|
|
|
256 |
|
257 |
257 |
int relQualifierFk = rs.getInt("relQualifierFk");
|
258 |
258 |
String notes = rs.getString("notes");
|
259 |
259 |
boolean isConceptRelationship = rs.getBoolean("is_concept_relation");
|
260 |
|
|
|
260 |
|
261 |
261 |
TaxonBase<?> taxon1 = taxonMap.get(String.valueOf(taxon1Id));
|
262 |
262 |
TaxonBase<?> taxon2 = taxonMap.get(String.valueOf(taxon2Id));
|
263 |
|
|
|
263 |
|
264 |
264 |
String refFk = String.valueOf(relRefFk);
|
265 |
265 |
Reference<?> citation = refMap.get(refFk);
|
266 |
|
|
|
266 |
|
267 |
267 |
String microcitation = null; //does not exist in RelPTaxon
|
268 |
268 |
|
269 |
269 |
if (taxon2 != null && taxon1 != null){
|
... | ... | |
300 |
300 |
Synonym synonym = (Synonym)taxon1;
|
301 |
301 |
SynonymRelationship synRel = getSynRel(relQualifierFk, toTaxon, synonym, citation, microcitation);
|
302 |
302 |
taxonRelationship = synRel;
|
303 |
|
|
304 |
|
if (relQualifierFk == TAX_REL_IS_SYNONYM_OF ||
|
|
303 |
|
|
304 |
if (relQualifierFk == TAX_REL_IS_SYNONYM_OF ||
|
305 |
305 |
relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||
|
306 |
306 |
relQualifierFk == TAX_REL_IS_HETEROTYPIC_SYNONYM_OF){
|
307 |
307 |
addProParteAndPartial(synRel, synonym, config);
|
... | ... | |
309 |
309 |
relQualifierFk == TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF ||
|
310 |
310 |
relQualifierFk == TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF ){
|
311 |
311 |
synRel.setProParte(true);
|
312 |
|
}else if(relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF ||
|
|
312 |
}else if(relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF ||
|
313 |
313 |
relQualifierFk == TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF ||
|
314 |
314 |
relQualifierFk == TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF ){
|
315 |
315 |
synRel.setPartial(true);
|
... | ... | |
321 |
321 |
ResultWrapper<Boolean> isInverse = ResultWrapper.NewInstance(false);
|
322 |
322 |
ResultWrapper<Boolean> isDoubtful = ResultWrapper.NewInstance(false);
|
323 |
323 |
try {
|
324 |
|
TaxonRelationshipType relType = BerlinModelTransformer.taxonRelId2TaxonRelType(relQualifierFk, isInverse, isDoubtful);
|
|
324 |
TaxonRelationshipType relType = BerlinModelTransformer.taxonRelId2TaxonRelType(relQualifierFk, isInverse, isDoubtful);
|
325 |
325 |
|
326 |
326 |
if (! (taxon1 instanceof Taxon)){
|
327 |
327 |
success = false;
|
... | ... | |
338 |
338 |
handleAllRelatedTaxa(state, fromTaxon, classificationMap, fromRefFk);
|
339 |
339 |
if (isDoubtful.getValue() == true){
|
340 |
340 |
((TaxonRelationship)taxonRelationship).setDoubtful(true);
|
341 |
|
}
|
|
341 |
}
|
342 |
342 |
}
|
343 |
343 |
} catch (UnknownCdmTypeException e) {
|
344 |
344 |
logger.warn("TaxonRelationShipType " + relQualifierFk + " (conceptRelationship) not yet implemented");
|
... | ... | |
348 |
348 |
logger.warn("TaxonRelationShipType " + relQualifierFk + " not yet implemented: RelPTaxonId = " + relPTaxonId );
|
349 |
349 |
success = false;
|
350 |
350 |
}
|
351 |
|
|
|
351 |
|
352 |
352 |
doNotes(taxonRelationship, notes);
|
353 |
353 |
taxaToSave.add(taxon2);
|
354 |
|
|
|
354 |
|
355 |
355 |
//TODO
|
356 |
356 |
//etc.
|
357 |
357 |
}else{
|
... | ... | |
362 |
362 |
}else{
|
363 |
363 |
logger.warn("Both taxa ("+taxon1Id+","+taxon2Id +") for RelPTaxon " + relPTaxonId + " do not exist in store. RelType: " + relQualifierFk);
|
364 |
364 |
}
|
365 |
|
|
|
365 |
|
366 |
366 |
success = false;
|
367 |
367 |
}
|
368 |
368 |
} catch (Exception e) {
|
369 |
369 |
logger.error("Exception occurred when trying to handle taxon relationship " + relPTaxonId + " (" + taxon1Id + ","+ taxon2Id + "): " + e.getMessage());
|
370 |
|
// e.printStackTrace();
|
|
370 |
e.printStackTrace();
|
371 |
371 |
}
|
372 |
372 |
}
|
373 |
373 |
}catch(SQLException e){
|
... | ... | |
378 |
378 |
getTaxonService().saveOrUpdate(taxaToSave);
|
379 |
379 |
classificationMap = null;
|
380 |
380 |
taxaToSave = null;
|
381 |
|
|
|
381 |
|
382 |
382 |
return success;
|
383 |
383 |
}
|
384 |
|
|
|
384 |
|
385 |
385 |
|
386 |
386 |
private void handleAllRelatedTaxa(BerlinModelImportState state, Taxon taxon, Map<Integer, Classification> classificationMap, Integer secRefFk) {
|
387 |
387 |
if (taxon.getTaxonNodes().size() > 0){
|
... | ... | |
393 |
393 |
}
|
394 |
394 |
|
395 |
395 |
@Override
|
396 |
|
protected void doInvoke(BerlinModelImportState state){
|
|
396 |
protected void doInvoke(BerlinModelImportState state){
|
397 |
397 |
try {
|
398 |
398 |
makeClassifications(state);
|
399 |
399 |
super.doInvoke(state);
|
... | ... | |
402 |
402 |
} catch (SQLException e) {
|
403 |
403 |
throw new RuntimeException(e);
|
404 |
404 |
}
|
405 |
|
|
|
405 |
|
406 |
406 |
}
|
407 |
|
|
408 |
|
|
|
407 |
|
|
408 |
|
409 |
409 |
private void makeFlatClassificationTaxa(BerlinModelImportState state) {
|
410 |
410 |
//Note: this part still does not use partitions
|
411 |
411 |
logger.info("Flat classifications start");
|
... | ... | |
421 |
421 |
" ORDER BY pt.PTRefFk " ;
|
422 |
422 |
ResultSet rs = state.getConfig().getSource().getResultSet(sql);
|
423 |
423 |
Map<Object, Map<String, ? extends CdmBase>> maps = getRelatedObjectsForFlatPartition(rs);
|
424 |
|
|
|
424 |
|
425 |
425 |
Map<String, TaxonBase> taxonMap = (Map<String, TaxonBase>) maps.get(BerlinModelTaxonImport.NAMESPACE);
|
426 |
426 |
Map<Integer, Classification> classificationMap = new HashMap<Integer, Classification>();
|
427 |
|
|
|
427 |
|
428 |
428 |
rs = state.getConfig().getSource().getResultSet(sql);
|
429 |
429 |
try {
|
430 |
430 |
while (rs.next()){
|
... | ... | |
448 |
448 |
}
|
449 |
449 |
commitTransaction(txStatus);
|
450 |
450 |
logger.info("Flat classifications end");
|
451 |
|
|
|
451 |
|
452 |
452 |
}
|
453 |
453 |
|
454 |
454 |
@Override
|
... | ... | |
459 |
459 |
return super.getIdQuery(state);
|
460 |
460 |
}
|
461 |
461 |
}
|
462 |
|
|
|
462 |
|
463 |
463 |
@Override
|
464 |
464 |
public Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForPartition( ResultSet rs, BerlinModelImportState state) {
|
465 |
465 |
String nameSpace;
|
466 |
466 |
Class<?> cdmClass;
|
467 |
467 |
Set<String> idSet;
|
468 |
468 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
|
469 |
|
|
|
469 |
|
470 |
470 |
try{
|
471 |
471 |
Set<String> taxonIdSet = new HashSet<String>();
|
472 |
472 |
Set<String> referenceIdSet = new HashSet<String>();
|
... | ... | |
477 |
477 |
// handleForeignKey(rs, classificationIdSet, "treeRefFk");
|
478 |
478 |
handleForeignKey(rs, referenceIdSet, "RelRefFk");
|
479 |
479 |
}
|
480 |
|
|
|
480 |
|
481 |
481 |
//taxon map
|
482 |
482 |
nameSpace = BerlinModelTaxonImport.NAMESPACE;
|
483 |
483 |
cdmClass = TaxonBase.class;
|
... | ... | |
493 |
493 |
// result.put(cdmClass, treeMap);
|
494 |
494 |
// Set<UUID> treeUuidSet = state
|
495 |
495 |
// getClassificationService().find(uuidSet);
|
496 |
|
//
|
|
496 |
//
|
497 |
497 |
//reference map
|
498 |
498 |
nameSpace = BerlinModelReferenceImport.REFERENCE_NAMESPACE;
|
499 |
499 |
cdmClass = Reference.class;
|
... | ... | |
506 |
506 |
}
|
507 |
507 |
return result;
|
508 |
508 |
}
|
509 |
|
|
|
509 |
|
510 |
510 |
|
511 |
511 |
private Map<Object, Map<String, ? extends CdmBase>> getRelatedObjectsForFlatPartition( ResultSet rs) {
|
512 |
512 |
String nameSpace;
|
513 |
513 |
Class cdmClass;
|
514 |
514 |
Set<String> idSet;
|
515 |
515 |
Map<Object, Map<String, ? extends CdmBase>> result = new HashMap<Object, Map<String, ? extends CdmBase>>();
|
516 |
|
|
|
516 |
|
517 |
517 |
try{
|
518 |
518 |
Set<String> taxonIdSet = new HashSet<String>();
|
519 |
519 |
Set<String> referenceIdSet = new HashSet<String>();
|
... | ... | |
522 |
522 |
handleForeignKey(rs, taxonIdSet, "RIdentifier");
|
523 |
523 |
// handleForeignKey(rs, classificationIdSet, "treeRefFk");
|
524 |
524 |
}
|
525 |
|
|
|
525 |
|
526 |
526 |
//taxon map
|
527 |
527 |
nameSpace = BerlinModelTaxonImport.NAMESPACE;
|
528 |
528 |
cdmClass = TaxonBase.class;
|
... | ... | |
538 |
538 |
// result.put(cdmClass, treeMap);
|
539 |
539 |
// Set<UUID> treeUuidSet = state
|
540 |
540 |
// getClassificationService().find(uuidSet);
|
541 |
|
//
|
|
541 |
//
|
542 |
542 |
|
543 |
543 |
} catch (SQLException e) {
|
544 |
544 |
throw new RuntimeException(e);
|
... | ... | |
568 |
568 |
return result;
|
569 |
569 |
|
570 |
570 |
}
|
571 |
|
|
|
571 |
|
572 |
572 |
private boolean isSynonymRelationship(int relQualifierFk){
|
573 |
|
if (relQualifierFk == TAX_REL_IS_SYNONYM_OF ||
|
574 |
|
relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||
|
|
573 |
if (relQualifierFk == TAX_REL_IS_SYNONYM_OF ||
|
|
574 |
relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||
|
575 |
575 |
relQualifierFk == TAX_REL_IS_HETEROTYPIC_SYNONYM_OF ||
|
576 |
|
relQualifierFk == TAX_REL_IS_PROPARTE_SYN_OF ||
|
|
576 |
relQualifierFk == TAX_REL_IS_PROPARTE_SYN_OF ||
|
577 |
577 |
relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF ||
|
578 |
578 |
relQualifierFk == TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF ||
|
579 |
579 |
relQualifierFk == TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF ||
|
... | ... | |
585 |
585 |
return false;
|
586 |
586 |
}
|
587 |
587 |
}
|
588 |
|
|
|
588 |
|
589 |
589 |
private boolean isTaxonRelationship(int relQualifierFk){
|
590 |
|
if (relQualifierFk == TAX_REL_IS_INCLUDED_IN ||
|
|
590 |
if (relQualifierFk == TAX_REL_IS_INCLUDED_IN ||
|
591 |
591 |
relQualifierFk == TAX_REL_IS_MISAPPLIED_NAME_OF){
|
592 |
592 |
return true;
|
593 |
593 |
}else{
|
594 |
594 |
return false;
|
595 |
595 |
}
|
596 |
596 |
}
|
597 |
|
|
|
597 |
|
598 |
598 |
private void addProParteAndPartial(SynonymRelationship synRel, Synonym synonym, BerlinModelImportConfigurator bmiConfig){
|
599 |
599 |
if (bmiConfig.isPartialSynonym(synonym)){
|
600 |
600 |
synRel.setPartial(true);
|
... | ... | |
603 |
603 |
synRel.setProParte(true);
|
604 |
604 |
}
|
605 |
605 |
}
|
606 |
|
|
|
606 |
|
607 |
607 |
private TaxonNode makeTaxonomicallyIncluded(BerlinModelImportState state, Map<Integer, Classification> classificationMap, int treeRefFk, Taxon child, Taxon parent, Reference citation, String microCitation){
|
608 |
608 |
Classification tree = getClassificationTree(state, classificationMap, treeRefFk);
|
609 |
609 |
return tree.addParentChild(parent, child, citation, microCitation);
|
... | ... | |
612 |
612 |
private Classification getClassificationTree(BerlinModelImportState state, Map<Integer, Classification> classificationMap, int treeRefFk) {
|
613 |
613 |
if (state.getConfig().isUseSingleClassification()){
|
614 |
614 |
if (state.getConfig().getSourceSecId() != null){
|
615 |
|
treeRefFk = (Integer)state.getConfig().getSourceSecId();
|
|
615 |
treeRefFk = (Integer)state.getConfig().getSourceSecId();
|
616 |
616 |
}else{
|
617 |
617 |
treeRefFk = 1;
|
618 |
618 |
}
|
619 |
|
|
|
619 |
|
620 |
620 |
}
|
621 |
621 |
Classification tree = classificationMap.get(treeRefFk);
|
622 |
622 |
if (tree == null){
|
... | ... | |
629 |
629 |
}
|
630 |
630 |
return tree;
|
631 |
631 |
}
|
632 |
|
|
|
632 |
|
633 |
633 |
@Override
|
634 |
634 |
protected boolean doCheck(BerlinModelImportState state){
|
635 |
635 |
IOValidator<BerlinModelImportState> validator = new BerlinModelTaxonRelationImportValidator();
|
636 |
636 |
return validator.validate(state);
|
637 |
637 |
}
|
638 |
|
|
|
638 |
|
639 |
639 |
@Override
|
640 |
640 |
protected boolean isIgnore(BerlinModelImportState state){
|
641 |
641 |
return ! state.getConfig().isDoRelTaxa();
|
642 |
642 |
}
|
643 |
643 |
|
644 |
|
|
|
644 |
|
645 |
645 |
}
|
Improve E+M-Activator and E+M occurrence import