Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
com.xlrit.gears.runner.graphql.Operation Maven / Gradle / Ivy
package com.xlrit.gears.runner.graphql;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.node.ArrayNode;
import com.fasterxml.jackson.databind.node.NullNode;
import com.xlrit.gears.runner.runnertarget.InterpreterException;
import com.xlrit.gears.runner.utils.GraphQLUtils;
import java.io.File;
import java.util.*;
import java.util.stream.IntStream;
public class Operation {
public static final Operation clearCurrentDateTime = new Operation("Clear Current DateTime", "mutation { clearCurrentDateTime }");
public static final Operation currentUser = new Operation("Current User", "query { currentUser { username } }");
public static final Operation getTasks = new Operation("Get Tasks", "query { groupTasks { id } }");
public static final Operation getDeployments = new Operation("Get Deployments", "query { deployments { id, name } }");
private static final Map NO_VARIABLES = null;
private static final List NO_FILES = null;
public final String name;
public final String query;
public final Map variables;
public final List files;
private Operation(String name, String query) {
this(name, query, NO_VARIABLES);
}
private Operation(String name, String query, Map variables) {
this(name, query, variables, NO_FILES);
}
private Operation(String name, String query, Map variables, List files) {
this.name = name;
this.query = query;
this.variables = variables;
this.files = files;
}
public static Operation loadData(String srcDir, String pattern) {
File srcDirFile = new File(srcDir);
if (!srcDirFile.isDirectory()) {
throw new InterpreterException(String.format("Data directory %s is not a directory", srcDir));
}
List files = GraphQLUtils.listFilteredFiles(srcDirFile, pattern, "sql");
System.out.printf("Loading %d files:%n", files.size());
for (File file : files) {
System.out.printf(" - %s%n", file.getPath());
}
String doc = "mutation LoadData($files: [Upload!]!) { loadData(files: $files) }";
Map variables = new HashMap<>();
ArrayNode arrayNode = new ObjectMapper().createArrayNode();
for (int i = 0; i < files.size(); i++) arrayNode.add(NullNode.instance);
variables.put("files", arrayNode);
return new Operation(String.format("Load Data from %s with Pattern %s", srcDir, pattern), doc, variables, files);
}
public static Operation login(String username, String password) {
String doc = """
mutation Login($username: String!, $password: String!) {
login(username: $username, password: $password)
}""";
Map variables = new HashMap<>();
variables.put("username", username);
variables.put("password", password);
return new Operation(String.format("Login With %s / %s", username, password), doc, variables);
}
public static Operation processDefinitionByKey(String key) {
String doc = """
query ProcessDefinitionByKey($processKey: String!)
{ processDefinitionByKey(key: $processKey) { id, key }
} """;
Map variables = new HashMap<>();
variables.put("processKey", key);
return new Operation(String.format("Process Definition by Key %s", key), doc, variables);
}
public static Operation choiceByValue(String id, String path, String value, boolean task) {
String doc = """
query ChoiceByValue($taskId: ID, $processDefinitionId: ID, $path: String!, $value: String!) {
choice(
taskId: $taskId,
processDefinitionId: $processDefinitionId,
path: $path,
value: $value
)
{ value, label }
}""";
Map variables = new HashMap<>();
variables.put(task ? "taskId" : "processDefinitionId", id);
variables.put(task ? "processDefinitionId" : "taskId", null);
variables.put("path", path);
variables.put("value", value);
return new Operation(String.format("Choice by value %s for field %s on %s with %s",
value, path, task ? "Task" : "ProcessInstance", id), doc, variables);
}
public static Operation choicesByLabel(String id, String path, String label, boolean task) {
String doc = """
query ChoicesByLabel($taskId: ID, $processDefinitionId: ID, $path: String!, $label: String!, $range: Range!) {
choices(
taskId: $taskId,
processDefinitionId: $processDefinitionId,
path: $path,
filter: $label
range: $range
)
{ value, label }
}""";
Map variables = new HashMap<>();
variables.put(task ? "taskId" : "processDefinitionId", id);
variables.put(task ? "processDefinitionId" : "taskId", null);
variables.put("path", path);
variables.put("label", label);
Map range = new HashMap<>();
range.put("start", 0);
range.put("count", 1);
variables.put("range", range);
return new Operation(String.format("Choices by label %s for field %s on %s with %s",
label, path, task ? "Task" : "ProcessInstance", id), doc, variables);
}
public static Operation overrideCurrentDateTime(String value) {
String doc = """
mutation OverrideCurrentDateTime($value: DateTime!) {
overrideCurrentDateTime(value: $value)
}""";
Map variables = new HashMap<>();
variables.put("value", value);
return new Operation(String.format("Override Current DateTime with %s", value), doc, variables);
}
public static Operation startProcessByKey(String key) {
return startProcessByKey(key, null);
}
public static Operation startProcessByKey(String key, JsonNode valuesOpt) {
String doc = """
mutation StartProcessByKey($key: String!, $values: JSON) {
startProcessByKey(key: $key, values: $values) {
__typename
... on ProcessInstance {
id
startTime
processDefinition { id, key, name, deploymentId }
}
... on InputErrors {
errors {
path, name, type, label, value, status, message
}
}
}
}""";
Map variables = new HashMap<>();
variables.put("key", key);
variables.put("values", valuesOpt);
return new Operation(String.format("Start Process with Key %s", key), doc, variables);
}
public static Operation getTasks(String processInstanceId) {
String doc = """
query GetProcessInstance($id: ID!) {
processInstance(id: $id) {
id
tasks { id }
}
}""";
Map variables = new HashMap<>();
variables.put("id", processInstanceId);
return new Operation(String.format("Get Tasks for ProcessInstance with ID %s", processInstanceId), doc, variables);
}
public static Operation getTask(String taskId) {
String doc = """
query GetTask($id: ID!) {
task(id: $id) {
id
name
subject
allowedRoles
form
}
}""";
Map variables = new HashMap<>();
variables.put("id", taskId);
return new Operation(String.format("Get Task with ID %s", taskId), doc, variables);
}
public static Operation claimTask(String taskId) {
String doc = """
mutation ClaimTask($id: ID!) {
claimTask(id: $id)
}""";
Map variables = new HashMap<>();
variables.put("id", taskId);
return new Operation(String.format("Claim Task with ID %s", taskId), doc, variables);
}
public static Operation dataAssertion(String jpql, String deploymentId) {
String doc = """
query CheckData($jpql: String!, $deploymentId: ID!) {
checkData(jpql: $jpql, deploymentId: $deploymentId)
}""";
Map variables = new HashMap<>();
variables.put("jpql", jpql);
if (deploymentId == null) deploymentId = "";
variables.put("deploymentId", deploymentId);
return new Operation("Data Assertion", doc, variables);
}
public static Operation submitTask(String taskId, JsonNode values) {
String doc = """
mutation SubmitTask($id: ID!, $values: JSON!) {
submitTask(id: $id, values: $values) {
__typename
... on ProcessInstance {
id
}
... on ProcessInstanceEnded {
id
}
... on InputErrors {
errors {
path, name, type, label, value, status, message
}
}
}
}""";
Map variables = new HashMap<>();
variables.put("id", taskId);
variables.put("values", values);
return new Operation(String.format("Submit Task with ID %s", taskId), doc, variables);
}
}