<?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
-->
<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>examples</artifactId>
    <packaging>pom</packaging>
    <name>OpenJPA Examples Integration Tests</name>
    <parent>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa-integration</artifactId>
        <version>1.0.2</version>
    </parent>

    <profiles>
    <profile>
    <id>examples-profile</id>
    <build>
        <plugins>
            <plugin>
                <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"/>
                        <mkdir dir="${examples.base}"/>

                        <unzip overwrite="false" dest="${examples.base}"
                            src="../../target/site/downloads/apache-openjpa-${pom.version}-binary.zip"/>

                        <path id="assembly.classpath"> 
                            <fileset dir="${examples.base}">
                                <include name="**/*.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>

                        <subant inheritAll="false" failonerror="true">
                            <fileset dir="${examples.base}"
                                includes="*/examples/*/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</artifactId>
            <version>${pom.version}</version>
        </dependency>
    </dependencies>
</project>

