package org.apache.tuscany.sca.binding.erlang.impl; import com.ericsson.otp.erlang.OtpErlangAtom; import com.ericsson.otp.erlang.OtpErlangList; import com.ericsson.otp.erlang.OtpErlangObject; import com.ericsson.otp.erlang.OtpErlangPid; import com.ericsson.otp.erlang.OtpErlangRef; import com.ericsson.otp.erlang.OtpErlangTuple; public class MessageHelper { private static String ATOM_BADRPC = "badrpc"; private static String ATOM_EXIT = "EXIT"; private static String ATOM_UNDEF = "undef"; public static OtpErlangObject functionUndefMessage(String module, String function, OtpErlangList args, String tuscanyMsg) { OtpErlangObject[] args4 = new OtpErlangObject[3]; args4[0] = new OtpErlangAtom(module); args4[1] = new OtpErlangAtom(function); args4[2] = args; OtpErlangObject[] args3 = new OtpErlangObject[2]; args3[0] = new OtpErlangTuple(args4); args3[1] = new OtpErlangAtom(tuscanyMsg); OtpErlangObject[] args2 = new OtpErlangObject[2]; args2[0] = new OtpErlangAtom(ATOM_UNDEF); args2[1] = new OtpErlangList(args3); OtpErlangObject[] args1 = new OtpErlangObject[2]; args1[0] = new OtpErlangAtom(ATOM_EXIT); args1[1] = new OtpErlangTuple(args2); OtpErlangTuple result = new OtpErlangTuple(args1); return result; } public static boolean isfunctionUndefMessage(OtpErlangObject msg) { if (msg.getClass().equals(OtpErlangTuple.class)) { OtpErlangTuple tupleMsg = (OtpErlangTuple) msg; if (tupleMsg.arity() == 2 && tupleMsg.elementAt(0).getClass().equals( OtpErlangAtom.class) && tupleMsg.elementAt(1).getClass().equals( OtpErlangTuple.class) && ((OtpErlangAtom) tupleMsg.elementAt(0)).atomValue() .equals(ATOM_BADRPC)) { OtpErlangTuple badrpcTuple = (OtpErlangTuple) tupleMsg .elementAt(1); if (badrpcTuple.arity() == 2 && badrpcTuple.elementAt(0).getClass().equals( OtpErlangAtom.class) && badrpcTuple.elementAt(1).getClass().equals( OtpErlangTuple.class) && ((OtpErlangAtom) badrpcTuple.elementAt(0)) .atomValue().equals(ATOM_EXIT)) { OtpErlangTuple exitTuple = (OtpErlangTuple) badrpcTuple .elementAt(1); if (exitTuple.arity() == 2 && exitTuple.elementAt(0).getClass().equals( OtpErlangAtom.class) && ((OtpErlangAtom) exitTuple.elementAt(0)) .atomValue().equals(ATOM_UNDEF)) { return true; } } } } return false; } public static OtpErlangTuple rpcMessage(OtpErlangPid senderPid, OtpErlangRef ref, String module, String function, OtpErlangList args) { OtpErlangObject[] args3 = new OtpErlangObject[5]; args3[0] = new OtpErlangAtom("call"); args3[1] = new OtpErlangAtom(module); args3[2] = new OtpErlangAtom(function); args3[3] = args; args3[4] = senderPid; OtpErlangObject[] args2 = new OtpErlangObject[2]; args2[0] = senderPid; args2[1] = ref; OtpErlangObject[] args1 = new OtpErlangObject[3]; args1[0] = new OtpErlangAtom("$gen_call"); args1[1] = new OtpErlangTuple(args2); args1[2] = new OtpErlangTuple(args3); OtpErlangTuple result = new OtpErlangTuple(args1); return result; } }