/*
 * Cloudera Manager API
 * <h1>Cloudera Manager API v57</h1>       <p>Introduced in Cloudera Manager 7.13.1</p>       <p><a href=\"http://www.cloudera.com/documentation.html\">Cloudera Product Documentation</a></p>
 *
 * OpenAPI spec version: 7.13.1
 * 
 *
 * NOTE: This class is auto generated by the swagger code generator program.
 * https://github.com/swagger-api/swagger-codegen.git
 * Do not edit the class manually.
 */

package com.cloudera.api.swagger.model;

import java.util.Objects;
import java.util.Arrays;
import com.cloudera.api.swagger.model.ApiHiveTable;
import com.cloudera.api.swagger.model.ApiMapEntry;
import com.cloudera.api.swagger.model.ApiServiceRef;
import com.cloudera.api.swagger.model.IcebergReplicationSafetyValve;
import com.cloudera.api.swagger.model.IcebergReplicationYarnOptions;
import com.cloudera.api.swagger.model.SourceStorageFilter;
import com.google.gson.TypeAdapter;
import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import com.google.gson.stream.JsonReader;
import com.google.gson.stream.JsonWriter;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
 * Replication Arguments for Iceberg Replication policies
 */
@Schema(description = "Replication Arguments for Iceberg Replication policies")
@javax.annotation.Generated(value = "io.swagger.codegen.v3.generators.java.JavaClientCodegen", date = "2026-05-19T08:29:59.033Z[Etc/UTC]")

public class ApiIcebergReplicationArguments {
  @SerializedName("sourceIcebergReplicationService")
  private ApiServiceRef sourceIcebergReplicationService = null;

  @SerializedName("policyName")
  private String policyName = null;

  @SerializedName("includedTableFilters")
  private List<ApiHiveTable> includedTableFilters = null;

  @SerializedName("excludedTableFilters")
  private List<ApiHiveTable> excludedTableFilters = null;

  @SerializedName("batchSize")
  private java.math.BigDecimal batchSize = null;

  @SerializedName("proxyName")
  private String proxyName = null;

  @SerializedName("exportYarnOptions")
  private IcebergReplicationYarnOptions exportYarnOptions = null;

  @SerializedName("xferYarnOptions")
  private IcebergReplicationYarnOptions xferYarnOptions = null;

  @SerializedName("syncYarnOptions")
  private IcebergReplicationYarnOptions syncYarnOptions = null;

  @SerializedName("shouldReplicateColumnStats")
  private Boolean shouldReplicateColumnStats = null;

  @SerializedName("atlasReplicationNeeded")
  private Boolean atlasReplicationNeeded = null;

  @SerializedName("atlasChangeMarker")
  private String atlasChangeMarker = null;

  @SerializedName("safetyValvesSource")
  private Map<String, IcebergReplicationSafetyValve> safetyValvesSource = null;

  @SerializedName("safetyValvesTarget")
  private Map<String, IcebergReplicationSafetyValve> safetyValvesTarget = null;

  @SerializedName("runDistcpOnSource")
  private Boolean runDistcpOnSource = null;

  @SerializedName("altStagingLocation")
  private String altStagingLocation = null;

  @SerializedName("forceTest")
  private Boolean forceTest = null;

  @SerializedName("jvmOptsForExport")
  private String jvmOptsForExport = null;

  @SerializedName("jvmOptsForXfer")
  private String jvmOptsForXfer = null;

  @SerializedName("jvmOptsForSync")
  private String jvmOptsForSync = null;

  @SerializedName("locationMapping")
  private List<ApiMapEntry> locationMapping = null;

  @SerializedName("sourceStorageFilter")
  private SourceStorageFilter sourceStorageFilter = null;

  @SerializedName("proxyNameOnSource")
  private String proxyNameOnSource = null;

  public ApiIcebergReplicationArguments sourceIcebergReplicationService(ApiServiceRef sourceIcebergReplicationService) {
    this.sourceIcebergReplicationService = sourceIcebergReplicationService;
    return this;
  }

