try {\r
while (rs.next()){\r
\r
- if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}\r
- \r
- Object ptRefFkObj = rs.getObject("PTRefFk");\r
- String ptRefFk= String.valueOf(ptRefFkObj);\r
- Reference<?> ref = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, ptRefFk);\r
- \r
- rs.getString("RefCache");\r
- String treeName = "Classification - No Name";\r
- String refCache = rs.getString("RefCache");\r
- if (CdmUtils.isNotEmpty(refCache)){\r
- treeName = refCache;\r
- }\r
- if (ref != null && CdmUtils.isNotEmpty(ref.getTitleCache())){\r
- treeName = ref.getTitleCache();\r
- }\r
- Classification tree = Classification.NewInstance(treeName);\r
- tree.setReference(ref);\r
- if (i == 1 && state.getConfig().getClassificationUuid() != null){\r
- tree.setUuid(state.getConfig().getClassificationUuid());\r
+ try {\r
+ if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}\r
+ \r
+ Object ptRefFkObj = rs.getObject("PTRefFk");\r
+ String ptRefFk= String.valueOf(ptRefFkObj);\r
+ Reference<?> ref = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, ptRefFk);\r
+ \r
+ rs.getString("RefCache");\r
+ String treeName = "Classification - No Name";\r
+ String refCache = rs.getString("RefCache");\r
+ if (CdmUtils.isNotEmpty(refCache)){\r
+ treeName = refCache;\r
+ }\r
+ if (ref != null && CdmUtils.isNotEmpty(ref.getTitleCache())){\r
+ treeName = ref.getTitleCache();\r
+ }\r
+ Classification tree = Classification.NewInstance(treeName);\r
+ tree.setReference(ref);\r
+ if (i == 1 && state.getConfig().getClassificationUuid() != null){\r
+ tree.setUuid(state.getConfig().getClassificationUuid());\r
+ }\r
+ IdentifiableSource identifiableSource = IdentifiableSource.NewInstance(ptRefFk, TREE_NAMESPACE);\r
+ tree.addSource(identifiableSource);\r
+ \r
+ getClassificationService().save(tree);\r
+ state.putClassificationUuidInt((Integer)ptRefFkObj, tree);\r
+ } catch (Exception e) {\r
+ logger.error("Error in BerlinModleTaxonRelationImport.makeClassifications: " + e.getMessage());\r
+ e.printStackTrace();\r
}\r
- IdentifiableSource identifiableSource = IdentifiableSource.NewInstance(ptRefFk, TREE_NAMESPACE);\r
- tree.addSource(identifiableSource);\r
- \r
- getClassificationService().save(tree);\r
- state.putClassificationUuidInt((Integer)ptRefFkObj, tree);\r
}\r
} catch (SQLException e) {\r
logger.error("Error in BerlinModleTaxonRelationImport.makeClassifications: " + e.getMessage());\r
while (rs.next()){\r
\r
if ((i++ % modCount) == 0 && i!= 1 ){ logger.info("RelPTaxa handled: " + (i-1));}\r
- \r
+ \r
int relPTaxonId = rs.getInt("RelPTaxonId");\r
- int taxon1Id = rs.getInt("taxon1Id");\r
- int taxon2Id = rs.getInt("taxon2Id");\r
- Object relRefFkObj = rs.getObject("relRefFk");\r
- int treeRefFk = rs.getInt("treeRefFk");\r
- int relQualifierFk = rs.getInt("relQualifierFk");\r
- String notes = rs.getString("notes");\r
- boolean isConceptRelationship = rs.getBoolean("is_concept_relation");\r
- \r
- TaxonBase taxon1 = taxonMap.get(String.valueOf(taxon1Id));\r
- TaxonBase taxon2 = taxonMap.get(String.valueOf(taxon2Id));\r
- \r
- String refFk = String.valueOf(relRefFkObj);\r
- Reference citation = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, refFk);\r
- \r
- String microcitation = null; //does not exist in RelPTaxon\r
- \r
- if (taxon2 != null && taxon1 != null){\r
- if (!(taxon2 instanceof Taxon)){\r
- logger.error("TaxonBase (ID = " + taxon2.getId()+ ", RIdentifier = " + taxon2Id + ") can't be casted to Taxon");\r
- success = false;\r
- continue;\r
- }\r
- AnnotatableEntity taxonRelationship = null;\r
- Taxon toTaxon = (Taxon)taxon2;\r
- if (isTaxonRelationship(relQualifierFk)){\r
- if (!(taxon1 instanceof Taxon)){\r
- logger.error("TaxonBase (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Taxon");\r
- success = false;\r
- continue;\r
- }\r
- Taxon fromTaxon = (Taxon)taxon1;\r
- if (relQualifierFk == TAX_REL_IS_INCLUDED_IN){\r
- taxonRelationship = makeTaxonomicallyIncluded(state, classificationMap, treeRefFk, fromTaxon, toTaxon, citation, microcitation);\r
- }else if (relQualifierFk == TAX_REL_IS_MISAPPLIED_NAME_OF){\r
- taxonRelationship = toTaxon.addMisappliedName(fromTaxon, citation, microcitation);\r
- }\r
- }else if (isSynonymRelationship(relQualifierFk)){\r
- if (!(taxon1 instanceof Synonym)){\r
- logger.error("Taxon (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Synonym");\r
+ try {\r
+ int taxon1Id = rs.getInt("taxon1Id");\r
+ int taxon2Id = rs.getInt("taxon2Id");\r
+ Object relRefFkObj = rs.getObject("relRefFk");\r
+ int treeRefFk = rs.getInt("treeRefFk");\r
+ int relQualifierFk = rs.getInt("relQualifierFk");\r
+ String notes = rs.getString("notes");\r
+ boolean isConceptRelationship = rs.getBoolean("is_concept_relation");\r
+ \r
+ TaxonBase taxon1 = taxonMap.get(String.valueOf(taxon1Id));\r
+ TaxonBase taxon2 = taxonMap.get(String.valueOf(taxon2Id));\r
+ \r
+ String refFk = String.valueOf(relRefFkObj);\r
+ Reference citation = getReferenceOnlyFromMaps(biblioRefMap, nomRefMap, refFk);\r
+ \r
+ String microcitation = null; //does not exist in RelPTaxon\r
+\r
+ if (taxon2 != null && taxon1 != null){\r
+ if (!(taxon2 instanceof Taxon)){\r
+ logger.error("TaxonBase (ID = " + taxon2.getId()+ ", RIdentifier = " + taxon2Id + ") can't be casted to Taxon");\r
success = false;\r
continue;\r
}\r
- Synonym synonym = (Synonym)taxon1;\r
- SynonymRelationship synRel = getSynRel(relQualifierFk, toTaxon, synonym, citation, microcitation);\r
- taxonRelationship = synRel;\r
- \r
- if (relQualifierFk == TAX_REL_IS_SYNONYM_OF || \r
- relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||\r
- relQualifierFk == TAX_REL_IS_HETEROTYPIC_SYNONYM_OF){\r
- addProParteAndPartial(synRel, synonym, config);\r
- }else if (relQualifierFk == TAX_REL_IS_PROPARTE_SYN_OF ||\r
- relQualifierFk == TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF ||\r
- relQualifierFk == TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF ){\r
- synRel.setProParte(true);\r
- }else if(relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF || \r
- relQualifierFk == TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF ||\r
- relQualifierFk == TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF ){\r
- synRel.setPartial(true);\r
- }else{\r
- success = false;\r
- logger.warn("Proparte/Partial not yet implemented for TaxonRelationShipType " + relQualifierFk);\r
- }\r
- }else if (isConceptRelationship){\r
- ResultWrapper<Boolean> isInverse = new ResultWrapper<Boolean>();\r
- try {\r
- TaxonRelationshipType relType = BerlinModelTransformer.taxonRelId2TaxonRelType(relQualifierFk, isInverse); \r
- if (! (taxon1 instanceof Taxon)){\r
- success = false;\r
+ AnnotatableEntity taxonRelationship = null;\r
+ Taxon toTaxon = (Taxon)taxon2;\r
+ if (isTaxonRelationship(relQualifierFk)){\r
+ if (!(taxon1 instanceof Taxon)){\r
logger.error("TaxonBase (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Taxon");\r
+ success = false;\r
+ continue;\r
+ }\r
+ Taxon fromTaxon = (Taxon)taxon1;\r
+ if (relQualifierFk == TAX_REL_IS_INCLUDED_IN){\r
+ taxonRelationship = makeTaxonomicallyIncluded(state, classificationMap, treeRefFk, fromTaxon, toTaxon, citation, microcitation);\r
+ }else if (relQualifierFk == TAX_REL_IS_MISAPPLIED_NAME_OF){\r
+ taxonRelationship = toTaxon.addMisappliedName(fromTaxon, citation, microcitation);\r
+ }\r
+ }else if (isSynonymRelationship(relQualifierFk)){\r
+ if (!(taxon1 instanceof Synonym)){\r
+ logger.warn("Validated: Taxon (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Synonym");\r
+ success = false;\r
+ continue;\r
+ }\r
+ Synonym synonym = (Synonym)taxon1;\r
+ SynonymRelationship synRel = getSynRel(relQualifierFk, toTaxon, synonym, citation, microcitation);\r
+ taxonRelationship = synRel;\r
+ \r
+ if (relQualifierFk == TAX_REL_IS_SYNONYM_OF || \r
+ relQualifierFk == TAX_REL_IS_HOMOTYPIC_SYNONYM_OF ||\r
+ relQualifierFk == TAX_REL_IS_HETEROTYPIC_SYNONYM_OF){\r
+ addProParteAndPartial(synRel, synonym, config);\r
+ }else if (relQualifierFk == TAX_REL_IS_PROPARTE_SYN_OF ||\r
+ relQualifierFk == TAX_REL_IS_PROPARTE_HOMOTYPIC_SYNONYM_OF ||\r
+ relQualifierFk == TAX_REL_IS_PROPARTE_HETEROTYPIC_SYNONYM_OF ){\r
+ synRel.setProParte(true);\r
+ }else if(relQualifierFk == TAX_REL_IS_PARTIAL_SYN_OF || \r
+ relQualifierFk == TAX_REL_IS_PARTIAL_HOMOTYPIC_SYNONYM_OF ||\r
+ relQualifierFk == TAX_REL_IS_PARTIAL_HETEROTYPIC_SYNONYM_OF ){\r
+ synRel.setPartial(true);\r
}else{\r
- Taxon fromTaxon = (Taxon)taxon1;\r
- taxonRelationship = fromTaxon.addTaxonRelation(toTaxon, relType, citation, microcitation);\r
+ success = false;\r
+ logger.warn("Proparte/Partial not yet implemented for TaxonRelationShipType " + relQualifierFk);\r
+ }\r
+ }else if (isConceptRelationship){\r
+ ResultWrapper<Boolean> isInverse = new ResultWrapper<Boolean>();\r
+ try {\r
+ TaxonRelationshipType relType = BerlinModelTransformer.taxonRelId2TaxonRelType(relQualifierFk, isInverse); \r
+ if (! (taxon1 instanceof Taxon)){\r
+ success = false;\r
+ logger.error("TaxonBase (ID = " + taxon1.getId()+ ", RIdentifier = " + taxon1Id + ") can't be casted to Taxon");\r
+ }else{\r
+ Taxon fromTaxon = (Taxon)taxon1;\r
+ taxonRelationship = fromTaxon.addTaxonRelation(toTaxon, relType, citation, microcitation);\r
+ }\r
+ } catch (UnknownCdmTypeException e) {\r
+ //TODO other relationships\r
+ logger.warn("TaxonRelationShipType " + relQualifierFk + " (conceptRelationship) not yet implemented");\r
+ success = false;\r
}\r
- } catch (UnknownCdmTypeException e) {\r
- //TODO other relationships\r
- logger.warn("TaxonRelationShipType " + relQualifierFk + " (conceptRelationship) not yet implemented");\r
+ }else {\r
+ //TODO\r
+ logger.warn("TaxonRelationShipType " + relQualifierFk + " not yet implemented");\r
success = false;\r
}\r
- }else {\r
+ \r
+ doNotes(taxonRelationship, notes);\r
+ taxaToSave.add(taxon2);\r
+ \r
+ //TODO\r
+ //etc.\r
+ }else{\r
//TODO\r
- logger.warn("TaxonRelationShipType " + relQualifierFk + " not yet implemented");\r
+ logger.warn("Taxa for RelPTaxon " + relPTaxonId + " do not exist in store");\r
success = false;\r
}\r
- \r
- doNotes(taxonRelationship, notes);\r
- taxaToSave.add(taxon2);\r
- \r
- //TODO\r
- //etc.\r
- }else{\r
- //TODO\r
- logger.warn("Taxa for RelPTaxon " + relPTaxonId + " do not exist in store");\r
- success = false;\r
+ } catch (Exception e) {\r
+ logger.error("Exception occurred when trying to handle taxon relationship " + relPTaxonId + ":" + e.getMessage());\r
+// e.printStackTrace();\r
}\r
}\r
}catch(SQLException e){\r
*/\r
public boolean validate(BerlinModelImportState state) {\r
boolean result = true;\r
- BerlinModelImportConfigurator bmiConfig = state.getConfig();\r
- logger.warn("Checking for TaxonRelations not yet fully implemented");\r
- result &= checkInActivatedStatus(bmiConfig);\r
- \r
+ result &= checkInActivatedStatus(state);\r
+ result &= checkSynonymRelationsWithAcceptedTaxa(state);\r
+ result &= checkRelPTaxonWithNotes(state);\r
return result;\r
}\r
\r
\r
- private boolean checkInActivatedStatus(BerlinModelImportConfigurator bmiConfig){\r
+ private boolean checkInActivatedStatus(BerlinModelImportState state){\r
try {\r
boolean result = true;\r
- Source source = bmiConfig.getSource();\r
+ Source source = state.getConfig().getSource();\r
String strSQL = \r
" SELECT RelPTaxon.RelPTaxonId, RelPTaxon.RelQualifierFk, FromName.FullNameCache AS FromName, RelPTaxon.PTNameFk1 AS FromNameID, " +\r
" Status.Status AS FromStatus, ToName.FullNameCache AS ToName, RelPTaxon.PTNameFk2 AS ToNameId, ToStatus.Status AS ToStatus, FromTaxon.DoubtfulFlag AS doubtfulFrom, ToTaxon.DoubtfulFlag AS doubtfulTo" + \r
logger.warn("There are " + n + " RelPTaxa with a note. Notes for RelPTaxa are not imported!");\r
System.out.println("========================================================");\r
success = false;\r
+ \r
+ }\r
+ } catch (SQLException e) {\r
+ e.printStackTrace();\r
+ }\r
+ return success;\r
+ }\r
+ \r
+ /**\r
+ * @param state\r
+ * @return\r
+ */\r
+ private boolean checkSynonymRelationsWithAcceptedTaxa(BerlinModelImportState state) {\r
+ boolean success = true;\r
+ try {\r
+ \r
+ Source source = state.getConfig().getSource();\r
+ String strQuery = \r
+ "SELECT RelPTaxon.RelPTaxonId, RelPTQualifier, PTaxon.RIdentifier, Name.FullNameCache fromName, PTaxon.PTRefFk, Name.NameId as fromNameId, AcceptedName.FullNameCache acceptedName" +\r
+ " FROM RelPTaxon INNER JOIN PTaxon ON RelPTaxon.PTNameFk1 = PTaxon.PTNameFk AND RelPTaxon.PTRefFk1 = PTaxon.PTRefFk " +\r
+ " INNER JOIN RelPTQualifier ON RelPTaxon.RelQualifierFk = RelPTQualifier.RelPTQualifierId " +\r
+ " LEFT OUTER JOIN Name ON PTaxon.PTNameFk = Name.NameId " +\r
+ " LEFT OUTER JOIN Name AS AcceptedName ON RelPTaxon.PTNameFk2 = AcceptedName.NameId " +\r
+ " WHERE (PTaxon.StatusFk = 1) AND (RelPTaxon.RelQualifierFk IN (2, 4, 5, 6, 7))";\r
+ ResultSet rs = source.getResultSet(strQuery);\r
+ boolean firstRow = true;\r
+ int i = 0;\r
+ while (rs.next()){\r
+ i++;\r
+ if (firstRow){\r
+ System.out.println("========================================================");\r
+ logger.warn("There are accepted taxa being synonyms in a synonym relationship!");\r
+ System.out.println("========================================================");\r
+ }\r
+\r
+ int relPTaxonId = rs.getInt("RelPTaxonId");\r
+ String relType = rs.getString("RelPTQualifier");\r
+ int fromIdentifier = rs.getInt("RIdentifier");\r
+ String fromName = rs.getString("fromName");\r
+ int fromRefFk = rs.getInt("PTRefFk");\r
+ int fromNameId = rs.getInt("fromNameId");\r
+// String fromStatus = rs.getString("FromStatus");\r
+ \r
+ \r
+ String toName = rs.getString("acceptedName");\r
+// int toNameId = rs.getInt("ToNameId");\r
+// String toStatus = rs.getString("ToStatus");\r
+// String doubtfulFrom = String.valueOf(rs.getObject("doubtfulFrom"));\r
+// String doubtfulTo = String.valueOf(rs.getObject("doubtfulTo"));\r
+ \r
+ \r
+ System.out.println("RelPTaxonId:" + relPTaxonId + \r
+ "\n TaxonRIdentifier: " + fromIdentifier + "\n name: " + fromName + "\n nameId: " + fromNameId + "\n RefFk: " + fromRefFk + "\n RelType: " + relType \r
+ + "\n acceptedName: " + toName //+ "\n ToNameId: " + toNameId + "\n ToStatus: " + toStatus + "\n ToDoubtful: " + doubtfulTo )\r
+ );\r
+ success = (firstRow = false);\r
}\r
} catch (SQLException e) {\r
e.printStackTrace();\r