public static OperationStatus parse(String singleLine) {
        // Do note there is specifically left room for more arguments after
        // the first in the serialized form.
        Iterator<String> input = spaceSep.split(singleLine.trim()).iterator();
        String operationId;
        ErrorCode errorCode;
        String message;
        String traceMessage = "";

        operationId = Encoder.decode(input.next(), new StringBuilder())
                             .toString();
        errorCode = ErrorCode.valueOf(Encoder.decode(input.next(),
                                                     new StringBuilder()).toString());

        message = Encoder.decode(input.next(), new StringBuilder()).toString();
        // We are backwards compatible, meaning it is ok not to supply the last argument.
        boolean isConditionNotMet = false;
        if (message.startsWith(IS_CONDITION_NOT_MET)) {
            message = message.replaceFirst(IS_CONDITION_NOT_MET, "");
            isConditionNotMet = true;
        }
        if (input.hasNext()) {
            traceMessage = Encoder.decode(input.next(), new StringBuilder()).toString();
        }
        return new OperationStatus(message, operationId, errorCode, isConditionNotMet, traceMessage);
    }
Parse a single rendered OperationStatus string. White space may be padded after
and before the given status.

@param singleLine
           a rendered OperationStatus
@return an OperationStatus instance reflecting the input
@throws IllegalArgumentException
            if there are illegal input data characters or the status
            element has no corresponding value in the ErrorCode
            enumeration
vespaclient-container-plugin/src/main/java/com/yahoo/vespa/http/server/OperationStatus.java