diff options
Diffstat (limited to 'sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/MessageHelper.java')
-rw-r--r-- | sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/MessageHelper.java | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/MessageHelper.java b/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/MessageHelper.java new file mode 100644 index 0000000000..55134782d5 --- /dev/null +++ b/sandbox/wjaniszewski/binding-erlang-runtime/src/main/java/org/apache/tuscany/sca/binding/erlang/impl/MessageHelper.java @@ -0,0 +1,93 @@ +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; + } +} |