\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
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
\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
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