public String getRequestString() throws MQException {
  RequestBuilder req = new RequestBuilder();
  
  req.sessionNumber('0', 3)
     .version('0', 3)
     .transaction('X', 4)
     .language('X', 2)
     .callersPhoneNumber('0', 16)
     .customerNumber(' ', 16)
     .nrUnsuccessfulCalls('0', 3);
     
  return req.build();
}

private class RequestBuilder {
  private StringBuilder b = new StringBuilder();
  
  public RequestBuilder callersPhoneNumber(char pad, int width) {
    add(Helper.leftRightFilled(true, getCallersPhoneNumber(), pad, width));
    return this;
  }
  
  public RequestBuilder customerNumber(char pad, int width) throws MQException {
    add(Helper.leftRightFilled(false, dynamicSettingMQ.getCustomerNumber(), pad, width));
    return this;
  }
  
  public RequestBuilder language(char pad, int width) throws MQException {
    add(Helper.leftRightFilled(true, getLanguage(), pad, width));
    return this;
  }
  
  public RequestBuilder nrUnsuccessfulCalls(char pad, int width) throws MQException {
    add(Helper.leftRightFilled(true, dynamicSettingMQ.getNumberOfUnsucceededCalls(), pad, width));
    return this;
  }
  
  public RequestBuilder sessionNumber(char pad, int width) throws MQException {
    add(Helper.leftRightFilled(true, getSessionNumberAndIncreaseIt(), pad, width));
    return this;
  }
  
  public RequestBuilder transaction(char pad, int width) throws MQException {
    add(Helper.leftRightFilled(true, getTransaction(), pad, width));
    return this;
  }
  
  public RequestBuilder version(char pad, int width) throws MQException {
    add(Helper.leftRightFilled(true, getVersion(), pad, width));
    return this;
  }
  
  public String build() {
    return b.toString();
  }
  
  private void add(String str) {
    b.append(str);
  }
}