<!--
 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="sharepoint" 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/DspSts.wsdl" property="DspStsStatus"/>
        <available file="lib-proprietary/Lists.wsdl" property="ListsStatus"/>
        <available file="lib-proprietary/Permissions.wsdl" property="PermissionsStatus"/>
        <available file="lib-proprietary/usergroup.wsdl" property="usergroupStatus"/>
        <available file="lib-proprietary/versions.wsdl" property="versionsStatus"/>
        <available file="lib-proprietary/webs.wsdl" property="websStatus"/>
        <condition property="canBuild">
            <and>
                <isset property="DspStsStatus"/>
                <isset property="ListsStatus"/>
                <isset property="PermissionsStatus"/>
                <isset property="usergroupStatus"/>
                <isset property="versionsStatus"/>
                <isset property="websStatus"/>
            </and>
        </condition>
    </target>
    
    <target name="precompile-check" depends="calculate-condition" unless="canBuild">
        <echo message="SharePoint Connector cannot be built without DspSts.wsdl, Lists.wsdl, Permissions.wsdl, usergroup.wsdl, versions.wsdl, and webs.wsdl"/>
    </target -->

    <target name="classcreate-wsdls" depends="precompile-check" if="canBuild">
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/DspSts.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/Lists.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/MCPermissions.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/Permissions.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/usergroup.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/versions.wsdl"/>
        </antcall>
        <antcall target="classcreate-wsdl">
            <param name="wsdlname" value="wsdls/webs.wsdl"/>
        </antcall>
    </target>

    <target name="integration">
        <mkdir dir="dist/integration/sharepoint-2007"/>
        <copy todir="dist/integration/sharepoint-2007">
          <fileset dir="../../lib/sharepoint-2007"/>
        </copy>
        <mkdir dir="dist/integration/sharepoint-2010"/>
        <copy todir="dist/integration/sharepoint-2010">
          <fileset dir="../../lib/sharepoint-2010"/>
        </copy>
        <mkdir dir="dist/integration/sharepoint-2013"/>
        <copy todir="dist/integration/sharepoint-2013">
          <fileset dir="../../lib/sharepoint-2013"/>
        </copy>
        <mkdir dir="dist/integration/sharepoint-2016"/>
        <copy todir="dist/integration/sharepoint-2016">
          <fileset dir="../../lib/sharepoint-2016"/>
        </copy>
    </target>

    <!-- target name="download-dependencies">
        <get src="http://www.wssdemo.com/_vti_bin/Permissions.asmx?wsdl=true" dest="lib-proprietary/Permissions.wsdl"/>
        <get src="http://www.wssdemo.com/_vti_bin/DspSts.asmx?wsdl=true" dest="lib-proprietary/DspSts.wsdl"/>
        <get src="http://www.wssdemo.com/_vti_bin/Lists.asmx?wsdl=true" dest="lib-proprietary/Lists.wsdl"/>
        <get src="http://www.wssdemo.com/_vti_bin/usergroup.asmx?wsdl=true" dest="lib-proprietary/usergroup.wsdl"/>
        <get src="http://www.wssdemo.com/_vti_bin/versions.asmx?wsdl=true" dest="lib-proprietary/versions.wsdl"/>
        <get src="http://www.wssdemo.com/_vti_bin/webs.asmx?wsdl=true" dest="lib-proprietary/webs.wsdl"/>
    </target>

    <target name="download-cleanup">
        <delete>
            <fileset dir="lib-proprietary" excludes="README.txt"/>
        </delete>
    </target -->

    <target name="deliver-connector" depends="mcf-connector-build.deliver-connector">
        <antcall target="general-add-repository-connector">
            <param name="connector-label" value="SharePoint"/>
            <param name="connector-class" value="org.apache.manifoldcf.crawler.connectors.sharepoint.SharePointRepository"/>
        </antcall>
        <antcall target="general-add-authority-connector">
            <param name="connector-label" value="SharePoint/ActiveDirectory"/>
            <param name="connector-class" value="org.apache.manifoldcf.authorities.authorities.sharepoint.SharePointADAuthority"/>
        </antcall>
        <antcall target="general-add-authority-connector">
            <param name="connector-label" value="SharePoint/Native"/>
            <param name="connector-class" value="org.apache.manifoldcf.authorities.authorities.sharepoint.SharePointAuthority"/>
        </antcall>
    </target>

</project>
