<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>com.vaadin</groupId>
    <artifactId>vaadin-platform-parent</artifactId>
    <version>24.7.2</version>
  </parent>
  <groupId>com.vaadin</groupId>
  <artifactId>vaadin-gradle-plugin</artifactId>
  <version>24.7.2</version>
  <name>Vaadin Gradle plugin</name>
  <licenses>
    <license>
      <name>Apache License Version 2.0</name>
      <url>https://www.apache.org/licenses/LICENSE-2.0</url>
      <distribution>repo</distribution>
    </license>
  </licenses>
  <properties>
    <maven.compiler.target>17</maven.compiler.target>
    <gradle.publish.key>${gradlePublishKey}</gradle.publish.key>
    <gradle.publish.secret>${gradlePublishSecret}</gradle.publish.secret>
    <maven.compiler.source>17</maven.compiler.source>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <hilla.version>24.7.2</hilla.version>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <gradle.executable>./gradlew</gradle.executable>
    <flow.version>24.7.4</flow.version>
  </properties>
  <dependencies>
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>hilla-gradle-plugin</artifactId>
      <version>24.7.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>flow-gradle-plugin</artifactId>
      <version>24.7.4</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-prod-bundle</artifactId>
      <version>24.7.2</version>
      <scope>compile</scope>
    </dependency>
    <dependency>
      <groupId>com.vaadin</groupId>
      <artifactId>vaadin-dev-bundle</artifactId>
      <version>24.7.2</version>
      <scope>compile</scope>
    </dependency>
  </dependencies>
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-clean-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <filesets>
            <fileset>
              <directory>${project.basedir}/src/main</directory>
              <includes>
                <include>**</include>
              </includes>
              <followSymlinks>false</followSymlinks>
            </fileset>
          </filesets>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.0</version>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>com.vaadin</groupId>
                  <artifactId>hilla-gradle-plugin</artifactId>
                  <version>${hilla.version}</version>
                  <classifier>sources</classifier>
                  <includes>**/*.kt</includes>
                  <outputDirectory>target/temp</outputDirectory>
                </artifactItem>
                <artifactItem>
                  <groupId>com.vaadin</groupId>
                  <artifactId>hilla-gradle-plugin</artifactId>
                  <version>${hilla.version}</version>
                  <excludes>**/*.class,META-INF/**</excludes>
                  <outputDirectory>src/main/resources</outputDirectory>
                </artifactItem>
                <artifactItem>
                  <groupId>com.vaadin</groupId>
                  <artifactId>hilla-gradle-plugin</artifactId>
                  <version>${hilla.version}</version>
                  <includes>**/lifecycle-mapping-metadata.xml</includes>
                  <outputDirectory>src/main/resources</outputDirectory>
                </artifactItem>
              </artifactItems>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>com.coderplus.maven.plugins</groupId>
        <artifactId>copy-rename-maven-plugin</artifactId>
        <version>1.0.1</version>
        <executions>
          <execution>
            <id>rename-hilla-plugin-to-vaadin</id>
            <phase>process-sources</phase>
            <goals>
              <goal>rename</goal>
            </goals>
            <configuration>
              <sourceFile>src/main/kotlin/com/vaadin/gradle/plugin/HillaPlugin.kt</sourceFile>
              <destinationFile>src/main/kotlin/com/vaadin/gradle/plugin/VaadinPlugin.kt</destinationFile>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.gmavenplus</groupId>
        <artifactId>gmavenplus-plugin</artifactId>
        <version>3.0.2</version>
        <executions>
          <execution>
            <id>replace-package-declaration-in-src-files</id>
            <phase>process-sources</phase>
            <goals>
              <goal>execute</goal>
            </goals>
            <configuration>
              <properties>
                <property>
                  <name>basedir</name>
                  <value>${project.basedir}</value>
                </property>
              </properties>
              <scripts>
                <script>import java.nio.file.Files
