]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.cms/src/org/argeo/cms/Msg.java
RCP launch
[lgpl/argeo-commons.git] / org.argeo.cms / src / org / argeo / cms / Msg.java
1 package org.argeo.cms;
2
3 import java.lang.reflect.Field;
4 import java.lang.reflect.Modifier;
5
6 import org.eclipse.rap.rwt.RWT;
7
8 /** A single message to be internationalised. */
9 public class Msg {
10 private String id;
11 private ClassLoader classLoader;
12 private final Object defaultLocal;
13
14 public Msg() {
15 defaultLocal = null;
16 }
17
18 public Msg(Object defaultMessage) {
19 this.defaultLocal = defaultMessage;
20 }
21
22 public String getId() {
23 return id;
24 }
25
26 public void setId(String id) {
27 this.id = id;
28 }
29
30 public ClassLoader getClassLoader() {
31 return classLoader;
32 }
33
34 public void setClassLoader(ClassLoader classLoader) {
35 this.classLoader = classLoader;
36 }
37
38 public Object getDefault() {
39 return defaultLocal;
40 }
41
42 public String toString() {
43 return local().toString();
44 }
45
46 /** When used as the first word of a sentence. */
47 public String lead() {
48 String raw = toString();
49 return raw.substring(0, 1).toUpperCase(RWT.getLocale())
50 + raw.substring(1);
51 }
52
53 public Object local() {
54 CmsSession cmSession = CmsSession.current.get();
55 Object local = cmSession.local(this);
56 if (local == null)
57 local = getDefault();
58 if (local == null)
59 throw new CmsException("No translation found for " + id);
60 return local;
61 }
62
63 public static void init(Class<?> clss) {
64 final Field[] fieldArray = clss.getDeclaredFields();
65 ClassLoader loader = clss.getClassLoader();
66
67 for (Field field : fieldArray) {
68 if (Modifier.isStatic(field.getModifiers())
69 && field.getType().isAssignableFrom(Msg.class)) {
70 try {
71 Object obj = field.get(null);
72 String id = clss.getCanonicalName() + "." + field.getName();
73 obj.getClass().getMethod("setId", String.class)
74 .invoke(obj, id);
75 obj.getClass()
76 .getMethod("setClassLoader", ClassLoader.class)
77 .invoke(obj, loader);
78 } catch (Exception e) {
79 throw new CmsException("Cannot prepare field " + field);
80 }
81 }
82 }
83 }
84 }