View Javadoc
1   /**
2    * 
3    */
4   package siouxsie.mvc.test;
5   
6   import org.apache.commons.logging.Log;
7   import org.apache.commons.logging.LogFactory;
8   
9   import siouxsie.mvc.IScreen;
10  import siouxsie.mvc.IValueStackAware;
11  
12  import com.opensymphony.xwork2.ActionContext;
13  import com.opensymphony.xwork2.config.Configuration;
14  import com.opensymphony.xwork2.config.ConfigurationManager;
15  import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider;
16  import com.opensymphony.xwork2.util.ValueStack;
17  import com.opensymphony.xwork2.util.ValueStackFactory;
18  
19  /**
20   * @author Arnaud Cogoluegnes
21   * @version $Id: ScreenCreator.java 143 2008-06-03 20:37:37Z acogo $
22   */
23  public class ScreenCreator {
24  	
25  	private static final Log LOG = LogFactory.getLog(ScreenCreator.class);
26  
27  	public IScreen create(LaunchConfiguration config) {		
28  		ConfigurationManager confManager = new ConfigurationManager();	
29  		confManager.addContainerProvider(new XWorkConfigurationProvider());
30  		confManager.addContainerProvider(new TestContainerProvider());
31  		Configuration conf = confManager.getConfiguration();
32  		ValueStack vs = conf.getContainer().getInstance(ValueStackFactory.class).createValueStack();
33          ActionContext context = new ActionContext(vs.getContext());
34          ActionContext.setContext(context);        
35          
36          vs.push(config.getContext());
37          
38          IScreen screen = null;
39  		try {
40  			screen = config.getScreenClass().newInstance();
41  		} catch (InstantiationException e) {
42  			LOG.error("could not create screen",e);
43  		} catch (IllegalAccessException e) {
44  			LOG.error("could not create screen",e);
45  		}
46          
47  		if(screen instanceof IValueStackAware) {
48  			((IValueStackAware) screen).setValueStack(vs);
49  		}        
50          
51  		conf.getContainer().inject(screen);
52  		
53          screen.buildGUI();
54          
55          screen.initGUI();
56          
57          return screen;
58  		
59  	}
60  	
61  }