summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2024-05-19 17:56:33 -0400
committerBenjamin Culkin <scorpress@gmail.com>2024-05-19 17:56:33 -0400
commitaedc34d55462a75e329bbf342251ff6504cd117e (patch)
treebcc8f1f2352582717b484df302aeea6696b8f000 /projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java
Initial import from SVN
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java')
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java320
1 files changed, 320 insertions, 0 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java
new file mode 100644
index 0000000..cd18e36
--- /dev/null
+++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/control/EOObjectStore.java
@@ -0,0 +1,320 @@
+/*
+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 java.util.List;
+import java.util.Map;
+
+import net.wotonomy.foundation.NSArray;
+
+/**
+* EOObjectStore defines an object repository that tracks
+* object creations, deletions, and updates made by
+* EOEditingContexts. <br><br>
+*
+* A concrete implementation would probably write these
+* changes to some kind of persistent storage, like a
+* database. <br><br>
+*
+* EOEditingContext is itself a subclass of EOObjectStore
+* that requires an EOObjectStore parent for committing
+* its changes. This means that EOEditingContexts can
+* use other EOEditingContexts as their parent, but there
+* still must exist an EOObjectStore as the root of the
+* editing graph.
+*
+* @author michael@mpowers.net
+* @author $Author: cgruber $
+* @version $Revision: 894 $
+*/
+public abstract class EOObjectStore
+{
+ /**
+ * Key for the user info of ObjectsChangedInStoreNotifications.
+ * The key should retrieve an array of deleted EOGlobalIDs.
+ */
+ public static final String DeletedKey = "deleted";
+
+ /**
+ * Key for the user info of ObjectsChangedInStoreNotifications.
+ * The key should retrieve an array of inserted EOGlobalIDs.
+ */
+ public static final String InsertedKey = "inserted";
+
+ /**
+ * Key for the user info of ObjectsChangedInStoreNotifications.
+ * The key should retrieve an array of updated EOGlobalIDs.
+ * EOEditingContexts should refault their copies of these objects.
+ */
+ public static final String UpdatedKey = "updated";
+
+ /**
+ * Key for the user info of ObjectsChangedInStoreNotification.
+ * The key should retrieve an array of EOGlobalIDs.
+ */
+ public static final String InvalidatedKey = "invalidated";
+
+ /**
+ * Key for the NSNotification posted when this object store
+ * is asked to invalidate all objects. Object of the notification
+ * will be this object store, and user info will contain the
+ * InvalidatedKey.
+ */
+ public static final String
+ InvalidatedAllObjectsInStoreNotification =
+ "EOInvalidatedAllObjectsInStoreNotification";
+
+ /**
+ * Key for the NSNotification posted when this object store
+ * is changed. Object of the notification will be this object
+ * store, and user info will contain InsertedKey, UpdatedKey,
+ * DeletedKey, and InvalidatedKey.
+ */
+ public static final String
+ ObjectsChangedInStoreNotification =
+ "EOObjectsChangedInStoreNotification";
+
+ /**
+ * Default constructor is responsible for initializing
+ * internal state.
+ */
+ public EOObjectStore ()
+ {
+ }
+
+ /**
+ * Called by editing contexts when they no longer
+ * need to track the specified id. You will not need
+ * to call this method, but you use use it for a hint
+ * that the specified global id is not in use by that
+ * child editing context.
+ */
+ public void editingContextDidForgetObjectWithGlobalID (
+ EOEditingContext aContext,
+ EOGlobalID aGlobalID )
+ {
+ }
+
+ /**
+ * Returns a List of objects associated with the object
+ * with the specified id for the specified property
+ * relationship, or may return a placeholder array that
+ * will defer the fetch until accessed (an array fault).
+ * All objects must be registered the specified editing context.
+ * The specified relationship key must produce a result of
+ * type Collection for the source object or an exception is thrown.
+ */
+ public abstract NSArray arrayFaultWithSourceGlobalID (
+ EOGlobalID aGlobalID,
+ String aRelationship,
+ EOEditingContext aContext );
+
+ /**
+ * Returns the object for the specified id.
+ * The returned object may be a fault.
+ * The object will be registered in the
+ * specified editing context.
+ */
+ public abstract /*EOEnterpriseObject*/ Object faultForGlobalID (
+ EOGlobalID aGlobalID,
+ EOEditingContext aContext );
+
+ /**
+ * Returns a fault representing an object of
+ * the specified entity type with values from
+ * the specified dictionary. The fault should
+ * belong to the specified editing context.
+ */
+ public abstract /*EOEnterpriseObject*/ Object faultForRawRow (
+ Map aDictionary,
+ String anEntityName,
+ EOEditingContext aContext );
+
+ /**
+ * Given a newly instantiated object, this method
+ * initializes its properties to values appropriate
+ * for the specified id. The object should already
+ * belong to the specified editing context.
+ * This method is called to populate faults.
+ */
+ public abstract void initializeObject (
+ /*EOEnterpriseObject*/ Object eo,
+ EOGlobalID aGlobalID,
+ EOEditingContext aContext );
+
+ /**
+ * Remove all values from all objects in memory,
+ * turning them into faults, and posts an NSNotification
+ * that all objects have been invalidated.
+ * The notification should be named with the string
+ * constant InvalidatedAllObjectsInStoreNotification
+ * with this object store as the object and no user info.
+ */
+ public abstract void invalidateAllObjects ();
+
+ /**
+ * Removes values with the specified ids from memory,
+ * turning them into faults, and posts a notification
+ * that those objects have been invalidated.
+ * The notification should be named with the string
+ * constant ObjectsChangedInStoreNotification
+ * with this object store as the object and user info
+ * containing a key named InvalidateKey that returns
+ * a List of the EOGlobalIDs of the invalidated objects.
+ */
+ public abstract void invalidateObjectsWithGlobalIDs (
+ List aList );
+
+ /**
+ * Returns whether the object corresponding to the
+ * specified id is locked. The concept of object
+ * locking is implementation-specific.
+ */
+ public abstract boolean isObjectLockedWithGlobalID (
+ EOGlobalID aGlobalID,
+ EOEditingContext aContext );
+
+ /**
+ * Locks the object corresponding to the
+ * specified id is locked. The concept of object
+ * locking is implementation-specific.
+ * The lock may be released when objects are
+ * invalidated or commited, but this behavior
+ * is not required.
+ */
+ public abstract void lockObjectWithGlobalID (
+ EOGlobalID aGlobalID,
+ EOEditingContext aContext );
+
+ /**
+ * Returns a List of objects associated with the object
+ * with the specified id for the specified property
+ * relationship. This method may not return an array fault
+ * because array faults call this method to fetch on demand.
+ * All objects must be registered the specified editing context.
+ * The specified relationship key must produce a result of
+ * type Collection for the source object or an exception is thrown.
+ */
+ public abstract NSArray objectsForSourceGlobalID (
+ EOGlobalID aGlobalID,
+ String aRelationship,
+ EOEditingContext aContext );
+
+ /**
+ * Returns a List of objects the meet the criteria of
+ * the supplied specification. Faults are not allowed in the array.
+ * Each object is registered with the specified editing context.
+ * If any object is already fetched in the specified context,
+ * it is not refetched and that object should be used in the array.
+ */
+ public abstract NSArray objectsWithFetchSpecification (
+ EOFetchSpecification aFetchSpec,
+ EOEditingContext aContext );
+
+ /**
+ * Removes all values from the specified object,
+ * converting it into a fault for the specified id.
+ * New or deleted objects should not be refaulted.
+ */
+ public abstract void refaultObject (
+ Object anObject,
+ EOGlobalID aGlobalID,
+ EOEditingContext aContext );
+
+ /**
+ * Writes all changes in the specified editing context
+ * to the respository. The object store is expected to
+ * post a notification that should be named with the string
+ * constant ObjectsChangedInStoreNotification
+ * with this object store as the object and user info
+ * containing keys named UpdatedKey, InsertedKey, and
+ * DeletedKey that return Lists of the EOGlobalIDs of the
+ * corresponding objects.
+ */
+ public abstract void saveChangesInEditingContext (
+ EOEditingContext aContext );
+}
+
+/*
+ * $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.15 2003/12/18 15:37:38 mpowers
+ * Changes to retain ability to work with objects that don't necessarily
+ * implement EOEnterpriseObject. I would still like to preserve this case
+ * for general usage, however the access package is free to assume that
+ * those objects will be EOs and cast appropriately.
+ *
+ * Revision 1.14 2003/08/19 01:53:12 chochos
+ * EOObjectStore had some incompatible return types (Object instead of EOEnterpriseObject, in fault methods mostly). It's internally consistent but I hope it doesn't break anything based on this, even though fault methods mostly throw exceptions for now.
+ *
+ * Revision 1.13 2002/02/13 21:20:15 mpowers
+ * Updated comments.
+ *
+ * Revision 1.12 2001/05/05 23:05:42 mpowers
+ * Implemented Array Faults.
+ *
+ * Revision 1.11 2001/02/21 21:17:32 mpowers
+ * Now retaining a reference to the recent changes observer.
+ * Better documented need to retain reference.
+ * Started implementing notifications.
+ *
+ * Revision 1.10 2001/02/16 22:51:29 mpowers
+ * Now deep-cloning objects passed between editing contexts.
+ *
+ * Revision 1.9 2001/02/16 18:34:19 mpowers
+ * Implementing nested contexts.
+ *
+ * Revision 1.8 2001/02/15 21:13:30 mpowers
+ * First draft implementation is complete. Now on to debugging.
+ *
+ * Revision 1.7 2001/02/14 23:03:02 mpowers
+ * A near-complete first draft of EOEditingContext.
+ *
+ * Revision 1.6 2001/02/13 23:24:29 mpowers
+ * Implementing more of editing context.
+ *
+ * Revision 1.5 2001/02/12 20:36:36 mpowers
+ * Documented methods.
+ *
+ * Revision 1.4 2001/02/09 22:09:34 mpowers
+ * Completed implementation of EOObjectStore.
+ *
+ * Revision 1.3 2001/02/06 15:24:11 mpowers
+ * Widened parameters on abstract method to fix build.
+ *
+ * Revision 1.2 2001/02/06 14:57:42 mpowers
+ * Defined abstract methods.
+ *
+ * Revision 1.1.1.1 2000/12/21 15:46:42 mpowers
+ * Contributing wotonomy.
+ *
+ * Revision 1.2 2000/12/20 16:25:35 michael
+ * Added log to all files.
+ *
+ *
+ */
+
+