|
WebObjects 5.2.3 | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
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 |
public NSArray allPropertyKeys()
attributeKeys
、 toOneRelationshipKeys
、 toManyRelationshipKeys
の戻り値を総合したキーを返します。
attributeKeys()
,
toOneRelationshipKeys()
,
toManyRelationshipKeys()
public NSArray attributeKeys()
attributeKeys
を実行します。
このメソッドをオーバーライドして、EOClassDescriptionで定義されていない属性のキーを追加したいこともあるでしょう。
EOAccessレイヤーのEOClassDescriptionのサブクラスであるEOEntityClassDescriptionは、クラスプロパティとして指定された属性の名前の配列を返します。
toOneRelationshipKeys()
,
toManyRelationshipKeys()
public void awakeFromClientUpdate(EOEditingContext ec)
ec
- エンタープライズオブジェクトの editing contextpublic void awakeFromFetch(EOEditingContext ec)
awakeObjectFromFetch
を実行するだけです。
サブクラスでは、初期化を行う前にスーパークラスの実装を実行するべきです。
ec
- オブジェクトのフェッチに使用した EOEditingContextpublic void awakeFromInsertion(EOEditingContext ec)
awakeObjectFromInsertion
を実行します。
サブクラスでは、初期化を行う前にスーパークラスの実装を実行するべきです。
ec
- オブジェクトを挿入した EOEditingContextpublic NSDictionary changesFromSnapshot(NSDictionary snapshot)
snapshot
と比較して変更のある(未保存の)プロパティの名前と値が、辞書のキーと値になります。
snapshot
と辞書に含まれる1対多のリレーションシップキーに対応する値は、2つの配列を持つ配列になります。
最初の配列はリレーションシップに追加されたオブジェクトの配列、次の配列は削除されたオブジェクトの配列です。
snapshot
- オブジェクトグラフの状態を表すスナップショットとしての辞書
snapshot
と比較して未保存の変更を持つ辞書
snapshot()
,
reapplyChangesFromDictionary(NSDictionary changes)
,
EOEditingContext.currentEventSnapshotForObject(EOEnterpriseObject object)
,
EOEditingContext.committedSnapshotForObject(EOEnterpriseObject object)
public EOClassDescription classDescription()
EOClassDescription.classDescriptionForClass
を実行します。
実装に関しての詳細はEOGenericRecordを参照してください。
EOClassDescription.classDescriptionForClass(Class c)
,
EOCustomObject.classDescription()
,
EOGenericRecord.classDescription()
public EOClassDescription classDescriptionForDestinationKey(String detailKey)
detailKey
のリレーションシップに対応するEOClassDescriptionを返します。
EOCustomObjectの実装では、オブジェクトのEOClassDescriptionの classDescriptionForDestinationKey
を実行します。
detailKey
- リレーションシップ名
detailKey
のリレーションシップに対応するEOClassDescriptionpublic void clearProperties()
public int deleteRuleForRelationshipKey(String relationshipKey)
オブジェクトが削除されたとき、 relationshipKey
のリレーションシップ先のオブジェクトを扱う方法を値で返します。
削除ルールは次のうちのどれかになります
すべてEOClassDescriptionで定義されています。
EOCustomObjectの実装では、EOClassDescriptionの deleteRuleForRelationshipKey
を実行します。
relationshipKey
-
オブジェクトのリレーションシップ
EOClassDescription
,
propagateDeleteWithEditingContext(EOEditingContext ec)
,
EOCustomObject.validateForDelete()
public EOEditingContext editingContext()
null
EOEditingContext
public String entityName()
null
を返します。
EOCustomObjectとEOGenericRecordの実装は、オブジェクトのEOClassDescriptionの entityName
を実行します。
public String eoDescription()
eoShallowDescription
を実行した結果を返します。
userPresentableDescription()
,
eoShallowDescription()
public String eoShallowDescription()
eoDescription
と似ていますが、リレーションシップまでは扱いません。
eoDescription
は、リレーションシップの循環参照による無限ループを避けるためにこのメソッドを使います。
EOCustomObjectの実装は、オブジェクトのクラスとグローバルIDの情報を含む文字列を返します。
userPresentableDescription()
,
eoDescription()
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エンティティへのリレーションシップを複数持つ場合、希望と異なるリレーションシップが返る可能性があります。
relationshipKey
- リレーションシップ名
public Object invokeRemoteMethod(String methodName, Class[] argumentTypes, Object[] arguments)
methodName
- 実行するメソッド名
argumentTypes
- 引数の型を含む配列
arguments
- 引数を含む配列
public boolean isToManyKey(String key)
key
のリレーションシップがあるなら true を、なければ false を返します。
EOCustomObjectの実装は、 toManyRelationshipKeys
の配列から key
があるかどうかを調べます。
key
- 1対多のリレーションシップ名
key
のリレーションシップがあるなら true 、なければ false
toManyRelationshipKeys()
public Object opaqueState()
public boolean ownsDestinationObjectsForRelationshipKey(String relationshipKey)
relationshipKey
のリレーションシップ先にオブジェクトがあれば true を、持っていなければ false を返します。
リレーションシップ先のオブジェクトは、リレーションシップから外されると自動的に削除されます。
削除ルールは、その場合と、リレーションシップ元のオブジェクトが削除されたときに適用されます。
このように、リレーションシップのオーナーシップは削除ルールの点で対照的になります。
EOCustomObjectの実装は、オブジェクトのEOClassDescriptionの ownsDestinationObjectsForRelationshipKey
を実行します。
relationshipKey
- リレーションシップ名
relationshipKey
のリレーションシップ先にオブジェクトがあれば true 、持っていなければ false
deleteRuleForRelationshipKey(String relationshipKey)
,
EORelationship.ownsDestination()
public void prepareValuesForClient()
public void propagateDeleteWithEditingContext(EOEditingContext ec)
propagateDeleteForObject
を実行します。
ec
- オブジェクトを保持するEOEditingContext
deleteRuleForRelationshipKey(String relationshipKey)
public void reapplyChangesFromDictionary(NSDictionary changes)
takeValuesFromDictionary
と似ていますが、 changes
辞書は1対多のリレーションシップの配列を含んでいます。
この辞書では、1対多のリレーションシップの値は2つのNSArrayを含むNSArrayオブジェクトです。
最初の配列はリレーションシップとして追加されたオブジェクト、次の配列はリレーションシップから外されたオブジェクトを含みます。
EOCustomObjectのこのメソッドは必要な機能を実装しており、オーバーライドしてはいけません。
NSKeyValueCoding.NullValueは辞書の中で null を表すのに使われます。
changes
-
1対多のリレーションシップのオブジェクトの配列を含む辞書
snapshot()
,
changesFromSnapshot(NSDictionary snapshot)
,
EOEditingContext.currentEventSnapshotForObject(EOEnterpriseObject object)
,
EOEditingContext.committedSnapshotForObject(EOEnterpriseObject object)
public NSDictionary snapshot()
null
は代わりにEONullValueが使われます。
1対多のリレーションシップの値は、オブジェクトの配列の浅いコピーになります。
EOCustomObjectのこのメソッドは必要な機能を実装しており、オーバーライドしてはいけません。
updateFromSnapshot(NSDictionary aSnapshot)
public NSArray toManyRelationshipKeys()
toManyRelationshipKeys
を実行し、結果を返します。
このメソッドをオーバーライドしてEOClassDescriptionで定義されていないキーを追加したいこともあるかもしれませんが、オーバーライドが必要になることはほとんどありません。
EOClassDescriptionのサブクラスである、アクセスレイヤーのEOEntityClassDescriptionは、クラスプロパティとして指定されている1対多のリレーションシップ名の配列を返します。
attributeKeys()
,
toOneRelationshipKeys()
public NSArray toOneRelationshipKeys()
toOneRelationshipKeys
を実行し、結果を返します。
このメソッドをオーバーライドしてEOClassDescriptionで定義されていないキーを追加したいこともあるかもしれませんが、オーバーライドが必要になることはほとんどありません。
EOClassDescriptionのサブクラスである、アクセスレイヤーのEOEntityClassDescriptionは、クラスプロパティとして指定されている1対1のリレーションシップ名の配列を返します。
attributeKeys()
,
toManyRelationshipKeys()
public void updateFromSnapshot(NSDictionary snapshot)
snapshot
の値を、オブジェクトのプロパティに設定します。
EOCustomObjectの実装は、各プロパティに対して takeStoredValueForKey
を実行します。
EONullValueは null に変換され、配列は変更可能な浅いコピーが設定されます。
snapshot
- 変更不可能な辞書 *1
snapshot()
public String userPresentableDescription()
attributeKeys
のキーを使って取得したプロパティ値を、カンマ区切りの文字列にして返します。
数値と日付にはデフォルトのフォーマッタが使われます。
eoDescription()
,
eoShallowDescription()
,
attributeKeys()
public void willChange()
objectWillChange
を実行し、オブジェクトの状態がこれから変更されることを通知します。
サブクラスでこのメソッドをオーバーライドするべきではありませんが、サブクラスのインスタンスの状態が変更される前にこのメソッドを呼ぶ必要があります。
通常、"set" メソッドでは次のようにします。
public void setRoleName(String value){ willChange(); roleName = value; }
EOObserverCenter
,
EOEditingContext.objectWillChange(Object object)
|
Last updated Thu Oct 21 15:04:16 PDT 2004. | ||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
*1 原文は "the immutable array of values" 。 配列ではないので修正した。