package org.erlide.tracing.core.mvc.model;
import java.util.HashSet;
import java.util.Set;
import org.erlide.tracing.core.ProcessFlag;
import com.ericsson.otp.erlang.OtpErlangPid;
import com.ericsson.otp.erlang.OtpErlangTuple;
/**
* Traced process.
*
* @author Piotr Dorobisz
*
*/
public class TracedProcess {
// fields in tuple describing process
private static final int PID = 0;
private static final int NAME = 1;
private static final int INITIAL_CALL = 2;
private static final int NODE_NAME = 3;
private boolean selected;
private final String name;
private final OtpErlangPid pid;
private final String initialCall;
private final String node;
private final Set<ProcessFlag> flags = new HashSet<>();
/**
* Creates process from tuple. List of tuples describing all processes is
* returned as a result of <code>erlide_proclist:process_list/0</code> call.
*
* @param tuple
* tuple describing process
*/
public TracedProcess(final OtpErlangTuple tuple) {
name = tuple.elementAt(NAME).toString();
pid = (OtpErlangPid) tuple.elementAt(PID);
initialCall = tuple.elementAt(INITIAL_CALL).toString();
node = tuple.elementAt(NODE_NAME).toString();
}
public boolean isSelected() {
return selected;
}
public void setSelected(final boolean selected) {
this.selected = selected;
}
public String getName() {
return name;
}
public OtpErlangPid getPid() {
return pid;
}
public String getInitialCall() {
return initialCall;
}
public String getNode() {
return node;
}
public void setFlag(final ProcessFlag flag) {
flags.add(flag);
}
public void unSetFlag(final ProcessFlag flag) {
flags.remove(flag);
}
public boolean hasFlag(final ProcessFlag flag) {
return flags.contains(flag);
}
public Set<ProcessFlag> getFlags() {
return flags;
}
}