<?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>camel-parent</artifactId>
    <version>2.9.8</version>
    <relativePath>../../parent</relativePath>
  </parent>

  <artifactId>camel-jpa</artifactId>
  <packaging>bundle</packaging>
  <name>Camel :: JPA</name>
  <description>Camel JPA support</description>

  <properties>
    <camel.osgi.export.pkg>
      org.apache.camel.component.jpa.*;${camel.osgi.version},
      org.apache.camel.processor.idempotent.jpa.*;${camel.osgi.version},
      org.apache.camel.processor.interceptor.jpa.*
    </camel.osgi.export.pkg>
    <camel.osgi.import.pkg>
      !org.apache.camel.component.jpa.*,
      !org.apache.camel.processor.idempotent.jpa.*,
      !org.apache.camel.processor.interceptor.jpa.*,
      org.apache.camel.*;${camel.osgi.import.camel.version},
      ${camel.osgi.import.defaults},
      *
    </camel.osgi.import.pkg>
  </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-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
    </dependency>
    <dependency>
      <groupId>org.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jpa_2.0_spec</artifactId>
      <scope>provided</scope>
    </dependency> 
    <!-- testing -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-test</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.openjpa</groupId>
      <artifactId>openjpa-persistence-jdbc</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.derby</groupId>
      <artifactId>derby</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-surefire-plugin</artifactId>
        <configuration>
          <systemProperties>
            <property>
              <name>derby.stream.error.file</name>
              <value>target/derby.log</value>
            </property>
          </systemProperties>
        </configuration>
      </plugin>
 

      <!-- lets enhance the classes for OpenJPA (shame it can't do it at runtime!) -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-antrun-plugin</artifactId>
        <dependencies>
          <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-persistence-jdbc</artifactId>
            <version>${openjpa-version}</version>
          </dependency>
        </dependencies>

        <executions>
          <execution>
            <phase>process-test-classes</phase>
            <configuration>
              <target>
                <path id="cp">
                  <path refid="maven.test.classpath" />
                  <path refid="maven.compile.classpath" />
                  <path refid="maven.dependency.classpath" />
                </path>
                <taskdef name="openjpac" classname="org.apache.openjpa.ant.PCEnhancerTask">
                  <classpath refid="cp" />
                </taskdef>

                <mkdir dir="${basedir}/target/jpa-test-classes" />

                <openjpac directory="${basedir}/target/jpa-test-classes">
                  <classpath refid="cp" />
                    <fileset dir="${basedir}/target/classes">
                      <include name="org/apache/camel/processor/**/MessageProcessed.class" />
                      <include name="org/apache/camel/processor/**/JpaTraceEventMessage.class" />
                    </fileset>
                  <config propertiesFile="${basedir}/src/test/resources/META-INF/persistence.xml" />
                </openjpac>

                <openjpac directory="${basedir}/target/jpa-test-classes">
                  <classpath refid="cp" />
                    <fileset dir="${basedir}/target/test-classes">
                      <include name="org/apache/camel/examples/*.class" />
                    </fileset>
                  <config propertiesFile="${basedir}/src/test/resources/META-INF/persistence.xml" />
                </openjpac>

                <copy overwrite="true" todir="${basedir}/target/test-classes">
                  <fileset dir="${basedir}/target/jpa-test-classes" />
                </copy>
              </target>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>

        </plugins>
    </build>
</project>
