<?xml version="1.0" encoding="UTF-8"?>
<!--
  ~ Copyright 2015-2017 OpenCB
  ~
  ~ 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:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xmlns="http://maven.apache.org/POM/4.0.0"
         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.opencb.opencga</groupId>
        <artifactId>opencga</artifactId>
        <version>3.4.0</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <artifactId>opencga-app</artifactId>
    <packaging>jar</packaging>

    <properties>
        <build.dir>${project.basedir}/../build</build.dir>
        <app.dir>${project.basedir}/app</app.dir>
        <sonar.skip>true</sonar.skip>
        <opencga.client.dir>opencga-client-${project.parent.version}</opencga.client.dir>

    </properties>

    <dependencies>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-analysis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-analysis</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-master</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-test</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-storage-app</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.opencb.opencga</groupId>
                    <artifactId>opencga-storage-benchmark</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-server</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.commons</groupId>
            <artifactId>commons-lib</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.commons</groupId>
            <artifactId>commons-datastore-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.commons</groupId>
            <artifactId>commons-datastore-mongodb</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-storage-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-catalog</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.commons</groupId>
            <artifactId>commons-datastore-solr</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.biodata</groupId>
            <artifactId>biodata-formats</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.biodata</groupId>
            <artifactId>biodata-models</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.biodata</groupId>
            <artifactId>biodata-tools</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.oskar</groupId>
            <artifactId>oskar-analysis</artifactId>
        </dependency>
        <dependency>
            <groupId>org.opencb.ga4gh</groupId>
            <artifactId>ga4gh</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>arg.apache.avro</groupId>
                    <artifactId>avro-ipc</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <!-- Added dependencies -->
        <dependency>
            <groupId>javax.ws.rs</groupId>
            <artifactId>javax.ws.rs-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-collections4</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.dataformat</groupId>
            <artifactId>jackson-dataformat-yaml</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jline</groupId>
            <artifactId>jline-reader</artifactId>
        </dependency>
        <dependency>
            <groupId>org.jline</groupId>
            <artifactId>jline-terminal</artifactId>
        </dependency>
        <dependency>
            <groupId>io.grpc</groupId>
            <artifactId>grpc-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
        </dependency>
        <dependency>
            <groupId>org.fusesource.jansi</groupId>
            <artifactId>jansi</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.solr</groupId>
            <artifactId>solr-solrj</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-core</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongodb-driver-sync</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>bson</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.avro</groupId>
            <artifactId>avro</artifactId>
        </dependency>
        <dependency>
            <groupId>org.reflections</groupId>
            <artifactId>reflections</artifactId>
        </dependency>
        <dependency>
            <groupId>jakarta.ws.rs</groupId>
            <artifactId>jakarta.ws.rs-api</artifactId>
        </dependency>
        <dependency>
            <groupId>com.beust</groupId>
            <artifactId>jcommander</artifactId>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
        </dependency>

        <!-- TODO Review -->
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-catalog</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.jline</groupId>
            <artifactId>jline-terminal-jna</artifactId>
            <scope>runtime</scope>
        </dependency>


        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-storage-core</artifactId>
            <type>test-jar</type>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-storage-hadoop-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga</groupId>
            <artifactId>opencga-storage-hadoop-core</artifactId>
            <scope>test</scope>
            <type>test-jar</type>
        </dependency>
        <dependency>
            <groupId>org.mockito</groupId>
            <artifactId>mockito-core</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.opencb.opencga.hadoop.thirdparty</groupId>
            <artifactId>${opencga-hadoop-shaded.artifactId}</artifactId>
            <version>${opencga.hadoop.thirdparty.version}</version>
            <scope>test</scope>
            <type>test-jar</type>
            <exclusions>
                <exclusion>
                    <groupId>org.yaml</groupId>
                    <artifactId>snakeyaml</artifactId>
                </exclusion>
            </exclusions>
        </dependency>


    </dependencies>

    <build>
        <finalName>opencga-app</finalName>
        <sourceDirectory>src/main/java</sourceDirectory>

        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>cli-usage.yml</include>
                </includes>
                <targetPath>${project.basedir}/target/classes</targetPath>
            </resource>
            <resource>
                <directory>app/cloud/docker/compose</directory>
                <filtering>true</filtering>
                <includes>
                    <include>docker-compose.yml</include>
                </includes>
                <targetPath>${project.basedir}/target/docker-compose</targetPath>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>appassembler-maven-plugin</artifactId>
                <version>1.10</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>assemble</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <repositoryName>libs</repositoryName>
                    <repositoryLayout>flat</repositoryLayout>
                    <useWildcardClassPath>false</useWildcardClassPath>
                    <!--By default, "etc".-->
                    <configurationDirectory>conf</configurationDirectory>
                    <!--Do we need to include the configuration folder in the classpath?-->
                    <includeConfigurationDirectoryInClasspath>false</includeConfigurationDirectoryInClasspath>
                    <environmentSetupFileName>../conf/${opencga.env.file}</environmentSetupFileName>
                    <programs combine.children="append">
                        <program>
                            <id>opencga.sh</id>
                            <mainClass>org.opencb.opencga.app.cli.main.OpencgaMain</mainClass>
                            <platforms>
                                <platform>unix</platform>
                            </platforms>
                        </program>
                        <program>
                            <id>opencga-admin.sh</id>
                            <mainClass>org.opencb.opencga.app.cli.admin.AdminMain</mainClass>
                            <platforms>
                                <platform>unix</platform>
                            </platforms>
                        </program>
                        <program>
                            <id>opencga-internal.sh</id>
                            <mainClass>org.opencb.opencga.app.cli.internal.InternalMain</mainClass>
                            <platforms>
                                <platform>unix</platform>
                            </platforms>
                        </program>
                        <program>
                            <id>opencga-clicompletion.sh</id>
                            <mainClass>org.opencb.opencga.app.cli.utils.CliCompletionMain</mainClass>
                            <platforms>
                                <platform>unix</platform>
                            </platforms>
                        </program>
                    </programs>
                </configuration>
            </plugin>
            <plugin>
                <artifactId>maven-antrun-plugin</artifactId>
                <version>1.8</version>
                <executions>
                    <execution>
                        <id>clean-libs</id>
                        <phase>clean</phase>
                        <configuration>
                            <target>
                                <echo>Preparing ${build.dir} folder</echo>
                                <exec executable="rm" failonerror="true">
                                    <arg value="-rf"/>
                                    <arg value="${build.dir}"/>
                                </exec>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>install-app</id>
                        <phase>install</phase>
                        <configuration>
                            <target>
                                <echo>Preparing ${build.dir} folder</echo>
                                <exec executable="rm" failonerror="true">
                                    <arg value="-rf"/>
                                    <arg value="${build.dir}"/>
                                </exec>

                                <exec executable="mkdir" failonerror="true">
                                    <arg value="-p"/>
                                    <arg value="${build.dir}/bin/utils"/>
                                    <arg value="${build.dir}/clients"/>
                                    <arg value="${build.dir}/conf"/>
                                    <arg value="${build.dir}/test"/>
                                    <!--
                                    <arg value="${build.dir}/misc/solr/${solr.configset.name}-${project.parent.version}"/>
                                    -->
                                </exec>

                                <echo>Copying to ${build.dir}</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="-r"/>
                                    <arg value="${app.dir}/analysis"/>
                                    <arg value="${app.dir}/cloud"/>
                                    <arg value="${app.dir}/cloud/docker/.dockerignore"/>
                                    <arg value="${app.dir}/conf"/>
                                    <arg value="${app.dir}/misc"/>
                                    <arg value="${app.dir}/monitor"/>
                                    <arg value="${project.basedir}/target/appassembler/libs"/>
                                    <arg value="${project.basedir}/../LICENSE"/>
                                    <arg value="${project.basedir}/../README.md"/>
                                    <arg value="${build.dir}"/>
                                </exec>

                                <echo>Copying docker-compose files</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/target/docker-compose/docker-compose.yml"/>
                                    <arg value="${build.dir}/cloud/docker/compose"/>
                                </exec>
                                <exec executable="mkdir" failonerror="true">
                                    <arg value="-p"/>
                                    <arg value="${build.dir}/cloud/docker/compose/conf"/>
                                </exec>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/../opencga-core/src/main/resources/log4j2.xml"/>
                                    <arg value="${project.basedir}/../opencga-core/src/main/resources/log4j2.internal.xml"/>
                                    <arg value="${project.basedir}/../opencga-core/src/main/resources/log4j2.service.xml"/>
                                    <arg value="${project.basedir}/../opencga-core/target/classes/configuration.yml"/>
                                    <arg value="${project.basedir}/../opencga-storage/opencga-storage-core/target/classes/storage-configuration.yml"/>
                                    <arg value="${project.basedir}/../opencga-client/target/classes/client-configuration.yml"/>
                                    <arg value="${build.dir}/cloud/docker/compose/conf"/>
                                </exec>

                                <exec executable="cp" failonerror="true">
                                    <arg value="-r"/>
                                    <arg value="${project.basedir}/../opencga-analysis/src/main/R/"/>
                                    <arg value="${build.dir}/analysis"/>
                                </exec>

                                <echo>Copying command lines and completion scripts to ${build.dir}/bin and ${build.dir}/completion
                                </echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/target/appassembler/bin/opencga.sh"/>
                                    <arg value="${project.basedir}/target/appassembler/bin/opencga-admin.sh"/>
                                    <arg value="${project.basedir}/target/appassembler/bin/opencga-internal.sh"/>
                                    <arg value="${build.dir}/bin"/>
                                </exec>

                                <exec executable="mkdir" failonerror="true">
                                    <arg value="-p"/>
                                    <arg value="${build.dir}/misc/git"/>
                                </exec>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/../opencga-core/target/generated-resources/org/opencb/opencga/core/git.properties"/>
                                    <arg value="${build.dir}/misc/git"/>
                                </exec>

                                <echo>Copying Python and R to ${build.dir}/clients</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="-r"/>
                                    <arg value="${project.basedir}/../opencga-client/src/main/python"/>
                                    <arg value="${build.dir}/clients"/>
                                </exec>

                                <exec executable="sed" failonerror="true">
                                    <arg value="-i"/>
                                    <arg value="s/PYOPENCGA_VERSION/${pyopencga.version}/"/>
                                    <arg value="${build.dir}/clients/python/setup.py"/>
                                </exec>
                                <exec executable="cp" failonerror="true">
                                    <arg value="-r"/>
                                    <arg value="${project.basedir}/../opencga-client/src/main/R"/>
                                    <arg value="${build.dir}/clients"/>
                                </exec>
                                <!-- We need to read DESCRIPTION from target folder because we have renamed the version -->
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/../opencga-client/target/classes/DESCRIPTION"/>
                                    <arg value="${build.dir}/clients/R/"/>
                                </exec>
                                <exec executable="cp" failonerror="true">
                                    <arg value="-r"/>
                                    <arg value="${project.basedir}/../opencga-client/src/main/javascript"/>
                                    <arg value="${build.dir}/clients"/>
                                </exec>

                                <echo>Copying configuration files</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/../opencga-core/target/classes/configuration.yml"/>
                                    <arg value="${project.basedir}/../opencga-core/target/classes/log4j2.xml"/>
                                    <arg value="${project.basedir}/../opencga-core/target/classes/log4j2.service.xml"/>
                                    <arg value="${project.basedir}/../opencga-core/target/classes/log4j2.internal.xml"/>
                                    <arg value="${project.basedir}/../opencga-storage/opencga-storage-core/target/classes/storage-configuration.yml"/>
                                    <arg value="${project.basedir}/../opencga-client/target/classes/client-configuration.yml"/>
