// Path: src/main/java/org/seasar/struts/util/S2ExecuteConfigUtil.java
// public final class S2ExecuteConfigUtil {
// 
//     private static final String KEY = S2ExecuteConfigUtil.class.getName();
// 
//     private S2ExecuteConfigUtil() {
//     }
// 
//     /**
//      * 実行設定を返します。
//      * 
//      * @return 実行設定
//      */
//     public static S2ExecuteConfig getExecuteConfig() {
//         return (S2ExecuteConfig) RequestUtil.getRequest().getAttribute(KEY);
//     }
// 
//     /**
//      * 実行設定を設定します。
//      * 
//      * @param executeConfig
//      *            実行設定
//      */
//     public static void setExecuteConfig(S2ExecuteConfig executeConfig) {
//         RequestUtil.getRequest().setAttribute(KEY, executeConfig);
//     }
// 
//     /**
//      * 実行設定を探します。
//      * 
//      * @param actionPath
//      *            アクションパス
//      * @param paramPath
//      *            パラメータパス
//      * @return 実行設定
//      */
//     public static S2ExecuteConfig findExecuteConfig(String actionPath,
//             String paramPath) {
//         S2ModuleConfig moduleConfig = S2ModuleConfigUtil.getModuleConfig();
//         S2ActionMapping actionMapping = (S2ActionMapping) moduleConfig
//                 .findActionConfig(actionPath);
//         return actionMapping.findExecuteConfig(paramPath);
//     }
// 
//     /**
//      * 実行設定を探します。
//      * 
//      * @param actionPath
//      *            アクションパス
//      * @param request
//      *            リクエスト
//      * @return 実行設定
//      */
//     public static S2ExecuteConfig findExecuteConfig(String actionPath,
//             HttpServletRequest request) {
//         S2ModuleConfig moduleConfig = S2ModuleConfigUtil.getModuleConfig();
//         S2ActionMapping actionMapping = (S2ActionMapping) moduleConfig
//                 .findActionConfig(actionPath);
//         return actionMapping.findExecuteConfig(request);
//     }
// }


import org.seasar.struts.util.ServletContextUtil;
import java.lang.reflect.Field;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.seasar.framework.beans.BeanDesc;
import org.seasar.framework.beans.factory.BeanDescFactory;
import org.seasar.framework.container.ComponentDef;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
import org.seasar.framework.util.ArrayMap;
import org.seasar.framework.util.StringUtil;
import org.seasar.struts.util.RoutingUtil;
import org.seasar.struts.util.S2ExecuteConfigUtil;

    }

    /**
     * ルーティング用のパスを作成します。
     * 
     * @param path
     *            パス
     * @return ルーティング用のパス
     */
    protected String createRoutingPath(String path) {
        String originalPath = path;
        String queryString = "";
        int index = path.indexOf('?');
        if (index >= 0) {
            queryString = path.substring(index);
            path = path.substring(0, index);
        }
        String[] names = StringUtil.split(path, "/");
        S2Container container = SingletonS2ContainerFactory.getContainer();
        StringBuilder sb = new StringBuilder(50);
        for (int i = 0; i < names.length; i++) {
            if (container.hasComponentDef(sb + names[i] + "Action")) {
                String actionPath = RoutingUtil.getActionPath(names, i);
                String paramPath = RoutingUtil.getParamPath(names, i + 1);
                if (StringUtil.isEmpty(paramPath)) {
                    return actionPath
                            + ".do"
                            + getQueryString(queryString, actionPath,
                                    paramPath, null);
                }

// Path: src/main/java/org/seasar/struts/util/S2ExecuteConfigUtil.java
// public final class S2ExecuteConfigUtil {
// 
//     private static final String KEY = S2ExecuteConfigUtil.class.getName();
// 
//     private S2ExecuteConfigUtil() {
//     }
// 
//     /**
//      * 実行設定を返します。
//      * 
//      * @return 実行設定
//      */
//     public static S2ExecuteConfig getExecuteConfig() {
//         return (S2ExecuteConfig) RequestUtil.getRequest().getAttribute(KEY);
//     }
// 
//     /**
//      * 実行設定を設定します。
//      * 
//      * @param executeConfig
//      *            実行設定
//      */
//     public static void setExecuteConfig(S2ExecuteConfig executeConfig) {
//         RequestUtil.getRequest().setAttribute(KEY, executeConfig);
//     }
// 
//     /**
//      * 実行設定を探します。
//      * 
//      * @param actionPath
//      *            アクションパス
//      * @param paramPath
//      *            パラメータパス
//      * @return 実行設定
//      */
//     public static S2ExecuteConfig findExecuteConfig(String actionPath,
//             String paramPath) {
//         S2ModuleConfig moduleConfig = S2ModuleConfigUtil.getModuleConfig();
//         S2ActionMapping actionMapping = (S2ActionMapping) moduleConfig
//                 .findActionConfig(actionPath);
//         return actionMapping.findExecuteConfig(paramPath);
//     }
// 
//     /**
//      * 実行設定を探します。
//      * 
//      * @param actionPath
//      *            アクションパス
//      * @param request
//      *            リクエスト
//      * @return 実行設定
//      */
//     public static S2ExecuteConfig findExecuteConfig(String actionPath,
//             HttpServletRequest request) {
//         S2ModuleConfig moduleConfig = S2ModuleConfigUtil.getModuleConfig();
//         S2ActionMapping actionMapping = (S2ActionMapping) moduleConfig
//                 .findActionConfig(actionPath);
//         return actionMapping.findExecuteConfig(request);
//     }
// }


// Path: src/main/java/org/seasar/struts/config/S2ActionMapping.java
import org.seasar.struts.util.ServletContextUtil;
import java.lang.reflect.Field;
import javax.servlet.http.HttpServletRequest;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.seasar.framework.beans.BeanDesc;
import org.seasar.framework.beans.factory.BeanDescFactory;
import org.seasar.framework.container.ComponentDef;
import org.seasar.framework.container.S2Container;
import org.seasar.framework.container.factory.SingletonS2ContainerFactory;
import org.seasar.framework.util.ArrayMap;
import org.seasar.framework.util.StringUtil;
import org.seasar.struts.util.RoutingUtil;
import org.seasar.struts.util.S2ExecuteConfigUtil;

    }

    /**
     * ルーティング用のパスを作成します。
     * 
     * @param path
     *            パス
     * @return ルーティング用のパス
     */
    protected String createRoutingPath(String path) {
        String originalPath = path;
        String queryString = "";
        int index = path.indexOf('?');
        if (index >= 0) {
            queryString = path.substring(index);
            path = path.substring(0, index);
        }
        String[] names = StringUtil.split(path, "/");
        S2Container container = SingletonS2ContainerFactory.getContainer();
        StringBuilder sb = new StringBuilder(50);
        for (int i = 0; i < names.length; i++) {
            if (container.hasComponentDef(sb + names[i] + "Action")) {
                String actionPath = RoutingUtil.getActionPath(names, i);
                String paramPath = RoutingUtil.getParamPath(names, i + 1);
                if (StringUtil.isEmpty(paramPath)) {
                    return actionPath
                            + ".do"
                            + getQueryString(queryString, actionPath,
                                    paramPath, null);
                }

                S2ExecuteConfig executeConfig = S2ExecuteConfigUtil
