package net.wotonomy.jdbcadaptor; import java.util.HashMap; import java.util.List; import java.util.Map; import net.wotonomy.control.ArrayFault; import net.wotonomy.control.EOEditingContext; import net.wotonomy.control.EOFetchSpecification; import net.wotonomy.control.EOGlobalID; import net.wotonomy.control.EOObjectStore; import net.wotonomy.foundation.NSArray; import net.wotonomy.foundation.internal.WotonomyException; /** * Implementation of EOObjectStore backed by a single map * @author bjculkin * */ public class EOMapObjectStore extends EOObjectStore { private Map data; public EOMapObjectStore() { super(); data = new HashMap<>(); } public EOMapObjectStore(Map data) { this.data = data; } public Map getData() { return data; } public void setData(Map data) { this.data = data; } @Override public NSArray arrayFaultWithSourceGlobalID(EOGlobalID aGlobalID, String aRelationship, EOEditingContext aContext) { return new ArrayFault(aGlobalID, aRelationship, aContext); } @Override public Object faultForGlobalID(EOGlobalID aGlobalID, EOEditingContext aContext) { return data.get(aGlobalID); } @Override public Object faultForRawRow(Map aDictionary, String anEntityName, EOEditingContext aContext) { // TODO: faults are not yet supported throw new WotonomyException("Faults are not yet supported."); } @Override public void initializeObject(Object eo, EOGlobalID aGlobalID, EOEditingContext aContext) { // TODO is this right? data.put(aGlobalID, eo); aContext.recordObject(eo, aGlobalID); } @Override public void invalidateAllObjects() { // Does nothing } @Override public void invalidateObjectsWithGlobalIDs(List aList) { // Does nothing } @Override public boolean isObjectLockedWithGlobalID(EOGlobalID aGlobalID, EOEditingContext aContext) { // No locking return false; } @Override public void lockObjectWithGlobalID(EOGlobalID aGlobalID, EOEditingContext aContext) { // No locking } @Override public NSArray objectsForSourceGlobalID(EOGlobalID aGlobalID, String aRelationship, EOEditingContext aContext) { // TODO: relationships are not yet supported throw new WotonomyException("Relationships are not yet supported."); } @Override public NSArray objectsWithFetchSpecification(EOFetchSpecification aFetchSpec, EOEditingContext aContext) { throw new WotonomyException("Fetchspecs are not yet supported."); } @Override public void refaultObject(Object anObject, EOGlobalID aGlobalID, EOEditingContext aContext) { // TODO faults are not supported initializeObject(anObject, aGlobalID, aContext); } @Override public void saveChangesInEditingContext(EOEditingContext aContext) { for (Object obj : aContext.insertedObjects()) { EOGlobalID key = aContext.globalIDForObject(obj); data.put(key, obj); } for (Object obj : aContext.deletedObjects()) { EOGlobalID key = aContext.globalIDForObject(obj); data.remove(key); } // No need to handle updates } }