package org.jbpm.persistence; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import org.drools.persistence.map.MapBasedPersistenceContext; import org.jbpm.persistence.processinstance.ProcessInstanceInfo; public class MapBasedProcessPersistenceContext extends MapBasedPersistenceContext implements ProcessPersistenceContext, NonTransactionalProcessPersistentSession{ private ProcessStorage storage; private Map<Long, ProcessInstanceInfo> processes; public MapBasedProcessPersistenceContext(ProcessStorage storage) { super( storage ); this.storage = storage; this.processes = new HashMap<Long, ProcessInstanceInfo>(); } public void persist(ProcessInstanceInfo processInstanceInfo) { if( processInstanceInfo.getId() == null ) { processInstanceInfo.setId( storage.getNextProcessInstanceId() ); } processes.put( processInstanceInfo.getId(), processInstanceInfo ); } public ProcessInstanceInfo findProcessInstanceInfo(Long processId) { ProcessInstanceInfo processInstanceInfo = processes.get( processId ); if( processInstanceInfo == null){ processInstanceInfo = storage.findProcessInstanceInfo( processId ); } return processInstanceInfo; } public List<ProcessInstanceInfo> getStoredProcessInstances() { return Collections.unmodifiableList( new ArrayList<ProcessInstanceInfo>(processes.values())); } @Override public void close() { super.close(); clearStoredProcessInstances(); } public void remove(ProcessInstanceInfo processInstanceInfo) { storage.removeProcessInstanceInfo( processInstanceInfo.getId() ); } public List<Long> getProcessInstancesWaitingForEvent(String type) { return storage.getProcessInstancesWaitingForEvent( type ); } public void clearStoredProcessInstances() { processes.clear(); } }