Remove ". " from year only nom-refs
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / strategy / cache / reference / NomRefDefaultCacheStrategyBase.java
index 87e9ba6ffc8530b0f3a60164ad8431b23a364813..fa1e79908e867b7f143b07dd954b6d091ba7713d 100644 (file)
@@ -21,9 +21,8 @@ import eu.etaxonomy.cdm.strategy.StrategyBase;
 /**\r
  * @author a.mueller\r
  * @created 29.06.2008\r
- * @version 1.0\r
  */\r
-public abstract class NomRefDefaultCacheStrategyBase<T extends Reference> extends StrategyBase implements  INomenclaturalReferenceCacheStrategy<T>{\r
+public abstract class NomRefDefaultCacheStrategyBase extends StrategyBase implements INomenclaturalReferenceCacheStrategy{\r
        private static final long serialVersionUID = -725290113353165022L;\r
 \r
        @SuppressWarnings("unused")\r
@@ -34,58 +33,77 @@ public abstract class NomRefDefaultCacheStrategyBase<T extends Reference> extend
        protected String afterYear = "";\r
        protected String afterAuthor = ", ";    \r
        \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.strategy.cache.reference.INomenclaturalReferenceCacheStrategy#getTokenizedNomenclaturalTitel(eu.etaxonomy.cdm.model.reference.INomenclaturalReference)\r
-        */\r
-       public String getTokenizedNomenclaturalTitel(T nomenclaturalReference) {\r
-               String result =  getNomRefTitleWithoutYearAndAuthor(nomenclaturalReference);\r
+\r
+       @Override\r
+       public String getTokenizedNomenclaturalTitel(Reference ref) {\r
+               String result =  getTitleWithoutYearAndAuthor(ref, true);\r
                result += INomenclaturalReference.MICRO_REFERENCE_TOKEN;\r
-               result = addYear(result, nomenclaturalReference, true);\r
+               result = addYear(result, ref, true);\r
                return result;\r
        }\r
 \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.strategy.cache.reference.INomenclaturalReferenceCacheStrategy#getTitleCache(eu.etaxonomy.cdm.model.reference.INomenclaturalReference)\r
-        */\r
-       public String getTitleCache(T nomenclaturalReference) {\r
+       @Override\r
+       public String getTitleCache(Reference nomenclaturalReference) {\r
+               return getTitleCache(nomenclaturalReference, false);\r
+       }\r
+\r
+       @Override\r
+       public String getAbbrevTitleCache(Reference nomenclaturalReference) {\r
+               return getTitleCache(nomenclaturalReference, true);\r
+       }\r
+       \r
+       private String getTitleCache(Reference ref, boolean isAbbrev) {\r
                //TODO needed?\r
-               if (nomenclaturalReference.isProtectedTitleCache()){\r
-                       return nomenclaturalReference.getTitleCache();\r
+               if (isAbbrev && ref.isProtectedAbbrevTitleCache()){\r
+                       return ref.getAbbrevTitleCache();\r
+               }else if (!isAbbrev && ref.isProtectedTitleCache()){\r
+                       return ref.getTitleCache();\r
                }\r
-               String result =  getNomRefTitleWithoutYearAndAuthor(nomenclaturalReference);\r
-               result = addYear(result, nomenclaturalReference, false);\r
-               TeamOrPersonBase<?> team = nomenclaturalReference.getAuthorTeam();\r
-               if (team != null &&  StringUtils.isNotEmpty(team.getTitleCache()) ){\r
-                       result = team.getTitleCache() + afterAuthor + result;\r
+               String result =  getTitleWithoutYearAndAuthor(ref, isAbbrev);\r
+               result = addYear(result, ref, false);\r
+               TeamOrPersonBase<?> team = ref.getAuthorTeam();\r
+               \r
+               if (team != null){\r
+                       String teamTitle = CdmUtils.getPreferredNonEmptyString(team.getTitleCache(), team.getNomenclaturalTitle(), isAbbrev, true);\r
+                       if (teamTitle.length() > 0 ){\r
+                               String concat = isNotBlank(result) ? afterAuthor : "";\r
+                               result = team.getTitleCache() + concat + result;\r
+                       }\r
+                       \r
                }\r
                return result;\r
        }\r
        \r
-       public String getCitation(T referenceBase) {\r
+       protected abstract String getTitleWithoutYearAndAuthor(Reference reference, boolean isAbbrev);\r
+\r
+       \r
+       @Override\r
+       public String getCitation(Reference referenceBase) {\r
                StringBuilder stringBuilder = new StringBuilder();\r
                \r
+               String nextConcat = "";\r
+               \r
                TeamOrPersonBase<?> team = referenceBase.getAuthorTeam();\r
                if (team != null &&  ! (team.getTitleCache() == null) && ! team.getTitleCache().trim().equals("")){\r
-                       //String author = CdmUtils.Nz(team == null? "" : team.getTitleCache());\r
-                       stringBuilder.append(team.getTitleCache() + afterAuthor);\r
+                       stringBuilder.append(team.getTitleCache() );\r
+                       nextConcat = afterAuthor;\r
                }\r
                \r
-               String year = CdmUtils.Nz(referenceBase.getYear());\r
-               if (!"".equals(year)){\r
-                       stringBuilder.append(beforeYear + year);\r
+               String year = referenceBase.getYear();\r
+               if (StringUtils.isNotBlank(year)){\r
+                       stringBuilder.append(nextConcat + year);\r
                }\r
                \r
                return stringBuilder.toString();\r
        }\r
        \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.strategy.cache.reference.INomenclaturalReferenceCacheStrategy#getBeforeMicroReference()\r
-        */\r
+\r
+       @Override\r
        public String getBeforeMicroReference(){\r
                return beforeMicroReference;\r
        }\r
        \r
-       protected String addYear(String string, T nomRef, boolean useFullDatePublished){\r
+       protected String addYear(String string, Reference nomRef, boolean useFullDatePublished){\r
                String result;\r
                if (string == null){\r
                        return null;\r
@@ -94,14 +112,14 @@ public abstract class NomRefDefaultCacheStrategyBase<T extends Reference> extend
                if (StringUtils.isBlank(year)){\r
                        result = string + afterYear;\r
                }else{\r
-                       result = string + beforeYear + year + afterYear;\r
+                       String concat = isBlank(string)  ? "" : string.endsWith(".")? " " : beforeYear;\r
+                       result = string + concat + year + afterYear;\r
                }\r
                return result;\r
        }\r
        \r
-       protected abstract String getNomRefTitleWithoutYearAndAuthor(T reference);\r
-       \r
-       public String getNomenclaturalCitation(T nomenclaturalReference, String microReference) {\r
+       @Override\r
+       public String getNomenclaturalCitation(Reference nomenclaturalReference, String microReference) {\r
                if (nomenclaturalReference.isProtectedTitleCache()){\r
                        return nomenclaturalReference.getTitleCache();\r
                }\r
@@ -111,6 +129,10 @@ public abstract class NomRefDefaultCacheStrategyBase<T extends Reference> extend
                        microReference = getBeforeMicroReference() + microReference;\r
                }\r
                result = result.replaceAll(INomenclaturalReference.MICRO_REFERENCE_TOKEN, microReference);\r
+               if (result.startsWith(". ")){\r
+                       result = result.substring(2);\r
+               }\r
                return result;\r
        }\r
+\r
 }\r