<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.eximeebpms.bpm.qa.upgrade</groupId>
    <artifactId>eximeebpms-qa-db-rolling-update</artifactId>
    <version>1.1.0</version>
  </parent>

  <artifactId>eximeebpms-qa-db-create-new-engine</artifactId>
  <packaging>jar</packaging>
  <name>EximeeBPMS - QA - upgrade - rolling update - create new engine</name>

  <properties>
    <eximeebpms.version.current>${project.version}</eximeebpms.version.current>
    <eximeebpms.version.previous>7.23.0</eximeebpms.version.previous>
  </properties>

  <dependencies>
    <!-- NOTE: this pulls transitive dependencies of version ${project.version} in unless
      you declare them to be ${eximeebpms.version.current} here -->
    <dependency>
      <groupId>org.eximeebpms.bpm</groupId>
      <artifactId>eximeebpms-engine</artifactId>
    </dependency>

    <dependency>
      <groupId>org.eximeebpms.bpm.qa.upgrade</groupId>
      <artifactId>eximeebpms-qa-db-rolling-update-util</artifactId>
      <version>${project.version}</version>
    </dependency>
  </dependencies>

  <build>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <testResources>
      <testResource>
        <directory>src/test/resources</directory>
        <filtering>true</filtering>
      </testResource>
    </testResources>
  </build>

  <profiles>
    <profile>
      <id>rolling-update</id>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>create-sql-script-stubs</id>
                <phase>generate-test-sources</phase>
                <configuration>
                  <target>
                    <property name="current.minor.version" value="${eximeebpms.current.majorVersion}.${eximeebpms.current.minorVersion}" />
                    <property name="previous.minor.version" value="${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}" />
                    <property name="current.sql.upgrade.dir" value="${project.build.directory}/scripts-current/sql/upgrade" />
                    <property name="minor.version.upgrade.script.previous.to.current.engine" value="${database.type}_engine_${previous.minor.version}_to_${current.minor.version}.sql" />
                    <property name="minor.version.upgrade.script.previous.to.current.identity" value="${database.type}_identity_${previous.minor.version}_to_${current.minor.version}.sql" />
                    <property name="patch.version.upgrade.script.previous.engine.prefix" value="${database.type}_engine_${previous.minor.version}_patch_${previous.minor.version}" />

                    <!-- create the SQL scripts so that the files exist even if they do not exist in the distribution. (this can be the case if there are no db
                      upgrades (yet) for a particular release ) -->

                    <mkdir dir="${current.sql.upgrade.dir}/" />

                    <!-- concatenated patches for last minor version -->
                    <touch file="${project.build.directory}/scripts-current/sql/upgrade/${database.type}_engine_${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}_patch.sql" />
                    <touch file="${project.build.directory}/scripts-current/sql/upgrade/${database.type}_identity_${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}_patch.sql" />

                    <!-- minor version upgrade from previous to current version -->
                    <touch file="${current.sql.upgrade.dir}/${minor.version.upgrade.script.previous.to.current.engine}" />
                    <touch file="${current.sql.upgrade.dir}/${minor.version.upgrade.script.previous.to.current.identity}" />
                  </target>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>

          <!-- provide sql scripts -->
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>unpack-current-sql-scripts</id>
                <phase>generate-test-sources</phase>
                <goals>
                  <goal>unpack</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>org.eximeebpms.bpm.distro</groupId>
                      <artifactId>eximeebpms-sql-scripts</artifactId>
                      <version>${eximeebpms.version.current}</version>
                      <type>test-jar</type>
                      <outputDirectory>${project.build.directory}/scripts-current</outputDirectory>
                      <overWrite>true</overWrite>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <!-- parse version properties from qa/pom.xml -->
          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>build-helper-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>parse-current-version</id>
                <goals>
                  <goal>parse-version</goal>
                </goals>
                <configuration>
                  <propertyPrefix>eximeebpms.current</propertyPrefix>
                  <versionString>${eximeebpms.version.current}</versionString>
                </configuration>
              </execution>
              <execution>
                <id>parse-old-version</id>
                <goals>
                  <goal>parse-version</goal>
                </goals>
                <configuration>
                  <propertyPrefix>eximeebpms.previous</propertyPrefix>
                  <versionString>${eximeebpms.version.previous}</versionString>
                </configuration>
              </execution>
            </executions>
          </plugin>

          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>sql-maven-plugin</artifactId>
            <executions>
              <execution>
                <id>patch-previous-schema</id>
                <phase>test-compile</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <srcFiles>
                    <!-- now patch old version of the schema -->
                    <srcFile>${project.build.directory}/scripts-current/sql/upgrade/${database.type}_engine_${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}_patch.sql</srcFile>
                    <srcFile>${project.build.directory}/scripts-current/sql/upgrade/${database.type}_identity_${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}_patch.sql</srcFile>
                  </srcFiles>
                </configuration>
              </execution>
              <execution>
                <id>upgrade-db</id>
                <phase>test-compile</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <srcFiles>
                    <!-- now perform the schema migrations -->
                    <srcFile>${project.build.directory}/scripts-current/sql/upgrade/${database.type}_engine_${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}_to_${eximeebpms.current.majorVersion}.${eximeebpms.current.minorVersion}.sql</srcFile>
                    <srcFile>${project.build.directory}/scripts-current/sql/upgrade/${database.type}_identity_${eximeebpms.previous.majorVersion}.${eximeebpms.previous.minorVersion}_to_${eximeebpms.current.majorVersion}.${eximeebpms.current.minorVersion}.sql</srcFile>
                  </srcFiles>
                </configuration>
              </execution>
              <execution>
                <id>patch-current-schema</id>
                <phase>test-compile</phase>
                <goals>
                  <goal>execute</goal>
                </goals>
                <configuration>
                  <srcFiles>
                    <!-- now perform the schema migrations -->
                    <!-- now patch new version of the schema, apply any patches explicitly -->
                    <!-- example:
                    <srcFile>${project.build.directory}/scripts-current/sql/upgrade/${database.type}_engine_${eximeebpms.current.majorVersion}.${eximeebpms.current.minorVersion}_patch_${eximeebpms.current.majorVersion}.${eximeebpms.current.minorVersion}.0_to_${eximeebpms.current.majorVersion}.${eximeebpms.current.minorVersion}.1.sql</srcFile>
                    -->
                  </srcFiles>
                </configuration>
              </execution>
            </executions>
          </plugin>


          <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <configuration>
              <cleanupDaemonThreads>false</cleanupDaemonThreads>
              <includeProjectDependencies>true</includeProjectDependencies>
              <includePluginDependencies>false</includePluginDependencies>
              <classpathScope>test</classpathScope>
            </configuration>
            <executions>
              <execution>
                <id>create-test-fixture</id>
                <goals>
                  <goal>java</goal>
                </goals>
                <phase>process-test-classes</phase>
                <configuration>
                  <mainClass>org.eximeebpms.bpm.qa.rolling.update.TestNewEngineMain</mainClass>
                  <includePluginDependencies>false</includePluginDependencies>
                </configuration>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>
</project>
