<?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.10.3</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>
  </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>-Xmx512m</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.ReplacePropertyWhileOthersReadTest <!-- JCR-3835 -->
org.apache.jackrabbit.core.security.user.MembershipCachePerfTest <!-- don't run expensive test -->
              </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>
       <version>2.4</version>
       <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.3</version>
    </dependency>
    <dependency>
      <groupId>javax.jcr</groupId>
      <artifactId>jcr</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-api</artifactId>
      <version>${project.version}</version>
    </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>
    </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>
      </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>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jta_1.0.1B_spec</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>com.h2database</groupId>
      <artifactId>h2</artifactId>
      <version>1.3.149</version>
      <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>
