WebObjects 5.2.3

com.webobjects.eocontrol
Interface EOEnterpriseObject

All Superinterfaces:
EODeferredFaulting, EOFaulting, EOKeyValueCoding, EOKeyValueCodingAdditions, EORelationshipManipulation, EOValidation, NSKeyValueCoding, NSKeyValueCoding.ErrorHandling, NSKeyValueCodingAdditions, NSValidation, Serializable
All Known Implementing Classes:
EOCustomObject

public interface EOEnterpriseObject
extends Serializable, EOKeyValueCodingAdditions, EORelationshipManipulation, EOValidation, EODeferredFaulting

EOEnterpriseObjectインターフェースは、エンタープライズオブジェクトに共通する操作のメソッドを定義しており、エンタープライズオブジェクトの基本的な性質を示しています。 これらのメソッドにはインスタンスの初期化、変更の通知、プロパティの設定と取得、状態の検証が含まれます。 エンタープライズオブジェクトに関するメソッドには実装されるかオーバーライドされるものや、フレームワークによって定義され使われるものもあります。 多くのメソッドはフレームワークの内部で使用され、アプリケーションから呼び出すことはめったにありません。

役割はそれぞれ細かくインターフェースに分けられ、EOEnterpriseObjectインターフェースに組み込まれています。

EOEnterpriseObjectインターフェースをスクラッチから実装する必要は、まずありません。 フレームワークにはこれらのメソッドを実装したEOCustomObjectクラスとEOGenericRecordクラスがあります。 エンタープライズオブジェクトに独自の処理が必要なければEOGenericRecordを使用し、必要であればEOCustomObjectのサブクラスを定義してください。

詳細は EOEnterpriseObjectConcepts を参照してください。


Nested Class Summary
 
Nested classes inherited from class com.webobjects.eocontrol.EOKeyValueCodingAdditions
EOKeyValueCodingAdditions.DefaultImplementation, EOKeyValueCodingAdditions.Utility
 
Nested classes inherited from class com.webobjects.foundation.NSKeyValueCoding
NSKeyValueCoding.ErrorHandling, NSKeyValueCoding.Null, NSKeyValueCoding.UnknownKeyException, NSKeyValueCoding.ValueAccessor
 
Nested classes inherited from class com.webobjects.foundation.NSValidation
NSValidation.DefaultImplementation, NSValidation.Utility, NSValidation.ValidationException
 
Field Summary
 
Fields inherited from interface com.webobjects.foundation.NSKeyValueCodingAdditions
KeyPathSeparator
 
Fields inherited from interface com.webobjects.foundation.NSKeyValueCoding
NullValue
 
