package codeine.api;
import java.util.Collection;
import java.util.List;
import java.util.Queue;
import java.util.concurrent.ConcurrentLinkedDeque;
import codeine.jsons.command.CommandParameterInfo;
import codeine.utils.StringUtils;
import com.google.common.collect.Lists;
/**
* This class represents the data saved for each command on disk, and send to ui
*/
@SuppressWarnings("unused")
public class CommandExecutionStatusInfo {
private String command;
private List<CommandParameterInfo> params;
private String project_name;
private List<NodeInfoNameAndAlias> nodes_list;
private Queue<NodeInfoNameAndAlias> fail_list = new ConcurrentLinkedDeque<NodeInfoNameAndAlias>();
private Queue<NodeInfoNameAndAlias> success_list = new ConcurrentLinkedDeque<NodeInfoNameAndAlias>();
private long start_time;
private Long finish_time;
private String user = "Guest";
private long id;
private boolean finished;
private String output;
private boolean can_cancel;
private boolean can_rerun;
public CommandExecutionStatusInfo() {
super();
}
public CommandExecutionStatusInfo(String user, String command, List<CommandParameterInfo> params, String projectName, List<? extends NodeInfoNameAndAlias> nodes_list, long id) {
this.command = command;
this.params = params;
this.project_name = projectName;
this.nodes_list = copyNodesInfo(nodes_list);
this.id = id;
this.start_time = System.currentTimeMillis();
this.user = StringUtils.isEmpty(user) ? "Guest" : user;
}
private List<NodeInfoNameAndAlias> copyNodesInfo(List<? extends NodeInfoNameAndAlias> nodes_list) {
List<NodeInfoNameAndAlias> $ = Lists.newArrayList();
for (NodeInfoNameAndAlias nodeWithPeerInfo : nodes_list) {
$.add(copyOnlyNodeInfo(nodeWithPeerInfo));
}
return $;
}
private NodeInfoNameAndAlias copyOnlyNodeInfo(NodeInfoNameAndAlias nodeWithPeerInfo) {
NodeInfoNameAndAlias n = null;
if (nodeWithPeerInfo.getClass().equals(NodeInfoNameAndAlias.class)) {
n = nodeWithPeerInfo;
}
else {
n = new NodeInfoNameAndAlias(nodeWithPeerInfo);
}
return n;
}
public void addFailedNode(NodeInfoNameAndAlias node) {
fail_list.add(copyOnlyNodeInfo(node));
}
public void addSuccessNode(NodeInfoNameAndAlias node) {
success_list.add(copyOnlyNodeInfo(node));
}
public Collection<NodeInfoNameAndAlias> fail_list() {
return fail_list;
}
public Collection<NodeInfoNameAndAlias> success_list() {
return success_list;
}
public List<NodeInfoNameAndAlias> nodes_list() {
return nodes_list;
}
public String user() {
return user;
}
public String command() {
return command;
}
public long start_time() {
return start_time;
}
public long id() {
return id;
}
public boolean finished() {
return finished;
}
public void finish_time(long finish_time) {
this.finish_time = finish_time;
}
public void start_time(long start_time) {
this.start_time = start_time;
}
public long finishTimeForRemoval() {
return finish_time == null ? start_time : finish_time;
}
public void finish() {
finished = true;
finish_time = System.currentTimeMillis();
}
public String project_name() {
return project_name;
}
public void output(String output) {
this.output = output;
}
@Override
public String toString() {
return "CommandExecutionStatusInfo [project_name=" + project_name + ", command=" + command + ", id=" + id
+ ", finished=" + finished + "]";
}
public String command_name() {
return command();
}
public void clearPasswordParams() {
for (CommandParameterInfo parameter : params) {
parameter.clearPassword();
}
}
public void can_cancel(boolean can_cancel) {
this.can_cancel = can_cancel;
}
public void can_rerun(boolean can_rerun) {
this.can_rerun = can_rerun;
}
}