NomCode.getCdmClass
authorAndreas Müller <a.mueller@bgbm.org>
Tue, 18 Nov 2008 16:15:35 +0000 (16:15 +0000)
committerAndreas Müller <a.mueller@bgbm.org>
Tue, 18 Nov 2008 16:15:35 +0000 (16:15 +0000)
cdmlib-model/src/main/java/eu/etaxonomy/cdm/model/name/NomenclaturalCode.java

index 1c888234fece867e58ae67e3e31b0ce7c90b8562..10053a0bfc8410cde8436606c26f2a6223e2fbc8 100644 (file)
@@ -40,7 +40,13 @@ import eu.etaxonomy.cdm.model.common.DefinedTermBase;
  */\r
 @XmlAccessorType(XmlAccessType.FIELD)\r
 @Entity\r
-public class NomenclaturalCode extends DefinedTermBase {\r
+public class NomenclaturalCode extends DefinedTermBase<NomenclaturalCode> {\r
+       \r
+       /**\r
+        * SerialVersionUID\r
+        */\r
+       private static final long serialVersionUID = -1011240079962589681L;\r
+\r
        private static final Logger logger = Logger.getLogger(NomenclaturalCode.class);\r
 \r
        private static final UUID uuidIcnb = UUID.fromString("ff4b0979-7abf-4b40-95c0-8b8b1e8a4d5e");\r
@@ -139,8 +145,8 @@ public class NomenclaturalCode extends DefinedTermBase {
         * @see                         ViralName#NewInstance(Rank)\r
         */\r
        @Transient\r
-       public TaxonNameBase getNewTaxonNameInstance(Rank rank){\r
-               TaxonNameBase result;\r
+       public TaxonNameBase<?,?> getNewTaxonNameInstance(Rank rank){\r
+               TaxonNameBase<?,?> result;\r
                if (this.equals(NomenclaturalCode.ICBN())){\r
                        result = BotanicalName.NewInstance(rank);\r
                }else if (this.equals(NomenclaturalCode.ICZN())){\r
@@ -158,5 +164,37 @@ public class NomenclaturalCode extends DefinedTermBase {
                return result;\r
        }\r
        \r
+       /**\r
+        * Creates a new particular {@link TaxonNameBase taxon name} (botanical, zoological,\r
+        * cultivar plant, bacterial or viral name) instance depending on <i>this</i>\r
+        * nomenclature code only containing the given {@link Rank rank}.\r
+        * \r
+        * @param       rank    the rank of the new taxon name instance\r
+        * @see                         BotanicalName#NewInstance(Rank)\r
+        * @see                         ZoologicalName#NewInstance(Rank)\r
+        * @see                         CultivarPlantName#NewInstance(Rank)\r
+        * @see                         BacterialName#NewInstance(Rank)\r
+        * @see                         ViralName#NewInstance(Rank)\r
+        */\r
+       @Transient\r
+       public <T extends TaxonNameBase> Class<? extends T> getCdmClass(){\r
+               Class<? extends T> result;\r
+               if (this.equals(NomenclaturalCode.ICBN())){\r
+                       result = (Class<T>)BotanicalName.class;\r
+               }else if (this.equals(NomenclaturalCode.ICZN())){\r
+                       result = (Class<T>)ZoologicalName.class;\r
+               }else if (this.equals(NomenclaturalCode.ICNCP())){\r
+                       result = (Class<T>)CultivarPlantName.class;\r
+               }else if (this.equals(NomenclaturalCode.ICNB())){\r
+                       result = (Class<T>)BacterialName.class;\r
+               }else if (this.equals(NomenclaturalCode.ICVCN())){\r
+                       result = (Class<T>)ViralName.class;\r
+               }else {\r
+                       logger.warn("Unknown nomenclatural code: " + this.getUuid());\r
+                       result = null;\r
+               }\r
+               return result;\r
+       }\r
+       \r
        \r
 }\r