public Request<CreateEnvironmentRequest> marshall(
      CreateEnvironmentRequest createEnvironmentRequest) {
    Request<CreateEnvironmentRequest> request =
        new DefaultRequest<CreateEnvironmentRequest>(
            createEnvironmentRequest, "AWSElasticBeanstalk");
    request.addParameter("Action", "CreateEnvironment");
    request.addParameter("Version", "2010-12-01");
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getApplicationName() != null) {
        request.addParameter(
            "ApplicationName",
            StringUtils.fromString(createEnvironmentRequest.getApplicationName()));
      }
    }
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getVersionLabel() != null) {
        request.addParameter(
            "VersionLabel", StringUtils.fromString(createEnvironmentRequest.getVersionLabel()));
      }
    }
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getEnvironmentName() != null) {
        request.addParameter(
            "EnvironmentName",
            StringUtils.fromString(createEnvironmentRequest.getEnvironmentName()));
      }
    }
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getTemplateName() != null) {
        request.addParameter(
            "TemplateName", StringUtils.fromString(createEnvironmentRequest.getTemplateName()));
      }
    }
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getSolutionStackName() != null) {
        request.addParameter(
            "SolutionStackName",
            StringUtils.fromString(createEnvironmentRequest.getSolutionStackName()));
      }
    }
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getCNAMEPrefix() != null) {
        request.addParameter(
            "CNAMEPrefix", StringUtils.fromString(createEnvironmentRequest.getCNAMEPrefix()));
      }
    }
    if (createEnvironmentRequest != null) {
      if (createEnvironmentRequest.getDescription() != null) {
        request.addParameter(
            "Description", StringUtils.fromString(createEnvironmentRequest.getDescription()));
      }
    }

    if (createEnvironmentRequest != null) {
      java.util.List<ConfigurationOptionSetting> optionSettingsList =
          createEnvironmentRequest.getOptionSettings();
      int optionSettingsListIndex = 1;
      for (ConfigurationOptionSetting optionSettingsListValue : optionSettingsList) {
        if (optionSettingsListValue != null) {
          if (optionSettingsListValue.getNamespace() != null) {
            request.addParameter(
                "OptionSettings.member." + optionSettingsListIndex + ".Namespace",
                StringUtils.fromString(optionSettingsListValue.getNamespace()));
          }
        }
        if (optionSettingsListValue != null) {
          if (optionSettingsListValue.getOptionName() != null) {
            request.addParameter(
                "OptionSettings.member." + optionSettingsListIndex + ".OptionName",
                StringUtils.fromString(optionSettingsListValue.getOptionName()));
          }
        }
        if (optionSettingsListValue != null) {
          if (optionSettingsListValue.getValue() != null) {
            request.addParameter(
                "OptionSettings.member." + optionSettingsListIndex + ".Value",
                StringUtils.fromString(optionSettingsListValue.getValue()));
          }
        }

        optionSettingsListIndex++;
      }
    }

    if (createEnvironmentRequest != null) {
      java.util.List<OptionSpecification> optionsToRemoveList =
          createEnvironmentRequest.getOptionsToRemove();
      int optionsToRemoveListIndex = 1;
      for (OptionSpecification optionsToRemoveListValue : optionsToRemoveList) {
        if (optionsToRemoveListValue != null) {
          if (optionsToRemoveListValue.getNamespace() != null) {
            request.addParameter(
                "OptionsToRemove.member." + optionsToRemoveListIndex + ".Namespace",
                StringUtils.fromString(optionsToRemoveListValue.getNamespace()));
          }
        }
        if (optionsToRemoveListValue != null) {
          if (optionsToRemoveListValue.getOptionName() != null) {
            request.addParameter(
                "OptionsToRemove.member." + optionsToRemoveListIndex + ".OptionName",
                StringUtils.fromString(optionsToRemoveListValue.getOptionName()));
          }
        }

        optionsToRemoveListIndex++;
      }
    }

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

    if (obj instanceof CreateEnvironmentRequest == false) return false;
    CreateEnvironmentRequest other = (CreateEnvironmentRequest) 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.getEnvironmentName() == null ^ this.getEnvironmentName() == null) return false;
    if (other.getEnvironmentName() != null
        && other.getEnvironmentName().equals(this.getEnvironmentName()) == false) return false;
    if (other.getTemplateName() == null ^ this.getTemplateName() == null) return false;
    if (other.getTemplateName() != null
        && other.getTemplateName().equals(this.getTemplateName()) == false) return false;
    if (other.getSolutionStackName() == null ^ this.getSolutionStackName() == null) return false;
    if (other.getSolutionStackName() != null
        && other.getSolutionStackName().equals(this.getSolutionStackName()) == false) return false;
    if (other.getCNAMEPrefix() == null ^ this.getCNAMEPrefix() == null) return false;
    if (other.getCNAMEPrefix() != null
        && other.getCNAMEPrefix().equals(this.getCNAMEPrefix()) == false) return false;
    if (other.getDescription() == null ^ this.getDescription() == null) return false;
    if (other.getDescription() != null
        && other.getDescription().equals(this.getDescription()) == false) return false;
    if (other.getOptionSettings() == null ^ this.getOptionSettings() == null) return false;
    if (other.getOptionSettings() != null
        && other.getOptionSettings().equals(this.getOptionSettings()) == false) return false;
    if (other.getOptionsToRemove() == null ^ this.getOptionsToRemove() == null) return false;
    if (other.getOptionsToRemove() != null
        && other.getOptionsToRemove().equals(this.getOptionsToRemove()) == false) return false;
    return true;
  }