Project

General

Profile

Download (4.36 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 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.reference;
11

    
12
import org.apache.commons.lang.StringUtils;
13
import org.apache.log4j.Logger;
14

    
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;
20

    
21
/**
22
 * @author a.mueller
23
 * @created 29.06.2008
24
 */
25
public abstract class NomRefDefaultCacheStrategyBase extends StrategyBase implements INomenclaturalReferenceCacheStrategy{
26
	private static final long serialVersionUID = -725290113353165022L;
27

    
28
	@SuppressWarnings("unused")
29
	private static final Logger logger = Logger.getLogger(NomRefDefaultCacheStrategyBase.class);
30
	
31
	protected String beforeYear = ". ";
32
	protected String beforeMicroReference = ": ";
33
	protected String afterYear = "";
34
	protected String afterAuthor = ", ";	
35
	
36

    
37
	@Override
38
	public String getTokenizedNomenclaturalTitel(Reference ref) {
39
		String result =  getTitleWithoutYearAndAuthor(ref, true);
40
		result += INomenclaturalReference.MICRO_REFERENCE_TOKEN;
41
		result = addYear(result, ref, true);
42
		return result;
43
	}
44

    
45
	@Override
46
	public String getTitleCache(Reference nomenclaturalReference) {
47
		return getTitleCache(nomenclaturalReference, false);
48
	}
49

    
50
	@Override
51
	public String getAbbrevTitleCache(Reference nomenclaturalReference) {
52
		return getTitleCache(nomenclaturalReference, true);
53
	}
54
	
55
	private String getTitleCache(Reference ref, boolean isAbbrev) {
56
		//TODO needed?
57
		if (isAbbrev && ref.isProtectedAbbrevTitleCache()){
58
			return ref.getAbbrevTitleCache();
59
		}else if (!isAbbrev && ref.isProtectedTitleCache()){
60
			return ref.getTitleCache();
61
		}
62
		String result =  getTitleWithoutYearAndAuthor(ref, isAbbrev);
63
		result = addYear(result, ref, false);
64
		TeamOrPersonBase<?> team = ref.getAuthorTeam();
65
		
66
		if (team != null){
67
			String teamTitle = CdmUtils.getPreferredNonEmptyString(team.getTitleCache(), team.getNomenclaturalTitle(), isAbbrev, true);
68
			if (teamTitle.length() > 0 ){
69
				String concat = isNotBlank(result) ? afterAuthor : "";
70
				result = team.getTitleCache() + concat + result;
71
			}
72
			
73
		}
74
		return result;
75
	}
76
	
77
	protected abstract String getTitleWithoutYearAndAuthor(Reference reference, boolean isAbbrev);
78

    
79
	
80
	@Override
81
	public String getCitation(Reference referenceBase) {
82
		StringBuilder stringBuilder = new StringBuilder();
83
		
84
		String nextConcat = "";
85
		
86
		TeamOrPersonBase<?> team = referenceBase.getAuthorTeam();
87
		if (team != null &&  ! (team.getTitleCache() == null) && ! team.getTitleCache().trim().equals("")){
88
			stringBuilder.append(team.getTitleCache() );
89
			nextConcat = afterAuthor;
90
		}
91
		
92
		String year = referenceBase.getYear();
93
		if (StringUtils.isNotBlank(year)){
94
			stringBuilder.append(nextConcat + year);
95
		}
96
		
97
		return stringBuilder.toString();
98
	}
99
	
100

    
101
	@Override
102
	public String getBeforeMicroReference(){
103
		return beforeMicroReference;
104
	}
105
	
106
	protected String addYear(String string, Reference nomRef, boolean useFullDatePublished){
107
		String result;
108
		if (string == null){
109
			return null;
110
		}
111
		String year = useFullDatePublished ? nomRef.getDatePublishedString() : nomRef.getYear();
112
		if (StringUtils.isBlank(year)){
113
			result = string + afterYear;
114
		}else{
115
			String concat = isBlank(string)  ? "" : string.endsWith(".")? " " : beforeYear;
116
			result = string + concat + year + afterYear;
117
		}
118
		return result;
119
	}
120
	
121
	@Override
122
	public String getNomenclaturalCitation(Reference nomenclaturalReference, String microReference) {
123
		if (nomenclaturalReference.isProtectedTitleCache()){
124
			return nomenclaturalReference.getTitleCache();
125
		}
126
		String result = getTokenizedNomenclaturalTitel(nomenclaturalReference);
127
		microReference = CdmUtils.Nz(microReference);
128
		if (StringUtils.isNotBlank(microReference)){
129
			microReference = getBeforeMicroReference() + microReference;
130
		}
131
		result = result.replaceAll(INomenclaturalReference.MICRO_REFERENCE_TOKEN, microReference);
132
		if (result.startsWith(". ")){
133
			result = result.substring(2);
134
		}
135
		return result;
136
	}
137

    
138
}
(10-10/13)