Project

General

Profile

Download (3.55 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2008 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
import java.util.Iterator;
13
import java.util.List;
14
import java.util.Map;
15
import java.util.Set;
16

    
17
import javax.persistence.Transient;
18
import javax.xml.bind.annotation.XmlAccessType;
19
import javax.xml.bind.annotation.XmlAccessorType;
20
import javax.xml.bind.annotation.XmlElement;
21
import javax.xml.bind.annotation.XmlIDREF;
22
import javax.xml.bind.annotation.XmlRootElement;
23
import javax.xml.bind.annotation.XmlSchemaType;
24
import javax.xml.bind.annotation.XmlType;
25

    
26
/**
27
 * @author a.babadshanjan
28
 * @created 15.09.2008
29
 * @version 1.0
30
 */
31
@XmlAccessorType(XmlAccessType.FIELD)
32
@XmlType(name = "MultilanguageTextHelper", propOrder = {
33
    "language",
34
    "languageString"
35
})
36
@XmlRootElement(name = "MultilanguageTextHelper")
37
public class MultilanguageTextHelper {
38

    
39
	@XmlElement(name = "Language")
40
    @XmlIDREF
41
    @XmlSchemaType(name = "IDREF")
42
	private Language language;
43
	
44
	@XmlElement(name = "LanguageString")
45
    @XmlIDREF
46
    @XmlSchemaType(name = "IDREF")
47
	private LanguageString languageString;
48

    
49
// TODO: Need a HashMap instead of just one pair of Language/LanguageString
50
//	private HashMap<Language, LanguageString> mlText;
51
	
52
	public MultilanguageTextHelper() {
53
	}
54
	
55
	public MultilanguageTextHelper(Language language, LanguageString languageString) {
56
	this.language = language;
57
	this.languageString = languageString;
58
	}
59
	
60
	@Transient
61
	public Language getLanguage() {
62
		return language;
63
	}
64
	
65
	public void setLanguage(Language language) {
66
		this.language = language;
67
	}
68

    
69
	@Transient
70
	public LanguageString getLanguageString() {
71
		return languageString;
72
	}
73
	
74
	public void setLanguageString(LanguageString languageString) {
75
		this.languageString = languageString;
76
	}
77
	
78
    /**
79
	 * Returns the LanguageString in the preferred language. Preferred languages
80
	 * are specified by the parameter languages, which receives a list of
81
	 * Language instances in the order of preference. If no representation in
82
	 * any preferred languages is found the method falls back to return the
83
	 * Representation in Language.DEFAULT() and if neccesary further falls back
84
	 * to return the first element found if any.
85
	 * 
86
	 * TODO think about this fall-back strategy & 
87
	 * see also {@link TermBase#getPreferredRepresentation(List)}
88
	 * 
89
	 * @param languages
90
	 * @return
91
	 */
92
	public static LanguageString getPreferredLanguageString(Map<Language, LanguageString> multilanguageText, List<Language> languages) {
93
		
94
		LanguageString languageString = null;
95
		if(languages != null){
96
			for(Language language : languages) {
97
				languageString = multilanguageText.get(language);
98
				if(languageString != null){
99
					return languageString;
100
				}
101
			}
102
		}
103
		languageString = multilanguageText.get(Language.DEFAULT());
104
		
105
		if(languageString == null && multilanguageText.size() > 0){
106
			Iterator<LanguageString> it = multilanguageText.values().iterator();
107
			if(it.hasNext()){
108
				languageString = it.next();
109
			}
110
		}
111
		return languageString;
112
	}
113
	
114
	/**
115
	 * Returns a {@link Set} of {@link Language Languages} that are contained in the given multilanguage map
116
	 * @param multilanguageText
117
	 * @return
118
	 */
119
	public static Set<Language> getLanguages(Map<Language, LanguageString> multilanguageText){
120
		return multilanguageText.keySet();
121
	}
122
}
(49-49/72)