package org.infinispan.server.infinispan.task;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import org.infinispan.factories.annotations.Inject;
import org.infinispan.factories.scopes.Scope;
import org.infinispan.factories.scopes.Scopes;
import org.infinispan.manager.EmbeddedCacheManager;
import org.infinispan.tasks.ServerTask;
import org.infinispan.tasks.Task;
import org.infinispan.tasks.TaskManager;
import org.infinispan.tasks.impl.TaskManagerImpl;
/**
* Author: Michal Szynkiewicz, michal.l.szynkiewicz@gmail.com
* Date: 1/20/16
* Time: 12:53 PM
*/
@Scope(Scopes.GLOBAL)
public class ServerTaskRegistryImpl implements ServerTaskRegistry {
private ConcurrentMap<String, ServerTaskWrapper> tasks = new ConcurrentHashMap<>();
@Inject
public void init(TaskManager taskManager, EmbeddedCacheManager cacheManager) {
ServerTaskEngine engine = new ServerTaskEngine(this, cacheManager);
((TaskManagerImpl) taskManager).registerTaskEngine(engine);
}
@Override
public List<Task> getTasks() {
Collection<ServerTaskWrapper> tasks = this.tasks.values();
return new ArrayList<>(tasks);
}
@Override
@SuppressWarnings("unchecked")
public <T> ServerTaskWrapper<T> getTask(String taskName) {
return (ServerTaskWrapper<T>) tasks.get(taskName);
}
@Override
public boolean handles(String taskName) {
return tasks.containsKey(taskName);
}
@Override
public <T> void addDeployedTask(ServerTask<T> task) {
ServerTaskWrapper taskWrapper = new ServerTaskWrapper<>(task);
tasks.put(task.getName(), taskWrapper);
}
@Override
public void removeDeployedTask(String name) {
tasks.remove(name);
}
}