<!--                                    <arg value="${project.basedir}/src/main/resources/usage.yml"/>-->
                                    <arg value="${build.dir}/conf"/>
                                </exec>

                                <exec executable="${project.basedir}/app/misc/solr/prepare_configsets.sh" failonerror="true">
                                    <arg value="${project.basedir}/.."/>
                                    <arg value="${project.parent.version}"/>
                                </exec>

                                <echo>Copying war file</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/../opencga-server/target/${opencga.war.name}.war"/>
                                    <arg value="${build.dir}"/>
                                </exec>

                                <exec executable="sed" failonerror="true">
                                    <arg value="-i"/>
                                    <arg value="s/REPLACEME_OPENCGA_VERSION/${project.parent.version}/"/>
                                    <arg value="${build.dir}/misc/demo/main.yml"/>
                                    <arg value="${build.dir}/misc/demo/corpasome/manifest.yml"/>
                                    <arg value="${build.dir}/cloud/kubernetes/charts/opencga/Chart.yaml"/>
                                    <arg value="${build.dir}/cloud/azure/arm-kubernetes/solr/solr-setup.sh"/>
                                </exec>
                                <exec executable="sed" failonerror="true">
                                    <arg value="-i"/>
                                    <arg value="s/REPLACEME_IVA_VERSION/${iva.version}/"/>
                                    <arg value="${build.dir}/cloud/kubernetes/charts/iva/Chart.yaml"/>
                                </exec>

                                <chmod perm="u+x">
                                    <fileset dir="${build.dir}">
                                        <include name="**/*.sh"/>
                                        <exclude name="**/opencga-env.sh"/>
                                    </fileset>
                                </chmod>

                                <echo>Create clicompletion</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="${project.basedir}/target/appassembler/bin/opencga-clicompletion.sh"/>
                                    <arg value="${build.dir}/bin/utils"/>
                                </exec>
                                <!-- We need to modify the BASEDIR to one level up, as this script will be at a sub folder-->
                                <exec executable="sed" failonerror="true">
                                    <arg value="-i"/>
                                    <arg value='s/BASEDIR=`cd "$PRGDIR\/.."/BASEDIR=`cd "$PRGDIR\/..\/.."/g'/>
                                    <arg value="${build.dir}/bin/utils/opencga-clicompletion.sh"/>
                                </exec>
                                <exec executable="${build.dir}/bin/utils/opencga-clicompletion.sh" failonerror="true">
                                    <arg value="${build.dir}/misc/completion"/>
                                </exec>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                    <execution>
                        <id>opencga-client</id>
                        <phase>install</phase>
                        <configuration>
                            <target>
                                <echo>Preparing 'opencga-client' folder</echo>
                                <exec executable="mkdir" failonerror="true">
                                    <arg value="-p"/>
                                    <arg value="${build.dir}/opencga-client-${project.parent.version}"/>
                                    <arg value="${build.dir}/opencga-client-${project.parent.version}/bin"/>
                                    <arg value="${build.dir}/opencga-client-${project.parent.version}/conf"/>
                                    <arg value="${build.dir}/opencga-client-${project.parent.version}/completion"/>
                                </exec>

                                <echo>Copying files to 'opencga-client' folder</echo>
                                <exec executable="cp" failonerror="true">
                                    <arg value="-r"/>
                                    <arg value="${build.dir}/libs"/>
                                    <arg value="${build.dir}/clients/python"/>
                                    <arg value="${build.dir}/clients/R"/>
                                    <arg value="${build.dir}/clients/javascript"/>
                                    <arg value="${build.dir}/LICENSE"/>
                                    <arg value="${build.dir}/README.md"/>
                                    <arg value="${build.dir}/${opencga.client.dir}"/>
                                </exec>

                                <exec executable="cp" failonerror="true">
                                    <arg value="${build.dir}/bin/opencga.sh"/>
                                    <arg value="${build.dir}/${opencga.client.dir}/bin"/>
                                </exec>

                                <exec executable="cp" failonerror="true">
                                    <arg value="${build.dir}/conf/client-configuration.yml"/>
                                    <arg value="${build.dir}/${opencga.client.dir}/conf"/>
                                </exec>

                                <exec executable="cp" failonerror="true">
                                    <arg value="${build.dir}/conf/client-configuration.yml"/>
                                    <arg value="${build.dir}/${opencga.client.dir}/conf"/>
                                </exec>

                                <exec executable="cp" failonerror="true">
                                    <arg value="${build.dir}/misc/completion/opencga"/>
                                    <arg value="${build.dir}/misc/completion/README.md"/>
                                    <arg value="${build.dir}/${opencga.client.dir}/completion"/>
                                </exec>

                                <echo>Creating 'opencga-client' tar.gz file</echo>
                                <exec executable="tar" failonerror="true">
                                    <arg value="-C"/>
                                    <arg value="${build.dir}"/>
                                    <arg value="-czf"/>
                                    <arg value="${build.dir}/${opencga.client.dir}.tar.gz"/>
                                    <arg value="${opencga.client.dir}"/>
                                </exec>

                                <echo>Deleting 'opencga-client' folder</echo>
                                <exec executable="rm" failonerror="true">
                                    <arg value="-rf"/>
                                    <arg value="${build.dir}/${opencga.client.dir}"/>
                                </exec>
                            </target>
                        </configuration>
                        <goals>
                            <goal>run</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
                <version>3.6.0</version>
                <executions>
                    <execution>
                        <id>analyze</id>
                        <goals>
                            <goal>analyze-only</goal>
                        </goals>
                        <configuration>
                            <failOnWarning>true</failOnWarning>
                            <ignoredUnusedDeclaredDependencies>
                                <ignoredUnusedDeclaredDependency>*</ignoredUnusedDeclaredDependency>
                            </ignoredUnusedDeclaredDependencies>
                            <ignoreAllNonTestScoped>true</ignoreAllNonTestScoped>
                            <ignoredNonTestScopedDependencies>
                                <ignoredNonTestScopedDependency>*</ignoredNonTestScopedDependency>
                            </ignoredNonTestScopedDependencies>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

    <profiles>
        <profile>
            <id>storage-binaries</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation>

            <dependencies>
                <dependency>
                    <groupId>org.opencb.opencga</groupId>
                    <artifactId>opencga-storage-benchmark</artifactId>
                    <version>${project.parent.version}</version>
                    <scope>provided</scope>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>install-storage-binaries</id>
                                <phase>install</phase>
                                <configuration>
                                    <target>
                                        <echo>Copying storage to ${build.dir}</echo>
                                        <exec executable="cp" failonerror="true">
                                            <arg value="-r"/>
                                            <arg value="${project.basedir}/../opencga-storage/build/bin"/>
                                            <arg value="${project.basedir}/../opencga-storage/build/benchmark"/>
                                            <arg value="${project.basedir}/../opencga-storage/build/libs/"/>
                                            <arg value="${build.dir}"/>
                                        </exec>
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>storage-hadoop</id>
            <activation>
                <property>
                    <name>!skipStorageHadoop</name>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.opencb.opencga</groupId>
                    <artifactId>opencga-storage-hadoop-core</artifactId>
                </dependency>
                <dependency>
                    <groupId>org.opencb.opencga</groupId>
                    <artifactId>${opencga-hadoop-lib.artifactId}</artifactId>
                    <version>${project.parent.version}</version>
                    <optional>true</optional>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>appassembler-maven-plugin</artifactId>
                        <version>1.10</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>assemble</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <programs>
                                <program>
                                    <id>opencga-storage-hadoop.sh</id>
                                    <mainClass>org.opencb.opencga.storage.hadoop.app.Main</mainClass>
                                    <platforms>
                                        <platform>unix</platform>
                                    </platforms>
                                </program>
                            </programs>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>install-hadoop</id>
                                <phase>install</phase>
                                <configuration>
                                    <target>
                                        <echo>Copying hadoop jar with dependencies to ${build.dir}</echo>
                                        <exec executable="cp" failonerror="true">
                                            <arg value="${project.basedir}/../opencga-storage/opencga-storage-hadoop/opencga-storage-hadoop-lib/opencga-storage-hadoop-lib-${opencga-hadoop-shaded.id}/target/opencga-storage-hadoop-lib-${opencga-hadoop-shaded.id}-${project.parent.version}-jar-with-dependencies.jar"/>
                                            <arg value="${build.dir}"/>
                                        </exec>
                                        <exec executable="cp" failonerror="true">
                                            <arg value="${project.basedir}/target/appassembler/bin/opencga-storage-hadoop.sh"/>
                                            <arg value="${build.dir}/misc/scripts/"/>
                                        </exec>
                                        <!-- We need to modify the BASEDIR to one level up, as this script will be at a sub folder-->
                                        <exec executable="sed" failonerror="true">
                                            <arg value="-i"/>
                                            <arg value='s/BASEDIR=`cd "$PRGDIR\/.."/BASEDIR=`cd "$PRGDIR\/..\/.."/g'/>
                                            <arg value="${build.dir}/misc/scripts/opencga-storage-hadoop.sh"/>
                                        </exec>
                                        <echo>Ensure that only one opencga-hadoop-shaded*.jar and opencga-storage-hadoop-compat*.jar libs are included</echo>
                                        <exec executable="bash" failonerror="true">
                                            <arg value="-c"/>
                                            <arg value="find ${build.dir}/libs/ -name 'opencga-hadoop-shaded*' | wc -l | grep -q '^1$'"/>
                                        </exec>
                                        <exec executable="bash" failonerror="true">
                                            <arg value="-c"/>
                                            <arg value="find ${build.dir}/libs/ -name 'opencga-storage-hadoop-compat-hbase*' | wc -l | grep -q '^1$'"/>
                                        </exec>
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>opencga-test</id>
            <activation>
                <property>
                    <name>!skipOpencgaTest</name>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.opencb.opencga</groupId>
                    <artifactId>opencga-test</artifactId>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.codehaus.mojo</groupId>
                        <artifactId>appassembler-maven-plugin</artifactId>
                        <version>1.10</version>
                        <executions>
                            <execution>
                                <phase>package</phase>
                                <goals>
                                    <goal>assemble</goal>
                                </goals>
                            </execution>
                        </executions>
                        <configuration>
                            <programs>
                                <program>
                                    <id>opencga-test.sh</id>
                                    <mainClass>org.opencb.opencga.test.manager.TestGeneratorManager</mainClass>
                                    <platforms>
                                        <platform>unix</platform>
                                    </platforms>
                                </program>
                            </programs>
                        </configuration>
                    </plugin>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>install-test-binaries</id>
                                <phase>install</phase>
                                <configuration>
                                    <target>
                                        <echo>Copying Acceptance testing files</echo>
                                        <exec executable="cp" failonerror="true">
                                            <arg value="${project.basedir}/target/appassembler/bin/opencga-test.sh"/>
                                            <arg value="${build.dir}/bin"/>
                                        </exec>
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>RClient</id>
            <activation>
                <activeByDefault>false</activeByDefault>
                <property>
                    <name>RClient</name>
                </property>
            </activation>
            <dependencies>
                <dependency>
                    <groupId>org.opencb.opencga</groupId>
                    <artifactId>opencga-client</artifactId>
                </dependency>
            </dependencies>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>R-client-compile</id>
                                <phase>install</phase>
                                <configuration>
                                    <target>
                                        <echo>Compiling R client</echo>
                                        <!-- FIXME : This is not working -->
                                        <exec executable="${build.dir}/clients/R/build.sh" failonerror="false">
                                            <arg value="${build.dir}/clients/R"/>
                                        </exec>
                                        <echo>Moving R client to ${build.dir}/clients/R/</echo>
                                        <exec executable="cp" failonerror="false">
                                            <arg value="/tmp/opencgaR_${opencgar.version}.tar.gz"/>
                                            <arg value="${build.dir}/clients/R/opencgaR_${project.parent.version}.tar.gz"/>
                                        </exec>
                                    </target>
                                </configuration>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
        <profile>
            <id>docker-build</id>
            <activation>
                <property>
                    <name>docker</name>
                </property>
            </activation>
            <properties>
                <docker.tag></docker.tag>
                <docker.images>base</docker.images>
                <docker.org>opencb</docker.org>
                <docker.server>docker.io</docker.server>
            </properties>
            <build>
                <plugins>
                    <plugin>
                        <artifactId>maven-antrun-plugin</artifactId>
                        <version>1.8</version>
                        <executions>
                            <execution>
                                <id>execute docker build</id>
                                <phase>install</phase>
                                <goals>
                                    <goal>run</goal>
                                </goals>
                                <configuration>
                                    <target>
                                        <echo>Execute docker</echo>
                                        <condition property="my.docker.action" value="push" else="build">
                                            <or>
                                                <equals arg1="${docker}" arg2="push"/>
                                                <equals arg1="${docker.push}" arg2="true"/>
                                            </or>
                                        </condition>
                                        <exec executable="${build.dir}/cloud/docker/docker-build.py" failonerror="true">
                                            <arg value="--images"/>
                                            <arg value="${docker.images}"/>
                                            <arg value="--org"/>
                                            <arg value="${docker.org}"/>
                                            <arg value="--tag"/>
                                            <arg value="${docker.tag}"/>
                                            <arg value="--server"/>
                                            <arg value="${docker.server}"/>
                                            <arg value="${my.docker.action}"/>
                                        </exec>
                                    </target>
                                </configuration>
                            </execution>
                        </executions>
                    </plugin>
                </plugins>
            </build>
        </profile>
    </profiles>
</project>
