1 package siouxsie.mvc.impl;
2
3 import java.awt.event.ActionEvent;
4 import java.util.List;
5 import java.util.Locale;
6 import java.util.Map;
7 import java.util.ResourceBundle;
8
9 import javax.swing.AbstractAction;
10 import javax.swing.Action;
11 import javax.swing.Icon;
12
13 import siouxsie.mvc.IActionTrigger;
14 import siouxsie.mvc.IScreen;
15 import siouxsie.mvc.IValueStackAware;
16
17 import com.opensymphony.xwork2.LocaleProvider;
18 import com.opensymphony.xwork2.TextProvider;
19 import com.opensymphony.xwork2.TextProviderFactory;
20 import com.opensymphony.xwork2.inject.Inject;
21 import com.opensymphony.xwork2.util.ValueStack;
22
23 /**
24 * Basic {@link IScreen} support class.
25 * Handle i18n, value stack... all based on XW.
26 * @author Arnaud Cogoluegnes
27 * @version $Id$
28 */
29 @SuppressWarnings("unchecked")
30 public abstract class ScreenSupport implements IScreen, TextProvider, LocaleProvider, IValueStackAware {
31
32 @Inject
33 private IActionTrigger actionTrigger;
34
35 private ValueStack stack;
36
37 private TextProvider textProvider = new TextProviderFactory().createInstance(getClass(), this);
38
39 /**
40 * Launch an action.
41 * @param name
42 * @param nameSpace
43 * @param parameters
44 */
45 protected void launchAction(String name,String nameSpace,Map parameters) {
46 actionTrigger.triggerActionLaunch(name, nameSpace, parameters);
47 }
48
49 /**
50 * Launch an action in the default namespace.
51 * @param name
52 * @param parameters
53 */
54 protected void launchAction(String name,Map parameters) {
55 actionTrigger.triggerActionLaunch(name,"/", parameters);
56 }
57
58 protected Action createTriggerAction(String name,String nameSpace,Map parameters) {
59 return new LaunchSwingAction(name,nameSpace,parameters);
60 }
61
62 protected Action createTriggerAction(String name,Map parameters) {
63 return new LaunchSwingAction(name,"/",parameters);
64 }
65
66
67
68
69
70
71 public void setActionTrigger(IActionTrigger trigger) {
72 this.actionTrigger = trigger;
73 }
74
75 /**
76 * Inner class for handling the MVC engine launch.
77 * @author Arnaud Cogoluegnes
78 * @version $Id$
79 * @todo add pre-interceptor to handle pre-action perform (would avoid define an wrapping swing action)
80 */
81 class LaunchSwingAction extends AbstractAction {
82
83 /**
84 *
85 */
86 private static final long serialVersionUID = -3105287170668454548L;
87 String name;
88 String nameSpace;
89 Map parameters;
90
91 public LaunchSwingAction(String name,String nameSpace,Map parameters) {
92 this.name = name;
93 this.nameSpace = nameSpace;
94 this.parameters = parameters;
95 }
96
97 public void actionPerformed(ActionEvent e) {
98 launchAction(name, nameSpace, parameters);
99 }
100
101 }
102
103 protected void configureSwingAction(Action action,String name,String description,Icon icon) {
104 action.putValue(Action.NAME, name);
105 action.putValue(Action.SHORT_DESCRIPTION, description);
106 action.putValue(Action.SMALL_ICON, icon);
107 }
108
109 protected void configureSwingAction(Action action,String name,String description) {
110 action.putValue(Action.NAME, name);
111 action.putValue(Action.SHORT_DESCRIPTION, description);
112 }
113
114 protected void configureSwingAction(Action action,String name) {
115 action.putValue(Action.NAME, name);
116 }
117
118
119
120
121
122 public Locale getLocale() {
123 return Locale.getDefault();
124 }
125
126
127
128
129
130 public String getText(String key, List args) {
131 return textProvider.getText(key,args);
132 }
133
134
135
136
137
138 public String getText(String key, String defaultValue, List args, ValueStack stack) {
139 return textProvider.getText(key,defaultValue,args,stack);
140 }
141
142
143
144
145
146 public String getText(String key, String defaultValue, List args) {
147 return textProvider.getText(key,defaultValue,args);
148 }
149
150
151
152
153
154 public String getText(String key, String defaultValue, String obj) {
155 return textProvider.getText(key,defaultValue,obj);
156 }
157
158
159
160
161
162 public String getText(String key, String defaultValue, String[] args, ValueStack stack) {
163 return textProvider.getText(key,defaultValue,args,stack);
164 }
165
166
167
168
169
170 public String getText(String key, String defaultValue, String[] args) {
171 return textProvider.getText(key,defaultValue,args);
172 }
173
174
175
176
177
178 public String getText(String key, String defaultValue) {
179 return textProvider.getText(key,defaultValue);
180 }
181
182
183
184
185
186 public String getText(String key, String[] args) {
187 return textProvider.getText(key,args);
188 }
189
190
191
192
193
194 public String getText(String key) {
195 return textProvider.getText(key);
196 }
197
198
199
200
201
202 public ResourceBundle getTexts() {
203 return textProvider.getTexts();
204 }
205
206
207
208
209
210 public ResourceBundle getTexts(String bundleName) {
211 return textProvider.getTexts(bundleName);
212 }
213
214
215
216
217
218 public void setValueStack(ValueStack stack) {
219 this.stack = stack;
220 }
221
222 /**
223 * Find a string from the stack.
224 * @param expr
225 * @return
226 */
227 public String findStringFromStack(String expr) {
228 return stack.findString(expr);
229 }
230
231 /**
232 * Find a value from the stack.
233 * @param expr
234 * @return
235 */
236 public Object findValueFromStack(String expr) {
237 return stack.findValue(expr);
238 }
239
240 /**
241 * Find a value from the stack.
242 * @param expr
243 * @return
244 */
245 @SuppressWarnings("unchecked")
246 public <T> T findValueFromStack(String expr, Class<T> asType) {
247 Object res = stack.findValue(expr,asType);
248 return (T) res;
249 }
250 }