io.vertx.tp.workflow.uca.coadjutor.StayCancel Maven / Gradle / Ivy
The newest version!
package io.vertx.tp.workflow.uca.coadjutor;
import cn.vertxup.workflow.cv.em.TodoStatus;
import io.vertx.core.Future;
import io.vertx.core.json.JsonObject;
import io.vertx.tp.workflow.atom.runtime.WRecord;
import io.vertx.tp.workflow.atom.runtime.WRequest;
import io.vertx.tp.workflow.atom.runtime.WTransition;
import io.vertx.tp.workflow.uca.camunda.Io;
import io.vertx.tp.workflow.uca.camunda.RunOn;
import io.vertx.tp.workflow.uca.central.AbstractMovement;
import io.vertx.tp.workflow.uca.toolkit.URequest;
import io.vertx.up.unity.Ux;
import org.camunda.bpm.engine.runtime.ProcessInstance;
import java.util.Set;
/**
* @author Lang
*/
public class StayCancel extends AbstractMovement implements Stay {
@Override
public Future keepAsync(final WRequest request, final WTransition wTransition) {
/*
* Instance deleting, but fetch the history and stored into `metadata` field as the final processing
* Cancel for W_TODO and Camunda
*/
final ProcessInstance instance = wTransition.instance();
final Io> ioHistory = Io.ioHistory();
return ioHistory.run(instance).compose(historySet -> {
// Cancel data processing
final JsonObject todoData = URequest.cancelJ(request.request(), wTransition, historySet);
return this.updateAsync(todoData, wTransition);
}).compose(record -> {
// Remove ProcessDefinition
final RunOn runOn = RunOn.get();
return runOn.stopAsync(TodoStatus.CANCELED, wTransition)
.compose(removed -> Ux.future(record));
}).compose(record -> this.afterAsync(record, wTransition));
}
}