package org.appfuse.dao;
import java.io.Serializable;
import java.util.List;
/**
* Data Access Object (DAO) interface.
*
* @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a>
*
* Modifications and comments by <a href="mailto:bwnoll@gmail.com">Bryan Noll</a>
* This thing used to be named simply 'GenericDao' in versions of appfuse prior to 2.0.
* It was renamed in an attempt to distinguish and describe it as something
* different than GenericDao. GenericDao is intended for subclassing, and was
* named Generic because 1) it has very general functionality and 2) is
* 'generic' in the Java 5 sense of the word... aka... it uses Generics.
*
* Implementations of this class are not intended for subclassing. You most
* likely would want to subclass GenericDao. The only real difference is that
* instances of java.lang.Class are passed into the methods in this class, and
* they are part of the constructor in the GenericDao, hence you'll have to do
* some casting if you use this one.
*
* @see org.appfuse.dao.GenericDao
*/
public interface UniversalDao {
/**
* Generic method used to get all objects of a particular type. This
* is the same as lookup up all rows in a table.
* @param clazz the type of objects (a.k.a. while table) to get data from
* @return List of populated objects
*/
List getAll(Class clazz);
/**
* Generic method to get an object based on class and identifier. An
* ObjectRetrievalFailureException Runtime Exception is thrown if
* nothing is found.
*
* @param clazz model class to lookup
* @param id the identifier (primary key) of the class
* @return a populated object
* @see org.springframework.orm.ObjectRetrievalFailureException
*/
Object get(Class clazz, Serializable id);
/**
* Generic method to save an object - handles both update and insert.
* @param o the object to save
* @return a populated object
*/
Object save(Object o);
/**
* Generic method to delete an object based on class and id
* @param clazz model class to lookup
* @param id the identifier (primary key) of the class
*/
void remove(Class clazz, Serializable id);
}