WebObjects 5.2.3

com.webobjects.eocontrol
Interface EOValidation

All Superinterfaces:
NSValidation
All Known Subinterfaces:
EOEnterpriseObject
All Known Implementing Classes:
EOCustomObject

public interface EOValidation
extends NSValidation

EOValidationインターフェースは、NSValidationインターフェースの拡張です (NSValidationインターフェースはkey-valueコーディングを利用した検証メソッドを定義しています)。 EOValidationは、エンタープライズオブジェクトがプロパティ値を検証するのに使うメソッドを定義しています。 検証メソッドは、無効な値の型、有効な範囲外の値、無効なリレーションシップなどを検出します。 EOCustomObjectとEOGenericRecordは、次の仕様を実装しています。

Enterprise Objects Frameworkは、オブジェクトが外部ストアに保存(挿入か更新)される前に、すべてのオブジェクトのプロパティを検証します。 また、Javaクライアントアプリケーションのみですが、ユーザが編集用フィールドへの入力を終えると同時にプロパティ値の変更を検証するようにすることもできます。 EODisplayGroupがオブジェクトに値を設定するとき、 validateValueForKey が実行されます。 オブジェクトは値の型を強制的に変換し、その他の検証作業を実行し、値が無効であれば例外を発生します。 デフォルトでは、EODisplayGroupはオブジェクトの保存時に検証エラーを捕捉すると、 validateValueForKey のみ型変換のために使います。 ただし setValidatesChangesImmediately を使うと、検証エラーの発生時に警告パネルを表示させることができます。

操作の前の検証

EOValidationのメソッド( validateForInsert, validateForUpdate, validateForSave, validateForDelete ) は、特定の操作に対してオブジェクト全体を検証します。 これらのメソッドは、関連する操作が開始されたときに、Enterpise Objects Frameworkによって自動的に実行されます。 EOCustomObjectとEOGenericRecordはこのインターフェースを実装しているので、特別な検証ロジックが必要な場合にのみ実装し直すことになります。 カスタムエンタープライズオブジェクトのクラスでは、プロパティ値を参考に操作の許可・不許可を決めるためにオーバーライドします。 例えば、Feeオブジェクトの状態が未払いであれば削除できないようにします。 また、プロパティの検証を遅らせたり、複数のプロパティを比較するようにオーバーライドすることもできます。 例えば、日付のペアが有効期限内かどうかを確認します。

検証メソッドをオーバーライドするのであれば、 super の実装を呼び出す必要があります。 validateFor... のデフォルトの実装では、オブジェクトのEOClassDescriptionを元に validateValueForKey を実行ながらプロパティを調べます。 EOAccessレイヤーのEOEntityClassDescriptionクラスは、削除ルールなどEOModelを元に検証します。 例えばDepartmentオブジェクトの削除ルールでは、DepartmentオブジェクトがEmployeeオブジェクトを持つ限り削除できません。

validateForSave メソッドは、オブジェクトが外部ストアに書き込まれる際に、一般的な検証を行います。 validateForInsertvalidateForUpdate の実装は、どちらもこのメソッドを呼び出します。 もしオブジェクトが挿入・更新以外の検証を行うならば、始めに validateForSave を実行するべきです。


Nested Class Summary
 
Nested classes inherited from class com.webobjects.foundation.NSValidation
NSValidation.DefaultImplementation, NSValidation.Utility, NSValidation.ValidationException
 
Method Summary
 void validateClientUpdate()
           オブジェクトがクライアントアプリケーション(Javaクライアント)から更新された後に実行されます。 オブジェクトがサーバ側のものと矛盾していないかどうかを検証します。
 void validateForDelete()
           オブジェクトが削除できるかどうかを確認し、削除できないなら例外 NSValidation.ValidationException を発生します。
 void validateForInsert()
           オブジェクトが挿入できるかどうかを確認し、挿入できないなら例外 NSValidation.ValidationException を発生します。
 void validateForSave()
           オブジェクトが保存できるかどうかを確認し、保存できないなら例外 NSValidation.ValidationException を発生します。
 void validateForUpdate()
           オブジェクトが更新できるかどうかを確認し、更新できないなら例外 NSValidation.ValidationException を発生します。
 
