/** * Returns a parseable (using {@link #decode(String)}) string representation of this trace node. * * @return A string representation of this tree. */ public String encode() { StringBuilder ret = new StringBuilder(); encode(ret); return ret.toString(); }
/** * Writes a parseable string representation of this trace node to the given string builder. * * @param ret The string builder to write to. */ private void encode(StringBuilder ret) { if (note != null) { ret.append("["); for (int i = 0, len = note.length(); i < len; ++i) { char c = note.charAt(i); if (c == '\\' || c == ']') { ret.append('\\'); } ret.append(note.charAt(i)); } ret.append("]"); } else { ret.append(strict ? "(" : "{"); for (TraceNode child : children) { child.encode(ret); } ret.append(strict ? ")" : "}"); } }
@Override public void run() { Reply reply = decode(envelope.reply.getProtocol(), payload, Reply.class); reply.setRetryDelay(envelope.reply.getRetryDelay()); reply.getTrace().getRoot().addChild(TraceNode.decode(envelope.reply.getTrace().getRoot().encode())); for (int i = 0, len = envelope.reply.getNumErrors(); i < len; ++i) { Error error = envelope.reply.getError(i); reply.addError(new Error(error.getCode(), error.getMessage(), error.getService() != null ? error.getService() : envelope.sender.hostId)); } owner.deliverReply(reply, envelope.parent.recipient); } });
@Override protected void createResponse(Values ret, Reply reply, Version version, byte [] payload) { int[] eCodes = new int[reply.getNumErrors()]; String[] eMessages = new String[reply.getNumErrors()]; String[] eServices = new String[reply.getNumErrors()]; for (int i = 0; i < reply.getNumErrors(); ++i) { Error error = reply.getError(i); eCodes[i] = error.getCode(); eMessages[i] = error.getMessage(); eServices[i] = error.getService() != null ? error.getService() : ""; } ret.add(new StringValue(version.toString())); ret.add(new DoubleValue(reply.getRetryDelay())); ret.add(new Int32Array(eCodes)); ret.add(new StringArray(eMessages)); ret.add(new StringArray(eServices)); ret.add(new StringValue(reply.getProtocol())); ret.add(new DataValue(payload)); ret.add(new StringValue(reply.getTrace().getRoot() != null ? reply.getTrace().getRoot().encode() : "")); }
root.setData(BLOB_F, payload); if (reply.getTrace().getLevel() > 0) { root.setString(TRACE_F, reply.getTrace().getRoot().encode());