<?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/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.apache.camel.quarkus</groupId>
        <artifactId>camel-quarkus-parent</artifactId>
        <version>1.1.0-SNAPSHOT</version>
    </parent>

    <artifactId>camel-quarkus-extensions</artifactId>
    <packaging>pom</packaging>

    <name>Camel Quarkus :: Extensions</name>

    <modules>
        <!-- support extensions -->
        <module>support</module>

        <!-- common/shared extensions -->
        <module>core</module>
        <module>core-cloud</module>
        <module>core-xml</module>
        <module>http-common</module>
        <module>reactive-executor</module>

        <!-- extensions a..z; do not remove this comment, it is important when sorting via  mvn process-resources -Pformat -->
        <module>ahc</module>
        <module>attachments</module>
        <module>aws-ec2</module>
        <module>aws-ecs</module>
        <module>aws-eks</module>
        <module>aws-iam</module>
        <module>aws-kinesis</module>
        <module>aws-kms</module>
        <module>aws-lambda</module>
        <module>aws-s3</module>
        <module>aws-sns</module>
        <module>aws-sqs</module>
        <module>aws-translate</module>
        <module>base64</module>
        <module>bean</module>
        <module>bean-validator</module>
        <module>consul</module>
        <module>controlbus</module>
        <module>csv</module>
        <module>dataformat</module>
        <module>direct</module>
        <module>dozer</module>
        <module>endpointdsl</module>
        <module>exec</module>
        <module>fhir</module>
        <module>file</module>
        <module>ftp</module>
        <module>http</module>
        <module>hystrix</module>
        <module>infinispan</module>
        <module>jackson</module>
        <module>jdbc</module>
        <module>jsonpath</module>
        <module>kafka</module>
        <module>kotlin</module>
        <module>log</module>
        <module>mail</module>
        <module>microprofile-health</module>
        <module>microprofile-metrics</module>
        <module>mongodb</module>
        <module>netty</module>
        <module>netty-http</module>
        <module>opentracing</module>
        <module>paho</module>
        <module>pdf</module>
        <module>platform-http</module>
        <module>rest</module>
        <module>salesforce</module>
        <module>scheduler</module>
        <module>seda</module>
        <module>servlet</module>
        <module>sjms</module>
        <module>sjms2</module>
        <module>slack</module>
        <module>snakeyaml</module>
        <module>sql</module>
        <module>tagsoup</module>
        <module>tarfile</module>
        <module>timer</module>
        <module>twitter</module>
        <module>validator</module>
        <module>vm</module>
        <module>xslt</module>
        <module>zipfile</module>
    </modules>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.gmaven</groupId>
                <artifactId>groovy-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>validate-extension-metadata</id>
                        <inherited>false</inherited>
                        <goals>
                            <goal>execute</goal>
                        </goals>
                        <phase>verify</phase>
                        <configuration>
                            <source>file:///${project.basedir}/../tooling/scripts/validate-extension-metadata.groovy</source>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.yaml</groupId>
                        <artifactId>snakeyaml</artifactId>
                        <version>${snakeyaml.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <groupId>io.quarkus</groupId>
                <artifactId>quarkus-maven-plugin</artifactId>
                <inherited>false</inherited>
                <!-- Settings for stubbing new extensions. E.g. to add a new extension to support an imaginary
                     Camel Foo ABC component, you would run

                       mvn quarkus:create-extension -N -Dquarkus.artifactIdBase=foo-abc -Dquarkus.nameBase="Foo ABC"

                     -Dquarkus.nameBase is optional. If you do not specify it, the plugin will derive it from
                     artifactIdBase by replacing dashes with spaces and capitalizing the first letter of each token.
                -->
                <configuration>
                    <artifactIdPrefix>camel-quarkus-</artifactIdPrefix>
                    <namePrefix xml:space="preserve">Camel Quarkus :: </namePrefix>
                    <nameSegmentDelimiter xml:space="preserve"> :: </nameSegmentDelimiter>
                    <javaPackageInfix>component</javaPackageInfix>
                    <templatesUriBase>file:///${project.basedir}/../tooling/create-extension-templates</templatesUriBase>
                    <runtimeBomPath>../poms/bom/pom.xml</runtimeBomPath>
                    <deploymentBomPath>../poms/bom-deployment/pom.xml</deploymentBomPath>
                    <bomEntryVersion>@{camel-quarkus.version}</bomEntryVersion>
                    <itestParentPath>../integration-tests/pom.xml</itestParentPath>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>
