code: public synchronized StepResponse getRangeRequest(final String idRegex,
        final long start, final long end, String... attributes) {
      RangeRequestMessage req = new RangeRequestMessage();
      req.setIdRegex(idRegex);
      req.setBeginTimestamp(start);
      req.setEndTimestamp(end);
      if (attributes != null) {
        req.setAttributeRegexes(attributes);
      }
      StepResponse resp = new StepResponse(this, 0);
      try {
        while (!this.isReady) {
          log.debug("Trying to wait until connection is ready.");
          synchronized (this) {
            try {
              this.wait();
            } catch (InterruptedException ie) {
              // Ignored
            }
          }
        }
        long reqId = this.wmi.sendMessage(req);
        resp.setTicketNumber(reqId);
        this.outstandingSteps.put(Long.valueOf(reqId), resp);
        log.info("Binding Tix #{} to {}", Long.valueOf(reqId), resp);
  
        return resp;
      } catch (Exception e) {
        resp.setError(e);
        return resp;
      }
    }
docs: Sends a range request to the world model for the specified Identifier
  regular expression, Attribute regular expressions, between the start and
  end times.
  
  @param idRegex
  regular expression for matching the identifier.
  @param start
  the beginning of the range..
  @param end
  the end of the range.
  @param attributes
  the attribute regular expressions to request
  @return a {@code StepResponse} for the request.