diff options
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.java | 71 |
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(); |
