    001package com.hammurapi.store;
    002
    003/**
    004 * Backing store can be used by object store to
    005 * load and store objects. In this case the object store role is manipulation and
    006 * backing store role is persistence.
    007 * @author Pavel Vlasov
    008 *
    009 */
    010public interface BackingStore<T, PK> {
    011
    012        /**
    013         * @return Iterable to load objects to the object store.
    014         */
    015        Iterable<T> load();
    016
    017        /**
    018         * This method is invoked only if the object store
    019         * getByPrimaryKey() is invoked and the primary key is not
    020         * present in the object store. This method can be used if the
    021         * object store is used as a memory sensitive cache.
    022         * @param primaryKey
    023         * @return
    024         */
    025        T load(PK primaryKey);
    026
    027        /**
    028         * Adds object to the backing store.
    029         * @param primaryKey Primary key value, if object store is configured
    030         * with primary key extractor, null otherwise.
    031         * @param obj Object to store.
    032         */
    033        void add(PK primaryKey, T obj);
    034
    035        /**
    036         * Removes object from the backing store.
    037         * @param primaryKey Primary key value, if object store is configured
    038         * with primary key extractor, null otherwise.
    039         * @param obj Object to remove.
    040         */
    041        void remove(PK primaryKey, T obj);
    042
    043        /**
    044         * Updates object in the backing store.
    045         * @param primaryKey Primary key value, if object store is configured
    046         * with primary key extractor, null otherwise.
    047         * @param obj Object to update.
    048         */
    049        void update(PK primaryKey, T obj);
    050}