package ee.telekom.workflow.core.retry;
import java.lang.invoke.MethodHandles;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import ee.telekom.workflow.core.error.ExecutionError;
import ee.telekom.workflow.core.error.ExecutionErrorService;
import ee.telekom.workflow.core.workflowinstance.WorkflowInstanceService;
import ee.telekom.workflow.core.workitem.WorkItemService;
@Service
@Transactional
public class RetryServiceImpl implements RetryService{
private static final Logger log = LoggerFactory.getLogger( MethodHandles.lookup().lookupClass() );
@Autowired
private WorkflowInstanceService workflowInstanceService;
@Autowired
private WorkItemService workItemService;
@Autowired
private ExecutionErrorService executionErrorService;
@Override
public void retry( long woinRefNum ){
ExecutionError error = executionErrorService.findByWoinRefNum( woinRefNum );
log.info( "Retry execution of workflow instance " + error.getWoinRefNum() + (error.getWoitRefNum() == null ? "" : " " + error.getWoitRefNum()) );
workflowInstanceService.rewindAfterError( error.getWoinRefNum() );
if( error.getWoitRefNum() != null ){
workItemService.rewindAfterError( error.getWoitRefNum() );
}
executionErrorService.delete( error.getRefNum() );
workflowInstanceService.unlock( error.getWoinRefNum() );
}
}