summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java
diff options
context:
space:
mode:
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java')
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java71
1 files changed, 61 insertions, 10 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java
index 6ee58a5..9cf6721 100644
--- a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java
+++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java
@@ -42,40 +42,57 @@ import net.wotonomy.foundation.NSMutableArray;
import net.wotonomy.foundation.NSMutableDictionary;
/**
- *
+ * Represents an EOObjectStore that connects to an EODatabase
* @author ezamudio@nasoft.com
* @author $Author: cgruber $
* @version $Revision: 894 $
*/
public class EODatabaseContext extends EOCooperatingObjectStore implements NSLocking {
- private static Class _contextClass;
+ private static Class<? extends EODatabaseContext> _contextClass;
protected EODatabase _database;
protected EOAdaptorContext _context;
protected NSMutableArray _channels = new NSMutableArray();
protected NSMutableArray _lockedObjects = new NSMutableArray();
- protected NSMutableDictionary _simpleSnaps;
+ protected NSMutableDictionary<EOGlobalID, NSDictionary> _simpleSnaps;
protected NSMutableDictionary _manySnaps;
protected EOObjectStoreCoordinator _coordinator;
protected EOEditingContext _currEC;
protected int _updateStrategy;
+ /**
+ * Create an EODatabaseContext backed by the given EODatabase
+ *
+ * @param database The database
+ */
public EODatabaseContext(EODatabase database) {
super();
_database = database;
_context = _database.adaptor().createAdaptorContext();
}
+ /**
+ * Retrieve the EOAdaptorContext for this context
+ * @return The EOAdaptorContext
+ */
public EOAdaptorContext adaptorContext() {
return _context;
}
+ /**
+ * Retrieve the EODatabase for this context
+ * @return The EODatabase for this context
+ */
public EODatabase database() {
return _database;
}
+ /**
+ * Retrieve an available EODatabaseChannel for this context
+ * @return An available EODatabaseChannel
+ */
public EODatabaseChannel availableChannel() {
for (int i = 0; i < _channels.count(); i++) {
EODatabaseChannel c = (EODatabaseChannel) _channels.objectAtIndex(i);
@@ -88,13 +105,22 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
}
public void batchFetchRelationship(EORelationship rel, NSArray arr, EOEditingContext ec) {
+ // TODO should this do something?
}
- public static void setContextClassToRegister(Class contextClass) {
+ /**
+ * Set the context class
+ * @param contextClass The context class
+ */
+ public static void setContextClassToRegister(Class<? extends EODatabaseContext> contextClass) {
_contextClass = contextClass;
}
- public static Class contextClassToRegister() {
+ /**
+ * Retrieve the context class
+ * @return
+ */
+ public static Class<? extends EODatabaseContext> contextClassToRegister() {
if (_contextClass == null)
_contextClass = EODatabaseContext.class;
return _contextClass;
@@ -104,12 +130,14 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
return _coordinator;
}
+ @Override
public void editingContextDidForgetObjectWithGlobalID(EOEditingContext ec, EOGlobalID gid) {
database().decrementSnapshotCountForGlobalID(gid);
}
public void handleDroppedConnection() {
// TODO: unregister channels
+
adaptorContext().handleDroppedConnection();
}
@@ -119,6 +147,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see net.wotonomy.control.EOCooperatingObjectStore#ownsGlobalID(net.wotonomy.
* control.EOGlobalID)
*/
+ @Override
public boolean ownsGlobalID(EOGlobalID gid) {
if (!(gid instanceof EOKeyGlobalID))
return false;
@@ -132,6 +161,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOCooperatingObjectStore#ownsObject(net.wotonomy.control
* .EOEnterpriseObject)
*/
+ @Override
public boolean ownsObject(EOEnterpriseObject eo) {
if (eo.entityName() == null)
return false;
@@ -145,6 +175,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOCooperatingObjectStore#handlesFetchSpecification(net.
* wotonomy.control.EOFetchSpecification)
*/
+ @Override
public boolean handlesFetchSpecification(EOFetchSpecification fspec) {
String ename = fspec.entityName();
return (database().entityNamed(ename) != null);
@@ -162,6 +193,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStoreCoordinator,
* net.wotonomy.control.EOEditingContext)
*/
+ @Override
public void prepareForSaveWithCoordinator(EOObjectStoreCoordinator coord, EOEditingContext ec) {
// TODO Auto-generated method stub
_coordinator = coord;
@@ -174,6 +206,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see
* net.wotonomy.control.EOCooperatingObjectStore#recordChangesInEditingContext()
*/
+ @Override
public void recordChangesInEditingContext() {
// TODO insert, delete, update
}
@@ -184,6 +217,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see net.wotonomy.control.EOCooperatingObjectStore#recordUpdateForObject(net.
* wotonomy.control.EOEnterpriseObject, net.wotonomy.foundation.NSDictionary)
*/
+ @Override
public void recordUpdateForObject(EOEnterpriseObject eo, NSDictionary changes) {
// TODO Auto-generated method stub
}
@@ -205,7 +239,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
d.setObjectForKey(gids, relationName);
}
- public void recordSnapshots(NSDictionary snaps) {
+ public void recordSnapshots(NSDictionary<EOGlobalID, NSDictionary> snaps) {
if (_simpleSnaps == null)
throw new IllegalArgumentException("Attempt to record snapshots without a transaction in progress.");
_simpleSnaps.addEntriesFromDictionary(snaps);
@@ -220,7 +254,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
public void recordToManySnapshots(NSDictionary snaps) {
if (_manySnaps == null)
throw new IllegalArgumentException("Attempt to record snapshots without a transaction in progress.");
- Enumeration enumeration = snaps.keyEnumerator();
+ Enumeration<Object> enumeration = snaps.keyEnumerator();
while (enumeration.hasMoreElements()) {
Object key = enumeration.nextElement();
NSDictionary d = (NSDictionary) snaps.objectForKey(key);
@@ -239,9 +273,9 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
*
* @see net.wotonomy.control.EOCooperatingObjectStore#performChanges()
*/
+ @Override
public void performChanges() {
// TODO Auto-generated method stub
-
}
/*
@@ -249,6 +283,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
*
* @see net.wotonomy.control.EOCooperatingObjectStore#commitChanges()
*/
+ @Override
public void commitChanges() {
adaptorContext().commitTransaction();
}
@@ -258,6 +293,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
*
* @see net.wotonomy.control.EOCooperatingObjectStore#rollbackChanges()
*/
+ @Override
public void rollbackChanges() {
adaptorContext().rollbackTransaction();
}
@@ -269,6 +305,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOCooperatingObjectStore#valuesForKeys(net.wotonomy.
* foundation.NSArray, net.wotonomy.control.EOEnterpriseObject)
*/
+ @Override
public NSDictionary valuesForKeys(NSArray keys, EOEnterpriseObject eo) {
// TODO check snapshots; eo could be a fault
return eo.valuesForKeys(keys);
@@ -279,6 +316,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
*
* @see net.wotonomy.foundation.NSLocking#lock()
*/
+ @Override
public void lock() {
EOAccessLock.lock();
}
@@ -288,6 +326,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
*
* @see net.wotonomy.foundation.NSLocking#unlock()
*/
+ @Override
public void unlock() {
EOAccessLock.unlock();
}
@@ -299,6 +338,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#arrayFaultWithSourceGlobalID(net.wotonomy.
* control.EOGlobalID, java.lang.String, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public NSArray arrayFaultWithSourceGlobalID(EOGlobalID gid, String relName, EOEditingContext ec) {
if (!(gid instanceof EOKeyGlobalID))
throw new IllegalArgumentException("an EOKeyGlobalID is needed.");
@@ -313,6 +353,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#faultForGlobalID(net.wotonomy.control.
* EOGlobalID, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public /* EOEnterpriseObject */Object faultForGlobalID(EOGlobalID gid, EOEditingContext ec) {
if (!(gid instanceof EOKeyGlobalID))
throw new IllegalArgumentException("Cannot fault an object that doesn't have a key global ID.");
@@ -329,6 +370,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see net.wotonomy.control.EOObjectStore#faultForRawRow(java.util.Map,
* java.lang.String, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public /* EOEnterpriseObject */ Object faultForRawRow(Map row, String entityName, EOEditingContext ec) {
EOEntity e = database().entityNamed(entityName);
EOGlobalID gid = e.globalIDForRow(row);
@@ -342,9 +384,9 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
_manySnaps.removeObjectForKey(gid);
}
- public void forgetSnapshotsForGlobalIDs(List gids) {
+ public void forgetSnapshotsForGlobalIDs(List<EOGlobalID> gids) {
for (int i = 0; i < gids.size(); i++) {
- EOGlobalID g = (EOGlobalID) gids.get(i);
+ EOGlobalID g = gids.get(i);
forgetSnapshotForGlobalID(g);
database().forgetSnapshotForGlobalID(g);
}
@@ -356,6 +398,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see net.wotonomy.control.EOObjectStore#initializeObject(java.lang.Object,
* net.wotonomy.control.EOGlobalID, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public void initializeObject(/* EOEnterpriseObject */Object eo, EOGlobalID gid, EOEditingContext ec) {
if (gid.isTemporary())
return;
@@ -398,6 +441,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
*
* @see net.wotonomy.control.EOObjectStore#invalidateAllObjects()
*/
+ @Override
public void invalidateAllObjects() {
invalidateObjectsWithGlobalIDs(database().snapshots().allKeys());
}
@@ -409,6 +453,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#invalidateObjectsWithGlobalIDs(java.util.
* List)
*/
+ @Override
public void invalidateObjectsWithGlobalIDs(List aList) {
forgetSnapshotsForGlobalIDs(aList);
}
@@ -420,6 +465,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#isObjectLockedWithGlobalID(net.wotonomy.
* control.EOGlobalID, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public boolean isObjectLockedWithGlobalID(EOGlobalID gid, EOEditingContext ec) {
return isObjectLockedWithGlobalID(gid);
}
@@ -434,6 +480,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see net.wotonomy.control.EOObjectStore#lockObjectWithGlobalID(net.wotonomy.
* control.EOGlobalID, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public void lockObjectWithGlobalID(EOGlobalID gid, EOEditingContext ec) {
NSDictionary snap = snapshotForGlobalID(gid);
if (snap == null)
@@ -456,6 +503,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#objectsForSourceGlobalID(net.wotonomy.
* control.EOGlobalID, java.lang.String, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public NSArray objectsForSourceGlobalID(EOGlobalID gid, String relationName, EOEditingContext ec) {
EOEnterpriseObject eo = (EOEnterpriseObject) ec.objectForGlobalID(gid);
if (eo == null)
@@ -515,6 +563,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#objectsWithFetchSpecification(net.wotonomy
* .control.EOFetchSpecification, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public NSArray objectsWithFetchSpecification(EOFetchSpecification fspec, EOEditingContext ec) {
EODatabaseChannel channel = availableChannel();
channel.selectObjectsWithFetchSpecification(fspec, ec);
@@ -534,6 +583,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* @see net.wotonomy.control.EOObjectStore#refaultObject(java.lang.Object,
* net.wotonomy.control.EOGlobalID, net.wotonomy.control.EOEditingContext)
*/
+ @Override
public void refaultObject(Object obj, EOGlobalID gid, EOEditingContext ec) {
if (!(gid instanceof EOKeyGlobalID))
throw new IllegalArgumentException("GlobalID must be an EOKeyGlobalID");
@@ -551,6 +601,7 @@ public class EODatabaseContext extends EOCooperatingObjectStore implements NSLoc
* net.wotonomy.control.EOObjectStore#saveChangesInEditingContext(net.wotonomy.
* control.EOEditingContext)
*/
+ @Override
public void saveChangesInEditingContext(EOEditingContext ec) {
prepareForSaveWithCoordinator(null, ec);
recordChangesInEditingContext();