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

    <artifactId>camel-zendesk</artifactId>
    <packaging>jar</packaging>
    <name>Camel :: Zendesk</name>
    <description>Camel Zendesk Component</description>

    <properties>
        <schemeName>zendesk</schemeName>
        <componentName>Zendesk</componentName>
        <componentPackage>org.apache.camel.component.zendesk</componentPackage>
        <outPackage>org.apache.camel.component.zendesk.internal</outPackage>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-support</artifactId>
        </dependency>
        <dependency>
            <groupId>com.cloudbees.thirdparty</groupId>
            <artifactId>zendesk-java-client</artifactId>
        </dependency>

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

        <!-- logging -->
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-slf4j-impl</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <defaultGoal>install</defaultGoal>
        <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.zendesk.client.v2.Zendesk</proxyClass>
                                    <fromJavasource>
                                        <excludeMethods>isClosed|close|getTicketsByStatus|createGroups|importTickets|createMappe
                                        </excludeMethods>
                                    </fromJavasource>
                                    <substitutions>
                                        <substitution>
                                            <method>deleteSuspendedTicket|checkHasId</method>
                                            <argType>SuspendedTicket</argType>
                                            <argName>ticket</argName>
                                            <replacement>suspendedTicket</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>deleteAutomation</method>
                                            <argType>long</argType>
                                            <argName>automationId</argName>
                                            <replacement>automationId0</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>createUsers|createUsersAsync</method>
                                            <argType>java.util.List</argType>
                                            <argName>users</argName>
                                            <replacement>userList</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>getTicketAudits</method>
                                            <argType>java.lang.Long</argType>
                                            <argName>id</argName>
                                            <replacement>ticketId0</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>updateMacro</method>
                                            <argType>java.lang.Long</argType>
                                            <argName>macroId</argName>
                                            <replacement>macroId0</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>deleteArticleAttachment</method>
                                            <argType>ArticleAttachments</argType>
                                            <argName>attachment</argName>
                                            <replacement>articleAttachments</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>createTickets|createTicketsAsync|updateTickets|updateTicketsAsync</method>
                                            <argType>java.util.List</argType>
                                            <argName>tickets</argName>
                                            <replacement>ticketList</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>updateInstallation</method>
                                            <argType>int</argType>
                                            <argName>id</argName>
                                            <replacement>installationId</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>getUserSubscriptions</method>
                                            <argType>java.lang.Long</argType>
                                            <argName>userId</argName>
                                            <replacement>userId0</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>createOrganizations|createOrganizationsAsync|updateOrganizations|updateOrganizationsAsync</method>
                                            <argType>java.util.List</argType>
                                            <argName>organizations</argName>
                                            <replacement>organizationList</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>createOrganizationMemberships|createOrganizationMembershipsAsync</method>
                                            <argType>java.util.List</argType>
                                            <argName>organizationMemberships</argName>
                                            <replacement>organizationMembershipList</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>createUsers|createUsersAsync|createOrUpdateUsers|createOrUpdateUsersAsync|updateUsers|updateUsersAsync</method>
                                            <argType>java.util.List</argType>
                                            <argName>users</argName>
                                            <replacement>usersList</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>updateTrigger</method>
                                            <argType>java.lang.Long</argType>
                                            <argName>triggerId</argName>
                                            <replacement>triggerId0</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>createUploadArticle</method>
                                            <argType>long</argType>
                                            <argName>articleId</argName>
                                            <replacement>articleId0</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>getAttachmentsFromArticle</method>
                                            <argType>java.lang.Long</argType>
                                            <argName>articleID</argName>
                                            <replacement>articleId</replacement>
                                        </substitution>
                                        <substitution>
                                            <method>getSearchResults</method>
                                            <argType>java.lang.String</argType>
                                            <argName>params</argName>
                                            <replacement>parameters</replacement>
                                        </substitution>
                                    </substitutions>
                                </api>
                            </apis>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>com.cloudbees.thirdparty</groupId>
                        <artifactId>zendesk-java-client</artifactId>
                        <version>${zendesk-client-version}</version>
                        <classifier>sources</classifier>
                    </dependency>
                </dependencies>
            </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>
</project>
