All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.xlrit.gears.runner.graphql.Operation Maven / Gradle / Ivy

There is a newer version: 1.17.1
Show newest version
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);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy