Project

General

Profile

Download (2.17 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.cdm.remote.l10n;
2

    
3
import java.util.Enumeration;
4
import java.util.Hashtable;
5
import java.util.List;
6
import java.util.Locale;
7
import java.util.Vector;
8

    
9
import org.hibernate.HibernateException;
10
import org.springframework.beans.factory.annotation.Autowired;
11
import org.springframework.stereotype.Component;
12

    
13
import eu.etaxonomy.cdm.api.service.ITermService;
14
import eu.etaxonomy.cdm.model.common.Language;
15

    
16
@Component
17
public class LocaleContext {
18

    
19
	protected static ThreadLocal<Vector<Locale>> localesHolder = new ThreadLocal<Vector<Locale>>(){
20

    
21
		@Override
22
		protected Vector<Locale> initialValue() {
23
			return new Vector<Locale>();
24
		}
25

    
26
	};
27

    
28
	protected static Hashtable<String, List<Language>> languageMap = new Hashtable<String, List<Language>>();
29

    
30
	private ITermService termService;
31

    
32
	@Autowired
33
	public void setTermService(ITermService termService) {
34
		this.termService = termService;
35
	}
36

    
37
	public void setLocales(Enumeration<Locale> locales) {
38
		Vector<Locale> l = new Vector<Locale>();
39
		while(locales.hasMoreElements()){
40
			l.add(locales.nextElement());
41
		}
42
		LocaleContext.localesHolder.set(l);
43
		mapToLanguages(l);
44
	}
45

    
46
	public static Enumeration<Locale> getLocales(){
47
		return localesHolder.get().elements();
48
	}
49

    
50
	/**
51
	 *
52
	 * @return
53
	 */
54
	public static List<Language> getLanguages(){
55
		String localesKey = composeLocalesKey(getLocales());
56
		return languageMap.get(localesKey);
57
	}
58

    
59
	private void mapToLanguages(Vector<Locale> locales) {
60

    
61
		String localesKey = composeLocalesKey(locales.elements());
62

    
63
		try {
64
            if (!languageMap.containsKey(localesKey)) {
65
                List<Language> languages = termService.getLanguagesByLocale(locales.elements());
66
                languageMap.put(localesKey, languages);
67
            }
68
        } catch (HibernateException e) {
69

    
70
            System.err.println("DEBUG: " + Thread.currentThread());
71
            e.printStackTrace(System.err);
72
        }
73
	}
74

    
75
	private static String composeLocalesKey(Enumeration<Locale> locales) {
76
		String localesKey = "";
77
		while(locales.hasMoreElements()){
78
			localesKey += locales.nextElement() + ",";
79
		}
80
		return localesKey;
81
	}
82

    
83

    
84

    
85
}
(1-1/2)