<?xml version="1.0" encoding="UTF-8"?>

<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
   contributor license agreements.  See the NOTICE file distributed with
   this work for additional information regarding copyright ownership.
   The ASF licenses this file to You 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.
  -->

<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/maven-v4_0_0.xsd ">
  <modelVersion>4.0.0</modelVersion>

<!-- ====================================================================== -->
<!-- P R O J E C T  D E S C R I P T I O N                                   -->
<!-- ====================================================================== -->
  <parent>
    <groupId>org.apache.jackrabbit</groupId>
    <artifactId>jackrabbit-parent</artifactId>
    <version>2.21.4-SNAPSHOT</version>
    <relativePath>../jackrabbit-parent/pom.xml</relativePath>
  </parent>
  <artifactId>jackrabbit-core</artifactId>
  <name>Jackrabbit Core</name>
  <description>Jackrabbit content repository implementation</description>

  <properties>
    <org.apache.jackrabbit.test.integration>false</org.apache.jackrabbit.test.integration>
    <test.opts.memory>-Xmx512m</test.opts.memory>
  </properties>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <executions>
          <execution>
            <id>process-test-resources</id>
            <phase>process-test-resources</phase>
            <configuration>
              <target>
                <copy todir="${project.build.directory}/repository">
                  <fileset dir="${basedir}/src/test/repository" />
                </copy>
                <copy todir="${project.build.directory}/repository-2">
                  <fileset dir="${basedir}/src/test/repository" />
                </copy>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>ant</groupId>
            <artifactId>ant-optional</artifactId>
            <version>1.5.3-1</version>
          </dependency>
        </dependencies>
      </plugin>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <includes>
            <include>**/*TestAll.java</include>
          </includes>
          <argLine>${test.opts}</argLine>
          <systemProperties>
            <property>
              <name>java.awt.headless</name>
              <value>true</value>
            </property>
            <property>
              <name>derby.system.durability</name>
              <value>test</value>
            </property>
            <property>
              <name>derby.storage.fileSyncTransactionLog</name>
              <value>true</value>
            </property>
            <property>
              <name>derby.stream.error.file</name>
              <value>target/derby.log</value>
            </property>
            <property>
              <name>org.apache.jackrabbit.repository.home</name>
              <value>target/repository-factory-test</value>
            </property>
            <property>
              <name>known.issues</name>
              <value>
org.apache.jackrabbit.core.ConcurrentImportTest
org.apache.jackrabbit.core.xml.DocumentViewTest#testMultiValue
org.apache.jackrabbit.core.NodeImplTest#testReferentialIntegrityCorruptionGetPath
org.apache.jackrabbit.core.integration.ConcurrentQueryTest#testConcurrentQueryWithDeletes
org.apache.jackrabbit.test.api.ShareableNodeTest#testGetName
org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNode
org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNodes
org.apache.jackrabbit.test.api.ShareableNodeTest#testGetNodesByPattern
org.apache.jackrabbit.test.api.ShareableNodeTest#testMoveShareableNode<!--JCR-3381-->
org.apache.jackrabbit.test.api.ShareableNodeTest#testTransientMoveShareableNode<!--JCR-3381-->
org.apache.jackrabbit.test.api.lock.OpenScopedLockTest#testLockExpiration
org.apache.jackrabbit.test.api.lock.SessionScopedLockTest#testLockExpiration
org.apache.jackrabbit.test.api.observation.NodeReorderTest#testNodeReorderMove
org.apache.jackrabbit.core.data.ConcurrentGcTest#testDatabases
org.apache.jackrabbit.core.data.GarbageCollectorTest#testCloseSessionWhileRunningGc
org.apache.jackrabbit.core.data.GarbageCollectorTest#testSimultaneousRunGC <!-- JCR-4078 -->
org.apache.jackrabbit.core.ReplacePropertyWhileOthersReadTest <!-- JCR-3835 -->
org.apache.jackrabbit.core.security.user.MembershipCachePerfTest <!-- don't run expensive test -->
org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testStringLiteralInvalidName        <!-- OAK-3265 -->
org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testPathLiteral                     <!-- OAK-3265 -->
org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testURILiteral                      <!-- OAK-3265 -->
              </value>
            </property>
            <property>
              <name>org.apache.jackrabbit.test.integration</name>
              <value>${org.apache.jackrabbit.test.integration}</value>
            </property>
          </systemProperties>
        </configuration>
        <executions>
          <execution>
            <id>do_test</id>
            <phase>integration-test</phase>
            <configuration>
              <includes>
                <include>**/integration/*Test.java</include>
              </includes>
            </configuration>
            <goals>
              <goal>test</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
      <plugin>
        <groupId>org.apache.rat</groupId>
        <artifactId>apache-rat-plugin</artifactId>
        <configuration>
          <excludes>
            <exclude>src/main/javadoc/**/*.uxf</exclude>
            <exclude>src/test/repository/**</exclude>
            <exclude>src/test/resources/**/*.txt</exclude>
            <exclude>src/test/resources/**/*.rtf</exclude>
            <exclude>src/test/resources/**/*.cnd</exclude>
            <exclude>src/test/compatibility/**/target/**</exclude>
            <exclude>src/test/compatibility/**/.*/**</exclude>
            <exclude>src/test/compatibility/repositories.zip</exclude>
            <exclude>repository/**</exclude>
            <exclude>*.log</exclude>
          </excludes>
        </configuration>
      </plugin>
     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
       <artifactId>maven-jar-plugin</artifactId>
       <configuration>
          <excludes>
            <exclude>logback-test.xml</exclude>
          </excludes>
       </configuration>
       <executions>
         <execution>
           <goals>
             <goal>test-jar</goal>
           </goals>
         </execution>
       </executions>
     </plugin>
    </plugins>
    <resources>
      <resource>
        <directory>src/main/resources</directory>
      </resource>
      <resource>
        <directory>src/main/resources-filtered</directory>
        <filtering>true</filtering>
      </resource>
    </resources>
    <pluginManagement>
      <plugins>
        <!-- JCR-3136: Add m2e lifecycle mappings for Eclipse Indigo -->
        <plugin>
          <groupId>org.eclipse.m2e</groupId>
          <artifactId>lifecycle-mapping</artifactId>
          <version>1.0.0</version>
          <configuration>
            <lifecycleMappingMetadata>
              <pluginExecutions>
                <pluginExecution>
                  <pluginExecutionFilter>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-antrun-plugin</artifactId>
                    <versionRange>[1.6,)</versionRange>
                    <goals>
                      <goal>run</goal>
                    </goals>
                  </pluginExecutionFilter>
                  <action>
                    <ignore />
                  </action>
                </pluginExecution>
              </pluginExecutions>
            </lifecycleMappingMetadata>
          </configuration>
        </plugin>
      </plugins>
    </pluginManagement>
  </build>

  <dependencies>
    <dependency>
      <groupId>concurrent</groupId>
      <artifactId>concurrent</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
    <dependency>
      <groupId>javax.jcr</groupId>
      <artifactId>jcr</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>oak-jackrabbit-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-commons</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-data</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
        <groupId>org.apache.jackrabbit</groupId>
        <artifactId>jackrabbit-data</artifactId>
        <version>${project.version}</version>
        <type>test-jar</type>
        <scope>test</scope>
    </dependency>  
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi-commons</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi</artifactId>
      <version>${project.version}</version>
      <classifier />
    </dependency>
      <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi</artifactId>
      <version>${project.version}</version>
      <classifier>tests</classifier>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.lucene</groupId>
      <artifactId>lucene-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-tests</artifactId>
      <version>${project.version}</version>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-benchmark</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.tika</groupId>
      <artifactId>tika-parsers</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>commons-logging</groupId>
          <artifactId>commons-logging</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.slf4j</groupId>
          <artifactId>slf4j-log4j12</artifactId>
        </exclusion>      
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.transaction</groupId>
      <artifactId>javax.transaction-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.4.200</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.mockito</groupId>
      <artifactId>mockito-core</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <profiles>
    <profile>
      <id>integrationTesting</id>
      <properties>
        <org.apache.jackrabbit.test.integration>true</org.apache.jackrabbit.test.integration>
      </properties>
    </profile>
    <!--
      These profiles can be used to run the (integration) tests against different DB backends.
      For instance, if you want to run the integration tests against MySQL backend, do:

        mvn clean integration-test -Pmysql,use-descriptor-overlay

      Note: the ${config.db.name} database is dropped and re-created in the clean phase. 
    -->
    <profile>
      <id>mysql</id>
      <properties>
        <config.db.name>jackrabbit</config.db.name>
        <config.db.fsclass>org.apache.jackrabbit.core.fs.db.DbFileSystem</config.db.fsclass>
        <config.db.dsclass>org.apache.jackrabbit.core.data.db.DbDataStore</config.db.dsclass>
        <config.db.pmclass>org.apache.jackrabbit.core.persistence.pool.MySqlPersistenceManager</config.db.pmclass>
        <config.db.journalclass>org.apache.jackrabbit.core.journal.DatabaseJournal</config.db.journalclass>
        <config.db.schema>mysql</config.db.schema>
        <config.db.validation.query>select 1</config.db.validation.query>
        <config.db.user>user</config.db.user>
        <config.db.pwd>pwd</config.db.pwd>
        <config.db.driver>com.mysql.jdbc.Driver</config.db.driver>
        <config.db.url>jdbc:mysql://localhost:3306/${config.db.name}?autoReconnect=true</config.db.url>
        <config.db.metaurl>jdbc:mysql://localhost:3306/mysql?autoReconnect=true</config.db.metaurl>
        <config.db.dropcommand>drop database ${config.db.name}</config.db.dropcommand>
        <config.db.createcommand>create database ${config.db.name}</config.db.createcommand>
      </properties>
    </profile>
    <profile>
      <id>mssql</id>
      <properties>
        <config.db.name>jackrabbit</config.db.name>
        <config.db.fsclass>org.apache.jackrabbit.core.fs.db.MSSqlFileSystem</config.db.fsclass>
        <config.db.dsclass>org.apache.jackrabbit.core.data.db.DbDataStore</config.db.dsclass>
        <config.db.pmclass>org.apache.jackrabbit.core.persistence.pool.MSSqlPersistenceManager</config.db.pmclass>
        <config.db.journalclass>org.apache.jackrabbit.core.journal.MSSqlDatabaseJournal</config.db.journalclass>
        <config.db.schema>mssql</config.db.schema>
        <config.db.validation.query>select 1</config.db.validation.query>
        <config.db.user>user</config.db.user>
        <config.db.pwd>pwd</config.db.pwd>
        <config.db.driver>net.sourceforge.jtds.jdbc.Driver</config.db.driver>
        <config.db.url>jdbc:jtds:sqlserver://localhost:2433/${config.db.name}</config.db.url>
        <config.db.metaurl>jdbc:jtds:sqlserver://localhost:2433/master</config.db.metaurl>
        <config.db.dropcommand>drop database ${config.db.name}</config.db.dropcommand>
        <config.db.createcommand>create database ${config.db.name}</config.db.createcommand>
      </properties>
    </profile>
    <profile>
      <id>oracle</id>
      <properties>
        <config.db.name>unused</config.db.name>
        <config.db.fsclass>org.apache.jackrabbit.core.fs.db.OracleFileSystem</config.db.fsclass>
        <config.db.dsclass>org.apache.jackrabbit.core.data.db.DbDataStore</config.db.dsclass>
        <config.db.pmclass>org.apache.jackrabbit.core.persistence.pool.OraclePersistenceManager</config.db.pmclass>
        <config.db.journalclass>org.apache.jackrabbit.core.journal.OracleDatabaseJournal</config.db.journalclass>
        <config.db.schema>oracle</config.db.schema>
        <config.db.validation.query>select 'validationQuery' from dual</config.db.validation.query>
        <config.db.user>user</config.db.user>
        <config.db.pwd>password</config.db.pwd>
        <config.db.driver>oracle.jdbc.driver.OracleDriver</config.db.driver>
        <config.db.url>jdbc:oracle:thin:@localhost:1521:xe</config.db.url>
        <config.db.metaurl>unused</config.db.metaurl>
        <config.db.dropcommand>unused</config.db.dropcommand>
        <config.db.createcommand>unused</config.db.createcommand>
      </properties>
    </profile>
    <profile>
      <id>h2</id>
      <properties>
        <config.db.name>jackrabbit</config.db.name>
        <config.db.fsclass>org.apache.jackrabbit.core.fs.db.DbFileSystem</config.db.fsclass>
        <config.db.dsclass>org.apache.jackrabbit.core.data.db.DbDataStore</config.db.dsclass>
        <config.db.pmclass>org.apache.jackrabbit.core.persistence.pool.H2PersistenceManager</config.db.pmclass>
        <config.db.journalclass>org.apache.jackrabbit.core.journal.DatabaseJournal</config.db.journalclass>
        <config.db.schema>h2</config.db.schema>
        <config.db.validation.query>call 1</config.db.validation.query>
        <config.db.user>sa</config.db.user>
        <config.db.pwd>sa</config.db.pwd>
        <config.db.driver>org.h2.Driver</config.db.driver>
        <!-- <config.db.url>jdbc:h2:~/jackrabbit2;MAX_LENGTH_INPLACE_LOB=10240;DB_CLOSE_ON_EXIT=FALSE;TRACE_LEVEL_FILE=2</config.db.url> -->
        <config.db.url>jdbc:h2:~/jackrabbit2;MAX_LENGTH_INPLACE_LOB=10240;DB_CLOSE_ON_EXIT=FALSE</config.db.url>
        <config.db.metaurl>unused</config.db.metaurl>
        <config.db.dropcommand>drop all objects delete files</config.db.dropcommand>
        <config.db.createcommand>unused</config.db.createcommand>
      </properties>
    </profile>
    <profile>
      <id>use-descriptor-overlay</id>
      <build>
      <plugins>
        <!-- Drop/create the test database on clean -->        
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>sql-maven-plugin</artifactId>
          <dependencies>
            <dependency>
              <groupId>mysql</groupId>
              <artifactId>mysql-connector-java</artifactId>
              <version>5.1.6</version>
              <type>jar</type>
              <scope>provided</scope>
            </dependency>
            <dependency>
              <groupId>net.sourceforge.jtds</groupId>
              <artifactId>jtds</artifactId>
              <version>1.2.2</version>
              <scope>provided</scope>
            </dependency>
          </dependencies>
          <configuration>
            <driver>${config.db.driver}</driver>
            <url>${config.db.metaurl}</url>
            <username>${config.db.user}</username>
            <password>${config.db.pwd}</password>
            <settingsKey>sensibleKey</settingsKey>
          </configuration>
          <executions>
            <execution>
              <id>drop-db</id>
              <phase>clean</phase>
              <goals>
                <goal>execute</goal>
              </goals>
              <configuration>
                <autocommit>true</autocommit>
                <sqlCommand>${config.db.dropcommand}</sqlCommand>
                <onError>continue</onError>
              </configuration>
            </execution>
            <execution>
              <id>create-db</id>
              <phase>clean</phase>
              <goals>
                <goal>execute</goal>
              </goals>
              <configuration>
                <autocommit>true</autocommit>
                <sqlCommand>${config.db.createcommand}</sqlCommand>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <executions>
            <execution>
              <id>overlay-repository-descriptors</id>
              <phase>process-test-resources</phase>
              <configuration>
                <target>
                  <copy todir="${project.build.directory}/repository" overwrite="true">
                    <fileset dir="${basedir}/src/test/repository-descriptor-overlay" />
                    <filterset>
                      <filter token="repo.id" value="A" />
                      <filter token="config.db.schema" value="${config.db.schema}" />
                      <filter token="config.db.validation.query" value="${config.db.validation.query}" />
                      <filter token="config.db.driver" value="${config.db.driver}" />
                      <filter token="config.db.url" value="${config.db.url}" />
                      <filter token="config.db.user" value="${config.db.user}" />
                      <filter token="config.db.pwd" value="${config.db.pwd}" />
                      <filter token="config.db.fsclass" value="${config.db.fsclass}" />
                      <filter token="config.db.dsclass" value="${config.db.dsclass}" />
                      <filter token="config.db.pmclass" value="${config.db.pmclass}" />
                      <filter token="config.db.journalclass" value="${config.db.journalclass}" />
                    </filterset>
                  </copy>
                  <copy todir="${project.build.directory}/repository-2" overwrite="true">
                    <fileset dir="${basedir}/src/test/repository-descriptor-overlay" />
                    <filterset>
                      <filter token="repo.id" value="B" />
                      <filter token="config.db.schema" value="${config.db.schema}" />
                      <filter token="config.db.validation.query" value="${config.db.validation.query}" />
                      <filter token="config.db.driver" value="${config.db.driver}" />
                      <filter token="config.db.url" value="${config.db.url}" />
                      <filter token="config.db.user" value="${config.db.user}" />
                      <filter token="config.db.pwd" value="${config.db.pwd}" />
                      <filter token="config.db.fsclass" value="${config.db.fsclass}" />
                      <filter token="config.db.dsclass" value="${config.db.dsclass}" />
                      <filter token="config.db.pmclass" value="${config.db.pmclass}" />
                      <filter token="config.db.journalclass" value="${config.db.journalclass}" />
                    </filterset>
                  </copy>
                </target>
              </configuration>
              <goals>
                <goal>run</goal>
              </goals>
            </execution>
          </executions>
          <dependencies>
            <dependency>
              <groupId>ant</groupId>
              <artifactId>ant-optional</artifactId>
              <version>1.5.3-1</version>
            </dependency>
          </dependencies>
        </plugin>
      </plugins>
      </build>
      <dependencies>
        <dependency>
          <groupId>mysql</groupId>
          <artifactId>mysql-connector-java</artifactId>
          <version>5.1.6</version>
          <type>jar</type>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>net.sourceforge.jtds</groupId>
          <artifactId>jtds</artifactId>
          <version>1.2.2</version>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>com.oracle</groupId>
          <artifactId>ojdbc14</artifactId>
          <version>10.2.0.3.0</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
  </profiles>
</project>