   /**
   * Get sourceIcebergReplicationService
   * @return sourceIcebergReplicationService
  **/
  @Schema(description = "")
  public ApiServiceRef getSourceIcebergReplicationService() {
    return sourceIcebergReplicationService;
  }

  public void setSourceIcebergReplicationService(ApiServiceRef sourceIcebergReplicationService) {
    this.sourceIcebergReplicationService = sourceIcebergReplicationService;
  }

  public ApiIcebergReplicationArguments policyName(String policyName) {
    this.policyName = policyName;
    return this;
  }

   /**
   * Get policyName
   * @return policyName
  **/
  @Schema(description = "")
  public String getPolicyName() {
    return policyName;
  }

  public void setPolicyName(String policyName) {
    this.policyName = policyName;
  }

  public ApiIcebergReplicationArguments includedTableFilters(List<ApiHiveTable> includedTableFilters) {
    this.includedTableFilters = includedTableFilters;
    return this;
  }

  public ApiIcebergReplicationArguments addIncludedTableFiltersItem(ApiHiveTable includedTableFiltersItem) {
    if (this.includedTableFilters == null) {
      this.includedTableFilters = new ArrayList<>();
    }
    this.includedTableFilters.add(includedTableFiltersItem);
    return this;
  }

   /**
   * Get includedTableFilters
   * @return includedTableFilters
  **/
  @Schema(description = "")
  public List<ApiHiveTable> getIncludedTableFilters() {
    return includedTableFilters;
  }

  public void setIncludedTableFilters(List<ApiHiveTable> includedTableFilters) {
    this.includedTableFilters = includedTableFilters;
  }

  public ApiIcebergReplicationArguments excludedTableFilters(List<ApiHiveTable> excludedTableFilters) {
    this.excludedTableFilters = excludedTableFilters;
    return this;
  }

  public ApiIcebergReplicationArguments addExcludedTableFiltersItem(ApiHiveTable excludedTableFiltersItem) {
    if (this.excludedTableFilters == null) {
      this.excludedTableFilters = new ArrayList<>();
    }
    this.excludedTableFilters.add(excludedTableFiltersItem);
    return this;
  }

   /**
   * Get excludedTableFilters
   * @return excludedTableFilters
  **/
  @Schema(description = "")
  public List<ApiHiveTable> getExcludedTableFilters() {
    return excludedTableFilters;
  }

  public void setExcludedTableFilters(List<ApiHiveTable> excludedTableFilters) {
    this.excludedTableFilters = excludedTableFilters;
  }

  public ApiIcebergReplicationArguments batchSize(java.math.BigDecimal batchSize) {
    this.batchSize = batchSize;
    return this;
  }

   /**
   * Get batchSize
   * @return batchSize
  **/
  @Schema(description = "")
  public java.math.BigDecimal getBatchSize() {
    return batchSize;
  }

  public void setBatchSize(java.math.BigDecimal batchSize) {
    this.batchSize = batchSize;
  }

  public ApiIcebergReplicationArguments proxyName(String proxyName) {
    this.proxyName = proxyName;
    return this;
  }

   /**
   * Get proxyName
   * @return proxyName
  **/
  @Schema(description = "")
  public String getProxyName() {
    return proxyName;
  }

  public void setProxyName(String proxyName) {
    this.proxyName = proxyName;
  }

  public ApiIcebergReplicationArguments exportYarnOptions(IcebergReplicationYarnOptions exportYarnOptions) {
    this.exportYarnOptions = exportYarnOptions;
    return this;
  }

   /**
   * Get exportYarnOptions
   * @return exportYarnOptions
  **/
  @Schema(description = "")
  public IcebergReplicationYarnOptions getExportYarnOptions() {
    return exportYarnOptions;
  }

  public void setExportYarnOptions(IcebergReplicationYarnOptions exportYarnOptions) {
    this.exportYarnOptions = exportYarnOptions;
  }

  public ApiIcebergReplicationArguments xferYarnOptions(IcebergReplicationYarnOptions xferYarnOptions) {
    this.xferYarnOptions = xferYarnOptions;
    return this;
  }

