package org.scribble.del.local;
import org.scribble.ast.MessageSigNode;
import org.scribble.ast.ScribNode;
import org.scribble.ast.local.LConnect;
import org.scribble.ast.name.simple.RoleNode;
import org.scribble.main.ScribbleException;
import org.scribble.model.endpoint.actions.EConnect;
import org.scribble.sesstype.Payload;
import org.scribble.sesstype.name.MessageId;
import org.scribble.sesstype.name.Role;
import org.scribble.visit.context.EGraphBuilder;
import org.scribble.visit.context.ProjectedChoiceSubjectFixer;
public class LConnectDel extends LConnectionActionDel implements LSimpleInteractionNodeDel
{
@Override
public LConnect leaveEGraphBuilding(ScribNode parent, ScribNode child, EGraphBuilder graph, ScribNode visited) throws ScribbleException
{
LConnect lc = (LConnect) visited;
RoleNode dest = lc.dest;
Role peer = dest.toName();
MessageId<?> mid = lc.msg.toMessage().getId();
Payload payload = lc.msg.isMessageSigNode() // Hacky?
? ((MessageSigNode) lc.msg).payloads.toPayload()
: Payload.EMPTY_PAYLOAD;
graph.util.addEdge(graph.util.getEntry(), new EConnect(peer, mid, payload), graph.util.getExit());
//graph.builder.addEdge(graph.builder.getEntry(), new Connect(peer), graph.builder.getExit());
////builder.builder.addEdge(builder.builder.getEntry(), Send.get(peer, mid, payload), builder.builder.getExit());
return (LConnect) super.leaveEGraphBuilding(parent, child, graph, lc);
}
@Override
public void enterProjectedChoiceSubjectFixing(ScribNode parent, ScribNode child, ProjectedChoiceSubjectFixer fixer)
{
fixer.setChoiceSubject(((LConnect) child).src.toName());
}
}