<?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.5.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@2016-01-08.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>
