View Javadoc

1   package org.seasar.cubby.controller.impl;
2   
3   import java.io.Serializable;
4   import java.lang.reflect.InvocationTargetException;
5   import java.lang.reflect.Method;
6   
7   import org.seasar.cubby.action.Action;
8   import org.seasar.cubby.action.ActionResult;
9   import org.seasar.cubby.action.Form;
10  import org.seasar.cubby.action.Validation;
11  import org.seasar.cubby.controller.ActionContext;
12  import org.seasar.cubby.controller.ActionDef;
13  import org.seasar.cubby.controller.Populator;
14  import org.seasar.framework.beans.BeanDesc;
15  import org.seasar.framework.beans.PropertyDesc;
16  import org.seasar.framework.beans.factory.BeanDescFactory;
17  import org.seasar.framework.container.ComponentDef;
18  import org.seasar.framework.log.Logger;
19  
20  /**
21   * 
22   * @author baba
23   *
24   */
25  public class ActionContextImpl implements ActionContext, Serializable {
26  
27  	private static final long serialVersionUID = 2416038583405864226L;
28  
29  	private static final Object[] EMPTY_ARGS = new Object[0];
30  
31  	private final Logger logger = Logger.getLogger(this.getClass());
32  
33  	private ActionDef actionDef;
34  
35  	private Action action;
36  
37  	private Populator populator;
38  
39  	public void initialize(final ActionDef actionDef) {
40  		this.actionDef = actionDef;
41  	}
42  
43  	public Populator getPopulator() {
44  		return populator;
45  	}
46  
47  	public void setPopulator(final Populator populator) {
48  		this.populator = populator;
49  	}
50  
51  	public ComponentDef getComponentDef() {
52  		return actionDef.getComponentDef();
53  	}
54  
55  	public Method getMethod() {
56  		return actionDef.getMethod();
57  	}
58  
59  	public Action getAction() {
60  		if (action == null) {
61  			action = (Action) actionDef.getComponentDef().getComponent();
62  		}
63  		return action;
64  	}
65  
66  	public Validation getValidation() {
67  		return actionDef.getMethod().getAnnotation(Validation.class);
68  	}
69  
70  	public ActionResult invoke() throws Throwable {
71  		try {
72  			final ActionResult result = (ActionResult) actionDef.getMethod().invoke(getAction(),
73  					EMPTY_ARGS);
74  			return result;
75  		} catch (final InvocationTargetException ex) {
76  			logger.log(ex);
77  			throw ex.getCause();
78  		}
79  	}
80  
81  	public Object getFormBean() {
82  		final Form form = getForm();
83  		if (form == null) {
84  			return null;
85  		}
86  		final Action action = getAction();
87  		final String formName = form.value();
88  		if (Form.THIS.equals(formName)) {
89  			return action;
90  		} else {
91  			final BeanDesc beanDesc = BeanDescFactory.getBeanDesc(action.getClass());
92  			final PropertyDesc propertyDesc = beanDesc.getPropertyDesc(formName);
93  			final Object value = propertyDesc.getValue(action);
94  			return value;
95  		}
96  	}
97  
98  	private Form getForm() {
99  		return actionDef.getMethod().getAnnotation(Form.class);
100 	}
101 
102 }