Parent Directory
|
Revision Log
Decreased use of generics
package no.brodwall.insanejava.rest;
import java.io.Serializable;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import no.brodwall.insanejava.rest.utils.ObjectUtils;
public class SessionCachedRepository implements Repository {
private final Repository uncachedRepository;
private Map<Serializable, Object> sessionUpdates = new HashMap<Serializable, Object>();
private Collection<Serializable> sessionInserts = new HashSet<Serializable>();
private Collection<Serializable> sessionDeletes = new HashSet<Serializable>();
public SessionCachedRepository(Repository uncachedRepository) {
this.uncachedRepository = uncachedRepository;
}
public void delete(Serializable key) {
sessionDeletes.add(key);
}
public Serializable insert(Object entity) {
Serializable key = uncachedRepository.insert(entity);
sessionUpdates.put(key, entity);
sessionInserts.add(key);
return key;
}
public Object retrieve(Serializable key) {
if (!sessionUpdates.containsKey(key)) {
sessionUpdates.put(key, ObjectUtils.clone(uncachedRepository.retrieve(key)));
}
return sessionUpdates.get(key);
}
public void update(Serializable key, Object entity) {
uncachedRepository.update(key, entity);
}
public Serializable getKey(Object entity) {
return uncachedRepository.getKey(entity);
}
public void writeChanges() {
for (Map.Entry<Serializable, Object> entry : sessionUpdates.entrySet()) {
if (!sessionInserts.contains(entry.getKey())) {
uncachedRepository.update(entry.getKey(), ObjectUtils.clone(entry.getValue()));
}
}
for (Serializable key : sessionDeletes) {
uncachedRepository.delete(key);
}
sessionInserts.clear();
sessionUpdates.clear();
sessionDeletes.clear();
}
public void discardChanges() {
for (Serializable key : sessionInserts) {
uncachedRepository.delete(key);
}
sessionUpdates.clear();
sessionDeletes.clear();
}
}
| Johannes Brodwall | ViewVC Help |
| Powered by ViewVC 1.0.0 |