diff options
| author | Benjamin Culkin <scorpress@gmail.com> | 2024-07-01 17:27:48 -0400 |
|---|---|---|
| committer | Benjamin Culkin <scorpress@gmail.com> | 2024-07-01 17:27:48 -0400 |
| commit | 02bc52037e9ccccca672d6156d9c325c74fe28b3 (patch) | |
| tree | db022b83c90562f461f4a27412caa9936a8dfd04 /projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access | |
| parent | c75d7dbd613a47b217499f7a856c469a8bc59e2a (diff) | |
Update a whole bunch of things
Yeah... not a great commit message. t.b.h, I could maybe've split the
commit into more parts; but that would be quite a lot off effort and
would have a pretty decent chance of at least one of the commits leaving
the repository in a non-working state.
For the future, will want to try and commit more often so there aren't
these mega-commits where it's just "a whole bunch of stuff changed"
Diffstat (limited to 'projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access')
4 files changed, 88 insertions, 34 deletions
diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptor.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptor.java index 17d6454..8624458 100644 --- a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptor.java +++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptor.java @@ -35,10 +35,11 @@ import net.wotonomy.foundation.NSTimestamp; public abstract class EOAdaptor { protected String _name; - protected NSDictionary _connectionDictionary = NSDictionary.EmptyDictionary; - protected NSMutableArray _contexts = new NSMutableArray(); - protected Class _expressionClass; - private static NSMutableDictionary _expressionClassesByName = new NSMutableDictionary(); + @SuppressWarnings("unchecked") + protected NSDictionary<String, Object> _connectionDictionary = (NSDictionary<String, Object>) NSDictionary.EmptyDictionary; + protected NSMutableArray<Object> _contexts = new NSMutableArray<>(); + protected Class<? extends EOSQLExpression> _expressionClass; + private static NSMutableDictionary<String, String> _expressionClassesByName = new NSMutableDictionary<>(); public EOAdaptor(String name) { super(); @@ -75,8 +76,9 @@ public abstract class EOAdaptor { * @param name The name of the adaptor, or a fully qualified class name. * @return */ + @SuppressWarnings("unchecked") public static EOAdaptor adaptorWithName(String name) { - Class adaptorClass = null; + Class<? extends EOAdaptor> adaptorClass = null; String cname = null; if (name.endsWith("Adaptor") && name.indexOf('.') > 0) { cname = name; @@ -88,15 +90,15 @@ public abstract class EOAdaptor { cname = "net.wotonomy." + name.toLowerCase() + "adaptor." + name + "Adaptor"; } try { - adaptorClass = Class.forName(cname); + adaptorClass = (Class<? extends EOAdaptor>) Class.forName(cname); } catch (ClassNotFoundException ex) { throw new IllegalArgumentException("Cannot find class named " + name); } EOAdaptor adaptor = null; - java.lang.reflect.Constructor callme = null; + java.lang.reflect.Constructor<? extends EOAdaptor> callme = null; try { callme = adaptorClass.getConstructor(new Class[] { String.class }); - adaptor = (EOAdaptor) callme.newInstance((Object[]) new String[] { name }); + adaptor = callme.newInstance((Object[]) new String[] { name }); } catch (ClassCastException ex) { throw new IllegalArgumentException( "Class " + adaptorClass.getName() + " must inherit from net.wotonomy.access.EOAdaptor"); @@ -130,13 +132,13 @@ public abstract class EOAdaptor { } public void assignExternalInfoForEntireModel(EOModel model) { - NSArray ents = model.entities(); + NSArray<EOEntity> ents = model.entities(); for (int i = 0; i < ents.count(); i++) { - EOEntity e = (EOEntity) ents.objectAtIndex(i); + EOEntity e = ents.objectAtIndex(i); // TODO: check that entity is not a prototypes entity - NSArray atts = e.attributes(); + NSArray<EOAttribute> atts = e.attributes(); for (int j = 0; j < atts.count(); j++) { - EOAttribute a = (EOAttribute) atts.objectAtIndex(i); + EOAttribute a = atts.objectAtIndex(i); assignExternalInfoForAttribute(a); } assignExternalInfoForEntity(e); @@ -144,7 +146,7 @@ public abstract class EOAdaptor { } public boolean canServiceModel(EOModel model) { - NSDictionary mcd = model.connectionDictionary(); + NSDictionary<String, Object> mcd = model.connectionDictionary(); if (mcd == null && _connectionDictionary == null) return true; if (mcd == null || _connectionDictionary == null) @@ -152,35 +154,36 @@ public abstract class EOAdaptor { return mcd.equals(_connectionDictionary); } - public void setConnectionDictionary(NSDictionary connection) { + public void setConnectionDictionary(NSDictionary<String, Object> connection) { _connectionDictionary = connection; } - public NSDictionary connectionDictionary() { + public NSDictionary<String, Object> connectionDictionary() { return _connectionDictionary; } - public NSArray contexts() { - return new NSArray(_contexts); + public NSArray<Object> contexts() { + return new NSArray<>(_contexts); } public abstract void assertConnectionDictionaryIsValid(); public abstract EOAdaptorContext createAdaptorContext(); - public abstract Class defaultExpressionClass(); + public abstract Class<? extends EOSQLExpression> defaultExpressionClass(); public abstract EOSQLExpressionFactory expressionFactory(); public abstract boolean isValidQualifierType(String typeName, EOModel model); - public Class expressionClass() { + @SuppressWarnings("unchecked") + public Class<? extends EOSQLExpression> expressionClass() { if (_expressionClass != null) return _expressionClass; String cname = expressionClassName(name()); if (cname != null) { try { - _expressionClass = Class.forName(cname); + _expressionClass = (Class<? extends EOSQLExpression>) Class.forName(cname); } catch (ClassNotFoundException ex) { throw new IllegalStateException("Cannot find expression class named " + cname); } @@ -188,7 +191,7 @@ public abstract class EOAdaptor { return defaultExpressionClass(); } - public NSArray externalTypesWithModel(EOModel model) { + public NSArray<?> externalTypesWithModel(EOModel model) { return NSArray.EmptyArray; } @@ -252,7 +255,7 @@ public abstract class EOAdaptor { return _name; } - public NSArray prototypeAttributes() { + public NSArray<?> prototypeAttributes() { return NSArray.EmptyArray; } diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptorChannel.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptorChannel.java index 44b3401..13c914c 100644 --- a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptorChannel.java +++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptorChannel.java @@ -42,7 +42,7 @@ public abstract class EOAdaptorChannel { return _context; } - public void addStoredProceduresNamed(NSArray names, EOModel model) { + public void addStoredProceduresNamed(NSArray<String> names, EOModel model) { } public abstract NSArray attributesToFetch(); diff --git a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabase.java b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabase.java index a995290..b98b148 100644 --- a/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabase.java +++ b/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabase.java @@ -28,7 +28,7 @@ import net.wotonomy.foundation.NSMutableDictionary; import net.wotonomy.foundation.NSTimestamp; /** - * + * * @author ezamudio@nasoft.com * @author $Author: cgruber $ * @version $Revision: 894 $ 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(); |
