<!--
 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="meridio" 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="calculate-condition">
        <available file="lib-proprietary/MeridioDMWS_axis.wsdl" property="meridioDMWS_axisStatus"/>
        <available file="lib-proprietary/MeridioRMWS_axis.wsdl" property="meridioRMWS_axisStatus"/>
        <available file="lib-proprietary/DMDataSet_castor.xsd" property="DMDataSetStatus"/>
        <available file="lib-proprietary/RMDataSet_castor.xsd" property="RMDataSetStatus"/>
        <available file="lib-proprietary/RMClassificationDataSet_castor.xsd" property="RMClassificationDataSetStatus"/>
        <condition property="canBuild">
            <and>
                <isset property="meridioDMWS_axisStatus"/>
                <isset property="meridioRMWS_axisStatus"/>
                <isset property="DMDataSetStatus"/>
                <isset property="RMDataSetStatus"/>
                <isset property="RMClassificationDataSetStatus"/>
            </and>
        </condition>
    </target>

    <target name="precompile-check" depends="calculate-condition" unless="canBuild">
        <echo message="Meridio Connector cannot be built without MeridioDMWS_axis.wsdl, MeridioRMWS_axis.wsdl, DMDataSet_castor.xsd, RMDataSet_castor.xsd, and RMClassificationDataSet_castor.xsd"/>
    </target -->

    <target name="copy-wsdls" depends="precompile-check" if="canBuild">
        <mkdir dir="build/wsdls"/>
        <copy tofile="build/wsdls/MeridioRMWS.wsdl" file="wsdls/MeridioRMWS_axis.wsdl"/>
        <copy tofile="build/wsdls/MeridioDMWS.wsdl" file="wsdls/MeridioDMWS_axis.wsdl"/>
        <copy tofile="build/wsdls/RMDataSet.xsd" file="wsdls/RMDataSet_castor.xsd"/>
        <copy tofile="build/wsdls/DMDataSet.xsd" file="wsdls/DMDataSet_castor.xsd"/>
        <copy tofile="build/wsdls/RMClassificationDataSet.xsd" file="wsdls/RMClassificationDataSet_castor.xsd"/>
        <copy tofile="build/wsdls/MetaCartaWS.wsdl" file="wsdls/MetaCartaWS_axis.wsdl"/>
    </target>
    
    <target name="classcreate-wsdls" depends="copy-wsdls,precompile-check" if="canBuild">
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="build/wsdls/MeridioDMWS.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="build/wsdls/MeridioRMWS.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="build/wsdls/MetaCartaWS.wsdl"/>
        </antcall>
    </target>
    
    <target name="classcreate-xsds" depends="precompile-check" if="canBuild">
        <delete dir="build/xsdjava"/>
        <antcall target="classcreate-xsd">
            <param name="xsdname" value="build/wsdls/DMDataSet.xsd"/>
            <param name="packagename" value="meridio.DMDataSet"/>
        </antcall>
        <antcall target="classcreate-xsd">
            <param name="xsdname" value="build/wsdls/RMClassificationDataSet.xsd"/>
            <param name="packagename" value="meridio.RMClassificationDataSet"/>
        </antcall>
        <antcall target="classcreate-xsd">
            <param name="xsdname" value="build/wsdls/RMDataSet.xsd"/>
            <param name="packagename" value="meridio.RMDataSet"/>
        </antcall>
    </target>

    <target name="integration" depends="precompile-check" if="canBuild">
        <mkdir dir="dist/integration"/>
        <copy todir="dist/integration">
          <fileset dir="integration">
              <include name="**/*.Exe"/>
              <include name="**/*.Ini"/>
              <include name="**/*.msi"/>
              <include name="*.txt"/>
          </fileset>
        </copy>
    </target>

    <target name="deliver-connector" depends="mcf-connector-build.deliver-connector">
        <antcall target="general-add-authority-connector">
            <param name="connector-label" value="Meridio"/>
            <param name="connector-class" value="org.apache.manifoldcf.authorities.authorities.meridio.MeridioAuthority"/>
        </antcall>
        <antcall target="general-add-repository-connector">
            <param name="connector-label" value="Meridio"/>
            <param name="connector-class" value="org.apache.manifoldcf.crawler.connectors.meridio.MeridioConnector"/>
        </antcall>
    </target>

</project>
