<?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.0.0-M1</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</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>
