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