Methods inherited from interface com.webobjects.foundation.NSValidation
validateTakeValueForKeyPath, validateValueForKey
 

Method Detail

validateClientUpdate

public void validateClientUpdate()
                          throws NSValidation.ValidationException
オブジェクトがクライアントアプリケーション(Javaクライアント)から更新された後に実行されます。 オブジェクトがサーバ側のものと矛盾していないかどうかを検証します。 EOCustomObjectの実装では何もしません。 必要であればオーバーライドしてください。

Throws:
NSValidation.ValidationException

validateForDelete

public void validateForDelete()
                       throws NSValidation.ValidationException

オブジェクトが削除できるかどうかを確認し、削除できないなら例外 NSValidation.ValidationException を発生します。 例えば、削除ルールが EOClassDescription.DeleteRuleDeny に設定されており、かつリレーション先のオブジェクトがある場合は、オブジェクトを削除できません。

EOCustomObjectの実装では、オブジェクトのEOClassDescriptionの validateObjectForDelete メソッドを実行します(主に値の有無をチェックします)。 サブクラスでは独自の検証処理を行う前に super の実装を呼ぶ必要があります。 処理中に例外が発生したら、 super で捕捉した例外もまとめて、再度例外を投げる必要があります。

Throws:
NSValidation.ValidationException - 削除の要求が無効のとき
NSValidation.ValidationException
See Also:
EOEnterpriseObject.propagateDeleteWithEditingContext(EOEditingContext)

validateForInsert

public void validateForInsert()
                       throws NSValidation.ValidationException

オブジェクトが挿入できるかどうかを確認し、挿入できないなら例外 NSValidation.ValidationException を発生します。 EOCustomObjectの実装では validateForSave を実行します。

validateForSave メソッドは、外部ストアにオブジェクトを書き込む際に一般的な検証を行います。 挿入以外の検証を行う場合は、始めに validateForSave を実行してください。

Throws:
NSValidation.ValidationException - 挿入の要求が無効のとき
NSValidation.ValidationException
See Also:
validateForSave()

validateForSave

public void validateForSave()
                     throws NSValidation.ValidationException

オブジェクトが保存できるかどうかを確認し、保存できないなら例外 NSValidation.ValidationException を発生します。 EOCustomObjectの実装では、オブジェクトのEOClassdescriptionの validateObjectForSave をすべてのプロパティに対して実行します。 処理中に1つでも例外が発生したら、辞書 userInfo のキー NSValidation.ValidationException.AdditionalExceptionsKey に、発生した例外の情報を含めた例外を再び投げます。 サブクラスでは、独自の検証処理を行う前に superの実装を呼ぶ必要があります。 処理中に例外が発生したら、 super で捕捉した例外もまとめて、再度例外を投げる必要があります。

エンタープライズオブジェクト同士がお互いに持つプロパティを検証するように実装することもできます。 例えば、休暇期間の終了日は開始日より後になります。 このようなプロパティを検証するには、NSValidationの validateValueForKey をオーバーライドすると可能です。

Throws:
NSValidation.ValidationException - 保存の要求が無効のとき
NSValidation.ValidationException
See Also:
NSValidation.validateValueForKey(Object, String)

validateForUpdate

public void validateForUpdate()
                       throws NSValidation.ValidationException

オブジェクトが更新できるかどうかを確認し、更新できないなら例外 NSValidation.ValidationException を発生します。 EOCustomObjectの実装では validateForSave を実行します。

validateForSave メソッドは、外部ストアにオブジェクトを書き込む際に一般的な検証を行います。 更新以外の検証を行う場合は、始めに validateForSave を実行してください。

Throws:
NSValidation.ValidationException - 更新の要求が無効のとき
NSValidation.ValidationException
See Also:
validateForSave()

Last updated Thu Oct 21 15:04:16 PDT 2004.

Copyright © 2004 Apple Computer, Inc.