<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2018 Ericsson. All rights reserved.
   Copyright (C) 2019 Nordix Foundation.
  ================================================================================
  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.

  SPDX-License-Identifier: Apache-2.0
  ============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>
        <groupId>org.onap.policy.apex-pdp.examples</groupId>
        <artifactId>examples</artifactId>
        <version>2.1.1-SNAPSHOT</version>
    </parent>

    <artifactId>examples-onap-vcpe</artifactId>
    <name>${project.artifactId}</name>
    <description>Specific code for the APEX ONAP vCPE Example</description>

    <properties>
        <policymodel.name>ONAPvCPEPolicyModel</policymodel.name>
        <apex-domains-onap-vcpe-dir>${project.basedir}/src</apex-domains-onap-vcpe-dir>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.onap.policy.apex-pdp.auth</groupId>
            <artifactId>cli-editor</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.apex-pdp.services</groupId>
            <artifactId>services-engine</artifactId>
            <version>${project.version}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-grizzly2-http</artifactId>
            <version>${version.jersey}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.inject</groupId>
            <artifactId>jersey-hk2</artifactId>
            <version>${version.jersey}</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.apex-pdp.plugins.plugins-context.plugins-context-schema</groupId>
            <artifactId>plugins-context-schema-avro</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.apex-pdp.plugins.plugins-executor</groupId>
            <artifactId>plugins-executor-javascript</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.apex-pdp.plugins.plugins-event.plugins-event-carrier</groupId>
            <artifactId>plugins-event-carrier-restrequestor</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.apex-pdp.plugins.plugins-event.plugins-event-carrier</groupId>
            <artifactId>plugins-event-carrier-restclient</artifactId>
            <version>${project.version}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
            <artifactId>aai</artifactId>
            <version>${version.policy.models}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
            <artifactId>appclcm</artifactId>
            <version>${version.policy.models}</version>
        </dependency>
        <dependency>
            <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
            <artifactId>events</artifactId>
            <version>${version.policy.models}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <!-- Generate the APEX Policy JSON from the APEX CLI command -->
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <id>generate-policy</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>java</goal>
                        </goals>
                        <configuration>
                            <mainClass>org.onap.policy.apex.auth.clieditor.ApexCommandLineEditorMain</mainClass>
                            <classpathScope>compile</classpathScope>
                            <arguments>
                                <argument>--command-file=${project.basedir}/src/main/resources/policy/${policymodel.name}.apex</argument>
                                <argument>--output-model-file=${project.build.directory}/classes/${policymodel.name}.json</argument>
                                <argument>--log-file=${project.build.directory}/${policymodel.name}_policygeneration.log</argument>
                                <argument>--working-dir=${project.basedir}</argument>
                            </arguments>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>apexSite</id>
            <activation>
                <property>
                    <name>apexSite</name>
                </property>
            </activation>
            <properties>
                <adsite-examples-onap-vcpe-dir>${project.basedir}/src</adsite-examples-onap-vcpe-dir>
            </properties>
            <distributionManagement>
                <site>
                    <id>${project.artifactId}-site</id>
                    <url>${apex.adsite.prefix}/modules/${project.parent.artifactId}/${project.artifactId}/</url>
                </site>
            </distributionManagement>
        </profile>
    </profiles>
</project>
