diff options
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOCustomObject.java')
| -rw-r--r-- | projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOCustomObject.java | 1158 |
1 files changed, 526 insertions, 632 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOCustomObject.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOCustomObject.java index 6b262cb..4c7ca40 100644 --- a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOCustomObject.java +++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOCustomObject.java @@ -28,646 +28,540 @@ import net.wotonomy.foundation.NSSet; import net.wotonomy.foundation.internal.WotonomyException; /** -* EOCustomObject implements all the necessary interfaces to -* receive first-class treatment from the control framework. -* The implementation delegates as much class meta-behavior as -* possible to EOClassDescription, letting subclasses -* focus exclusively on business logic while still allowing -* them to customize as much class behavior as needed. -* -* @author michael@mpowers.net -* @author $Author: cgruber $ -* @version $Revision: 894 $ -*/ -public class EOCustomObject - implements EOEnterpriseObject, - EOKeyValueCodingAdditions, - EODeferredFaulting, - EORelationshipManipulation, - EOValidation -{ - private transient static EOClassDescription classDescription; - private transient EOEditingContext editingContext; - - // static configuration - - /** - * Specifies whether the implementation of EOKeyValueCoding - * is permitted to access field directly. This implementation - * returns true; subclasses may override to customize this behavior. - */ - public static boolean canAccessFieldsDirectly() - { - return true; - } - - /** - * Specifies whether the implementation of EOKeyValueCoding - * is permitted to access private accessors. This implementation - * returns true; subclasses may override to customize this behavior. - */ - public static boolean shouldUseStoredAccessors() - { - return true; - } - - /** - * Specifies whether deferred faults should be used. This implementation - * returns false; subclasses may override to customize this behavior. - */ - public static boolean usesDeferredFaultCreation() - { - return false; - } - - // constructors - - /** - * Default constructor initializes private state. - * EditingContext and ClassDescription are set to null. - */ - public EOCustomObject() - { - editingContext = null; - classDescription = null; - } - - /** - * Preferred constructor, specifying an editing context, - * a class description, and a global id, any or all of which - * may be null. Subclasses should invoke this constructor. - */ - public EOCustomObject( - EOEditingContext aContext, - EOClassDescription aClassDescription, - EOGlobalID aGlobalID ) - { - editingContext = aContext; - classDescription = aClassDescription; - } - - // interface EOEnterpriseObject - - /** - * Returns a List of all property keys defined on this object. - * This includes both attributes and relationships. - * This implementation returns the union of attributeKeys, - * toOneRelationshipKeys, and toManyRelationshipKeys. - */ - public NSArray allPropertyKeys() - { - NSSet union = new NSSet(); - union.addAll( attributeKeys() ); - union.addAll( toOneRelationshipKeys() ); - union.addAll( toManyRelationshipKeys() ); - return new NSArray( (Collection) union ); - } - - /** - * Returns a list of all attributes defined on this object. - * Attributes are all properties that are not relationships. - * This implementation retrieves the keys from the class - * description. - */ - public NSArray attributeKeys() - { - return classDescription().attributeKeys(); - } - - //void awakeFromClientUpdate(EOEditingContext aContext) - - /** - * Called when the object has first been fetched into the - * specified editing context. This implementation calls - * awakeObjectFromFetch on the class description. - */ - public void awakeFromFetch(EOEditingContext anEditingContext) - { - classDescription().awakeObjectFromFetch( this, anEditingContext ); - } - - /** - * Called when the object has been inserted into the - * specified editing context. This implementation calls - * awakeObjectFromInsertion on the class description. - */ - public void awakeFromInsertion(EOEditingContext anEditingContext) - { - classDescription().awakeObjectFromInsertion( this, anEditingContext ); - } - - /** - * Returns a Map representing the delta of the current state - * from the state represented in the specified snapshot. - * The result will contain only the keys that have changed - * and their values. Relationship keys will map to an NSArray - * that contains an NSArray of added objects and an NSArray - * of removed objects, in that order. - */ - public NSDictionary changesFromSnapshot(NSDictionary snapshot) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns a class description for this object. - * Calls EOClassDescription.classDescriptionForClass. - */ - public EOClassDescription classDescription() - { - if ( classDescription == null ) - { - classDescription = EOClassDescription.classDescriptionForClass( getClass() ); - if ( classDescription == null ) - { - throw new WotonomyException( - "No class description found for class: " + getClass() ); - } - } - return classDescription; - } - - /** - * Returns a class description for the object at the - * other end of the specified relationship key. - * This implementation calls to the classDescription. - */ - public EOClassDescription classDescriptionForDestinationKey(String aKey) - { - return classDescription().classDescriptionForDestinationKey( aKey ); - } - - /** - * Clears all property values for this object. - * This method is called to clean-up an object that - * will no longer be used, and implementations should - * ensure that all references are set to null to - * prevent problems with garbage-collection. - */ - public void clearProperties() - { - //FIXME: clear properties here - } - - /** - * Returns the delete rule constant defined on EOClassDescription - * for the relationship defined by the specified key. - * This implementation calls to the classDescription. - */ - public int deleteRuleForRelationshipKey(String aRelationshipKey) - { - return classDescription().deleteRuleForRelationshipKey( aRelationshipKey ); - } - - /** - * Returns the editing context in which this object is registered. - */ - public EOEditingContext editingContext() - { - return editingContext; - } - - /** - * Returns the name of the entity that this object represents. - */ - public String entityName() - { - return classDescription().entityName(); - } - - /** - * Returns a String containing all property keys and values for - * this object. Relationships should be represented by calling - * eoShallowDescription() on the object. - */ - public String eoDescription() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns a String containing all attribute keys and values for - * this object. Relationships are not included. - */ - public String eoShallowDescription() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns the key used to reference this object on the - * object at the other end of the specified relationship. - * This implementation calls to the class description. - */ - public String inverseForRelationshipKey(String aRelationshipKey) - { - return classDescription().inverseForRelationshipKey( aRelationshipKey ); - } - - //Object invokeRemoteMethod( - // String aMethodName, Class[] aTypeArray Object[] anArgumentArray) - - /** - * Returns whether the specified relationship key represents - * a to-many relationship. - */ - public boolean isToManyKey(String aKey) - { - return toManyRelationshipKeys().containsObject( aKey ); - } - - /** - * Returns whether the objects at the other end of the specified - * relationship should be deleted when this object is deleted. - * This implementation calls to the class description. - */ - public boolean ownsDestinationObjectsForRelationshipKey(String aKey) - { - return classDescription().ownsDestinationObjectsForRelationshipKey( aKey ); - } - - //void prepareValuesForClient() - - /** - * Called to perform the delete propagation for this object - * on the specified editing context. All relationships - * should be processed according to their corresponding - * delete rule. - * This implementation calls to the class description. - */ - public void propagateDeleteWithEditingContext(EOEditingContext aContext) - { - classDescription().propagateDeleteForObject( this, aContext ); - } - - /** - * Applies the changes from the specified snapshot to - * this object. - * @see #changesFromSnapshot(NSDictionary) - */ - public void reapplyChangesFromDictionary(NSDictionary aDeltaSnapshot) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns a snapshot of the current state of this object. - * All property keys are mapped to their values; nulls are - * represented by NSNull. - */ - public NSDictionary snapshot() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns a List of the to-many relationship keys - * for this object. - * This implementation calls to the class description. - */ - public NSArray toManyRelationshipKeys() - { - return classDescription().toManyRelationshipKeys(); - } - - /** - * Returns a List of the to-one relationship keys - * for this object. - * This implementation calls to the class description. - */ - public NSArray toOneRelationshipKeys() - { - return classDescription().toOneRelationshipKeys(); - } - - /** - * Applies the specified snapshot to this object, - * converting NSNulls to null and calling - * takeStoredValueForKey for each key in the Map. - */ - public void updateFromSnapshot(NSDictionary aSnapshot) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns a short, stateful string representation - * of this object. - * This implementation calls to the class description. - */ - public String userPresentableDescription() - { - return classDescription().userPresentableDescriptionForObject( this ); - } - - /** - * This method should be called by each setter method - * on this object before changes are made to the - * object's internal state. This implementation calls - * EOObserverCenter.notifyObserversObjectWillChange( this ), - */ - public void willChange() - { - EOObserverCenter.notifyObserversObjectWillChange( this ); - } - - // interface EOKeyValueCoding - - /** - * Returns the value for the specified property. - * If the property does not exist, this method should - * call handleQueryWithUnboundKey. - */ - public Object valueForKey( String aKey ) - { - return EOKeyValueCodingSupport.valueForKey( this, aKey ); - } - - /** - * Sets the property to the specified value. - * If the property does not exist, this method should - * call handleTakeValueForUnboundKey. - * If the property is of a type that cannot allow - * null (e.g. primitive types) and aValue is null, - * this method should call unableToSetNullForKey. - */ - public void takeValueForKey( Object aValue, String aKey ) - { - EOKeyValueCodingSupport.takeValueForKey( this, aValue, aKey ); - } - - /** - * Returns the value for the private field that - * corresponds to the specified property. - */ - public Object storedValueForKey( String aKey ) - { - return EOKeyValueCodingSupport.storedValueForKey( this, aKey ); - } - - /** - * Sets the the private field that corresponds to the - * specified property to the specified value. - */ - public void takeStoredValueForKey( Object aValue, String aKey ) - { - EOKeyValueCodingSupport.takeStoredValueForKey( this, aValue, aKey ); - } - - /** - * Called by valueForKey when the specified key is - * not found on this object. Implementing classes - * should handle the specified value or otherwise - * throw an exception. - */ - public Object handleQueryWithUnboundKey( String aKey ) - { - return EOKeyValueCodingSupport.handleQueryWithUnboundKey( this, aKey ); - } - - /** - * Called by takeValueForKey when the specified key - * is not found on this object. Implementing classes - * should handle the specified value or otherwise - * throw an exception. - */ - public void handleTakeValueForUnboundKey( Object aValue, String aKey ) - { - EOKeyValueCodingSupport.handleTakeValueForUnboundKey( this, aValue, aKey ); - } - - /** - * Called by takeValueForKey when the type of the - * specified key is not allowed to be null, as is - * the case with primitive types. Implementing - * classes should handle this case appropriately - * or otherwise throw an exception. - */ - public void unableToSetNullForKey( String aKey ) - { - EOKeyValueCodingSupport.unableToSetNullForKey( this, aKey ); - } - - // interface EOKeyValueCodingAdditions - - /** - * Returns the value for the specified key path, which is - * a series of keys delimited by ".", for example: - * "createTime.year.length". - */ - public Object valueForKeyPath( String aKeyPath ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Sets the value for the specified key path, which is - * a series of keys delimited by ".", for example: - * "createTime.year.length". - * The value is set for the last object referenced by - * the key path. - */ - public void takeValueForKeyPath( Object aValue, String aKeyPath ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns a Map of the specified keys to their values, - * each of which might be obtained by calling valueForKey. - */ - public NSDictionary valuesForKeys( List aKeyList ) - { - return KeyValueCodingUtilities.valuesForKeys( this, aKeyList ); - } - - /** - * Takes the keys from the specified map as properties - * and applies the corresponding values, each of which - * might be set by calling takeValueForKey. - */ - public void takeValuesFromDictionary( Map aMap ) - { - KeyValueCodingUtilities.takeValuesFromDictionary( this, aMap ); - } - - // interface EOFaulting - - /** - * Called by EOFaultHandler to prepare the object to be turned into a fault. - */ - public void clearFault() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns this object's EOFaultHandler. - */ - public EOFaultHandler faultHandler() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Returns whether this object is currently a fault. - * Returns true if this object has not yet retrieved any values. - */ - public boolean isFault() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Turns this object into a fault using the specified fault handler. - */ - public void turnIntoFault( EOFaultHandler aFaultHandler ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Called to completely fire the fault, reading all attributes. - * This method may be implemented to call willRead(null). - */ - public void willRead() - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Called to fire the fault for the specified key. - * The fault manager is required to populate the specified key - * with a value, and may populate any or all of the other values - * on this object. A null key will populate all values on the object. - * NOTE: This method is not part of the specification. - */ - public void willRead( String aKey ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - // interface EODeferredFaulting - - /** - * Returns a fault for the specified deferred fault. - */ - public Object willReadRelationship( Object anObject ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - // interface EORelationshipManipulation - - /** - * Adds the specified object to the relationship on this - * object specified by the key. For to-one relationships, - * this operation is the same as valueForKey. - */ - public void addObjectToPropertyWithKey( - Object anObject, String aKey ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * Removes the specified object from the relationship on - * this object specified by the key. For to-one relationships, - * this operation is the same as takeValueForKey with a null - * value. - */ - public void removeObjectFromPropertyWithKey( - Object anObject, String aKey ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * As addObjectToProperty with key, but also performs the - * reciprocal operation on the other side of the relationship. - */ - public void addObjectToBothSidesOfRelationshipWithKey( - EORelationshipManipulation anObject, String aKey ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - /** - * As removeObjectFromPropertyWithKey with key, but also performs the - * reciprocal operation on the other side of the relationship. - */ - public void removeObjectFromBothSidesOfRelationshipWithKey( - EORelationshipManipulation anObject, String aKey ) - { - throw new WotonomyException( "Not implemented yet." ); - } - - // interface EOValidation - - /** - * Validates this object for delete. - * Throws an exception if this object cannot be deleted. - * This implementation calls to the class description. - */ - public void validateForDelete() - { - classDescription().validateObjectForDelete( this ); - } - - /** - * Validates this object for insertion into the external store. - * Throws an exception if this object cannot be inserted. - * Validations here should be specific to insertion. - * This implementation calls validateForSave(). - */ - public void validateForInsert() - { - validateForSave(); - } - - /** - * Validates this object for a commit to the external store. - * Throws an exception if this object cannot be committed. - * Validations here are not specific to either inserts or updates. - * This implementation calls to the class description. - */ - public void validateForSave() - { - classDescription().validateObjectForSave( this ); - } - - /** - * Validates this object for update to the external store. - * Throws an exception if this object cannot be updated. - * Validations here should be specific to updates. - * This implementation calls validateForSave(). - */ - public void validateForUpdate() - { - validateForSave(); - } + * EOCustomObject implements all the necessary interfaces to receive first-class + * treatment from the control framework. The implementation delegates as much + * class meta-behavior as possible to EOClassDescription, letting subclasses + * focus exclusively on business logic while still allowing them to customize as + * much class behavior as needed. + * + * @author michael@mpowers.net + * @author $Author: cgruber $ + * @version $Revision: 894 $ + */ +public class EOCustomObject implements EOEnterpriseObject, EOKeyValueCodingAdditions, EODeferredFaulting, + EORelationshipManipulation, EOValidation { + private transient static EOClassDescription classDescription; + private transient EOEditingContext editingContext; + + // static configuration + + /** + * Specifies whether the implementation of EOKeyValueCoding is permitted to + * access field directly. This implementation returns true; subclasses may + * override to customize this behavior. + */ + public static boolean canAccessFieldsDirectly() { + return true; + } + + /** + * Specifies whether the implementation of EOKeyValueCoding is permitted to + * access private accessors. This implementation returns true; subclasses may + * override to customize this behavior. + */ + public static boolean shouldUseStoredAccessors() { + return true; + } + + /** + * Specifies whether deferred faults should be used. This implementation returns + * false; subclasses may override to customize this behavior. + */ + public static boolean usesDeferredFaultCreation() { + return false; + } + + // constructors + + /** + * Default constructor initializes private state. EditingContext and + * ClassDescription are set to null. + */ + public EOCustomObject() { + editingContext = null; + classDescription = null; + } + + /** + * Preferred constructor, specifying an editing context, a class description, + * and a global id, any or all of which may be null. Subclasses should invoke + * this constructor. + */ + public EOCustomObject(EOEditingContext aContext, EOClassDescription aClassDescription, EOGlobalID aGlobalID) { + editingContext = aContext; + classDescription = aClassDescription; + } + + // interface EOEnterpriseObject + + /** + * Returns a List of all property keys defined on this object. This includes + * both attributes and relationships. This implementation returns the union of + * attributeKeys, toOneRelationshipKeys, and toManyRelationshipKeys. + */ + public NSArray allPropertyKeys() { + NSSet union = new NSSet(); + union.addAll(attributeKeys()); + union.addAll(toOneRelationshipKeys()); + union.addAll(toManyRelationshipKeys()); + return new NSArray((Collection) union); + } + + /** + * Returns a list of all attributes defined on this object. Attributes are all + * properties that are not relationships. This implementation retrieves the keys + * from the class description. + */ + public NSArray attributeKeys() { + return classDescription().attributeKeys(); + } + + // void awakeFromClientUpdate(EOEditingContext aContext) + + /** + * Called when the object has first been fetched into the specified editing + * context. This implementation calls awakeObjectFromFetch on the class + * description. + */ + public void awakeFromFetch(EOEditingContext anEditingContext) { + classDescription().awakeObjectFromFetch(this, anEditingContext); + } + + /** + * Called when the object has been inserted into the specified editing context. + * This implementation calls awakeObjectFromInsertion on the class description. + */ + public void awakeFromInsertion(EOEditingContext anEditingContext) { + classDescription().awakeObjectFromInsertion(this, anEditingContext); + } + + /** + * Returns a Map representing the delta of the current state from the state + * represented in the specified snapshot. The result will contain only the keys + * that have changed and their values. Relationship keys will map to an NSArray + * that contains an NSArray of added objects and an NSArray of removed objects, + * in that order. + */ + public NSDictionary changesFromSnapshot(NSDictionary snapshot) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns a class description for this object. Calls + * EOClassDescription.classDescriptionForClass. + */ + public EOClassDescription classDescription() { + if (classDescription == null) { + classDescription = EOClassDescription.classDescriptionForClass(getClass()); + if (classDescription == null) { + throw new WotonomyException("No class description found for class: " + getClass()); + } + } + return classDescription; + } + + /** + * Returns a class description for the object at the other end of the specified + * relationship key. This implementation calls to the classDescription. + */ + public EOClassDescription classDescriptionForDestinationKey(String aKey) { + return classDescription().classDescriptionForDestinationKey(aKey); + } + + /** + * Clears all property values for this object. This method is called to clean-up + * an object that will no longer be used, and implementations should ensure that + * all references are set to null to prevent problems with garbage-collection. + */ + public void clearProperties() { + // FIXME: clear properties here + } + + /** + * Returns the delete rule constant defined on EOClassDescription for the + * relationship defined by the specified key. This implementation calls to the + * classDescription. + */ + public int deleteRuleForRelationshipKey(String aRelationshipKey) { + return classDescription().deleteRuleForRelationshipKey(aRelationshipKey); + } + + /** + * Returns the editing context in which this object is registered. + */ + public EOEditingContext editingContext() { + return editingContext; + } + + /** + * Returns the name of the entity that this object represents. + */ + public String entityName() { + return classDescription().entityName(); + } + + /** + * Returns a String containing all property keys and values for this object. + * Relationships should be represented by calling eoShallowDescription() on the + * object. + */ + public String eoDescription() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns a String containing all attribute keys and values for this object. + * Relationships are not included. + */ + public String eoShallowDescription() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns the key used to reference this object on the object at the other end + * of the specified relationship. This implementation calls to the class + * description. + */ + public String inverseForRelationshipKey(String aRelationshipKey) { + return classDescription().inverseForRelationshipKey(aRelationshipKey); + } + + // Object invokeRemoteMethod( + // String aMethodName, Class[] aTypeArray Object[] anArgumentArray) + + /** + * Returns whether the specified relationship key represents a to-many + * relationship. + */ + public boolean isToManyKey(String aKey) { + return toManyRelationshipKeys().containsObject(aKey); + } + + /** + * Returns whether the objects at the other end of the specified relationship + * should be deleted when this object is deleted. This implementation calls to + * the class description. + */ + public boolean ownsDestinationObjectsForRelationshipKey(String aKey) { + return classDescription().ownsDestinationObjectsForRelationshipKey(aKey); + } + + // void prepareValuesForClient() + + /** + * Called to perform the delete propagation for this object on the specified + * editing context. All relationships should be processed according to their + * corresponding delete rule. This implementation calls to the class + * description. + */ + public void propagateDeleteWithEditingContext(EOEditingContext aContext) { + classDescription().propagateDeleteForObject(this, aContext); + } + + /** + * Applies the changes from the specified snapshot to this object. + * + * @see #changesFromSnapshot(NSDictionary) + */ + public void reapplyChangesFromDictionary(NSDictionary aDeltaSnapshot) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns a snapshot of the current state of this object. All property keys are + * mapped to their values; nulls are represented by NSNull. + */ + public NSDictionary snapshot() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns a List of the to-many relationship keys for this object. This + * implementation calls to the class description. + */ + public NSArray toManyRelationshipKeys() { + return classDescription().toManyRelationshipKeys(); + } + + /** + * Returns a List of the to-one relationship keys for this object. This + * implementation calls to the class description. + */ + public NSArray toOneRelationshipKeys() { + return classDescription().toOneRelationshipKeys(); + } + + /** + * Applies the specified snapshot to this object, converting NSNulls to null and + * calling takeStoredValueForKey for each key in the Map. + */ + public void updateFromSnapshot(NSDictionary aSnapshot) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns a short, stateful string representation of this object. This + * implementation calls to the class description. + */ + public String userPresentableDescription() { + return classDescription().userPresentableDescriptionForObject(this); + } + + /** + * This method should be called by each setter method on this object before + * changes are made to the object's internal state. This implementation calls + * EOObserverCenter.notifyObserversObjectWillChange( this ), + */ + public void willChange() { + EOObserverCenter.notifyObserversObjectWillChange(this); + } + + // interface EOKeyValueCoding + + /** + * Returns the value for the specified property. If the property does not exist, + * this method should call handleQueryWithUnboundKey. + */ + public Object valueForKey(String aKey) { + return EOKeyValueCodingSupport.valueForKey(this, aKey); + } + + /** + * Sets the property to the specified value. If the property does not exist, + * this method should call handleTakeValueForUnboundKey. If the property is of a + * type that cannot allow null (e.g. primitive types) and aValue is null, this + * method should call unableToSetNullForKey. + */ + public void takeValueForKey(Object aValue, String aKey) { + EOKeyValueCodingSupport.takeValueForKey(this, aValue, aKey); + } + + /** + * Returns the value for the private field that corresponds to the specified + * property. + */ + public Object storedValueForKey(String aKey) { + return EOKeyValueCodingSupport.storedValueForKey(this, aKey); + } + + /** + * Sets the the private field that corresponds to the specified property to the + * specified value. + */ + public void takeStoredValueForKey(Object aValue, String aKey) { + EOKeyValueCodingSupport.takeStoredValueForKey(this, aValue, aKey); + } + + /** + * Called by valueForKey when the specified key is not found on this object. + * Implementing classes should handle the specified value or otherwise throw an + * exception. + */ + public Object handleQueryWithUnboundKey(String aKey) { + return EOKeyValueCodingSupport.handleQueryWithUnboundKey(this, aKey); + } + + /** + * Called by takeValueForKey when the specified key is not found on this object. + * Implementing classes should handle the specified value or otherwise throw an + * exception. + */ + public void handleTakeValueForUnboundKey(Object aValue, String aKey) { + EOKeyValueCodingSupport.handleTakeValueForUnboundKey(this, aValue, aKey); + } + + /** + * Called by takeValueForKey when the type of the specified key is not allowed + * to be null, as is the case with primitive types. Implementing classes should + * handle this case appropriately or otherwise throw an exception. + */ + public void unableToSetNullForKey(String aKey) { + EOKeyValueCodingSupport.unableToSetNullForKey(this, aKey); + } + + // interface EOKeyValueCodingAdditions + + /** + * Returns the value for the specified key path, which is a series of keys + * delimited by ".", for example: "createTime.year.length". + */ + public Object valueForKeyPath(String aKeyPath) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Sets the value for the specified key path, which is a series of keys + * delimited by ".", for example: "createTime.year.length". The value is set for + * the last object referenced by the key path. + */ + public void takeValueForKeyPath(Object aValue, String aKeyPath) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns a Map of the specified keys to their values, each of which might be + * obtained by calling valueForKey. + */ + public NSDictionary valuesForKeys(List aKeyList) { + return KeyValueCodingUtilities.valuesForKeys(this, aKeyList); + } + + /** + * Takes the keys from the specified map as properties and applies the + * corresponding values, each of which might be set by calling takeValueForKey. + */ + public void takeValuesFromDictionary(Map aMap) { + KeyValueCodingUtilities.takeValuesFromDictionary(this, aMap); + } + + // interface EOFaulting + + /** + * Called by EOFaultHandler to prepare the object to be turned into a fault. + */ + public void clearFault() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns this object's EOFaultHandler. + */ + public EOFaultHandler faultHandler() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Returns whether this object is currently a fault. Returns true if this object + * has not yet retrieved any values. + */ + public boolean isFault() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Turns this object into a fault using the specified fault handler. + */ + public void turnIntoFault(EOFaultHandler aFaultHandler) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Called to completely fire the fault, reading all attributes. This method may + * be implemented to call willRead(null). + */ + public void willRead() { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Called to fire the fault for the specified key. The fault manager is required + * to populate the specified key with a value, and may populate any or all of + * the other values on this object. A null key will populate all values on the + * object. NOTE: This method is not part of the specification. + */ + public void willRead(String aKey) { + throw new WotonomyException("Not implemented yet."); + } + + // interface EODeferredFaulting + + /** + * Returns a fault for the specified deferred fault. + */ + public Object willReadRelationship(Object anObject) { + throw new WotonomyException("Not implemented yet."); + } + + // interface EORelationshipManipulation + + /** + * Adds the specified object to the relationship on this object specified by the + * key. For to-one relationships, this operation is the same as valueForKey. + */ + public void addObjectToPropertyWithKey(Object anObject, String aKey) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * Removes the specified object from the relationship on this object specified + * by the key. For to-one relationships, this operation is the same as + * takeValueForKey with a null value. + */ + public void removeObjectFromPropertyWithKey(Object anObject, String aKey) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * As addObjectToProperty with key, but also performs the reciprocal operation + * on the other side of the relationship. + */ + public void addObjectToBothSidesOfRelationshipWithKey(EORelationshipManipulation anObject, String aKey) { + throw new WotonomyException("Not implemented yet."); + } + + /** + * As removeObjectFromPropertyWithKey with key, but also performs the reciprocal + * operation on the other side of the relationship. + */ + public void removeObjectFromBothSidesOfRelationshipWithKey(EORelationshipManipulation anObject, String aKey) { + throw new WotonomyException("Not implemented yet."); + } + + // interface EOValidation + + /** + * Validates this object for delete. Throws an exception if this object cannot + * be deleted. This implementation calls to the class description. + */ + public void validateForDelete() { + classDescription().validateObjectForDelete(this); + } + + /** + * Validates this object for insertion into the external store. Throws an + * exception if this object cannot be inserted. Validations here should be + * specific to insertion. This implementation calls validateForSave(). + */ + public void validateForInsert() { + validateForSave(); + } + + /** + * Validates this object for a commit to the external store. Throws an exception + * if this object cannot be committed. Validations here are not specific to + * either inserts or updates. This implementation calls to the class + * description. + */ + public void validateForSave() { + classDescription().validateObjectForSave(this); + } + + /** + * Validates this object for update to the external store. Throws an exception + * if this object cannot be updated. Validations here should be specific to + * updates. This implementation calls validateForSave(). + */ + public void validateForUpdate() { + validateForSave(); + } } /* - * $Log$ - * Revision 1.2 2006/02/16 16:47:14 cgruber - * Move some classes in to "internal" packages and re-work imports, etc. + * $Log$ Revision 1.2 2006/02/16 16:47:14 cgruber Move some classes in to + * "internal" packages and re-work imports, etc. * - * Also use UnsupportedOperationExceptions where appropriate, instead of WotonomyExceptions. + * Also use UnsupportedOperationExceptions where appropriate, instead of + * WotonomyExceptions. * - * Revision 1.1 2006/02/16 13:19:57 cgruber - * Check in all sources in eclipse-friendly maven-enabled packages. + * Revision 1.1 2006/02/16 13:19:57 cgruber Check in all sources in + * eclipse-friendly maven-enabled packages. * - * Revision 1.3 2001/12/06 16:42:29 mpowers - * Added appropriate constructor. + * Revision 1.3 2001/12/06 16:42:29 mpowers Added appropriate constructor. * - * Revision 1.2 2001/11/24 17:37:29 mpowers - * Implemented static methods. + * Revision 1.2 2001/11/24 17:37:29 mpowers Implemented static methods. * - * Revision 1.1 2001/11/17 17:18:15 mpowers - * Initial implementation of EOCustomObject. + * Revision 1.1 2001/11/17 17:18:15 mpowers Initial implementation of + * EOCustomObject. * * */ - - |
