<!--
  ============LICENSE_START=======================================================
  ONAP
  ================================================================================
  Copyright (C) 2017-2018 AT&T Intellectual Property. All rights reserved.
  Modifications 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.
  ============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.models</groupId>
    <artifactId>policy-models-interactions</artifactId>
    <version>2.2.0-SNAPSHOT</version>
  </parent>

  <groupId>org.onap.policy.models.policy-models-interactions</groupId>
  <artifactId>model-yaml</artifactId>
  
  <dependencies>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.yaml</groupId>
      <artifactId>snakeyaml</artifactId>
    </dependency>
    <dependency>
      <groupId>org.jgrapht</groupId>
      <artifactId>jgrapht-core</artifactId>
      <version>0.9.2</version>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
      <artifactId>sdc</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.models.policy-models-interactions.model-impl</groupId>
      <artifactId>aai</artifactId>
      <version>${project.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>com.google.guava</groupId>
      <artifactId>guava</artifactId>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.onap.policy.common</groupId>
      <artifactId>utils-test</artifactId>
      <version>${policy.common.version}</version>
      <scope>test</scope>
    </dependency>
  </dependencies>

    <!--
    Without this defined here, the checkstyle plugin just simply fails outright. This needs to be investigated
    further as there was no real debugging details as to why or any configuration issue detected.
    NOTE: I had to append src/main/java to the sourceDirectory.
    Is it a reactor ordering issue? I'm wondering why it is being compiled after aai, in between the sub-modules
    in model-impl. Dependency ordering?? Circular dependency?? 
     -->
    <build>
        <plugins>
            <plugin>
                <artifactId>maven-checkstyle-plugin</artifactId>
                <executions>
                    <execution>
                        <id>onap-java-style</id>
                        <goals>
                            <goal>check</goal>
                        </goals>
                        <phase>process-sources</phase>
                        <configuration>
                            <!-- Use Google Java Style Guide:
                            https://github.com/checkstyle/checkstyle/blob/master/src/main/resources/google_checks.xml
                            with minor changes -->
                            <configLocation>onap-checkstyle/onap-java-style.xml</configLocation>
                            <!-- <sourceDirectory> is needed so that checkstyle ignores the generated sources directory -->
                            <sourceDirectory>${project.build.sourceDirectory}</sourceDirectory>
                            <includeResources>true</includeResources>
                            <includeTestSourceDirectory>true</includeTestSourceDirectory>
                            <includeTestResources>true</includeTestResources>
                            <excludes>
                            </excludes>
                            <suppressionsLocation>${project.basedir}/checkstyle-suppressions.xml</suppressionsLocation>
                            <consoleOutput>true</consoleOutput>
                            <failsOnViolation>true</failsOnViolation>
                            <violationSeverity>warning</violationSeverity>
                        </configuration>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.onap.oparent</groupId>
                        <artifactId>checkstyle</artifactId>
                        <version>${oparent.version}</version>
                        <scope>compile</scope>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>
