001/*
002 * #%L
003 * Netarchivesuite - wayback
004 * %%
005 * Copyright (C) 2005 - 2014 The Royal Danish Library, the Danish State and University Library,
006 *             the National Library of France and the Austrian National Library.
007 * %%
008 * This program is free software: you can redistribute it and/or modify
009 * it under the terms of the GNU Lesser General Public License as
010 * published by the Free Software Foundation, either version 2.1 of the
011 * License, or (at your option) any later version.
012 * 
013 * This program is distributed in the hope that it will be useful,
014 * but WITHOUT ANY WARRANTY; without even the implied warranty of
015 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016 * GNU General Lesser Public License for more details.
017 * 
018 * You should have received a copy of the GNU General Lesser Public
019 * License along with this program.  If not, see
020 * <http://www.gnu.org/licenses/lgpl-2.1.html>.
021 * #L%
022 */
023package dk.netarkivet.wayback.indexer;
024
025import java.io.Serializable;
026
027/**
028 * A generic class for managing storage and retrieval of persistent objects.
029 *
030 * @param <T> The persistent class.
031 * @param <PK> The class of the primary key used to identify the objects.
032 */
033public interface GenericDAO<T, PK extends Serializable> {
034
035    /**
036     * Persist the newInstance object into database.
037     *
038     * @param newInstance the object to persist.
039     * @return the key assigned to the object.
040     */
041    PK create(T newInstance);
042
043    /**
044     * Retrieve an object that was previously persisted to the database using the indicated id as primary key.
045     *
046     * @param id the key of the object to be retrieved.
047     * @return the retrieved object.
048     */
049    T read(PK id);
050
051    /**
052     * Save changes made to a persistent object.
053     *
054     * @param transientObject the object to be updated.
055     */
056    void update(T transientObject);
057
058    /**
059     * Remove an object from persistent storage in the database.
060     *
061     * @param persistentObject the object to be deleted.
062     */
063    void delete(T persistentObject);
064
065}