<?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</groupId>
        <artifactId>camel-olingo4-parent</artifactId>
        <version>3.7.0</version>
    </parent>

    <artifactId>camel-olingo4</artifactId>
    <name>Camel :: Olingo4 :: Component</name>
    <description>Camel Olingo4 component</description>

    <properties>
        <componentName>Olingo4</componentName>
        <schemeName>olingo4</schemeName>
        <maven.exe.file.extension />
        <componentPackage>org.apache.camel.component.olingo4</componentPackage>
        <outPackage>org.apache.camel.component.olingo4.internal</outPackage>
        <camel.osgi.private.pkg>${outPackage}</camel.osgi.private.pkg>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-olingo4-api</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.olingo</groupId>
            <artifactId>odata-client-api</artifactId>
            <version>${olingo4-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.olingo</groupId>
            <artifactId>odata-client-core</artifactId>
            <version>${olingo4-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.olingo</groupId>
            <artifactId>odata-commons-api</artifactId>
            <version>${olingo4-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3-version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test-junit5</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <defaultGoal>install</defaultGoal>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.camel</groupId>
                    <artifactId>camel-api-component-maven-plugin</artifactId>
                    <version>${project.version}</version>
                    <configuration>
                        <scheme>${schemeName}</scheme>
                        <componentName>${componentName}</componentName>
                        <componentPackage>${componentPackage}</componentPackage>
                        <outPackage>${outPackage}</outPackage>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-api-component-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-test-component-classes</id>
                        <goals>
                            <goal>fromApis</goal>
                        </goals>
                        <configuration>
                            <apis>
                                <api>
                                    <apiName />
                                    <proxyClass>org.apache.camel.component.olingo4.api.Olingo4App</proxyClass>
                                    <fromJavasource>
                                        <includeMethods>read|uread|delete|create|update|patch|merge|batch|action</includeMethods>
                                    </fromJavasource>
                                    <extraOptions>
                                        <extraOption>
                                            <name>keyPredicate</name>
                                            <type>java.lang.String</type>
                                            <description>OData Key predicate</description>
                                        </extraOption>
                                    </extraOptions>
                                    <nullableOptions>
                                        <nullableOption>queryParams</nullableOption>
                                        <nullableOption>endpointHttpHeaders</nullableOption>
                                        <nullableOption>edm</nullableOption>
                                        <nullableOption>responseHandler</nullableOption>
                                        <nullableOption>data</nullableOption>
                                    </nullableOptions>
                                </api>
                            </apis>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <!-- Component API to read API -->
                    <dependency>
                        <groupId>org.apache.camel</groupId>
                        <artifactId>camel-olingo4-api</artifactId>
                        <version>${project.version}</version>
                        <classifier>sources</classifier>
                    </dependency>
                </dependencies>
            </plugin>
            <plugin>
                <!-- we need to generate additional configurer classes -->
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-package-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-configurer</id>
                        <phase>process-classes</phase>
                        <goals>
                            <goal>generate-configurer</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>
