content: /*
   * Licensed to the Apache Software Foundation (ASF) under one or more
   * contributor license agreements.  See the NOTICE file distributed with
   * this work for additional information regarding copyright ownership.
   * The ASF licenses this file to You under the Apache License, Version 2.0
   * (the "License"); you may not use this file except in compliance with
   * the License.  You may obtain a copy of the License at
   *
   *      http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  package org.apache.camel.component.pulsar.springboot;
  
  import org.apache.camel.component.pulsar.PulsarComponent;
  import org.apache.camel.component.pulsar.PulsarConfiguration;
  import org.apache.camel.component.pulsar.PulsarMessageReceiptFactory;
  import org.apache.camel.component.pulsar.utils.AutoConfiguration;
  import org.apache.camel.component.pulsar.utils.consumers.SubscriptionInitialPosition;
  import org.apache.camel.component.pulsar.utils.consumers.SubscriptionType;
  import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
  import org.apache.pulsar.client.api.BatcherBuilder;
  import org.apache.pulsar.client.api.CompressionType;
  import org.apache.pulsar.client.api.MessageRouter;
  import org.apache.pulsar.client.api.MessageRoutingMode;
  import org.apache.pulsar.client.api.PulsarClient;
  import org.apache.pulsar.client.api.RedeliveryBackoff;
  import org.apache.pulsar.client.api.RegexSubscriptionMode;
  import org.springframework.boot.context.properties.ConfigurationProperties;
  import org.springframework.boot.context.properties.DeprecatedConfigurationProperty;
  
  /**
   * Send and receive messages from/to Apache Pulsar messaging system.
   * 
   * Generated by camel-package-maven-plugin - do not edit this file!
   */
  @ConfigurationProperties(prefix = "camel.component.pulsar")
  public class PulsarComponentConfiguration
          extends
              ComponentConfigurationPropertiesCommon {
  
      /**
       * Whether to enable auto configuration of the pulsar component. This is
       * enabled by default.
       */
      private Boolean enabled;
      /**
       * The Authentication FQCN to be used while creating the client from URI
       */
      private String authenticationClass;
      /**
       * The Authentication Parameters to be used while creating the client from
       * URI
       */
      private String authenticationParams;
      /**
       * Allows to pre-configure the Pulsar component with common options that the
       * endpoints will reuse. The option is a
       * org.apache.camel.component.pulsar.PulsarConfiguration type.
       */
      private PulsarConfiguration configuration;
      /**
       * The Pulsar Service URL to point while creating the client from URI
       */
      private String serviceUrl;
      /**
       * Group the consumer acknowledgments for the specified time in milliseconds
       * - defaults to 100
       */
      private Long ackGroupTimeMillis = 100L;
      /**
       * Timeout for unacknowledged messages in milliseconds - defaults to 10000
       */
      private Long ackTimeoutMillis = 10000L;
      /**
       * RedeliveryBackoff to use for ack timeout redelivery backoff. The option
       * is a org.apache.pulsar.client.api.RedeliveryBackoff type.
       */
      private RedeliveryBackoff ackTimeoutRedeliveryBackoff;
      /**
       * Whether to allow manual message acknowledgements. If this option is
       * enabled, then messages are not acknowledged automatically after
       * successful route completion. Instead, an instance of PulsarMessageReceipt
       * is stored as a header on the org.apache.camel.Exchange. Messages can then
       * be acknowledged using PulsarMessageReceipt at any time before the
       * ackTimeout occurs.
       */
      private Boolean allowManualAcknowledgement = false;
      /**
       * Allows for bridging the consumer to the Camel routing Error Handler,
       * which mean any exceptions (if possible) occurred while the Camel consumer
       * is trying to pickup incoming messages, or the likes, will now be
       * processed as a message and handled by the routing Error Handler.
       * Important: This is only possible if the 3rd party component allows Camel
       * to be alerted if an exception was thrown. Some components handle this
       * internally only, and therefore bridgeErrorHandler is not possible. In
       * other situations we may improve the Camel component to hook into the 3rd
       * party component and make this possible for future releases. By default
       * the consumer will use the org.apache.camel.spi.ExceptionHandler to deal
       * with exceptions, that will be logged at WARN or ERROR level and ignored.
       */
      private Boolean bridgeErrorHandler = false;
      /**
       * Name of the consumer when subscription is EXCLUSIVE
       */
      private String consumerName = "sole-consumer";
      /**
       * Prefix to add to consumer names when a SHARED or FAILOVER subscription is
       * used
       */
      private String consumerNamePrefix = "cons";
      /**
       * Size of the consumer queue - defaults to 10
       */
      private Integer consumerQueueSize = 10;
      /**
       * Name of the topic where the messages which fail maxRedeliverCount times
       * will be sent. Note: if not set, default topic name will be
       * topicName-subscriptionName-DLQ
       */
      private String deadLetterTopic;
      /**
       * To enable retry letter topic mode. The default retry letter topic uses
       * this format: topicname-subscriptionname-RETRY
       */
      private Boolean enableRetry = false;
      /**
       * Policy to use by consumer when using key-shared subscription type.
       */
      private String keySharedPolicy;
      /**
       * Maximum number of times that a message will be redelivered before being
       * sent to the dead letter queue. If this value is not set, no Dead Letter
       * Policy will be created
       */
      private Integer maxRedeliverCount;
      /**
       * Whether to use the messageListener interface, or to receive messages
       * using a separate thread pool
       */
      private Boolean messageListener = true;
      /**
       * RedeliveryBackoff to use for negative ack redelivery backoff. The option
       * is a org.apache.pulsar.client.api.RedeliveryBackoff type.
       */
      private RedeliveryBackoff negativeAckRedeliveryBackoff;
      /**
       * Set the negative acknowledgement delay
       */
      private Long negativeAckRedeliveryDelayMicros = 60000000L;
      /**
       * Number of consumers - defaults to 1
       */
      private Integer numberOfConsumers = 1;
      /**
       * Number of threads to receive and handle messages when using a separate
       * thread pool
       */
      private Integer numberOfConsumerThreads = 1;
      /**
       * Enable compacted topic reading.
       */
      private Boolean readCompacted = false;
      /**
       * Name of the topic to use in retry mode. Note: if not set, default topic
       * name will be topicName-subscriptionName-RETRY
       */
      private String retryLetterTopic;
      /**
       * Control the initial position in the topic of a newly created
       * subscription. Default is latest message.
       */
      private SubscriptionInitialPosition subscriptionInitialPosition = SubscriptionInitialPosition.LATEST;
      /**
       * Name of the subscription to use
       */
      private String subscriptionName = "subs";
      /**
       * Determines to which topics this consumer should be subscribed to -
       * Persistent, Non-Persistent, or both. Only used with pattern
       * subscriptions.
       */
      private RegexSubscriptionMode subscriptionTopicsMode = RegexSubscriptionMode.PersistentOnly;
      /**
       * Type of the subscription EXCLUSIVESHAREDFAILOVERKEY_SHARED, defaults to
       * EXCLUSIVE
       */
      private SubscriptionType subscriptionType = SubscriptionType.EXCLUSIVE;
      /**
       * Whether the topic is a pattern (regular expression) that allows the
       * consumer to subscribe to all matching topics in the namespace
       */
      private Boolean topicsPattern = false;
      /**
       * Provide a factory to create an alternate implementation of
       * PulsarMessageReceipt. The option is a
       * org.apache.camel.component.pulsar.PulsarMessageReceiptFactory type.
       */
      private PulsarMessageReceiptFactory pulsarMessageReceiptFactory;
      /**
       * Control batching method used by the producer. The option is a
       * org.apache.pulsar.client.api.BatcherBuilder type.
       */
      private BatcherBuilder batcherBuilder;
      /**
       * Control whether automatic batching of messages is enabled for the
       * producer.
       */
      private Boolean batchingEnabled = true;
      /**
       * The maximum size to batch messages.
       */
      private Integer batchingMaxMessages = 1000;
      /**
       * The maximum time period within which the messages sent will be batched if
       * batchingEnabled is true.
       */
      private Long batchingMaxPublishDelayMicros = 1000L;
      /**
       * Whether to block the producing thread if pending messages queue is full
       * or to throw a ProducerQueueIsFullError
       */
      private Boolean blockIfQueueFull = false;
      /**
       * Control whether chunking of messages is enabled for the producer.
       */
      private Boolean chunkingEnabled = false;
      /**
       * Compression type to use
       */
      private CompressionType compressionType = CompressionType.NONE;
      /**
       * Hashing function to use when choosing the partition to use for a
       * particular message
       */
      private String hashingScheme = "JavaStringHash";
      /**
       * The first message published will have a sequence Id of initialSequenceId
       * 1.
       */
      private Long initialSequenceId = -1L;
      /**
       * Whether the producer should be started lazy (on the first message). By
       * starting lazy you can use this to allow CamelContext and routes to
       * startup in situations where a producer may otherwise fail during starting
       * and cause the route to fail being started. By deferring this startup to
       * be lazy then the startup failure can be handled during routing messages
       * via Camel's routing error handlers. Beware that when the first message is
       * processed then creating and starting the producer may take a little time
       * and prolong the total processing time of the processing.
       */
      private Boolean lazyStartProducer = false;
      /**
       * Size of the pending massages queue. When the queue is full, by default,
       * any further sends will fail unless blockIfQueueFull=true
       */
      private Integer maxPendingMessages = 1000;
      /**
       * The maximum number of pending messages for partitioned topics. The
       * maxPendingMessages value will be reduced if (number of partitions
       * maxPendingMessages) exceeds this value. Partitioned topics have a pending
       * message queue for each partition.
       */
      @Deprecated
      private Integer maxPendingMessagesAcrossPartitions = 50000;
      /**
       * Custom Message Router to use. The option is a
       * org.apache.pulsar.client.api.MessageRouter type.
       */
      private MessageRouter messageRouter;
      /**
       * Message Routing Mode to use
       */
      private MessageRoutingMode messageRoutingMode = MessageRoutingMode.RoundRobinPartition;
      /**
       * Name of the producer. If unset, lets Pulsar select a unique identifier.
       */
      private String producerName;
      /**
       * Send timeout in milliseconds
       */
      private Integer sendTimeoutMs = 30000;
      /**
       * The pulsar auto configuration. The option is a
       * org.apache.camel.component.pulsar.utils.AutoConfiguration type.
       */
      private AutoConfiguration autoConfiguration;
      /**
       * Whether autowiring is enabled. This is used for automatic autowiring
       * options (the option must be marked as autowired) by looking up in the
       * registry to find if there is a single instance of matching type, which
       * then gets configured on the component. This can be used for automatic
       * configuring JDBC data sources, JMS connection factories, AWS Clients,
       * etc.
       */
      private Boolean autowiredEnabled = true;
      /**
       * The pulsar client. The option is a
       * org.apache.pulsar.client.api.PulsarClient type.
       */
      private PulsarClient pulsarClient;
  
      public String getAuthenticationClass() {
          return authenticationClass;
      }
  
      public void setAuthenticationClass(String authenticationClass) {
          this.authenticationClass = authenticationClass;
      }
  
      public String getAuthenticationParams() {
          return authenticationParams;
      }
  
      public void setAuthenticationParams(String authenticationParams) {
          this.authenticationParams = authenticationParams;
      }
  
      public PulsarConfiguration getConfiguration() {
          return configuration;
      }
  
      public void setConfiguration(PulsarConfiguration configuration) {
          this.configuration = configuration;
      }
  
      public String getServiceUrl() {
          return serviceUrl;
      }
  
      public void setServiceUrl(String serviceUrl) {
          this.serviceUrl = serviceUrl;
      }
  
      public Long getAckGroupTimeMillis() {
          return ackGroupTimeMillis;
      }
  
      public void setAckGroupTimeMillis(Long ackGroupTimeMillis) {
          this.ackGroupTimeMillis = ackGroupTimeMillis;
      }
  
      public Long getAckTimeoutMillis() {
          return ackTimeoutMillis;
      }
  
      public void setAckTimeoutMillis(Long ackTimeoutMillis) {
          this.ackTimeoutMillis = ackTimeoutMillis;
      }
  
      public RedeliveryBackoff getAckTimeoutRedeliveryBackoff() {
          return ackTimeoutRedeliveryBackoff;
      }
  
      public void setAckTimeoutRedeliveryBackoff(
              RedeliveryBackoff ackTimeoutRedeliveryBackoff) {
          this.ackTimeoutRedeliveryBackoff = ackTimeoutRedeliveryBackoff;
      }
  
      public Boolean getAllowManualAcknowledgement() {
          return allowManualAcknowledgement;
      }
  
      public void setAllowManualAcknowledgement(Boolean allowManualAcknowledgement) {
          this.allowManualAcknowledgement = allowManualAcknowledgement;
      }
  
      public Boolean getBridgeErrorHandler() {
          return bridgeErrorHandler;
      }
  
      public void setBridgeErrorHandler(Boolean bridgeErrorHandler) {
          this.bridgeErrorHandler = bridgeErrorHandler;
      }
  
      public String getConsumerName() {
          return consumerName;
      }
  
      public void setConsumerName(String consumerName) {
          this.consumerName = consumerName;
      }
  
      public String getConsumerNamePrefix() {
          return consumerNamePrefix;
      }
  
      public void setConsumerNamePrefix(String consumerNamePrefix) {
          this.consumerNamePrefix = consumerNamePrefix;
      }
  
      public Integer getConsumerQueueSize() {
          return consumerQueueSize;
      }
  
      public void setConsumerQueueSize(Integer consumerQueueSize) {
          this.consumerQueueSize = consumerQueueSize;
      }
  
      public String getDeadLetterTopic() {
          return deadLetterTopic;
      }
  
      public void setDeadLetterTopic(String deadLetterTopic) {
          this.deadLetterTopic = deadLetterTopic;
      }
  
      public Boolean getEnableRetry() {
          return enableRetry;
      }
  
      public void setEnableRetry(Boolean enableRetry) {
          this.enableRetry = enableRetry;
      }
  
      public String getKeySharedPolicy() {
          return keySharedPolicy;
      }
  
      public void setKeySharedPolicy(String keySharedPolicy) {
          this.keySharedPolicy = keySharedPolicy;
      }
  
      public Integer getMaxRedeliverCount() {
          return maxRedeliverCount;
      }
  
      public void setMaxRedeliverCount(Integer maxRedeliverCount) {
          this.maxRedeliverCount = maxRedeliverCount;
      }
  
      public Boolean getMessageListener() {
          return messageListener;
      }
  
      public void setMessageListener(Boolean messageListener) {
          this.messageListener = messageListener;
      }
  
      public RedeliveryBackoff getNegativeAckRedeliveryBackoff() {
          return negativeAckRedeliveryBackoff;
      }
  
      public void setNegativeAckRedeliveryBackoff(
              RedeliveryBackoff negativeAckRedeliveryBackoff) {
          this.negativeAckRedeliveryBackoff = negativeAckRedeliveryBackoff;
      }
  
      public Long getNegativeAckRedeliveryDelayMicros() {
          return negativeAckRedeliveryDelayMicros;
      }
  
      public void setNegativeAckRedeliveryDelayMicros(
              Long negativeAckRedeliveryDelayMicros) {
          this.negativeAckRedeliveryDelayMicros = negativeAckRedeliveryDelayMicros;
      }
  
      public Integer getNumberOfConsumers() {
          return numberOfConsumers;
      }
  
      public void setNumberOfConsumers(Integer numberOfConsumers) {
          this.numberOfConsumers = numberOfConsumers;
      }
  
      public Integer getNumberOfConsumerThreads() {
          return numberOfConsumerThreads;
      }
  
      public void setNumberOfConsumerThreads(Integer numberOfConsumerThreads) {
          this.numberOfConsumerThreads = numberOfConsumerThreads;
      }
  
      public Boolean getReadCompacted() {
          return readCompacted;
      }
  
      public void setReadCompacted(Boolean readCompacted) {
          this.readCompacted = readCompacted;
      }
  
      public String getRetryLetterTopic() {
          return retryLetterTopic;
      }
  
      public void setRetryLetterTopic(String retryLetterTopic) {
          this.retryLetterTopic = retryLetterTopic;
      }
  
      public SubscriptionInitialPosition getSubscriptionInitialPosition() {
          return subscriptionInitialPosition;
      }
  
      public void setSubscriptionInitialPosition(
              SubscriptionInitialPosition subscriptionInitialPosition) {
          this.subscriptionInitialPosition = subscriptionInitialPosition;
      }
  
      public String getSubscriptionName() {
          return subscriptionName;
      }
  
      public void setSubscriptionName(String subscriptionName) {
          this.subscriptionName = subscriptionName;
      }
  
      public RegexSubscriptionMode getSubscriptionTopicsMode() {
          return subscriptionTopicsMode;
      }
  
      public void setSubscriptionTopicsMode(
              RegexSubscriptionMode subscriptionTopicsMode) {
          this.subscriptionTopicsMode = subscriptionTopicsMode;
      }
  
      public SubscriptionType getSubscriptionType() {
          return subscriptionType;
      }
  
      public void setSubscriptionType(SubscriptionType subscriptionType) {
          this.subscriptionType = subscriptionType;
      }
  
      public Boolean getTopicsPattern() {
          return topicsPattern;
      }
  
      public void setTopicsPattern(Boolean topicsPattern) {
          this.topicsPattern = topicsPattern;
      }
  
      public PulsarMessageReceiptFactory getPulsarMessageReceiptFactory() {
          return pulsarMessageReceiptFactory;
      }
  
      public void setPulsarMessageReceiptFactory(
              PulsarMessageReceiptFactory pulsarMessageReceiptFactory) {
          this.pulsarMessageReceiptFactory = pulsarMessageReceiptFactory;
      }
  
      public BatcherBuilder getBatcherBuilder() {
          return batcherBuilder;
      }
  
      public void setBatcherBuilder(BatcherBuilder batcherBuilder) {
          this.batcherBuilder = batcherBuilder;
      }
  
      public Boolean getBatchingEnabled() {
          return batchingEnabled;
      }
  
      public void setBatchingEnabled(Boolean batchingEnabled) {
          this.batchingEnabled = batchingEnabled;
      }
  
      public Integer getBatchingMaxMessages() {
          return batchingMaxMessages;
      }
  
      public void setBatchingMaxMessages(Integer batchingMaxMessages) {
          this.batchingMaxMessages = batchingMaxMessages;
      }
  
      public Long getBatchingMaxPublishDelayMicros() {
          return batchingMaxPublishDelayMicros;
      }
  
      public void setBatchingMaxPublishDelayMicros(
              Long batchingMaxPublishDelayMicros) {
          this.batchingMaxPublishDelayMicros = batchingMaxPublishDelayMicros;
      }
  
      public Boolean getBlockIfQueueFull() {
          return blockIfQueueFull;
      }
  
      public void setBlockIfQueueFull(Boolean blockIfQueueFull) {
          this.blockIfQueueFull = blockIfQueueFull;
      }
  
      public Boolean getChunkingEnabled() {
          return chunkingEnabled;
      }
  
      public void setChunkingEnabled(Boolean chunkingEnabled) {
          this.chunkingEnabled = chunkingEnabled;
      }
  
      public CompressionType getCompressionType() {
          return compressionType;
      }
  
      public void setCompressionType(CompressionType compressionType) {
          this.compressionType = compressionType;
      }
  
      public String getHashingScheme() {
          return hashingScheme;
      }
  
      public void setHashingScheme(String hashingScheme) {
          this.hashingScheme = hashingScheme;
      }
  
      public Long getInitialSequenceId() {
          return initialSequenceId;
      }
  
      public void setInitialSequenceId(Long initialSequenceId) {
          this.initialSequenceId = initialSequenceId;
      }
  
      public Boolean getLazyStartProducer() {
          return lazyStartProducer;
      }
  
      public void setLazyStartProducer(Boolean lazyStartProducer) {
          this.lazyStartProducer = lazyStartProducer;
      }
  
      public Integer getMaxPendingMessages() {
          return maxPendingMessages;
      }
  
      public void setMaxPendingMessages(Integer maxPendingMessages) {
          this.maxPendingMessages = maxPendingMessages;
      }
  
      @Deprecated
      @DeprecatedConfigurationProperty
      public Integer getMaxPendingMessagesAcrossPartitions() {
          return maxPendingMessagesAcrossPartitions;
      }
  
      @Deprecated
      public void setMaxPendingMessagesAcrossPartitions(
              Integer maxPendingMessagesAcrossPartitions) {
          this.maxPendingMessagesAcrossPartitions = maxPendingMessagesAcrossPartitions;
      }
  
      public MessageRouter getMessageRouter() {
          return messageRouter;
      }
  
      public void setMessageRouter(MessageRouter messageRouter) {
          this.messageRouter = messageRouter;
      }
  
      public MessageRoutingMode getMessageRoutingMode() {
          return messageRoutingMode;
      }
  
      public void setMessageRoutingMode(MessageRoutingMode messageRoutingMode) {
          this.messageRoutingMode = messageRoutingMode;
      }
  
      public String getProducerName() {
          return producerName;
      }
  
      public void setProducerName(String producerName) {
          this.producerName = producerName;
      }
  
      public Integer getSendTimeoutMs() {
          return sendTimeoutMs;
      }
  
      public void setSendTimeoutMs(Integer sendTimeoutMs) {
          this.sendTimeoutMs = sendTimeoutMs;
      }
  
      public AutoConfiguration getAutoConfiguration() {
          return autoConfiguration;
      }
  
      public void setAutoConfiguration(AutoConfiguration autoConfiguration) {
          this.autoConfiguration = autoConfiguration;
      }
  
      public Boolean getAutowiredEnabled() {
          return autowiredEnabled;
      }
  
      public void setAutowiredEnabled(Boolean autowiredEnabled) {
          this.autowiredEnabled = autowiredEnabled;
      }
  
      public PulsarClient getPulsarClient() {
          return pulsarClient;
      }
  
      public void setPulsarClient(PulsarClient pulsarClient) {
          this.pulsarClient = pulsarClient;
      }
  }