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

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

  <parent>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-parent</artifactId>
    <version>1.6.4</version>
  </parent>

  <properties>
    <camel.osgi.export.pkg>
      org.apache.camel.component.jpa.*;${camel.osgi.version},
      org.apache.camel.processor.idempotent.jpa.*
    </camel.osgi.export.pkg>
    <camel.osgi.import.pkg>
      !org.apache.camel.component.jpa.*,
      !org.apache.camel.processor.idempotent.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.apache.geronimo.specs</groupId>
      <artifactId>geronimo-jpa_3.0_spec</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
    </dependency>
    <dependency>
      <groupId>commons-logging</groupId>
      <artifactId>commons-logging-api</artifactId>
    </dependency>

    <!-- testing -->
    <dependency>
      <groupId>org.apache.camel</groupId>
      <artifactId>camel-core</artifactId>
      <type>test-jar</type>
      <optional>true</optional>
      <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>commons-collections</groupId>
      <artifactId>commons-collections</artifactId>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>

      <!-- 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>
              <tasks>
                <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" />
                  </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>
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

</project>
