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