Method Summary
 NSArray allPropertyKeys()
           すべてのプロパティキーを返します。
 NSArray attributeKeys()
           リレーションシップを除く属性名の配列を返します。
 void awakeFromClientUpdate(EOEditingContext ec)
           クライアントアプリケーションが変更を保存した後、サーバサイドのエンタープライズオブジェクトで実行されます。
 void awakeFromFetch(EOEditingContext ec)
           サブクラスでオーバーライドします。 外部ストアからEOEditingContextにオブジェクトがフェッチされたときに初期化します。
 void awakeFromInsertion(EOEditingContext ec)
           サブクラスにオーバーライドされます。 オブジェクトがEOEditingContextに挿入された後に初期化を行います。
 NSDictionary changesFromSnapshot(NSDictionary snapshot)
           プロパティを辞書で返します。 snapshot と比較して変更のある(未保存の)プロパティの名前と値が、辞書のキーと値になります。
 EOClassDescription classDescription()
           オブジェクトのクラスに対応するEOClassDescriptionを返します。
 EOClassDescription classDescriptionForDestinationKey(String detailKey)
           detailKey のリレーションシップに対応するEOClassDescriptionを返します。
 void clearProperties()
           1対1、1対多のリレーションシップをすべて null に設定します。
 int deleteRuleForRelationshipKey(String relationshipKey)
           オブジェクトが削除されたとき、 relationshipKey のリレーションシップ先のオブジェクトを扱う方法を値で返します。
 EOEditingContext editingContext()
           オブジェクトを保持するEOEditingContextを返します。
 String entityName()
           オブジェクトのエンティティ名か、エンティティがなければ null を返します。
 String eoDescription()
           オブジェクトの内容を表す文字列を返します。
 String eoShallowDescription()
           eoDescription と似ていますが、リレーションシップまでは扱いません。
 String inverseForRelationshipKey(String relationshipKey)
           リレーションシップ relationshipKey が参照するクラス・エンティティのリレーションシップの中で、オブジェクトのクラス・エンティティを参照するものの名前を返します。 該当するリレーションシップがなければ null を返します。
 Object invokeRemoteMethod(String methodName, Class[] argumentTypes, Object[] arguments)
           サーバ側のエンタープライズオブジェクトのメソッドを実行します。
 boolean isToManyKey(String key)
           1対多である、名前が key のリレーションシップがあるなら true を、なければ false を返します。
 Object opaqueState()
           EOFの内部の状態を保持するオブジェクトを返します。
 boolean ownsDestinationObjectsForRelationshipKey(String relationshipKey)
           relationshipKey のリレーションシップ先にオブジェクトがあれば true を、持っていなければ false を返します。
 void prepareValuesForClient()
           サーバ側のエンタープライズオブジェクトの値が、クライアントアプリケーションに送られる前に実行されます。
 void propagateDeleteWithEditingContext(EOEditingContext ec)
           削除ルールに沿ってリレーションシップ先のオブジェクトを削除します。
 void reapplyChangesFromDictionary(NSDictionary changes)
           takeValuesFromDictionary と似ていますが、 changes 辞書は1対多のリレーションシップの配列を含んでいます。
 NSDictionary snapshot()
           属性、1対1・1対多のリレーションシップのキーを持つ辞書を返します。 辞書の値はこれらのプロパティ値になり、 null は代わりにEONullValueが使われます。
 NSArray toManyRelationshipKeys()
           1対多のリレーションシップ名の配列を返します。
 NSArray toOneRelationshipKeys()
           1対1のリレーションシップ名の配列を返します。
 void updateFromSnapshot(NSDictionary snapshot)
           snapshot の値を、オブジェクトのプロパティに設定します。
 String userPresentableDescription()
           エンタープライズオブジェクトの内容を表す短い文字列(60文字以内)を返します。
 void willChange()
           監視者の objectWillChange を実行し、オブジェクトの状態がこれから変更されることを通知します。
 
Methods inherited from interface com.webobjects.eocontrol.EOKeyValueCodingAdditions
takeValuesFromDictionary, takeValuesFromDictionaryWithMapping, valuesForKeys, valuesForKeysWithMapping
 
Methods inherited from interface com.webobjects.foundation.NSKeyValueCodingAdditions
takeValueForKeyPath, valueForKeyPath
 
Methods inherited from interface com.webobjects.foundation.NSKeyValueCoding
takeValueForKey, valueForKey
 
Methods inherited from interface com.webobjects.eocontrol.EOKeyValueCoding
storedValueForKey, takeStoredValueForKey
 
Methods inherited from interface com.webobjects.foundation.NSKeyValueCoding.ErrorHandling
handleQueryWithUnboundKey, handleTakeValueForUnboundKey, unableToSetNullForKey
 
Methods inherited from interface com.webobjects.eocontrol.EORelationshipManipulation
addObjectToBothSidesOfRelationshipWithKey, addObjectToPropertyWithKey, removeObjectFromBothSidesOfRelationshipWithKey, removeObjectFromPropertyWithKey
 
Methods inherited from interface com.webobjects.eocontrol.EOValidation
validateClientUpdate, validateForDelete, validateForInsert, validateForSave, validateForUpdate
 
Methods inherited from interface com.webobjects.foundation.NSValidation
validateTakeValueForKeyPath, validateValueForKey
 
