summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOModelGroup.java
diff options
context:
space:
mode:
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOModelGroup.java')
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOModelGroup.java198
1 files changed, 198 insertions, 0 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOModelGroup.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOModelGroup.java
new file mode 100644
index 0000000..dbab09d
--- /dev/null
+++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOModelGroup.java
@@ -0,0 +1,198 @@
+/*
+ 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<ents.count(); i++) {
+ EOEntity e = (EOEntity)ents.objectAtIndex(i);
+ //this loads all the fetch specifications
+ e.fetchSpecificationNamed("whatever");
+ }
+ }
+ }
+
+ public static void setModelGroupForObjectStoreCoordinator(EOObjectStoreCoordinator coord, EOModelGroup group) {
+ NSMutableDictionary d = new NSMutableDictionary(coord.userInfo());
+ d.setObjectForKey(group, "ModelGroup");
+ coord.setUserInfo(d);
+ }
+ public static EOModelGroup modelGroupForObjectStoreCoordinator(EOObjectStoreCoordinator coord) {
+ NSDictionary d = coord.userInfo();
+ if (d == null)
+ return defaultGroup();
+ Object g = d.objectForKey("ModelGroup");
+ if (g != null && g instanceof EOModelGroup)
+ return (EOModelGroup)g;
+ return defaultGroup();
+ }
+
+}
+/*
+ * $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.4 2005/05/11 15:21:53 cgruber
+ * Change enum to enumeration, since enum is now a keyword as of Java 5.0
+ *
+ * A few other comments in the code.
+ *
+ * Revision 1.3 2003/08/08 00:44:04 chochos
+ * manage model groups for object store coordinators.
+ *
+ * Revision 1.2 2003/08/08 00:36:41 chochos
+ * add a little more functionality
+ *
+ * Revision 1.1 2003/08/07 02:42:28 chochos
+ * EOModel can read an .eomodeld file. EOModelGroup doesn't do much for now.
+ *
+*/ \ No newline at end of file