/* 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.access; import net.wotonomy.control.EOFetchSpecification; import net.wotonomy.control.EOObjectStoreCoordinator; import net.wotonomy.foundation.NSArray; import net.wotonomy.foundation.NSDictionary; import net.wotonomy.foundation.NSMutableDictionary; /** * A group of models that connect to the same database. Entities in * these models can have relationships that point to other entities * in any model of the same group. * * @author ezamudio@nasoft.com * @author $Author: cgruber $ * @version $Revision: 894 $ */ public class EOModelGroup { private static EOModelGroup _defaultGroup; private static EOModelGroup _globalGroup; protected NSMutableDictionary _models; public EOModelGroup() { super(); } public void addModel(EOModel model) { if (model.name() == null) throw new IllegalArgumentException("Cannot add an unnamed model to a group."); if (_models.objectForKey(model.name()) != null) throw new IllegalArgumentException("Cannot add model " + model.name() + " to group because it already contains a model with the same name."); NSArray ents = model.entityNames(); for (int i = 0; i < ents.count(); i++) { String ename = (String)ents.objectAtIndex(i); if (entityNamed(ename) != null) throw new IllegalArgumentException("Cannot add model " + model.name() + " to group because it contains entity named " + ename); } _models.setObjectForKey(model, model.name()); } public void removeModel(EOModel model) { _models.removeObjectForKey(model.name()); } public void addModelWithPath(String path) { EOModel model = new EOModel(path); addModel(model); } public void addModelsFromDirectory(String dir) { } public static void setDefaultGroup(EOModelGroup group) { _defaultGroup = group; } public static EOModelGroup defaultGroup() { if (_defaultGroup == null) { _defaultGroup = globalModelGroup(); } return _defaultGroup; } public static EOModelGroup globalModelGroup() { if (_globalGroup == null) { _globalGroup = new EOModelGroup(); //TODO: read all frameworks and get models from them } return _globalGroup; } public EOEntity entityForObject(net.wotonomy.control.EOEnterpriseObject eo) { return null; } public EOEntity entityNamed(String name) { java.util.Enumeration enumeration = _models.objectEnumerator(); while (enumeration.hasMoreElements()) { EOModel m = (EOModel)enumeration.nextElement(); if (m.entityNamed(name) != null) return m.entityNamed(name); } return null; } public EOModel modelNamed(String name) { return (EOModel)_models.objectForKey(name); } public NSArray modelNames() { return _models.allKeys(); } public NSArray models() { return _models.allValues(); } public EOModel modelWithPath(String path) { java.util.Enumeration enumeration = _models.objectEnumerator(); while (enumeration.hasMoreElements()) { EOModel m = (EOModel)enumeration.nextElement(); if (m.path() != null && m.path().equals(path)) return m; } return null; } public EOStoredProcedure storedProcedureNamed(String name) { java.util.Enumeration enumeration = _models.objectEnumerator(); while (enumeration.hasMoreElements()) { EOModel m = (EOModel)enumeration.nextElement(); if (m.storedProcedureNamed(name) != null) return m.storedProcedureNamed(name); } return null; } public EOFetchSpecification fetchSpecificationNamed(String fetchSpecName, String entityName) { EOEntity e = entityNamed(entityName); if (e == null) return null; return e.fetchSpecificationNamed(fetchSpecName); } public void loadAllModelObjects() { java.util.Enumeration enumeration = _models.objectEnumerator(); while (enumeration.hasMoreElements()) { EOModel m = (EOModel)enumeration.nextElement(); //this causes all entities to be loaded NSArray ents = m.entities(); for (int i=0; i