   /**
   * Get xferYarnOptions
   * @return xferYarnOptions
  **/
  @Schema(description = "")
  public IcebergReplicationYarnOptions getXferYarnOptions() {
    return xferYarnOptions;
  }

  public void setXferYarnOptions(IcebergReplicationYarnOptions xferYarnOptions) {
    this.xferYarnOptions = xferYarnOptions;
  }

  public ApiIcebergReplicationArguments syncYarnOptions(IcebergReplicationYarnOptions syncYarnOptions) {
    this.syncYarnOptions = syncYarnOptions;
    return this;
  }

   /**
   * Get syncYarnOptions
   * @return syncYarnOptions
  **/
  @Schema(description = "")
  public IcebergReplicationYarnOptions getSyncYarnOptions() {
    return syncYarnOptions;
  }

  public void setSyncYarnOptions(IcebergReplicationYarnOptions syncYarnOptions) {
    this.syncYarnOptions = syncYarnOptions;
  }

  public ApiIcebergReplicationArguments shouldReplicateColumnStats(Boolean shouldReplicateColumnStats) {
    this.shouldReplicateColumnStats = shouldReplicateColumnStats;
    return this;
  }

   /**
   * Get shouldReplicateColumnStats
   * @return shouldReplicateColumnStats
  **/
  @Schema(description = "")
  public Boolean isShouldReplicateColumnStats() {
    return shouldReplicateColumnStats;
  }

  public void setShouldReplicateColumnStats(Boolean shouldReplicateColumnStats) {
    this.shouldReplicateColumnStats = shouldReplicateColumnStats;
  }

  public ApiIcebergReplicationArguments atlasReplicationNeeded(Boolean atlasReplicationNeeded) {
    this.atlasReplicationNeeded = atlasReplicationNeeded;
    return this;
  }

   /**
   * Get atlasReplicationNeeded
   * @return atlasReplicationNeeded
  **/
  @Schema(required = true, description = "")
  public Boolean isAtlasReplicationNeeded() {
    return atlasReplicationNeeded;
  }

  public void setAtlasReplicationNeeded(Boolean atlasReplicationNeeded) {
    this.atlasReplicationNeeded = atlasReplicationNeeded;
  }

  public ApiIcebergReplicationArguments atlasChangeMarker(String atlasChangeMarker) {
    this.atlasChangeMarker = atlasChangeMarker;
    return this;
  }

   /**
   * Get atlasChangeMarker
   * @return atlasChangeMarker
  **/
  @Schema(description = "")
  public String getAtlasChangeMarker() {
    return atlasChangeMarker;
  }

  public void setAtlasChangeMarker(String atlasChangeMarker) {
    this.atlasChangeMarker = atlasChangeMarker;
  }

  public ApiIcebergReplicationArguments safetyValvesSource(Map<String, IcebergReplicationSafetyValve> safetyValvesSource) {
    this.safetyValvesSource = safetyValvesSource;
    return this;
  }

  public ApiIcebergReplicationArguments putSafetyValvesSourceItem(String key, IcebergReplicationSafetyValve safetyValvesSourceItem) {
    if (this.safetyValvesSource == null) {
      this.safetyValvesSource = new HashMap<>();
    }
    this.safetyValvesSource.put(key, safetyValvesSourceItem);
    return this;
  }

   /**
   * Get safetyValvesSource
   * @return safetyValvesSource
  **/
  @Schema(description = "")
  public Map<String, IcebergReplicationSafetyValve> getSafetyValvesSource() {
    return safetyValvesSource;
  }

  public void setSafetyValvesSource(Map<String, IcebergReplicationSafetyValve> safetyValvesSource) {
    this.safetyValvesSource = safetyValvesSource;
  }

  public ApiIcebergReplicationArguments safetyValvesTarget(Map<String, IcebergReplicationSafetyValve> safetyValvesTarget) {
    this.safetyValvesTarget = safetyValvesTarget;
    return this;
  }

