[demo] / insanejava / trunk / rest-demo / src / main / java / no / brodwall / insanejava / rest / SessionCachedRepository.java Repository:
ViewVC logotype

View of /insanejava/trunk/rest-demo/src/main/java/no/brodwall/insanejava/rest/SessionCachedRepository.java

Parent Directory Parent Directory | Revision Log Revision Log


Revision 187 - (download) (as text) (annotate)
Thu Aug 30 22:15:18 2007 UTC (3 years ago) by johannes
File size: 2271 byte(s)
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