minor
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / strategy / cache / reference / ArticleDefaultCacheStrategy.java
index b5b79e3003d60457eae92a8e0d5f3c47f79d5ef9..cf4cee1925ea758a6f8160efb05b000c9b970762 100644 (file)
@@ -15,14 +15,20 @@ import org.apache.log4j.Logger;
 \r
 import eu.etaxonomy.cdm.common.CdmUtils;\r
 import eu.etaxonomy.cdm.model.agent.TeamOrPersonBase;\r
+import eu.etaxonomy.cdm.model.reference.IJournal;\r
 import eu.etaxonomy.cdm.model.reference.Reference;\r
 \r
-public class ArticleDefaultCacheStrategy <T extends Reference> extends InRefDefaultCacheStrategyBase<T> implements  INomenclaturalReferenceCacheStrategy<T> {\r
+public class ArticleDefaultCacheStrategy <T extends Reference> extends NomRefDefaultCacheStrategyBase<T> implements  INomenclaturalReferenceCacheStrategy<T> {\r
+       private static final long serialVersionUID = -1639068590864589314L;\r
+\r
+       @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(ArticleDefaultCacheStrategy.class);\r
        \r
        public static final String UNDEFINED_JOURNAL = "- undefined journal -";\r
        private String prefixReferenceJounal = "in";\r
        private String blank = " ";\r
+       private String comma = ",";\r
+       private String prefixSeries = "ser.";\r
        \r
        final static UUID uuid = UUID.fromString("0d45343a-0c8a-4a64-97ca-e94974b65c96");\r
        \r
@@ -57,34 +63,51 @@ public class ArticleDefaultCacheStrategy <T extends Reference> extends InRefDefa
                if (article.isProtectedTitleCache()){\r
                        return article.getTitleCache();\r
                }\r
-               String result =  getNomRefTitleWithoutYearAndAuthor(article);\r
+               String result =  getTitleWithoutYearAndAuthor(article, false);\r
                result = addYear(result, article, false);\r
                TeamOrPersonBase<?> team = article.getAuthorTeam();\r
                result = CdmUtils.concat(" ", article.getTitle(), result);\r
-               if (team != null &&  CdmUtils.isNotEmpty(team.getTitleCache())){\r
+               if (team != null &&  StringUtils.isNotBlank(team.getTitleCache())){\r
                        String authorSeparator = StringUtils.isNotBlank(article.getTitle())? afterAuthor : " ";\r
                        result = team.getTitleCache() + authorSeparator + result;\r
                }\r
                return result;\r
        }\r
 \r
+       @Override\r
+       public String getAbbrevTitleCache(T article) {\r
+               if (article.isProtectedAbbrevTitleCache()){\r
+                       return article.getAbbrevTitleCache();\r
+               }\r
+               String result =  getTitleWithoutYearAndAuthor(article, true);\r
+               result = addYear(result, article, false);\r
+               TeamOrPersonBase<?> team = article.getAuthorTeam();\r
+               String articleTitle = CdmUtils.getPreferredNonEmptyString(article.getAbbrevTitle(), article.getTitle(), false, true);\r
+               result = CdmUtils.concat(" ", articleTitle, result);  //Article should maybe left out for nomenclatural references (?)\r
+               if (team != null &&  StringUtils.isNotBlank(team.getNomenclaturalTitle())){\r
+                       String authorSeparator = StringUtils.isNotBlank(articleTitle) ? afterAuthor : " ";\r
+                       result = team.getNomenclaturalTitle() + authorSeparator + result;\r
+               }\r
+               return result;\r
+       }\r
 \r
        @Override\r
-       protected String getNomRefTitleWithoutYearAndAuthor(T article){\r
+       protected String getTitleWithoutYearAndAuthor(T article, boolean isAbbrev){\r
                if (article == null){\r
                        return null;\r
                }\r
-               boolean hasJournal = (article.getInReference() != null);\r
+               IJournal journal = article.getInReference();\r
+               boolean hasJournal = (journal != null);\r
                \r
-               String titelAbbrev;\r
+               String journalTitel;\r
                if (hasJournal){\r
-                       titelAbbrev = CdmUtils.Nz(article.getInReference().getTitle()).trim();\r
+                       journalTitel = CdmUtils.getPreferredNonEmptyString(journal.getTitle(), journal.getAbbrevTitle(), isAbbrev, true);\r
                }else{\r
-                       titelAbbrev = UNDEFINED_JOURNAL;\r
+                       journalTitel = UNDEFINED_JOURNAL;\r
                }\r
                \r
-               String series = CdmUtils.Nz(article.getSeries()).trim();\r
-               String volume = CdmUtils.Nz(article.getVolume()).trim();\r
+               String series = Nz(article.getSeries()).trim();\r
+               String volume = Nz(article.getVolume()).trim();\r
                \r
                boolean needsComma = false;\r
                \r
@@ -94,8 +117,8 @@ public class ArticleDefaultCacheStrategy <T extends Reference> extends InRefDefa
                nomRefCache = prefixReferenceJounal + blank; \r
                \r
                //titelAbbrev\r
-               if (CdmUtils.isNotEmpty(titelAbbrev)){\r
-                       nomRefCache = nomRefCache + titelAbbrev + blank; \r
+               if (isNotBlank(journalTitel)){\r
+                       nomRefCache = nomRefCache + journalTitel + blank; \r
                }\r
                \r
                nomRefCache = getSeriesAndVolPart(series, volume, needsComma, nomRefCache);\r
@@ -107,12 +130,35 @@ public class ArticleDefaultCacheStrategy <T extends Reference> extends InRefDefa
                \r
                return nomRefCache.trim();\r
        }\r
-\r
-\r
-       @Override\r
-       protected String getInRefType() {\r
-               return "article";\r
+       \r
+       protected String getSeriesAndVolPart(String series, String volume,\r
+                       boolean needsComma, String nomRefCache) {\r
+               //inSeries\r
+               String seriesPart = "";\r
+               if (isNotBlank(series)){\r
+                       seriesPart = series;\r
+                       if (CdmUtils.isNumeric(series)){\r
+                               seriesPart = prefixSeries + blank + seriesPart;\r
+                       }\r
+                       if (needsComma){\r
+                               seriesPart = comma + seriesPart;\r
+                       }\r
+                       needsComma = true;\r
+               }\r
+               nomRefCache += seriesPart;\r
+               \r
+               \r
+               //volume Part\r
+               String volumePart = "";\r
+               if (!"".equals(volume)){\r
+                       volumePart = volume;\r
+                       if (needsComma){\r
+                               volumePart = comma + blank + volumePart;\r
+                       }\r
+                       //needsComma = false;\r
+               }\r
+               nomRefCache += volumePart;\r
+               return nomRefCache;\r
        }\r
 \r
-       \r
 }\r