@Override
  public boolean equals(Object obj) {
    if (this == obj) return true;
    if (obj == null) return false;

    if (obj instanceof CreateLoadBalancerRequest == false) return false;
    CreateLoadBalancerRequest other = (CreateLoadBalancerRequest) obj;

    if (other.getLoadBalancerName() == null ^ this.getLoadBalancerName() == null) return false;
    if (other.getLoadBalancerName() != null
        && other.getLoadBalancerName().equals(this.getLoadBalancerName()) == false) return false;
    if (other.getListeners() == null ^ this.getListeners() == null) return false;
    if (other.getListeners() != null && other.getListeners().equals(this.getListeners()) == false)
      return false;
    if (other.getAvailabilityZones() == null ^ this.getAvailabilityZones() == null) return false;
    if (other.getAvailabilityZones() != null
        && other.getAvailabilityZones().equals(this.getAvailabilityZones()) == false) return false;
    if (other.getSubnets() == null ^ this.getSubnets() == null) return false;
    if (other.getSubnets() != null && other.getSubnets().equals(this.getSubnets()) == false)
      return false;
    if (other.getSecurityGroups() == null ^ this.getSecurityGroups() == null) return false;
    if (other.getSecurityGroups() != null
        && other.getSecurityGroups().equals(this.getSecurityGroups()) == false) return false;
    if (other.getScheme() == null ^ this.getScheme() == null) return false;
    if (other.getScheme() != null && other.getScheme().equals(this.getScheme()) == false)
      return false;
    return true;
  }
  public Request<CreateLoadBalancerRequest> marshall(
      CreateLoadBalancerRequest createLoadBalancerRequest) {

    if (createLoadBalancerRequest == null) {
      throw new AmazonClientException("Invalid argument passed to marshall(...)");
    }

    Request<CreateLoadBalancerRequest> request =
        new DefaultRequest<CreateLoadBalancerRequest>(
            createLoadBalancerRequest, "AmazonElasticLoadBalancing");
    request.addParameter("Action", "CreateLoadBalancer");
    request.addParameter("Version", "2012-06-01");
    request.setHttpMethod(HttpMethodName.POST);

    if (createLoadBalancerRequest.getLoadBalancerName() != null) {
      request.addParameter(
          "LoadBalancerName",
          StringUtils.fromString(createLoadBalancerRequest.getLoadBalancerName()));
    }

    com.amazonaws.internal.SdkInternalList<Listener> listenersList =
        (com.amazonaws.internal.SdkInternalList<Listener>) createLoadBalancerRequest.getListeners();
    if (!listenersList.isEmpty() || !listenersList.isAutoConstruct()) {
      int listenersListIndex = 1;

      for (Listener listenersListValue : listenersList) {

        if (listenersListValue.getProtocol() != null) {
          request.addParameter(
              "Listeners.member." + listenersListIndex + ".Protocol",
              StringUtils.fromString(listenersListValue.getProtocol()));
        }

        if (listenersListValue.getLoadBalancerPort() != null) {
          request.addParameter(
              "Listeners.member." + listenersListIndex + ".LoadBalancerPort",
              StringUtils.fromInteger(listenersListValue.getLoadBalancerPort()));
        }

        if (listenersListValue.getInstanceProtocol() != null) {
          request.addParameter(
              "Listeners.member." + listenersListIndex + ".InstanceProtocol",
              StringUtils.fromString(listenersListValue.getInstanceProtocol()));
        }

        if (listenersListValue.getInstancePort() != null) {
          request.addParameter(
              "Listeners.member." + listenersListIndex + ".InstancePort",
              StringUtils.fromInteger(listenersListValue.getInstancePort()));
        }

        if (listenersListValue.getSSLCertificateId() != null) {
          request.addParameter(
              "Listeners.member." + listenersListIndex + ".SSLCertificateId",
              StringUtils.fromString(listenersListValue.getSSLCertificateId()));
        }
        listenersListIndex++;
      }
    }

    com.amazonaws.internal.SdkInternalList<String> availabilityZonesList =
        (com.amazonaws.internal.SdkInternalList<String>)
            createLoadBalancerRequest.getAvailabilityZones();
    if (!availabilityZonesList.isEmpty() || !availabilityZonesList.isAutoConstruct()) {
      int availabilityZonesListIndex = 1;

      for (String availabilityZonesListValue : availabilityZonesList) {
        if (availabilityZonesListValue != null) {
          request.addParameter(
              "AvailabilityZones.member." + availabilityZonesListIndex,
              StringUtils.fromString(availabilityZonesListValue));
        }
        availabilityZonesListIndex++;
      }
    }

    com.amazonaws.internal.SdkInternalList<String> subnetsList =
        (com.amazonaws.internal.SdkInternalList<String>) createLoadBalancerRequest.getSubnets();
    if (!subnetsList.isEmpty() || !subnetsList.isAutoConstruct()) {
      int subnetsListIndex = 1;

      for (String subnetsListValue : subnetsList) {
        if (subnetsListValue != null) {
          request.addParameter(
              "Subnets.member." + subnetsListIndex, StringUtils.fromString(subnetsListValue));
        }
        subnetsListIndex++;
      }
    }

    com.amazonaws.internal.SdkInternalList<String> securityGroupsList =
        (com.amazonaws.internal.SdkInternalList<String>)
            createLoadBalancerRequest.getSecurityGroups();
    if (!securityGroupsList.isEmpty() || !securityGroupsList.isAutoConstruct()) {
      int securityGroupsListIndex = 1;

      for (String securityGroupsListValue : securityGroupsList) {
        if (securityGroupsListValue != null) {
          request.addParameter(
              "SecurityGroups.member." + securityGroupsListIndex,
              StringUtils.fromString(securityGroupsListValue));
        }
        securityGroupsListIndex++;
      }
    }

    if (createLoadBalancerRequest.getScheme() != null) {
      request.addParameter("Scheme", StringUtils.fromString(createLoadBalancerRequest.getScheme()));
    }

    com.amazonaws.internal.SdkInternalList<Tag> tagsList =
        (com.amazonaws.internal.SdkInternalList<Tag>) createLoadBalancerRequest.getTags();
    if (!tagsList.isEmpty() || !tagsList.isAutoConstruct()) {
      int tagsListIndex = 1;

      for (Tag tagsListValue : tagsList) {

        if (tagsListValue.getKey() != null) {
          request.addParameter(
              "Tags.member." + tagsListIndex + ".Key",
              StringUtils.fromString(tagsListValue.getKey()));
        }

        if (tagsListValue.getValue() != null) {
          request.addParameter(
              "Tags.member." + tagsListIndex + ".Value",
              StringUtils.fromString(tagsListValue.getValue()));
        }
        tagsListIndex++;
      }
    }

    return request;
  }