<?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-yaml-dsl-parent</artifactId>
        <version>3.14.8</version>
    </parent>

    <artifactId>camel-yaml-dsl-deserializers</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: YAML DSL :: Deserializers </name>
    <description>Camel DSL with YAML Deserializers</description>

    <properties>
        <firstVersion>3.9.0</firstVersion>
        <sourcecheckExcludes>
            **/*.groovy
        </sourcecheckExcludes>
        <sourcecheckExcludesComma>
            ${sourcecheckExcludes},
        </sourcecheckExcludesComma>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-yaml-dsl-common</artifactId>
            <version>${project.version}</version>
        </dependency>

        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.assertj</groupId>
            <artifactId>assertj-core</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.spockframework</groupId>
            <artifactId>spock-core</artifactId>
            <version>${spock-version}</version>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.codehaus.groovy</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>junit</groupId>
                    <artifactId>*</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy</artifactId>
            <version>${groovy-version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.codehaus.groovy</groupId>
            <artifactId>groovy-test</artifactId>
            <version>${groovy-version}</version>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</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-jcl</artifactId>
            <scope>test</scope>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-yaml-dsl-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>generate-yaml-deserializers</goal>
                        </goals>
                        <configuration>
                            <packageName>org.apache.camel.dsl.yaml.deserializers</packageName>
                            <bannedDefinitions>
                                <bannedDefinition>org.apache.camel.model.FromDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.language.ExpressionDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.ExpressionSubElementDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.PropertyDefinitions</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.KameletDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplateDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplateContextRefDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplatesDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteTemplateBeanDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RoutesDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RestsDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteConfigurationDefinition</bannedDefinition>
                                <bannedDefinition>org.apache.camel.model.RouteConfigurationsDefinition</bannedDefinition>
                            </bannedDefinitions>
                            <additionalDefinitions>
                                <!-- saga -->
                                <additionalDefinition>org.apache.camel.model.SagaOptionDefinition</additionalDefinition>
                                <additionalDefinition>org.apache.camel.model.SagaActionUriDefinition</additionalDefinition>
                                <!-- error handler -->
                                <additionalDefinition>org.apache.camel.builder.DeadLetterChannelBuilder</additionalDefinition>
                                <additionalDefinition>org.apache.camel.builder.ErrorHandlerBuilderRef</additionalDefinition>
                                <additionalDefinition>org.apache.camel.builder.NoErrorHandlerBuilder</additionalDefinition>
                                <additionalDefinition>org.apache.camel.builder.DefaultErrorHandlerBuilder</additionalDefinition>
                            </additionalDefinitions>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-catalog</artifactId>
                        <version>${project.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

</project>
