1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.docstore.discovery.util;
17  
18  import com.thoughtworks.xstream.XStream;
19  import com.thoughtworks.xstream.converters.Converter;
20  import com.thoughtworks.xstream.converters.MarshallingContext;
21  import com.thoughtworks.xstream.converters.UnmarshallingContext;
22  import com.thoughtworks.xstream.io.HierarchicalStreamReader;
23  import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
24  import org.apache.commons.io.IOUtils;
25  import org.slf4j.Logger;
26  import org.slf4j.LoggerFactory;
27  
28  import java.io.InputStream;
29  import java.net.URL;
30  import java.util.ArrayList;
31  import java.util.Collections;
32  import java.util.List;
33  
34  public class Languages {
35  
36      private List<Language> languages = new ArrayList<Language>();
37      private static Languages soLanguagesISO639_1_cc = null;
38      private static Languages soLanguagesISO639_3 = null;
39      protected final Logger LOG = LoggerFactory.getLogger(Languages.class);
40      public static final String ISO_639_1_CC = "ISO_639_1_CC";
41      public static final String ISO_639_3 = "ISO_639_3";
42  
43      private Languages(String encoding) {
44          try {
45              String file = null;
46              if (ISO_639_1_CC.equals(encoding)) {
47                  file = "languages-iso-639-1-cc.xml";
48              } else if (ISO_639_3.equals(encoding)) {
49                  file = "languages-iso-639-3.xml";
50              }
51              URL url = this.getClass().getClassLoader().getResource(file);
52              XStream xStream = new XStream();
53              xStream.alias("languages", Languages.class);
54              xStream.alias("lang", Language.class);
55              xStream.addImplicitCollection(Languages.class, "languages", Language.class);
56              xStream.registerConverter(new LanguageConverter());
57              Languages langs = (Languages) xStream.fromXML(IOUtils.toString((InputStream) url.getContent()));
58              this.setLanguages(Collections.unmodifiableList(langs.getLanguages()));
59          } catch (Exception e) {
60              LOG.error(e.getMessage(), e);
61          }
62      }
63  
64      
65  
66  
67  
68  
69  
70      public static Languages getInstance(String encoding) {
71          if (ISO_639_1_CC.equals(encoding)) {
72              if (soLanguagesISO639_1_cc == null) {
73                  soLanguagesISO639_1_cc = new Languages(encoding);
74              }
75              return soLanguagesISO639_1_cc;
76          } else if (ISO_639_3.equals(encoding)) {
77              if (soLanguagesISO639_3 == null) {
78                  soLanguagesISO639_3 = new Languages(encoding);
79              }
80              return soLanguagesISO639_3;
81          } else {
82              return null;
83          }
84      }
85  
86      
87  
88  
89  
90  
91  
92      public Language getLanguage(String code) {
93          int indx = getLanguages().indexOf(new Language(code));
94          if (indx != -1) {
95              return this.getLanguages().get(indx);
96          } else {
97              return null;
98          }
99      }
100 
101     
102 
103 
104 
105 
106 
107     public String getLanguageDescription(String code) {
108         int indx = getLanguages().indexOf(new Language(code));
109         if (indx != -1) {
110             return this.getLanguages().get(indx).getValue();
111         } else {
112             return null;
113         }
114     }
115 
116     public List<Language> getLanguages() {
117         return languages;
118     }
119 
120     private void setLanguages(List<Language> languages) {
121         this.languages = languages;
122     }
123 
124     private void addLanguage(Language language) {
125         this.languages.add(language);
126     }
127 
128     
129 
130 
131 
132 
133     class Language {
134         public Language() {
135         }
136 
137         public Language(String code) {
138             this.code = code;
139         }
140 
141         private String code = null;
142         private String value = null;
143 
144         public String getCode() {
145             return code;
146         }
147 
148         public void setCode(String code) {
149             this.code = code;
150         }
151 
152         public String getValue() {
153             return value;
154         }
155 
156         public void setValue(String value) {
157             this.value = value;
158         }
159 
160         @Override
161         public boolean equals(Object obj) {
162             if (obj instanceof Language) {
163                 if (((Language) obj).getCode().equals(code)) {
164                     return true;
165                 } else {
166                     return false;
167                 }
168             } else {
169                 return false;
170             }
171         }
172     }
173 
174     private class LanguageConverter
175             implements Converter {
176         @Override
177         public void marshal(Object o, HierarchicalStreamWriter streamWriter, MarshallingContext marshallingContext) {
178         }
179 
180         @Override
181         public Object unmarshal(HierarchicalStreamReader streamReader, UnmarshallingContext unmarshallingContext) {
182             Language language = new Language();
183             language.setCode(streamReader.getAttribute("code"));
184             language.setValue(streamReader.getValue());
185             return language;
186         }
187 
188         @Override
189         public boolean canConvert(Class aClass) {
190             return aClass.equals(Language.class);
191         }
192     }
193 }