/* Wotonomy: OpenStep design patterns for pure Java applications. Copyright (C) 2001 Intersect Software Corporation 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.NSMutableDictionary; import net.wotonomy.foundation.NSNull; /** * EOGenericRecord extends EOCustomObject to provide a general-purpose * implementation, relying entirely on the class description for entity-specific * behavior, and storing data in a dictionary. * * @author michael@mpowers.net * @author $Author: cgruber $ * @version $Revision: 894 $ */ public class EOGenericRecord extends EOCustomObject { private EOClassDescription classDescription; private NSMutableDictionary dataDictionary; /** * Default constructor. */ protected EOGenericRecord() { classDescription = null; dataDictionary = new NSMutableDictionary(); } /** * Preferred constructor. */ public EOGenericRecord(EOClassDescription aDescription) { this(); classDescription = aDescription; } /** * Overridden to return true so that deferred faults are used. */ public static boolean usesDeferredFaultCreation() { return true; } /** * Compatibility constructor: aContext and anID are ignored. */ public EOGenericRecord(EOEditingContext aContext, EOClassDescription aDescription, EOGlobalID anID) { this(aDescription); } /** * Returns a class description for this object. Overridden to return the class * description passed into the constructor. */ public EOClassDescription classDescription() { return classDescription; } // interface EOKeyValueCoding /** * Calls storedValueForKey. */ public Object valueForKey(String aKey) { return storedValueForKey(aKey); } /** * Calls willChange and then calls takeStoredValueForKey. */ public void takeValueForKey(Object aValue, String aKey) { willChange(); takeStoredValueForKey(aValue, aKey); } /** * Calls willRead for the specified key, and returns the corresponding value * from the data dictionary. Keys that do not exist will return null. */ public Object storedValueForKey(String aKey) { willRead(aKey); Object result = dataDictionary.objectForKey(aKey); if (NSNull.nullValue().equals(result)) result = null; return result; } /** * Writes the specified value into the data dictionary for the specified key. * Nulls are stored as NSNulls in the dictionary. No checking is performed to * determine whether the key is a valid attribute key. */ public void takeStoredValueForKey(Object aValue, String aKey) { if (aValue == null) aValue = NSNull.nullValue(); dataDictionary.setObjectForKey(aValue, aKey); } } /* * $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.2 2003/08/06 23:07:52 chochos general code cleanup (mostly, * removing unused imports) * * Revision 1.1 2001/11/18 18:57:10 mpowers Implemented EOGenericRecord. * * */