<?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>

  <parent>
    <groupId>org.apache.camel</groupId>
    <artifactId>components</artifactId>
    <version>2.19.0</version>
  </parent>

  <artifactId>camel-bam</artifactId>
  <packaging>jar</packaging>
  <name>Camel :: BAM (deprecated)</name>
  <description>Business Activity Monitoring</description>

  <properties>
    <!-- use by camel-catalog -->
    <firstVersion>1.0.0</firstVersion>
    <label>monitoring</label>
    <title>BAM</title>

    <camel.osgi.export.pkg>org.apache.camel.bam.*</camel.osgi.export.pkg>
    <eclipselink-version>2.3.2</eclipselink-version>
  </properties>

  <dependencies>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-spring</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jpa_2.0_spec</artifactId>
    </dependency>

    <!-- testing -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test-spring</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-juel</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
      <dependency>
          <groupId>org.mockito</groupId>
          <artifactId>mockito-core</artifactId>
          <scope>test</scope>
      </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <forkCount>1</forkCount>
	  <reuseForks>false</reuseForks>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <profiles>
    <!-- Hibernate Derby profile -->
    <profile>
      <id>hibernate</id>
      <activation>
        <activeByDefault>true</activeByDefault>
      </activation>
      <build>
        <testResources>
          <testResource>
            <directory>${basedir}/src/test/profiles/hibernate</directory>
          </testResource>
        </testResources>
      </build>
      <dependencies>
        <dependency>
          <groupId>org.hibernate</groupId>
          <artifactId>hibernate-entitymanager</artifactId>
          <scope>test</scope>
        </dependency>
        <dependency>
          <groupId>org.apache.geronimo.specs</groupId>
          <artifactId>geronimo-jta_1.1_spec</artifactId>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>

    <!-- EclipseLink Derby profile -->
    <profile>
      <id>eclipselink</id>
      <build>
        <testResources>
          <testResource>
            <directory>${basedir}/src/test/profiles/eclipselink</directory>
          </testResource>
        </testResources>
      </build>
      <dependencies>
        <dependency>
          <groupId>org.eclipse.persistence</groupId>
          <artifactId>eclipselink</artifactId>
          <version>${eclipselink-version}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
      <repositories>
        <repository>
          <id>Eclipse</id>
          <url>http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo</url>
        </repository>
      </repositories>
    </profile>

    <!-- OpenJPA Derby profile -->
    <profile>
      <id>openjpa</id>
      <build>
        <testResources>
          <testResource>
            <directory>${basedir}/src/test/profiles/openjpa</directory>
          </testResource>
        </testResources>
        <plugins>
          <plugin>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-maven-plugin</artifactId>
            <version>${openjpa-version}</version>
            <executions>
              <execution>
                <id>JPA Enhance</id>
                <phase>process-test-classes</phase>
                <goals>
                  <goal>enhance</goal>
                </goals>
              </execution>
            </executions>
            <configuration>
              <persistenceXmlFile>${project.basedir}/src/test/profiles/openjpa/META-INF/persistence.xml</persistenceXmlFile>
              <addDefaultConstructor>true</addDefaultConstructor>
              <enforcePropertyRestrictions>true</enforcePropertyRestrictions>
            </configuration>
            <dependencies>
              <dependency>
                <groupId>org.apache.camel</groupId>
                <artifactId>camel-core</artifactId>
                <version>${project.version}</version>
              </dependency>
              <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring-version}</version>
              </dependency>
            </dependencies>
          </plugin>
        </plugins>
      </build>

      <dependencies>
        <dependency>
          <groupId>org.apache.openjpa</groupId>
          <artifactId>openjpa</artifactId>
          <version>${openjpa-version}</version>
          <scope>test</scope>
        </dependency>
      </dependencies>
    </profile>
  </profiles>
</project>