Methods inherited from interface com.webobjects.eocontrol.EODeferredFaulting
willReadRelationship
 
Methods inherited from interface com.webobjects.eocontrol.EOFaulting
clearFault, faultHandler, isFault, turnIntoFault, willRead
 

Method Detail

allPropertyKeys

public NSArray allPropertyKeys()
すべてのプロパティキーを返します。 EOCustomObjectの実装では、 attributeKeystoOneRelationshipKeystoManyRelationshipKeys の戻り値を総合したキーを返します。

Returns:
すべてのプロパティキー
See Also:
attributeKeys(), toOneRelationshipKeys(), toManyRelationshipKeys()

attributeKeys

public NSArray attributeKeys()
リレーションシップを除く属性名の配列を返します。 EOCustomObjectの実装では、EOClassDescriptionの attributeKeys を実行します。 このメソッドをオーバーライドして、EOClassDescriptionで定義されていない属性のキーを追加したいこともあるでしょう。 EOAccessレイヤーのEOClassDescriptionのサブクラスであるEOEntityClassDescriptionは、クラスプロパティとして指定された属性の名前の配列を返します。

Returns:
属性名の配列
See Also:
toOneRelationshipKeys(), toManyRelationshipKeys()

awakeFromClientUpdate

public void awakeFromClientUpdate(EOEditingContext ec)
クライアントアプリケーションが変更を保存した後、サーバサイドのエンタープライズオブジェクトで実行されます。 このメソッドは、クライアントからサーバにオブジェクトグラフへ変更が追加・保存されたときに実行されます。

Parameters:
ec - エンタープライズオブジェクトの editing context

awakeFromFetch

public void awakeFromFetch(EOEditingContext ec)
サブクラスでオーバーライドします。 外部ストアからEOEditingContextにオブジェクトがフェッチされたときに初期化します。 EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの awakeObjectFromFetch を実行するだけです。 サブクラスでは、初期化を行う前にスーパークラスの実装を実行するべきです。

Parameters:
ec - オブジェクトのフェッチに使用した EOEditingContext

awakeFromInsertion

public void awakeFromInsertion(EOEditingContext ec)
サブクラスにオーバーライドされます。 オブジェクトがEOEditingContextに挿入された後に初期化を行います。 このメソッドは、デフォルト値を設定したりオブジェクトを挿入するたびに使われます。 EOCustomObjectの実装では、オブジェクトのEOClassDescriptionの awakeObjectFromInsertion を実行します。 サブクラスでは、初期化を行う前にスーパークラスの実装を実行するべきです。

Parameters:
ec - オブジェクトを挿入した EOEditingContext

changesFromSnapshot

public NSDictionary changesFromSnapshot(NSDictionary snapshot)
プロパティを辞書で返します。 snapshot と比較して変更のある(未保存の)プロパティの名前と値が、辞書のキーと値になります。 snapshot と辞書に含まれる1対多のリレーションシップキーに対応する値は、2つの配列を持つ配列になります。 最初の配列はリレーションシップに追加されたオブジェクトの配列、次の配列は削除されたオブジェクトの配列です。

Parameters:
snapshot - オブジェクトグラフの状態を表すスナップショットとしての辞書
Returns:
snapshot と比較して未保存の変更を持つ辞書
See Also:
snapshot(), reapplyChangesFromDictionary(NSDictionary changes), EOEditingContext.currentEventSnapshotForObject(EOEnterpriseObject object), EOEditingContext.committedSnapshotForObject(EOEnterpriseObject object)

classDescription

public EOClassDescription classDescription()
オブジェクトのクラスに対応するEOClassDescriptionを返します。 EOCustomObjectの実装では、クラスメソッド EOClassDescription.classDescriptionForClass を実行します。 実装に関しての詳細はEOGenericRecordを参照してください。

Returns:
オブジェクトのクラスに対応するEOClassDescription
See Also:
EOClassDescription.classDescriptionForClass(Class c), EOCustomObject.classDescription(), EOGenericRecord.classDescription()

