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

-->
<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">
  <modelVersion>4.0.0</modelVersion>

  <parent>
    <groupId>org.apache.apex</groupId>
    <artifactId>malhar</artifactId>
    <version>3.5.0</version>
  </parent>

  <artifactId>malhar-demos</artifactId>
  <packaging>pom</packaging>
  <name>Apache Apex Malhar Demos</name>

  <properties>
    <apex.apppackage.groupid>${project.groupId}</apex.apppackage.groupid>
    <apex.apppackage.classpath>lib/*.jar</apex.apppackage.classpath>
    <semver.plugin.skip>true</semver.plugin.skip>
    <maven.deploy.skip>true</maven.deploy.skip>
  </properties>

  <profiles>
	<profile>
    <id>demo-plugin-activation</id>
    <activation>
        <file>
            <exists>${basedir}/src/main</exists>
        </file>
    </activation>
    <build>
      <plugins>
        <plugin>
          <artifactId>maven-eclipse-plugin</artifactId>
          <version>2.9</version>
          <configuration>
            <downloadSources>true</downloadSources>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-compiler-plugin</artifactId>
          <version>2.3.2</version>
          <configuration>
            <encoding>UTF-8</encoding>
            <source>1.7</source>
            <target>1.7</target>
            <debug>true</debug>
            <optimize>false</optimize>
            <showDeprecation>true</showDeprecation>
            <showWarnings>true</showWarnings>
          </configuration>
        </plugin>
        <plugin>
          <artifactId>maven-dependency-plugin</artifactId>
          <version>2.8</version>
          <executions>
            <execution>
              <id>copy-dependencies</id>
              <phase>prepare-package</phase>
              <goals>
                <goal>copy-dependencies</goal>
              </goals>
              <configuration>
                <outputDirectory>target/deps</outputDirectory>
                <includeScope>runtime</includeScope>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-assembly-plugin</artifactId>
          <executions>
            <execution>
              <id>app-package-assembly</id>
              <phase>package</phase>
              <goals>
                <goal>single</goal>
              </goals>
              <configuration>
                <finalName>${project.artifactId}-${project.version}-apexapp</finalName>
                <appendAssemblyId>false</appendAssemblyId>
                <descriptors>
                  <descriptor>src/assemble/appPackage.xml</descriptor>
                </descriptors>
                <archiverConfig>
                  <defaultDirectoryMode>0755</defaultDirectoryMode>
                </archiverConfig>
                <archive>
                  <manifestEntries>
                    <Class-Path>${apex.apppackage.classpath}</Class-Path>
                    <DT-Engine-Version>${apex.core.version}</DT-Engine-Version>
                    <DT-App-Package-Group-Id>${apex.apppackage.groupid}</DT-App-Package-Group-Id>
                    <DT-App-Package-Name>${project.artifactId}</DT-App-Package-Name>
                    <DT-App-Package-Version>${project.version}</DT-App-Package-Version>
                    <DT-App-Package-Display-Name>${project.name}</DT-App-Package-Display-Name>
                    <DT-App-Package-Description>${project.description}</DT-App-Package-Description>
                  </manifestEntries>
                </archive>
              </configuration>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <artifactId>maven-antrun-plugin</artifactId>
          <version>1.7</version>
          <executions>
            <execution>
              <phase>package</phase>
              <configuration>
                <target>
                  <move file="${project.build.directory}/${project.artifactId}-${project.version}-apexapp.jar"
                        tofile="${project.build.directory}/${project.artifactId}-${project.version}.apa" />
                </target>
              </configuration>
              <goals>
                <goal>run</goal>
              </goals>
            </execution>
          </executions>
        </plugin>
        <plugin>
          <groupId>org.codehaus.mojo</groupId>
          <artifactId>build-helper-maven-plugin</artifactId>
          <version>1.9.1</version>
          <executions>
            <execution>
              <id>attach-artifacts</id>
              <phase>package</phase>
              <goals>
                <goal>attach-artifact</goal>
              </goals>
              <configuration>
                <artifacts>
                  <artifact>
                    <file>target/${project.artifactId}-${project.version}.apa</file>
                    <type>apa</type>
                  </artifact>
                </artifacts>
                <skipAttach>false</skipAttach>
              </configuration>
            </execution>
          </executions>
        </plugin>
      </plugins>
	</build>
	</profile>
    <profile>
      <id>all-modules</id>
      <modules>
        <module>distributedistinct</module>
        <module>highlevelapi</module>
      </modules>
    </profile>
  </profiles>

  <modules>
    <module>machinedata</module>
    <module>pi</module>
    <module>twitter</module>
    <module>yahoofinance</module>
    <module>frauddetect</module>
    <module>mobile</module>
    <module>wordcount</module>
    <module>mrmonitor</module>
    <module>mroperator</module>
    <module>uniquecount</module>
    <module>r</module>
    <module>echoserver</module>
    <module>iteration</module>
  </modules>

  <dependencies>
    <dependency>
      <groupId>org.apache.apex</groupId>
      <artifactId>apex-common</artifactId>
      <version>${apex.core.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.10</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.apache.apex</groupId>
      <artifactId>malhar-library</artifactId>
      <version>${project.version}</version>
      <exclusions>
        <exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
    <dependency>
      <groupId>org.apache.apex</groupId>
      <artifactId>malhar-library</artifactId>
      <version>${project.version}</version>
      <classifier>tests</classifier>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>*</groupId>
          <artifactId>*</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
  </dependencies>

</project>
