Fixes an issue where update of title caches did not work for cloned instances.
[cdmlib.git] / cdmlib-model / src / main / java / eu / etaxonomy / cdm / model / common / MultilanguageText.java
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
15 import org.apache.log4j.Logger;
16
17 import eu.etaxonomy.cdm.model.occurrence.DerivedUnitBase;
18
19 /**
20 * @author m.doering
21 * Special array that takes care that all LanguageString elements have a unique language
22 */
23 public class MultilanguageText extends HashMap<Language, LanguageString> implements Cloneable, IMultiLanguageText {
24 private static final long serialVersionUID = 7876604337076705862L;
25 private static final Logger logger = Logger.getLogger(MultilanguageText.class);
26
27 /**
28 * Factory method
29 * @return
30 */
31 public static MultilanguageText NewInstance(){
32 MultilanguageText result = new MultilanguageText();
33 return result;
34 }
35
36 /**
37 * Factory method
38 * @return
39 */
40 public static MultilanguageText NewInstance(LanguageString languageString){
41 MultilanguageText result = new MultilanguageText(languageString);
42 return result;
43 }
44
45 public MultilanguageText(){
46 super();
47 }
48
49
50 /**
51 * Constructor
52 */
53 protected MultilanguageText (LanguageString languageString){
54 super();
55 this.add(languageString);
56 }
57
58 public MultilanguageText(int initialCapacity, float loadFactor) {
59 super(initialCapacity, loadFactor);
60 }
61
62 /* (non-Javadoc)
63 * @see eu.etaxonomy.cdm.model.common.IMultiLanguageText#getText(eu.etaxonomy.cdm.model.common.Language)
64 */
65 public String getText(Language language){
66 LanguageString languageString = super.get(language);
67 if (languageString != null){
68 return languageString.getText();
69 }else {
70 return null;
71 }
72 }
73
74 /* (non-Javadoc)
75 * @see eu.etaxonomy.cdm.model.common.IMultiLanguageText#add(eu.etaxonomy.cdm.model.common.LanguageString)
76 */
77 public LanguageString add(LanguageString languageString){
78 if (languageString == null){
79 return null;
80 }else{
81 return this.put(languageString.getLanguage(), languageString);
82 }
83 }
84
85
86 /* (non-Javadoc)
87 * @see eu.etaxonomy.cdm.model.common.IMultiLanguageText#getPreferredLanguageString(java.util.List)
88 */
89 public LanguageString getPreferredLanguageString(List<Language> languages){
90 return MultilanguageTextHelper.getPreferredLanguageString(this, languages);
91 }
92
93 //*********** CLONE **********************************/
94
95 /**
96 * Clones <i>this</i> multi-language text. This is a shortcut that enables to
97 * create a new instance that differs only slightly from <i>this</i> multi-language text
98 * by modifying only some of the attributes.<BR>
99 * This method overrides the clone method from {@link DerivedUnitBase DerivedUnitBase}.
100 *
101 * @see DerivedUnitBase#clone()
102 * @see eu.etaxonomy.cdm.model.media.IdentifiableMediaEntity#clone()
103 * @see java.lang.Object#clone()
104 */
105 @Override
106 public MultilanguageText clone() {
107 MultilanguageText result = (MultilanguageText)super.clone();
108
109 for (LanguageString languageString : this.values()){
110 LanguageString newLanguageString;
111 try {
112 newLanguageString = (LanguageString)languageString.clone();
113 result.put(newLanguageString.getLanguage(), newLanguageString);
114 } catch (CloneNotSupportedException e) {
115 logger.error(e);
116 }
117 }
118 //no changes to: -
119 return result;
120 }
121
122
123
124 }