  public ApiIcebergReplicationArguments putSafetyValvesTargetItem(String key, IcebergReplicationSafetyValve safetyValvesTargetItem) {
    if (this.safetyValvesTarget == null) {
      this.safetyValvesTarget = new HashMap<>();
    }
    this.safetyValvesTarget.put(key, safetyValvesTargetItem);
    return this;
  }

   /**
   * Get safetyValvesTarget
   * @return safetyValvesTarget
  **/
  @Schema(description = "")
  public Map<String, IcebergReplicationSafetyValve> getSafetyValvesTarget() {
    return safetyValvesTarget;
  }

  public void setSafetyValvesTarget(Map<String, IcebergReplicationSafetyValve> safetyValvesTarget) {
    this.safetyValvesTarget = safetyValvesTarget;
  }

  public ApiIcebergReplicationArguments runDistcpOnSource(Boolean runDistcpOnSource) {
    this.runDistcpOnSource = runDistcpOnSource;
    return this;
  }

   /**
   * Get runDistcpOnSource
   * @return runDistcpOnSource
  **/
  @Schema(description = "")
  public Boolean isRunDistcpOnSource() {
    return runDistcpOnSource;
  }

  public void setRunDistcpOnSource(Boolean runDistcpOnSource) {
    this.runDistcpOnSource = runDistcpOnSource;
  }

  public ApiIcebergReplicationArguments altStagingLocation(String altStagingLocation) {
    this.altStagingLocation = altStagingLocation;
    return this;
  }

   /**
   * Get altStagingLocation
   * @return altStagingLocation
  **/
  @Schema(description = "")
  public String getAltStagingLocation() {
    return altStagingLocation;
  }

  public void setAltStagingLocation(String altStagingLocation) {
    this.altStagingLocation = altStagingLocation;
  }

  public ApiIcebergReplicationArguments forceTest(Boolean forceTest) {
    this.forceTest = forceTest;
    return this;
  }

   /**
   * Get forceTest
   * @return forceTest
  **/
  @Schema(required = true, description = "")
  public Boolean isForceTest() {
    return forceTest;
  }

  public void setForceTest(Boolean forceTest) {
    this.forceTest = forceTest;
  }

  public ApiIcebergReplicationArguments jvmOptsForExport(String jvmOptsForExport) {
    this.jvmOptsForExport = jvmOptsForExport;
    return this;
  }

   /**
   * Get jvmOptsForExport
   * @return jvmOptsForExport
  **/
  @Schema(description = "")
  public String getJvmOptsForExport() {
    return jvmOptsForExport;
  }

  public void setJvmOptsForExport(String jvmOptsForExport) {
    this.jvmOptsForExport = jvmOptsForExport;
  }

  public ApiIcebergReplicationArguments jvmOptsForXfer(String jvmOptsForXfer) {
    this.jvmOptsForXfer = jvmOptsForXfer;
    return this;
  }

   /**
   * Get jvmOptsForXfer
   * @return jvmOptsForXfer
  **/
  @Schema(description = "")
  public String getJvmOptsForXfer() {
    return jvmOptsForXfer;
  }

  public void setJvmOptsForXfer(String jvmOptsForXfer) {
    this.jvmOptsForXfer = jvmOptsForXfer;
  }

  public ApiIcebergReplicationArguments jvmOptsForSync(String jvmOptsForSync) {
    this.jvmOptsForSync = jvmOptsForSync;
    return this;
  }

   /**
   * Get jvmOptsForSync
   * @return jvmOptsForSync
  **/
  @Schema(description = "")
  public String getJvmOptsForSync() {
    return jvmOptsForSync;
  }

  public void setJvmOptsForSync(String jvmOptsForSync) {
    this.jvmOptsForSync = jvmOptsForSync;
  }

  public ApiIcebergReplicationArguments locationMapping(List<ApiMapEntry> locationMapping) {
    this.locationMapping = locationMapping;
    return this;
  }

