package your.app;

import java.util.HashMap;
import java.util.HashSet;

import com.sun.tools.hat.internal.model.Snapshot;
import com.webobjects.eocontrol.EOEditingContext;
import com.webobjects.eocontrol.EOEnterpriseObject;
import com.webobjects.eocontrol.EOFetchSpecification;
import com.webobjects.eocontrol.EOGlobalID;
import com.webobjects.foundation.NSArray;
import com.webobjects.foundation.NSDictionary;
import com.webobjects.foundation.NSMutableArray;
import com.webobjects.foundation.NSMutableDictionary;

public class MarksDelegate implements EOEditingContext.Delegate {

	HashMap<EOGlobalID, NSDictionary<String, Object>> savedSnapshots = new HashMap<EOGlobalID, NSDictionary<String,Object>>();
	@Override
	public boolean editingContextShouldMergeChangesForObject(EOEditingContext ec, EOEnterpriseObject eo) {
		System.out.println("MarksDelegate.editingContext: " + ec + " shouldMergeChangesForObject: eo = " + eo.eoShallowDescription());
		NSDictionary<String, Object> snapshotDict = eo.snapshot().immutableClone();
		savedSnapshots.put(ec.globalIDForObject(eo), snapshotDict);
		return true;
	}

	@Override
	public void editingContextDidMergeChanges(EOEditingContext ec) {
		System.out.println("MarksDelegate.editingContext: " + ec + " didMergeChanges:");
		for(EOGlobalID gid:savedSnapshots.keySet()){
			EOEnterpriseObject eo = ec.faultForGlobalID(gid, ec);
			eo.takeValuesFromDictionary(savedSnapshots.get(gid));
		}
	}

	@Override
	public boolean editingContextShouldInvalidateObject(EOEditingContext ec, EOEnterpriseObject eo, EOGlobalID gid) {
		System.out.println("MarksDelegate.editingContext: " + ec + " shouldInvalidateObject: eo = " + eo.eoShallowDescription());
		return true;
	}

	@Override
	public NSArray editingContextShouldFetchObjects(EOEditingContext ec, EOFetchSpecification fs) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public boolean editingContextShouldPresentException(EOEditingContext ec, Throwable t) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean editingContextShouldUndoUserActionsAfterFailure(EOEditingContext ec) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public boolean editingContextShouldValidateChanges(EOEditingContext ec) {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public void editingContextWillSaveChanges(EOEditingContext ec) {
		// TODO Auto-generated method stub
	}
}
