<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2012 AndroidPlot.com
  ~
  ~    Licensed 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/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>androidplot</artifactId>
        <groupId>com.androidplot</groupId>
        <version>0.6.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>androidplot-examples</artifactId>
    <name>AndroidPlot-Examples</name>
    <packaging>pom</packaging>

    <dependencies>
        <dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
        </dependency>
        <!--<dependency>
            <groupId>com.google.android</groupId>
            <artifactId>android</artifactId>
            <version>2.1_r1</version>
            <scope>provided</scope>
        </dependency>-->
        <!-- TODO: figure out how to use this dependency without breaking the clean target;
        used as-is, the clean target can fail because the dependency is erased by maven.
        <dependency>
            <groupId>com.androidplot</groupId>
            <artifactId>androidplot-core</artifactId>
            <version>${applicationVersion}</version>
        </dependency>
        -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.6</version>
                <executions>
                    <execution>
                        <id>compile</id>
                        <phase>compile</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        
                        <configuration>
                            <target name="build-examples">
                                <!--
                                <property name="key.store" value="test"/>
                                <property name="key.alias" value="test"/>
                                -->
                                <!--<property name="sdk.dir" value="C:/android-sdk"/>-->
                                <property environment="env"/>
                                <property name="sdk.dir" value="${env.ANDROID_HOME}"/>
                                <!-- todo: include only the release jar, not everything inside
                                           the artifacts dir.-->
                                <!--<property name="jar.libs.dir" value="../../AndroidPlot-Core/target/obfuscated/"/>-->
                                <property name="build.compiler" value="extJavac"/>
                                <property environment="env"/>
                                <property name="sdk.dir" value="${env.ANDROID_HOME}"/>
                                <!--<property name="apkeystore" value="${env.AP_KEYSTORE}"/>-->
                                
                                <!-- DemoApp-->
                                <ant antfile="build.xml" target="debug" dir="DemoApp"/>

                                <!-- DynamicXYPlotExample-->
                                <ant antfile="build.xml" target="debug" dir="DynamicXYPlotExample"/>

                                <!-- HelperExample-->
                                <ant antfile="build.xml" target="debug" dir="HelperExample"/>

                                <!-- OrientationSensorExample-->
                                <ant antfile="build.xml" target="debug" dir="OrientationSensorExample"/>

                                <!-- SimpleXYPlotExample-->
                                <ant antfile="build.xml" target="debug" dir="SimpleXYPlotExample"/>

                                <!-- StepChartExample-->
                                <ant antfile="build.xml" target="debug" dir="StepChartExample"/>

                                <!-- TimedXYPlotExample
                                <ant antfile="build.xml" target="debug" dir="TimedXYPlotExample"/>
                                -->
                            </target>

                        </configuration>
                        
                    </execution>
                    <execution>
                        <id>clean</id>
                        <phase>clean</phase>
                        <goals>
                            <goal>run</goal>
                        </goals>
                        <configuration>
                            <tasks>
                                <property environment="env"/>
                                <property name="sdk.dir" value="${env.ANDROID_HOME}"/>

                                <!-- DemoApp-->
                                <ant antfile="build.xml" target="clean" dir="DemoApp"/>

                                <!-- DynamicXYPlotExample-->
                                <ant antfile="build.xml" target="clean" dir="DynamicXYPlotExample"/>

                                <!-- HelperExample-->
                                <ant antfile="build.xml" target="clean" dir="HelperExample"/>

                                <!-- OrientationSensorExample-->
                                <ant antfile="build.xml" target="clean" dir="OrientationSensorExample"/>

                                <!-- SimpleXYPlotExample-->
                                <ant antfile="build.xml" target="clean" dir="SimpleXYPlotExample"/>

                                <!-- StepChartExample-->
                                <ant antfile="build.xml" target="clean" dir="StepChartExample"/>
                                
                                <!-- TimedXYPlotExample
                                <ant antfile="build.xml" target="clean" dir="TimedXYPlotExample"/>
-->
                            </tasks>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>


</project>