/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2000 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; /** * EODataSource is used by EODisplayGroup.fetch() to retrieve a list of objects * to display. When a display group has a data source, the display group will * use the data source to populate the object list and to create new objects to * be displayed in the list, and will update the data source when objects are * inserted or removed from the list.
*
* * In certain cases, as when a display group needs to populate a child display * group to show a one-to-many relationship, the display group will call * dataSourceQualifiedByKey to return a new data source that can vend objects * associated with the specified key and then call qualifyWithRelationshipKey to * specify the object and key that are the source of the child relationship. *
*
* * Concrete subclasses are expected to override fetch() and are required to * override insertObject and removeObject. * * @author michael@mpowers.net * @author $Author: cgruber $ * @version $Revision: 894 $ */ public abstract class EODataSource { /** * Creates a new object. You should call insertObject() to insert the new object * into this data source. This implementation attempts to create a new instance * of the class returned by classDescriptionForObjects(). Override to return an * object specific to your implementation. * * @return The newly created object, or null if new objects are not supported by * this data source. * @see #classDescriptionForObjects */ public Object createObject() { Object result = null; EOClassDescription c = classDescriptionForObjects(); if (c != null) { result = c.createInstanceWithEditingContext(editingContext(), null); } return result; } /** * Inserts the specified object into this data source. */ public abstract void insertObject(Object anObject); /** * Deletes the specified object from this data source. */ public abstract void deleteObject(Object anObject); /** * Returns the editing context for this data source, or null if no editing * context is used. This implementation returns null. */ public EOEditingContext editingContext() { return null; } /** * Returns a List containing the objects in this data source. This * implementation returns null. */ public NSArray fetchObjects() { return null; } /** * Returns a data source that is capable of manipulating objects of the type * returned by applying the specified key to objects vended by this data source. * * @see #qualifyWithRelationshipKey */ public abstract EODataSource dataSourceQualifiedByKey(String aKey); /** * Restricts this data source to vend those objects that are associated with the * specified key on the specified object. */ public abstract void qualifyWithRelationshipKey(String aKey, Object anObject); /** * Returns the description of the class of the objects that is vended by this * data source, or null if this cannot be determined. This implementation * returns null. */ public EOClassDescription classDescriptionForObjects() { return null; } } /* * $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.5 2001/05/21 14:02:44 mpowers Corrected javadoc. * * Revision 1.4 2001/04/27 23:37:20 mpowers Now using EOClassDescription in the * EODataSource class, as we should. * * Revision 1.3 2001/02/27 23:11:07 mpowers Removed object registration from * createObject(). * * Revision 1.2 2001/02/16 18:34:19 mpowers Implementing nested contexts. * * Revision 1.1.1.1 2000/12/21 15:46:38 mpowers Contributing wotonomy. * * Revision 1.3 2000/12/20 16:25:34 michael Added log to all files. * * */