2 * Copyright (C) 2009 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
.taxon
;
12 import java
.util
.ArrayList
;
13 import java
.util
.List
;
14 import java
.util
.UUID
;
16 import org
.apache
.commons
.lang
.StringUtils
;
18 import eu
.etaxonomy
.cdm
.hibernate
.HibernateProxyHelper
;
19 import eu
.etaxonomy
.cdm
.model
.common
.CdmBase
;
20 import eu
.etaxonomy
.cdm
.model
.name
.ITaxonNameBase
;
21 import eu
.etaxonomy
.cdm
.model
.name
.TaxonName
;
22 import eu
.etaxonomy
.cdm
.model
.reference
.Reference
;
23 import eu
.etaxonomy
.cdm
.model
.taxon
.Synonym
;
24 import eu
.etaxonomy
.cdm
.model
.taxon
.TaxonBase
;
25 import eu
.etaxonomy
.cdm
.strategy
.StrategyBase
;
26 import eu
.etaxonomy
.cdm
.strategy
.cache
.HTMLTagRules
;
27 import eu
.etaxonomy
.cdm
.strategy
.cache
.TagEnum
;
28 import eu
.etaxonomy
.cdm
.strategy
.cache
.TaggedCacheHelper
;
29 import eu
.etaxonomy
.cdm
.strategy
.cache
.TaggedText
;
30 import eu
.etaxonomy
.cdm
.strategy
.cache
.name
.INameCacheStrategy
;
31 import eu
.etaxonomy
.cdm
.strategy
.cache
.name
.INonViralNameCacheStrategy
;
33 public class TaxonBaseDefaultCacheStrategy
<T
extends TaxonBase
>
35 implements ITaxonCacheStrategy
<T
> {
37 private static final long serialVersionUID
= 5769890979070021350L;
38 final static UUID uuid
= UUID
.fromString("931e48f0-2033-11de-8c30-0800200c9a66");
41 protected UUID
getUuid() {
46 public String
getTitleCache(T taxonBase
) {
47 return getTitleCache(taxonBase
, null);
51 public List
<TaggedText
> getTaggedTitle(T taxonBase
) {
52 if (taxonBase
== null){
56 List
<TaggedText
> tags
= new ArrayList
<>();
58 if (taxonBase
.isDoubtful()){
59 tags
.add(new TaggedText(TagEnum
.separator
, "?"));
61 if (taxonBase
.isProtectedTitleCache()){
62 //protected title cache
63 tags
.add(new TaggedText(TagEnum
.name
, taxonBase
.getTitleCache()));
66 List
<TaggedText
> nameTags
= getNameTags(taxonBase
);
68 if (nameTags
.size() > 0){
69 tags
.addAll(nameTags
);
71 tags
.add(new TaggedText(TagEnum
.fullName
, "???"));
74 boolean isSynonym
= taxonBase
.isInstanceOf(Synonym
.class);
75 String secSeparator
= (isSynonym?
" syn." : "") + " sec. ";
76 //not used: we currently use a post-separator in the name tags
77 // if (nameTags.get(nameTags.size() - 1).getType().equals(TagEnum.nomStatus)){
78 // secSeparator = "," + secSeparator;
82 List
<TaggedText
> secTags
= getSecundumTags(taxonBase
);
85 if (!secTags
.isEmpty()){
86 tags
.add(new TaggedText(TagEnum
.separator
, secSeparator
));
94 private <X
extends ITaxonNameBase
> List
<TaggedText
> getNameTags(T taxonBase
) {
95 List
<TaggedText
> tags
= new ArrayList
<>();
96 TaxonName name
= CdmBase
.deproxy(taxonBase
.getName());
99 INameCacheStrategy nameCacheStrategy
= name
.getCacheStrategy();
100 if (taxonBase
.isUseNameCache() && name
.isNonViral() && nameCacheStrategy
instanceof INonViralNameCacheStrategy
){
101 INonViralNameCacheStrategy nvnCacheStrategy
= (INonViralNameCacheStrategy
)nameCacheStrategy
;
102 List
<TaggedText
> nameCacheTags
= nvnCacheStrategy
.getTaggedName(name
);
103 tags
.addAll(nameCacheTags
);
105 List
<TaggedText
> nameTags
= nameCacheStrategy
.getTaggedTitle(name
);
106 tags
.addAll(nameTags
);
107 List
<TaggedText
> statusTags
= nameCacheStrategy
.getNomStatusTags(name
, true, true);
108 tags
.addAll(statusTags
);
110 if (StringUtils
.isNotBlank(taxonBase
.getAppendedPhrase())){
111 tags
.add(new TaggedText(TagEnum
.appendedPhrase
, taxonBase
.getAppendedPhrase().trim()));
118 private List
<TaggedText
> getSecundumTags(T taxonBase
) {
119 List
<TaggedText
> tags
= new ArrayList
<>();
121 Reference ref
= taxonBase
.getSec();
122 ref
= HibernateProxyHelper
.deproxy(ref
, Reference
.class);
126 if (isBlank(taxonBase
.getAppendedPhrase())){
134 if (ref
.isProtectedTitleCache() == false &&
135 ref
.getCacheStrategy() != null &&
136 ref
.getAuthorship() != null &&
137 isNotBlank(ref
.getAuthorship().getTitleCache()) &&
138 isNotBlank(ref
.getYear())){
139 secRef
= ref
.getCacheStrategy().getCitation(ref
);
141 secRef
= ref
.getTitleCache();
145 tags
.add(new TaggedText(TagEnum
.secReference
, secRef
));
148 if (StringUtils
.isNotBlank(taxonBase
.getSecMicroReference())){
149 tags
.add(new TaggedText(TagEnum
.separator
, ": "));
150 tags
.add(new TaggedText(TagEnum
.secReference
, taxonBase
.getSecMicroReference()));
158 public String
getTitleCache(T taxonBase
, HTMLTagRules htmlTagRules
) {
159 List
<TaggedText
> tags
= getTaggedTitle(taxonBase
);
163 String result
= TaggedCacheHelper
.createString(tags
, htmlTagRules
);