Package com.bj58.argo.internal

Source Code of com.bj58.argo.internal.MethodAction

package com.bj58.argo.internal;

import java.util.Map;

import com.bj58.argo.ActionResult;
import com.bj58.argo.route.Action;
import com.bj58.argo.interceptor.PostInterceptor;
import com.bj58.argo.interceptor.PreInterceptor;
import com.bj58.argo.route.RouteBag;
import com.bj58.argo.route.RouteResult;
import com.bj58.argo.thirdparty.AntPathMatcher;
import com.bj58.argo.thirdparty.PathMatcher;
import com.google.common.collect.Maps;

public class MethodAction implements Action {

    public static MethodAction create(ActionInfo actionInfo) {
        return new MethodAction(actionInfo);
    }

    private final ActionInfo actionInfo;

    private final double order;

    private PathMatcher pathMatcher = new AntPathMatcher();
   


    private MethodAction(ActionInfo actionInfo) {
        this.actionInfo = actionInfo;

        order = actionInfo.getOrder()
                + (10000.0d - actionInfo.getPathPattern().length())/100000.0d
                + (actionInfo.isPattern() ? 0.5d : 0d);
    }

    @Override
    public double order() {
        return order;
    }
   
    @Override
    public RouteResult matchAndInvoke(RouteBag bag) {

        if (!actionInfo.matchHttpMethod(bag))
            return RouteResult.unMatch();

        Map<String, String> uriTemplateVariables = Maps.newHashMap();

        boolean match = actionInfo.match(bag, uriTemplateVariables);
        if (!match)
            return RouteResult.unMatch();

        // PreIntercept
        for(PreInterceptor preInterceptor : actionInfo.getPreInterceptors()) {
            ActionResult actionResult = preInterceptor.preExecute(bag.getBeat());
            if (ActionResult.NULL != actionResult)
                return RouteResult.invoked(actionResult);
        }

        ActionResult actionResult = actionInfo.invoke(uriTemplateVariables);

        // PostIntercept
        for(PostInterceptor postInterceptor : actionInfo.getPostInterceptors()) {
            actionResult = postInterceptor.postExecute(bag.getBeat(), actionResult);
        }

        return RouteResult.invoked(actionResult);
    }

}
TOP

Related Classes of com.bj58.argo.internal.MethodAction

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.