package org.scribble.del.local; import org.scribble.ast.MessageSigNode; import org.scribble.ast.ScribNode; import org.scribble.ast.local.LAccept; import org.scribble.main.ScribbleException; import org.scribble.model.endpoint.actions.EAccept; 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; import org.scribble.visit.context.UnguardedChoiceDoProjectionChecker; import org.scribble.visit.context.env.UnguardedChoiceDoEnv; import org.scribble.visit.wf.ExplicitCorrelationChecker; import org.scribble.visit.wf.env.ExplicitCorrelationEnv; public class LAcceptDel extends LConnectionActionDel implements LSimpleInteractionNodeDel { @Override public LAccept leaveEGraphBuilding(ScribNode parent, ScribNode child, EGraphBuilder builder, ScribNode visited) throws ScribbleException { LAccept la = (LAccept) visited; Role peer = la.src.toName(); MessageId<?> mid = la.msg.toMessage().getId(); Payload payload = la.msg.isMessageSigNode() // Hacky? ? ((MessageSigNode) la.msg).payloads.toPayload() : Payload.EMPTY_PAYLOAD; builder.util.addEdge(builder.util.getEntry(), new EAccept(peer, mid, payload), builder.util.getExit()); //builder.builder.addEdge(builder.builder.getEntry(), new Accept(peer), builder.builder.getExit()); ////builder.builder.addEdge(builder.builder.getEntry(), Receive.get(peer, mid, payload), builder.builder.getExit()); return (LAccept) super.leaveEGraphBuilding(parent, child, builder, la); } @Override public void enterProjectedChoiceSubjectFixing(ScribNode parent, ScribNode child, ProjectedChoiceSubjectFixer fixer) { fixer.setChoiceSubject(((LAccept) child).src.toName()); } @Override public void enterUnguardedChoiceDoProjectionCheck(ScribNode parent, ScribNode child, UnguardedChoiceDoProjectionChecker checker) throws ScribbleException { super.enterUnguardedChoiceDoProjectionCheck(parent, child, checker); LAccept la = (LAccept) child; UnguardedChoiceDoEnv env = checker.popEnv(); env = env.setChoiceSubject(la.src.toName()); checker.pushEnv(env); } @Override public LAccept leaveExplicitCorrelationCheck(ScribNode parent, ScribNode child, ExplicitCorrelationChecker checker, ScribNode visited) throws ScribbleException { LAccept la = (LAccept) visited; ExplicitCorrelationEnv env = checker.popEnv(); if (!env.canAccept()) { //throw new ScribbleException("Invalid accept action: " + la); checker.job.warningPrintln("Session correlation warning for: " + la); } checker.pushEnv(env.disableAccept()); return la; } }