classDescriptionForDestinationKey

public EOClassDescription classDescriptionForDestinationKey(String detailKey)
detailKey のリレーションシップに対応するEOClassDescriptionを返します。 EOCustomObjectの実装では、オブジェクトのEOClassDescriptionの classDescriptionForDestinationKey を実行します。

Parameters:
detailKey - リレーションシップ名
Returns:
detailKey のリレーションシップに対応するEOClassDescription

clearProperties

public void clearProperties()
1対1、1対多のリレーションシップをすべて null に設定します。 EOEditingContextは、オブジェクトをファイナライズするときに循環参照を破棄するのにこのメソッドを使用します。 EOCustomObjectは、すべての条件を満たすよう実装しています。 エンタープライズオブジェクトが1対1、1対多でもないキーのオブジェクトを管理する場合、サブクラスは使用されていないオブジェクトを確実にファイナライズすべきです。


deleteRuleForRelationshipKey

public int deleteRuleForRelationshipKey(String relationshipKey)

オブジェクトが削除されたとき、 relationshipKey のリレーションシップ先のオブジェクトを扱う方法を値で返します。 削除ルールは次のうちのどれかになります すべてEOClassDescriptionで定義されています。

EOCustomObjectの実装では、EOClassDescriptionの deleteRuleForRelationshipKey を実行します。

Parameters:
relationshipKey - オブジェクトのリレーションシップ
Returns:
オブジェクトのリレーションシップを扱うルール
See Also:
EOClassDescription, propagateDeleteWithEditingContext(EOEditingContext ec), EOCustomObject.validateForDelete()

editingContext

public EOEditingContext editingContext()
オブジェクトを保持するEOEditingContextを返します。 EOEditingContextはエンタープライズオブジェクトの変更を追跡し、オブジェクトストア(通常はデータベース)と同期します。

Returns:
オブジェクトを保持するEOEditingContextか、どのEOEditingContextにも登録されていなければ null
See Also:
EOEditingContext

entityName

public String entityName()
オブジェクトのエンティティ名か、エンティティがなければ null を返します。 EOCustomObjectとEOGenericRecordの実装は、オブジェクトのEOClassDescriptionの entityName を実行します。

Returns:
オブジェクトのエンティティ名

eoDescription

public String eoDescription()
オブジェクトの内容を表す文字列を返します。 EOCustomObjectの実装は、key-value コーディングのメソッドで取得したすべてのプロパティ値を返します。 リレーションシップとして参照されているオブジェクトは、(循環参照の無限ループを避けるため) eoShallowDescription を実行した結果を返します。

Returns:
オブジェクトの内容を説明する文字列
See Also:
userPresentableDescription(), eoShallowDescription()

eoShallowDescription

public String eoShallowDescription()
eoDescription と似ていますが、リレーションシップまでは扱いません。 eoDescription は、リレーションシップの循環参照による無限ループを避けるためにこのメソッドを使います。 EOCustomObjectの実装は、オブジェクトのクラスとグローバルIDの情報を含む文字列を返します。

Returns:
オブジェクトのクラスとグローバルIDの情報を含む文字列
See Also:
userPresentableDescription(), eoDescription()

inverseForRelationshipKey

public String inverseForRelationshipKey(String relationshipKey)

リレーションシップ relationshipKey が参照するクラス・エンティティのリレーションシップの中で、オブジェクトのクラス・エンティティを参照するものの名前を返します。 該当するリレーションシップがなければ null を返します。 アクセスレイヤーのEOEntityとEORelationshipのクラスでは、(参照元・参照先の)2つのEORelationshipの結合に使う属性名から、エンティティ同士が相互に参照しているかどうかを判断します。 EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの inverseForRelationshipKey を実行します。

