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

    <parent>
        <groupId>org.apache.unomi</groupId>
        <artifactId>unomi-root</artifactId>
        <version>1.1.0-incubating</version>
    </parent>

    <artifactId>unomi-rest</artifactId>
    <name>Apache Unomi :: REST API</name>
    <description>Apache Unomi Context Server REST API</description>
    <packaging>bundle</packaging>

    <pluginRepositories>
        <pluginRepository>
            <id>miredot</id>
            <name>MireDot Releases</name>
            <url>http://nexus.qmino.com/content/repositories/miredot</url>
        </pluginRepository>
        <pluginRepository>
            <id>miredot-snapshots</id>
            <name>MireDot Releases</name>
            <url>http://nexus.qmino.com/content/repositories/miredot-snapshots</url>
        </pluginRepository>
    </pluginRepositories>

    <dependencies>
        <dependency>
            <groupId>org.apache.unomi</groupId>
            <artifactId>unomi-api</artifactId>
            <version>1.1.0-incubating</version>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.osgi</groupId>
            <artifactId>org.osgi.core</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <scope>provided</scope>
        </dependency>

        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-core</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-rs-security-cors</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.jaxrs</groupId>
            <artifactId>jackson-jaxrs-json-provider</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.unomi</groupId>
            <artifactId>unomi-persistence-spi</artifactId>
            <version>1.1.0-incubating</version>
            <scope>provided</scope>
        </dependency>
        <!--<dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-core</artifactId>
            <scope>compile</scope>
            <version>1.5.3</version>
            <exclusions>
                <exclusion>
                    <groupId>javax.ws.rs</groupId>
                    <artifactId>jsr311-api</artifactId>
                </exclusion>
            </exclusions>
        </dependency>-->
    </dependencies>

    <build>
        <plugins>
            <!--<plugin>
                <groupId>com.sebastian-daschner</groupId>
                <artifactId>jaxrs-analyzer-maven-plugin</artifactId>
                <version>0.8</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>analyze-jaxrs</goal>
                        </goals>
                        <configuration>
                            &lt;!&ndash; Available backends are plaintext (default), swagger and asciidoc &ndash;&gt;
                            <backend>swagger</backend>
                            &lt;!&ndash; Domain of the deployed project, defaults to example.com &ndash;&gt;
                            &lt;!&ndash;<deployedDomain>example.com</deployedDomain>&ndash;&gt;
                        </configuration>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.github.kongchen</groupId>
                <artifactId>swagger-maven-plugin</artifactId>
                <version>3.1.0</version>
                <configuration>
                    <apiSources>
                        <apiSource>
                            <springmvc>false</springmvc>
                            <locations>org.apache.unomi.rest</locations>
                            <templatePath>${basedir}/api-doc-template/markdown.hbs</templatePath>
                            <outputPath>${basedir}/generated/document.html</outputPath>
                            <swaggerDirectory>generated/swagger-ui</swaggerDirectory>
                            <info>
                                <title>Documentation for Apache Unomi's RESTful API</title>
                                <version>${project.version}</version>
                            </info>
                            <securityDefinitions>
                                <securityDefinition>
                                    <name>MybasicAuth</name>
                                    <type>basic</type>
                                </securityDefinition>
                            </securityDefinitions>
                        </apiSource>
                    </apiSources>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>-->
            <plugin>
                <groupId>com.qmino</groupId>
                <artifactId>miredot-plugin</artifactId>
                <version>2.0</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>restdoc</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <license>
                        cHJvamVjdHxvcmcuYXBhY2hlLnVub21pLnVub21pLXJlc3R8MjAxNi0xMi0zMXx0cnVlfC0xI01Dd0NGRnI4UlhTSVNMdDdXck85ODRwcVo3MFhoY0d0QWhSTU1BNVJBUUNZTkNnVkFPRkpZNGxYeWNIM01RPT0=
                    </license>
                    <output>
                        <title>Documentation for Apache Unomi's RESTful API ${project.version}</title>
                        <html>
                            <!-- optional html configuration -->
                            <location>${project.parent.build.directory}/staging/rest-api-doc</location>
                        </html>
                        <raml />
                    </output>
                    <restModel>
                        <restFramework>
                            <name>jax-rs</name>
                            <cxfServiceConfig>
                                <item>src/main/resources/OSGI-INF/blueprint/blueprint.xml</item>
                            </cxfServiceConfig>
                        </restFramework>
                        <externalSources>
                            <sourceDirs>
                                <sourceDir>../api/src/main/java</sourceDir>
                            </sourceDirs>
                        </externalSources>
                    </restModel>
                    <analysis>
                        <checks>
                            <JAVADOC_MISSING_SUMMARY>warn</JAVADOC_MISSING_SUMMARY>
                            <JAVADOC_MISSING_INTERFACEDOCUMENTATION>warn</JAVADOC_MISSING_INTERFACEDOCUMENTATION>
                            <JAVADOC_MISSING_PARAMETER_DOCUMENTATION>warn</JAVADOC_MISSING_PARAMETER_DOCUMENTATION>
                            <JAVADOC_MISSING_EXCEPTION_DOCUMENTATION>warn</JAVADOC_MISSING_EXCEPTION_DOCUMENTATION>
                            <JAVADOC_MISSING_AUTHORS>ignore</JAVADOC_MISSING_AUTHORS>
                            <JAXRS_MISSING_PRODUCES>warn</JAXRS_MISSING_PRODUCES>
                            <JAXRS_MISSING_CONSUMES>warn</JAXRS_MISSING_CONSUMES>
                            <JAXRS_MISSING_PATH_PARAM>warn</JAXRS_MISSING_PATH_PARAM>
                            <REST_UNMAPPED_EXCEPTION>warn</REST_UNMAPPED_EXCEPTION>
                            <UNREACHABLE_RESOURCE>warn</UNREACHABLE_RESOURCE>
                            <PARTIAL_RESOURCE_OVERLAP>warn</PARTIAL_RESOURCE_OVERLAP>
                        </checks>
                    </analysis>
                </configuration>
            </plugin>
        </plugins>
    </build>

    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-javadoc-plugin</artifactId>
                <configuration>
                    <tags>
                        <tag>
                            <name>summary</name>
                            <placement>a</placement>
                            <head>MireDot summary (resource title)</head>
                        </tag>
                        <tag>
                            <name>title</name>
                            <placement>a</placement>
                            <head>MireDot title (resource title)</head>
                        </tag>
                        <tag>
                            <name>servicetag</name>
                            <placement>a</placement>
                            <head>MireDot resource tag (label)</head>
                        </tag>
                        <tag>
                            <name>statuscode</name>
                            <placement>a</placement>
                            <head>MireDot resource status code(s)</head>
                        </tag>
                        <tag>
                            <name>responseheader</name>
                            <placement>a</placement>
                            <head>MireDot response header</head>
                        </tag>
                    </tags>
                </configuration>
            </plugin>
        </plugins>
    </reporting>

</project>
