/* 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.access; import net.wotonomy.control.EOClassDescription; import net.wotonomy.control.EOEditingContext; import net.wotonomy.control.EOFetchSpecification; import net.wotonomy.control.EOGenericRecord; import net.wotonomy.control.EOGlobalID; import net.wotonomy.foundation.NSArray; import net.wotonomy.foundation.NSMutableArray; /** * @author ezamudio@nasoft.com * @author $Author: cgruber $ * @version $Revision: 894 $ */ public class EOEntityClassDescription extends EOClassDescription { protected EOEntity _entity; public EOEntityClassDescription() { super(); } public EOEntityClassDescription(EOEntity entity) { this(); _entity = entity; } public NSArray allAttributeKeys() { NSArray arr = entity().attributes(); NSMutableArray a = new NSMutableArray(arr.count()); for (int i = 0; i < arr.count(); i++) { EOAttribute atrib = (EOAttribute) arr.objectAtIndex(i); a.addObject(atrib); } return a; } public NSArray allPropertyKeys() { return entity().classPropertyNames(); } public NSArray allToManyRelationshipKeys() { NSArray arr = entity().relationships(); NSMutableArray a = new NSMutableArray(arr.count()); for (int i = 0; i < arr.count(); i++) { EORelationship r = (EORelationship) arr.objectAtIndex(i); if (r.isToMany()) a.addObject(r); } return a; } public NSArray allToOneRelationshipKeys() { NSArray arr = entity().relationships(); NSMutableArray a = new NSMutableArray(arr.count()); for (int i = 0; i < arr.count(); i++) { EORelationship r = (EORelationship) arr.objectAtIndex(i); if (!r.isToMany()) a.addObject(r); } return a; } /** * Returns all attributes that correspond to columns in a database table. */ public NSArray attributeKeys() { NSArray arr = entity().attributes(); NSMutableArray a = new NSMutableArray(arr.count()); for (int i = 0; i < arr.count(); i++) { EOAttribute atrib = (EOAttribute) arr.objectAtIndex(i); if (!atrib.isDerived()) a.addObject(atrib); } return a; } public EOClassDescription classDescriptionForDestinationKey(String key) { EORelationship r = entity().relationshipNamed(key); if (r == null) return null; return r.destinationEntity().classDescriptionForInstances(); } public NSArray clientAttributeKeys() { return null; } public NSArray clientToManyRelationshipKeys() { return null; } public NSArray clientToOneRelationshipKeys() { return null; } public EOEntity entity() { return _entity; } public String entityName() { return _entity.name(); } public EOFetchSpecification fetchSpecificationNamed(String name) { return entity().fetchSpecificationNamed(name); } public NSArray toManyRelationshipKeys() { NSArray arr = entity().relationships(); NSMutableArray a = new NSMutableArray(arr.count()); for (int i = 0; i < arr.count(); i++) { EORelationship r = (EORelationship) arr.objectAtIndex(i); if (r.isToMany() && !r.isFlattened()) a.addObject(r); } return a; } public NSArray toOneRelationshipKeys() { NSArray arr = entity().relationships(); NSMutableArray a = new NSMutableArray(arr.count()); for (int i = 0; i < arr.count(); i++) { EORelationship r = (EORelationship) arr.objectAtIndex(i); if (!r.isToMany() && !r.isFlattened()) a.addObject(r); } return a; } public Object createInstanceWithEditingContext(EOEditingContext ec, EOGlobalID gid) { if (theClass == null) { try { theClass = Class.forName(entity().className()); } catch (ClassNotFoundException ex) { if (entity().className().equals("net.wotonomy.control.EOGenericRecord")) throw new IllegalArgumentException("Cannot find class " + entity().className()); theClass = EOGenericRecord.class; } } return super.createInstanceWithEditingContext(ec, gid); } } /* * $Log$ Revision 1.2 2006/02/16 16:47:13 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.4 2003/08/19 01:55:54 chochos the behavior is now more consistent * with its Apple counterpart. * * Revision 1.3 2003/08/09 01:40:31 chochos use EOClassDescription's methods to * get a destination entity's class description. * * Revision 1.2 2003/08/08 05:51:59 chochos createInstanceWithEditingContext now * works. It sets theClass with the class from the entity className() before * calling super. * * Revision 1.1 2003/08/08 00:36:19 chochos concrete implementation of * EOClassDescription that uses an EOEntity * */