Added detection of misapplied names
authorem.lee <em.lee@localhost>
Mon, 6 Sep 2010 13:42:55 +0000 (13:42 +0000)
committerem.lee <em.lee@localhost>
Mon, 6 Sep 2010 13:42:55 +0000 (13:42 +0000)
cdmlib-io/src/main/java/eu/etaxonomy/cdm/io/pesi/out/PesiTaxonExport.java

index 7229378dc88a5d855a1ad6ffe4f4e44fd375aff1..edfb403beae026adf53325c228b28a31cde6a9a4 100644 (file)
@@ -42,6 +42,8 @@ import eu.etaxonomy.cdm.model.common.ExtensionType;
 import eu.etaxonomy.cdm.model.common.IdentifiableEntity;\r
 import eu.etaxonomy.cdm.model.common.IdentifiableSource;\r
 import eu.etaxonomy.cdm.model.common.Language;\r
+import eu.etaxonomy.cdm.model.name.NameRelationship;\r
+import eu.etaxonomy.cdm.model.name.NameRelationshipType;\r
 import eu.etaxonomy.cdm.model.name.NameTypeDesignation;\r
 import eu.etaxonomy.cdm.model.name.NameTypeDesignationStatus;\r
 import eu.etaxonomy.cdm.model.name.NomenclaturalCode;\r
@@ -53,10 +55,11 @@ import eu.etaxonomy.cdm.model.name.TaxonNameBase;
 import eu.etaxonomy.cdm.model.name.ZoologicalName;\r
 import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
 import eu.etaxonomy.cdm.model.taxon.Synonym;\r
-import eu.etaxonomy.cdm.model.taxon.SynonymRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.Taxon;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonBase;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonNode;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationship;\r
+import eu.etaxonomy.cdm.model.taxon.TaxonRelationshipType;\r
 import eu.etaxonomy.cdm.model.taxon.TaxonomicTree;\r
 import eu.etaxonomy.cdm.persistence.query.MatchMode;\r
 \r
@@ -91,7 +94,6 @@ public class PesiTaxonExport extends PesiExportBase {
        private static ExtensionType cacheCitationExtensionType;\r
        private static ExtensionType expertUserIdExtensionType;\r
        private static ExtensionType speciesExpertUserIdExtensionType;\r
-       private static String auctString = "auct.";\r
        \r
        /**\r
         * @return the treeIndexAnnotationType\r
@@ -189,7 +191,7 @@ public class PesiTaxonExport extends PesiExportBase {
                        TransactionStatus txStatus = null;\r
                        List<TaxonNameBase> list = null;\r
                        \r
-/*                     logger.error("PHASE 1: Export Taxa...");\r
+                       logger.error("PHASE 1: Export Taxa...");\r
                        // Start transaction\r
                        txStatus = startTransaction(true);\r
                        logger.error("Started new transaction. Fetching some " + pluralString + " (max: " + limit + ") ...");\r
@@ -436,7 +438,7 @@ public class PesiTaxonExport extends PesiExportBase {
                        }\r
                        // Commit transaction\r
                        commitTransaction(txStatus);\r
-                       logger.error("Committed transaction.");*/\r
+                       logger.error("Committed transaction.");\r
                        \r
                        \r
                        // Create inferred synonyms for accepted taxa\r
@@ -1190,7 +1192,17 @@ public class PesiTaxonExport extends PesiExportBase {
                if (taxonName != null && taxonName != null) {\r
                        if (taxonName.isInstanceOf(NonViralName.class)) {\r
                                NonViralName nonViralName = CdmBase.deproxy(taxonName, NonViralName.class);\r
-                               result = nonViralName.getAuthorshipCache();\r
+                               String authorshipCache = nonViralName.getAuthorshipCache();\r
+\r
+                               // For a misapplied name without an authorshipCache the authorString should be set to "auct."\r
+                               if (isMisappliedName(taxonName) && authorshipCache == null) {\r
+                                       // Set authorshipCache to "auct."\r
+                                       result = PesiTransformer.auctString;\r
+                               } else {\r
+                                       // Return the content of the authorshipCache\r
+                                       result = authorshipCache;\r
+                               }\r
+\r
                        } else {\r
                                logger.warn("TaxonName is not of instance NonViralName: " + taxonName.getUuid() + " (" + taxonName.getTitleCache() + ")");\r
                        }\r
@@ -1198,9 +1210,45 @@ public class PesiTaxonExport extends PesiExportBase {
                } catch (Exception e) {\r
                        e.printStackTrace();\r
                }\r
-               return result;\r
+               \r
+               if ("".equals(result)) {\r
+                       return null;\r
+               } else {\r
+                       return result;\r
+               }\r
        }\r
 \r
+       /**\r
+        * Checks whether a given TaxonName is a misapplied name.\r
+        * @param taxonName\r
+        * @return\r
+        */\r
+       private static boolean isMisappliedName(TaxonNameBase taxonName) {\r
+               boolean result = false;\r
+               Set<NameRelationship> taxonNameRelations = taxonName.getRelationsFromThisName();\r
+               for (NameRelationship nameRelation : taxonNameRelations) {\r
+                       NameRelationshipType relationshipType = nameRelation.getType();\r
+                       if (relationshipType.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())) {\r
+                               result = true;\r
+                       }\r
+               }\r
+               \r
+               Set<Taxon> taxa = taxonName.getTaxa();\r
+               if (taxa.size() == 1) {\r
+                       Taxon taxon = CdmBase.deproxy(taxa.iterator().next(), Taxon.class);\r
+                       Set<TaxonRelationship> taxonRelations = taxon.getRelationsFromThisTaxon();\r
+                       for (TaxonRelationship taxonRelationship : taxonRelations) {\r
+                               TaxonRelationshipType taxonRelationshipType = taxonRelationship.getType();\r
+                               if (taxonRelationshipType.equals(TaxonRelationshipType.MISAPPLIED_NAME_FOR())) {\r
+                                       result = true;\r
+                               }\r
+                       }\r
+               } else if (taxa.size() > 1) {\r
+                       logger.error("Could not check for misapplied name. This TaxonName has " + taxa.size() + " Taxa: " + taxonName.getUuid() + " (" + taxonName.getTitleCache() + ")");\r
+               }\r
+               return result;\r
+       }\r
+       \r
        /**\r
         * Returns the <code>FullName</code> attribute.\r
         * @param taxon The {@link TaxonBase Taxon}.\r
@@ -2005,18 +2053,8 @@ public class PesiTaxonExport extends PesiExportBase {
        private static boolean isAuctReference(TaxonNameBase taxonName, PesiExportState state) {\r
                boolean result = false;\r
                \r
-               try {\r
-               TaxonBase taxonBase = getSourceTaxonBase(taxonName);\r
-\r
-               if (taxonBase != null) {\r
-                       if (auctString.equals(taxonBase.getTitleCache())) {\r
-                               result = true;\r
-                       }\r
-               } else {\r
-                       logger.error("A TaxonBase could not be determined for this TaxonName: " + taxonName.getUuid() + " (" + taxonName.getTitleCache() + ")");\r
-               }\r
-               } catch (Exception e) {\r
-                       e.printStackTrace();\r
+               if (isMisappliedName(taxonName)) {\r
+                       result = true;\r
                }\r
                return result;\r
        }\r