import java.util.Hashtable;

public abstract
class AbstractMapper implements IMapper
{
    public final Object get(OID oid) {
        Object obj = cachedObjects.get(oid);
        if (obj == null) {
            // call hook method
            obj = getFromStorage(oid);
            cachedObjects.put(oid, obj);
        }
        return obj;
    }

    // hook method
    protected abstract Object getFromStorage(OID oid);  

    private Hashtable cachedObjects = new Hashtable();

    public final void put(OID oid, Object o) {
        putToStorage(oid, o);
    }

    protected abstract void putToStorage(OID oid, Object o);  
}
