summaryrefslogtreecommitdiff
path: root/projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access
diff options
context:
space:
mode:
authorBenjamin Culkin <scorpress@gmail.com>2024-07-01 17:27:48 -0400
committerBenjamin Culkin <scorpress@gmail.com>2024-07-01 17:27:48 -0400
commit02bc52037e9ccccca672d6156d9c325c74fe28b3 (patch)
treedb022b83c90562f461f4a27412caa9936a8dfd04 /projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access
parentc75d7dbd613a47b217499f7a856c469a8bc59e2a (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')
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptor.java47
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EOAdaptorChannel.java2
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabase.java2
-rw-r--r--projects/net.wotonomy.persistence/src/main/java/net/wotonomy/access/EODatabaseContext.java71
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();