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

<!--
    This integration build tests the examples that are bundled with
    the OpenJPA distribution.

    The examples will only be run if you have the 'examples-profile' enabled:

        mvn integration-test -Pexamples-profile
-->
<!-- 
    Please keep the project tag on one line to avoid confusing 
    the release plugin.
-->
<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.openjpa</groupId>
        <artifactId>openjpa-integration</artifactId>
        <version>2.2.1.x-SNAPSHOT</version>
    </parent>

    <groupId>org.apache.openjpa</groupId>
    <artifactId>openjpa-integration-examples</artifactId>
    <packaging>pom</packaging>
    <name>OpenJPA Integration Tests - Examples</name>
    <description>OpenJPA Integration Tests - Examples</description>

    <profiles>
    <profile>
    <id>examples-profile</id>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-antrun-plugin</artifactId>
                <executions>
                    <execution>
                        <id>run-examples</id>
                        <phase>integration-test</phase>
                        <configuration>
                        <tasks>
                        <echo>Running OpenJPA Examples</echo>

                        <property name="examples.base" value="${basedir}/target/examples" />
                        <delete dir="${examples.base}" quiet="true" />
                        <mkdir dir="${examples.base}" />

                        <unzip overwrite="false" dest="${examples.base}" src="${settings.localRepository}/org/apache/openjpa/apache-openjpa/${project.version}/apache-openjpa-${project.version}-binary.zip" />

                        <path id="assembly.classpath"> 
                            <fileset dir="${examples.base}">
                                <include name="**/openjpa-all-${project.version}.jar" />
                            </fileset>
                        </path>
                        <available classname="org.apache.openjpa.conf.OpenJPAVersion" classpathref="assembly.classpath" property="unzip.success" />
                        <fail unless="unzip.success">
                            Could not extract assembly.
                        </fail>

                        <!-- FIXME: Only tests simple examples for now -->
                        <subant inheritAll="false" failonerror="true">
                            <fileset dir="${examples.base}" includes="*/examples/simple/*/build.xml" />
                        </subant>

                        </tasks>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
    </profile>
    </profiles>

    <dependencies>
        <dependency>
            <groupId>org.apache.openjpa</groupId>
            <artifactId>openjpa-all</artifactId>
            <version>${project.version}</version>
        </dependency>
    </dependencies>
</project>
