Project

General

Profile

Download (3.56 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
import eu.etaxonomy.cdm.model.term.TermBase;
27

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

    
40
	@XmlElement(name = "Language")
41
    @XmlIDREF
42
    @XmlSchemaType(name = "IDREF")
43
	private Language language;
44

    
45
	@XmlElement(name = "LanguageString")
46
    @XmlIDREF
47
    @XmlSchemaType(name = "IDREF")
48
	private LanguageString languageString;
49

    
50
// TODO: Need a HashMap instead of just one pair of Language/LanguageString
51
//	private HashMap<Language, LanguageString> mlText;
52

    
53
	public MultilanguageTextHelper() {
54
	}
55

    
56
	public MultilanguageTextHelper(Language language, LanguageString languageString) {
57
	this.language = language;
58
	this.languageString = languageString;
59
	}
60

    
61
	@Transient
62
	public Language getLanguage() {
63
		return language;
64
	}
65

    
66
	public void setLanguage(Language language) {
67
		this.language = language;
68
	}
69

    
70
	@Transient
71
	public LanguageString getLanguageString() {
72
		return languageString;
73
	}
74

    
75
	public void setLanguageString(LanguageString languageString) {
76
		this.languageString = languageString;
77
	}
78

    
79
    /**
80
	 * Returns the LanguageString in the preferred language. Preferred languages
81
	 * are specified by the parameter languages, which receives a list of
82
	 * Language instances in the order of preference. If no representation in
83
	 * any preferred languages is found the method falls back to return the
84
	 * Representation in Language.DEFAULT() and if necessary further falls back
85
	 * to return the first element found if any.
86
	 *
87
	 * TODO think about this fall-back strategy &
88
	 * see also {@link TermBase#getPreferredRepresentation(List)}
89
	 *
90
	 * @param languages
91
	 * @return
92
	 */
93
	public static LanguageString getPreferredLanguageString(Map<Language, LanguageString> multilanguageText, List<Language> languages) {
94

    
95
		LanguageString languageString = null;
96
		if(languages != null){
97
			for(Language language : languages) {
98
				languageString = multilanguageText.get(language);
99
				if(languageString != null){
100
					return languageString;
101
				}
102
			}
103
		}
104
		languageString = multilanguageText.get(Language.DEFAULT());
105

    
106
		if(languageString == null && multilanguageText.size() > 0){
107
			Iterator<LanguageString> it = multilanguageText.values().iterator();
108
			if(it.hasNext()){
109
				languageString = it.next();
110
			}
111
		}
112
		return languageString;
113
	}
114

    
115
	/**
116
	 * Returns a {@link Set} of {@link Language Languages} that are contained in the given multilanguage map
117
	 * @param multilanguageText
118
	 * @return
119
	 */
120
	public static Set<Language> getLanguages(Map<Language, LanguageString> multilanguageText){
121
		return multilanguageText.keySet();
122
	}
123
}
(43-43/60)