Add taxa to classifications #5448
authorPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 24 May 2016 14:44:52 +0000 (16:44 +0200)
committerPatrick Plitzner <p.plitzner@bgbm.org>
Tue, 24 May 2016 14:44:52 +0000 (16:44 +0200)
app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportClassification.java
app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenImportNames.java
app-import/src/main/java/eu/etaxonomy/cdm/io/redlist/gefaesspflanzen/RedListGefaesspflanzenTransformer.java

index a67ecdfc755c309181e33c7cf994808db93007df..6100215e14bb3161c8e4f26284b33ca059c66824 100644 (file)
@@ -94,9 +94,19 @@ public class RedListGefaesspflanzenImportClassification extends DbImportBase<Red
         ResultSet rs = partitioner.getResultSet();
         Classification gesamtListeClassification = getClassificationService().load(state.getConfig().getClassificationUuid());
         Classification checklistClassification = getClassificationService().load(RedListUtil.checkListClassificationUuid);
+        Classification classificationE = getClassificationService().load(RedListUtil.uuidClassificationE);
+        Classification classificationW = getClassificationService().load(RedListUtil.uuidClassificationW);
+        Classification classificationK = getClassificationService().load(RedListUtil.uuidClassificationK);
+        Classification classificationAW = getClassificationService().load(RedListUtil.uuidClassificationAW);
+        Classification classificationAO = getClassificationService().load(RedListUtil.uuidClassificationAO);
+        Classification classificationR = getClassificationService().load(RedListUtil.uuidClassificationR);
+        Classification classificationO = getClassificationService().load(RedListUtil.uuidClassificationO);
+        Classification classificationS = getClassificationService().load(RedListUtil.uuidClassificationS);
         try {
             while (rs.next()){
-                makeSingleTaxonNode(state, rs, gesamtListeClassification, checklistClassification);
+                makeSingleTaxonNode(state, rs, gesamtListeClassification, checklistClassification,
+                        classificationE, classificationW, classificationK, classificationAW
+                        , classificationAO, classificationR, classificationO, classificationS);
 
             }
         } catch (SQLException e) {
@@ -109,7 +119,11 @@ public class RedListGefaesspflanzenImportClassification extends DbImportBase<Red
         return true;
     }
 
-    private void makeSingleTaxonNode(RedListGefaesspflanzenImportState state, ResultSet rs, Classification gesamtListeClassification, Classification checklistClassification)
+    private void makeSingleTaxonNode(RedListGefaesspflanzenImportState state, ResultSet rs,
+            Classification gesamtListeClassification, Classification checklistClassification,
+            Classification classificationE, Classification classificationW, Classification classificationK,
+            Classification classificationAW, Classification classificationAO, Classification classificationR,
+            Classification classificationO, Classification classificationS)
             throws SQLException {
         long id = rs.getLong(RedListUtil.NAMNR);
         String parentId = String.valueOf(rs.getLong(RedListUtil.LOWER));
@@ -137,19 +151,18 @@ public class RedListGefaesspflanzenImportClassification extends DbImportBase<Red
         }
 
         //add taxa for concept relationships to E, W, K, AW, AO, R, O, S
-        addTaxonToClassification(RedListUtil.uuidClassificationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, id, state);
-        addTaxonToClassification(RedListUtil.uuidClassificationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, id, state);
+        addTaxonToClassification(classificationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, id, state);
+        addTaxonToClassification(classificationW, RedListUtil.CLASSIFICATION_NAMESPACE_W, id, state);
+        addTaxonToClassification(classificationK, RedListUtil.CLASSIFICATION_NAMESPACE_K, id, state);
+        addTaxonToClassification(classificationAW, RedListUtil.CLASSIFICATION_NAMESPACE_AW, id, state);
+        addTaxonToClassification(classificationAO, RedListUtil.CLASSIFICATION_NAMESPACE_AO, id, state);
+        addTaxonToClassification(classificationR, RedListUtil.CLASSIFICATION_NAMESPACE_R, id, state);
+        addTaxonToClassification(classificationO, RedListUtil.CLASSIFICATION_NAMESPACE_O, id, state);
+        addTaxonToClassification(classificationS, RedListUtil.CLASSIFICATION_NAMESPACE_S, id, state);
     }
 
-    private void addTaxonToClassification(UUID classificationUuid, String classificationNamespace, long id, RedListGefaesspflanzenImportState state){
+    private void addTaxonToClassification(Classification classification, String classificationNamespace, long id, RedListGefaesspflanzenImportState state){
         Taxon taxon = HibernateProxyHelper.deproxy(state.getRelatedObject(classificationNamespace, String.valueOf(id), TaxonBase.class), Taxon.class);
-        Classification classification = getClassificationService().load(classificationUuid);
         classification.addChildTaxon(taxon, null, null);
     }
 
index a8af85f3a0b5a4f9b3c9ee51f5806dfd2ffb5823..798b25efd75a4abbc995f21146eb3b31cdb6fd17 100644 (file)
@@ -152,7 +152,7 @@ public class RedListGefaesspflanzenImportNames extends DbImportBase<RedListGefae
          */
         //checklist
         if(CdmUtils.isNotBlank(clTaxonString) && !clTaxonString.trim().equals("-")){
-            cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, state);
+            cloneTaxon(taxonBase, name, TaxonRelationshipType.CONGRUENT_TO(), taxaToSave, id, RedListUtil.TAXON_CHECKLISTE_NAMESPACE, false, true, state);
         }
         //E, W, K, AW, AO, R, O, S
         addConceptRelation(relationE, RedListUtil.CLASSIFICATION_NAMESPACE_E, taxonBase, name, taxaToSave, id, state);
