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

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

    if (other.getApplicationName() == null ^ this.getApplicationName() == null) return false;
    if (other.getApplicationName() != null
        && other.getApplicationName().equals(this.getApplicationName()) == false) return false;
    if (other.getVersionLabel() == null ^ this.getVersionLabel() == null) return false;
    if (other.getVersionLabel() != null
        && other.getVersionLabel().equals(this.getVersionLabel()) == false) return false;
    if (other.getEnvironmentIds() == null ^ this.getEnvironmentIds() == null) return false;
    if (other.getEnvironmentIds() != null
        && other.getEnvironmentIds().equals(this.getEnvironmentIds()) == false) return false;
    if (other.getEnvironmentNames() == null ^ this.getEnvironmentNames() == null) return false;
    if (other.getEnvironmentNames() != null
        && other.getEnvironmentNames().equals(this.getEnvironmentNames()) == false) return false;
    if (other.isIncludeDeleted() == null ^ this.isIncludeDeleted() == null) return false;
    if (other.isIncludeDeleted() != null
        && other.isIncludeDeleted().equals(this.isIncludeDeleted()) == false) return false;
    if (other.getIncludedDeletedBackTo() == null ^ this.getIncludedDeletedBackTo() == null)
      return false;
    if (other.getIncludedDeletedBackTo() != null
        && other.getIncludedDeletedBackTo().equals(this.getIncludedDeletedBackTo()) == false)
      return false;
    return true;
  }
  public Request<DescribeEnvironmentsRequest> marshall(
      DescribeEnvironmentsRequest describeEnvironmentsRequest) {

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

    Request<DescribeEnvironmentsRequest> request =
        new DefaultRequest<DescribeEnvironmentsRequest>(
            describeEnvironmentsRequest, "AWSElasticBeanstalk");
    request.addParameter("Action", "DescribeEnvironments");
    request.addParameter("Version", "2010-12-01");

    if (describeEnvironmentsRequest.getApplicationName() != null) {
      request.addParameter(
          "ApplicationName",
          StringUtils.fromString(describeEnvironmentsRequest.getApplicationName()));
    }
    if (describeEnvironmentsRequest.getVersionLabel() != null) {
      request.addParameter(
          "VersionLabel", StringUtils.fromString(describeEnvironmentsRequest.getVersionLabel()));
    }

    java.util.List<String> environmentIdsList = describeEnvironmentsRequest.getEnvironmentIds();
    int environmentIdsListIndex = 1;

    for (String environmentIdsListValue : environmentIdsList) {
      if (environmentIdsListValue != null) {
        request.addParameter(
            "EnvironmentIds.member." + environmentIdsListIndex,
            StringUtils.fromString(environmentIdsListValue));
      }

      environmentIdsListIndex++;
    }

    java.util.List<String> environmentNamesList = describeEnvironmentsRequest.getEnvironmentNames();
    int environmentNamesListIndex = 1;

    for (String environmentNamesListValue : environmentNamesList) {
      if (environmentNamesListValue != null) {
        request.addParameter(
            "EnvironmentNames.member." + environmentNamesListIndex,
            StringUtils.fromString(environmentNamesListValue));
      }

      environmentNamesListIndex++;
    }
    if (describeEnvironmentsRequest.isIncludeDeleted() != null) {
      request.addParameter(
          "IncludeDeleted",
          StringUtils.fromBoolean(describeEnvironmentsRequest.isIncludeDeleted()));
    }
    if (describeEnvironmentsRequest.getIncludedDeletedBackTo() != null) {
      request.addParameter(
          "IncludedDeletedBackTo",
          StringUtils.fromDate(describeEnvironmentsRequest.getIncludedDeletedBackTo()));
    }

    return request;
  }