<?xml version="1.0" encoding="UTF-8"?>
<!--
  ============LICENSE_START=======================================================
  ONAP : APPC
  ================================================================================
  Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  ================================================================================
  Copyright (C) 2017 Amdocs
  =============================================================================
  Licensed 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.

  ============LICENSE_END=========================================================
  -->
<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>
        <artifactId>appc-java-client</artifactId>
        <groupId>org.onap.appc.client</groupId>
        <version>1.4.0-SNAPSHOT</version>
    </parent>

    <artifactId>client-kit</artifactId>


    <properties>
        <licenseDir>${project.parent.parent.basedir}</licenseDir>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.onap.appc.client</groupId>
                <artifactId>code-generator</artifactId>
                <version>${project.parent.version}</version>
                <dependencies>
                    <dependency>
                        <groupId>org.onap.appc</groupId>
                        <artifactId>appc-provider-model</artifactId>
                        <version>${project.parent.version}</version>
                    </dependency>
                </dependencies>
                <executions>
                    <execution>
                        <id>code-generate-json</id>
                        <goals>
                            <goal>generate-sources</goal>
                        </goals>
                        <configuration>
                            <sourceFileName>META-INF/yang/appc-provider-lcm.yang</sourceFileName>
                            <outputFileName>target/generated-sources/appc-provider-lcm/appc-provider-lcm.json</outputFileName>
                            <templateName>templates/open-api/yang-to-open-api.ftl</templateName>
                            <contextBuilderClassName>org.onap.appc.tools.generator.extensions.YangContextBuilderImpl
                            </contextBuilderClassName>
                            <contextConfigFileName>APPC</contextConfigFileName>
                        </configuration>
                    </execution>
                    <execution>
                        <id>code-generate-java</id>
                        <goals>
                            <goal>generate-sources</goal>
                        </goals>
                        <configuration>
                            <sourceFileName>target/generated-sources/appc-provider-lcm/appc-provider-lcm.json</sourceFileName>
                            <outputFileName>target/generated-sources/appc-provider-lcm/output.txt</outputFileName>
                            <templateName>templates/client-kit/open-api-to-java.ftl</templateName>
                            <contextBuilderClassName>org.onap.appc.tools.generator.extensions.JsonContextBuilderImpl</contextBuilderClassName>
                            <contextConfigFileName>configuration/client-kit.properties</contextConfigFileName>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <dependencies>
        <dependency>
            <groupId>org.onap.appc.client</groupId>
            <artifactId>client-lib</artifactId>
            <version>${project.parent.version}</version>
        </dependency>
        <dependency>
            <groupId>org.opendaylight.yangtools</groupId>
            <artifactId>yang-parser-impl</artifactId>
            <version>${yang.parser.impl.version}</version>
            <scope>test</scope>
        </dependency>

    </dependencies>
</project>
