content: /*
   * Copyright (c) 2020-2025 Airbyte, Inc., all rights reserved.
   */
  
  package io.airbyte.persistence.job.models;
  
  import com.fasterxml.jackson.annotation.JsonAnyGetter;
  import com.fasterxml.jackson.annotation.JsonAnySetter;
  import com.fasterxml.jackson.annotation.JsonIgnore;
  import com.fasterxml.jackson.annotation.JsonInclude;
  import com.fasterxml.jackson.annotation.JsonProperty;
  import com.fasterxml.jackson.annotation.JsonPropertyDescription;
  import com.fasterxml.jackson.annotation.JsonPropertyOrder;
  import com.fasterxml.jackson.databind.JsonNode;
  import io.airbyte.config.ConfiguredAirbyteCatalog;
  import io.airbyte.config.ConnectionContext;
  import io.airbyte.config.JobSyncConfig.NamespaceDefinitionType;
  import io.airbyte.config.StandardSyncOperation;
  import io.airbyte.config.State;
  import io.airbyte.config.SyncResourceRequirements;
  import jakarta.annotation.Generated;
  import java.util.ArrayList;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  import java.util.Objects;
  import java.util.UUID;
  
  /**
   * ReplicationInput
   * <p>
   * inputs necessary for the replication step of a sync workflow
   *
   */
  @JsonInclude(JsonInclude.Include.NON_NULL)
  @JsonPropertyOrder({
    "namespaceDefinition",
    "namespaceFormat",
    "prefix",
    "sourceId",
    "destinationId",
    "sourceConfiguration",
    "destinationConfiguration",
    "operationSequence",
    "webhookOperationConfigs",
    "catalog",
    "state",
    "syncResourceRequirements",
    "workspaceId",
    "connectionId",
    "isReset",
    "jobRunConfig",
    "sourceLauncherConfig",
    "destinationLauncherConfig",
    "taskQueue",
    "destinationSupportsRefreshes",
    "signalInput",
    "useFileTransfer",
    "omitFileTransferEnvVar",
    "connectionContext",
    "networkSecurityTokens",
    "featureFlags",
    "heartbeatConfig",
    "supportsRefreshes",
    "sourceIPCOptions",
    "destinationIPCOptions"
  })
  @Generated(value = "Generated by jsonSchema2Pojo")
  public class ReplicationInput {
  
    @JsonProperty("namespaceDefinition")
    private NamespaceDefinitionType namespaceDefinition;
    @JsonProperty("namespaceFormat")
    private String namespaceFormat = null;
    /**
     * Prefix that will be prepended to the name of each stream when it is written to the destination.
     *
     */
    @JsonProperty("prefix")
    @JsonPropertyDescription("Prefix that will be prepended to the name of each stream when it is written to the destination.")
    private String prefix;
    /**
     * Actor ID for the source used in the sync - this is used to update the actor configuration when
     * requested. (Required)
     *
     */
    @JsonProperty("sourceId")
    @JsonPropertyDescription("Actor ID for the source used in the sync - this is used to update the actor configuration when requested.")
    private UUID sourceId;
    /**
     * Actor ID for the destination used in the sync - this is used to update the actor configuration
     * when requested. (Required)
     *
     */
    @JsonProperty("destinationId")
    @JsonPropertyDescription("Actor ID for the destination used in the sync - this is used to update the actor configuration when requested.")
    private UUID destinationId;
    /**
     * Integration specific blob. Must be a valid JSON string. (Required)
     *
     */
    @JsonProperty("sourceConfiguration")
    @JsonPropertyDescription("Integration specific blob. Must be a valid JSON string.")
    private JsonNode sourceConfiguration;
    /**
     * Integration specific blob. Must be a valid JSON string. (Required)
     *
     */
    @JsonProperty("destinationConfiguration")
    @JsonPropertyDescription("Integration specific blob. Must be a valid JSON string.")
    private JsonNode destinationConfiguration;
    /**
     * Sequence of configurations of operations to apply as part of the sync
     *
     */
    @JsonProperty("operationSequence")
    @JsonPropertyDescription("Sequence of configurations of operations to apply as part of the sync")
    private List<StandardSyncOperation> operationSequence = new ArrayList<>();
    /**
     * The webhook operation configs belonging to this workspace. See webhookOperationConfigs in
     * StandardWorkspace.yaml.
     *
     */
    @JsonProperty("webhookOperationConfigs")
    @JsonPropertyDescription("The webhook operation configs belonging to this workspace. See webhookOperationConfigs in StandardWorkspace.yaml.")
    private JsonNode webhookOperationConfigs;
    /**
     * the configured airbyte catalog (Required)
     *
     */
    @JsonProperty("catalog")
    @JsonPropertyDescription("the configured airbyte catalog")
    private ConfiguredAirbyteCatalog catalog;
    /**
     * optional state of the previous run. this object is defined per integration.
     *
     */
    @JsonProperty("state")
    @JsonPropertyDescription("optional state of the previous run. this object is defined per integration.")
    private State state;
    /**
     * Resource requirements to use for the sync
     *
     */
    @JsonProperty("syncResourceRequirements")
    @JsonPropertyDescription("Resource requirements to use for the sync")
    private SyncResourceRequirements syncResourceRequirements;
    /**
     * The id of the workspace associated with this sync
     *
     */
    @JsonProperty("workspaceId")
    @JsonPropertyDescription("The id of the workspace associated with this sync")
    private UUID workspaceId;
    /**
     * The id of the connection associated with this sync
     *
     */
    @JsonProperty("connectionId")
    @JsonPropertyDescription("The id of the connection associated with this sync")
    private UUID connectionId;
    /**
     * whether this 'sync' is performing a logical reset
     *
     */
    @JsonProperty("isReset")
    @JsonPropertyDescription("whether this 'sync' is performing a logical reset")
    private Boolean isReset = false;
    /**
     * JobRunConfig
     * <p>
     * job run config
     *
     */
    @JsonProperty("jobRunConfig")
    @JsonPropertyDescription("job run config")
    private JobRunConfig jobRunConfig;
    /**
     * IntegrationLauncherConfig
     * <p>
     * integration launcher config
     *
     */
    @JsonProperty("sourceLauncherConfig")
    @JsonPropertyDescription("integration launcher config")
    private IntegrationLauncherConfig sourceLauncherConfig;
    /**
     * IntegrationLauncherConfig
     * <p>
     * integration launcher config
     *
     */
    @JsonProperty("destinationLauncherConfig")
    @JsonPropertyDescription("integration launcher config")
    private IntegrationLauncherConfig destinationLauncherConfig;
    /**
     * the temporal task queue this replication will use
     *
     */
    @JsonProperty("taskQueue")
    @JsonPropertyDescription("the temporal task queue this replication will use")
    private String taskQueue;
    /**
     * whether the destination supports refreshes
     *
     */
    @JsonProperty("destinationSupportsRefreshes")
    @JsonPropertyDescription("whether the destination supports refreshes")
    private Boolean destinationSupportsRefreshes = false;
    /**
     * Signal input for the sync
     *
     */
    @JsonProperty("signalInput")
    @JsonPropertyDescription("Signal input for the sync")
    private String signalInput;
    /**
     * whether the sync is transferring files
     *
     */
    @JsonProperty("useFileTransfer")
    @JsonPropertyDescription("whether the sync is transferring files")
    private Boolean useFileTransfer = false;
    /**
     * whether to omit the file transfer env var when using file transfer. Deprecated, to delete when
     * destinations no longer support the old flow.
     *
     */
    @JsonProperty("omitFileTransferEnvVar")
    @JsonPropertyDescription("whether to omit the file transfer env var when using file transfer. Deprecated, to delete when destinations no longer support the old flow.")
    private Object omitFileTransferEnvVar = null;
    @JsonProperty("connectionContext")
    private ConnectionContext connectionContext;
    /**
     * Workload launcher will use these to grant pods additional network access
     *
     */
    @JsonProperty("networkSecurityTokens")
    @JsonPropertyDescription("Workload launcher will use these to grant pods additional network access")
    private List<String> networkSecurityTokens = new ArrayList<>();
    /**
     * Collection of feature flags enabled for this replication sync execution.
     *
     */
    @JsonProperty("featureFlags")
    @JsonPropertyDescription("Collection of feature flags enabled for this replication sync execution.")
    private Map<String, Object> featureFlags;
    /**
     * HeartbeatConfig
     * <p>
     * inputs necessary for the configuration of heartbeat monitors during replication
     *
     */
    @JsonProperty("heartbeatConfig")
    @JsonPropertyDescription("inputs necessary for the configuration of heartbeat monitors during replication")
    private HeartbeatConfig heartbeatConfig;
    /**
     * whether the sync supports refreshes
     *
     */
    @JsonProperty("supportsRefreshes")
    @JsonPropertyDescription("whether the sync supports refreshes")
    private Boolean supportsRefreshes = false;
    /**
     * config containing information about source architecture
     *
     */
    @JsonProperty("sourceIPCOptions")
    @JsonPropertyDescription("config containing information about source architecture")
    private JsonNode sourceIPCOptions;
    /**
     * config containing information about source architecture
     *
     */
    @JsonProperty("destinationIPCOptions")
    @JsonPropertyDescription("config containing information about source architecture")
    private JsonNode destinationIPCOptions;
    @JsonIgnore
    private final Map<String, Object> additionalProperties = new HashMap<>();
  
    @JsonProperty("namespaceDefinition")
    public NamespaceDefinitionType getNamespaceDefinition() {
      return namespaceDefinition;
    }
  
    @JsonProperty("namespaceDefinition")
    public void setNamespaceDefinition(NamespaceDefinitionType namespaceDefinition) {
      this.namespaceDefinition = namespaceDefinition;
    }
  
    public ReplicationInput withNamespaceDefinition(NamespaceDefinitionType namespaceDefinition) {
      this.namespaceDefinition = namespaceDefinition;
      return this;
    }
  
    @JsonProperty("namespaceFormat")
    public String getNamespaceFormat() {
      return namespaceFormat;
    }
  
    @JsonProperty("namespaceFormat")
    public void setNamespaceFormat(String namespaceFormat) {
      this.namespaceFormat = namespaceFormat;
    }
  
    public ReplicationInput withNamespaceFormat(String namespaceFormat) {
      this.namespaceFormat = namespaceFormat;
      return this;
    }
  
    /**
     * Prefix that will be prepended to the name of each stream when it is written to the destination.
     *
     */
    @JsonProperty("prefix")
    public String getPrefix() {
      return prefix;
    }
  
    /**
     * Prefix that will be prepended to the name of each stream when it is written to the destination.
     *
     */
    @JsonProperty("prefix")
    public void setPrefix(String prefix) {
      this.prefix = prefix;
    }
  
    public ReplicationInput withPrefix(String prefix) {
      this.prefix = prefix;
      return this;
    }
  
    /**
     * Actor ID for the source used in the sync - this is used to update the actor configuration when
     * requested. (Required)
     *
     */
    @JsonProperty("sourceId")
    public UUID getSourceId() {
      return sourceId;
    }
  
    /**
     * Actor ID for the source used in the sync - this is used to update the actor configuration when
     * requested. (Required)
     *
     */
    @JsonProperty("sourceId")
    public void setSourceId(UUID sourceId) {
      this.sourceId = sourceId;
    }
  
    public ReplicationInput withSourceId(UUID sourceId) {
      this.sourceId = sourceId;
      return this;
    }
  
    /**
     * Actor ID for the destination used in the sync - this is used to update the actor configuration
     * when requested. (Required)
     *
     */
    @JsonProperty("destinationId")
    public UUID getDestinationId() {
      return destinationId;
    }
  
    /**
     * Actor ID for the destination used in the sync - this is used to update the actor configuration
     * when requested. (Required)
     *
     */
    @JsonProperty("destinationId")
    public void setDestinationId(UUID destinationId) {
      this.destinationId = destinationId;
    }
  
    public ReplicationInput withDestinationId(UUID destinationId) {
      this.destinationId = destinationId;
      return this;
    }
  
    /**
     * Integration specific blob. Must be a valid JSON string. (Required)
     *
     */
    @JsonProperty("sourceConfiguration")
    public JsonNode getSourceConfiguration() {
      return sourceConfiguration;
    }
  
    /**
     * Integration specific blob. Must be a valid JSON string. (Required)
     *
     */
    @JsonProperty("sourceConfiguration")
    public void setSourceConfiguration(JsonNode sourceConfiguration) {
      this.sourceConfiguration = sourceConfiguration;
    }
  
    public ReplicationInput withSourceConfiguration(JsonNode sourceConfiguration) {
      this.sourceConfiguration = sourceConfiguration;
      return this;
    }
  
    /**
     * Integration specific blob. Must be a valid JSON string. (Required)
     *
     */
    @JsonProperty("destinationConfiguration")
    public JsonNode getDestinationConfiguration() {
      return destinationConfiguration;
    }
  
    /**
     * Integration specific blob. Must be a valid JSON string. (Required)
     *
     */
    @JsonProperty("destinationConfiguration")
    public void setDestinationConfiguration(JsonNode destinationConfiguration) {
      this.destinationConfiguration = destinationConfiguration;
    }
  
    public ReplicationInput withDestinationConfiguration(JsonNode destinationConfiguration) {
      this.destinationConfiguration = destinationConfiguration;
      return this;
    }
  
    /**
     * Sequence of configurations of operations to apply as part of the sync
     *
     */
    @JsonProperty("operationSequence")
    public List<StandardSyncOperation> getOperationSequence() {
      return operationSequence;
    }
  
    /**
     * Sequence of configurations of operations to apply as part of the sync
     *
     */
    @JsonProperty("operationSequence")
    public void setOperationSequence(List<StandardSyncOperation> operationSequence) {
      this.operationSequence = operationSequence;
    }
  
    public ReplicationInput withOperationSequence(List<StandardSyncOperation> operationSequence) {
      this.operationSequence = operationSequence;
      return this;
    }
  
    /**
     * The webhook operation configs belonging to this workspace. See webhookOperationConfigs in
     * StandardWorkspace.yaml.
     *
     */
    @JsonProperty("webhookOperationConfigs")
    public JsonNode getWebhookOperationConfigs() {
      return webhookOperationConfigs;
    }
  
    /**
     * The webhook operation configs belonging to this workspace. See webhookOperationConfigs in
     * StandardWorkspace.yaml.
     *
     */
    @JsonProperty("webhookOperationConfigs")
    public void setWebhookOperationConfigs(JsonNode webhookOperationConfigs) {
      this.webhookOperationConfigs = webhookOperationConfigs;
    }
  
    public ReplicationInput withWebhookOperationConfigs(JsonNode webhookOperationConfigs) {
      this.webhookOperationConfigs = webhookOperationConfigs;
      return this;
    }
  
    /**
     * the configured airbyte catalog (Required)
     *
     */
    @JsonProperty("catalog")
    public ConfiguredAirbyteCatalog getCatalog() {
      return catalog;
    }
  
    /**
     * the configured airbyte catalog (Required)
     *
     */
    @JsonProperty("catalog")
    public void setCatalog(ConfiguredAirbyteCatalog catalog) {
      this.catalog = catalog;
    }
  
    public ReplicationInput withCatalog(ConfiguredAirbyteCatalog catalog) {
      this.catalog = catalog;
      return this;
    }
  
    /**
     * optional state of the previous run. this object is defined per integration.
     *
     */
    @JsonProperty("state")
    public State getState() {
      return state;
    }
  
    /**
     * optional state of the previous run. this object is defined per integration.
     *
     */
    @JsonProperty("state")
    public void setState(State state) {
      this.state = state;
    }
  
    public ReplicationInput withState(State state) {
      this.state = state;
      return this;
    }
  
    /**
     * Resource requirements to use for the sync
     *
     */
    @JsonProperty("syncResourceRequirements")
    public SyncResourceRequirements getSyncResourceRequirements() {
      return syncResourceRequirements;
    }
  
    /**
     * Resource requirements to use for the sync
     *
     */
    @JsonProperty("syncResourceRequirements")
    public void setSyncResourceRequirements(SyncResourceRequirements syncResourceRequirements) {
      this.syncResourceRequirements = syncResourceRequirements;
    }
  
    public ReplicationInput withSyncResourceRequirements(SyncResourceRequirements syncResourceRequirements) {
      this.syncResourceRequirements = syncResourceRequirements;
      return this;
    }
  
    /**
     * The id of the workspace associated with this sync
     *
     */
    @JsonProperty("workspaceId")
    public UUID getWorkspaceId() {
      return workspaceId;
    }
  
    /**
     * The id of the workspace associated with this sync
     *
     */
    @JsonProperty("workspaceId")
    public void setWorkspaceId(UUID workspaceId) {
      this.workspaceId = workspaceId;
    }
  
    public ReplicationInput withWorkspaceId(UUID workspaceId) {
      this.workspaceId = workspaceId;
      return this;
    }
  
    /**
     * The id of the connection associated with this sync
     *
     */
    @JsonProperty("connectionId")
    public UUID getConnectionId() {
      return connectionId;
    }
  
    /**
     * The id of the connection associated with this sync
     *
     */
    @JsonProperty("connectionId")
    public void setConnectionId(UUID connectionId) {
      this.connectionId = connectionId;
    }
  
    public ReplicationInput withConnectionId(UUID connectionId) {
      this.connectionId = connectionId;
      return this;
    }
  
    /**
     * whether this 'sync' is performing a logical reset
     *
     */
    @JsonProperty("isReset")
    public Boolean getIsReset() {
      return isReset;
    }
  
    /**
     * whether this 'sync' is performing a logical reset
     *
     */
    @JsonProperty("isReset")
    public void setIsReset(Boolean isReset) {
      this.isReset = isReset;
    }
  
    public ReplicationInput withIsReset(Boolean isReset) {
      this.isReset = isReset;
      return this;
    }
  
    /**
     * JobRunConfig
     * <p>
     * job run config
     *
     */
    @JsonProperty("jobRunConfig")
    public JobRunConfig getJobRunConfig() {
      return jobRunConfig;
    }
  
    /**
     * JobRunConfig
     * <p>
     * job run config
     *
     */
    @JsonProperty("jobRunConfig")
    public void setJobRunConfig(JobRunConfig jobRunConfig) {
      this.jobRunConfig = jobRunConfig;
    }
  
    public ReplicationInput withJobRunConfig(JobRunConfig jobRunConfig) {
      this.jobRunConfig = jobRunConfig;
      return this;
    }
  
    /**
     * IntegrationLauncherConfig
     * <p>
     * integration launcher config
     *
     */
    @JsonProperty("sourceLauncherConfig")
    public IntegrationLauncherConfig getSourceLauncherConfig() {
      return sourceLauncherConfig;
    }
  
    /**
     * IntegrationLauncherConfig
     * <p>
     * integration launcher config
     *
     */
    @JsonProperty("sourceLauncherConfig")
    public void setSourceLauncherConfig(IntegrationLauncherConfig sourceLauncherConfig) {
      this.sourceLauncherConfig = sourceLauncherConfig;
    }
  
    public ReplicationInput withSourceLauncherConfig(IntegrationLauncherConfig sourceLauncherConfig) {
      this.sourceLauncherConfig = sourceLauncherConfig;
      return this;
    }
  
    /**
     * IntegrationLauncherConfig
     * <p>
     * integration launcher config
     *
     */
    @JsonProperty("destinationLauncherConfig")
    public IntegrationLauncherConfig getDestinationLauncherConfig() {
      return destinationLauncherConfig;
    }
  
    /**
     * IntegrationLauncherConfig
     * <p>
     * integration launcher config
     *
     */
    @JsonProperty("destinationLauncherConfig")
    public void setDestinationLauncherConfig(IntegrationLauncherConfig destinationLauncherConfig) {
      this.destinationLauncherConfig = destinationLauncherConfig;
    }
  
    public ReplicationInput withDestinationLauncherConfig(IntegrationLauncherConfig destinationLauncherConfig) {
      this.destinationLauncherConfig = destinationLauncherConfig;
      return this;
    }
  
    /**
     * the temporal task queue this replication will use
     *
     */
    @JsonProperty("taskQueue")
    public String getTaskQueue() {
      return taskQueue;
    }
  
    /**
     * the temporal task queue this replication will use
     *
     */
    @JsonProperty("taskQueue")
    public void setTaskQueue(String taskQueue) {
      this.taskQueue = taskQueue;
    }
  
    public ReplicationInput withTaskQueue(String taskQueue) {
      this.taskQueue = taskQueue;
      return this;
    }
  
    /**
     * whether the destination supports refreshes
     *
     */
    @JsonProperty("destinationSupportsRefreshes")
    public Boolean getDestinationSupportsRefreshes() {
      return destinationSupportsRefreshes;
    }
  
    /**
     * whether the destination supports refreshes
     *
     */
    @JsonProperty("destinationSupportsRefreshes")
    public void setDestinationSupportsRefreshes(Boolean destinationSupportsRefreshes) {
      this.destinationSupportsRefreshes = destinationSupportsRefreshes;
    }
  
    public ReplicationInput withDestinationSupportsRefreshes(Boolean destinationSupportsRefreshes) {
      this.destinationSupportsRefreshes = destinationSupportsRefreshes;
      return this;
    }
  
    /**
     * Signal input for the sync
     *
     */
    @JsonProperty("signalInput")
    public String getSignalInput() {
      return signalInput;
    }
  
    /**
     * Signal input for the sync
     *
     */
    @JsonProperty("signalInput")
    public void setSignalInput(String signalInput) {
      this.signalInput = signalInput;
    }
  
    public ReplicationInput withSignalInput(String signalInput) {
      this.signalInput = signalInput;
      return this;
    }
  
    /**
     * whether the sync is transferring files
     *
     */
    @JsonProperty("useFileTransfer")
    public Boolean getUseFileTransfer() {
      return useFileTransfer;
    }
  
    /**
     * whether the sync is transferring files
     *
     */
    @JsonProperty("useFileTransfer")
    public void setUseFileTransfer(Boolean useFileTransfer) {
      this.useFileTransfer = useFileTransfer;
    }
  
    public ReplicationInput withUseFileTransfer(Boolean useFileTransfer) {
      this.useFileTransfer = useFileTransfer;
      return this;
    }
  
    /**
     * whether to omit the file transfer env var when using file transfer. Deprecated, to delete when
     * destinations no longer support the old flow.
     *
     */
    @JsonProperty("omitFileTransferEnvVar")
    public Object getOmitFileTransferEnvVar() {
      return omitFileTransferEnvVar;
    }
  
    /**
     * whether to omit the file transfer env var when using file transfer. Deprecated, to delete when
     * destinations no longer support the old flow.
     *
     */
    @JsonProperty("omitFileTransferEnvVar")
    public void setOmitFileTransferEnvVar(Object omitFileTransferEnvVar) {
      this.omitFileTransferEnvVar = omitFileTransferEnvVar;
    }
  
    public ReplicationInput withOmitFileTransferEnvVar(Object omitFileTransferEnvVar) {
      this.omitFileTransferEnvVar = omitFileTransferEnvVar;
      return this;
    }
  
    @JsonProperty("connectionContext")
    public ConnectionContext getConnectionContext() {
      return connectionContext;
    }
  
    @JsonProperty("connectionContext")
    public void setConnectionContext(ConnectionContext connectionContext) {
      this.connectionContext = connectionContext;
    }
  
    public ReplicationInput withConnectionContext(ConnectionContext connectionContext) {
      this.connectionContext = connectionContext;
      return this;
    }
  
    /**
     * Workload launcher will use these to grant pods additional network access
     *
     */
    @JsonProperty("networkSecurityTokens")
    public List<String> getNetworkSecurityTokens() {
      return networkSecurityTokens;
    }
  
    /**
     * Workload launcher will use these to grant pods additional network access
     *
     */
    @JsonProperty("networkSecurityTokens")
    public void setNetworkSecurityTokens(List<String> networkSecurityTokens) {
      this.networkSecurityTokens = networkSecurityTokens;
    }
  
    public ReplicationInput withNetworkSecurityTokens(List<String> networkSecurityTokens) {
      this.networkSecurityTokens = networkSecurityTokens;
      return this;
    }
  
    /**
     * Collection of feature flags enabled for this replication sync execution.
     *
     */
    @JsonProperty("featureFlags")
    public Map<String, Object> getFeatureFlags() {
      return featureFlags;
    }
  
    /**
     * Collection of feature flags enabled for this replication sync execution.
     *
     */
    @JsonProperty("featureFlags")
    public void setFeatureFlags(Map<String, Object> featureFlags) {
      this.featureFlags = featureFlags;
    }
  
    public ReplicationInput withFeatureFlags(Map<String, Object> featureFlags) {
      this.featureFlags = featureFlags;
      return this;
    }
  
    /**
     * HeartbeatConfig
     * <p>
     * inputs necessary for the configuration of heartbeat monitors during replication
     *
     */
    @JsonProperty("heartbeatConfig")
    public HeartbeatConfig getHeartbeatConfig() {
      return heartbeatConfig;
    }
  
    /**
     * HeartbeatConfig
     * <p>
     * inputs necessary for the configuration of heartbeat monitors during replication
     *
     */
    @JsonProperty("heartbeatConfig")
    public void setHeartbeatConfig(HeartbeatConfig heartbeatConfig) {
      this.heartbeatConfig = heartbeatConfig;
    }
  
    public ReplicationInput withHeartbeatConfig(HeartbeatConfig heartbeatConfig) {
      this.heartbeatConfig = heartbeatConfig;
      return this;
    }
  
    /**
     * whether the sync supports refreshes
     *
     */
    @JsonProperty("supportsRefreshes")
    public Boolean getSupportsRefreshes() {
      return supportsRefreshes;
    }
  
    /**
     * whether the sync supports refreshes
     *
     */
    @JsonProperty("supportsRefreshes")
    public void setSupportsRefreshes(Boolean supportsRefreshes) {
      this.supportsRefreshes = supportsRefreshes;
    }
  
    public ReplicationInput withSupportsRefreshes(Boolean supportsRefreshes) {
      this.supportsRefreshes = supportsRefreshes;
      return this;
    }
  
    /**
     * config containing information about source architecture
     *
     */
    @JsonProperty("sourceIPCOptions")
    public JsonNode getSourceIPCOptions() {
      return sourceIPCOptions;
    }
  
    /**
     * config containing information about source architecture
     *
     */
    @JsonProperty("sourceIPCOptions")
    public void setSourceIPCOptions(JsonNode sourceIPCOptions) {
      this.sourceIPCOptions = sourceIPCOptions;
    }
  
    public ReplicationInput withSourceIPCOptions(JsonNode sourceIPCOptions) {
      this.sourceIPCOptions = sourceIPCOptions;
      return this;
    }
  
    /**
     * config containing information about source architecture
     *
     */
    @JsonProperty("destinationIPCOptions")
    public JsonNode getDestinationIPCOptions() {
      return destinationIPCOptions;
    }
  
    /**
     * config containing information about source architecture
     *
     */
    @JsonProperty("destinationIPCOptions")
    public void setDestinationIPCOptions(JsonNode destinationIPCOptions) {
      this.destinationIPCOptions = destinationIPCOptions;
    }
  
    public ReplicationInput withDestinationIPCOptions(JsonNode destinationIPCOptions) {
      this.destinationIPCOptions = destinationIPCOptions;
      return this;
    }
  
    @JsonAnyGetter
    public Map<String, Object> getAdditionalProperties() {
      return this.additionalProperties;
    }
  
    @JsonAnySetter
    public void setAdditionalProperty(String name, Object value) {
      this.additionalProperties.put(name, value);
    }
  
    public ReplicationInput withAdditionalProperty(String name, Object value) {
      this.additionalProperties.put(name, value);
      return this;
    }
  
    @Override
    public String toString() {
      StringBuilder sb = new StringBuilder();
      sb.append(ReplicationInput.class.getName()).append('@').append(Integer.toHexString(System.identityHashCode(this))).append('[');
      sb.append("namespaceDefinition");
      sb.append('=');
      sb.append(((this.namespaceDefinition == null) ? "<null>" : this.namespaceDefinition));
      sb.append(',');
      sb.append("namespaceFormat");
      sb.append('=');
      sb.append(((this.namespaceFormat == null) ? "<null>" : this.namespaceFormat));
      sb.append(',');
      sb.append("prefix");
      sb.append('=');
      sb.append(((this.prefix == null) ? "<null>" : this.prefix));
      sb.append(',');
      sb.append("sourceId");
      sb.append('=');
      sb.append(((this.sourceId == null) ? "<null>" : this.sourceId));
      sb.append(',');
      sb.append("destinationId");
      sb.append('=');
      sb.append(((this.destinationId == null) ? "<null>" : this.destinationId));
      sb.append(',');
      sb.append("sourceConfiguration");
      sb.append('=');
      sb.append(((this.sourceConfiguration == null) ? "<null>" : this.sourceConfiguration));
      sb.append(',');
      sb.append("destinationConfiguration");
      sb.append('=');
      sb.append(((this.destinationConfiguration == null) ? "<null>" : this.destinationConfiguration));
      sb.append(',');
      sb.append("operationSequence");
      sb.append('=');
      sb.append(((this.operationSequence == null) ? "<null>" : this.operationSequence));
      sb.append(',');
      sb.append("webhookOperationConfigs");
      sb.append('=');
      sb.append(((this.webhookOperationConfigs == null) ? "<null>" : this.webhookOperationConfigs));
      sb.append(',');
      sb.append("catalog");
      sb.append('=');
      sb.append(((this.catalog == null) ? "<null>" : this.catalog));
      sb.append(',');
      sb.append("state");
      sb.append('=');
      sb.append(((this.state == null) ? "<null>" : this.state));
      sb.append(',');
      sb.append("syncResourceRequirements");
      sb.append('=');
      sb.append(((this.syncResourceRequirements == null) ? "<null>" : this.syncResourceRequirements));
      sb.append(',');
      sb.append("workspaceId");
      sb.append('=');
      sb.append(((this.workspaceId == null) ? "<null>" : this.workspaceId));
      sb.append(',');
      sb.append("connectionId");
      sb.append('=');
      sb.append(((this.connectionId == null) ? "<null>" : this.connectionId));
      sb.append(',');
      sb.append("isReset");
      sb.append('=');
      sb.append(((this.isReset == null) ? "<null>" : this.isReset));
      sb.append(',');
      sb.append("jobRunConfig");
      sb.append('=');
      sb.append(((this.jobRunConfig == null) ? "<null>" : this.jobRunConfig));
      sb.append(',');
      sb.append("sourceLauncherConfig");
      sb.append('=');
      sb.append(((this.sourceLauncherConfig == null) ? "<null>" : this.sourceLauncherConfig));
      sb.append(',');
      sb.append("destinationLauncherConfig");
      sb.append('=');
      sb.append(((this.destinationLauncherConfig == null) ? "<null>" : this.destinationLauncherConfig));
      sb.append(',');
      sb.append("taskQueue");
      sb.append('=');
      sb.append(((this.taskQueue == null) ? "<null>" : this.taskQueue));
      sb.append(',');
      sb.append("destinationSupportsRefreshes");
      sb.append('=');
      sb.append(((this.destinationSupportsRefreshes == null) ? "<null>" : this.destinationSupportsRefreshes));
      sb.append(',');
      sb.append("signalInput");
      sb.append('=');
      sb.append(((this.signalInput == null) ? "<null>" : this.signalInput));
      sb.append(',');
      sb.append("useFileTransfer");
      sb.append('=');
      sb.append(((this.useFileTransfer == null) ? "<null>" : this.useFileTransfer));
      sb.append(',');
      sb.append("omitFileTransferEnvVar");
      sb.append('=');
      sb.append(((this.omitFileTransferEnvVar == null) ? "<null>" : this.omitFileTransferEnvVar));
      sb.append(',');
      sb.append("connectionContext");
      sb.append('=');
      sb.append(((this.connectionContext == null) ? "<null>" : this.connectionContext));
      sb.append(',');
      sb.append("networkSecurityTokens");
      sb.append('=');
      sb.append(((this.networkSecurityTokens == null) ? "<null>" : this.networkSecurityTokens));
      sb.append(',');
      sb.append("featureFlags");
      sb.append('=');
      sb.append(((this.featureFlags == null) ? "<null>" : this.featureFlags));
      sb.append(',');
      sb.append("heartbeatConfig");
      sb.append('=');
      sb.append(((this.heartbeatConfig == null) ? "<null>" : this.heartbeatConfig));
      sb.append(',');
      sb.append("supportsRefreshes");
      sb.append('=');
      sb.append(((this.supportsRefreshes == null) ? "<null>" : this.supportsRefreshes));
      sb.append(',');
      sb.append("sourceIPCOptions");
      sb.append('=');
      sb.append(((this.sourceIPCOptions == null) ? "<null>" : this.sourceIPCOptions));
      sb.append(',');
      sb.append("destinationIPCOptions");
      sb.append('=');
      sb.append(((this.destinationIPCOptions == null) ? "<null>" : this.destinationIPCOptions));
      sb.append(',');
      sb.append("additionalProperties");
      sb.append('=');
      sb.append(this.additionalProperties);
      sb.append(',');
      if (sb.charAt((sb.length() - 1)) == ',') {
        sb.setCharAt((sb.length() - 1), ']');
      } else {
        sb.append(']');
      }
      return sb.toString();
    }
  
    @Override
    public int hashCode() {
      int result = 1;
      result = ((result * 31) + ((this.sourceId == null) ? 0 : this.sourceId.hashCode()));
      result = ((result * 31) + ((this.operationSequence == null) ? 0 : this.operationSequence.hashCode()));
      result = ((result * 31) + ((this.prefix == null) ? 0 : this.prefix.hashCode()));
      result = ((result * 31) + ((this.catalog == null) ? 0 : this.catalog.hashCode()));
      result = ((result * 31) + ((this.useFileTransfer == null) ? 0 : this.useFileTransfer.hashCode()));
      result = ((result * 31) + ((this.networkSecurityTokens == null) ? 0 : this.networkSecurityTokens.hashCode()));
      result = ((result * 31) + ((this.destinationId == null) ? 0 : this.destinationId.hashCode()));
      result = ((result * 31) + ((this.jobRunConfig == null) ? 0 : this.jobRunConfig.hashCode()));
      result = ((result * 31) + ((this.taskQueue == null) ? 0 : this.taskQueue.hashCode()));
      result = ((result * 31) + ((this.sourceIPCOptions == null) ? 0 : this.sourceIPCOptions.hashCode()));
      result = ((result * 31) + ((this.sourceConfiguration == null) ? 0 : this.sourceConfiguration.hashCode()));
      result = ((result * 31) + ((this.destinationIPCOptions == null) ? 0 : this.destinationIPCOptions.hashCode()));
      result = ((result * 31) + ((this.destinationLauncherConfig == null) ? 0 : this.destinationLauncherConfig.hashCode()));
      result = ((result * 31) + ((this.namespaceFormat == null) ? 0 : this.namespaceFormat.hashCode()));
      result = ((result * 31) + ((this.state == null) ? 0 : this.state.hashCode()));
      result = ((result * 31) + ((this.isReset == null) ? 0 : this.isReset.hashCode()));
      result = ((result * 31) + ((this.workspaceId == null) ? 0 : this.workspaceId.hashCode()));
      result = ((result * 31) + ((this.featureFlags == null) ? 0 : this.featureFlags.hashCode()));
      result = ((result * 31) + ((this.webhookOperationConfigs == null) ? 0 : this.webhookOperationConfigs.hashCode()));
      result = ((result * 31) + ((this.signalInput == null) ? 0 : this.signalInput.hashCode()));
      result = ((result * 31) + ((this.destinationSupportsRefreshes == null) ? 0 : this.destinationSupportsRefreshes.hashCode()));
      result = ((result * 31) + ((this.syncResourceRequirements == null) ? 0 : this.syncResourceRequirements.hashCode()));
      result = ((result * 31) + ((this.namespaceDefinition == null) ? 0 : this.namespaceDefinition.hashCode()));
      result = ((result * 31) + ((this.supportsRefreshes == null) ? 0 : this.supportsRefreshes.hashCode()));
      result = ((result * 31) + ((this.heartbeatConfig == null) ? 0 : this.heartbeatConfig.hashCode()));
      result = ((result * 31) + ((this.destinationConfiguration == null) ? 0 : this.destinationConfiguration.hashCode()));
      result = ((result * 31) + ((this.connectionContext == null) ? 0 : this.connectionContext.hashCode()));
      result = ((result * 31) + ((this.omitFileTransferEnvVar == null) ? 0 : this.omitFileTransferEnvVar.hashCode()));
      result = ((result * 31) + ((this.connectionId == null) ? 0 : this.connectionId.hashCode()));
      result = ((result * 31) + ((this.sourceLauncherConfig == null) ? 0 : this.sourceLauncherConfig.hashCode()));
      result = result * 31 + this.additionalProperties.hashCode();
      return result;
    }
  
    @Override
    public boolean equals(Object other) {
      if (other == this) {
        return true;
      }
      if (!(other instanceof ReplicationInput rhs)) {
        return false;
      }
      return Objects.equals(this.sourceId, rhs.sourceId) && Objects.equals(this.operationSequence, rhs.operationSequence)
          && Objects.equals(this.prefix, rhs.prefix) && Objects.equals(this.catalog, rhs.catalog)
          && Objects.equals(this.useFileTransfer, rhs.useFileTransfer) && Objects.equals(this.networkSecurityTokens, rhs.networkSecurityTokens)
          && Objects.equals(this.destinationId, rhs.destinationId) && Objects.equals(this.jobRunConfig, rhs.jobRunConfig)
          && Objects.equals(this.taskQueue, rhs.taskQueue) && Objects.equals(this.sourceIPCOptions, rhs.sourceIPCOptions)
          && Objects.equals(this.sourceConfiguration, rhs.sourceConfiguration) && Objects.equals(this.destinationIPCOptions, rhs.destinationIPCOptions)
          && Objects.equals(this.destinationLauncherConfig, rhs.destinationLauncherConfig) && Objects.equals(this.namespaceFormat, rhs.namespaceFormat)
          && Objects.equals(this.state, rhs.state) && Objects.equals(this.isReset, rhs.isReset) && Objects.equals(this.workspaceId, rhs.workspaceId)
          && Objects.equals(this.featureFlags, rhs.featureFlags) && Objects.equals(this.webhookOperationConfigs, rhs.webhookOperationConfigs)
          && Objects.equals(this.signalInput, rhs.signalInput) && Objects.equals(this.destinationSupportsRefreshes, rhs.destinationSupportsRefreshes)
          && Objects.equals(this.syncResourceRequirements, rhs.syncResourceRequirements)
          && Objects.equals(this.namespaceDefinition, rhs.namespaceDefinition) && Objects.equals(this.supportsRefreshes, rhs.supportsRefreshes)
          && Objects.equals(this.heartbeatConfig, rhs.heartbeatConfig) && Objects.equals(this.destinationConfiguration, rhs.destinationConfiguration)
          && Objects.equals(this.connectionContext, rhs.connectionContext) && Objects.equals(this.omitFileTransferEnvVar, rhs.omitFileTransferEnvVar)
          && Objects.equals(this.connectionId, rhs.connectionId) && Objects.equals(this.sourceLauncherConfig, rhs.sourceLauncherConfig)
          && (this.additionalProperties == rhs.additionalProperties || this.additionalProperties.equals(rhs.additionalProperties));
    }
  
  }
  