minor
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / agent / TeamOrPersonBase.java
index 0c1ea5e8b2b9cc662beb9a1af95334d5dc98a5af..e53dbe84fa4ba765c084ecdcf007326d6da75f06 100644 (file)
@@ -10,6 +10,7 @@ package eu.etaxonomy.cdm.model.agent;
 \r
 import javax.persistence.Entity;\r
 import javax.persistence.Transient;\r
+import javax.validation.constraints.Size;\r
 import javax.xml.bind.annotation.XmlAccessType;\r
 import javax.xml.bind.annotation.XmlAccessorType;\r
 import javax.xml.bind.annotation.XmlElement;\r
@@ -21,8 +22,10 @@ import org.hibernate.envers.Audited;
 import org.hibernate.search.annotations.Field;\r
 import org.hibernate.search.annotations.Index;\r
 import org.hibernate.search.annotations.Indexed;\r
-\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
+import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.strategy.cache.agent.INomenclaturalAuthorCacheStrategy;\r
+import eu.etaxonomy.cdm.validation.annotation.NullOrNotEmpty;\r
 \r
 \r
 /**\r
@@ -46,16 +49,27 @@ public abstract class TeamOrPersonBase<T extends TeamOrPersonBase<?>> extends Ag
 \r
        @XmlElement(name="NomenclaturalTitle")\r
        @Field(index=Index.TOKENIZED)\r
+       @NullOrNotEmpty\r
+    @Size(max = 255)\r
        protected String nomenclaturalTitle;\r
 \r
+       @Transient\r
+       @XmlTransient\r
+       protected boolean isGeneratingTitleCache = false;\r
+       \r
        /**\r
         * Returns the identification string (nomenclatural abbreviation) used in\r
         * nomenclature for this {@link Person person} or this {@link Team team}.\r
         * \r
         * @see  INomenclaturalAuthor#getNomenclaturalTitle()\r
         */\r
+       @Transient\r
        public String getNomenclaturalTitle() {\r
-               return nomenclaturalTitle;\r
+               String result = nomenclaturalTitle;\r
+               if (CdmUtils.isEmpty(nomenclaturalTitle) && (isGeneratingTitleCache == false)){\r
+                       result = getTitleCache();\r
+               }\r
+               return result;\r
        }\r
 \r
        /** \r
@@ -64,4 +78,33 @@ public abstract class TeamOrPersonBase<T extends TeamOrPersonBase<?>> extends Ag
        public void setNomenclaturalTitle(String nomenclaturalTitle) {\r
                this.nomenclaturalTitle = nomenclaturalTitle;\r
        }\r
+\r
+       /* (non-Javadoc)\r
+        * @see eu.etaxonomy.cdm.model.common.IdentifiableEntity#getTitleCache()\r
+        */\r
+       @Override\r
+       @Transient\r
+       public String getTitleCache() {\r
+               isGeneratingTitleCache = true;\r
+               String result = super.getTitleCache();\r
+               result = replaceEmptyTitleByNomTitle(result);\r
+               isGeneratingTitleCache = false;\r
+               return result;\r
+       }\r
+\r
+       /**\r
+        * @param result\r
+        * @return\r
+        */\r
+       protected String replaceEmptyTitleByNomTitle(String result) {\r
+               if (CdmUtils.isEmpty(result)){\r
+                       result = nomenclaturalTitle;\r
+               }\r
+               if (CdmUtils.isEmpty(result)){\r
+                       result = super.getTitleCache();\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       \r
 }\r