<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://maven.apache.org/POM/4.0.0"
         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-linkedin-parent</artifactId>
        <version>3.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>camel-linkedin</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: LinkedIn :: Component</name>
    <description>Camel LinkedIn component</description>

    <properties>
        <schemeName>linkedin</schemeName>
        <componentName>LinkedIn</componentName>
        <componentPackage>org.apache.camel.component.linkedin</componentPackage>
        <outPackage>org.apache.camel.component.linkedin.internal</outPackage>

        <camel.osgi.import.additional>
            org.apache.cxf.*;version="${cxf-version-range}"
        </camel.osgi.import.additional>
        <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-linkedin-api</artifactId>
        </dependency>

        <!-- Camel annotations in runtime scope to avoid compile errors in IDEs -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>spi-annotations</artifactId>
            <version>${project.version}</version>
            <scope>provided</scope>
        </dependency>

        <!-- Component API javadoc in provided scope to read API signatures -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-linkedin-api</artifactId>
            <version>${project.version}</version>
            <type>javadoc</type>
            <scope>provided</scope>
        </dependency>

        <!-- logging -->
        <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>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${commons-lang3-version}</version>
        </dependency>

        <!-- testing -->
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>

            <!-- generate Component source and test source -->
            <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>comments</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.CommentsResource</proxyClass>
                                    <fromJavadoc/>
                                </api>
                                <api>
                                    <apiName>companies</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.CompaniesResource</proxyClass>
                                    <fromJavadoc/>
                                    <nullableOptions>
                                        <nullableOption>companySizes</nullableOption>
                                        <nullableOption>count</nullableOption>
                                        <nullableOption>email_domain</nullableOption>
                                        <nullableOption>end_timestamp</nullableOption>
                                        <nullableOption>event_type</nullableOption>
                                        <nullableOption>geos</nullableOption>
                                        <nullableOption>industries</nullableOption>
                                        <nullableOption>is_company_admin</nullableOption>
                                        <nullableOption>jobFunc</nullableOption>
                                        <nullableOption>secure_urls</nullableOption>
                                        <nullableOption>seniorities</nullableOption>
                                        <nullableOption>start</nullableOption>
                                        <nullableOption>start_timestamp</nullableOption>
                                        <nullableOption>statistics_update_key</nullableOption>
                                        <nullableOption>time_granularity</nullableOption>
                                    </nullableOptions>
                                    <substitutions>
                                        <substitution>
                                            <method>^getHistoricalStatusUpdateStatistics$</method>
                                            <argName>update_key</argName>
                                            <argType>java.lang.String</argType>
                                            <replacement>statistics_update_key</replacement>
                                        </substitution>
                                    </substitutions>
                                </api>
                                <api>
                                    <apiName>groups</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.GroupsResource</proxyClass>
                                    <fromJavadoc/>
                                    <nullableOptions>
                                        <nullableOption>category</nullableOption>
                                        <nullableOption>count</nullableOption>
                                        <nullableOption>modified_since</nullableOption>
                                        <nullableOption>order</nullableOption>
                                        <nullableOption>start</nullableOption>
                                    </nullableOptions>
                                </api>
                                <api>
                                    <apiName>jobs</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.JobsResource</proxyClass>
                                    <fromJavadoc/>
                                </api>
                                <api>
                                    <apiName>people</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.PeopleResource</proxyClass>
                                    <fromJavadoc/>
                                    <nullableOptions>
                                        <nullableOption>after</nullableOption>
                                        <nullableOption>before</nullableOption>
                                        <nullableOption>category</nullableOption>
                                        <nullableOption>count</nullableOption>
                                        <nullableOption>membership_state</nullableOption>
                                        <nullableOption>modified_since</nullableOption>
                                        <nullableOption>order</nullableOption>
                                        <nullableOption>public_profile_url</nullableOption>
                                        <nullableOption>role</nullableOption>
                                        <nullableOption>scope</nullableOption>
                                        <nullableOption>secure_urls</nullableOption>
                                        <nullableOption>show_hidden_members</nullableOption>
                                        <nullableOption>start</nullableOption>
                                        <nullableOption>type</nullableOption>
                                    </nullableOptions>
                                </api>
                                <api>
                                    <apiName>posts</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.PostsResource</proxyClass>
                                    <fromJavadoc/>
                                    <nullableOptions>
                                        <nullableOption>count</nullableOption>
                                        <nullableOption>start</nullableOption>
                                    </nullableOptions>
                                </api>
                                <api>
                                    <apiName>search</apiName>
                                    <proxyClass>org.apache.camel.component.linkedin.api.SearchResource</proxyClass>
                                    <fromJavadoc/>
                                    <nullableOptions>
                                        <nullableOption>company_name</nullableOption>
                                        <nullableOption>count</nullableOption>
                                        <nullableOption>country_code</nullableOption>
                                        <nullableOption>current_company</nullableOption>
                                        <nullableOption>current_school</nullableOption>
                                        <nullableOption>current_title</nullableOption>
                                        <nullableOption>distance</nullableOption>
                                        <nullableOption>facet</nullableOption>
                                        <nullableOption>facets</nullableOption>
                                        <nullableOption>first_name</nullableOption>
                                        <nullableOption>hq_only</nullableOption>
                                        <nullableOption>job_title</nullableOption>
                                        <nullableOption>keywords</nullableOption>
                                        <nullableOption>last_name</nullableOption>
                                        <nullableOption>postal_code</nullableOption>
                                        <nullableOption>school_name</nullableOption>
                                        <nullableOption>sort</nullableOption>
                                        <nullableOption>start</nullableOption>
                                        <nullableOption>title</nullableOption>
                                    </nullableOptions>
                                </api>
                            </apis>
                            <aliases>
                                <alias>
                                    <methodPattern>(add|get|remove|search)(.+)</methodPattern>
                                    <methodAlias>$2</methodAlias>
                                </alias>
                            </aliases>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

            <!-- add generated source and test source to build -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>add-generated-sources</id>
                        <goals>
                            <goal>add-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/generated-sources/camel-component</source>
                            </sources>
                        </configuration>
                    </execution>
                    <execution>
                        <id>add-generated-test-sources</id>
                        <goals>
                            <goal>add-test-source</goal>
                        </goals>
                        <configuration>
                            <sources>
                                <source>${project.build.directory}/generated-test-sources/camel-component</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

        </plugins>

        <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>

    </build>

    <reporting>
        <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>
    </reporting>

</project>
