X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.api.cms%2Fsrc%2Forg%2Fargeo%2Fapi%2Fcms%2Ftransaction%2FAbstractWorkingCopy.java;fp=org.argeo.api.cms%2Fsrc%2Forg%2Fargeo%2Fapi%2Fcms%2Ftransaction%2FAbstractWorkingCopy.java;h=928acad2cc122932276cf14e69e93637c3873bcf;hb=54df376a9c2dd458a82eaa09bfbb718fe699dd0d;hp=0000000000000000000000000000000000000000;hpb=3c1cdc594d954520b14646102b366290bdad58c7;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.api.cms/src/org/argeo/api/cms/transaction/AbstractWorkingCopy.java b/org.argeo.api.cms/src/org/argeo/api/cms/transaction/AbstractWorkingCopy.java new file mode 100644 index 000000000..928acad2c --- /dev/null +++ b/org.argeo.api.cms/src/org/argeo/api/cms/transaction/AbstractWorkingCopy.java @@ -0,0 +1,48 @@ +package org.argeo.api.cms.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; + } + +}