/*
 * Copyright (c) 2016, PostgreSQL Global Development Group
 * See the LICENSE file in the project root for more information.
 */

package org.postgresql.replication.fluent.logical;

import org.postgresql.replication.LogSequenceNumber;
import org.postgresql.replication.PGReplicationStream;
import org.postgresql.replication.fluent.AbstractStreamBuilder;

import java.sql.SQLException;
import java.util.Properties;

public class LogicalStreamBuilder extends AbstractStreamBuilder<ChainedLogicalStreamBuilder>
    implements ChainedLogicalStreamBuilder, LogicalReplicationOptions {
  private final Properties slotOptions;

  private StartLogicalReplicationCallback startCallback;

  
Params:
  • startCallback – not null callback that should be execute after build parameters for start replication
/** * @param startCallback not null callback that should be execute after build parameters for start * replication */
public LogicalStreamBuilder(StartLogicalReplicationCallback startCallback) { this.startCallback = startCallback; this.slotOptions = new Properties(); } @Override protected ChainedLogicalStreamBuilder self() { return this; } @Override public PGReplicationStream start() throws SQLException { return startCallback.start(this); } @Override public String getSlotName() { return slotName; } @Override public ChainedLogicalStreamBuilder withStartPosition(LogSequenceNumber lsn) { startPosition = lsn; return this; } @Override public ChainedLogicalStreamBuilder withSlotOption(String optionName, boolean optionValue) { slotOptions.setProperty(optionName, String.valueOf(optionValue)); return this; } @Override public ChainedLogicalStreamBuilder withSlotOption(String optionName, int optionValue) { slotOptions.setProperty(optionName, String.valueOf(optionValue)); return this; } @Override public ChainedLogicalStreamBuilder withSlotOption(String optionName, String optionValue) { slotOptions.setProperty(optionName, optionValue); return this; } @Override public ChainedLogicalStreamBuilder withSlotOptions(Properties options) { for (String propertyName : options.stringPropertyNames()) { slotOptions.setProperty(propertyName, options.getProperty(propertyName)); } return this; } @Override public LogSequenceNumber getStartLSNPosition() { return startPosition; } @Override public Properties getSlotOptions() { return slotOptions; } @Override public int getStatusInterval() { return statusIntervalMs; } }