X-Git-Url: https://dev.e-taxonomy.eu/gitweb/cdmlib-apps.git/blobdiff_plain/e2cf0d65b366154fcd67674e5867c4151533ab23..766713c7f1e94806b23beb150206afa0605d1842:/app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java diff --git a/app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java b/app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java index 4cc87368..ec1c0591 100644 --- a/app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java +++ b/app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java @@ -135,65 +135,100 @@ public class RedListGefaesspflanzenImportNames extends DbImportBase checklistTaxon = null; if(CdmUtils.isNotBlank(clTaxonString) && !clTaxonString.trim().equals("-")){ - cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, false, true, state); + checklistTaxon = (TaxonBase) taxonBase.clone(); + //TODO what to do with synonyms? + if(checklistTaxon.isInstanceOf(Taxon.class)){ + TaxonRelationship relation = HibernateProxyHelper.deproxy(checklistTaxon, Taxon.class).addTaxonRelation(HibernateProxyHelper.deproxy(taxonBase, Taxon.class), TaxonRelationshipType.CONGRUENT_TO(), null, null); + relation.setDoubtful(true); + } + + ImportHelper.setOriginalSource(checklistTaxon, state.getTransactionalSourceReference(), id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE); + taxaToSave.add(checklistTaxon); } //E, W, K, AW, AO, R, O, S - addConceptRelation(relationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, taxonBase, name, taxaToSave, id, state); - addConceptRelation(relationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, taxonBase, name, taxaToSave, id, state); + addConceptRelation(relationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, taxonBase, checklistTaxon, taxaToSave, id, state); + addConceptRelation(relationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, taxonBase, checklistTaxon, taxaToSave, id, state); //NOTE: the source has to be added after cloning or otherwise the clone would also get the source ImportHelper.setOriginalSource(taxonBase, state.getTransactionalSourceReference(), id, RedListUtil.TAXON_GESAMTLISTE_NAMESPACE); taxaToSave.add(taxonBase); } - private void addConceptRelation(String relationString, String classificationNamespace, TaxonBase taxonBase, TaxonNameBase name, Set> taxaToSave, long id, RedListGefaesspflanzenImportState state){ + private void addConceptRelation(String relationString, String classificationNamespace, TaxonBase gesamtListeTaxon, TaxonBase checkListenTaxon, Set> taxaToSave, long id, RedListGefaesspflanzenImportState state){ if(CdmUtils.isNotBlank(relationString) && !relationString.equals(".")){ String substring = relationString.substring(relationString.length()-1, relationString.length()); TaxonRelationshipType taxonRelationshipTypeByKey = new RedListGefaesspflanzenTransformer().getTaxonRelationshipTypeByKey(substring); if(taxonRelationshipTypeByKey==null){ - RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+taxonBase.generateTitle(), logger); + RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+gesamtListeTaxon.generateTitle(), logger); } //there is no type "included in" so we have to reverse the direction if(substring.equals("<")){ - cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, true, false, state); + cloneTaxon(gesamtListeTaxon, checkListenTaxon, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, true, false, state); } else{ - cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, false, false, state); + cloneTaxon(gesamtListeTaxon, checkListenTaxon, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, false, false, state); } } } /** + * 1. clone new taxon of gesamtListeTaxon with the same name (in that classification)
+ * 2. create concept relationship from clone to gesamtListeTaxon/checklisteTaxon or from its accepted taxon if it is synonym
+ *
* NOTE: the {@link TaxonRelationshipType} passed as parameter is * directed from the clone to the taxon.
* This can be changed with parameter reverseRelation + * @return cloned taxon */ - private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set> taxaToSave, long id, String sourceNameSpace, boolean reverseRelation, boolean doubtful, RedListGefaesspflanzenImportState state){ - TaxonBase clone = (TaxonBase) taxonBase.clone(); - if(taxonBase.isInstanceOf(Taxon.class)){ - TaxonRelationship taxonRelation; - if(reverseRelation){ - taxonRelation = ((Taxon) taxonBase).addTaxonRelation((Taxon) clone, relationFromCloneToTaxon, null, null); + private Taxon cloneTaxon(final TaxonBase gesamtListeTaxon, final TaxonBase checklisteTaxon, TaxonRelationshipType relationFromCloneToTaxon, Set> taxaToSave, long id, String sourceNameSpace, boolean reverseRelation, boolean doubtful, RedListGefaesspflanzenImportState state){ + Taxon acceptedGesamtListeTaxon = getAcceptedTaxon(gesamtListeTaxon); + Taxon acceptedChecklistTaxon = getAcceptedTaxon(checklisteTaxon); + Taxon clonedTaxon = null; + + if(gesamtListeTaxon.isInstanceOf(Taxon.class)){ + clonedTaxon = HibernateProxyHelper.deproxy(gesamtListeTaxon.clone(), Taxon.class); + } + else if(gesamtListeTaxon.isInstanceOf(Synonym.class)){ + clonedTaxon = Taxon.NewInstance(gesamtListeTaxon.getName(), gesamtListeTaxon.getSec()); + } + else{ + RedListUtil.logMessage(id, "Taxon base "+gesamtListeTaxon+" is neither taxon nor synonym! Taxon could not be cloned", logger); + return null; + } + + if(reverseRelation){ + if(acceptedGesamtListeTaxon!=null){ + TaxonRelationship taxonRelation = acceptedGesamtListeTaxon.addTaxonRelation(clonedTaxon, relationFromCloneToTaxon, null, null); + taxonRelation.setDoubtful(doubtful); + } + if(acceptedChecklistTaxon!=null) { + TaxonRelationship taxonRelation = acceptedChecklistTaxon.addTaxonRelation(clonedTaxon, relationFromCloneToTaxon, null, null); + taxonRelation.setDoubtful(doubtful); } - else { - taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null); + } + else { + if(acceptedGesamtListeTaxon!=null){ + TaxonRelationship taxonRelation = clonedTaxon.addTaxonRelation(acceptedGesamtListeTaxon, relationFromCloneToTaxon, null, null); + taxonRelation.setDoubtful(doubtful); + } + if(acceptedChecklistTaxon!=null) { + TaxonRelationship taxonRelation = clonedTaxon.addTaxonRelation(acceptedChecklistTaxon, relationFromCloneToTaxon, null, null); + taxonRelation.setDoubtful(doubtful); } - taxonRelation.setDoubtful(doubtful); } - ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace); - taxaToSave.add(clone); + + ImportHelper.setOriginalSource(clonedTaxon, state.getTransactionalSourceReference(), id, sourceNameSpace); + taxaToSave.add(clonedTaxon); + return clonedTaxon; } private TaxonBase importTaxon(ResultSet rs, NonViralName name) throws SQLException {