Remove ". " from year only nom-refs
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / strategy / cache / reference / NomRefDefaultCacheStrategyBase.java
index b13c9aedcff793a4dd0c2c3db2a512baad026f7f..fa1e79908e867b7f143b07dd954b6d091ba7713d 100644 (file)
 \r
 package eu.etaxonomy.cdm.strategy.cache.reference;\r
 \r
+import org.apache.commons.lang.StringUtils;\r
 import org.apache.log4j.Logger;\r
 \r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
 import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
-import eu.etaxonomy.cdm.model.reference.ReferenceBase;\r
+import eu.etaxonomy.cdm.model.reference.Reference;\r
 import eu.etaxonomy.cdm.strategy.StrategyBase;\r
 \r
 /**\r
  * @author a.mueller\r
  * @created 29.06.2008\r
- * @version 1.0\r
  */\r
-public abstract class NomRefDefaultCacheStrategyBase<T extends ReferenceBase> 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
        private static final Logger logger = Logger.getLogger(NomRefDefaultCacheStrategyBase.class);\r
        \r
        protected String beforeYear = ". ";\r
        protected String beforeMicroReference = ": ";\r
        protected String afterYear = "";\r
-       protected String afterAuthor = ", ";\r
-\r
+       protected String afterAuthor = ", ";    \r
        \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);\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
-               //TODO neede?\r
-               if (nomenclaturalReference.isProtectedTitleCache()){\r
-                       return nomenclaturalReference.getTitleCache();\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 (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);\r
-               TeamOrPersonBase<?> team = nomenclaturalReference.getAuthorTeam();\r
-               if (team != null &&  ! (team.getTitleCache() == null) && ! team.getTitleCache().trim().equals("")){\r
-                       //String author = CdmUtils.Nz(team == null? "" : 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
+       protected abstract String getTitleWithoutYearAndAuthor(Reference reference, boolean isAbbrev);\r
+\r
        \r
-       /* (non-Javadoc)\r
-        * @see eu.etaxonomy.cdm.strategy.cache.reference.INomenclaturalReferenceCacheStrategy#getBeforeMicroReference()\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
+                       stringBuilder.append(team.getTitleCache() );\r
+                       nextConcat = afterAuthor;\r
+               }\r
+               \r
+               String year = referenceBase.getYear();\r
+               if (StringUtils.isNotBlank(year)){\r
+                       stringBuilder.append(nextConcat + year);\r
+               }\r
+               \r
+               return stringBuilder.toString();\r
+       }\r
+       \r
+\r
+       @Override\r
        public String getBeforeMicroReference(){\r
                return beforeMicroReference;\r
        }\r
        \r
-       protected String addYear(String string, T nomRef){\r
+       protected String addYear(String string, Reference nomRef, boolean useFullDatePublished){\r
                String result;\r
                if (string == null){\r
                        return null;\r
                }\r
-               String year = CdmUtils.Nz(nomRef.getYear());\r
-               if ("".equals(year)){\r
+               String year = useFullDatePublished ? nomRef.getDatePublishedString() : nomRef.getYear();\r
+               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
+       @Override\r
+       public String getNomenclaturalCitation(Reference nomenclaturalReference, String microReference) {\r
+               if (nomenclaturalReference.isProtectedTitleCache()){\r
+                       return nomenclaturalReference.getTitleCache();\r
+               }\r
+               String result = getTokenizedNomenclaturalTitel(nomenclaturalReference);\r
+               microReference = CdmUtils.Nz(microReference);\r
+               if (StringUtils.isNotBlank(microReference)){\r
+                       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