<?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>0.4.1-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>attachments</module>
        <module>aws-ecs</module>
        <module>aws-eks</module>
        <module>aws-kms</module>
        <module>aws-s3</module>
        <module>aws-sns</module>
        <module>aws-sqs</module>
        <module>bean</module>
        <module>bean-validator</module>
        <module>controlbus</module>
        <module>csv</module>
        <module>dataformat</module>
        <module>direct</module>
        <module>dozer</module>
        <module>exec</module>
        <module>fhir</module>
        <module>file</module>
        <module>ftp</module>
        <module>hystrix</module>
        <module>infinispan</module>
        <module>jackson</module>
        <module>jdbc</module>
        <module>kafka</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>servlet</module>
        <module>sjms</module>
        <module>sjms2</module>
        <module>slack</module>
        <module>snakeyaml</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>
        <module>seda</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>
