package com.l2jserver.service.database;
import com.l2jserver.model.Model;
import com.l2jserver.model.id.ID;
/**
* The {@link DAOResolver} resolves the {@link DataAccessObject} that provides
* database operations for an given {@link Model} instance
*
* @author Rogiel
*/
public interface DAOResolver {
/**
* Returns the {@link DataAccessObject} used to retrieve and save objects of
* type
*
* @param
* the {@link Model} type
* @param
* the {@link ID} type
* @param modelObject
* the model object
* @return the {@link DataAccessObject} for {@link Model}
*/
, M extends Model> DataAccessObject getDAO(
M modelObject);
/**
* Returns the {@link DataAccessObject} used to retrieve and save objects of
* type
*
* @param
* the {@link Model} type
* @param
* the {@link ID} type
* @param modelClass
* the model class
* @return the {@link DataAccessObject} for {@link Model}
*/
, I extends ID> DataAccessObject getDAO(
Class modelClass);
/**
* Returns the {@link DataAccessObject} used to retrieve and save objects of
* type M which use {@link ID} of type I
*
* @param
* the {@link Model} type
* @param
* the {@link ID} type
* @param modelIdObject
* the model {@link ID} object
* @return the {@link DataAccessObject} for {@link Model}
*/
, M extends Model> DataAccessObject getDAOFromID(
I modelIdObject);
/**
* Returns the {@link DataAccessObject} used to retrieve and save objects of
* type M which use {@link ID} of type I
*
* @param
* the {@link Model} type
* @param
* the {@link ID} type
* @param modelIdType
* the model {@link ID} class
* @return the {@link DataAccessObject} for {@link Model}
*/
, M extends Model>> DataAccessObject getDAOFromID(
Class modelIdType);
}