  public ApiIcebergReplicationArguments addLocationMappingItem(ApiMapEntry locationMappingItem) {
    if (this.locationMapping == null) {
      this.locationMapping = new ArrayList<>();
    }
    this.locationMapping.add(locationMappingItem);
    return this;
  }

   /**
   * Get locationMapping
   * @return locationMapping
  **/
  @Schema(description = "")
  public List<ApiMapEntry> getLocationMapping() {
    return locationMapping;
  }

  public void setLocationMapping(List<ApiMapEntry> locationMapping) {
    this.locationMapping = locationMapping;
  }

  public ApiIcebergReplicationArguments sourceStorageFilter(SourceStorageFilter sourceStorageFilter) {
    this.sourceStorageFilter = sourceStorageFilter;
    return this;
  }

   /**
   * Get sourceStorageFilter
   * @return sourceStorageFilter
  **/
  @Schema(description = "")
  public SourceStorageFilter getSourceStorageFilter() {
    return sourceStorageFilter;
  }

  public void setSourceStorageFilter(SourceStorageFilter sourceStorageFilter) {
    this.sourceStorageFilter = sourceStorageFilter;
  }

  public ApiIcebergReplicationArguments proxyNameOnSource(String proxyNameOnSource) {
    this.proxyNameOnSource = proxyNameOnSource;
    return this;
  }

   /**
   * Get proxyNameOnSource
   * @return proxyNameOnSource
  **/
  @Schema(description = "")
  public String getProxyNameOnSource() {
    return proxyNameOnSource;
  }

  public void setProxyNameOnSource(String proxyNameOnSource) {
    this.proxyNameOnSource = proxyNameOnSource;
  }


  @Override
  public boolean equals(java.lang.Object o) {
    if (this == o) {
      return true;
    }
    if (o == null || getClass() != o.getClass()) {
      return false;
    }
    ApiIcebergReplicationArguments apiIcebergReplicationArguments = (ApiIcebergReplicationArguments) o;
    return Objects.equals(this.sourceIcebergReplicationService, apiIcebergReplicationArguments.sourceIcebergReplicationService) &&
        Objects.equals(this.policyName, apiIcebergReplicationArguments.policyName) &&
        Objects.equals(this.includedTableFilters, apiIcebergReplicationArguments.includedTableFilters) &&
        Objects.equals(this.excludedTableFilters, apiIcebergReplicationArguments.excludedTableFilters) &&
        Objects.equals(this.batchSize, apiIcebergReplicationArguments.batchSize) &&
        Objects.equals(this.proxyName, apiIcebergReplicationArguments.proxyName) &&
        Objects.equals(this.exportYarnOptions, apiIcebergReplicationArguments.exportYarnOptions) &&
        Objects.equals(this.xferYarnOptions, apiIcebergReplicationArguments.xferYarnOptions) &&
        Objects.equals(this.syncYarnOptions, apiIcebergReplicationArguments.syncYarnOptions) &&
        Objects.equals(this.shouldReplicateColumnStats, apiIcebergReplicationArguments.shouldReplicateColumnStats) &&
        Objects.equals(this.atlasReplicationNeeded, apiIcebergReplicationArguments.atlasReplicationNeeded) &&
        Objects.equals(this.atlasChangeMarker, apiIcebergReplicationArguments.atlasChangeMarker) &&
        Objects.equals(this.safetyValvesSource, apiIcebergReplicationArguments.safetyValvesSource) &&
        Objects.equals(this.safetyValvesTarget, apiIcebergReplicationArguments.safetyValvesTarget) &&
        Objects.equals(this.runDistcpOnSource, apiIcebergReplicationArguments.runDistcpOnSource) &&
        Objects.equals(this.altStagingLocation, apiIcebergReplicationArguments.altStagingLocation) &&
        Objects.equals(this.forceTest, apiIcebergReplicationArguments.forceTest) &&
        Objects.equals(this.jvmOptsForExport, apiIcebergReplicationArguments.jvmOptsForExport) &&
        Objects.equals(this.jvmOptsForXfer, apiIcebergReplicationArguments.jvmOptsForXfer) &&
        Objects.equals(this.jvmOptsForSync, apiIcebergReplicationArguments.jvmOptsForSync) &&
        Objects.equals(this.locationMapping, apiIcebergReplicationArguments.locationMapping) &&
        Objects.equals(this.sourceStorageFilter, apiIcebergReplicationArguments.sourceStorageFilter) &&
        Objects.equals(this.proxyNameOnSource, apiIcebergReplicationArguments.proxyNameOnSource);
  }

