<!--
  ============LICENSE_START=======================================================
   Copyright (C) 2018 Ericsson. All rights reserved.
   Modifications Copyright (C) 2020-2022 AT&T. All rights reserved.
  ================================================================================
  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.oparent</groupId>
        <artifactId>oparent</artifactId>
        <version>3.2.1</version>
        <relativePath />
    </parent>
    <groupId>org.onap.policy.parent</groupId>
    <artifactId>policy-parent</artifactId>
    <version>3.3.4-SNAPSHOT</version>
    <packaging>pom</packaging>

    <properties>
        <oparent.version>3.2.1</oparent.version>
    </properties>

    <modules>
        <module>integration</module>
    </modules>

    <build>
        <pluginManagement>
            <plugins>
                <!--
                Using https://code.revelc.net/formatter-maven-plugin/ for Eclipse formatter
                Using https://github.com/diffplug/spotless/tree/master/plugin-maven for import order
                Use in combination to rewrite code and imports, then checkstyle

                Be sure to override ${project.parent.basedir} in order to find the XML file

                mvn formatter:format spotless:apply process-sources -Dproject.parent.basedir=TODO
                -->
                <plugin>
                    <groupId>net.revelc.code.formatter</groupId>
                    <artifactId>formatter-maven-plugin</artifactId>
                    <version>2.11.0</version>
                    <configuration>
                        <configFile>${project.parent.basedir}/onap-java-formatter.xml</configFile>
                    </configuration>
                    <!-- https://code.revelc.net/formatter-maven-plugin/
                         use mvn formatter:format to rewrite source files
                         use mvn formatter:validate to validate source files -->
                </plugin>
                <plugin>
                    <groupId>com.diffplug.spotless</groupId>
                    <artifactId>spotless-maven-plugin</artifactId>
                    <version>1.26.1</version>
                    <configuration>
                        <java>
                            <importOrder>
                                <order>com,java,javax,org</order>
                            </importOrder>
                        </java>
                    </configuration>
                    <!-- https://github.com/diffplug/spotless/tree/master/plugin-maven
                         use mvn spotless:apply to rewrite source files
                         use mvn spotless:check to validate source files -->
                </plugin>
            </plugins>
        </pluginManagement>
    </build>

</project>