同じ結合用の属性を定義せずにリレーションシップの相互参照をさせるために、メソッドをオーバーライドすることがあります。 例えば、MemberオブジェクトはCreditCardオブジェクトへ、カード番号でリレーションを張っています 一方CreditCardオブジェクトは、Memberの主キーでMemberオブジェクトへリレーションを張っています。 このような場合(※)、どちらのクラスもこのメソッドをオーバーライドする必要があります。 Memberクラスでは次のように実装します。

    public String inverseForRelationshipKey(String relationshipKey){
        if (relationshipKey.equals("creditCard"))
            return( "member" );
        else
            return( super.inverseForRelationshipKey(relationshipKey) );
    }

※逆参照するリレーションシップが曖昧になります。 CreditCardエンティティがMemberエンティティへのリレーションシップを複数持つ場合、希望と異なるリレーションシップが返る可能性があります。

Parameters:
relationshipKey - リレーションシップ名
Returns:
オブジェクトのクラス・エンティティを参照するリレーションシップ名

invokeRemoteMethod

public Object invokeRemoteMethod(String methodName,
                                 Class[] argumentTypes,
                                 Object[] arguments)
サーバ側のエンタープライズオブジェクトのメソッドを実行します。 このメソッドの副作用は、クライアントのオブジェクトのEOEditingContextの変更が、サーバ側のセッションのEOEditingContextに保存されることです。 メソッドの戻り値は要求されたクラスに変換されます。

Parameters:
methodName - 実行するメソッド名
argumentTypes - 引数の型を含む配列
arguments - 引数を含む配列
Returns:
リモートメソッドを実行した戻り値

isToManyKey

public boolean isToManyKey(String key)
1対多である、名前が key のリレーションシップがあるなら true を、なければ false を返します。 EOCustomObjectの実装は、 toManyRelationshipKeys の配列から key があるかどうかを調べます。

Parameters:
key - 1対多のリレーションシップ名
Returns:
1対多である、名前が key のリレーションシップがあるなら true 、なければ false
See Also:
toManyRelationshipKeys()

opaqueState

public Object opaqueState()
EOFの内部の状態を保持するオブジェクトを返します。 このオブジェクトを使うべきではありません。

Returns:
内部の状態のオブジェクト

ownsDestinationObjectsForRelationshipKey

public boolean ownsDestinationObjectsForRelationshipKey(String relationshipKey)
relationshipKey のリレーションシップ先にオブジェクトがあれば true を、持っていなければ false を返します。 リレーションシップ先のオブジェクトは、リレーションシップから外されると自動的に削除されます。 削除ルールは、その場合と、リレーションシップ元のオブジェクトが削除されたときに適用されます。 このように、リレーションシップのオーナーシップは削除ルールの点で対照的になります。 EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの ownsDestinationObjectsForRelationshipKey を実行します。

Parameters:
relationshipKey - リレーションシップ名
Returns:
relationshipKey のリレーションシップ先にオブジェクトがあれば true 、持っていなければ false
See Also:
deleteRuleForRelationshipKey(String relationshipKey), EORelationship.ownsDestination()

prepareValuesForClient

public void prepareValuesForClient()
サーバ側のエンタープライズオブジェクトの値が、クライアントアプリケーションに送られる前に実行されます。 このメソッドをオーバーライドすると、オブジェクトがエンコードされる前にクライアント側独自のプロパティを用意することができます。


propagateDeleteWithEditingContext

public void propagateDeleteWithEditingContext(EOEditingContext ec)
削除ルールに沿ってリレーションシップ先のオブジェクトを削除します。 EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの propagateDeleteForObject を実行します。

Parameters:
ec - オブジェクトを保持するEOEditingContext
See Also:
deleteRuleForRelationshipKey(String relationshipKey)

reapplyChangesFromDictionary

public void reapplyChangesFromDictionary(NSDictionary changes)
takeValuesFromDictionary と似ていますが、 changes 辞書は1対多のリレーションシップの配列を含んでいます。 この辞書では、1対多のリレーションシップの値は2つのNSArrayを含むNSArrayオブジェクトです。 最初の配列はリレーションシップとして追加されたオブジェクト、次の配列はリレーションシップから外されたオブジェクトを含みます。 EOCustomObjectのこのメソッドは必要な機能を実装しており、オーバーライドしてはいけません。 NSKeyValueCoding.NullValueは辞書の中で null を表すのに使われます。

