diff --git a/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEOGlobalIDUtilities.java b/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEOGlobalIDUtilities.java index 6f637ea576d..579bb4fb6e8 100644 --- a/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEOGlobalIDUtilities.java +++ b/Frameworks/Core/ERExtensions/Sources/er/extensions/eof/ERXEOGlobalIDUtilities.java @@ -8,7 +8,6 @@ import java.net.InetAddress; import java.net.UnknownHostException; -import java.util.Enumeration; import org.apache.log4j.Logger; @@ -151,7 +150,7 @@ public String toString() { * Groups an array of global IDs by their entity name. * @param globalIDs */ - public static NSDictionary globalIDsGroupedByEntityName(NSArray globalIDs) { + public static NSDictionary> globalIDsGroupedByEntityName(NSArray globalIDs) { return ERXArrayUtilities.arrayGroupedByKeyPath(globalIDs, "entityName"); } @@ -161,20 +160,20 @@ public static NSDictionary globalIDsGroupedByEntityName(NSArray globalIDs) { * @param globalIDs */ public static NSArray primaryKeyValuesWithGlobalIDs(NSArray globalIDs) { - NSMutableArray result = new NSMutableArray(); - if(globalIDs.count() > 0) { - NSDictionary gidsByEntity = globalIDsGroupedByEntityName(globalIDs); - for(Enumeration e = gidsByEntity.keyEnumerator(); e.hasMoreElements();) { - String entityName = (String) e.nextElement(); - NSArray gidsForEntity = (NSArray) gidsByEntity.objectForKey(entityName); - - for (Enumeration gids = gidsForEntity.objectEnumerator(); gids.hasMoreElements();) { - EOKeyGlobalID keyGID = (EOKeyGlobalID) gids.nextElement(); - if(keyGID.keyCount() == 1) { + NSMutableArray result = new NSMutableArray(globalIDs.count()); + NSDictionary> gidsByEntity = globalIDsGroupedByEntityName(globalIDs); + for (String entityName : gidsByEntity.keySet()) { + NSArray gidsForEntity = gidsByEntity.objectForKey(entityName); + for (EOGlobalID gid : gidsForEntity) { + if (gid instanceof EOKeyGlobalID) { + EOKeyGlobalID keyGID = (EOKeyGlobalID) gid; + if (keyGID.keyCount() == 1) { result.addObject(keyGID.keyValues()[0]); } else { throw new IllegalArgumentException("GID has more than one key: " + keyGID); } + } else { + throw new IllegalArgumentException("GID is not an EOKeyGlobalID: " + gid); } } } @@ -187,13 +186,10 @@ public static NSArray primaryKeyValuesWithGlobalIDs(NSArray * @param values */ public static NSArray globalIDsWithPrimaryKeyValues(String entityName, NSArray values) { - NSMutableArray result = new NSMutableArray(); - if(values.count() > 0) { - for (Enumeration pks = values.objectEnumerator(); pks.hasMoreElements();) { - Object value = pks.nextElement(); - EOKeyGlobalID gid = EOKeyGlobalID.globalIDWithEntityName(entityName, new Object[] {value}); - result.addObject(gid); - } + NSMutableArray result = new NSMutableArray(values.count()); + for (Object value : values) { + EOKeyGlobalID gid = EOKeyGlobalID.globalIDWithEntityName(entityName, new Object[] {value}); + result.addObject(gid); } return result; } @@ -206,13 +202,10 @@ public static NSArray globalIDsWithPrimaryKeyValues(String entityNam * @return the fetched EO */ public static EOEnterpriseObject fetchObjectWithGlobalID(EOEditingContext ec, EOGlobalID gid) { - NSArray results = ERXEOGlobalIDUtilities.fetchObjectsWithGlobalIDs(ec, new NSArray(gid)); - EOEnterpriseObject eo; + NSArray results = ERXEOGlobalIDUtilities.fetchObjectsWithGlobalIDs(ec, new NSArray(gid)); + EOEnterpriseObject eo = null; if (results.count() > 0) { - eo = (EOEnterpriseObject) results.objectAtIndex(0); - } - else { - eo = null; + eo = results.objectAtIndex(0); } return eo; } @@ -225,7 +218,7 @@ public static EOEnterpriseObject fetchObjectWithGlobalID(EOEditingContext ec, EO * @param globalIDs the global ids to fetch * @return the fetched EO's */ - public static NSMutableArray fetchObjectsWithGlobalIDs(EOEditingContext ec, NSArray globalIDs) { + public static NSMutableArray fetchObjectsWithGlobalIDs(EOEditingContext ec, NSArray globalIDs) { return ERXEOGlobalIDUtilities.fetchObjectsWithGlobalIDs(ec, globalIDs, false); } @@ -237,21 +230,18 @@ public static NSMutableArray fetchObjectsWithGlobalIDs(EOEditingContext ec, NSAr * @param refreshesRefetchedObjects whether or not to refresh refetched objects * @return the fetched EO's */ - @SuppressWarnings("unchecked") - public static NSMutableArray fetchObjectsWithGlobalIDs(EOEditingContext ec, NSArray globalIDs, boolean refreshesRefetchedObjects) { + public static NSMutableArray fetchObjectsWithGlobalIDs(EOEditingContext ec, NSArray globalIDs, boolean refreshesRefetchedObjects) { NSMutableArray result = new NSMutableArray(); ec.lock(); ec.rootObjectStore().lock(); try { - NSDictionary gidsByEntity = globalIDsGroupedByEntityName(globalIDs); - for(Enumeration e = gidsByEntity.keyEnumerator(); e.hasMoreElements();) { - String entityName = (String) e.nextElement(); - NSArray gidsForEntity = (NSArray) gidsByEntity.objectForKey(entityName); + NSDictionary> gidsByEntity = globalIDsGroupedByEntityName(globalIDs); + for(String entityName : gidsByEntity.keySet()) { + NSArray gidsForEntity = gidsByEntity.objectForKey(entityName); NSMutableArray qualifiers = new NSMutableArray(); EOEntity entity = ERXEOAccessUtilities.entityNamed(ec, entityName); - for (Enumeration gids = gidsForEntity.objectEnumerator(); gids.hasMoreElements();) { - EOGlobalID g = (EOGlobalID) gids.nextElement(); + for (EOGlobalID g : gidsForEntity) { boolean fetch = refreshesRefetchedObjects; if (!fetch) { EOEnterpriseObject eo; @@ -308,37 +298,32 @@ public static NSMutableArray fetchObjectsWithGlobalIDs(EOEditingContext ec, NSAr * @param globalIDs * @param prefetchingKeypaths */ - public static NSArray fireFaultsForGlobalIDs(EOEditingContext ec, NSArray globalIDs, NSArray prefetchingKeypaths) { + public static NSArray fireFaultsForGlobalIDs(EOEditingContext ec, NSArray globalIDs, NSArray prefetchingKeypaths) { NSMutableArray result = new NSMutableArray(globalIDs.count()); - if(globalIDs.count() > 0) { - NSMutableArray faults = new NSMutableArray(globalIDs.count()); - for (Enumeration ids = globalIDs.objectEnumerator(); ids.hasMoreElements();) { - EOGlobalID gid = (EOGlobalID) ids.nextElement(); - EOEnterpriseObject eo = ec.faultForGlobalID(gid, ec); - if(EOFaultHandler.isFault(eo)) { - faults.addObject(gid); - } else { - result.addObject(eo); - } + NSMutableArray faults = new NSMutableArray(globalIDs.count()); + for (EOGlobalID gid : globalIDs) { + EOEnterpriseObject eo = ec.faultForGlobalID(gid, ec); + if (EOFaultHandler.isFault(eo)) { + faults.addObject(gid); + } else { + result.addObject(eo); } - NSArray loadedObjects = fetchObjectsWithGlobalIDs(ec, faults); - result.addObjectsFromArray(loadedObjects); - if(prefetchingKeypaths != null && prefetchingKeypaths.count() > 0) { - NSDictionary objectsByEntity = ERXArrayUtilities.arrayGroupedByKeyPath(result, "entityName"); - for(Enumeration e = objectsByEntity.keyEnumerator(); e.hasMoreElements();) { - String entityName = (String) e.nextElement(); - NSArray objects = (NSArray) objectsByEntity.objectForKey(entityName); - EOEntity entity = ERXEOAccessUtilities.entityNamed(ec, entityName); - for (Enumeration keyPaths = prefetchingKeypaths.objectEnumerator(); keyPaths.hasMoreElements();) { - String keypath = (String) keyPaths.nextElement(); - EORelationship relationship = entity.relationshipNamed(keypath); - EODatabaseContext dbc = ERXEOAccessUtilities.databaseContextForEntityNamed((EOObjectStoreCoordinator) ec.rootObjectStore(), entityName); - dbc.lock(); - try { - dbc.batchFetchRelationship(relationship, objects, ec); - } finally { - dbc.unlock(); - } + } + NSArray loadedObjects = fetchObjectsWithGlobalIDs(ec, faults); + result.addObjectsFromArray(loadedObjects); + if (prefetchingKeypaths != null && prefetchingKeypaths.count() > 0) { + NSDictionary> objectsByEntity = ERXArrayUtilities.arrayGroupedByKeyPath(result, "entityName"); + for (String entityName : objectsByEntity.keySet()) { + NSArray objects = objectsByEntity.objectForKey(entityName); + EOEntity entity = ERXEOAccessUtilities.entityNamed(ec, entityName); + for (String keypath : prefetchingKeypaths) { + EORelationship relationship = entity.relationshipNamed(keypath); + EODatabaseContext dbc = ERXEOAccessUtilities.databaseContextForEntityNamed((EOObjectStoreCoordinator) ec.rootObjectStore(), entityName); + dbc.lock(); + try { + dbc.batchFetchRelationship(relationship, objects, ec); + } finally { + dbc.unlock(); } } } @@ -352,7 +337,7 @@ public static NSArray fireFaultsForGlobalIDs(EOEditingContext ec, NSArray global * @param ec * @param globalIDs */ - public static NSArray fireFaultsForGlobalIDs(EOEditingContext ec, NSArray globalIDs) { + public static NSArray fireFaultsForGlobalIDs(EOEditingContext ec, NSArray globalIDs) { return fireFaultsForGlobalIDs(ec, globalIDs, NSArray.EmptyArray); }