Project

General

Profile

Download (6.43 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
    /**
81
     * Returns the LanguageString in the preferred language. Preferred languages
82
     * are specified by the parameter languages, which receives a list of
83
     * Language instances in the order of preference. If no representation in
84
     * any preferred languages is found the method falls back to return the
85
     * Representation in Language.DEFAULT() and if necessary further falls back
86
     * to return the first element found if any.
87
     *
88
     * TODO think about this fall-back strategy &
89
     * see also {@link TermBase#getPreferredRepresentation(List)}
90
     *
91
     * @param multilanguageText the multi-language text map
92
     * @param languages the ordered list of preferred languages
93
     * @return the best matching language string
94
     */
95
	public static LanguageString getPreferredLanguageString(Map<Language, LanguageString> multilanguageText,
96
	        List<Language> languages) {
97
	    boolean restrictToGivenLanguages = false;
98
	    return getPreferredLanguageObject(multilanguageText, languages, restrictToGivenLanguages);
99
	}
100

    
101
	/**
102
	 * See {@link #getPreferredLanguageString(Map, List)}. If restrictToGivenLanguages is <code>true</code>
103
	 * a non-<code>null</code> result is returned if a language representation for one
104
	 * of the given languages exists. No default or arbitrary representation is used.
105
	 * @param multilanguageText the multi-language text map
106
	 * @param languages the ordered list of preferred languages
107
	 * @param restrictToGivenLanguages flag to indicate if a fall-back language string should be used or not
108
	 * @return the best matching language string
109
	 */
110
	public static LanguageString getPreferredLanguageString(Map<Language, LanguageString> multilanguageText,
111
	            List<Language> languages, boolean restrictToGivenLanguages) {
112
		return getPreferredLanguageObject(multilanguageText, languages, restrictToGivenLanguages);
113
	}
114

    
115
	/**
116
     * See {@link #getPreferredLanguageString(Map, List)}. If restrictToGivenLanguages is <code>true</code>
117
     * a non-<code>null</code> result is returned if a language representation for one
118
     * of the given languages exists. No default or arbitrary representation is used.
119
     * @param lstringMap Map with LAnguate as key and LSTRNG as value
120
     * @param languages the ordered list of preferred languages
121
     * @param restrictToGivenLanguages flag to indicate if a fall-back language string should be used or not
122
     * @return
123
     * @return the best matching language string
124
     */
125
    public static <LSTRING> LSTRING getPreferredLanguageObject(Map<Language, LSTRING> lstringMap,
126
                List<Language> languages) {
127
        return getPreferredLanguageObject(lstringMap, languages, false);
128
    }
129

    
130
	/**
131
     * See {@link #getPreferredLanguageString(Map, List)}. If restrictToGivenLanguages is <code>true</code>
132
     * a non-<code>null</code> result is returned if a language representation for one
133
     * of the given languages exists. No default or arbitrary representation is used.
134
     * @param lstringMap Map with LAnguate as key and LSTRNG as value
135
     * @param languages the ordered list of preferred languages
136
     * @param restrictToGivenLanguages flag to indicate if a fall-back language string should be used or not
137
	 * @return
138
     * @return the best matching language string
139
     */
140
    public static <LSTRING> LSTRING getPreferredLanguageObject(Map<Language, LSTRING> lstringMap,
141
                List<Language> languages, boolean restrictToGivenLanguages) {
142

    
143
        LSTRING lstring = null;
144
        if(languages != null){
145
            for(Language language : languages) {
146
                lstring = lstringMap.get(language);
147
                if(lstring != null){
148
                    return lstring;
149
                }
150
            }
151
        }
152
        if (!restrictToGivenLanguages){
153
            lstring = lstringMap.get(Language.DEFAULT());
154

    
155
            if(lstring == null && lstringMap.size() > 0){
156
                Iterator<LSTRING> it = lstringMap.values().iterator();
157
                if(it.hasNext()){
158
                    lstring = it.next();
159
                }
160
            }
161
        }
162
        return lstring;
163
    }
164

    
165
	/**
166
	 * Returns a {@link Set} of {@link Language Languages} that are contained in the given multi-language map
167
	 * @param multilanguageText
168
	 * @return
169
	 */
170
	public static Set<Language> getLanguages(Map<Language, LanguageString> multilanguageText){
171
		return multilanguageText.keySet();
172
	}
173
}
(46-46/58)