<?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.14.2</version>
    </parent>

    <artifactId>camel-vertx-kafka</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: Vert.x :: Kafka (deprecated)</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>
