package edu.gatech.i3l.fhir.jpa.dao;
import java.util.Date;
import java.util.List;
import java.util.Set;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.model.api.IResource;
import edu.gatech.i3l.fhir.jpa.entity.BaseResourceEntity;
/**
* This interface contains general funtions to manage the DAO layer, as well as functions related to the ones in {@link IFhirResourceDao},
* but performing operations 'persist', 'merge', 'flush' and 'remove'.
* @see IFhirResourceDao
* @author Ismael Sarmento
*/
public interface IFhirDao extends IDao{
FhirContext getContext();
DaoConfig getConfig();
<T extends IBaseResource> IFhirResourceDao<T> getDao(Class<T> nextType);
List<IBaseResource> loadResourcesById(Set<? extends IIdType> includePids);
BaseResourceEntity updateEntity(IResource resource, BaseResourceEntity entity, boolean b, Date date);
BaseResourceEntity updateEntity(IResource theResource, BaseResourceEntity baseResourceEntity, boolean theUpdateHistory, Date theDeletedTimestampOrNull,
boolean thePerformIndexing, boolean theUpdateVersion);
//void validateResourceForStorage(IResource theResource);
}