<?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-mr</artifactId>
  <packaging>jar</packaging>
  <name>Apache MRQL MapReduce mode</name>
  <description>Apache MRQL evaluation in MapReduce mode on Apache Hadoop</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-SNAPSHOT</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>
    <!-- needed for testing in local mode -->
    <dependency>
      <groupId>commons-io</groupId>
      <artifactId>commons-io</artifactId>
      <version>2.4</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/MapReduce</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-mr-${project.version}</finalName>
	  <outputDirectory>${project.parent.basedir}/lib</outputDirectory>
	  <useDefaultManifestFile>true</useDefaultManifestFile>
	</configuration>
      </plugin>
      <plugin>
	<artifactId>maven-antrun-plugin</artifactId>
	<version>1.7</version>
	<executions>
	  <execution>
	    <id>gen</id>
	    <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/MapReduce" 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>test</phase>
	    <goals>
	      <goal>run</goal>
	    </goals>
	    <configuration>
	      <target name="validate_hadoop" if="tests" description="Validate all test queries on Apache Hadoop">
		<property name="runtime_classpath" refid="maven.runtime.classpath" />
		<echo message="Evaluating test queries in memory (Map-Reduce mode):" />
		<java classname="org.apache.mrql.Test" classpath="${runtime_classpath}" dir=".." fork="yes">
		  <arg file="../tests/queries" />
		  <arg file="../tests/results/mr-memory" />
		  <arg file="../tests/error_log.txt" />
		</java>
		<echo message="Evaluating test queries in Apache Hadoop local mode:" />
		<java classname="org.apache.mrql.Test" classpath="../lib/mrql-mr-${project.version}.jar:${runtime_classpath}" dir=".." fork="yes" error="/dev/null">
		  <arg line="-local" />
		  <arg file="../tests/queries" />
		  <arg file="../tests/results/hadoop" />
		  <arg file="../tests/error_log.txt" />
		</java>
	      </target>
  	    </configuration>
	  </execution>
	</executions>
      </plugin>
    </plugins>
  </build>
</project>
