use of io.automatiko.engine.api.workflow.Process in project automatiko-engine by automatiko-io.
the class ProcessInstanceManagementResource method importInstance.
@APIResponses(value = { @APIResponse(responseCode = "404", description = "In case of instance with given process id was not found", content = @Content(mediaType = "application/json")), @APIResponse(responseCode = "200", description = "Exported process instance", content = @Content(mediaType = "application/json")) })
@Operation(summary = "Imports exported process instance and returns its details after the import")
@POST
@Path("/{processId}/instances")
@Produces(MediaType.APPLICATION_JSON)
public ProcessInstanceDetailsDTO importInstance(@Context UriInfo uriInfo, @Parameter(description = "Unique identifier of the process", required = true) @PathParam("processId") String processId, @Parameter(description = "User identifier as alternative autroization info", required = false, hidden = true) @QueryParam("user") final String user, @Parameter(description = "Groups as alternative autroization info", required = false, hidden = true) @QueryParam("group") final List<String> groups, @Parameter(description = "The input model for orders instance", schema = @Schema(type = SchemaType.OBJECT, implementation = Map.class)) JsonExportedProcessInstance instance) {
identitySupplier.buildIdentityProvider(user, groups);
return UnitOfWorkExecutor.executeInUnitOfWork(application.unitOfWorkManager(), () -> {
ProcessInstance<?> pi = exporter.importInstance(instance);
ProcessInstanceDetailsDTO details = new ProcessInstanceDetailsDTO();
details.setId(pi.id());
details.setProcessId(processId);
details.setBusinessKey(pi.businessKey());
details.setDescription(pi.description());
details.setFailed(pi.errors().isPresent());
if (pi.errors().isPresent()) {
details.setErrors(pi.errors().get().errors().stream().map(e -> new ErrorInfoDTO(e.failedNodeId(), e.errorId(), e.errorMessage(), e.errorDetails())).collect(Collectors.toList()));
}
details.setImage(uriInfo.getBaseUri().toString() + "management/processes/" + processId + "/instances/" + pi.id() + "/image");
details.setTags(pi.tags().values());
details.setVariables(pi.variables());
VariableScope variableScope = (VariableScope) ((ContextContainer) ((AbstractProcess<?>) pi.process()).process()).getDefaultContext(VariableScope.VARIABLE_SCOPE);
details.setVersionedVariables(variableScope.getVariables().stream().filter(v -> v.hasTag(Variable.VERSIONED_TAG)).map(v -> v.getName()).collect(Collectors.toList()));
return details;
});
}
use of io.automatiko.engine.api.workflow.Process in project automatiko-engine by automatiko-io.
the class ProcessInstanceExporter method importInstance.
public ProcessInstance<?> importInstance(JsonExportedProcessInstance instance) {
if (!instance.getSubInstances().isEmpty()) {
for (JsonExportedProcessInstance subinstance : instance.getSubInstances()) {
importInstance(subinstance);
}
}
String processId = instance.getInstance().get("processId").asText();
String processVersion = instance.getInstance().has("processVersion") ? instance.getInstance().get("processVersion").asText() : null;
if (processVersion != null) {
processId += "_" + processVersion.replaceAll("\\.", "_");
}
Process<?> process = processData.get(processId);
return process.importInstance(StringExportedProcessInstance.of(instance.getHeader().toString(), instance.getInstance().toString(), instance.getTimers().toString(), s -> {
return instance.convertTimers();
}));
}
use of io.automatiko.engine.api.workflow.Process in project automatiko-engine by automatiko-io.
the class ProcessInstanceManagementResourceTest method setup.
@SuppressWarnings({ "rawtypes", "unchecked" })
@BeforeEach
public void setup() {
responseBuilder = mock(ResponseBuilder.class);
Response response = mock(Response.class);
when((runtimeDelegate).createResponseBuilder()).thenReturn(responseBuilder);
lenient().when((responseBuilder).status(any(StatusType.class))).thenReturn(responseBuilder);
lenient().when((responseBuilder).entity(any())).thenReturn(responseBuilder);
lenient().when((responseBuilder).build()).thenReturn(response);
application = mock(Application.class);
Map<String, Process<?>> processes = Mockito.mock(Map.class);
Process process = mock(Process.class);
ProcessInstances instances = mock(ProcessInstances.class);
processInstance = mock(ProcessInstance.class);
errors = mock(ProcessErrors.class);
lenient().when(processes.get(anyString())).thenReturn(process);
lenient().when(process.instances()).thenReturn(instances);
lenient().when(instances.findById(anyString())).thenReturn(Optional.of(processInstance));
lenient().when(instances.findById(anyString(), eq(5), any())).thenReturn(Optional.of(processInstance));
lenient().when(processInstance.errors()).thenReturn(Optional.of(errors));
lenient().when(processInstance.id()).thenReturn("abc-def");
lenient().when(processInstance.status()).thenReturn(ProcessInstance.STATE_ACTIVE);
lenient().when(errors.failedNodeIds()).thenReturn("xxxxx");
lenient().when(errors.errorMessages()).thenReturn("Test error message");
lenient().when(application.unitOfWorkManager()).thenReturn(new DefaultUnitOfWorkManager(new CollectingUnitOfWorkFactory()));
IdentitySupplier identitySupplier = new IdentitySupplier() {
@Override
public IdentityProvider buildIdentityProvider(String user, List<String> roles) {
return new StaticIdentityProvider("test");
}
};
resource = spy(new ProcessInstanceManagementResource(processes, application, identitySupplier));
}
Aggregations