package pl.net.bluesoft.rnd.processtool.dao;
import pl.net.bluesoft.rnd.processtool.hibernate.HibernateBean;
import pl.net.bluesoft.rnd.processtool.hibernate.ResultsPageWrapper;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstance;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceFilter;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceLog;
import pl.net.bluesoft.rnd.processtool.model.ProcessInstanceSimpleAttribute;
import pl.net.bluesoft.rnd.processtool.model.UserData;
import java.util.*;
/**
* @author tlipski@bluesoft.net.pl
*/
public interface ProcessInstanceDAO extends HibernateBean<ProcessInstance> {
long saveProcessInstance(ProcessInstance processInstance);
ProcessInstance refreshProcessInstance(ProcessInstance processInstance);
ProcessInstance getProcessInstance(long id);
List<ProcessInstance> getProcessInstances(Collection<Long> ids);
ProcessInstance getProcessInstanceByInternalId(String internalId);
ProcessInstance getProcessInstanceByExternalId(String externalId);
List<ProcessInstance> findProcessInstancesByKeyword(String key, String processType);
Map<String, ProcessInstance> getProcessInstanceByInternalIdMap(Collection<String> internalId);
void deleteProcessInstance(ProcessInstance instance);
Collection<ProcessInstanceLog> getUserHistory(UserData user, Date startDate, Date endDate);
// List<ProcessInstance> getRecentProcesses(UserData userData, Calendar minDate, String filter, int offset, int limit);
Collection<ProcessInstance> searchProcesses(String filter, int offset, int limit, boolean onlyRunning, String[] userRoles, String assignee, String... queues);
Collection<ProcessInstance> getUserProcessesAfterDate(UserData userData, Calendar minDate);
ResultsPageWrapper<ProcessInstance> getRecentProcesses(UserData userData, Calendar minDate, Integer offset, Integer limit);
ResultsPageWrapper<ProcessInstance> getProcessInstanceByInternalIdMapWithFilter(Collection<String> internalIds, ProcessInstanceFilter filter,
Integer offset, Integer limit);
Collection<ProcessInstance> getUserProcessesBetweenDates(UserData userData,
Calendar minDate, Calendar maxDate);
}