package org.argeo.util.transaction; import java.util.HashMap; import java.util.Map; public abstract class AbstractWorkingCopy implements WorkingCopy { private Map newData = new HashMap(); private Map modifiedData = new HashMap(); private Map deletedData = new HashMap(); protected abstract ID getId(DATA data); protected abstract ATTR cloneAttributes(DATA data); public void cleanUp() { // clean collections newData.clear(); newData = null; modifiedData.clear(); modifiedData = null; deletedData.clear(); deletedData = null; } public boolean noModifications() { return newData.size() == 0 && modifiedData.size() == 0 && deletedData.size() == 0; } public void startEditing(DATA user) { ID id = getId(user); if (modifiedData.containsKey(id)) throw new IllegalStateException("Already editing " + id); modifiedData.put(id, cloneAttributes(user)); } public Map getNewData() { return newData; } public Map getDeletedData() { return deletedData; } public Map getModifiedData() { return modifiedData; } }