<?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.8-SNAPSHOT</version>
    <relativePath>../jackrabbit-parent/pom.xml</relativePath>
  </parent>
  <artifactId>jackrabbit-jcr2dav</artifactId>
  <name>Jackrabbit JCR to WebDAV</name>

  <properties>
    <org.apache.jackrabbit.jcr2dav.RepositoryStubImpl.port>0</org.apache.jackrabbit.jcr2dav.RepositoryStubImpl.port>
  </properties>

  <profiles>
    <profile>
      <id>integrationTesting</id>
      <build>
        <plugins>
          <plugin>
            <artifactId>maven-surefire-plugin</artifactId>
            <configuration>
              <argLine>${test.opts}</argLine>
              <fork>true</fork>
              <systemProperties>
                <property>
                  <name>jackrabbit.test.integration</name>
                  <value>true</value>
                </property>
                <property>
                  <name>org.apache.jackrabbit.jcr2dav.RepositoryStubImpl.port</name>
                  <value>${org.apache.jackrabbit.jcr2dav.RepositoryStubImpl.port}</value>
                </property>
                <property>
                  <name>known.issues</name>
                  <value>
                      <!--

                      This is the list of failing TCK and jcr2spi tests in a jcr2spi - spi2davex setup.

                      A comprehensive list of missing JCR 2.0 features can be found at
                      https://issues.apache.org/jira/browse/JCR-2003

                      Known issues of jcr2spi and spi2dav(ex) are listed at
                      https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+JCR+AND+component+%3D+jackrabbit-jcr2spi+AND+status+%3D+Open+ORDER+BY+priority+DESC&mode=hide
                      https://issues.apache.org/jira/secure/IssueNavigator.jspa?reset=true&jqlQuery=project+%3D+JCR+AND+component+%3D+jackrabbit-spi2dav+AND+status+%3D+Open+ORDER+BY+priority+DESC&mode=hide

                      -->
                      <!-- ***** PLEASE update spi2dav/pom.xml as well ***** -->
                      <!-- wrong exception: ConstraintViolationEx. instead SAXException/InvalidSerializedDataEx.-->
                      org.apache.jackrabbit.test.api.SerializationTest#testNodeTypeConstraintViolationWorkspace
                      <!-- JCR-2538 : impersonation not implemented -->
                      org.apache.jackrabbit.test.api.ImpersonateTest
                      <!-- JCR-2099 : shareable nodes -->
                      org.apache.jackrabbit.test.api.ShareableNodeTest
                      <!-- JCR-2228 : life cycle management -->
                      org.apache.jackrabbit.test.api.LifecycleTest
                      <!-- lock token transfer -->
                      org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddInvalidLockToken
                      org.apache.jackrabbit.test.api.lock.LockManagerTest#testAddLockTokenToAnotherSession
                      org.apache.jackrabbit.test.api.lock.LockManagerTest#testLockTransfer2
                      org.apache.jackrabbit.jcr2spi.lock.OpenScopedLockTest#testLogoutHasNoEffect
                      <!-- JCR-3207 -->
                      org.apache.jackrabbit.test.api.observation.NodeReorderTest#testNodeReorderMove
                      <!-- JCR-2533 : missing impl of checkQueryStatement -->                      
                      org.apache.jackrabbit.test.api.query.CreateQueryTest#testUnknownQueryLanguage
                      <!-- JCR-2533 : missing impl of checkQueryStatement -->
                      org.apache.jackrabbit.test.api.query.qom.BindVariableValueTest
                      <!-- JCR-2112 : simple versioning not implemented -->
                      org.apache.jackrabbit.test.api.version.simple
                      <!-- JCR-2104 : activities and configuration -->
                      org.apache.jackrabbit.test.api.version.ActivitiesTest
                      org.apache.jackrabbit.test.api.version.MergeActivityTest#testMergeActivity                     
                      org.apache.jackrabbit.test.api.version.ConfigurationsTest
                      <!-- JCR-2560 -->
                      org.apache.jackrabbit.jcr2spi.IsSameTest#testIsSameProperty3
                      org.apache.jackrabbit.jcr2spi.IsSameTest#testIsSameProperty4
                      org.apache.jackrabbit.jcr2spi.IsSameTest#testIsSameNode7
                      <!-- Known, general issue of the Jcr2Spi - SPI setup.
                           No notification about changes to registered namespace(s) -->                        
                      org.apache.jackrabbit.jcr2spi.name.NamespaceRegistryTest#testReRegisteredNamespace
                      org.apache.jackrabbit.jcr2spi.name.NamespaceRegistryTest#testReRegisteredNamespaceVisibility
                      org.apache.jackrabbit.test.api.query.qom.EquiJoinConditionTest#testRightOuterJoin1<!--JCR-3493, JCR-3498-->
                      org.apache.jackrabbit.test.api.query.qom.EquiJoinConditionTest#testLeftOuterJoin2<!--JCR-3493, JCR-3498-->

                    <!-- security related tests -->
                      <!-- The following 5 tests don't make too much sense on a jcr-client that doesn't necessarily should
                           know about the concrete implementation and thus might just collection all information and
                           delegate any optimization to the server-side -->
                      org.apache.jackrabbit.test.api.security.AccessControlListTest#testAddAggregatedPrivilegesSeparately <!-- JCR-3832 -->
                      org.apache.jackrabbit.test.api.security.AccessControlListTest#testAddAccessControlEntryInvalidPrincipal
                      org.apache.jackrabbit.test.api.security.AccessControlListTest#testAddAccessControlEntryInvalidPrivilege
                      org.apache.jackrabbit.test.api.security.AccessControlListTest#testAddAccessControlEntryTwice
                      org.apache.jackrabbit.test.api.security.AccessControlListTest#testAddAccessControlEntryAgain
                      <!-- Tests to verify -->
                      org.apache.jackrabbit.test.api.security.RSessionAccessControlPolicyTest#testGetApplicablePolicies
                      org.apache.jackrabbit.test.api.security.RSessionAccessControlPolicyTest#testGetPolicy
                      
                     org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testStringLiteralInvalidName        <!-- OAK-3265, JCR-3913 -->
                     org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testPathLiteral                     <!-- OAK-3265, JCR-3913 -->
                     org.apache.jackrabbit.test.api.query.qom.NodeLocalNameTest#testURILiteral                      <!-- OAK-3265, JCR-3913 -->
                     <!-- JCR-3995 -->
                     org.apache.jackrabbit.jcr2spi.security.authorization.jackrabbit.acl.AccessControlManagerImplTest#testAddingFourAccessControlEntries
                  </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>
              </systemProperties>
            </configuration>
          </plugin>
        </plugins>
      </build>
    </profile>
  </profiles>

  <dependencies>
    <dependency>
      <groupId>javax.jcr</groupId>
      <artifactId>jcr</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr2spi</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-spi2dav</artifactId>
      <version>${project.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-tests</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
       <groupId>org.apache.jackrabbit</groupId>
       <artifactId>jackrabbit-jcr2spi</artifactId>
       <version>${project.version}</version>
       <classifier>tests</classifier>
       <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-core</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.jackrabbit</groupId>
      <artifactId>jackrabbit-jcr-server</artifactId>
      <version>${project.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-server</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-servlet</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>ch.qos.logback</groupId>
      <artifactId>logback-classic</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

</project>
