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