<!--
 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 name="mongodb" default="all">

    <property environment="env"/>
    <condition property="mcf-dist" value="${env.MCFDISTPATH}">
        <isset property="env.MCFDISTPATH"/>
    </condition>
    <property name="abs-dist" location="../../dist"/>
    <condition property="mcf-dist" value="${abs-dist}">
        <not>
            <isset property="env.MCFDISTPATH"/>
        </not>
    </condition>

    <import file="${mcf-dist}/connector-build.xml"/>

    <target name="download-cleanup">
        <delete>
            <fileset dir="test-materials" excludes="README*.txt"/>
        </delete>
    </target>

    <path id="connector-classpath">
        <path refid="mcf-connector-build.connector-classpath"/>
        <fileset dir="../../lib">
            <include name="mongo-java-driver*.jar"/>
        </fileset>
    </path>

    <target name="lib" depends="mcf-connector-build.lib,precompile-check" if="canBuild">
        <mkdir dir="dist/lib"/>
        <copy todir="dist/lib">
            <fileset dir="../../lib">
                <include name="mongo-java-driver*.jar"/>
            </fileset>
        </copy>
    </target>

    <target name="deliver-connector" depends="mcf-connector-build.deliver-connector">
        <antcall target="general-add-output-connector">
            <param name="connector-label" value="MongoDB"/>
            <param name="connector-class"
                   value="org.apache.manifoldcf.agents.output.mongodboutput.MongodbOutputConnector"/>
        </antcall>
    </target>
	
    <property name="embedded-mongodb.version.label" value="2.2.0"/>
    <property name="embedded-mongodb.artifactId" value="de.flapdoodle.embed.mongo"/>
    <property name="embedded-mongodb-package" value="de/flapdoodle/embed"/>    
    <property name="embedded-mongodb.snapshot-jar" value="${embedded-mongodb.artifactId}-${embedded-mongodb.version.label}.jar"/>

    <property name="embedded-mongodb.process.version.label" value="2.0.5"/>
    <property name="embedded-mongodb.process.artifactId" value="de.flapdoodle.embed.process"/>
    <property name="embedded-mongodb.process-package" value="de/flapdoodle/embed"/>    
    <property name="embedded-mongodb.process.jar" value="${embedded-mongodb.process.artifactId}-${embedded-mongodb.process.version.label}.jar"/>
	
    <target name="calculate-testcode-condition">
        <available file="test-materials/${embedded-mongodb.snapshot-jar}" property="tests-present"/>
        <available file="test-materials/${embedded-mongodb.process.jar}" property="tests-present"/>
	  	
        <copy todir="${mcf-dist}/test-lib">
          <fileset dir="test-materials">
              <include name="de.flapdoodle.embed*.jar"/>
          </fileset>
        </copy>
    </target>

    <target name="pretest-warn" depends="calculate-testcode-condition" unless="tests-present">
        <echo message="Need Embedded MongoDB download in order to run tests - run ant make-deps"/>
    </target>
	
    <target name="download-dependencies">
      <property name="sonatype-maven-repo-releases" value="https://oss.sonatype.org/content/repositories/public" />
      <get src="${sonatype-maven-repo-releases}/${embedded-mongodb-package}/${embedded-mongodb.artifactId}/${embedded-mongodb.version.label}/${embedded-mongodb.snapshot-jar}" dest="test-materials/${embedded-mongodb.snapshot-jar}"/>
      <get src="${sonatype-maven-repo-releases}/${embedded-mongodb.process-package}/${embedded-mongodb.process.artifactId}/${embedded-mongodb.process.version.label}/${embedded-mongodb.process.jar}" dest="test-materials/${embedded-mongodb.process.jar}"/>
    </target>

</project>