import java.nio.file.Paths
import java.nio.file.Path
import java.util.stream.Collectors

def baseDirPath = basedir

// Define the directory to search for Kotlin files
String directoryPath = "${baseDirPath}/src/main/kotlin/com/vaadin/gradle/plugin"
String oldPackage = 'package com.vaadin.hilla.gradle.plugin'
String newPackage = 'package com.vaadin.gradle.plugin'
String oldPluginClassDef = 'public class HillaPlugin : Plugin&lt;Project> {'
String newPluginClassDef = 'public class VaadinPlugin : Plugin&lt;Project> {'
String oldPluginCreateEngineConf = 'HillaPlugin.createEngineConfiguration'
String newPluginCreateEngineConf = 'VaadinPlugin.createEngineConfiguration'

// Use NIO to walk through the directory
Files.walk(Paths.get(directoryPath))
    // Filter to include only Kotlin files
    .filter { path -> path.toString().endsWith('.kt') }
    // Collect paths to process them
    .collect(Collectors.toList())
    // Iterate over each file
    .each { Path path ->
        // Read the content of the file
        String content = new String(Files.readAllBytes(path))
        // Replace the old package declaration with the new one
        String updatedContent = content.replace(oldPackage, newPackage)
        // Replace the old plugin class definition with the new one
        updatedContent = updatedContent.replace(oldPluginClassDef, newPluginClassDef)
        // Replace the old plugin method calls definition with the new one
        updatedContent = updatedContent.replace(oldPluginCreateEngineConf, newPluginCreateEngineConf)
        // Write the updated content back to the file
        Files.write(path, updatedContent.getBytes())
        println "Updated package declaration in file: ${path}"
    }</script>
              </scripts>
            </configuration>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>org.apache.groovy</groupId>
            <artifactId>groovy-all</artifactId>
            <version>4.0.18</version>
            <type>pom</type>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>3.0.0</version>
        <executions>
          <execution>
            <id>gradle</id>
            <phase>prepare-package</phase>
            <goals>
              <goal>exec</goal>
            </goals>
            <configuration>
              <executable>${gradle.executable}</executable>
              <arguments>
                <argument>clean</argument>
                <argument>build</argument>
                <argument>javadocJar</argument>
                <argument>-x</argument>
                <argument>functionalTest</argument>
                <argument>-S</argument>
              </arguments>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>3.2.0</version>
        <executions>
          <execution>
            <id>copy-gradle-jars</id>
            <phase>package</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/target</outputDirectory>
              <resources>
                <resource>
                  <directory>build/libs/</directory>
                  <includes>
                    <include>**/*.jar</include>
                  </includes>
                </resource>
              </resources>
              <overwrite>true</overwrite>
            </configuration>
          </execution>
          <execution>
            <id>move-src-from-hilla-package-to-vaadin</id>
            <phase>generate-sources</phase>
            <goals>
              <goal>copy-resources</goal>
            </goals>
            <configuration>
              <outputDirectory>${basedir}/src/main/kotlin/com/vaadin/gradle/plugin</outputDirectory>
              <resources>
                <resource>
                  <directory>${basedir}/target/temp/com/vaadin/hilla/gradle/plugin</directory>
                  <includes>
                    <include>**/*.kt</include>
                  </includes>
                </resource>
              </resources>
              <overwrite>true</overwrite>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <executions>
          <execution>
            <id>attach-artifacts</id>
            <phase>package</phase>
            <goals>
              <goal>attach-artifact</goal>
            </goals>
            <configuration>
              <artifacts>
                <artifact>
                  <file>target/${project.artifactId}-${project.version}-sources.jar</file>
                  <type>jar</type>
                  <classifier>sources</classifier>
                </artifact>
                <artifact>
                  <file>target/${project.artifactId}-${project.version}-javadoc.jar</file>
                  <type>jar</type>
                  <classifier>javadoc</classifier>
                </artifact>
              </artifacts>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>
