// Copyright (c) 2008, NTT DATA Corporation.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
//      http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.

using System;
using System.Configuration;
using TERASOLUNA.Fw.Web.Configuration.Sql;
using TERASOLUNA.Fw.Web.Configuration.Page;
using TERASOLUNA.Fw.Web.Configuration.ExceptionTransition;
using TERASOLUNA.Fw.Common.Configuration.BLogic;
using TERASOLUNA.Fw.Web.Configuration.RequestController;
using TERASOLUNA.Fw.Web.Configuration.ExceptionCode;

namespace TERASOLUNA.Fw.WebUT.Configuration
{
    /// <summary>
    /// 設定情報取得機能のテストに使用するヘルパークラス。
    /// </summary>
    /// <remarks>
    /// </remarks>

    class ConfigTestHelper
    {

        /// <summary>
        /// 指定した構成ファイルを使用して、構成セクションを取得します。
        /// </summary>
        /// <remarks>
        /// </remarks>
        /// <param name="sectionName">取得するセクション名。</param>
        /// <param name="configFileName">構成ファイルのファイル名。</param>
        /// <returns>引数に指定した構成ファイルから取得したセクションハンドラ。</returns>
        private static ConfigurationSection GetSectionFromCustomFile(string sectionName, string configFileName)
        {
            ExeConfigurationFileMap fileMap = new ExeConfigurationFileMap();
            fileMap.ExeConfigFilename = configFileName;
            System.Configuration.Configuration conf = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
            return conf.GetSection(sectionName);
        }

        /// <summary>
        /// 指定した構成ファイルを使用して、<see cref="TERASOLUNA.Fw.Common.Configuration.SqlConfigurationSection" />を取得します。
        /// </summary>
        /// <param name="configFileName">構成ファイルのファイル名。</param>
        /// <returns>引数に指定した構成ファイルから取得したSqlConfigurationSection。</returns>
        public static SqlConfigurationSection GetSqlConfigurationSectionFromCustomFile(string configFileName)
        {
            return (SqlConfigurationSection)GetSectionFromCustomFile("sqlConfiguration", configFileName);
        }

        /// <summary>
        /// 指定した構成ファイルを使用して、PreventDoubleSubmissionConfigurationSectionを取得します。
        /// </summary>
        /// <param name="configFileName">構成ファイルのファイル名。</param>
        /// <returns>引数に指定した構成ファイルから取得したGetPageConfigurationSectionFromCustomFile。</returns>
        public static PageConfigurationSection GetPageConfigurationSectionFromCustomFile(string configFileName)
        {
            return (PageConfigurationSection)GetSectionFromCustomFile("pageConfiguration", configFileName);
        }

        /// <summary>
        /// 指定した構成ファイルを使用して、<see cref="TERASOLUNA.Fw.Common.Configuration.ExceptionTransitionConfigurationSection" />を取得します。
        /// </summary>
        /// <param name="configFileName">構成ファイルのファイル名。</param>
        /// <returns>引数に指定した構成ファイルから取得した<see cref="TERASOLUNA.Fw.Common.Configuration.ExceptionTransitionConfigurationSection" /></returns>
        public static ExceptionTransitionConfigurationSection GetExceptionTransitionConfigurationSectionFromCustomFile(string configFileName)
        {
            return (ExceptionTransitionConfigurationSection)GetSectionFromCustomFile("exceptionTransitionConfiguration", configFileName);
        }

        /// <summary>
        /// 指定した構成ファイルを使用して、<see cref="TERASOLUNA.Fw.Web.Configuration.ExceptionCode.ExceptionCodeConfigurationSection" />を取得します。
        /// </summary>
        /// <param name="configFileName">構成ファイルのファイル名。</param>
        /// <returns>引数に指定した構成ファイルから取得した<see cref="TERASOLUNA.Fw.Web.Configuration.ExceptionCode.ExceptionCodeConfigurationSection" /></returns>
        public static ExceptionCodeConfigurationSection GetExceptionCodeConfigurationSectionFromCustomFile(string configFileName)
        {
            return (ExceptionCodeConfigurationSection)GetSectionFromCustomFile("exceptionCodeConfiguration", configFileName);
        }

        /// <summary>
        /// 指定した構成ファイルを使用して、<see cref="TERASOLUNA.Fw.Web.Configuration.RequestController.RequestControllerConfigurationSection" />を取得します。
        /// </summary>
        /// <param name="configFileName">構成ファイルのファイル名。</param>
        /// <returns>引数に指定した構成ファイルから取得した<see cref="TERASOLUNA.Fw.Web.Configuration.RequestController.RequestControllerConfigurationSection" /></returns>
        public static RequestControllerConfigurationSection GetRequestControllerConfigurationSectionFromCustomFile(string configFileName)
        {
            return (RequestControllerConfigurationSection)GetSectionFromCustomFile("requestControllerConfiguration", configFileName);
        }
    }
}