Parameters:
changes - 1対多のリレーションシップのオブジェクトの配列を含む辞書
See Also:
snapshot(), changesFromSnapshot(NSDictionary snapshot), EOEditingContext.currentEventSnapshotForObject(EOEnterpriseObject object), EOEditingContext.committedSnapshotForObject(EOEnterpriseObject object)

snapshot

public NSDictionary snapshot()
属性、1対1・1対多のリレーションシップのキーを持つ辞書を返します。 辞書の値はこれらのプロパティ値になり、 null は代わりにEONullValueが使われます。 1対多のリレーションシップの値は、オブジェクトの配列の浅いコピーになります。 EOCustomObjectのこのメソッドは必要な機能を実装しており、オーバーライドしてはいけません。

Returns:
属性、1対1・1対多のリレーションシップのキーを持つ辞書
See Also:
updateFromSnapshot(NSDictionary aSnapshot)

toManyRelationshipKeys

public NSArray toManyRelationshipKeys()
1対多のリレーションシップ名の配列を返します。 EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの toManyRelationshipKeys を実行し、結果を返します。 このメソッドをオーバーライドしてEOClassDescriptionで定義されていないキーを追加したいこともあるかもしれませんが、オーバーライドが必要になることはほとんどありません。 EOClassDescriptionのサブクラスである、アクセスレイヤーのEOEntityClassDescriptionは、クラスプロパティとして指定されている1対多のリレーションシップ名の配列を返します。

Returns:
1対多のリレーションシップ名の配列
See Also:
attributeKeys(), toOneRelationshipKeys()

toOneRelationshipKeys

public NSArray toOneRelationshipKeys()
1対1のリレーションシップ名の配列を返します。 EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの toOneRelationshipKeys を実行し、結果を返します。 このメソッドをオーバーライドしてEOClassDescriptionで定義されていないキーを追加したいこともあるかもしれませんが、オーバーライドが必要になることはほとんどありません。 EOClassDescriptionのサブクラスである、アクセスレイヤーのEOEntityClassDescriptionは、クラスプロパティとして指定されている1対1のリレーションシップ名の配列を返します。

Returns:
1対1のリレーションシップ名の配列
See Also:
attributeKeys(), toManyRelationshipKeys()

updateFromSnapshot

public void updateFromSnapshot(NSDictionary snapshot)
snapshot の値を、オブジェクトのプロパティに設定します。 EOCustomObjectの実装は、各プロパティに対して takeStoredValueForKey を実行します。 EONullValueは null に変換され、配列は変更可能な浅いコピーが設定されます。

Parameters:
snapshot - 変更不可能な辞書 *1
See Also:
snapshot()

userPresentableDescription

public String userPresentableDescription()
エンタープライズオブジェクトの内容を表す短い文字列(60文字以内)を返します。 EOCustomObjectの実装は、 attributeKeys のキーを使って取得したプロパティ値を、カンマ区切りの文字列にして返します。 数値と日付にはデフォルトのフォーマッタが使われます。

Returns:
エンタープライズオブジェクトの内容を表す文字列
See Also:
eoDescription(), eoShallowDescription(), attributeKeys()

willChange

public void willChange()
監視者の objectWillChange を実行し、オブジェクトの状態がこれから変更されることを通知します。 サブクラスでこのメソッドをオーバーライドするべきではありませんが、サブクラスのインスタンスの状態が変更される前にこのメソッドを呼ぶ必要があります。 通常、"set" メソッドでは次のようにします。
    public void setRoleName(String value){
        willChange();
        roleName = value;
    }

See Also:
EOObserverCenter, EOEditingContext.objectWillChange(Object object)

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

Copyright © 2004 Apple Computer, Inc.

*1 原文は "the immutable array of values" 。 配列ではないので修正した。