  @Override
  public int hashCode() {
    return Objects.hash(sourceIcebergReplicationService, policyName, includedTableFilters, excludedTableFilters, batchSize, proxyName, exportYarnOptions, xferYarnOptions, syncYarnOptions, shouldReplicateColumnStats, atlasReplicationNeeded, atlasChangeMarker, safetyValvesSource, safetyValvesTarget, runDistcpOnSource, altStagingLocation, forceTest, jvmOptsForExport, jvmOptsForXfer, jvmOptsForSync, locationMapping, sourceStorageFilter, proxyNameOnSource);
  }


  @Override
  public String toString() {
    StringBuilder sb = new StringBuilder();
    sb.append("class ApiIcebergReplicationArguments {\n");
    
    sb.append("    sourceIcebergReplicationService: ").append(toIndentedString(sourceIcebergReplicationService)).append("\n");
    sb.append("    policyName: ").append(toIndentedString(policyName)).append("\n");
    sb.append("    includedTableFilters: ").append(toIndentedString(includedTableFilters)).append("\n");
    sb.append("    excludedTableFilters: ").append(toIndentedString(excludedTableFilters)).append("\n");
    sb.append("    batchSize: ").append(toIndentedString(batchSize)).append("\n");
    sb.append("    proxyName: ").append(toIndentedString(proxyName)).append("\n");
    sb.append("    exportYarnOptions: ").append(toIndentedString(exportYarnOptions)).append("\n");
    sb.append("    xferYarnOptions: ").append(toIndentedString(xferYarnOptions)).append("\n");
    sb.append("    syncYarnOptions: ").append(toIndentedString(syncYarnOptions)).append("\n");
    sb.append("    shouldReplicateColumnStats: ").append(toIndentedString(shouldReplicateColumnStats)).append("\n");
    sb.append("    atlasReplicationNeeded: ").append(toIndentedString(atlasReplicationNeeded)).append("\n");
    sb.append("    atlasChangeMarker: ").append(toIndentedString(atlasChangeMarker)).append("\n");
    sb.append("    safetyValvesSource: ").append(toIndentedString(safetyValvesSource)).append("\n");
    sb.append("    safetyValvesTarget: ").append(toIndentedString(safetyValvesTarget)).append("\n");
    sb.append("    runDistcpOnSource: ").append(toIndentedString(runDistcpOnSource)).append("\n");
    sb.append("    altStagingLocation: ").append(toIndentedString(altStagingLocation)).append("\n");
    sb.append("    forceTest: ").append(toIndentedString(forceTest)).append("\n");
    sb.append("    jvmOptsForExport: ").append(toIndentedString(jvmOptsForExport)).append("\n");
    sb.append("    jvmOptsForXfer: ").append(toIndentedString(jvmOptsForXfer)).append("\n");
    sb.append("    jvmOptsForSync: ").append(toIndentedString(jvmOptsForSync)).append("\n");
    sb.append("    locationMapping: ").append(toIndentedString(locationMapping)).append("\n");
    sb.append("    sourceStorageFilter: ").append(toIndentedString(sourceStorageFilter)).append("\n");
    sb.append("    proxyNameOnSource: ").append(toIndentedString(proxyNameOnSource)).append("\n");
    sb.append("}");
    return sb.toString();
  }

  /**
   * Convert the given object to string with each line indented by 4 spaces
   * (except the first line).
   */
  private String toIndentedString(java.lang.Object o) {
    if (o == null) {
      return "null";
    }
    return o.toString().replace("\n", "\n    ");
  }

}