@@ -171,27 +171,41 @@ public class RedListGefaesspflanzenImportNames extends DbImportBase<RedListGefae
 
     private void addConceptRelation(String relationString, String classificationNamespace, TaxonBase taxonBase, TaxonNameBase name, Set<TaxonBase> taxaToSave, long id, RedListGefaesspflanzenImportState state){
         if(CdmUtils.isNotBlank(relationString) && !relationString.equals(".")){
-            TaxonRelationshipType taxonRelationshipTypeByKey = new RedListGefaesspflanzenTransformer().getTaxonRelationshipTypeByKey(relationString);
+            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, logger);
+                RedListUtil.logMessage(id, "Could not interpret relationship "+relationString+" for taxon "+taxonBase.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);
+            }
+            else{
+                cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, false, false, state);
             }
-            cloneTaxon(taxonBase, name, taxonRelationshipTypeByKey, taxaToSave, id, classificationNamespace, state);
         }
     }
 
     /**
      * <b>NOTE:</b> the {@link TaxonRelationshipType} passed as parameter is
-     * directed <b>from the clone</b> to the taxon
+     * directed <b>from the clone</b> to the taxon.<br>
+     * This can be changed with parameter <i>reverseRelation</i>
      */
-    private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set<TaxonBase> taxaToSave, long id, String sourceNameSpace, RedListGefaesspflanzenImportState state){
-            TaxonBase clone = (TaxonBase) taxonBase.clone();
-            clone.setName(name);
-            if(taxonBase.isInstanceOf(Taxon.class)){
-                TaxonRelationship taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null);
-                taxonRelation.setDoubtful(true);//TODO Ist das mit " mit Fragezeichen" gemeint?
+    private void cloneTaxon(TaxonBase taxonBase, TaxonNameBase name, TaxonRelationshipType relationFromCloneToTaxon, Set<TaxonBase> taxaToSave, long id, String sourceNameSpace, boolean reverseRelation, boolean doubtful, RedListGefaesspflanzenImportState state){
+        TaxonBase clone = (TaxonBase) taxonBase.clone();
+        clone.setName(name);
+        if(taxonBase.isInstanceOf(Taxon.class)){
+            TaxonRelationship taxonRelation;
+            if(reverseRelation){
+                taxonRelation = ((Taxon) taxonBase).addTaxonRelation((Taxon) clone, relationFromCloneToTaxon, null, null);
             }
-            ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace);
-            taxaToSave.add(clone);
+            else {
+                taxonRelation = ((Taxon) clone).addTaxonRelation((Taxon) taxonBase, relationFromCloneToTaxon, null, null);
+            }
+            taxonRelation.setDoubtful(doubtful);
+        }
+        ImportHelper.setOriginalSource(clone, state.getTransactionalSourceReference(), id, sourceNameSpace);
+        taxaToSave.add(clone);
     }
 
     private TaxonBase importTaxon(long id, String taxNameString, String gueltString, String authorBasiString,
index 9fdb0567f83ade56f90e31ad9ffaf5e73b2426f0..c15932d079e0bce656ecb7f0141f93c76f6dc0e4 100644 (file)
@@ -72,12 +72,12 @@ public final class RedListGefaesspflanzenTransformer extends InputTransformerBas
     public TaxonRelationshipType getTaxonRelationshipTypeByKey(String key) {
         if (key == null){return null;}
         else {
-            String substring = key.substring(key.length()-1, key.length());
             //        if (key.equals("<")){return TaxonRelationshipType.();}//TODO: what to do here?
-            if (substring.equals("=")){return TaxonRelationshipType.CONGRUENT_TO();}
-            else if (substring.equals(">")){return TaxonRelationshipType.INCLUDES();}
-            else if (substring.equals("!")){return TaxonRelationshipType.OVERLAPS();}
-            else if (substring.equals("?")){return TaxonRelationshipType.ALL_RELATIONSHIPS();}
+            if (key.equals("=")){return TaxonRelationshipType.CONGRUENT_TO();}
+            else if (key.equals(">")){return TaxonRelationshipType.INCLUDES();}
+            else if (key.equals("<")){return TaxonRelationshipType.INCLUDES();}
+            else if (key.equals("!")){return TaxonRelationshipType.OVERLAPS();}
+//            else if (key.equals("?")){return TaxonRelationshipType.;}//TODO: what to do here?
             //        else if (key.equals("x")){return TaxonRelationshipType.();}//TODO: what to do here?
         }
         return null;