package me.cmoz.diver; import com.ericsson.otp.erlang.*; import com.stumbleupon.async.Callback; import lombok.RequiredArgsConstructor; import org.hbase.async.KeyValue; import java.util.ArrayList; @RequiredArgsConstructor class GenServerGetCallback implements Callback<Object, ArrayList<KeyValue>> { private static final OtpErlangAtom OK_ATOM = new OtpErlangAtom("ok"); private final OtpErlangTuple from; private final OtpMbox mbox; @Override public Object call(final ArrayList<KeyValue> data) throws Exception { final OtpErlangObject[] items = new OtpErlangObject[data.size()]; int i = 0; for (final KeyValue keyValue : data) { final OtpErlangObject[] erldata = new OtpErlangObject[] { new OtpErlangBinary(keyValue.key()), new OtpErlangBinary(keyValue.family()), new OtpErlangBinary(keyValue.qualifier()), new OtpErlangBinary(keyValue.value()), new OtpErlangLong(keyValue.timestamp()) }; items[i] = new OtpErlangTuple(erldata); i++; } final OtpErlangObject[] body = new OtpErlangObject[] { OK_ATOM, new OtpErlangList(items) }; final OtpErlangObject[] resp = new OtpErlangObject[] { from.elementAt(1), // Ref new OtpErlangTuple(body) }; mbox.send((OtpErlangPid) from.elementAt(0), new OtpErlangTuple(resp)); return null; } }