<?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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.apache.mrql</groupId>
  <artifactId>mrql-bsp</artifactId>
  <packaging>jar</packaging>
  <name>Apache MRQL BSP mode</name>
  <description>Apache MRQL evaluation in BSP mode on Apache Hama</description>
  <url>http://mrql.incubator.apache.org/</url>
  <inceptionYear>2013</inceptionYear>

  <parent>
    <groupId>org.apache.mrql</groupId>
    <artifactId>mrql-parent</artifactId>
    <version>0.9.0-incubating</version>
  </parent>
  
  <dependencies>
    <dependency>
      <groupId>org.apache.mrql</groupId>
      <artifactId>mrql-gen</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.mrql</groupId>
      <artifactId>mrql-core</artifactId>
      <version>${project.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.hama</groupId>
      <artifactId>hama-core</artifactId>
      <version>${hama.version}</version>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>build-helper-maven-plugin</artifactId>
        <version>1.8</version>
        <executions>
          <execution>
            <phase>generate-sources</phase>
            <goals><goal>add-source</goal></goals>
            <configuration>
              <sources>
                <source>../src/main/java/BSP</source>
                <source>${project.build.directory}/generated-sources/org/apache/mrql</source>
              </sources>
            </configuration>
          </execution>
        </executions>
      </plugin>
      <plugin>
	<groupId>org.apache.maven.plugins</groupId>
	<artifactId>maven-shade-plugin</artifactId>
	<version>2.1</version>
	<executions>
	  <execution>
	    <phase>package</phase>
	    <goals>
	      <goal>shade</goal>
	    </goals>
	    <configuration>
             <artifactSet>
	       <includes>
		 <include>org.apache.mrql:*</include>
	       </includes>
	       <excludes>
		 <exclude>org.apache.mrql:mrql-gen</exclude>
		 <exclude>org.apache.mrql:mrql-core</exclude>
	       </excludes>
              </artifactSet>
	    </configuration>
	  </execution>
	</executions>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
	<configuration>
	  <finalName>mrql-bsp-${project.version}</finalName>
	  <outputDirectory>${project.parent.basedir}/lib</outputDirectory>
	</configuration>
      </plugin>
      <plugin>
	<artifactId>maven-antrun-plugin</artifactId>
	<version>1.7</version>
	<executions>
	  <execution>
	    <phase>generate-sources</phase>
	    <goals>
	      <goal>run</goal>
	    </goals>
	    <configuration>
              <target>
                <mkdir dir="${project.build.directory}/generated-sources/org/apache/mrql" />
		<property name="compile_classpath" refid="maven.compile.classpath" />
		<fileset id="mr.gen.path" dir="../src/main/java/BSP" includes="*.gen" />
		<pathconvert pathsep=" " property="mr.gen.files" refid="mr.gen.path" />
		<java classname="org.apache.mrql.gen.Main" classpath="../lib/mrql-gen-${project.version}.jar:${compile_classpath}">
		  <arg line="${mr.gen.files}" />
		  <arg line="-o" />
		  <arg file="${project.build.directory}/generated-sources/org/apache/mrql" />
		</java>
	      </target>
  	    </configuration>
	  </execution>
          <execution>
	    <id>validate</id>
            <phase>verify</phase>
	    <goals>
	      <goal>run</goal>
	    </goals>
	    <configuration>
	      <target name="validate_hama" description="Validate all test queries on Apache Hama">
		<property name="runtime_classpath" refid="maven.runtime.classpath" />
		<echo message="Evaluating test queries in memory (BSP mode):" />
		<java classname="org.apache.mrql.Test" classpath="${runtime_classpath}" dir=".." fork="yes">
		  <arg line="-bsp" />
		  <arg file="../tests/queries" />
		  <arg file="../tests/results/bsp-memory" />
		  <arg file="../tests/error_log.txt" />
		</java>
		<echo message="Evaluating test queries in Apache Hama local mode:" />
		<java classname="org.apache.mrql.Test" classpath="../lib/mrql-bsp-${project.version}.jar:${runtime_classpath}" dir=".." fork="yes" error="/dev/null">
		  <arg line="-local" />
		  <arg line="-bsp" />
		  <arg file="../tests/queries" />
		  <arg file="../tests/results/bsp" />
		  <arg file="../tests/error_log.txt" />
		</java>
	      </target>
  	    </configuration>
	  </execution>
	</executions>
      </plugin>
    </plugins>
  </build>
</project>
