<?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.11.6-SNAPSHOT</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>
