<?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>components</artifactId>
        <version>3.20.9</version>
    </parent>

    <artifactId>camel-asn1</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: ASN.1</name>
    <description>Camel ASN.1 support</description>

    <properties>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.bouncycastle</groupId>
            <artifactId>bcprov-jdk18on</artifactId>
            <version>${bouncycastle-version}</version>
        </dependency>
        <dependency>
            <groupId>com.beanit</groupId>
            <artifactId>asn1bean</artifactId>
            <version>${asn1bean-version}</version>
        </dependency>

        <!-- test dependencies -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring-xml</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-spring-junit5</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- these optional dependencies are needed because exec plugin
             doesn't obbey the plugin's dependencies and only supports
             compile and runtime dependencies -->
        <dependency>
            <groupId>com.beanit</groupId>
            <artifactId>asn1bean-compiler</artifactId>
            <version>${asn1bean-version}</version>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>${jaxb-api-version}</version>
            <optional>true</optional>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-test-sources</id>
                        <phase>generate-sources</phase>
                        <goals>
                            <goal>exec</goal>
                        </goals>
                        <configuration>
                            <executable>java</executable>
                            <arguments>
                                <argument>-classpath</argument>
                                <classpath>
                                    <dependency>com.beanit:asn1bean-compiler</dependency>
                                    <dependency>com.beanit:asn1bean</dependency>
                                    <dependency>antlr:antlr</dependency>
                                    <dependency>javax.xml.bind:jaxb-api</dependency>
                                </classpath>
                                <argument>com.beanit.asn1bean.compiler.Compiler</argument>
                                <argument>-o</argument>
                                <argument>${basedir}/target/generated/src/test/java</argument>
                                <argument>-p</argument>
                                <argument>org.apache.camel.dataformat.asn1.model</argument>
                                <argument>-f</argument>
                                <argument>${basedir}/src/test/resources/asn1_structure/TestSMSCBerCdr.asn1</argument>
                            </arguments>
                            <testSourceRoot>${basedir}/target/generated/src/test/java</testSourceRoot>
                            <longModulepath>false</longModulepath>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>
