<?xml version="1.0" encoding="UTF-8"?>
<!--

    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.

-->
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.apache.camel</groupId>
        <artifactId>camel-vertx-kafka-parent</artifactId>
        <version>3.7.0</version>
    </parent>

    <artifactId>camel-vertx-kafka</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: Vert.x :: Kafka</name>
    <description>Camel Vertx Kafka support</description>

    <properties>
        <firstVersion>3.7.0</firstVersion>
    </properties>

    <dependencies>
        <dependency>
            <groupId>io.projectreactor</groupId>
            <artifactId>reactor-core</artifactId>
            <version>${reactor-version}</version>
        </dependency>

        <!-- test -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-infra-common</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-infra-kafka</artifactId>
            <version>${project.version}</version>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-1.2-api</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.awaitility</groupId>
            <artifactId>awaitility</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.camel.maven</groupId>
                <artifactId>camel-vertx-kafka-maven-plugin</artifactId>
                <version>${project.version}</version>
                <executions>
                    <execution>
                        <id>generate</id>
                        <goals>
                            <goal>generate-kafka-config</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <className>VertxKafkaConfiguration</className>
                    <additionalCommonConfigs>
                        <partition.id>
                            <name>partition.id</name>
                            <type>INT</type>
                            <documentation>The partition to which the record will be sent (or null if no partition was specified) or read from a particular partition if set. Header {@link VertxKafkaConstants#PARTITION_ID} If configured,
                                it will take precedence over this config</documentation>
                        </partition.id>
                        <topic>
                            <name>topic</name>
                            <type>STRING</type>
                            <isRequired>true</isRequired>
                            <isUriPathOption>true</isUriPathOption>
                            <documentation>Name of the topic to use. On the consumer you can use comma to separate multiple topics. A producer can only send
                                a message to a single topic.
                            </documentation>
                        </topic>
                    </additionalCommonConfigs>
                    <additionalConsumerConfigs>
                        <seek.to.position>
                            <name>seek.to.position</name>
                            <type>STRING</type>
                            <enums>
                                <param>beginning</param>
                                <param>end</param>
                            </enums>
                            <documentation>Set if KafkaConsumer will read from beginning or end on startup: beginning : read from beginning end : read from end.</documentation>
                        </seek.to.position>
                        <seek.to.offset>
                            <name>seek.to.offset</name>
                            <type>LONG</type>
                            <documentation>Set if KafkaConsumer will read from a particular offset on startup. This config will take precedence over seekTo config</documentation>
                        </seek.to.offset>
                    </additionalConsumerConfigs>
                    <overriddenDefaultValues>
                        <key.serializer>org.apache.kafka.common.serialization.StringSerializer</key.serializer>
                        <value.serializer>org.apache.kafka.common.serialization.StringSerializer</value.serializer>
                        <key.deserializer>org.apache.kafka.common.serialization.StringDeserializer</key.deserializer>
                        <value.deserializer>org.apache.kafka.common.serialization.StringDeserializer</value.deserializer>
                        <ssl.enabled.protocols>TLSv1.2,TLSv1.3</ssl.enabled.protocols>
                        <ssl.protocol>TLSv1.2</ssl.protocol>
                    </overriddenDefaultValues>
                    <generatedSrcDir>${project.basedir}/src/generated/java</generatedSrcDir>
                    <parentClassName>BaseVertxKafkaConfiguration</parentClassName>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
