Project

General

Profile

Download (9.47 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.model.common;
11

    
12

    
13
import java.util.List;
14
import java.util.Map;
15
import java.util.Set;
16
import java.util.UUID;
17

    
18
import javax.persistence.Column;
19
import javax.persistence.Entity;
20
import javax.xml.bind.annotation.XmlAccessType;
21
import javax.xml.bind.annotation.XmlAccessorType;
22
import javax.xml.bind.annotation.XmlAttribute;
23
import javax.xml.bind.annotation.XmlRootElement;
24
import javax.xml.bind.annotation.XmlType;
25

    
26
import org.apache.log4j.Logger;
27
import org.hibernate.envers.Audited;
28

    
29
import au.com.bytecode.opencsv.CSVWriter;
30

    
31
/**
32
 * list of languages according to current internet best practices as given by IANA
33
 * or ISO codes.  http://www.ietf.org/rfc/rfc4646.txt 
34
 * http://www.loc.gov/standards/iso639-2/php/English_list.php
35
 * @author m.doering
36
 * @version 1.0
37
 * @created 08-Nov-2007 13:06:31
38
 */
39
@XmlAccessorType(XmlAccessType.FIELD)
40
@XmlType(name = "Language")
41
@XmlRootElement(name = "Language")
42
@Entity
43
@Audited
44
public class Language extends DefinedTermBase<Language> {
45
	private static final long serialVersionUID = -5030610079904074217L;
46
	private static final Logger logger = Logger.getLogger(Language.class);
47

    
48
	private static final UUID uuidChinese = UUID.fromString("a9fc2782-5b2a-466f-b9c3-64d9ca6614c4");
49
	public static final UUID uuidEnglish = UUID.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
50
	private static final UUID uuidSpanish = UUID.fromString("511d8125-f5e6-445d-aee2-6327375238be");
51
	private static final UUID uuidHindi = UUID.fromString("0a1d9d1d-135d-4575-b172-669b51673c39");
52
	private static final UUID uuidArabic = UUID.fromString("4d3ec2eb-536f-4aab-81c5-34e37a3edbba");
53
	private static final UUID uuidRussian = UUID.fromString("64ea9354-cbf8-40de-9f6e-387d24896f50");
54
	private static final UUID uuidPortuguese = UUID.fromString("c2c08339-2405-4d7d-bd25-cbe01fb7ce09");
55
	private static final UUID uuidJapanese = UUID.fromString("6778c7fb-c195-4dc1-ae3f-164201314e51");
56
	private static final UUID uuidGerman = UUID.fromString("d1131746-e58b-4e80-a865-f5182c9c3073");
57
	private static final UUID uuidFrench = UUID.fromString("7759a1d8-a5ea-454a-8c93-1dcfaae8cc21");
58
	private static final UUID uuidItalian = UUID.fromString("fecbf0c7-fea9-465b-8a16-950517c5c0c4");
59
	private static final UUID uuidDutch = UUID.fromString("9965d79a-acf9-4921-a2c0-863b8c16c056");
60
	private static final UUID uuidPolish = UUID.fromString("3fdca387-f1b0-4ec1-808f-1bc3dc482194");
61
	private static final UUID uuidLatin = UUID.fromString("160a5b6c-87f5-4422-9bda-78cd404c179e");
62
	private static Language ENGLISH;
63
	private static Language LATIN;
64
	private static Language POLISH;
65
	private static Language DUTCH;
66
	private static Language ITALIAN;
67
	private static Language FRENCH;
68
	private static Language GERMAN;
69
	private static Language JAPANESE;
70
	private static Language PORTUGUESE;
71
	private static Language RUSSIAN;
72
	private static Language ARABIC;
73
	private static Language HINDI;
74
	private static Language SPANISH;
75
	private static Language CHINESE;
76
	
77
	public static Language NewInstance(){
78
		return new Language();
79
	}
80
	
81
	public static Language NewInstance(UUID uuid){
82
		return new Language(uuid);
83
	}
84
	
85
	@XmlAttribute(name = "iso639_1")
86
	//TODO create userDefinedType ?
87
	@Column(length=2)
88
	private String iso639_1;
89
	
90
	@XmlAttribute(name = "iso639_2")
91
	//TODO create userDefinedType ?
92
	@Column(length=3)
93
	private String iso639_2;
94
	
95
	public Language() {
96
		super();
97
	}
98
	public Language(UUID uuid) {
99
		super();
100
		this.setUuid(uuid);
101
	}
102
	public Language(String iso639_1, String iso639_2, String englishLabel, String frenchLabel) throws Exception {
103
		super();
104
		if(iso639_1 != null && iso639_1.length() > 2){
105
			logger.warn("iso639_1 too long: "+iso639_1.toString());
106
		}
107
		if(iso639_1 != null && iso639_2.length() > 3){
108
			logger.warn("iso639_2 too long: "+iso639_2.toString());
109
		}
110
		this.iso639_1=iso639_1;
111
		this.iso639_2=iso639_2;
112
		String textEnglish = englishLabel;
113
		String textFrench = englishLabel;
114
		String label = iso639_2;
115
		String labelAbbrev = null;
116
		this.addRepresentation(new Representation(textEnglish, label, labelAbbrev, Language.ENGLISH()));
117
		this.addRepresentation(new Representation(textFrench, label, labelAbbrev, Language.FRENCH()));
118
	}
119
	public Language(String text, String label, String labelAbbrev, Language lang) {
120
		super();
121
		this.addRepresentation(new Representation(text,label,labelAbbrev, lang));
122
	}
123
	public Language(String label, String text, String labelAbbrev) {
124
		this(label,text,labelAbbrev, DEFAULT());
125
	}
126
	
127
	public static final Language DEFAULT(){
128
		return ENGLISH;
129
	}
130

    
131
	public static final Language CHINESE(){
132
		return CHINESE;
133
	}
134

    
135
	public static final Language ENGLISH(){
136
		return ENGLISH;
137
	}
138

    
139
	public static final Language SPANISH(){
140
		return SPANISH;
141
	}
142

    
143
	public static final Language HINDI(){
144
		return HINDI;
145
	}
146

    
147
	public static final Language ARABIC(){
148
		return ARABIC;
149
	}
150

    
151
	public static final Language RUSSIAN(){
152
		return RUSSIAN;
153
	}
154

    
155
	public static final Language PORTUGUESE(){
156
		return PORTUGUESE;
157
	}
158

    
159
	public static final Language JAPANESE(){
160
		return JAPANESE;
161
	}
162

    
163
	public static final Language GERMAN(){
164
		return GERMAN;
165
	}
166
	
167
	public static final Language FRENCH(){
168
		return FRENCH;
169
	}
170

    
171
	public static final Language ITALIAN(){
172
		return ITALIAN;
173
	}
174

    
175
	public static final Language DUTCH(){
176
		return DUTCH;
177
	}
178

    
179
	public static final Language POLISH(){
180
		return POLISH;
181
	}
182
	
183
	public static final Language LATIN(){
184
		return LATIN;
185
	}
186
	
187
	/**
188
	 * Get the according iso639-1 alpha-2 language code 
189
	 * http://www.loc.gov/standards/iso639-2/
190
	 * 
191
	 * @return the iso639 alpha-2 language code or null if not available
192
	 */
193
	public String getIso639_1() {
194
		return iso639_1;
195
	}
196

    
197
	public void setIso639_1(String iso639_1) {
198
		iso639_1 = iso639_1.trim();
199
		if(iso639_1.length() > 2){
200
			logger.warn("Iso639-1: "+iso639_1+" too long");
201
		}
202
		this.iso639_1 = iso639_1;
203
	}
204

    
205
	/**
206
	 * Get the according iso639-2 alpha-3 language code 
207
	 * http://www.loc.gov/standards/iso639-2/
208
	 * 
209
	 * @return the iso639 alpha-3 language code or null if not available
210
	 */
211
	public String getIso639_2() {
212
		return iso639_2;
213
	}
214

    
215
	public void setIso639_2(String iso639_2) {
216
		iso639_2 = iso639_2.trim();
217
		if(iso639_2.length() > 3 ){
218
			logger.warn("Iso639-2: "+iso639_2+" too long");
219
		}
220
		this.iso639_2 = iso639_2;
221
	}
222
 
223
	@Override 
224
	public Language readCsvLine(Class<Language> termClass, List<String> csvLine, Map<UUID,DefinedTermBase> terms) {
225
		try {
226
		    Language newInstance =  Language.class.newInstance();
227
		    if ( UUID.fromString(csvLine.get(0).toString()).equals(Language.uuidEnglish)){
228
			    DefinedTermBase.readCsvLine(newInstance, csvLine, newInstance);
229
		    }else{
230
			    DefinedTermBase.readCsvLine(newInstance,csvLine,(Language)terms.get(Language.uuidEnglish));
231
		    }
232
		
233
		    newInstance.setIso639_1(csvLine.get(5).trim());
234
		    newInstance.setIso639_2(csvLine.get(4).trim());
235
		    //TODO could replace with generic validation
236
		    if(iso639_1 != null && iso639_1.length() > 2){
237
			    logger.warn("Iso639-1: "+ newInstance.getIso639_1() +" from "+csvLine.get(3)+" ,"+csvLine.get(2)+" too long");
238
		    }
239
		    if(iso639_2 != null &&  iso639_2.length() > 3 ){
240
			    logger.warn("Iso639-2: "+newInstance.getIso639_2()+" from "+csvLine.get(3)+" ,"+csvLine.get(2)+" too long");
241
		    }
242
		
243
		    return newInstance;
244
		} catch (Exception e) {
245
			logger.error(e);
246
			return null;
247
		} 
248
	}
249
	
250
	@Override
251
	public void writeCsvLine(CSVWriter writer, Language language) {
252
		String [] line = new String[6];
253
		line[0] = language.getUuid().toString();
254
		line[1] = language.getUri();
255
		line[2] = language.getLabel(Language.ENGLISH());
256
		line[3] = language.getDescription(Language.ENGLISH());
257
		line[4] = language.getIso639_1();
258
		line[5] = language.getIso639_2();
259
		writer.writeNext(line);
260
	}
261

    
262
	/* (non-Javadoc)
263
	 * @see eu.etaxonomy.cdm.model.common.TermBase#toString()
264
	 */
265
	@Override
266
	public String toString() {
267
		if (this.getLabel() != null){
268
			return this.getLabel();
269
		}else{
270
			return super.toString();
271
		}
272
	}
273

    
274
	@Override
275
	protected void setDefaultTerms(TermVocabulary<Language> termVocabulary) {
276
		Language.ARABIC = termVocabulary.findTermByUuid(Language.uuidArabic);
277
		Language.CHINESE = termVocabulary.findTermByUuid(Language.uuidChinese);
278
		Language.DUTCH = termVocabulary.findTermByUuid(Language.uuidDutch);
279
		Language.ENGLISH = termVocabulary.findTermByUuid(Language.uuidEnglish);
280
		Language.FRENCH = termVocabulary.findTermByUuid(Language.uuidFrench);
281
		Language.GERMAN = termVocabulary.findTermByUuid(Language.uuidGerman);
282
		Language.HINDI = termVocabulary.findTermByUuid(Language.uuidHindi);
283
		Language.ITALIAN = termVocabulary.findTermByUuid(Language.uuidItalian);
284
		Language.JAPANESE = termVocabulary.findTermByUuid(Language.uuidJapanese);
285
		Language.LATIN = termVocabulary.findTermByUuid(Language.uuidLatin);
286
		Language.POLISH = termVocabulary.findTermByUuid(Language.uuidPolish);
287
		Language.PORTUGUESE = termVocabulary.findTermByUuid(Language.uuidPortuguese);
288
		Language.RUSSIAN = termVocabulary.findTermByUuid(Language.uuidRussian);
289
		Language.SPANISH = termVocabulary.findTermByUuid(Language.uuidSpanish);
290
		addLanguageForVocabularyRepresentation(termVocabulary);
291
	}
292
	
293
	private void addLanguageForVocabularyRepresentation(TermVocabulary<Language> termVocabulary){
294
		for (Representation repr : termVocabulary.getRepresentations()){
295
			Language lang = repr.getLanguage();
296
			if (lang == null){
297
				repr.setLanguage(Language.DEFAULT());
298
			}
299
		}
300
	}
301
	
302
	
303
	
304
}
(28-28/57)