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

    <properties>
        <checkstyle.config.location>${project.basedir}${file.separator}..${file.separator}..${file.separator}openjpa-project${file.separator}checkstyle.xml</checkstyle.config.location>
    </properties>
    <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>
