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