package cz.cuni.mff.d3s.been.cluster.action;
import cz.cuni.mff.d3s.been.cluster.context.ClusterContext;
import cz.cuni.mff.d3s.been.core.task.TaskContextEntry;
import cz.cuni.mff.d3s.been.core.task.TaskContextStateInfo;
import cz.cuni.mff.d3s.been.socketworks.twoway.Replies;
import cz.cuni.mff.d3s.been.socketworks.twoway.Reply;
import cz.cuni.mff.d3s.been.socketworks.twoway.Request;
import cz.cuni.mff.d3s.been.task.checkpoints.CheckpointRequest;
import cz.cuni.mff.d3s.been.util.JSONUtils;
import cz.cuni.mff.d3s.been.util.JsonException;
/**
* An {@link Action} that handles a request for retrieving a list of contexts
* contained within a benchmark.
*
* @author Kuba Brecka
*/
public class ContainedContextsRetrieve implements Action {
/** the request to handle */
private final Request request;
/** BEEN cluster instance */
private final ClusterContext ctx;
/**
* Default constructor, creates the action with the specified request and
* cluster context.
*
* @param request
* the request to handle
* @param ctx
* the cluster context
*/
public ContainedContextsRetrieve(CheckpointRequest request, ClusterContext ctx) {
this.request = request;
this.ctx = ctx;
}
@Override
public Reply handle() {
String benchmarkId = this.request.getSelector();
TaskContextStateInfo info = new TaskContextStateInfo();
for (TaskContextEntry taskContextEntry : ctx.getBenchmarks().getTaskContextsInBenchmark(benchmarkId)) {
TaskContextStateInfo.Item i = new TaskContextStateInfo.Item();
i.state = taskContextEntry.getContextState();
i.taskContextId = taskContextEntry.getId();
info.items.add(i);
}
String s;
try {
s = JSONUtils.newInstance().serialize(info);
} catch (JsonException e) {
throw new IllegalArgumentException("Cannot serialize TaskContextStateInfo to JSON.", e);
}
return Replies.createOkReply(s);
}
}