Project

General

Profile

Download (6.85 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
package eu.etaxonomy.cdm.api.facade;
10

    
11
import java.util.List;
12
import java.util.UUID;
13

    
14
import org.apache.commons.lang.StringUtils;
15

    
16
import eu.etaxonomy.cdm.common.CdmUtils;
17
import eu.etaxonomy.cdm.model.agent.AgentBase;
18
import eu.etaxonomy.cdm.model.agent.Person;
19
import eu.etaxonomy.cdm.model.agent.Team;
20
import eu.etaxonomy.cdm.model.common.CdmBase;
21
import eu.etaxonomy.cdm.model.common.Language;
22
import eu.etaxonomy.cdm.model.common.TimePeriod;
23
import eu.etaxonomy.cdm.model.location.NamedArea;
24
import eu.etaxonomy.cdm.model.occurrence.FieldUnit;
25
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationType;
26
import eu.etaxonomy.cdm.model.term.Representation;
27
import eu.etaxonomy.cdm.strategy.StrategyBase;
28
import eu.etaxonomy.cdm.strategy.cache.agent.TeamDefaultCacheStrategy;
29
import eu.etaxonomy.cdm.strategy.cache.common.IIdentifiableEntityCacheStrategy;
30

    
31
/**
32
 * Cache strategy for {@link FieldUnit field units} handled in a DerivedUnitFacade.
33
 *
34
 * @author a.mueller
35
 * @since 03.06.2010
36
 *
37
 *  * @deprecated with #9678 a similar cache strategy (FieldUnitCacheStrategy)
38
 *      was implemented in cdmlib-model. This class may be removed in future.
39
 */
40
@Deprecated
41
public class DerivedUnitFacadeFieldUnitCacheStrategy
42
        extends StrategyBase
43
        implements IIdentifiableEntityCacheStrategy<FieldUnit> {
44

    
45
    private static final long serialVersionUID = 1578628591216605619L;
46

    
47
	private static final UUID uuid = UUID.fromString("df4672c1-ce5c-4724-af6d-91e2b326d4a4");
48

    
49
	@Override
50
	protected UUID getUuid() {return uuid;}
51

    
52
	private boolean includeEmptySeconds = false;
53
	private boolean includeReferenceSystem = true;
54

    
55
	@Override
56
	public String getTitleCache(FieldUnit fieldUnit) {
57
		DerivedUnitFacade facade;
58
		String result = "";
59
		DerivedUnitFacadeConfigurator config = DerivedUnitFacadeConfigurator.NewInstance();
60
		config.setFirePropertyChangeEvents(false);
61
		facade = DerivedUnitFacade.NewInstance(SpecimenOrObservationType.FieldUnit, fieldUnit, config);
62
		result = getFieldData(facade);
63
		result = addPlantDescription(result, facade);
64
//		result = CdmUtils.addTrailingDotIfNotExists(result); #9965
65
		facade.close();
66
		return result;
67
	}
68

    
69
	protected String getFieldData(DerivedUnitFacade facade) {
70

    
71
	    FieldUnit fieldUnit = facade.getFieldUnit(false);
72
	    if (fieldUnit != null && fieldUnit.isProtectedTitleCache()){
73
	        return fieldUnit.getTitleCache();
74
	    }
75

    
76
		String ALTITUDE_PREFIX = "alt. ";
77
//		String ALTITUDE_POSTFIX = " m";
78

    
79
		String result = "";
80

    
81
		//country
82
		String strCountry = null;
83
		NamedArea country = facade.getCountry();
84
		Representation repCountry = country == null ? null : country.getRepresentation(Language.DEFAULT());
85
		strCountry = repCountry == null ? null: repCountry.getLabel();
86
		result = CdmUtils.concat(", ", result, strCountry);
87

    
88
		//locality
89
		result = CdmUtils.concat(", ", result, facade.getLocalityText());
90

    
91
		//elevation
92
		if (StringUtils.isNotBlank(facade.absoluteElevationToString())){
93
			result = CdmUtils.concat(", " , result, ALTITUDE_PREFIX);
94
			result += facade.absoluteElevationToString();
95
		}
96

    
97
		//exact locality
98
		if (facade.getExactLocation() != null){
99
			String exactLocation = facade.getExactLocation().toSexagesimalString(this.includeEmptySeconds, this.includeReferenceSystem);
100
			result = CdmUtils.concat(", ", result, exactLocation);
101
		}
102

    
103
		//ecology
104
		result = CdmUtils.concat(", ", result, facade.getEcology());
105

    
106
		//gathering period
107
		//TODO period.toString ??
108
		TimePeriod gatheringPeriod = facade.getGatheringPeriod();
109
		result = CdmUtils.concat(", ", result, (gatheringPeriod == null? null : gatheringPeriod.toString()));
110

    
111
		//collector (team) and field number
112
		String collectorAndFieldNumber = getCollectorAndFieldNumber(facade);
113
		result = CdmUtils.concat(", ", result, collectorAndFieldNumber);
114

    
115
		return result;
116
	}
117

    
118
	protected String addPlantDescription(String result, DerivedUnitFacade facade) {
119
		//plant description
120
		result = CdmUtils.concat("; ", result, facade.getPlantDescription());
121
		return result;
122
	}
123

    
124
	private String getCollectorAndFieldNumber(DerivedUnitFacade facade) {
125
		String result = "";
126
		AgentBase<?> collector = facade.getCollector();
127
		String fieldNumber = facade.getFieldNumber();
128
		Person primaryCollector = facade.getPrimaryCollector();
129

    
130
		if (collector == null){
131
			return fieldNumber;
132
		}else if(collector.isProtectedTitleCache()){
133
			return  CdmUtils.concat(" ", collector.getTitleCache(), fieldNumber);
134
		}else{
135
			result = "";
136
			Team collectorTeam;
137
			if (collector.isInstanceOf(Person.class)){
138
				collectorTeam = Team.NewInstance();
139
				if (primaryCollector == null){
140
					primaryCollector = CdmBase.deproxy(collector, Person.class);
141
				}
142
				collectorTeam.addTeamMember(primaryCollector);
143
			} else if (collector.isInstanceOf(Team.class) && ! collector.isProtectedTitleCache() ){
144
				collectorTeam = CdmBase.deproxy(collector, Team.class);
145
			}else{
146
				return  CdmUtils.concat(" ", collector.getTitleCache(), fieldNumber);
147
			}
148

    
149
			int counter = 0;
150
			boolean fieldNumberAdded = false;
151
			List<Person> teamMembers = collectorTeam.getTeamMembers();
152
			for (Person member : teamMembers){
153
				counter++;
154
				String sep = TeamDefaultCacheStrategy.teamConcatSeparator(collectorTeam, counter);
155
				result = CdmUtils.concat(sep, result, getMemberString(member) );
156
				if (member.equals(primaryCollector)){
157
					result = addFieldNumber(result, fieldNumber);
158
					fieldNumberAdded = true;
159
				}
160
			}
161
			if (collectorTeam.isHasMoreMembers()){
162
			    result = TeamDefaultCacheStrategy.addHasMoreMembers(result);
163
			}
164
			if (! fieldNumberAdded){
165
				result = addFieldNumber(result, fieldNumber);
166
			}
167
			return result;
168
		}
169
	}
170

    
171
	private String addFieldNumber(String str, String fieldNumber) {
172
		String result = CdmUtils.concat(" ", str, fieldNumber);
173
		return result;
174
	}
175

    
176
	/**
177
	 * Strategy to format a collector team member name
178
	 * @param member
179
	 * @return
180
	 */
181
	private String getMemberString(Person member) {
182
		if (StringUtils.isNotBlank(member.getFamilyName()) && ! member.isProtectedTitleCache() ){
183
			String result = member.getFamilyName();
184
			if  (StringUtils.isNotBlank(member.getGivenName())){
185
				result = member.getGivenName().substring(0,1) + ". " + result;
186
			}
187
			return result;
188
		}else{
189
			return member.getTitleCache();
190
		}
191
	}
192

    
193
// ************************** GETTER / SETTER ******************************************************
194

    
195
	public boolean isIncludeSeconds() {
196
		return includeEmptySeconds;
197
	}
198
	public void setIncludeSeconds(boolean includeSeconds) {
199
		this.includeEmptySeconds = includeSeconds;
200
	}
201

    
202
	public void setIncludeReferenceSystem(boolean includeReferenceSystem) {
203
		this.includeReferenceSystem = includeReferenceSystem;
204
	}
205
	public boolean isIncludeReferenceSystem() {
206
		return includeReferenceSystem;
207
	}
208
}
(4-4/6)