View Javadoc
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  	 * (non-Javadoc)
69  	 * @see siouxsie.mvc.IScreen#setActionTrigger(siouxsie.mvc.IActionTrigger)
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 	 * (non-Javadoc)
120 	 * @see com.opensymphony.xwork2.LocaleProvider#getLocale()
121 	 */
122 	public Locale getLocale() {
123 		return Locale.getDefault();
124 	}
125 
126 	/*
127 	 * (non-Javadoc)
128 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.util.List)
129 	 */
130 	public String getText(String key, List args) {
131 		return textProvider.getText(key,args);
132 	}
133 
134 	/*
135 	 * (non-Javadoc)
136 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String, java.util.List, com.opensymphony.xwork2.util.ValueStack)
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 	 * (non-Javadoc)
144 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String, java.util.List)
145 	 */
146 	public String getText(String key, String defaultValue, List args) {
147 		return textProvider.getText(key,defaultValue,args);
148 	}
149 
150 	/*
151 	 * (non-Javadoc)
152 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String, java.lang.String)
153 	 */
154 	public String getText(String key, String defaultValue, String obj) {
155 		return textProvider.getText(key,defaultValue,obj);
156 	}
157 
158 	/*
159 	 * (non-Javadoc)
160 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String, java.lang.String[], com.opensymphony.xwork2.util.ValueStack)
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 	 * (non-Javadoc)
168 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String, java.lang.String[])
169 	 */
170 	public String getText(String key, String defaultValue, String[] args) {
171 		return textProvider.getText(key,defaultValue,args);
172 	}
173 
174 	/*
175 	 * (non-Javadoc)
176 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String)
177 	 */
178 	public String getText(String key, String defaultValue) {
179 		return textProvider.getText(key,defaultValue);
180 	}
181 
182 	/*
183 	 * (non-Javadoc)
184 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String, java.lang.String[])
185 	 */
186 	public String getText(String key, String[] args) {
187 		return textProvider.getText(key,args);
188 	}
189 
190 	/*
191 	 * (non-Javadoc)
192 	 * @see com.opensymphony.xwork2.TextProvider#getText(java.lang.String)
193 	 */
194 	public String getText(String key) {
195 		return textProvider.getText(key);
196 	}
197 
198 	/*
199 	 * (non-Javadoc)
200 	 * @see com.opensymphony.xwork2.TextProvider#getTexts()
201 	 */
202 	public ResourceBundle getTexts() {
203 		return textProvider.getTexts();
204 	}
205 
206 	/*
207 	 * (non-Javadoc)
208 	 * @see com.opensymphony.xwork2.TextProvider#getTexts(java.lang.String)
209 	 */
210 	public ResourceBundle getTexts(String bundleName) {
211 		return textProvider.getTexts(bundleName);
212 	}
213 	
214 	/*
215 	 * (non-Javadoc)
216 	 * @see siouxsie.mvc.IValueStackAware#setValueStack(com.opensymphony.xwork2.util.ValueStack)
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 }