<?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.4</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-core</artifactId>
    </dependency>
    <dependency>
      <groupId>com.cloudbees.thirdparty</groupId>
      <artifactId>zendesk-java-client</artifactId>
    </dependency>

    <!-- testing -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test</artifactId>
      <scope>test</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>
  </dependencies>

  <build>
    <defaultGoal>install</defaultGoal>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
      </plugin>
      <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>
                  <fromJavadoc>
                    <excludeMethods>isClosed|close|getTicketsByStatus|createGroups|importTickets</excludeMethods>
                  </fromJavadoc>
                  <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</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</method>
                      <argType>java.util.List</argType>
                      <argName>organizations</argName>
                      <replacement>organizationList</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>
                  </substitutions>
                </api>
              </apis>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>com.cloudbees.thirdparty</groupId>
            <artifactId>zendesk-java-client</artifactId>
            <version>${zendesk-client-version}</version>
            <type>javadoc</type>
          </dependency>
        </dependencies>
      </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>

  <profiles>
    <profile>
      <id>zendesk-test</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <childDelegation>false</childDelegation>
              <useFile>true</useFile>
              <forkCount>1</forkCount>
              <reuseForks>true</reuseForks>
              <forkedProcessTimeoutInSeconds>300</forkedProcessTimeoutInSeconds>
              <excludes>
                <exclude>**/*XXXTest.java</exclude>
              </excludes>
              <includes>
                <include>**/*Test.java</include>
              </includes>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

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