<?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>
    <parent>
        <groupId>org.apache.knox</groupId>
        <artifactId>gateway</artifactId>
        <version>2.0.0-SNAPSHOT</version>
    </parent>

    <artifactId>gateway-openapi-ui</artifactId>
    <name>gateway-openapi-ui</name>
    <packaging>jar</packaging>
    <description>Generating Open API (aka. Swagger) UI</description>

    <build>
        <plugins>
            <plugin>
                <groupId>com.github.kongchen</groupId>
                <artifactId>swagger-maven-plugin</artifactId>
                <version>${swagger-maven-plugin.version}</version>
                <configuration>
                    <apiSources>
                        <apiSource>
                            <locations>
                                <location>org.apache.knox.gateway.service.admin</location>
                            </locations>
                            <swaggerDirectory>${project.build.outputDirectory}/swagger</swaggerDirectory>
                            <swaggerFileName>admin</swaggerFileName>
                            <basePath>/gateway/admin</basePath>
                            <info>
                                <title>The Apache Knox Admin REST API</title>
                                <version>${project.version}</version>
                                <description>Swagger UI for Apache Knox Admin REST API</description>
                            </info>
                        </apiSource>
                        <apiSource>
                            <locations>
                                <location>org.apache.knox.gateway.service.metadata</location>
                            </locations>
                            <swaggerDirectory>${project.build.outputDirectory}/swagger</swaggerDirectory>
                            <swaggerFileName>metadata</swaggerFileName>
                            <basePath>/gateway/metadata</basePath>
                            <info>
                                <title>The Apache Knox Metadata REST API</title>
                                <version>${project.version}</version>
                                <description>Swagger UI for Apache Knox Metadata REST API</description>
                            </info>
                        </apiSource>
                    </apiSources>
                </configuration>
                <executions>
                    <execution>
                        <phase>compile</phase>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>org.apache.knox</groupId>
            <artifactId>gateway-service-admin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.knox</groupId>
            <artifactId>gateway-service-metadata</artifactId>
        </dependency>
    </dependencies>
</project>
