Project

General

Profile

Download (5.75 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2009 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
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.
8
*/
9

    
10
package eu.etaxonomy.cdm.strategy.cache.taxon;
11

    
12
import java.util.ArrayList;
13
import java.util.List;
14
import java.util.UUID;
15

    
16
import org.apache.commons.lang.StringUtils;
17

    
18
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
19
import eu.etaxonomy.cdm.model.common.CdmBase;
20
import eu.etaxonomy.cdm.model.name.TaxonName;
21
import eu.etaxonomy.cdm.model.reference.Reference;
22
import eu.etaxonomy.cdm.model.taxon.Synonym;
23
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
24
import eu.etaxonomy.cdm.strategy.StrategyBase;
25
import eu.etaxonomy.cdm.strategy.cache.HTMLTagRules;
26
import eu.etaxonomy.cdm.strategy.cache.TagEnum;
27
import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
28
import eu.etaxonomy.cdm.strategy.cache.TaggedText;
29
import eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy;
30
import eu.etaxonomy.cdm.strategy.cache.name.INonViralNameCacheStrategy;
31

    
32
public class TaxonBaseDefaultCacheStrategy<T extends TaxonBase>
33
        extends StrategyBase
34
        implements ITaxonCacheStrategy<T> {
35

    
36
    private static final long serialVersionUID = 5769890979070021350L;
37
    final static UUID uuid = UUID.fromString("931e48f0-2033-11de-8c30-0800200c9a66");
38

    
39
	@Override
40
	protected UUID getUuid() {
41
		return uuid;
42
	}
43

    
44
    @Override
45
    public String getTitleCache(T taxonBase) {
46
        return getTitleCache(taxonBase, null);
47
    }
48

    
49
    @Override
50
    public List<TaggedText> getTaggedTitle(T taxonBase) {
51
        if (taxonBase == null){
52
            return null;
53
        }
54

    
55
        List<TaggedText> tags = new ArrayList<>();
56

    
57
        if (taxonBase.isDoubtful()){
58
            tags.add(new TaggedText(TagEnum.separator, "?"));
59
        }
60
        if (taxonBase.isProtectedTitleCache()){
61
            //protected title cache
62
            tags.add(new TaggedText(TagEnum.name, taxonBase.getTitleCache()));
63
        }else{
64
            //name
65
            List<TaggedText> nameTags = getNameTags(taxonBase);
66

    
67
            if (nameTags.size() > 0){
68
                tags.addAll(nameTags);
69
            }else{
70
                tags.add(new TaggedText(TagEnum.fullName, "???"));
71
            }
72

    
73
            boolean isSynonym = taxonBase.isInstanceOf(Synonym.class);
74
            String secSeparator =  (isSynonym? " syn." : "") + " sec. ";
75
            //not used: we currently use a post-separator in the name tags
76
//                if (nameTags.get(nameTags.size() - 1).getType().equals(TagEnum.nomStatus)){
77
//                    secSeparator = "," + secSeparator;
78
//                }
79

    
80
            //ref.
81
            List<TaggedText> secTags = getSecundumTags(taxonBase);
82

    
83
            //sec.
84
            if (!secTags.isEmpty()){
85
                tags.add(new TaggedText(TagEnum.separator, secSeparator));
86
                tags.addAll(secTags);
87
            }
88

    
89
        }
90
        return tags;
91
    }
92

    
93
    private <X extends TaxonName> List<TaggedText> getNameTags(T taxonBase) {
94
        List<TaggedText> tags = new ArrayList<>();
95
        TaxonName name = CdmBase.deproxy(taxonBase.getName());
96

    
97
        if (name != null){
98
            INameCacheStrategy nameCacheStrategy = name.getCacheStrategy();
99
            if (taxonBase.isUseNameCache() && name.isNonViral() && nameCacheStrategy instanceof INonViralNameCacheStrategy){
100
                INonViralNameCacheStrategy nvnCacheStrategy = (INonViralNameCacheStrategy)nameCacheStrategy;
101
                List<TaggedText> nameCacheTags = nvnCacheStrategy.getTaggedName(name);
102
                tags.addAll(nameCacheTags);
103
            }else{
104
                List<TaggedText> nameTags = nameCacheStrategy.getTaggedTitle(name);
105
                tags.addAll(nameTags);
106
                List<TaggedText> statusTags = nameCacheStrategy.getNomStatusTags(name, true, true);
107
                tags.addAll(statusTags);
108
            }
109
            if (StringUtils.isNotBlank(taxonBase.getAppendedPhrase())){
110
                tags.add(new TaggedText(TagEnum.appendedPhrase, taxonBase.getAppendedPhrase().trim()));
111
            }
112
        }
113

    
114
        return tags;
115
    }
116

    
117
    private List<TaggedText> getSecundumTags(T taxonBase) {
118
        List<TaggedText> tags = new ArrayList<>();
119

    
120
        Reference ref = taxonBase.getSec();
121
        ref = HibernateProxyHelper.deproxy(ref, Reference.class);
122
        String secRef;
123
        if (ref == null){
124
            //missing sec
125
            if (isBlank(taxonBase.getAppendedPhrase())){
126
                secRef = "???";
127
            }else{
128
                secRef = null;
129
            }
130
        }
131
        else{
132
            //existing sec
133
            if (ref.isProtectedTitleCache() == false &&
134
                    ref.getCacheStrategy() != null &&
135
                    ref.getAuthorship() != null &&
136
                    isNotBlank(ref.getAuthorship().getTitleCache()) &&
137
                    isNotBlank(ref.getYear())){
138
                secRef = ref.getCacheStrategy().getCitation(ref);
139
            }else{
140
                secRef = ref.getTitleCache();
141
            }
142
        }
143
        if (secRef != null){
144
            tags.add(new TaggedText(TagEnum.secReference, secRef));
145
        }
146
        //secMicroReference
147
        if (StringUtils.isNotBlank(taxonBase.getSecMicroReference())){
148
            tags.add(new TaggedText(TagEnum.separator, ": "));
149
            tags.add(new TaggedText(TagEnum.secReference, taxonBase.getSecMicroReference()));
150

    
151
        }
152
        return tags;
153
    }
154

    
155

    
156
    @Override
157
    public String getTitleCache(T taxonBase, HTMLTagRules htmlTagRules) {
158
        List<TaggedText> tags = getTaggedTitle(taxonBase);
159
        if (tags == null){
160
            return null;
161
        }else{
162
            String result = TaggedCacheHelper.createString(tags, htmlTagRules);
163
            return result;
164
        }
165
    }
166
}
(2-2/3)