Project

General

Profile

Download (10.1 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.strategy.cache.taxon;
2

    
3

    
4
/**
5
* Copyright (C) 2015 EDIT
6
* European Distributed Institute of Taxonomy
7
* http://www.e-taxonomy.eu
8
*
9
* The contents of this file are subject to the Mozilla Public License Version 1.1
10
* See LICENSE.TXT at the top of this package for the full license terms.
11
*/
12

    
13

    
14

    
15
import java.util.ArrayList;
16
import java.util.List;
17
import java.util.UUID;
18

    
19
import org.apache.commons.lang.StringUtils;
20

    
21
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
22
import eu.etaxonomy.cdm.model.agent.Person;
23
import eu.etaxonomy.cdm.model.agent.Team;
24
import eu.etaxonomy.cdm.model.name.NonViralName;
25
import eu.etaxonomy.cdm.model.name.TaxonNameBase;
26
import eu.etaxonomy.cdm.model.reference.Reference;
27
import eu.etaxonomy.cdm.model.taxon.TaxonBase;
28
import eu.etaxonomy.cdm.strategy.StrategyBase;
29
import eu.etaxonomy.cdm.strategy.cache.HTMLTagRules;
30
import eu.etaxonomy.cdm.strategy.cache.TagEnum;
31
import eu.etaxonomy.cdm.strategy.cache.TaggedCacheHelper;
32
import eu.etaxonomy.cdm.strategy.cache.TaggedText;
33
import eu.etaxonomy.cdm.strategy.cache.name.INameCacheStrategy;
34

    
35
public class TaxonBaseShortSecCacheStrategy<T extends TaxonBase>
36
        extends StrategyBase
37
        implements ITaxonCacheStrategy<T> {
38

    
39
	final static UUID uuid = UUID.fromString("931e48f0-2033-11de-8c30-0800200c9a66");
40

    
41
	@Override
42
	protected UUID getUuid() {
43
		return uuid;
44
	}
45

    
46
//	@Override
47
//    public String getTitleCache(T taxonBase) {
48
//	    return getTitleCache(taxonBase, null);
49
//    }
50

    
51
	@Override
52
    public String getTitleCache(T taxonBase) {
53
		String title;
54
		if (taxonBase.getName() != null && taxonBase.getName().getTitleCache() != null){
55
			String namePart = getNamePart(taxonBase);
56

    
57
			title = namePart + " sec. ";
58
			title += getSecundumPart(taxonBase);
59
		}else{
60
			title = taxonBase.toString();
61
		}
62
		if (taxonBase.isDoubtful()){
63
			title = "?" + title;
64
		}
65
		return title;
66
	}
67

    
68
	/**
69
	 * @param taxonBase
70
	 * @param title
71
	 * @return
72
	 */
73
	private String getSecundumPart(T taxonBase) {
74
		String result = "???";
75
		Reference<?> sec = taxonBase.getSec();
76
		sec = HibernateProxyHelper.deproxy(sec, Reference.class);
77
		if (sec != null){
78
			if (sec.isProtectedTitleCache()){
79
				return sec.getTitleCache();
80
			}
81
			if (sec.getAuthorship() != null){
82

    
83
				if (sec.getAuthorship().isInstanceOf(Team.class)){
84
					Team authorTeam = HibernateProxyHelper.deproxy(sec.getAuthorship(), Team.class);
85
					if (authorTeam.getTeamMembers().size() > 2){
86
						if (authorTeam.getTeamMembers().get(0).getLastname() != null){
87
					        result = authorTeam.getTeamMembers().get(0).getLastname() + " & al.";
88
					    } else {
89
					        result = authorTeam.getTeamMembers().get(0).getTitleCache();
90
					        result = result + " & al.";
91
					    }
92
					} else if (authorTeam.getTeamMembers().size() == 2){
93
						String firstAuthor;
94
						if (authorTeam.getTeamMembers().get(0).getLastname() != null){
95
							firstAuthor = authorTeam.getTeamMembers().get(0).getLastname();
96
						}else{
97
							firstAuthor = authorTeam.getTeamMembers().get(0).getTitleCache();
98
						}
99
						String secondAuthor;
100
						if (authorTeam.getTeamMembers().get(1).getLastname() != null){
101
							secondAuthor = authorTeam.getTeamMembers().get(1).getLastname();
102
						}else{
103
							secondAuthor = authorTeam.getTeamMembers().get(1).getTitleCache();
104
						}
105
						result = firstAuthor + " & " + secondAuthor;
106

    
107
					} else{
108
						if (authorTeam.getTeamMembers().get(0).getLastname() != null){
109
					        result = authorTeam.getTeamMembers().get(0).getLastname();
110
					    } else {
111
					        result = authorTeam.getTeamMembers().get(0).getTitleCache();
112
					    }
113
					}
114

    
115
				} else {
116
					Person author = HibernateProxyHelper.deproxy(sec.getAuthorship(), Person.class);
117
					if (author.getLastname() != null){
118
						result = author.getLastname();
119
					} else{
120
						result = author.getTitleCache();
121
					}
122
				}
123
				if (result != null){
124
					result = result.replaceAll("[A-Z]\\.", "");
125
				}
126
				if (sec.getYear() != null && result != null){
127
					result = result.concat(" (" + sec.getYear()+")");
128
				}
129
			}else{
130
				result = taxonBase.getSec().getTitleCache();
131
			}
132
		}
133
		return result;
134
	}
135

    
136
	/**
137
	 * @param name
138
	 */
139
	private String getNamePart(TaxonBase<?> taxonBase) {
140
		TaxonNameBase<?,?> nameBase = taxonBase.getName();
141
		String result = nameBase.getTitleCache();
142
		//use name cache instead of title cache if required
143
		if (taxonBase.isUseNameCache() && nameBase.isInstanceOf(NonViralName.class)){
144
			NonViralName<?> nvn = HibernateProxyHelper.deproxy(nameBase, NonViralName.class);
145
			result = nvn.getNameCache();
146
		}
147
		if (StringUtils.isNotBlank(taxonBase.getAppendedPhrase())){
148
			result = result.trim() + " " +  taxonBase.getAppendedPhrase().trim();
149
		}
150
		return result;
151
	}
152

    
153
    @Override
154
    public List<TaggedText> getTaggedTitle(T taxonBase) {
155
        if (taxonBase == null){
156
            return null;
157
        }
158

    
159
        List<TaggedText> tags = new ArrayList<TaggedText>();
160

    
161
        if (taxonBase.isProtectedTitleCache()){
162
            //protected title cache
163
            tags.add(new TaggedText(TagEnum.name, taxonBase.getTitleCache()));
164
            return tags;
165
        }else{
166
            //name
167
            TaxonNameBase<?,INameCacheStrategy<TaxonNameBase>> name = taxonBase.getName();
168
            if (name != null){
169
                //TODO
170
                List<TaggedText> nameTags = name.getCacheStrategy().getTaggedTitle(name);
171
                tags.addAll(nameTags);
172
            }
173

    
174
            //sec.
175
            tags.add(new TaggedText(TagEnum.separator, "sec."));
176

    
177
            //ref.
178
            Reference<?> ref = taxonBase.getSec();
179
            ref = HibernateProxyHelper.deproxy(ref, Reference.class);
180
            if (ref != null){
181
                List<TaggedText> secTags = getSecReferenceTags(ref);
182
                tags.addAll(secTags);
183
            }else{
184
                tags.add(new TaggedText(TagEnum.reference, "???"));
185
            }
186
        }
187
        return tags;
188
    }
189

    
190
    /**
191
     * @param ref
192
     */
193
    private List<TaggedText> getSecReferenceTags(Reference<?> sec) {
194
        List<TaggedText> tags = new ArrayList<TaggedText>();
195

    
196
        if (sec.isProtectedTitleCache()){
197
            tags.add(new TaggedText(TagEnum.reference, sec.getTitleCache()));
198
        }else{
199
            if (sec.getAuthorship() != null){
200
                List<TaggedText> authorTags;
201
                if (sec.getAuthorship().isInstanceOf(Team.class)){
202
                    authorTags = handleTeam(sec);
203
                } else {
204
                    authorTags = handlePerson(sec);
205
                }
206
                tags.addAll(authorTags);
207

    
208
                //FIXME why did we have this normalization? For removing first names??
209
//                if (result != null){
210
//                    result = result.replaceAll("[A-Z]\\.", "");
211
//                }
212

    
213
                //year
214
                String year = sec.getYear();
215
                if (StringUtils.isNotBlank(year) && ! authorTags.isEmpty()){
216
                    tags.add(new TaggedText(TagEnum.separator, "("));
217
                    tags.add(new TaggedText(TagEnum.year, year));
218
                    tags.add(new TaggedText(TagEnum.separator, ")"));
219
                }
220
            }else{
221

    
222
            }
223
        }
224

    
225
        return tags;
226
    }
227

    
228
    private List<TaggedText>  handlePerson(Reference<?> sec) {
229
        List<TaggedText> tags = new ArrayList<TaggedText>();
230

    
231
        Person author = HibernateProxyHelper.deproxy(sec.getAuthorship(), Person.class);
232
        String authorStr;
233
        if (author.getLastname() != null){
234
            authorStr = author.getLastname();
235
        } else{
236
            authorStr = author.getTitleCache();
237
        }
238
        tags.add(new TaggedText(TagEnum.authors, authorStr));
239
        return tags;
240
    }
241

    
242
    private List<TaggedText> handleTeam(Reference<?> sec) {
243
        List<TaggedText> tags = new ArrayList<TaggedText>();
244

    
245
        Team authorTeam = HibernateProxyHelper.deproxy(sec.getAuthorship(), Team.class);
246
        if (authorTeam.isProtectedTitleCache() || authorTeam.getTeamMembers().isEmpty()){
247
            String authorStr = authorTeam.getTitleCache();
248
            tags.add(new TaggedText(TagEnum.authors, authorStr));
249
        }else if (authorTeam.getTeamMembers().size() > 2){
250
            //>2 members
251
            if (authorTeam.getTeamMembers().get(0).getLastname() != null){
252
                String authorStr = authorTeam.getTeamMembers().get(0).getLastname() + " & al.";
253
                tags.add(new TaggedText(TagEnum.authors, authorStr));
254
            } else {
255
                String authorStr = authorTeam.getTeamMembers().get(0).getTitleCache();
256
                authorStr = authorStr + " & al.";
257
                tags.add(new TaggedText(TagEnum.authors, authorStr));
258
            }
259
        } else if (authorTeam.getTeamMembers().size() == 2){
260
            //2 members
261
            String firstAuthor;
262
            if (authorTeam.getTeamMembers().get(0).getLastname() != null){
263
                firstAuthor = authorTeam.getTeamMembers().get(0).getLastname();
264
            }else{
265
                firstAuthor = authorTeam.getTeamMembers().get(0).getTitleCache();
266
            }
267
            String secondAuthor;
268
            if (authorTeam.getTeamMembers().get(1).getLastname() != null){
269
                secondAuthor = authorTeam.getTeamMembers().get(1).getLastname();
270
            }else{
271
                secondAuthor = authorTeam.getTeamMembers().get(1).getTitleCache();
272
            }
273
            String authorStr = firstAuthor + " & " + secondAuthor;
274
            tags.add(new TaggedText(TagEnum.authors, authorStr));
275
        } else{
276
            //1 member
277
            String authorStr;
278
            if (authorTeam.getTeamMembers().get(0).getLastname() != null){
279
                authorStr = authorTeam.getTeamMembers().get(0).getLastname();
280
            } else {
281
                authorStr = authorTeam.getTeamMembers().get(0).getTitleCache();
282
            }
283
            tags.add(new TaggedText(TagEnum.authors, authorStr));
284
        }
285
        return tags;
286
    }
287

    
288
    @Override
289
    public String getTitleCache(T taxonBase, HTMLTagRules htmlTagRules) {
290
        List<TaggedText> tags = getTaggedTitle(taxonBase);
291
        if (tags == null){
292
            return null;
293
        }else{
294
            String result = TaggedCacheHelper.createString(tags, htmlTagRules);
295
            return result;
296
        }
297
    }
298

    
299
}
(3-3/3)