/*
* Copyright (c) 2007 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.
*/
package jp.terasoluna.fw.validation;
/**
* 複数のフィールドの相関入力チェックを行うインタフェース。
*
* 複数フィールド間の依存関係による入力チェックを実行する場合は、
* このインタフェースを実装したクラスを作成する。
* {@link #validate(Object, Object[])} メソッドの第一引数には検証対象の値、
* 第二引数には依存するフィールドの値が配列で渡される。検証エラーの場合は
* <code>false</code> を返却すること。<br>
* 検証対象のフィールドは <code>null</code> または空文字で渡される場合がある
* ので、注意が必要である。また、この検証ルールにはデフォルトの
* エラーメッセージが存在しないため、<code>validation.xml</code>
* には必ずメッセージの設定を行うこと。<br>
* <strong>※この検証ルールはJavaScriptでのチェックをサポートしていない。
* </strong>
* <br>
* <br>
* valueフィールドの値が、value1フィールドの値以上、value2フィールドの値以下
* であることを検証する場合、以下のように実装、設定を行う。
* <h5>{@link MultiFieldValidator} の実装例</h5>
* <code><pre>
* public boolean validate(Object value, Object[] fields) {
* if (!(value instanceof Integer)) {
* return false;
* }
* if (!(fields[0] instanceof Integer)) {
* return false;
* }
* if (!(fields[1] instanceof Integer)) {
* return false;
* }
* int value0 = Integer.parseInt(value);
* int value1 = Integer.parseInt(fields[0]);
* int value2 = Integer.parseInt(fields[1]);
* return (value1 <= value0 && value2 >= value0);
* }
* </pre></code>
* <h5>validation.xmlの設定例</h5>
* <code><pre>
* <form name="/validateMultiField">
* <field property="value" depends="multiField">
* <msg key="errors.multiField"
* name="multiField"/>
* <arg key="label.value" position="0" />
* <arg key="label.value1" position="1" />
* <arg key="label.value2" position="2" />
* <var>
* <var-name>fields</var-name>
* <var-value>value1,value2</var-value>
* </var>
* <var>
* <var-name>multiFieldValidator</var-name>
* <var-value>sample.SampleMultiFieldValidator</var-value>
* </var>
* </field>
* </form>
* </pre></code>
* <h5>メッセージリソースファイルの設定例</h5>
* <code>
* errors.multiField={0}は{1}から{2}の間の値を入力してください。
* </code>
*
*/
public interface MultiFieldValidator {
/**
* 複数フィールドの相関入力チェックを実行する。
* <br>
* 検証対象の値は第一引数で渡される。検証に必要な他のフィールドの
* 値は第二引数に配列として渡される。検証エラーの場合は <code>false</code>
* を返却すること。
*
* @param value 検証対象の値
* @param fields 検証に必要な他のフィールドの値配列
* @return エラーがなければ <code>true</code>
*/
boolean validate(Object value, Object[] fields);
}