Project

General

Profile

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

    
16
import javax.xml.bind.annotation.XmlAccessType;
17
import javax.xml.bind.annotation.XmlAccessorType;
18
import javax.xml.bind.annotation.XmlRootElement;
19
import javax.xml.bind.annotation.XmlType;
20

    
21
import org.apache.log4j.Logger;
22

    
23

    
24

    
25
/**
26
 * @author m.doering
27
 * Special array that takes care that all LanguageString elements have a unique language
28
 */
29
@XmlAccessorType(XmlAccessType.FIELD)
30
@XmlType(name = "MultilanguageText")
31
@XmlRootElement(name = "MultilanguageText")
32
public class MultilanguageText extends HashMap<Language, LanguageString> implements Cloneable{
33
	private static final long serialVersionUID = 7876604337076705862L;
34
	@SuppressWarnings("unused")
35
	private static final Logger logger = Logger.getLogger(MultilanguageText.class);
36
		
37
	/**
38
	 * Factory method
39
	 * @return
40
	 */
41
	public static MultilanguageText NewInstance(){
42
		MultilanguageText result =  new MultilanguageText();
43
		return result;
44
	}
45
	
46
	/**
47
	 * Factory method
48
	 * @return
49
	 */
50
	public static MultilanguageText NewInstance(LanguageString languageString){
51
		MultilanguageText result =  new MultilanguageText(languageString);
52
		return result;
53
	}
54
	
55
	public MultilanguageText(){
56
		super();
57
	}
58
	
59
	
60
	/**
61
	 * Constructor
62
	 */
63
	protected MultilanguageText (LanguageString languageString){
64
		super();
65
		this.add(languageString);
66
	}
67
	
68
	
69
	
70
	/**
71
	 * @param language
72
	 * @return
73
	 */
74
	public String getText(Language language){
75
		LanguageString languageString = super.get(language);
76
		if (languageString != null){
77
			return languageString.getText();
78
		}else {
79
			return null;
80
		}
81
	}
82
	
83
	/**
84
	 * @param languageString
85
	 * @return String the previous text in the MultilanguageSet that was associated with the language
86
	 * defined in languageString, or null if there was no such text before. (A null return can also indicate that the text was previously null.)
87
	 */
88
	public LanguageString add(LanguageString languageString){
89
		if (languageString == null){
90
			return null;
91
		}else{
92
			return this.put(languageString.getLanguage(), languageString);
93
		}
94
	}
95
	
96
	
97
	/**
98
	 * Iterates on the languages. As soon as there exists a language string for this language in this multilanguage text
99
	 * it is returned.
100
	 * @param languages
101
	 * @return 
102
	 */
103
	public LanguageString getPreferredLanguageString(List<Language> languages){
104
		
105
		LanguageString languageString = null;
106
		for (Language language : languages) {
107
			languageString = super.get(language);
108
			if(languageString != null){
109
				return languageString;
110
			}
111
		}
112
		return super.get(Language.DEFAULT());
113
	}
114
	
115
//*********** CLONE **********************************/	
116
	
117
	/** 
118
	 * Clones <i>this</i> multi-language text. This is a shortcut that enables to
119
	 * create a new instance that differs only slightly from <i>this</i> multi-language text
120
	 * by modifying only some of the attributes.<BR>
121
	 * This method overrides the clone method from {@link DerivedUnitBase DerivedUnitBase}.
122
	 * 
123
	 * @see DerivedUnitBase#clone()
124
	 * @see eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity#clone()
125
	 * @see java.lang.Object#clone()
126
	 */
127
	@Override
128
	public MultilanguageText clone(){
129
		MultilanguageText result = (MultilanguageText)super.clone();
130
		Set<Language> languages = super.keySet();
131
		for (Language language : languages){
132
			LanguageString languageString = super.get(language);
133
			this.put(language, languageString);
134
		}
135
		//no changes to: -
136
		return result;
137
	}
138

    
139
	
140

    
141
}
(25-25/44)