(no commit message)
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / Language.java
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 org.apache.log4j.Logger;
14 import org.springframework.stereotype.Component;
15 import au.com.bytecode.opencsv.CSVWriter;
16
17 import java.util.*;
18
19 import javax.persistence.*;
20
21 /**
22 * list of languages according to current internet best practices as given by IANA
23 * or ISO codes. http://www.ietf.org/rfc/rfc4646.txt
24 * http://www.loc.gov/standards/iso639-2/php/English_list.php
25 * @author m.doering
26 * @version 1.0
27 * @created 08-Nov-2007 13:06:31
28 */
29 @Entity
30 @Component
31 public class Language extends DefinedTermBase {
32 static Logger logger = Logger.getLogger(Language.class);
33
34 private static final UUID uuidChinese = UUID.fromString("a9fc2782-5b2a-466f-b9c3-64d9ca6614c4");
35 public static final UUID uuidEnglish = UUID.fromString("e9f8cdb7-6819-44e8-95d3-e2d0690c3523");
36 private static final UUID uuidSpanish = UUID.fromString("511d8125-f5e6-445d-aee2-6327375238be");
37 private static final UUID uuidHindi = UUID.fromString("0a1d9d1d-135d-4575-b172-669b51673c39");
38 private static final UUID uuidArabic = UUID.fromString("4d3ec2eb-536f-4aab-81c5-34e37a3edbba");
39 private static final UUID uuidRussian = UUID.fromString("64ea9354-cbf8-40de-9f6e-387d24896f50");
40 private static final UUID uuidPortuguese = UUID.fromString("c2c08339-2405-4d7d-bd25-cbe01fb7ce09");
41 private static final UUID uuidJapanese = UUID.fromString("6778c7fb-c195-4dc1-ae3f-164201314e51");
42 private static final UUID uuidGerman = UUID.fromString("d1131746-e58b-4e80-a865-f5182c9c3073");
43 private static final UUID uuidFrench = UUID.fromString("7759a1d8-a5ea-454a-8c93-1dcfaae8cc21");
44 private static final UUID uuidItalian = UUID.fromString("fecbf0c7-fea9-465b-8a16-950517c5c0c4");
45 private static final UUID uuidDutch = UUID.fromString("9965d79a-acf9-4921-a2c0-863b8c16c056");
46 private static final UUID uuidPolish = UUID.fromString("3fdca387-f1b0-4ec1-808f-1bc3dc482194");
47
48 public static Language NewInstance(){
49 return new Language();
50 }
51
52 public static Language NewInstance(UUID uuid){
53 return new Language(uuid);
54 }
55
56
57 private char[] iso639_1 = new char[2];
58 private char[] iso639_2 = new char[3];
59
60 public Language() {
61 super();
62 }
63 public Language(UUID uuid) {
64 super();
65 this.setUuid(uuid);
66 }
67 public Language(char[] iso639_1, char[] iso639_2, String englishLabel, String frenchLabel) throws Exception {
68 super();
69 if(iso639_1.length > 2){
70 logger.warn("iso639_1 too long: "+iso639_1.toString());
71 }
72 if(iso639_2.length > 3){
73 logger.warn("iso639_2 too long: "+iso639_2.toString());
74 }
75 this.iso639_1=iso639_1;
76 this.iso639_2=iso639_2;
77 String textEnglish = englishLabel;
78 String textFrench = englishLabel;
79 String label = String.valueOf(iso639_2);
80 String labelAbbrev = null;
81 this.addRepresentation(new Representation(textEnglish, label, labelAbbrev, Language.ENGLISH()));
82 this.addRepresentation(new Representation(textFrench, label, labelAbbrev, Language.FRENCH()));
83 }
84 public Language(String text, String label, String labelAbbrev, Language lang) {
85 super();
86 this.addRepresentation(new Representation(text,label,labelAbbrev, lang));
87 }
88 public Language(String label, String text, String labelAbbrev) {
89 this(label,text,labelAbbrev, DEFAULT());
90 }
91
92 public static final Language getByUuid(UUID uuid){
93 return (Language)findByUuid(uuid);
94 }
95
96
97 public static final Language DEFAULT(){
98 return ENGLISH();
99 }
100
101
102 public static final Language CHINESE(){
103 return getByUuid(uuidChinese);
104 }
105
106 public static final Language ENGLISH(){
107 return getByUuid(uuidEnglish);
108 }
109
110 public static final Language SPANISH(){
111 return getByUuid(uuidSpanish);
112 }
113
114 public static final Language HINDI(){
115 return getByUuid(uuidHindi);
116 }
117
118 public static final Language ARABIC(){
119 return getByUuid(uuidArabic);
120 }
121
122 public static final Language RUSSIAN(){
123 return getByUuid(uuidRussian);
124 }
125
126 public static final Language PORTUGUESE(){
127 return getByUuid(uuidPortuguese);
128 }
129
130 public static final Language JAPANESE(){
131 return getByUuid(uuidJapanese);
132 }
133
134 public static final Language GERMAN(){
135 return getByUuid(uuidGerman);
136 }
137
138 public static final Language FRENCH(){
139 return getByUuid(uuidFrench);
140 }
141
142 public static final Language ITALIAN(){
143 return getByUuid(uuidItalian);
144 }
145
146 public static final Language DUTCH(){
147 return getByUuid(uuidDutch);
148 }
149
150 public static final Language POLISH(){
151 return getByUuid(uuidPolish);
152 }
153
154 /**
155 * Get the according iso639-1 alpha-2 language code
156 * http://www.loc.gov/standards/iso639-2/
157 *
158 * @return the iso639 alpha-2 language code or null if not available
159 */
160 //TODO create userDefinedType ?
161 @Column(length=2)
162 public String getIso639_1() {
163
164 return String.valueOf(iso639_1);
165 }
166
167 public void setIso639_1(String iso639_1) {
168 iso639_1 = iso639_1.trim();
169 if(iso639_1.length() > 2){
170 logger.warn("Iso639-1: "+iso639_1+" too long");
171 }
172 this.iso639_1 = iso639_1.toCharArray();
173 }
174
175 /**
176 * Get the according iso639-2 alpha-3 language code
177 * http://www.loc.gov/standards/iso639-2/
178 *
179 * @return the iso639 alpha-3 language code or null if not available
180 */
181 //TODO create userDefinedType ?
182 @Column(length=3)
183 public String getIso639_2() {
184 return String.valueOf(iso639_2);
185 }
186
187 public void setIso639_2(String iso639_2) {
188 iso639_2 = iso639_2.trim();
189 if(iso639_2.length() > 3 ){
190 logger.warn("Iso639-2: "+iso639_2+" too long");
191 }
192 this.iso639_2 = iso639_2.toCharArray();
193 }
194
195 @Override
196 public ILoadableTerm readCsvLine(List csvLine) {
197 ILoadableTerm result;
198 if ( UUID.fromString(csvLine.get(0).toString()).equals(DEFAULT().getUuid()) && this != DEFAULT() ){
199 result = DEFAULT();
200 result.readCsvLine(csvLine);
201 }else{
202 // read UUID, URI, english label+description
203 List<String> csvLineString = csvLine;
204 result = this;
205 super.readCsvLine(csvLine);
206 // iso codes extra
207 this.iso639_1=csvLineString.get(5).trim().toCharArray();
208 this.iso639_2=csvLineString.get(4).trim().toCharArray();
209 if(iso639_1.length > 2){
210 logger.warn("Iso639-1: "+iso639_1.toString()+" from "+csvLine.get(3)+" ,"+csvLine.get(2)+" too long");
211 }
212 if(iso639_2.length > 3 ){
213 logger.warn("Iso639-2: "+iso639_2.toString()+" from "+csvLine.get(3)+" ,"+csvLine.get(2)+" too long");
214 }
215 }
216 return result;
217 }
218
219 public void writeCsvLine(CSVWriter writer) {
220 String [] line = new String[6];
221 line[0] = getUuid().toString();
222 line[1] = getUri();
223 line[2] = getLabel(Language.ENGLISH());
224 line[3] = getDescription(Language.ENGLISH());
225 line[4] = String.valueOf(this.iso639_1);
226 line[5] = String.valueOf(this.iso639_2);
227 writer.writeNext(line);
228 }
229
230 /* (non-Javadoc)
231 * @see eu.etaxonomy.cdm.model.common.TermBase#toString()
232 */
233 @Override
234 public String toString() {
235 if (this.getLabel() != null){
236 return this.getLabel();
237 }else{
238 return super.toString();
239 }
240 }
241
242
243
244 }