// 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;

namespace TERASOLUNA.Fw.Web.Validation
{
    /// <summary>
    /// 入力値検証に利用する属性を定義します。
    /// </summary>
    /// <remarks>
    /// <para>
    /// この属性を <see cref="Common.BLogic.IBLogic"/> インタフェース実装クラスに指定することにより、
    /// 入力値検証に必要となる情報の解決を行います。
    /// ビジネスロジックの実行前に、入力値検証を要求する場合に指定してください。
    /// </para>
    /// <para>
    /// 属性指定時、名前付引数 "RuleSet" に値を設定しない場合、 "Default" が利用されます。
    /// </para>
    /// </remarks>
    [AttributeUsage(AttributeTargets.Class)]
    public class ValidationInfoAttribute : Attribute
    {
        /// <summary>
        /// 入力値検証に利用するスキーマファイルの相対ファイルパスです。
        /// </summary>
        private string _validationFilePath = null;

        /// <summary>
        /// 入力値検証に利用するルールセット文字列です。
        /// </summary>
        /// <remarks>
        /// デフォルトの値は "Default" です。
        /// </remarks>
        private string _ruleSet = "Default";

        /// <summary>
        /// 新しい <see cref="ValidationInfoAttribute"/> のインスタンスを初期化します。
        /// </summary>
        /// <remarks>
        /// デフォルトコンストラクタです。
        /// </remarks>
        public ValidationInfoAttribute()
            : this(null, null)
        {
        }

        /// <summary>
        /// 新しい <see cref="ValidationInfoAttribute"/> のインスタンスを初期化します。
        /// </summary>
        /// <remarks>コンストラクタです。</remarks>
        /// <param name="validationFilePath">入力値検証に利用するスキーマファイルの相対ファイルパス。</param>
        public ValidationInfoAttribute(string validationFilePath)
            : this(validationFilePath, null)
        {
        }

        /// <summary>
        /// 新しい <see cref="ValidationInfoAttribute"/> のインスタンスを初期化します。
        /// </summary>
        /// <remarks>コンストラクタです。</remarks>
        /// <param name="validationFilePath">入力値検証に利用するスキーマファイルの相対ファイルパス。</param>
        /// <param name="ruleSet">入力値検証に利用するルールセット文字列</param>
        public ValidationInfoAttribute(string validationFilePath, string ruleSet)
        {
            _validationFilePath = validationFilePath;
            if (string.IsNullOrEmpty(ruleSet))
            {
                _ruleSet = ruleSet;
            }
        }

        /// <summary>
        /// 入力値検証に利用するスキーマファイルの
        /// 相対ファイルパスを取得または設定します。
        /// </summary>
        /// <remarks>
        /// ビジネスロジックの実行前に、入力値検証を要求する場合に指定します。
        /// 指定されていない場合は、入力値検証を行わないことを表します。
        /// このプロパティには、[アプリケーションルート]\Bin からの相対パス
        /// を指定する必要があります。
        /// </remarks>
        public string ValidationFilePath
        {
            get
            {
                return _validationFilePath;
            }
            set
            {
                _validationFilePath = value;
            }
        }

        /// <summary>
        /// 入力値検証に利用するルールセット文字列を取得または設定します。
        /// </summary>
        public string RuleSet
        {
            get
            {
                return _ruleSet;
            }
            set
            {
                _ruleSet = value;
            }
        }
    }
}
