merging delete functionality into trunk
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / strategy / cache / reference / ArticleDefaultCacheStrategy.java
index fc58340b2e6d159935861adcb1b9791bbbd585ec..02601c95988c358fb7e196ece649554979a3d632 100644 (file)
@@ -10,23 +10,23 @@ package eu.etaxonomy.cdm.strategy.cache.reference;
 \r
 import java.util.UUID;\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.reference.Article;\r
-import eu.etaxonomy.cdm.model.reference.Book;\r
-import eu.etaxonomy.cdm.model.reference.INomenclaturalReference;\r
-import eu.etaxonomy.cdm.strategy.StrategyBase;\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 Article> extends NomRefDefaultCacheStrategyBase<T> implements  INomenclaturalReferenceCacheStrategy<T> {\r
+public class ArticleDefaultCacheStrategy <T extends Reference> extends NomRefDefaultCacheStrategyBase<T> implements  INomenclaturalReferenceCacheStrategy<T> {\r
+       @SuppressWarnings("unused")\r
        private static final Logger logger = Logger.getLogger(ArticleDefaultCacheStrategy.class);\r
        \r
-       private String prefixSeries = "ser.";\r
-       private String prefixVolume = "vol.";\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 dot =".";\r
+       private String prefixSeries = "ser.";\r
        \r
        final static UUID uuid = UUID.fromString("0d45343a-0c8a-4a64-97ca-e94974b65c96");\r
        \r
@@ -54,31 +54,58 @@ public class ArticleDefaultCacheStrategy <T extends Article> extends NomRefDefau
                super();\r
        }\r
 \r
-       protected String getNomRefTitleWithoutYearAndAuthor(T article){\r
-               if (article == null){\r
-                       return null;\r
+       \r
+       \r
+       @Override\r
+       public String getTitleCache(T article) {\r
+               if (article.isProtectedTitleCache()){\r
+                       return article.getTitleCache();\r
+               }\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 &&  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
-               if (article.getInJournal() == null){\r
+               return result;\r
+       }\r
+\r
+       @Override\r
+       protected String getTitleWithoutYearAndAuthor(T article, boolean isAbbrev){\r
+               if (article == null){\r
                        return null;\r
                }\r
+               IJournal journal = article.getInReference();\r
+               boolean hasJournal = (journal != null);\r
                \r
-               String titelAbbrev = CdmUtils.Nz(article.getInJournal().getTitle());\r
-               String series = article.getSeries();\r
-               String volume = CdmUtils.Nz(article.getVolume());\r
+               String journalTitel;\r
+               if (hasJournal){\r
+                       journalTitel = CdmUtils.getPreferredNonEmptyString(journal.getTitle(), journal.getAbbrevTitle(), isAbbrev, true);\r
+               }else{\r
+                       journalTitel = UNDEFINED_JOURNAL;\r
+               }\r
                \r
-               boolean lastCharIsDouble;\r
-               Integer len;\r
-               String lastChar;\r
-               String character =".";\r
-               len = titelAbbrev.length();\r
-               if (len > 0){lastChar = titelAbbrev.substring(len-1, len);}\r
-               //lastCharIsDouble = f_core_CompareStrings(RIGHT(@TitelAbbrev,1),character);\r
-               lastCharIsDouble = titelAbbrev.equals(character);\r
-\r
-//             if(lastCharIsDouble  && edition.length() == 0 && series.length() == 0 && volume.length() == 0 && refYear.length() > 0 ){\r
-//                     titelAbbrev =  titelAbbrev.substring(1, len-1); //  SUBSTRING(@TitelAbbrev,1,@LEN-1)\r
-//             }\r
-\r
+               String series = Nz(article.getSeries()).trim();\r
+               String volume = Nz(article.getVolume()).trim();\r
                \r
                boolean needsComma = false;\r
                \r
@@ -88,15 +115,27 @@ public class ArticleDefaultCacheStrategy <T extends Article> extends NomRefDefau
                nomRefCache = prefixReferenceJounal + blank; \r
                \r
                //titelAbbrev\r
-               if (!"".equals(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
+               \r
+               //delete "."\r
+               while (nomRefCache.endsWith(".")){\r
+                       nomRefCache = nomRefCache.substring(0, nomRefCache.length()-1);\r
+               }\r
+               \r
+               return nomRefCache.trim();\r
+       }\r
+       \r
+       protected String getSeriesAndVolPart(String series, String volume,\r
+                       boolean needsComma, String nomRefCache) {\r
                //inSeries\r
                String seriesPart = "";\r
-               if (!"".equals(series)){\r
+               if (isNotBlank(series)){\r
                        seriesPart = series;\r
-                       if (isNumeric(series)){\r
+                       if (CdmUtils.isNumeric(series)){\r
                                seriesPart = prefixSeries + blank + seriesPart;\r
                        }\r
                        if (needsComma){\r
@@ -117,28 +156,7 @@ public class ArticleDefaultCacheStrategy <T extends Article> extends NomRefDefau
                        //needsComma = false;\r
                }\r
                nomRefCache += volumePart;\r
-               \r
-               //delete .\r
-               while (nomRefCache.endsWith(".")){\r
-                       nomRefCache = nomRefCache.substring(0, nomRefCache.length()-1);\r
-               }\r
-               \r
                return nomRefCache;\r
        }\r
-       \r
-       private boolean isNumeric(String string){\r
-               if (string == null){\r
-                       return false;\r
-               }\r
-               try {\r
-                       Double.valueOf(string);\r
-                       return true;\r
-               } catch (NumberFormatException e) {\r
-                       return false;\r
-               }\r
-               \r
-       }\r
-\r
-\r
 \r
 }\r