Coverage Report - org.seasar.cubby.interceptor.ValidationInterceptor
 
Classes in this File Line Coverage Branch Coverage Complexity
ValidationInterceptor
100%
1/1
N/A
0
ValidationInterceptor$1
100%
1/1
N/A
0
 
 1  
 package org.seasar.cubby.interceptor;
 2  
 
 3  
 import static org.seasar.cubby.CubbyConstants.ATTR_PARAMS;
 4  
 import static org.seasar.cubby.CubbyConstants.ATTR_VALIDATION_FAIL;
 5  
 
 6  
 import java.util.Collections;
 7  
 import java.util.List;
 8  
 import java.util.Map;
 9  
 
 10  
 import javax.servlet.http.HttpServletRequest;
 11  
 
 12  
 import org.aopalliance.intercept.MethodInterceptor;
 13  
 import org.aopalliance.intercept.MethodInvocation;
 14  
 import org.seasar.cubby.CubbyConstants;
 15  
 import org.seasar.cubby.action.Action;
 16  
 import org.seasar.cubby.action.Forward;
 17  
 import org.seasar.cubby.action.Validation;
 18  
 import org.seasar.cubby.controller.ActionContext;
 19  
 import org.seasar.cubby.validator.ActionValidator;
 20  
 import org.seasar.cubby.validator.ValidationRule;
 21  
 import org.seasar.cubby.validator.ValidationRules;
 22  
 import org.seasar.framework.beans.BeanDesc;
 23  
 import org.seasar.framework.beans.PropertyDesc;
 24  
 import org.seasar.framework.beans.factory.BeanDescFactory;
 25  
 
 26  
 /**
 27  
  * 入力検証とフォー?オブジェクトへの値のバイン?ィングを行います??<br>
 28  
  * 入力検証が?功した場合?<br>
 29  
  * フォー?オブジェクトへのバインドを行い、後?フィルターを実行します??<br>
 30  
  * 入力検証が失敗した?合?<br>
 31  
  * フォー?オブジェクトへのバインドを行い、アクションメソ?ドに設定された{@link Validation#errorPage()}へフォワードします??
 32  
  * またリクエスト中の入力検証エラーフラグがONになります??
 33  
  * 
 34  
  * @see CubbyConstants#ATTR_VALIDATION_FAIL 入力検証エラーフラグの属??
 35  
  * @author agata
 36  
  * @since 1.0
 37  
  */
 38  
 public class ValidationInterceptor implements MethodInterceptor {
 39  
 
 40  1
         private static final ValidationRules NULL_VALIDATION_RULES = new ValidationRules() {
 41  1
                 public List<ValidationRule> getRules() {
 42  
                         return Collections.emptyList();
 43  
                 }
 44  
         };
 45  
 
 46  
         private ActionValidator validator;
 47  
 
 48  
         private HttpServletRequest request;
 49  
 
 50  
         private ActionContext context;
 51  
 
 52  
         public ValidationInterceptor() {
 53  
         }
 54  
 
 55  
         public void setActionValidatior(final ActionValidator actionValidator) {
 56  
                 this.validator = actionValidator;
 57  
         }
 58  
 
 59  
         public void setRequest(final HttpServletRequest request) {
 60  
                 this.request = request;
 61  
         }
 62  
 
 63  
         public void setActionContext(final ActionContext context) {
 64  
                 this.context = context;
 65  
         }
 66  
 
 67  
         public Object invoke(final MethodInvocation invocation) throws Throwable {
 68  
                 final Action controller = context.getAction();
 69  
                 final Validation validation = context.getValidation();
 70  
                 final ValidationRules rules = getValidationRules(context);
 71  
                 final Map<String, Object> params = getParams(request);
 72  
 
 73  
                 final boolean success = validator.processValidation(validation,
 74  
                                 controller, params, context.getFormBean(), rules);
 75  
 
 76  
                 final Object result;
 77  
                 if (success) {
 78  
                         result = invocation.proceed();
 79  
                 } else {
 80  
                         request.setAttribute(ATTR_VALIDATION_FAIL, true);
 81  
                         String path = validation.errorPage();
 82  
                         result = new Forward(path);
 83  
                 }
 84  
 
 85  
                 return result;
 86  
         }
 87  
 
 88  
         private ValidationRules getValidationRules(ActionContext context) {
 89  
                 final Validation validation = context.getValidation();
 90  
                 final ValidationRules validationRules;
 91  
                 if (validation == null) {
 92  
                         validationRules = NULL_VALIDATION_RULES;
 93  
                 } else {
 94  
                         final Action action = context.getAction();
 95  
                         BeanDesc beanDesc = BeanDescFactory.getBeanDesc(action.getClass());
 96  
                         PropertyDesc propertyDesc = beanDesc.getPropertyDesc(validation
 97  
                                         .rulesField());
 98  
                         validationRules = (ValidationRules) propertyDesc.getValue(action);
 99  
                 }
 100  
                 return validationRules;
 101  
         }
 102  
 
 103  
         @SuppressWarnings("unchecked")
 104  
         private static Map<String, Object> getParams(
 105  
                         final HttpServletRequest request) {
 106  
                 return (Map<String, Object>) request.getAttribute(ATTR_PARAMS);
 107  
         }
 108  
 
 109  
 }