Replace deprecated DOM.setElementAttribute().
[online-glom:gwt-glom.git] / src / main / java / org / glom / web / shared / libglom / Translatable.java
1 package org.glom.web.shared.libglom;
2
3 import java.io.Serializable;
4 import java.util.HashMap;
5
6 import org.glom.web.client.StringUtils;
7
8 public class Translatable implements Serializable {
9
10         private static final long serialVersionUID = 700462080795724363L;
11
12         // We use HashMap instead of Hashtable or TreeMap because GWT only supports HashMap.
13         public static class TranslationsMap extends HashMap<String, String> {
14
15                 private static final long serialVersionUID = 1275019181399622213L;
16         };
17
18         private String name = "";
19         private String titleOriginal = "";
20
21         // A map of localeID to title:
22         private TranslationsMap translationsMap = new TranslationsMap();
23
24         /**
25          * @return the translationsMap
26          */
27         public TranslationsMap getTranslationsMap() {
28                 return translationsMap;
29         }
30
31         public String getName() {
32                 return name;
33         }
34
35         public void setName(final String name) {
36                 this.name = name;
37         }
38
39         public String getTitleOriginal() {
40                 return titleOriginal;
41         }
42
43         public void setTitleOriginal(final String title) {
44                 this.titleOriginal = title;
45         }
46
47         public String getTitle() {
48                 return getTitleOriginal();
49         }
50
51         public String getTitle(final String locale) {
52                 if (StringUtils.isEmpty(locale)) {
53                         return getTitleOriginal();
54                 }
55
56                 final String title = translationsMap.get(locale);
57                 if (title != null) {
58                         return title;
59                 }
60
61                 // Fall back to the original (usually English) if there is no translation.
62                 return getTitleOriginal();
63         }
64
65         /**
66          * @param locale
67          * @return
68          */
69         public String getTitleOrName(final String locale) {
70                 final String title = getTitle(locale);
71                 if (StringUtils.isEmpty(title)) {
72                         return getName();
73                 }
74
75                 return title;
76         };
77
78         /**
79          * Make sure that getTitle() or getTitleOriginal() returns the specified translation. And discard all translations.
80          * You should probably only call this on a clone()ed item.
81          * 
82          * @param locale
83          */
84         public void makeTitleOriginal(final String locale) {
85                 final String title = getTitle(locale);
86                 translationsMap.clear();
87                 setTitleOriginal(title);
88
89                 /*
90                  * This will fail anyway, because setTitle() does not really work on LayoutItemField, because the getTitle()
91                  * might have come from the field. if(getTitle() != title) { GWT.log("makeTitleOriginal(): failed."); }
92                  */
93         }
94
95         /**
96          * @param translatedTitle
97          * @param locale
98          */
99         public void setTitle(final String title, final String locale) {
100                 if (StringUtils.isEmpty(locale)) {
101                         setTitleOriginal(title);
102                         return;
103                 }
104
105                 translationsMap.put(locale, title);
106         }
107 }