/*
* The contents of this file are subject to the Mozilla Public License
* Version 1.1 (the "License"); you may not use this file except in
* compliance with the License. You may obtain a copy of the License at
* http://www.mozilla.org/MPL/
*
* Software distributed under the License is distributed on an "AS IS"
* basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
* License for the specific language governing rights and limitations
* under the License.
*
* The Original Code is available at http://www.abiquo.com/.....
*
* The Initial Developer of the Original Code is Soluciones Grid, S.L. (www.abiquo.com),
* Consell de Cent 296, Principal 2�, 08007 Barcelona, Spain.
*
* No portions of the Code have been created by third parties.
* All Rights Reserved.
*
* Contributor(s): ______________________________________.
*
* Graphical User Interface of this software may be used under the terms
* of the Common Public Attribution License Version 1.0 (the "CPAL License",
* available at http://cpal.abiquo.com/), in which case the
* provisions of CPAL License are applicable instead of those above. In relation
* of this portions of the Code, a Legal Notice according to Exhibits A and B of
* CPAL Licence should be provided in any distribution of the corresponding Code
* to Graphical User Interface.
*/
package com.abiquo.networking;
import java.io.Serializable;
import java.util.List;
/**
* This interface provides the methods to implement a DAO pattern for CRUD(Create, Read, Update and
* Delete) functionality. Each entity of the DataBase should have a class which implements its
* methods in order to access to it.
*
* @author abiquo
*/
public interface Crudable<T, ID extends Serializable>
{
/**
* Looks for an persistent object which a given id.
*
* @param id identifier of the object.
* @return Entity we want to get
*/
T findById(ID id);
/**
* Looks for a list of persistent objects in Database.
*
* @return Whole list of entities.
*/
List<T> findAll();
/**
* List of persistent object which matches with a given object.
*
* @param exampleInstance
* @return List of matching entities.
*/
List<T> findByExample(T exampleInstance);
/**
* Stores an entity in database.
*
* @param entity Entity to store.
* @return
*/
T makePersistent(T entity);
/**
* Deletes an entity from database.
*
* @param entity Entity to delete
*/
void makeTransient(T entity);
}