Project

General

Profile

Download (7.83 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
import org.apache.log4j.Logger;
16

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

    
34
/**
35
 * @author a.mueller
36
 * @since 03.06.2010
37
 *
38
 */
39
public class DerivedUnitFacadeFieldUnitCacheStrategy extends StrategyBase implements IIdentifiableEntityCacheStrategy<FieldUnit> {
40
	private static final long serialVersionUID = 1578628591216605619L;
41
	private static final Logger logger = Logger.getLogger(DerivedUnitFacadeFieldUnitCacheStrategy.class);
42

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

    
45
	@Override
46
	protected UUID getUuid() {
47
		return uuid;
48
	}
49

    
50
	private boolean includeEmptySeconds = false;
51
	private boolean includeReferenceSystem = true;
52

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

    
66

    
67
	protected String getFieldData(DerivedUnitFacade facade) {
68
		String ALTITUDE_PREFIX = "alt. ";
69
//		String ALTITUDE_POSTFIX = " m";
70

    
71
		String result = "";
72

    
73

    
74
		//country
75
		String strCountry = null;
76
		NamedArea country = facade.getCountry();
77
		Representation repCountry = country == null ? null : country.getRepresentation(Language.DEFAULT());
78
		strCountry = repCountry == null ? null: repCountry.getLabel();
79
		result = CdmUtils.concat(", ", result, strCountry);
80

    
81
		//locality
82
		result = CdmUtils.concat(", ", result, facade.getLocalityText());
83

    
84
		//elevation
85
		if (StringUtils.isNotBlank(facade.absoluteElevationToString())){
86
			result = CdmUtils.concat(", " , result, ALTITUDE_PREFIX);
87
			result += facade.absoluteElevationToString();
88
		}
89

    
90
		//exact locality
91
		if (facade.getExactLocation() != null){
92
			String exactLocation = facade.getExactLocation().toSexagesimalString(this.includeEmptySeconds, this.includeReferenceSystem);
93
			result = CdmUtils.concat(", ", result, exactLocation);
94
		}
95

    
96
		//ecology
97
		result = CdmUtils.concat(", ", result, facade.getEcology());
98

    
99
		//gathering period
100
		//TODO period.toString ??
101
		TimePeriod gatheringPeriod = facade.getGatheringPeriod();
102
		result = CdmUtils.concat(", ", result, (gatheringPeriod == null? null : gatheringPeriod.toString()));
103

    
104
		//collector (team) and field number
105
		String collectorAndFieldNumber = getCollectorAndFieldNumber(facade);
106
		result = CdmUtils.concat(", ", result, collectorAndFieldNumber);
107

    
108

    
109
		return result;
110
	}
111

    
112

    
113
	protected String addPlantDescription(String result, DerivedUnitFacade facade) {
114

    
115
		//plant description
116
		result = CdmUtils.concat("; ", result, facade.getPlantDescription());
117
		if (StringUtils.isNotBlank(result) && !result.endsWith(".")){
118
			result += ".";
119
		}
120

    
121
		return result;
122
	}
123

    
124

    
125

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

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

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

    
174
	}
175

    
176
	private String addFieldNumber(String str, String fieldNumber) {
177
		String result = CdmUtils.concat(" ", str, fieldNumber);
178
		return result;
179
	}
180

    
181

    
182

    
183
	/**
184
	 * Strategy to format a collector team member name
185
	 * @param member
186
	 * @return
187
	 */
188
	private String getMemberString(Person member) {
189
		if (StringUtils.isNotBlank(member.getFamilyName()) && ! member.isProtectedTitleCache() ){
190
			String result = member.getFamilyName();
191
			if  (StringUtils.isNotBlank(member.getGivenName())){
192
				result = member.getGivenName().substring(0,1) + ". " + result;
193
			}
194
			return result;
195
		}else{
196
			return member.getTitleCache();
197
		}
198
	}
199

    
200

    
201

    
202
	private boolean testPrimaryCollectorInCollectorTeam(AgentBase collector, Person primaryCollector) {
203
		if (collector.isInstanceOf(Person.class)){
204
			return collector.equals(primaryCollector);
205
		}else if (collector.isInstanceOf(Team.class)){
206
			Team collectorTeam = CdmBase.deproxy(collector, Team.class);
207
			return collectorTeam.getTeamMembers().contains(primaryCollector);
208
		}else{
209
			logger.warn("Collector is not of type person or team");
210
			return false;
211
		}
212
	}
213

    
214

    
215

    
216
	/**
217
	 * @param facade
218
	 */
219
	private String getCode(DerivedUnitFacade facade) {
220
		String code = "";
221
		if(facade.getCollection() != null){
222
			code = facade.getCollection().getCode();
223
			if (isBlank(code)){
224
				Institution institution = facade.getCollection().getInstitute();
225
				if (institution != null){
226
					code = institution.getCode();
227
				}
228
				if (isBlank(code)){
229
					Collection superCollection = facade.getCollection().getSuperCollection();
230
					if (superCollection != null){
231
						code = superCollection.getCode();
232
					}
233
				}
234
			}
235
		}
236
		return code;
237
	}
238

    
239
// ************************** GETTER / SETTER ******************************************************
240

    
241
	public boolean isIncludeSeconds() {
242
		return includeEmptySeconds;
243
	}
244

    
245

    
246

    
247
	public void setIncludeSeconds(boolean includeSeconds) {
248
		this.includeEmptySeconds = includeSeconds;
249
	}
250

    
251

    
252

    
253
	public void setIncludeReferenceSystem(boolean includeReferenceSystem) {
254
		this.includeReferenceSystem = includeReferenceSystem;
255
	}
256

    
257

    
258

    
259
	public boolean isIncludeReferenceSystem() {
260
		return includeReferenceSystem;
261
	}
262

    
263

    
264
}
(4-4/6)