/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2001 Michael Powers This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, see http://www.gnu.org */ package net.wotonomy.control; import net.wotonomy.foundation.NSArray; import net.wotonomy.foundation.NSDictionary; /** * EOEnterpriseObject defines the required methods a data object must implement * to take full advantage of the control package. * * @author michael@mpowers.net * @author $Author: cgruber $ * @version $Revision: 894 $ */ public interface EOEnterpriseObject extends EOKeyValueCodingAdditions, EORelationshipManipulation, EODeferredFaulting, EOValidation { /** * Returns a List of all property keys defined on this object. This includes * both attributes and relationships. */ NSArray allPropertyKeys(); /** * Returns a list of all attributes defined on this object. Attributes are all * properties that are not relationships. */ NSArray attributeKeys(); // void awakeFromClientUpdate(EOEditingContext aContext) /** * Called when the object has first been fetched into the specified editing * context. */ void awakeFromFetch(EOEditingContext anEditingContext); /** * Called when the object has been inserted into the specified editing context. */ void awakeFromInsertion(EOEditingContext 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. */ NSDictionary changesFromSnapshot(NSDictionary snapshot); /** * Returns a class description for this object. */ EOClassDescription classDescription(); /** * Returns a class description for the object at the other end of the specified * relationship key. */ EOClassDescription classDescriptionForDestinationKey(String 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. */ void clearProperties(); /** * Returns the delete rule constant defined on EOClassDescription for the * relationship defined by the specified key. */ int deleteRuleForRelationshipKey(String aRelationshipKey); /** * Returns the editing context in which this object is registered. */ EOEditingContext editingContext(); /** * Returns the name of the entity that this object represents. */ String entityName(); /** * Returns a String containing all property keys and values for this object. * Relationships should be represented by calling eoShallowDescription() on the * object. */ String eoDescription(); /** * Returns a String containing all attribute keys and values for this object. * Relationships are not included. */ String eoShallowDescription(); /** * Returns the key used to reference this object on the object at the other end * of the specified relationship. */ String inverseForRelationshipKey(String aRelationshipKey); // Object invokeRemoteMethod( // String aMethodName, Class[] aTypeArray Object[] anArgumentArray) /** * Returns whether the specified relationship key represents a to-many * relationship. */ boolean isToManyKey(String aKey); /** * Returns whether the objects at the other end of the specified relationship * should be deleted when this object is deleted. */ boolean ownsDestinationObjectsForRelationshipKey(String 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. */ void propagateDeleteWithEditingContext(EOEditingContext aContext); /** * Applies the changes from the specified snapshot to this object. * * @see #changesFromSnapshot(NSDictionary) */ void reapplyChangesFromDictionary(NSDictionary aDeltaSnapshot); /** * Returns a snapshot of the current state of this object. All property keys are * mapped to their values; nulls are represented by NSNull. */ NSDictionary snapshot(); /** * Returns a List of the to-many relationship keys for this object. */ NSArray toManyRelationshipKeys(); /** * Returns a List of the to-one relationship keys for this object. */ NSArray toOneRelationshipKeys(); /** * Applies the specified snapshot to this object, converting NSNulls to null and * calling takeStoredValueForKey for each key in the Map. */ void updateFromSnapshot(NSDictionary aSnapshot); /** * Returns a short, stateful string representation of this object. */ String userPresentableDescription(); /** * This method should be implemented to call EOObserverCenter.objectWillChange( * this ), and it should be called by each setter method on this object before * changes are made to the object's internal state. */ void willChange(); } /* * $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. * * Revision 1.1 2006/02/16 13:19:57 cgruber Check in all sources in * eclipse-friendly maven-enabled packages. * * Revision 1.1 2001/11/13 04:13:59 mpowers Added interfaces needed to begin * work on EOCustomObject. * * */