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

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

  <properties>
    <camel.osgi.import>
    	!org.apache.camel.dataformat.asn1,
    	*
    </camel.osgi.import>
    <camel.osgi.export>
    	org.apache.camel.dataformat.asn1;${camel.osgi.version}
    </camel.osgi.export>
    <camel.osgi.export.service>org.apache.camel.spi.DataFormatResolver;dataformat=asn1</camel.osgi.export.service>
    
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.bouncycastle</groupId>
      <artifactId>bcprov-jdk15on</artifactId>
      <version>${bouncycastle-version}</version>
    </dependency>
    <dependency>
      <groupId>org.openmuc</groupId>
      <artifactId>jasn1</artifactId>
      <version>${jasn1-version}</version>
    </dependency>

    <!-- test dependencies -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test-spring</artifactId>
      <scope>test</scope>
    </dependency>  
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <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>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <scope>test</scope>
    </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>java</goal>
             </goals>
             <configuration>
               <includeProjectDependencies>false</includeProjectDependencies>
               <includePluginDependencies>true</includePluginDependencies>
               <testSourceRoot>${basedir}/target/generated/src/test/java</testSourceRoot>
               <executableDependency>
                 <groupId>org.openmuc</groupId>
                 <artifactId>jasn1-compiler</artifactId>
               </executableDependency>
               <mainClass>org.openmuc.jasn1.compiler.Compiler</mainClass>
               <arguments>
                 <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>
                 <argument>-il</argument>
               </arguments>
             </configuration>
           </execution>
         </executions>
         <dependencies>
           <dependency>
             <groupId>org.openmuc</groupId>
             <artifactId>jasn1-compiler</artifactId>
             <version>${jasn1-version}</version>
           </dependency>
         </dependencies>
      </plugin>
    </plugins>
  </build>

</project>
