package org.infinispan.scripting.impl;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import org.infinispan.tasks.Task;
import org.infinispan.tasks.TaskContext;
import org.infinispan.tasks.TaskExecutionMode;
import org.infinispan.tasks.spi.TaskEngine;
/**
* ScriptingTaskEngine.
*
* @author Tristan Tarrant
* @since 8.1
*/
public class ScriptingTaskEngine implements TaskEngine {
private final ScriptingManagerImpl scriptingManager;
public ScriptingTaskEngine(ScriptingManagerImpl scriptingManager) {
this.scriptingManager = scriptingManager;
}
@Override
public String getName() {
return "Script";
}
@Override
public List<Task> getTasks() {
List<Task> tasks = new ArrayList<>();
scriptingManager.getScriptNames().forEach(s -> {
ScriptMetadata scriptMetadata = scriptingManager.getScriptMetadata(s);
tasks.add(new ScriptTask(s, scriptMetadata.mode().isClustered() ? TaskExecutionMode.ALL_NODES : TaskExecutionMode.ONE_NODE, scriptMetadata.parameters()));
});
return tasks;
}
@Override
public <T> CompletableFuture<T> runTask(String taskName, TaskContext context) {
return scriptingManager.runScript(taskName, context);
}
@Override
public boolean handles(String taskName) {
return scriptingManager.containsScript(taskName);
}
}