public @Nonnull int getOperationStatus(String requestID)
      throws CloudException, InternalException {
    ProviderContext ctx = provider.getContext();
    Document doc = getAsXML(ctx.getAccountNumber(), "/operations/" + requestID);

    if (doc == null) {
      return -2;
    }

    NodeList entries = doc.getElementsByTagName("Operation");
    Node entry = entries.item(0);

    NodeList s = entry.getChildNodes();

    String status = "";
    String httpCode = "";

    for (int i = 0; i < s.getLength(); i++) {
      Node attribute = s.item(i);
      if (attribute.getNodeType() == Node.TEXT_NODE) {
        continue;
      }
      if (attribute.getNodeName().equalsIgnoreCase("status") && attribute.hasChildNodes()) {
        status = attribute.getFirstChild().getNodeValue().trim();
        continue;
      }
      if (status.length() > 0 && !status.equalsIgnoreCase("inProgress")) {
        if (attribute.getNodeName().equalsIgnoreCase("httpstatuscode")
            && attribute.hasChildNodes()) {
          httpCode = attribute.getFirstChild().getNodeValue().trim();
        }
      }
    }

    if (status.equalsIgnoreCase("succeeded")) {
      return HttpServletResponse.SC_OK;
    } else if (status.equalsIgnoreCase("failed")) {
      String errMsg = checkError(s, httpCode);
      throw new CloudException(errMsg);
    }
    return -1;
  }