<?xml version="1.0"?>
<!--
  ~ 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
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.apache.hop</groupId>
	<artifactId>hop-plugins-actions</artifactId>
	<version>0.70</version>
	<modules>
	</modules>
	<packaging>pom</packaging>

	<name>Hop Plugins Actions</name>

	<parent>
		<groupId>org.apache.hop</groupId>
		<artifactId>hop-plugins</artifactId>
		<version>0.70</version>
	</parent>

	<properties>
		<!-- Test running configuration -->
		<maven-surefire-plugin.reuseForks>true</maven-surefire-plugin.reuseForks>
		<maven-failsafe-plugin.reuseForks>false</maven-failsafe-plugin.reuseForks>
		<spring.framework.version>4.3.2.RELEASE</spring.framework.version>
	</properties>

	<profiles>
		<profile>
			<id>lowdeps</id>
			<activation>
				<property>
					<name>!skipDefault</name>
				</property>
			</activation>
			<modules>
				<module>abort</module>
			</modules>
		</profile>

		<profile>
			<id>highdeps</id>
			<activation>
				<property>
					<name>!skipDefault</name>
				</property>
			</activation>
			<modules>
				<module>abort</module>
				<module>addresultfilenames</module>
				<module>as400command</module>
				<module>checkdbconnection</module>
				<module>checkfilelocked</module>
				<module>columnsexist</module>
				<module>copyfiles</module>
				<module>copymoveresultfilenames</module>
				<module>createfile</module>
				<module>createfolder</module>
				<module>delay</module>
				<module>deletefile</module>
				<module>deletefiles</module>
				<module>deletefolders</module>
				<module>deleteresultfilenames</module>
				<module>dostounix</module>
				<module>eval</module>
				<module>evalfilesmetrics</module>
				<module>evaluatetablecontent</module>
				<module>filecompare</module>
				<module>fileexists</module>
				<module>filesexist</module>
				<module>folderisempty</module>
				<module>folderscompare</module>
				<module>ftp</module>
				<module>getpop</module>
				<module>http</module>
				<module>mail</module>
				 <module>mailvalidator</module>
				<module>movefiles</module>
				<module>msgboxinfo</module>
				<module>mysqlbulkfile</module>
				<module>mysqlbulkload</module>
				<module>pgpfiles</module>
				<module>ping</module>
				<module>repeat</module>
				<module>sendnagiospassivecheck</module>
				<module>setvariables</module>				
				<module>shell</module>
				<module>simpleeval</module>
				<module>snmptrap</module>
				<module>sql</module>
				<module>success</module>
				<module>tableexists</module>
				<module>telnet</module>
				<module>truncatetables</module>
				<module>unzip</module>
				<module>waitforfile</module>
				<module>waitforsql</module>
				<module>webserviceavailable</module>
				<module>writetofile</module>
				<module>writetolog</module>
				<module>xml</module>
				<module>zipfile</module>
				<module>mssqlbulkload</module>
			</modules>
		</profile>

	</profiles>

	<dependencies>
		<dependency>
			<groupId>org.apache.hop</groupId>
			<artifactId>hop-core</artifactId>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hop</groupId>
			<artifactId>hop-ui</artifactId>
			<version>0.70</version>
			<scope>compile</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hop</groupId>
			<artifactId>hop-engine</artifactId>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>
		<dependency>
			<groupId>org.apache.hop</groupId>
			<artifactId>hop-core</artifactId>
			<type>test-jar</type>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>${spring.framework.version}</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.apache.hop</groupId>
				<artifactId>hop-core</artifactId>
				<version>${project.version}</version>
				<scope>provided</scope>
			</dependency>

			<!-- test dependencies -->
			<dependency>
				<groupId>junit</groupId>
				<artifactId>junit</artifactId>
				<version>${junit.version}</version>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.apache.hop</groupId>
				<artifactId>hop-core</artifactId>
				<version>${project.version}</version>
				<classifier>test</classifier>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.apache.hop</groupId>
				<artifactId>hop-engine</artifactId>
				<version>${project.version}</version>
				<type>test-jar</type>
				<scope>test</scope>
			</dependency>

			<dependency>
				<groupId>org.apache.hop</groupId>
				<artifactId>hop-core</artifactId>
				<version>${project.version}</version>
				<type>test-jar</type>
				<scope>test</scope>
			</dependency>

		</dependencies>
	</dependencyManagement>

	<build>
		<resources>
			<resource>
				<directory>src/main/java</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.svg</include>
				</includes>
			</resource>
			<resource>
				<directory>src/main/resources</directory>
				<includes>
					<include>**/*.properties</include>
					<include>**/*.svg</include>
				</includes>
			</resource>
		</resources>
	</build>
</project>
