<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>io.orqueio.bpm</groupId>
    <artifactId>orqueio-database-settings</artifactId>
    <relativePath>../../database</relativePath>
    <version>1.0.4</version>
  </parent>

  <groupId>io.orqueio.bpm.distro</groupId>
  <artifactId>orqueio-sql-scripts</artifactId>
  <packaging>jar</packaging>



  <name>Orque IO Platform - SQL scripts</name>
  
  <properties>
    <!-- exclude tests by default, only run in check-sql profile -->
    <skipTests>true</skipTests>
  </properties>

  <dependencyManagement>
    <dependencies>
      <dependency>
        <groupId>io.orqueio.bpm</groupId>
        <artifactId>orqueio-core-internal-dependencies</artifactId>
        <version>${project.version}</version>
        <scope>import</scope>
        <type>pom</type>
      </dependency>
    </dependencies>
  </dependencyManagement>

  <dependencies>
    <dependency>
      <groupId>io.orqueio.bpm</groupId>
      <artifactId>orqueio-engine</artifactId>
      <scope>provided</scope>
    </dependency>

    <!-- test dependencies -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.assertj</groupId>
      <artifactId>assertj-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.liquibase</groupId>
      <artifactId>liquibase-core</artifactId>
      <version>${version.liquibase}</version>
      <scope>test</scope>
    </dependency>

  </dependencies>

  <build>
    <resources>
      <resource>
        <targetPath>sql/upgrade</targetPath>
        <directory>target/sql/upgrade</directory>
        <includes>
          <include>*.sql</include>
        </includes>
      </resource>
      <resource>
        <targetPath>sql/create</targetPath>
        <directory>target/sql/create</directory>
        <includes>
          <include>*.sql</include>
        </includes>
      </resource>
      <resource>
        <targetPath>sql/drop</targetPath>
        <directory>target/sql/drop</directory>
        <includes>
          <include>*.sql</include>
        </includes>
      </resource>
      <resource>
        <targetPath>sql/liquibase</targetPath>
        <directory>target/sql/liquibase</directory>
      </resource>
    </resources>

    <testResources>
      <testResource>
        <targetPath>sql/upgrade</targetPath>
        <directory>target/upgrade-test/sql/upgrade</directory>
        <includes>
          <include>*.sql</include>
        </includes>
      </testResource>
      <testResource>
        <directory>src/test/resources</directory>
        <filtering>true</filtering>
        <includes>
          <include>**/properties-from-pom.properties</include>
        </includes>
      </testResource>
    </testResources>

    <plugins>
      <!-- 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>orqueio.current</propertyPrefix>
            </configuration>
          </execution>
          <execution>
            <id>parse-old-version</id>
            <goals>
              <goal>parse-version</goal>
            </goals>
            <configuration>
              <propertyPrefix>orqueio.old</propertyPrefix>
              <versionString>${orqueio.version.old}</versionString>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <executions>
          <execution>
            <id>unpack</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>unpack</goal>
            </goals>
            <configuration>
              <artifactItems>
                <artifactItem>
                  <groupId>io.orqueio.bpm</groupId>
                  <artifactId>orqueio-engine</artifactId>
                  <version>${project.version}</version>
                  <type>jar</type>
                  <overWrite>true</overWrite>
                  <outputDirectory>target/orqueio-engine-${project.version}</outputDirectory>
                </artifactItem>
              </artifactItems>
              <includes>**/create/*.sql, **/drop/*.sql, **/upgrade/*.sql, **/liquibase/**/*</includes>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>copy-dependencies</id>
            <phase>generate-resources</phase>
            <goals>
              <goal>run</goal>
            </goals>
            <configuration>
              <target>

                <!-- create -->

                <mkdir dir="target/sql/create" />

                <concat destfile="target/sql/create/db2_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" files="activiti.db2.create.engine.sql activiti.db2.create.case.engine.sql activiti.db2.create.decision.engine.sql activiti.db2.create.history.sql activiti.db2.create.case.history.sql activiti.db2.create.decision.history.sql" />
                </concat>

                <concat destfile="target/sql/create/h2_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" files="activiti.h2.create.engine.sql activiti.h2.create.case.engine.sql activiti.h2.create.decision.engine.sql activiti.h2.create.history.sql activiti.h2.create.case.history.sql activiti.h2.create.decision.history.sql" />
                </concat>

                <concat destfile="target/sql/create/mssql_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" files="activiti.mssql.create.engine.sql activiti.mssql.create.case.engine.sql activiti.mssql.create.decision.engine.sql activiti.mssql.create.history.sql activiti.mssql.create.case.history.sql activiti.mssql.create.decision.history.sql" />
                </concat>

                <concat destfile="target/sql/create/mysql_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" files="activiti.mysql.create.engine.sql activiti.mysql.create.case.engine.sql activiti.mysql.create.decision.engine.sql activiti.mysql.create.history.sql activiti.mysql.create.case.history.sql activiti.mysql.create.decision.history.sql" />
                </concat>

                <concat destfile="target/sql/create/oracle_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" files="activiti.oracle.create.engine.sql activiti.oracle.create.case.engine.sql activiti.oracle.create.decision.engine.sql activiti.oracle.create.history.sql activiti.oracle.create.case.history.sql activiti.oracle.create.decision.history.sql" />
                </concat>

                <concat destfile="target/sql/create/postgres_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" files="activiti.postgres.create.engine.sql activiti.postgres.create.case.engine.sql activiti.postgres.create.decision.engine.sql activiti.postgres.create.history.sql activiti.postgres.create.case.history.sql activiti.postgres.create.decision.history.sql" />
                </concat>

                <!-- add identity create files -->
                <copy todir="target/sql/create" flatten="false">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/create" />
                  <mapper>
                    <chainedmapper>
                      <regexpmapper from="^(activiti.)([A-Za-z0-9]*)(.create.identity.sql)" to="\2_identity_${project.version}.sql" handledirsep="yes" />
                    </chainedmapper>
                  </mapper>
                </copy>

                <!-- drop -->

                <mkdir dir="target/sql/drop" />

                <concat destfile="target/sql/drop/db2_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" files="activiti.db2.drop.decision.engine.sql activiti.db2.drop.case.engine.sql activiti.db2.drop.engine.sql activiti.db2.drop.decision.history.sql activiti.db2.drop.case.history.sql activiti.db2.drop.history.sql" />
                </concat>

                <concat destfile="target/sql/drop/h2_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" files="activiti.h2.drop.decision.engine.sql activiti.h2.drop.case.engine.sql activiti.h2.drop.engine.sql activiti.h2.drop.decision.history.sql activiti.h2.drop.case.history.sql activiti.h2.drop.history.sql" />
                </concat>

                <concat destfile="target/sql/drop/mssql_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" files="activiti.mssql.drop.decision.engine.sql activiti.mssql.drop.case.engine.sql activiti.mssql.drop.engine.sql activiti.mssql.drop.decision.history.sql activiti.mssql.drop.case.history.sql activiti.mssql.drop.history.sql" />
                </concat>

                <concat destfile="target/sql/drop/mysql_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" files="activiti.mysql.drop.decision.engine.sql activiti.mysql.drop.case.engine.sql activiti.mysql.drop.engine.sql activiti.mysql.drop.decision.history.sql activiti.mysql.drop.case.history.sql activiti.mysql.drop.history.sql" />
                </concat>

                <concat destfile="target/sql/drop/oracle_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" files="activiti.oracle.drop.decision.engine.sql activiti.oracle.drop.case.engine.sql activiti.oracle.drop.engine.sql activiti.oracle.drop.decision.history.sql activiti.oracle.drop.case.history.sql activiti.oracle.drop.history.sql" />
                </concat>

                <concat destfile="target/sql/drop/postgres_engine_${project.version}.sql" fixlastline="yes">
                  <filelist dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" files="activiti.postgres.drop.decision.engine.sql activiti.postgres.drop.case.engine.sql activiti.postgres.drop.engine.sql activiti.postgres.drop.decision.history.sql activiti.postgres.drop.case.history.sql activiti.postgres.drop.history.sql" />
                </concat>

                <!-- add identity drop files -->
                <copy todir="target/sql/drop" flatten="false">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/drop" />
                  <mapper>
                    <chainedmapper>
                      <regexpmapper from="^(activiti.)([A-Za-z0-9]*)(.drop.identity.sql)" to="\2_identity_${project.version}.sql" handledirsep="yes" />
                    </chainedmapper>
                  </mapper>
                </copy>

                <!-- upgrade -->
                <mkdir dir="target/sql/upgrade" />

                <copy todir="target/sql/upgrade">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade">
                    <include name="*.sql" />
                  </fileset>
                </copy>
                
                <!-- liquibase -->

                <copy todir="target/sql/liquibase">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/liquibase" includes="**/*" />
                </copy>

              </target>
            </configuration>
          </execution>

          <execution>
            <id>generate-test-patch-files</id>
            <goals>
              <goal>run</goal>
            </goals>
            <phase>generate-resources</phase>
            <configuration>
              <target>
                <!-- create concatenated patch scripts for easier testing -->
                <!-- db2 patches -->
                <concat destfile="target/upgrade-test/sql/upgrade/db2_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="db2_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch*.sql" />
                </concat>

                <concat destfile="target/upgrade-test/sql/upgrade/db2_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="db2_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch*.sql" />
                </concat>

                <!-- h2 patches -->
                <concat destfile="target/upgrade-test/sql/upgrade/h2_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="h2_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch*.sql" />
                </concat>

                <concat destfile="target/upgrade-test/sql/upgrade/h2_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="h2_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch*.sql" />
                </concat>

                <!-- mssql patches -->
                <concat destfile="target/upgrade-test/sql/upgrade/mssql_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="mssql_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch*.sql" />
                </concat>

                <concat destfile="target/upgrade-test/sql/upgrade/mssql_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="mssql_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch*.sql" />
                </concat>

                <!-- mysql patches -->
                <concat destfile="target/upgrade-test/sql/upgrade/mysql_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="mysql_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch*.sql" />
                </concat>

                <concat destfile="target/upgrade-test/sql/upgrade/mysql_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="mysql_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch*.sql" />
                </concat>

                <!-- oracle patches -->
                <concat destfile="target/upgrade-test/sql/upgrade/oracle_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="oracle_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch*.sql" />
                </concat>

                <concat destfile="target/upgrade-test/sql/upgrade/oracle_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="oracle_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch*.sql" />
                </concat>

                <!-- postgres patches -->
                <concat destfile="target/upgrade-test/sql/upgrade/postgres_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="postgres_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch*.sql" />
                </concat>

                <concat destfile="target/upgrade-test/sql/upgrade/postgres_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" fixlastline="yes">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade" includes="postgres_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch*.sql" />
                </concat>

                <copy todir="target/upgrade-test/sql/upgrade">
                  <fileset dir="target/orqueio-engine-${project.version}/io/orqueio/bpm/engine/db/upgrade">
                    <include name="*.sql" />
                  </fileset>
                </copy>

                <copy todir="target/upgrade-test/sql/create">
                  <fileset dir="target/sql/create">
                    <include name="*.sql" />
                  </fileset>
                </copy>
                <copy todir="target/upgrade-test/sql/drop">
                  <fileset dir="target/sql/drop">
                    <include name="*.sql" />
                  </fileset>
                </copy>
                <copy todir="target/upgrade-test/sql/liquibase">
                  <fileset dir="target/sql/liquibase" includes="**/*" />
                </copy>
                
              </target>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <!-- create test jar with concatenated patch scripts for easier test execution -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
          <execution>
            <goals>
              <goal>test-jar</goal>
            </goals>
            <configuration>
              <forceCreation>true</forceCreation>
              <testClassesDirectory>target/upgrade-test</testClassesDirectory>
              <includes>
                <include>**/*</include>
              </includes>
            </configuration>
          </execution>
        </executions>
      </plugin>

      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptors>
            <descriptor>assembly.xml</descriptor>
          </descriptors>
          <appendAssemblyId>false</appendAssemblyId>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id> <!-- this is used for inheritance merges -->
            <phase>package</phase> <!-- append to the packaging phase. -->
            <goals>
              <goal>single</goal> <!-- goals == mojos -->
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <profile>
      <id>check-sql</id>
      <properties>
        <skipTests>false</skipTests>
      </properties>
      <build>
        <plugins>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <executions>
              <execution>
                <id>unpack-old-scripts</id>
                <phase>generate-test-resources</phase>
                <goals>
                  <goal>unpack</goal>
                </goals>
                <configuration>
                  <artifactItems>
                    <artifactItem>
                      <groupId>io.orqueio.bpm.distro</groupId>
                      <artifactId>orqueio-sql-scripts</artifactId>
                      <version>${orqueio.version.old}</version>
                      <outputDirectory>${project.build.directory}/test-classes/scripts-old</outputDirectory>
                      <overWrite>true</overWrite>
                    </artifactItem>
                  </artifactItems>
                </configuration>
              </execution>
            </executions>
          </plugin>
          <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-antrun-plugin</artifactId>
            <executions>
              <execution>
                <id>create-sql-script-stubs</id>
                <phase>generate-test-resources</phase>
                <configuration>
                  <target>
                    <copy todir="${project.build.directory}/test-classes/local-upgrade-test/">
                      <fileset dir="target/upgrade-test" />
                    </copy>
                    
                    <!-- 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 ) -->

                    <touch file="${project.build.directory}/test-classes/local-upgrade-test/sql/upgrade/${database.type}_engine_${orqueio.old.majorVersion}.${orqueio.old.minorVersion}_patch.sql" />
                    <touch file="${project.build.directory}/test-classes/local-upgrade-test/sql/upgrade/${database.type}_engine_${orqueio.current.majorVersion}.${orqueio.current.minorVersion}_patch.sql" />

                  </target>
                </configuration>
                <goals>
                  <goal>run</goal>
                </goals>
              </execution>
            </executions>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>


</project>
