2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.cdm
.strategy
.cache
.reference
;
12 import org
.apache
.commons
.lang
.StringUtils
;
13 import org
.apache
.log4j
.Logger
;
15 import eu
.etaxonomy
.cdm
.common
.CdmUtils
;
16 import eu
.etaxonomy
.cdm
.model
.agent
.TeamOrPersonBase
;
17 import eu
.etaxonomy
.cdm
.model
.reference
.INomenclaturalReference
;
18 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
19 import eu
.etaxonomy
.cdm
.strategy
.StrategyBase
;
26 public abstract class NomRefDefaultCacheStrategyBase
<T
extends Reference
> extends StrategyBase
implements INomenclaturalReferenceCacheStrategy
<T
>{
27 private static final long serialVersionUID
= -725290113353165022L;
29 @SuppressWarnings("unused")
30 private static final Logger logger
= Logger
.getLogger(NomRefDefaultCacheStrategyBase
.class);
32 protected String beforeYear
= ". ";
33 protected String beforeMicroReference
= ": ";
34 protected String afterYear
= "";
35 protected String afterAuthor
= ", ";
39 public String
getTokenizedNomenclaturalTitel(T ref
) {
40 String result
= getTitleWithoutYearAndAuthor(ref
, true);
41 result
+= INomenclaturalReference
.MICRO_REFERENCE_TOKEN
;
42 result
= addYear(result
, ref
, true);
47 public String
getTitleCache(T nomenclaturalReference
) {
48 return getTitleCache(nomenclaturalReference
, false);
52 public String
getAbbrevTitleCache(T nomenclaturalReference
) {
53 return getTitleCache(nomenclaturalReference
, true);
56 private String
getTitleCache(T ref
, boolean isAbbrev
) {
58 if (isAbbrev
&& ref
.isProtectedAbbrevTitleCache()){
59 return ref
.getAbbrevTitleCache();
60 }else if (!isAbbrev
&& ref
.isProtectedTitleCache()){
61 return ref
.getTitleCache();
63 String result
= getTitleWithoutYearAndAuthor(ref
, isAbbrev
);
64 result
= addYear(result
, ref
, false);
65 TeamOrPersonBase
<?
> team
= ref
.getAuthorTeam();
68 String teamTitle
= CdmUtils
.getPreferredNonEmptyString(team
.getTitleCache(), team
.getNomenclaturalTitle(), isAbbrev
, true);
69 if (teamTitle
.length() > 0 ){
70 result
= team
.getTitleCache() + afterAuthor
+ result
;
77 protected abstract String
getTitleWithoutYearAndAuthor(T reference
, boolean isAbbrev
);
80 public String
getCitation(T referenceBase
) {
81 StringBuilder stringBuilder
= new StringBuilder();
83 TeamOrPersonBase
<?
> team
= referenceBase
.getAuthorTeam();
84 if (team
!= null && ! (team
.getTitleCache() == null) && ! team
.getTitleCache().trim().equals("")){
85 //String author = CdmUtils.Nz(team == null? "" : team.getTitleCache());
86 stringBuilder
.append(team
.getTitleCache() + afterAuthor
);
89 String year
= CdmUtils
.Nz(referenceBase
.getYear());
90 if (!"".equals(year
)){
91 stringBuilder
.append(beforeYear
+ year
);
94 return stringBuilder
.toString();
98 * @see eu.etaxonomy.cdm.strategy.cache.reference.INomenclaturalReferenceCacheStrategy#getBeforeMicroReference()
100 public String
getBeforeMicroReference(){
101 return beforeMicroReference
;
104 protected String
addYear(String string
, T nomRef
, boolean useFullDatePublished
){
109 String year
= useFullDatePublished ? nomRef
.getDatePublishedString() : nomRef
.getYear();
110 if (StringUtils
.isBlank(year
)){
111 result
= string
+ afterYear
;
113 result
= string
+ beforeYear
+ year
+ afterYear
;
114 //TODO remove double dots (..) if string ends with "."? #3645
119 public String
getNomenclaturalCitation(T nomenclaturalReference
, String microReference
) {
120 if (nomenclaturalReference
.isProtectedTitleCache()){
121 return nomenclaturalReference
.getTitleCache();
123 String result
= getTokenizedNomenclaturalTitel(nomenclaturalReference
);
124 microReference
= CdmUtils
.Nz(microReference
);
125 if (StringUtils
.isNotBlank(microReference
)){
126 microReference
= getBeforeMicroReference() + microReference
;
128 result
= result
.replaceAll(INomenclaturalReference
.MICRO_REFERENCE_TOKEN
, microReference
);