<?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>
    
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <apache.httpcomponents.ver>4.5.7</apache.httpcomponents.ver>
        <apache.common.lang.ver>3.8.1</apache.common.lang.ver>
        <commons.validator.ver>1.6</commons.validator.ver>
        <gson.ver>2.8.5</gson.ver>
        <log4j.ver>2.11.2</log4j.ver>
        <nlpcraft.ver>0.5.0</nlpcraft.ver>
        <junit.ver>5.4.0</junit.ver>
        <maven.compiler.version>3.7.0</maven.compiler.version>
        <maven.exec.version>1.6.0</maven.exec.version>
        <maven.shade.plugin.ver>3.1.0</maven.shade.plugin.ver>
        <maven.source.plugin.ver>3.0.1</maven.source.plugin.ver>
        <maven.gpg.plugin.ver>1.6</maven.gpg.plugin.ver>
        <maven.enforcer.plugin.ver>1.4.1</maven.enforcer.plugin.ver>
        <maven.surefire.plugin.ver>2.22.1</maven.surefire.plugin.ver>
        <maven.javadoc.plugin.ver>3.0.0-M1</maven.javadoc.plugin.ver>
        <maven.jar.plugin.ver>3.1.1</maven.jar.plugin.ver>
        <apache.rat.plugin.ver>0.13</apache.rat.plugin.ver>
    </properties>

    <name>NLPCraft - Java Client</name>
    <groupId>org.apache.nlpcraft</groupId>
    <artifactId>java-client</artifactId>
    <version>0.5.0</version>
    <url>https://nlpcraft.apache.org</url>
    <description>An open source API to convert natural language into actions.</description>

    <parent>
        <groupId>org.apache</groupId>
        <artifactId>apache</artifactId>
        <version>10</version>
    </parent>

    <developers>
        <developer>
            <id>aradzinski</id>
            <name>Aaron Radzinski</name>
            <email>aradzinski@apache.org</email>
            <organization>apache</organization>
            <organizationUrl>http://apache.org</organizationUrl>
            <roles>
                <role>architect</role>
            </roles>
        </developer>
    </developers>

    <licenses>
        <license>
            <name>Apache License, Version 2.0</name>
            <url>https://www.apache.org/licenses/LICENSE-2.0.txt</url>
            <distribution>repo</distribution>
            <comments>A business-friendly OSS license</comments>
        </license>
    </licenses>

    <scm>
        <url>https://github.com/apache/incubator-nlpcraft.git</url>
        <connection>scm:git:ssh://git@github.com/apache/incubator-nlpcraft.git</connection>
        <developerConnection>scm:git:ssh://git@github.com/apache/incubator-nlpcraft.git</developerConnection>
        <!-- Set actual tag name here -->
        <tag>HEAD</tag>
    </scm>

    <dependencies>
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>${apache.httpcomponents.ver}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>${apache.common.lang.ver}</version>
        </dependency>
        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>${commons.validator.ver}</version>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>${gson.ver}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>${log4j.ver}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.nlpcraft</groupId>
            <artifactId>nlpcraft</artifactId>
            <version>${nlpcraft.ver}</version>
        </dependency>
        <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>${junit.ver}</version>
            <scope>test</scope>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>${maven.compiler.version}</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven.surefire.plugin.ver}</version>
                <configuration>
                    <skipTests>true</skipTests>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-enforcer-plugin</artifactId>
                <version>${maven.enforcer.plugin.ver}</version>
                <configuration>
                    <rules>
                        <requireJavaVersion>
                            <message>
                                [INFO] ------------------------------------------------------------------------
                                [ERROR] You are trying to compile NLPCraft with inappropriate JDK version!
                                [ERROR] Detected JDK Version: ${java.runtime.version}
                                [ERROR] JDK version should be &gt;= 1.8.0_1.
                            </message>
                            <version>1.8,11</version>
                        </requireJavaVersion>
                    </rules>
                </configuration>
                <executions>
                    <execution>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <version>${maven.javadoc.plugin.ver}</version>
                <configuration>
                    <!-- Required as of JDK 8u121 -->
                    <additionalparam>--allow-script-in-comments, -Xdoclint:none</additionalparam>
                    <javadocDirectory>${project.basedir}/javadoc</javadocDirectory>
                    <docfilessubdirs>true</docfilessubdirs>
                    <encoding>UTF-8</encoding>
                    <failOnError>false</failOnError>
                    <sourcepath>${project.basedir}/src/main/java</sourcepath>
                    <stylesheetfile>${project.basedir}/javadoc/stylesheet.css</stylesheetfile>
                    <bottom>
                        <![CDATA[
                            <center>
                                <br/>
                                <span style="font-size: larger">Copyright &#169; {currentYear} Apache Software Foundation</span>
                                <br/>
                                <br/>
                                <img src="https://www.apache.org/img/ASF20thAnniversary.jpg" height="64px">
                            </center>
                        ]]>
                    </bottom>
                    <top>
                        <![CDATA[
                            <link href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">
                            <script src="{@docRoot}/resources/sh/scripts/XRegExp.js" type="text/javascript"></script>
                            <script src="{@docRoot}/resources/sh/scripts/shCore.js" type="text/javascript"></script>
                            <script src="{@docRoot}/resources/sh/scripts/shAutoloader.js" type="text/javascript"></script>
                            <link href="{@docRoot}/resources/sh/styles/shCoreNlpCraft.css" rel="stylesheet" type="text/css" title="Style">
                            <link href="{@docRoot}/resources/sh/styles/shThemeNlpCraft.css" rel="stylesheet" type="text/css" title="Style">
                            <link href="https://fonts.googleapis.com/css?family=Roboto+Mono" rel="stylesheet">
                            <script async defer src="https://buttons.github.io/buttons.js"></script>
                        ]]>
                    </top>
                    <subpackages>org.apache.nlpcraft.client</subpackages>
                    <excludePackageNames>
                        org.apache.nlpcraft.client.impl
                    </excludePackageNames>
                    <groups>
                        <group>
                            <title>Apache NLPCraft - Java Client</title>
                            <packages>
                                org.apache.nlpcraft.client
                            </packages>
                        </group>
                    </groups>
                    <header>
                        <![CDATA[
                            Apache NLPCraft - Java Client <span style="font-size: 80%">${project.version}</span>
                        ]]>
                    </header>
                    <footer>
                        <![CDATA[
                            <span style="vertical-align: super">Apache NLPCraft - Java Client ${project.version}</span>
                            <a style="vertical-align: super; margin-right: 10px" href="https://github.com/apache/incubator-nlpcraft-java-client" target="github"><i class="fa fa-github github-logo"></i></a>
                            <a class="github-button" href="https://github.com/apache/incubator-nlpcraft-java-client/subscription" data-icon="octicon-eye" aria-label="Watch on GitHub">Watch</a>
                            <a class="github-button" href="https://github.com/apache/incubator-nlpcraft-java-client" data-icon="octicon-star" aria-label="Star on GitHub">Star</a>
                            <a class="github-button" href="https://github.com/apache/incubator-nlpcraft-java-client/fork" data-icon="octicon-repo-forked" aria-label="Fork on GitHub">Fork</a>
                            <script type="text/javascript">
                                SyntaxHighlighter.defaults["auto-links"] = false;
                                SyntaxHighlighter.defaults["tab-size"] = 2;

                                SyntaxHighlighter.autoloader(
                                    'java                   {@docRoot}/resources/sh/scripts/shBrushJava.js',
                                    'js jscript javascript  {@docRoot}/resources/sh/scripts/shBrushJScript.js',
                                    'text plain             {@docRoot}/resources/sh/scripts/shBrushPlain.js',
                                    'py python              {@docRoot}/resources/sh/scripts/shBrushPython.js',
                                    'ruby rails ror rb      {@docRoot}/resources/sh/scripts/shBrushRuby.js',
                                    'scala                  {@docRoot}/resources/sh/scripts/shBrushScala.js',
                                    'sql                    {@docRoot}/resources/sh/scripts/shBrushSql.js',
                                    'xml xhtml xslt html    {@docRoot}/resources/sh/scripts/shBrushXml.js'
                                );
                                SyntaxHighlighter.all();
                            </script>
                        ]]>
                    </footer>
                    <doctitle>
                        <![CDATA[
                            Apache NLPCraft - Java Client API <span style="font-size: 80%">${project.version}</span>
                        ]]>
                    </doctitle>
                    <windowtitle>Apache NLPCraft - Java Client ${project.version}</windowtitle>
                    <show>public</show>
                    <verbose>false</verbose>
                </configuration>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>${maven.jar.plugin.ver}</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>test-jar</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-source-plugin</artifactId>
                <version>${maven.source.plugin.ver}</version>
                <executions>
                    <execution>
                        <id>attach-sources</id>
                        <goals>
                            <goal>jar-no-fork</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>release</id>
            <activation>
                <property>
                    <name>performRelease</name>
                    <value>true</value>
                </property>
            </activation>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.rat</groupId>
                        <artifactId>apache-rat-plugin</artifactId>
                        <version>${apache.rat.plugin.ver}</version>
                        <configuration>
                            <excludes>
                                <exclude>.gitignore</exclude>
                                <exclude>build</exclude>
                                <exclude>.idea/**/*</exclude>
                                <exclude>.git/**/*</exclude>
                                <exclude>*.iml</exclude>
                                <exclude>**/*.txt</exclude>
                                <exclude>idea/**/*</exclude>
                                <exclude>zips/**/*</exclude>
                                <exclude>javadoc/**/*</exclude>
                            </excludes>
                            <numUnapprovedLicenses>1000000</numUnapprovedLicenses>
                        </configuration>
                        <executions>
                            <execution>
                                <phase>verify</phase>
                                <goals>
                                    <goal>check</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-gpg-plugin</artifactId>
                        <version>${maven.gpg.plugin.ver}</version>
                        <configuration>
                            <keyname>${gpg.keyname}</keyname>
                            <passphrase>${gpg.passphrase}</passphrase>
                        </configuration>
                        <executions>
                            <execution>
                                <id>sign-artifacts</id>
                                <phase>verify</phase>
                                <goals>
                                    <goal>sign</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>