]> git.argeo.org Git - lgpl/argeo-commons.git/blob - org.argeo.util/src/org/argeo/util/transaction/AbstractWorkingCopy.java
Cosmetic improvements
[lgpl/argeo-commons.git] / org.argeo.util / src / org / argeo / util / transaction / AbstractWorkingCopy.java
1 package org.argeo.util.transaction;
2
3 import java.util.HashMap;
4 import java.util.Map;
5
6 public abstract class AbstractWorkingCopy<DATA, ATTR, ID> implements WorkingCopy<DATA, ATTR, ID> {
7 private Map<ID, DATA> newData = new HashMap<ID, DATA>();
8 private Map<ID, ATTR> modifiedData = new HashMap<ID, ATTR>();
9 private Map<ID, DATA> deletedData = new HashMap<ID, DATA>();
10
11 protected abstract ID getId(DATA data);
12
13 protected abstract ATTR cloneAttributes(DATA data);
14
15 public void cleanUp() {
16 // clean collections
17 newData.clear();
18 newData = null;
19 modifiedData.clear();
20 modifiedData = null;
21 deletedData.clear();
22 deletedData = null;
23 }
24
25 public boolean noModifications() {
26 return newData.size() == 0 && modifiedData.size() == 0 && deletedData.size() == 0;
27 }
28
29 public void startEditing(DATA user) {
30 ID id = getId(user);
31 if (modifiedData.containsKey(id))
32 throw new IllegalStateException("Already editing " + id);
33 modifiedData.put(id, cloneAttributes(user));
34 }
35
36 public Map<ID, DATA> getNewData() {
37 return newData;
38 }
39
40 public Map<ID, DATA> getDeletedData() {
41 return deletedData;
42 }
43
44 public Map<ID, ATTR> getModifiedData() {
45 return modifiedData;
46 }
47
48 }